예제 #1
0
 public override void Update(GameTime gametime, ScavengerManager scavengerManager)
 {
     if (health < testHSHealth)
     {
         DamagedTextureMap.Update();
         speed = E1SpeedDamaged;
     }
     base.Update(gametime, scavengerManager);
 }
예제 #2
0
 public override bool isOver(ScavengerManager scavengerManager)
 {
     if (enemiesOnScreen.Count > 0)
         return enemiesOnScreen[0].isLooted && scavengerManager.getActiveScavenger().action == 0;
     return false;
 }
예제 #3
0
        public virtual void Update(GameTime gametime, ScavengerManager scavengerManager)
        {
            if (Alive && scavengerManager.getActiveScavenger().Alive)
            {
                if (wave.layout.pather.intersectsWith(Position, Width, Height, scavengerManager.getActiveScavenger().Position,
                    scavengerManager.getActiveScavenger().Width, scavengerManager.getActiveScavenger().Height))
                {
                    isFiring = true;
                    WaveManager.scavengerShotSound.Play();
                    scavengerManager.getActiveScavenger().Alive = false;
                    beginFiringTime = gametime.TotalGameTime.TotalMilliseconds;
                }
            }
            if (isFiring)
            {
                if (gametime.TotalGameTime.TotalMilliseconds - beginFiringTime > firingAnimationRate) isFiring = false;
            }

            if (Alive && !isFiring)
            {
                //Check if at trench
                if (wave.layout.pather.atTrenchEntrance(Position, Width, Height))
                {
                    //If the scavenger is there, kill both
                    if (scavengerManager.getActiveScavenger().Alive && scavengerManager.getActiveScavenger().action == 0)
                    {
                        WaveManager.scavengerShotSound.Play();
                        scavengerManager.getActiveScavenger().Alive = false;
                        beginFiringTime = gametime.TotalGameTime.TotalMilliseconds;
                        Alive = false;
                        toShoot = new Vector2(scavengerManager.getActiveScavenger().Position.X +
                            scavengerManager.getActiveScavenger().Width / 2, scavengerManager.getActiveScavenger().Position.Y
                            + scavengerManager.getActiveScavenger().Height / 4);
                    }
                    else //Otherwise, game over
                    {
                        MainGame.gameOver = true;
                    }
                }
                else
                {
                    Position = wave.layout.pather.Move(Position, true, speed);
                    EnemyTextureMap.Update();
                }
            }
        }
예제 #4
0
 /// <summary>
 /// Allows the game to perform any initialization it needs to before starting to run.
 /// This is where it can query for any required services and load any non-graphic
 /// related content.  Calling base.Initialize will enumerate through any components
 /// and initialize them as well.
 /// </summary>
 protected override void Initialize()
 {
     font = Content.Load<SpriteFont>("Fonts\\Font");
     player = new Player();
     crosshair = new Crosshair();
     sniperRifle = new SniperRifle();
     machineGun = new MachineGun();
     weapon = sniperRifle;
     sniperRifle.isSelected = true;
     machineGun.isSelected = false;
     waveManager = new WaveManager();
     scavengerManager = new ScavengerManager();
     currentScavengeCommand = 0;
     victoryTexture = new AnimatedSprite(Content.Load<Texture2D>("Graphics\\Victory"), 3, 2, animationSpeed);
     base.Initialize();
 }
예제 #5
0
 public virtual bool isOver(ScavengerManager scavengerManager)
 {
     if (enemiesToSpawn.Count == 0)
     {
         for (int i = 0; i < enemiesOnScreen.Count; i++)
         {
             if (enemiesOnScreen[i].Alive) return false;
         }
         return true;
     }
     return false;
 }
예제 #6
0
 public override void Update(GameTime gametime, ScavengerManager scavengerManager)
 {
     if (Alive && !isHoldingShield)
     {
         for (int i = 0; i < wave.enemiesOnScreen.Count; i++)
         {
             if (wave.enemiesOnScreen[i] != this)
             {
                 if (!wave.enemiesOnScreen[i].Alive && intersectsLow(wave.enemiesOnScreen[i]) && isPickupable(wave.enemiesOnScreen[i]))
                 {
                     isHoldingShield = true;
                     wave.enemiesOnScreen[i].Position = wave.layout.offscreenPosition;
                     loot.AddRange(wave.enemiesOnScreen[i].loot);
                     break;
                 }
             }
         }
     }
     if (isHoldingShield) shieldTextureMap.Update();
     base.Update(gametime, scavengerManager);
 }
