IEnumerator Slide(float slideDuration) { SetSlideCollisionBox(); obstacleDetector.Detect(); this.sliding = true; yield return(new WaitForSeconds(slideDuration)); RestoreSlideCollisionBox(); obstacleDetector.Detect(); SetSlideCollisionBox(); if (obstacleDetector.collisions.above) { StartCoroutine(Slide(shortSlideDuration)); } else { if (this.sliding) { this.sliding = false; RestoreSlideCollisionBox(); } } }
public void Update(KeyboardState keyState) { for (var i = 0; i < FieldObjects.Count; i++) { FieldObjects[i].Update(keyState); FieldObjects[i] = _checkBoundries(FieldObjects[i]); if (FieldObjects[i].IsExpired && i != _playerIndex) { FieldObjects.RemoveAt(i); i--; } } if (FieldObjects[_playerIndex].IsExpired) { Reset(); } foreach (var factory in _gameObjectFactories) { foreach (var gameObject in factory.RetrieveObjects()) { AddGameObject(gameObject); } } _collisionDetector.Detect(FieldObjects); }
public void GameTick(object sender, ElapsedEventArgs e) { _time++; var shells = State.AllShells.Where(s => !s.IsDead).ToList(); var projectileMotion = new ProjectileMotion(_time, GameParameters.GameLoopIntervalMilliseconds); shells.ForEach(projectileMotion.Calculate); var tanks = State.AllTanks; var activeShells = shells.Where(s => !s.IsDead).ToList(); var activeTanks = tanks.Where(t => !t.IsDead).ToList(); tanks.ForEach(t => t.IsDead |= t.IsHit); // kill off tanks that got hit from the prior tick if (_noKillPolicy.IsInKillTimeZone(GameParameters, _gameStopWatch.Elapsed)) { var collisionDetector = new CollisionDetector((p, s) => { p.Tank.Armour--; s.IsDead = true; if (p.Tank.Armour == 0) { p.Tank.IsHit = true; SetPlayerStatus(p, PlayerStatus.Dead); BroadcastMessage("'{0}' was killed by '{1}'", p.Tank.Name, s.Origin.Name); } else { BroadcastMessage("'{0}' was hit by '{1}'. Armour left={2}", p.Tank.Name, s.Origin.Name, p.Tank.Armour); } }); activeShells.ForEach(s => activeTanks.ForEach(t => collisionDetector.Detect(s, t))); } GetViewPortClients().Tick(State.ToViewPortState((GameParameters.ViewPortSize))); tanks.ForEach(t => t.IsFiring = false); if (activeTanks.Count < GameParameters.MinimumActiveTanks) { BroadcastMessage("Game over. {0} won", activeTanks.ToCsv(",", t => t.Name)); Stop(); } if (_gameStopWatch.ElapsedMilliseconds > GameParameters.MaximumGameTimeMinutes * 1000 * 60) { BroadcastMessage("Total allowed game time of {0} minutes elasped", GameParameters.MaximumGameTimeMinutes); Stop(); } }
public void Update(GameTime gameTime, GraphicsDevice graphicsDevice, bool debugMode) { CollisionDetector.Detect(debugMode); ManagePlayer(gameTime, graphicsDevice, debugMode); ManageBanjos(gameTime, graphicsDevice, debugMode); VibrationManager.Update(gameTime); _spriteCount = Banjos.Count; _banjoSpawnTime += gameTime.ElapsedGameTime.TotalSeconds; }