@Override
	public void run() {
		List<UIEvent> lastEvents = Model.getModel().getInteractionStack().getLastEvents(2);
		if (lastEvents.get(0).getEventType() != EventType.MOUSE_BUTTON_UP
				|| lastEvents.get(0).getButton() != 1
				|| lastEvents.get(1).getEventType() != EventType.MOUSE_BUTTON_DOWN
				|| Model.getModel().getActionSelection().isEmpty()
				|| Model.getModel().getSimpleSelection().isEmpty()) {
			return;
		}

		// IMPROVE Clean this : we use a Selectable, when we would need a Ship.
		// Therefore, we have an extraneous cast.
		// However, we might attack something else than ships ...
		Entity targetShip = Model.getModel().getActionSelection().getFirst();
		if (!(targetShip instanceof Ship)) {
			return;
		}

		for (Entity selectable : Model.getModel().getSimpleSelection()) {
			if (selectable instanceof Ship && selectable != targetShip) {
				Ship ship = (Ship) selectable;

				// Remove existing movement and combat behaviors
				ship.removeBehaviorsByClass(Movement.class);
				ship.removeBehaviorsByClass(InflictLaserDamage.class);

				// Add new arrive behavior
				ship.addBehavior(new Follow(selectable, targetShip, InflictLaserDamage.MAX_RANGE * 0.5f));

				// Add new combat behavior
				InflictLaserDamage inflictLaserDamage = new InflictLaserDamage(ship, targetShip);
				ship.addBehavior(inflictLaserDamage);
			}
		}
	}