Esempio n. 1
0
        public void OnUpdate(ShipController controller)
        {
            if (_closestSatellite == null || !_closestSatellite.IsAlive() || !controller.IsTargetInSight(_closestSatellite))
            {
                Satellite closestSatellite = _target.GetNearestSatellite(controller.transform.position);
                if (closestSatellite == null)
                {
                    Planet nextPlanetToAttack = _levelManager.GetPlanetToAttack();
                    if (nextPlanetToAttack != null)
                    {
                        controller.SetState(new GoToPlanet(nextPlanetToAttack, new AttackPlanet(nextPlanetToAttack)));
                    }
                    else
                    {
                        controller.SetState(null);
                    }
                    return;
                }
                _closestSatellite = closestSatellite;
            }

            Vector3 targetForward = (_closestSatellite.transform.position - controller.transform.position);

            targetForward.y = 0.0f;

            controller.RotateTowards(targetForward.normalized);

            if (_attackState == AttackState.TRY_SHOOT)
            {
                UpdateRotateTowardsEnemy(controller, _closestSatellite);
            }
            else if (_attackState == AttackState.WAIT_AFTER_ATTACK)
            {
                UpdateWaitAfterAttack(controller);
            }
        }