예제 #7
0
 public void Update(GameTime gametime, ScavengerManager scavengerManager)
 {
     if (waveStartTime == 0) waveStartTime = gametime.TotalGameTime.TotalMilliseconds;
     else if ((spawnTimings.Count > 0) && spawnTimings[0] <= gametime.TotalGameTime.TotalMilliseconds - waveStartTime)
     {
         enemiesToSpawn[0].Initialize(contentManager, layout.enemySpawnPoint(), lootList[0], this);
         enemiesOnScreen.Add(enemiesToSpawn[0]);
         enemiesToSpawn.RemoveAt(0);
         spawnTimings.RemoveAt(0);
         lootList.RemoveAt(0);
     }
     for (int i = 0; i < enemiesOnScreen.Count; i++)
     {
         enemiesOnScreen[i].Update(gametime, scavengerManager);
     }
 }
예제 #8
0
 public void setScavengerManager(ScavengerManager scavengermanager)
 {
     scavengerManager = scavengermanager;
 }
예제 #9
0
        public void Update(GameTime gametime, ScavengerManager scavengerManager)
        {
            if (State == 0)
            {
                if (lastNumScavengers == -1)
                {
                    lastNumScavengers = scavengerManager.numberOfLiveScavengers();
                    deathThisRound = (lastNumScavengers < MainGame.numStartingLives);
                }
                else
                {
                    deathThisRound = scavengerManager.numberOfLiveScavengers() < lastNumScavengers;
                    lastNumScavengers = scavengerManager.numberOfLiveScavengers();
                }

                if (lastNumScavengers == 0)
                {
                    talkToButtons.Add(new Button(namePositionsL[sampleNames.Count], namePositionsR[sampleNames.Count], emptyQuestion, nameOffset));
                    talkToButtonsHover.Add(false);
                    for (int i = 0; i < MainGame.numStartingLives; i++)
                    {
                        deadNames.Add(new Button(namePositionsL[i], namePositionsR[i], sampleNames[i] + deathAddition, nameOffset));
                    }
                }
                else
                {
                    //Don't let dead scavnger's names be clickable
                    for (int i = 0; i < MainGame.numStartingLives - lastNumScavengers; i++)
                    {
                        deadNames.Add(new Button(namePositionsL[i], namePositionsR[i], sampleNames[i]+deathAddition, nameOffset));
                    }
                    for (int i = MainGame.numStartingLives - lastNumScavengers; i < sampleNames.Count; i++)
                    {
                        talkToButtons.Add(new Button(namePositionsL[i], namePositionsR[i], sampleNames[i], nameOffset));
                        talkToButtonsHover.Add(false);
                    }
                    talkToButtons.Add(new Button(namePositionsL[sampleNames.Count], namePositionsR[sampleNames.Count], dismissQuestion, nameOffset));
                    talkToButtonsHover.Add(false);
                }

                whichButtonHighlighted = 0;
                State = 1;
            }

            if (State == 1)
            {
                if (MainGame.currentGamepadState.IsConnected)
                {
                    if (MainGame.currentGamepadState.DPad.Up == ButtonState.Pressed && MainGame.previousGamepadState.DPad.Up != ButtonState.Pressed ||
                        MainGame.currentGamepadState.DPad.Left == ButtonState.Pressed && MainGame.previousGamepadState.DPad.Left != ButtonState.Pressed ||
                        (MainGame.currentGamepadState.ThumbSticks.Left.Length() > thresholdLength && !(MainGame.previousGamepadState.ThumbSticks.Left.Length() > thresholdLength)
                        && MainGame.currentGamepadState.ThumbSticks.Left.Y > 0))
                    {
                        Menu.scrollClickEffectInstance.Play();
                        if (whichButtonHighlighted == 0) whichButtonHighlighted = talkToButtons.Count - 1;
                        else whichButtonHighlighted--;
                    }
                    else if (MainGame.currentGamepadState.DPad.Down == ButtonState.Pressed && MainGame.previousGamepadState.DPad.Down != ButtonState.Pressed ||
                        MainGame.currentGamepadState.DPad.Right == ButtonState.Pressed && MainGame.previousGamepadState.DPad.Right != ButtonState.Pressed ||
                        (MainGame.currentGamepadState.ThumbSticks.Left.Length() > thresholdLength && !(MainGame.previousGamepadState.ThumbSticks.Left.Length() > thresholdLength)
                        && MainGame.currentGamepadState.ThumbSticks.Left.Y < 0))
                    {
                        Menu.scrollClickEffectInstance.Play();
                        if (whichButtonHighlighted == talkToButtons.Count - 1) whichButtonHighlighted = 0;
                        else whichButtonHighlighted++;
                    }

                    for (int i = 0; i < talkToButtons.Count; i++)
                    {
                        if (i == whichButtonHighlighted) talkToButtonsHover[i] = true;
                        else talkToButtonsHover[i] = false;
                    }

                    if (MainGame.currentGamepadState.Buttons.A == ButtonState.Pressed && MainGame.previousGamepadState.Buttons.A != ButtonState.Pressed)
                    {
                        Menu.confirmClickEffectInstance.Play();
                        manBeingTalkedTo = whichButtonHighlighted;
                        whichButtonHighlighted = 0;
                        State = 2;
                    }
                }
                else
                {
                    for (int i = 0; i < talkToButtons.Count; i++)
                    {
                        if (talkToButtons[i].mouseIsOverButton(MainGame.currentMouseState.X, MainGame.currentMouseState.Y))
                        {
                            if (MainGame.currentMouseState.LeftButton == ButtonState.Pressed && MainGame.previousMouseState.LeftButton != ButtonState.Pressed)
                            {
                                Menu.confirmClickEffectInstance.Play();
                                manBeingTalkedTo = i;
                                State = 2;
                                break;
                            }
                            else
                            {
                                if (talkToButtonsHover[i] == false) Menu.scrollClickEffectInstance.Play();
                            }
                            talkToButtonsHover[i] = true;
                        }
                        else
                        {
                            talkToButtonsHover[i] = false;
                        }
                    }
                }
            }
            else if (State == 2)
            {
                //Initialize talkAboutButtons once depending on state
                if (talkAboutButtons.Count == 0)
                {
                    int questionPositionsCounter = 0;
                    if (lastNumScavengers == 0)
                    {
                        //skip right to responses
                        response = emptyResponse;
                        State = 3;
                        return;
                    }
                    else if (manBeingTalkedTo == lastNumScavengers)
                    {
                        //dismissal, skip to response
                        response = dismissResponse;
                        State = 3;
                        return;
                    }
                    int trueManBeingTalkedTo = manBeingTalkedTo + (MainGame.numStartingLives - lastNumScavengers);
                    if (deathThisRound)
                    {
                        talkAboutButtons.Add(new Button(questionPositionsL[questionPositionsCounter],
                            questionPositionsR[questionPositionsCounter], preQuestion
                            + menNames[MainGame.numStartingLives - lastNumScavengers - 1]
                            + deathQuestion, questionOffset));
                        possibleResponses.Add(deathResponses[trueManBeingTalkedTo]);
                        questionPositionsCounter++;
                        talkAboutButtonsHover.Add(false);
                    }
                    talkAboutButtons.Add(new Button(questionPositionsL[questionPositionsCounter],
                            questionPositionsR[questionPositionsCounter], preQuestion
                            + menNames[trueManBeingTalkedTo] + homeQuestion, questionOffset));
                    possibleResponses.Add(homeResponses[trueManBeingTalkedTo]);
                    questionPositionsCounter++;
                    talkAboutButtonsHover.Add(false);
                    talkAboutButtons.Add(new Button(questionPositionsL[questionPositionsCounter],
                            questionPositionsR[questionPositionsCounter], preQuestion
                            + warQuestion, questionOffset));
                    possibleResponses.Add(warResponses[trueManBeingTalkedTo]);
                    questionPositionsCounter++;
                    talkAboutButtonsHover.Add(false);
                    talkAboutButtons.Add(new Button(questionPositionsL[questionPositionsCounter],
                            questionPositionsR[questionPositionsCounter], preQuestion
                            + killingQuestion, questionOffset));
                    possibleResponses.Add(killingResponses[trueManBeingTalkedTo]);
                    questionPositionsCounter++;
                    talkAboutButtonsHover.Add(false);
                    //More questions here

                }

                //Then normal checks
                if (MainGame.currentGamepadState.IsConnected)
                {
                    if (MainGame.currentGamepadState.DPad.Up == ButtonState.Pressed && MainGame.previousGamepadState.DPad.Up != ButtonState.Pressed ||
                        MainGame.currentGamepadState.DPad.Left == ButtonState.Pressed && MainGame.previousGamepadState.DPad.Left != ButtonState.Pressed ||
                        (MainGame.currentGamepadState.ThumbSticks.Left.Length() > thresholdLength && !(MainGame.previousGamepadState.ThumbSticks.Left.Length() > thresholdLength)
                        && MainGame.currentGamepadState.ThumbSticks.Left.Y > 0))
                    {
                        Menu.scrollClickEffectInstance.Play();
                        if (whichButtonHighlighted == 0) whichButtonHighlighted = talkAboutButtons.Count - 1;
                        else whichButtonHighlighted--;
                    }
                    else if (MainGame.currentGamepadState.DPad.Down == ButtonState.Pressed && MainGame.previousGamepadState.DPad.Down != ButtonState.Pressed ||
                        MainGame.currentGamepadState.DPad.Right == ButtonState.Pressed && MainGame.previousGamepadState.DPad.Right != ButtonState.Pressed ||
                        (MainGame.currentGamepadState.ThumbSticks.Left.Length() > thresholdLength && !(MainGame.previousGamepadState.ThumbSticks.Left.Length() > thresholdLength)
                        && MainGame.currentGamepadState.ThumbSticks.Left.Y < 0))
                    {
                        Menu.scrollClickEffectInstance.Play();
                        if (whichButtonHighlighted == talkAboutButtons.Count - 1) whichButtonHighlighted = 0;
                        else whichButtonHighlighted++;
                    }

                    for (int i = 0; i < talkAboutButtons.Count; i++)
                    {
                        if (i == whichButtonHighlighted) talkAboutButtonsHover[i] = true;
                        else talkAboutButtonsHover[i] = false;
                    }

                    if (MainGame.currentGamepadState.Buttons.A == ButtonState.Pressed && MainGame.previousGamepadState.Buttons.A != ButtonState.Pressed)
                    {
                        Menu.confirmClickEffectInstance.Play();
                        response = possibleResponses[whichButtonHighlighted];
                        whichButtonHighlighted = 0;
                        State = 3;
                    }
                }
                else
                {
                    for (int i = 0; i < talkAboutButtons.Count; i++)
                    {
                        if (talkAboutButtons[i].mouseIsOverButton(MainGame.currentMouseState.X, MainGame.currentMouseState.Y))
                        {
                            if (MainGame.currentMouseState.LeftButton == ButtonState.Pressed && MainGame.previousMouseState.LeftButton != ButtonState.Pressed)
                            {
                                Menu.confirmClickEffectInstance.Play();
                                response = possibleResponses[i];
                                State = 3;
                                break;
                            }
                            else
                            {
                                if (talkAboutButtonsHover[i] == false) Menu.scrollClickEffectInstance.Play();
                            }
                            talkAboutButtonsHover[i] = true;
                        }
                        else
                        {
                            talkAboutButtonsHover[i] = false;
                        }
                    }
                }
            }
            else if (State == 3)
            {
                //Listen for proceed button
                if (MainGame.currentGamepadState.IsConnected)
                {
                    endConversationHover = true;

                    if (MainGame.currentGamepadState.Buttons.A == ButtonState.Pressed && MainGame.previousGamepadState.Buttons.A != ButtonState.Pressed)
                    {
                        Menu.confirmClickEffectInstance.Play();
                        State = 4;
                    }
                }
                else
                {
                        if (endConversationButton.mouseIsOverButton(MainGame.currentMouseState.X, MainGame.currentMouseState.Y))
                        {
                            if (MainGame.currentMouseState.LeftButton == ButtonState.Pressed && MainGame.previousMouseState.LeftButton != ButtonState.Pressed)
                            {
                                Menu.confirmClickEffectInstance.Play();
                                State = 4;
                            }
                            else
                            {
                                if (endConversationHover == false) Menu.scrollClickEffectInstance.Play();
                            }
                            endConversationHover = true;
                        }
                        else
                        {
                            endConversationHover = false;
                        }
                }
            }
            else if (State == 4)
            {
                if (conversationIsFinished == false)
                {
                    talkToButtons.Clear();
                    talkToButtonsHover.Clear();
                    talkAboutButtons.Clear();
                    talkAboutButtonsHover.Clear();
                    possibleResponses.Clear();
                    deadNames.Clear();
                    manBeingTalkedTo = -1;
                    conversationIsFinished = true;
                }
            }
        }
