Esempio n. 1
0
        private void Update()
        {
            if (GameManager.i.isPaused)
            {
                return;
            }

            if (Input.GetAxis("Horizontal") > 0)
            {
                artileryCommander.MoveArtileryClockwise();
            }
            if (Input.GetAxis("Horizontal") < 0)
            {
                artileryCommander.MoveArtileryCounterClockwise();
            }
            if (Input.GetAxis("Vertical") > 0)
            {
                shieldCommander.MoveShieldClockwise();
            }
            if (Input.GetAxis("Vertical") < 0)
            {
                shieldCommander.MoveShieldCounterClockwise();
            }
            if (Input.GetKeyDown(KeyCode.Space))
            {
                artileryCommander.HoldFire();
            }
            if (Input.GetKeyUp(KeyCode.Space))
            {
                artileryCommander.ReleaseFire();
            }
        }
Esempio n. 2
0
        private void Update()
        {
            if (target != null)
            {
                Debug.DrawLine(transform.position, target.transform.position, Color.green);
            }
            Debug.DrawRay(transform.position, artileryCommander.aimDirection * 10, Color.red);
            if (targetDirection != null)
            {
                Debug.DrawRay(transform.position, targetDirection.Value * 10, Color.blue);
            }


            if (damageable.isDead)
            {
                return;
            }

            if (target != null && target.isDead)
            {
                target = null;
                state  = AIState.EnemySearch;
            }

            AimIfNeeded();

            switch (state)
            {
            case AIState.EnemySearch:
                var planets = GameManager.i.GetAlivePlanets();
                if (planets.Length == 0)
                {
                    return;
                }
                Planet nearestPlanet = null;
                foreach (var planet in planets)
                {
                    if (planet.gameObject.name == this.gameObject.name)
                    {
                        continue;
                    }
                    var distance = Vector3.Distance(transform.position, planet.transform.position);
                    if (nearestPlanet == null)
                    {
                        nearestPlanet = planet;
                    }
                    else
                    {
                        var distanceToNearestPlanet = Vector3.Distance(transform.position, nearestPlanet.transform.position);
                        if (distance < distanceToNearestPlanet)
                        {
                            nearestPlanet = planet;
                        }
                    }
                }
                target = nearestPlanet.GetComponent <Damageable>();
                state  = AIState.Aiming;
                break;

            case AIState.Aiming:
                if (aimed)     // aimed
                {
                    state = AIState.HoldingFire;
                }
                break;

            case AIState.HoldingFire:
                if (!artileryCommander.isHoldingFire)
                {
                    artileryCommander.HoldFire();
                }
                else
                {
                    if (artileryCommander.currentProgressPercent <= .1f)
                    {
                        return;
                    }
                    else
                    {
                        artileryCommander.ReleaseFire();
                        state = AIState.OnCoolDown;
                    }
                }
                break;

            case AIState.OnCoolDown:

                if (artileryCommander.isOnCooldown)
                {
                    return;
                }
                else
                {
                    state = AIState.EnemySearch;
                }

                break;
            }
        }