Пример #1
0
    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();
            }
        }
    }
Пример #2
0
        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);
        }
Пример #3
0
        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();
            }
        }
Пример #4
0
        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;
        }