public SpectatorPlayerState(Player _player)
        {
            player = _player;

            cameraPosition = nullPosition;
            cameraView = nullView;
            cameraUp = nullUp;

            index = 0;

            controls = new AutoTexture2D(ContentLoadManager.loadTexture("Textures/spectator_mode"), new Vector2(27, 433));

            cameraPositionOffset = new Vector3(0, 15, -50);
            cameraLookAt = new Vector3(0, 0, 1000);

            // Find a team to start on
            Random random = new Random(System.DateTime.Now.Millisecond);
            if (random.Next() % 2 == 0)
            {
                currentTeam = Ship.Team.Esxolus;
            }
            else
            {
                currentTeam = Ship.Team.Halk;
            }

            follow = null;
        }
Exemple #2
0
    private void AcquireTarget()
    {
        Ship[] ships = FindObjectsOfType <Ship>();

        Ship.Team myTeam          = myShip.currentTeam;
        Ship      closestShip     = null;
        float     closestDistance = range;

        foreach (Ship ship in ships)
        {
            if (!ship.Active || ship.currentTeam == myTeam || ship.currentTeam == Ship.Team.Neutral)
            {
                continue;
            }

            float distance = Vector3.Distance(transform.position, ship.transform.position);
            if (distance <= range && distance < closestDistance)
            {
                closestShip     = ship;
                closestDistance = distance;
            }
        }

        if (closestShip == null)
        {
            currentTarget = null;
        }
        else
        {
            currentTarget = closestShip;
        }
    }
        public override void ProcessInput()
        {
            if (InputManager.isCombinedPrimaryFirePressed(player.PlayerNumber))
            {
                switch (currentTeam)
                {
                    case Ship.Team.Esxolus:
                        currentTeam = Ship.Team.Halk;
                        break;
                    case Ship.Team.Halk:
                        currentTeam = Ship.Team.Esxolus;
                        break;
                }
                follow = null;
                index = 0;
            }
            else { }

            if (InputManager.isCombinedLeftBumperPressed(player.PlayerNumber)
                || InputManager.isCombinedRightBumperPressed(player.PlayerNumber))
            {
                follow = null;
                List<Fighter> fighters = null;
                switch (currentTeam)
                {
                    case Ship.Team.Esxolus:
                        fighters = ((GameScene)Space394Game.GameInstance.CurrentScene).EsxolusFighters;
                        break;
                    case Ship.Team.Halk:
                        fighters = ((GameScene)Space394Game.GameInstance.CurrentScene).HalkFighters;
                        break;
                }
                if (InputManager.isCombinedLeftBumperPressed(player.PlayerNumber))
                {
                    if (index < 0 || index >= fighters.Count)
                    {
                        index = fighters.Count - 1;
                        follow = null;
                    }
                    else { }
                    while (fighters != null && follow == null && fighters.Count > 0 && index >= 0)
                    {
                        if (fighters[index].Active)
                        {
                            follow = fighters[index];
                        }
                        else { }
                        index--;
                    }
                    if (index < 0 || index >= fighters.Count)
                    {
                        index = fighters.Count-1;
                        follow = null;
                    }
                    else { }
                }
                else if (InputManager.isCombinedRightBumperPressed(player.PlayerNumber))
                {
                    if (index < 0 || index >= fighters.Count)
                    {
                        index = fighters.Count - 1;
                        follow = null;
                    }
                    else { }
                    while (fighters != null && follow == null && fighters.Count > 0 && index < fighters.Count)
                    {
                        if (fighters[index].Active)
                        {
                            follow = fighters[index];
                        }
                        else { }
                        index++;
                    }
                    if (index < 0 || index >= fighters.Count)
                    {
                        index = 0;
                        follow = null;
                    }
                    else { }
                } else { }
            }
            else { }

            if (InputManager.isCombinedToggleObjectivesPressed(player.PlayerNumber))
            {
                player.ObjectivesDrawActive = !player.ObjectivesDrawActive;
            }
            else { }

            if (InputManager.isCombinedPausePressed(player.PlayerNumber))
            {
                player.pause();
            }
            else { }
        }
        public override void Update(float deltaTime)
        {
            HandleInput();

            #if DEBUG
            if (murder)
            {
                foreach (SceneObject item in SceneObjects.Values)
                {
                    if (item is Fighter)
                    {
                        if (!((Fighter)item).PlayerControlled)
                        {
                            item.onCollide(null, HYPERBEAM);
                        }
                        else { }
                    }
                    else { }
                }
                murder = false;
            }
            else { }

            if (waveNow)
            {
                waveTimer = 0;
                waveNow = false;
            }
            else { }

            if (invincibility)
            {
                foreach (SceneObject item in SceneObjects.Values)
                {
                    if (item is Fighter)
                    {
                        if (((Fighter)item).PlayerControlled)
                        {
                            ((Fighter)item).Health = STAR_POWER;
                            ((Fighter)item).SecondaryAmmo = (int)STAR_POWER;
                        }
                        else { }
                    }
                    else { }
                }
                invincibility = false;
            }
            else { }
            #endif

            updateAI(deltaTime);
            updateParticles(deltaTime);

            if (currentState == state.game)
            {
                waveReleased = false;
                waveTimer -= deltaTime;
                if (waveTimer <= 0)
                {
                    foreach (SpawnShip ship in spawnShips)
                    {
                        ship.SpawnWave();
                    }
                    waveTimer = WAVE_TIMER;
                    waveReleased = true;
                }
                else { }
            }
            else { }

            collisionManager.Update(deltaTime);

            Turret.updateGlobalTurretTimer(deltaTime);
            AI.updateGlobalAITimer(deltaTime);

            if (esxolusEvents.Count != 0)
            {
                esxolusEvents.Peek().Update(deltaTime);
                if (esxolusEvents.Peek().IsComplete())
                {
                    esxolusEvents.Dequeue();
                }
                else { }
            }
            else { }

            if (halkEvents.Count != 0)
            {
                halkEvents.Peek().Update(deltaTime);
                if (halkEvents.Peek().IsComplete())
                {
                    halkEvents.Dequeue();
                }
                else { }
            }

            base.Update(deltaTime);

            LogCat.updateValue("WaveTimer", "" + waveTimer);
            LogCat.updateValue("Exsolus Spawn Points", "" + esxolusSpawnPointsRemaining);
            LogCat.updateValue("Halk Spawn Points", "" + halkSpawnPointsRemaining);

            if (currentState == state.game)
            {
                //if (esxolusSpawnPointsRemaining <= 0)
                if (esxolusEvents.Count == 0)
                {
                    currentState = state.victory;
                    victor = Ship.Team.Halk;
                    foreach (Player player in Space394Game.GameInstance.Players)
                    {
                        player.CurrentState = new ScoreboardPlayerState(player);
                    }
                }
                else if (halkEvents.Count == 0) //(halkSpawnPointsRemaining <= 0)
                {
                    currentState = state.victory;
                    victor = Ship.Team.Esxolus;
                    foreach (Player player in Space394Game.GameInstance.Players)
                    {
                        player.CurrentState = new ScoreboardPlayerState(player);
                    }
                }
                else { }
            } // Let's only have one winner, huh
            else { }

            if (currentState == state.loading)
            {
                currentState = state.game;
            }
            else { }
        }