public override void Update(GameTime gametime, ScavengerManager scavengerManager) { if (health < testHSHealth) { DamagedTextureMap.Update(); speed = E1SpeedDamaged; } base.Update(gametime, scavengerManager); }
public override bool isOver(ScavengerManager scavengerManager) { if (enemiesOnScreen.Count > 0) return enemiesOnScreen[0].isLooted && scavengerManager.getActiveScavenger().action == 0; return false; }
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(); } } }
/// <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(); }
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; }
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); }
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); } }
public void setScavengerManager(ScavengerManager scavengermanager) { scavengerManager = scavengermanager; }
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; } } }
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; } } } }
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; }