예제 #10
0
        public void Update(int command, GameTime gameTime, Wave wave, ScavengerManager manager)
        {
            Vector2 scavengerSpawn = scavengerManager.waveManager.getWave().layout.scavengerSpawnPosition;
            Vector2 scavengerIdle = scavengerManager.waveManager.getWave().layout.getScavengerTrenchPlacement(positionNumber);
            if (Alive)
            {
                if (action == 0) //Idling
                {
                    //If command is to go, then put in scavenging spawn point
                    if (command == 1)
                    {
                        Position = scavengerSpawn;
                        action = 1;
                        movingTowardsTrench = false;
                    }
                }
                else if (action == 1) //Going out
                {
                    //If command is to come back, turn around
                    if (command == 0)
                    {
                        if (scavengerManager.waveManager.getWave().layout.pather.atTrenchEntrance(Position, Width, Height))
                        {
                            Position = scavengerIdle;
                            action = 0;
                        }
                        else
                        {
                            Position = scavengerManager.waveManager.getWave().layout.pather.Move(Position, true, speed);
                            movingTowardsTrench = true;
                            action = 2;
                        }
                    }
                    else //else scavenge
                    {
                        List<Scavenger> lootableScavengers = manager.getScavengableScavengers();
                        //If no lootable things, just move forward
                        if (wave.enemiesOnScreen.Count + lootableScavengers.Count == 0)
                        {
                            Position = scavengerManager.waveManager.getWave().layout.pather.Move(Position, false, speed);
                            movingTowardsTrench = false;
                        }
                        else
                        {
                            //Look for nearest unlooted body
                            Enemy closestEnemy = null;
                            float closestDistance = float.MaxValue;
                            for (int i = 0; i < wave.enemiesOnScreen.Count; i++)
                            {
                                if (!wave.enemiesOnScreen[i].Alive && !wave.enemiesOnScreen[i].isLooted)
                                {
                                    float enemyDistance = Vector2.Distance(Position, wave.enemiesOnScreen[i].Position);
                                    if (enemyDistance < closestDistance)
                                    {
                                        closestEnemy = wave.enemiesOnScreen[i];
                                        closestDistance = enemyDistance;
                                    }
                                }
                            }
                            Scavenger closestScavenger = null;
                            float closestScavengerDistance = float.MaxValue;
                            for (int i = 0; i < lootableScavengers.Count; i++)
                            {
                                float scavengerDistance = Vector2.Distance(Position, lootableScavengers[i].Position);
                                if (scavengerDistance < closestScavengerDistance)
                                {
                                    closestScavenger = lootableScavengers[i];
                                    closestScavengerDistance = scavengerDistance;
                                }
                            }
                            Vector2 enemyPosition = Vector2.Zero;
                            int enemyWidth = 0;
                            int enemyHeight = 0;

                            bool isScavenger = false;

                            if ((closestEnemy == null && closestScavenger != null)
                                || (closestEnemy != null && closestScavenger != null && closestScavengerDistance <= closestDistance))
                            {
                                enemyPosition = closestScavenger.Position;
                                enemyWidth = closestScavenger.Width;
                                enemyHeight = closestScavenger.Height;
                                isScavenger = true;
                            }
                            else if ((closestEnemy != null && closestScavenger == null)
                                || (closestEnemy != null && closestScavenger != null && closestScavengerDistance > closestDistance))
                            {
                                enemyPosition = closestEnemy.Position;
                                enemyWidth = closestEnemy.Width;
                                enemyHeight = closestEnemy.Height;
                                isScavenger = false;
                            }

                            if (enemyWidth != 0 && enemyHeight != 0) //&& enemyPosition not Vector.Zero?
                            {
                                //If it is close enough to scavenge, do so
                                if (scavengerManager.waveManager.getWave().layout.pather.intersectsWith(Position, Width, Height, enemyPosition, enemyWidth, enemyHeight))
                                {
                                    if (isScavenger)
                                    {
                                        closestScavenger.isLooted = true;
                                        lootToLoot = new List<Loot>();
                                        lootToLoot.AddRange(closestScavenger.scavengedLoot);
                                    }
                                    else
                                    {
                                        closestEnemy.isLooted = true;
                                        lootToLoot = new List<Loot>();
                                        lootToLoot.AddRange(closestEnemy.loot);
                                    }
                                    action = 3;
                                    whenScavengeBegan = gameTime.TotalGameTime.TotalMilliseconds;
                                    actionToReturnTo = 1;
                                }
                                else //else move towards it
                                {
                                    //Old: (enemyL > myL), assumes unidirectional
                                    //New: Just move forward
                                    Position = scavengerManager.waveManager.getWave().layout.pather.Move(Position, false, speed);
                                    movingTowardsTrench = false;
                                }
                            }
                            else //Shouldn't happen
                            {
                                Position = scavengerManager.waveManager.getWave().layout.pather.Move(Position, false, speed);
                                movingTowardsTrench = false;
                            }
                        }
                    }
                }
                else if (action == 2) //Coming back
                {
                    if (command == 1)
                    {
                        Position = scavengerManager.waveManager.getWave().layout.pather.Move(Position, false, speed);
                        movingTowardsTrench = false;
                        action = 1;
                    }
                    else
                    {
                        if (scavengerManager.waveManager.getWave().layout.pather.atTrenchEntrance(Position, Width, Height))
                        {
                            Position = scavengerIdle;
                            action = 0;
                            MainGame.scavengerAddToSupply(this);
                        }
                        else
                        {
                            Position = scavengerManager.waveManager.getWave().layout.pather.Move(Position, true, speed);
                            movingTowardsTrench = true;
                        }
                    }
                }
                else //Scavenging from body
                {
                    if (whenScavengeBegan != 0 && gameTime.TotalGameTime.TotalMilliseconds - whenScavengeBegan > timeToScavenge)
                    {
                        action = actionToReturnTo;
                        scavengedLoot.AddRange(lootToLoot);
                        lootToLoot.Clear();
                    }
                    else
                    {
                        if (command == 0) actionToReturnTo = 2;
                        else if (command == 1) actionToReturnTo = 1;
                    }
                }
            }
        }
