public override void Update(GameTime gametime) { if (Helper.CurrentGameStatus == GameStatus.PLAYING) { TilePlayer player = (TilePlayer)Game.Services.GetService(typeof(TilePlayer)); TilePlayerTurret playerTurret = (TilePlayerTurret)Game.Services.GetService(typeof(TilePlayerTurret)); List <SentryTurret> sentryTurrets = (List <SentryTurret>)Game.Services.GetService(typeof(List <SentryTurret>)); if (player != null && playerTurret != null) { if (State == PowerUpStatus.Deactivated && CollisionDetect(player)) { Activate(); } if (State == PowerUpStatus.Activated || State == PowerUpStatus.ExecuteOnce) { Duration += (float)gametime.ElapsedGameTime.TotalSeconds; if (State != PowerUpStatus.ExecuteOnce) { Affect(player, playerTurret, sentryTurrets); } if (Duration >= MaxLifeTime) { State = PowerUpStatus.Depleted; Deactivate(player, playerTurret, sentryTurrets); } } } base.Update(gametime); } }
/// <summary> /// Runs when a character collides with a powerUp /// </summary> public bool OnCollision(Fixture powerUpGeom, Fixture character, Contact contant) { if (character.CollisionCategories == Category.Cat11) { //Gets the powerupstatus from geomData PowerUpStatus powerUpStatus = (PowerUpStatus)powerUpGeom.Body.UserData; waitingPowerUps.Remove(powerUpStatus); //Gets the charactercontroller CharacterController player = (CharacterController)character.Body.UserData; player.AddPowerUp(powerUpStatus.PowerUp); //Setup the powerupstatus for the player powerUpStatus.ElapsedTime = 0; powerUpStatus.Player = player; //Removes the powerup from screen powerUpStatus.Image.DisposBoundBox(); powerUpImg.RemovePosition(powerUpStatus.Image); //Sets the active powerup on the player, so it's removed by the update when time is up if (activePowerUps.ContainsKey(player.model.playerIndex)) { activePowerUps[player.model.playerIndex] = powerUpStatus; } else { activePowerUps.Add(player.model.playerIndex, powerUpStatus); } return(false); } return(true); }
public void Activate() { if (State == PowerUpStatus.Deactivated) { pickupSndInst.Play(); State = PowerUpStatus.Activated; } }
public void Activate() { if (State == PowerUpStatus.Deactivated) { Interlocked.Increment(ref Count); pickupSndInst.Play(); OrbLight.Enabled = false; Frames.Clear(); State = PowerUpStatus.Activated; } }
public override void Update(GameTime gametime) { if (Helper.CurrentGameStatus == GameStatus.PLAYING) { OrbLight.Position = (CentrePos - Camera.CamPos); TilePlayer player = (TilePlayer)Game.Services.GetService(typeof(TilePlayer)); TilePlayerTurret playerTurret = (TilePlayerTurret)Game.Services.GetService(typeof(TilePlayerTurret)); List <SentryTurret> sentryTurrets = (List <SentryTurret>)Game.Services.GetService(typeof(List <SentryTurret>)); if (player != null && playerTurret != null) { if (State == PowerUpStatus.Deactivated && CollisionDetect(player)) { Activate(); } if (State == PowerUpStatus.Activated || State == PowerUpStatus.ExecuteOnce) { // Comment out to make effects last infinitely. //Duration += (float)gametime.ElapsedGameTime.TotalSeconds; attachToHUD = true; if (State != PowerUpStatus.ExecuteOnce) { Affect(gametime, player, playerTurret, sentryTurrets); } if (Duration >= MaxLifeTime) { State = PowerUpStatus.Depleted; Deactivate(player, playerTurret, sentryTurrets); } } RunToPlayer(player); // Cool Down Timer if (State == PowerUpStatus.Depleted && coolDownTime <= MAX_COOLDOWN) { coolDownTime += (float)gametime.ElapsedGameTime.TotalSeconds; } UpdateHUD(gametime); } base.Update(gametime); } }
private int defaultRadius; // Player spotted radius. #endregion #region Constructors public PowerUp(Game game, Vector2 position, List <TileRef> sheetRefs, int frameWidth, int frameHeight, float layerDepth, float maxLifeTime, PowerUpType type, int amount, float multiplier, SoundEffect pickupSnd) : base(game, position, sheetRefs, frameWidth, frameHeight, layerDepth) { Visible = true; DrawOrder = 100; this.Type = type; this.MaxLifeTime = maxLifeTime; this.Factor = multiplier; this.Amount = amount; this.State = PowerUpStatus.Deactivated; #region Get Default Values TilePlayer player = (TilePlayer)Game.Services.GetService(typeof(TilePlayer)); TilePlayerTurret playerTurret = (TilePlayerTurret)Game.Services.GetService(typeof(TilePlayerTurret)); List <SentryTurret> sentryTurrets = (List <SentryTurret>)Game.Services.GetService(typeof(List <SentryTurret>)); if (player != null) { defaultMaxVelocity = player.MaxVelocity; defaultPlayerAcceleration = player.Acceleration; defaultPlayerDeceleration = player.Deceleration; } foreach (SentryTurret turret in sentryTurrets) { if (turret != null) { // Finds first enemy tank in list that's not NULL and takes those as default values. defaultPlayerDamageRate = turret.Bullet.playerDamageRate; defaultRadius = turret.DetectRadius; break; } } if (playerTurret != null) { defaultSentryDamageRate = playerTurret.Bullet.sentryDamageRate; } #endregion #region Handle Audio this.pickupSnd = pickupSnd; pickupSndInst = this.pickupSnd.CreateInstance(); #endregion }
private void CheckCamoState(GameTime gameTime) { DisplayDurationBar(gameTime); if (InputEngine.IsKeyPressed(Keys.C) || InputEngine.IsButtonPressed(Buttons.X) && State == PowerUpStatus.Depleted) { if (coolDownTime >= MAX_COOLDOWN) { State = PowerUpStatus.Activated; Duration = 0; coolDownTime = 0; camoSndInst.Play(); } } }
/// <summary> /// Adds new random powerup to the map insise the drop zone /// </summary> public void addPowerUpToMap() { ImageModel model = powerUpImg.AddPosition(randomDropPosition()); model.SetBoundBox(World, 50, 50, Vector2.Zero, Category.Cat6, Category.All); model.BoundBox.OnCollision += OnCollision; powerUpImg.AnimateScale(model, 1f, 400, false); elapsedTime = 0; generateTimeToNext(); PowerUpStatus status = new PowerUpStatus(randomPowerUp(), model); model.BoundBox.UserData = status; //model.CurrentFrame = (int)MathHelper.Clamp(status.PowerUp.imageFrame, 0f, 3f); waitingPowerUps.Add(status); }
private void Affect(TilePlayer other, TilePlayerTurret otherTurret, List <SentryTurret> sentryTurrets) { switch (Type) { case PowerUpType.Heal: other.Health += Amount * (int)Factor; State = PowerUpStatus.Depleted; break; case PowerUpType.DefenseBoost: foreach (SentryTurret turret in sentryTurrets) { if (turret != null) { turret.Bullet.playerDamageRate /= (int)Factor; } } State = PowerUpStatus.ExecuteOnce; break; case PowerUpType.SpeedBoost: // Accelerate slowly, gain more speed and stop your tracks faster! other.MaxVelocity *= Factor; //other.Acceleration = other.Acceleration * Factor; other.Deceleration *= Factor; State = PowerUpStatus.ExecuteOnce; break; case PowerUpType.ExtraDamage: otherTurret.Bullet.sentryDamageRate *= (int)Factor; State = PowerUpStatus.ExecuteOnce; break; case PowerUpType.Camouflage: foreach (SentryTurret turret in sentryTurrets) { if (turret != null) { turret.DetectRadius = Amount * (int)Factor; } } State = PowerUpStatus.ExecuteOnce; break; } }
public override void Update(GameTime gameTime) { //if game is paused then no updates if (CurrentState != GameState.GamePause) { elapsedTime += gameTime.ElapsedGameTime.Milliseconds; if (elapsedTime / 1000 > random.Next(minNew, maxNew)) { addPowerUpToMap(); } //Updates the powerups that havent been picked up yet //Removes the powerups that has layn ther to long int count = waitingPowerUps.Count(); for (int i = 0; i < count; i++) { PowerUpStatus p = waitingPowerUps[i]; p.ElapsedTime += gameTime.ElapsedGameTime.Milliseconds; if (p.ElapsedTime / 1000 > waitMax) { waitingPowerUps.RemoveAt(i); p.Image.DisposBoundBox(); powerUpImg.RemovePosition(p.Image); count--; } } //Updates the powerup that players has, remove then when time left if 0 count = activePowerUps.Count(); for (int i = 0; i < count; i++) { var p = activePowerUps.ElementAt(i); p.Value.ElapsedTime += gameTime.ElapsedGameTime.Milliseconds; if (p.Value.ElapsedTime / 1000 > p.Value.PowerUp.duration) { p.Value.Player.RemovePowerUp(p.Value.PowerUp); activePowerUps.Remove(p.Key); count--; } } } }
private void Affect(GameTime gameTime, TilePlayer other, TilePlayerTurret otherTurret, List <SentryTurret> sentryTurrets) { switch (Type) { case PowerUpType.Heal: Frames.Add(new TileRef(13, 2, 0)); other.Health += Amount * (int)Factor; State = PowerUpStatus.Depleted; break; case PowerUpType.Regen: Frames.Add(new TileRef(13, 2, 0)); //Duration = 0; RegenTimer += (float)gameTime.ElapsedGameTime.TotalSeconds; if (other.Health < 100 && other.Health > 0 && RegenTimer > 1) { other.Health += Amount * (int)Factor; RegenTimer = 0; } break; case PowerUpType.DefenseBoost: Frames.Add(new TileRef(13, 1, 0)); foreach (SentryTurret turret in sentryTurrets) { if (turret != null) { turret.Bullet.playerDamageRate /= (int)Factor; } } State = PowerUpStatus.ExecuteOnce; break; case PowerUpType.SpeedBoost: Frames.Add(new TileRef(13, 3, 0)); other.MaxVelocity *= Factor; //other.Acceleration = other.Acceleration * Factor; // Immediately gain speed other.Deceleration *= Factor; other.turnSpeed *= (Factor + (Factor / 2)); State = PowerUpStatus.ExecuteOnce; break; case PowerUpType.ExtraDamage: Frames.Add(new TileRef(13, 0, 0)); if (newRound != null) { otherTurret.Bullet = newRound; } otherTurret.Bullet.sentryDamageRate *= (int)Factor; otherTurret.ShellSound = newRound.shellSoundAlt; State = PowerUpStatus.ExecuteOnce; break; case PowerUpType.Camouflage: Frames.Add(new TileRef(13, 4, 0)); other.Alpha = 0.5f; otherTurret.Alpha = 0.5f; foreach (SentryTurret turret in sentryTurrets) { if (turret != null) { turret.DetectRadius = Amount * (int)Factor; } } List <Sentry> otherTanks = (List <Sentry>)Game.Services.GetService(typeof(List <Sentry>)); foreach (Sentry tank in otherTanks) { if (tank != null) { tank.StayVisible = true; } } State = PowerUpStatus.ExecuteOnce; break; } }
private int defaultRadius; // Player spotted radius. #endregion #endregion #region Constructors public PowerUp(Game game, Vector2 position, List <TileRef> sheetRefs, int frameWidth, int frameHeight, float layerDepth, float maxLifeTime, PowerUpType type, int amount, float multiplier, SoundEffect pickupSnd, SoundEffect camoSnd, Ricochet newRound) : base(game, position, sheetRefs, frameWidth, frameHeight, layerDepth) { Visible = true; DrawOrder = 100; this.Type = type; this.MaxLifeTime = maxLifeTime; this.Factor = multiplier; this.Amount = amount; this.State = PowerUpStatus.Deactivated; this.newRound = newRound; BoundingRectangle = new Rectangle( PixelPosition.ToPoint(), new Point(FrameWidth / 8, FrameHeight / 8)); #region Get Default Values TilePlayer player = (TilePlayer)Game.Services.GetService(typeof(TilePlayer)); TilePlayerTurret playerTurret = (TilePlayerTurret)Game.Services.GetService(typeof(TilePlayerTurret)); List <SentryTurret> sentryTurrets = (List <SentryTurret>)Game.Services.GetService(typeof(List <SentryTurret>)); if (player != null) { defaultMaxVelocity = player.MaxVelocity; defaultPlayerAcceleration = player.Acceleration; defaultPlayerDeceleration = player.Deceleration; defaultTurnSpeed = player.turnSpeed; } foreach (SentryTurret turret in sentryTurrets) { if (turret != null) { // Finds first enemy tank in list that's not NULL and takes those as default values. defaultPlayerDamageRate = turret.Bullet.playerDamageRate; defaultRadius = turret.DetectRadius; break; } } if (playerTurret != null) { defaultSentryDamageRate = playerTurret.Bullet.sentryDamageRate; defaultBullet = playerTurret.Bullet; defaultShellSnd = playerTurret.ShellSound; } #endregion #region Handle Audio this.pickupSnd = pickupSnd; pickupSndInst = this.pickupSnd.CreateInstance(); #endregion #region Setup OrbLight PenumbraComponent penumbra = Game.Services.GetService <PenumbraComponent>(); penumbra.Lights.Add(OrbLight); switch (type) { case PowerUpType.Regen: case PowerUpType.Heal: OrbLight.Color = Color.LimeGreen; break; case PowerUpType.DefenseBoost: OrbLight.Color = Color.LightBlue; break; case PowerUpType.SpeedBoost: OrbLight.Color = Color.Orange; break; case PowerUpType.ExtraDamage: OrbLight.Color = Color.Red; break; case PowerUpType.Camouflage: OrbLight.Color = Color.Purple; break; default: OrbLight.Color = Color.White; break; } #endregion #region Setup Duration Bar if (Type == PowerUpType.Camouflage) { durationBar = new HealthBar(game, CentrePos); durationBar.Name = Type.ToString(); durationBar.txHealthBar.SetData(new[] { durationBarColor }); AddHealthBar(durationBar); Health = (int)Duration; this.camoSnd = camoSnd; camoSndInst = this.camoSnd.CreateInstance(); camoSndInst.Volume = 0.8f; } #endregion }