void update(int delta) {
		super.update(delta);

		if (!targetTower.isAlive()) {
			stateMachine.changeState(StateName.toCastle);
		}

		if (stateMachine.isHeroWithinAggroRangeAndReachable()) {
			stateMachine.changeState(StateName.toHero);
			return;
		} else if (!stateMachine.isSomeTowerWithinAggroRangeAndReachable()) {
			stateMachine.changeState(StateName.toCastle);
			return;
		}

		handlePositionChange();
		if (!enemy.isMidMovement()) {
			if (!isTowerWithinAttackRange()) {
				seekToTower();
			}
			enemy.faceTarget(targetTower);
		}
		enemy.tryToAttackTarget(targetTower);
	}