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

		if (!HeroInfo.INSTANCE.isHeroAlive()) {
			stateMachine.changeState(StateName.toCastle);
			return;
		}

		if (!stateMachine.isHeroWithinAggroRangeAndReachable()) {
			stateMachine.changeState(StateName.toCastle);
			return;
		}
		if (!enemy.isRangedAttacker()) {
			handlePositionChange();
		}

		if (!enemy.isMidMovement()) {
			if (!isHeroWithinAttackRange()) {
				seekToHero();
			}

			if (enemy.isRangedAttacker()) {
				rangedKeepCorrectDistance();
			}

			enemy.faceTarget(HeroInfo.INSTANCE.getHero());
		}
		enemy.tryToAttackTarget(HeroInfo.INSTANCE.getHero());
	}