예제 #11
0
 public virtual void Initialize(ContentManager content, int scavPositionNumber, int HUDPosition, bool activeNow, ScavengerManager manager)
 {
     idleTexture = content.Load<Texture2D>("Graphics\\TrooperIdle");
     deathTexture = content.Load<Texture2D>("Graphics\\TrooperDead");
     trenchDeathTexture = content.Load<Texture2D>("Graphics\\TrooperDeadInTrench");
     scavengingTexture = content.Load<Texture2D>("Graphics\\TrooperScavenging");
     activeTexture = new AnimatedSprite(content.Load<Texture2D>("Graphics\\Trooper"), numMapRows, numMapColumns, animationSpeed);
     sentOutHudTexture = content.Load<Texture2D>("Graphics\\SendOutIcon");
     sentBackHudTexture = content.Load<Texture2D>("Graphics\\SendBackIcon");
     notSentHudTexture = content.Load<Texture2D>("Graphics\\NotSentIcon");
     speed = speedValue;
     positionNumber = scavPositionNumber;
     scavengerManager = manager;
     Position = scavengerManager.waveManager.getWave().layout.getScavengerTrenchPlacement(positionNumber);
     hudSeat = HUDPosition;
     Alive = true;
     isLooted = false;
     action = 0;
     scavengedLoot = new List<Loot>();
     whenScavengeBegan = 0;
     Active = activeNow;
     movingTowardsTrench = false;
 }