Exemple #1
0
        public void GameEnd()
        {
            var game         = new DummyGame(new[] { new DummyUser(true, 0), new DummyUser(true, 1) }, TestGameSettings);
            var sourceEntity = game.ValidEntitesControllable.First();
            var targetEntity = game.ValidEntitesControllable.Last();

            Assert.AreNotEqual(sourceEntity, targetEntity);
            Assert.Greater(sourceEntity.ReloadFrames, 0);

            var shotsForKill  = (int)Math.Ceiling(targetEntity.Health / (double)sourceEntity.CharData.ProjectileDamage);
            var travelTimeSec = (sourceEntity.Position.Distance(targetEntity.Position) - (sourceEntity.CharData.HitboxSize + sourceEntity.CharData.ProjectileHitboxSize * 2 + targetEntity.CharData.HitboxSize)) / sourceEntity.CharData.ProjectileSpeedSec;
            var travelFrames  = (int)(travelTimeSec / game.TimePerFrameSec);

            var expectedGameFrames = (shotsForKill - 1) * sourceEntity.ReloadFrames + travelFrames;


            for (var i = 0; !game.GameEnded; i++)
            {
                if (sourceEntity.CanShoot)
                {
                    sourceEntity.Shoot(targetEntity.Position);
                }
                game.DoNextTurn();

                Assert.LessOrEqual(i, expectedGameFrames, "Game didn't end yet but should have");
            }
            Assert.AreEqual(expectedGameFrames, game.Turn, "Game was ended faster than expected");
        }
Exemple #2
0
        public void InvalidActionDetected()
        {
            var game = new DummyGame(new[] { new DummyUser(true, 0), new DummyUser(true, 1) }, TestGameSettings);

            game.AddGameAction(game.Users.FirstOrDefault(), new GameAction((GameActionType)1337, new Vector2(0, 0), game.ValidEntities.First().EntityIdentifier));
            Assert.Throws <TestGameException>(() => game.DoNextTurn(), "Game doesn't properly validate game action");
        }
Exemple #3
0
        public void ZeroDistanceShotDetected()
        {
            var game   = new DummyGame(new[] { new DummyUser(true, 0), new DummyUser(true, 1) }, TestGameSettings);
            var entity = game.ValidEntitesControllable.First();

            entity.Shoot(entity.Position);
            Assert.Throws <TestGameException>(() => game.DoNextTurn(), "Can shoot at my position (could cause invalid unit vector)");
        }
Exemple #4
0
        public void BasicTurn()
        {
            var game = new DummyGame(new[] { new DummyUser(true, 0), new DummyUser(true, 1) }, TestGameSettings);

            foreach (var validEntity in game.ValidEntitesControllable)
            {
                validEntity.MoveTo(validEntity.Position + new Vector2(100, 0));
                validEntity.Shoot(validEntity.Position + new Vector2(-100, 0));
            }
            game.DoNextTurn();
        }
Exemple #5
0
        public void CanShoot()
        {
            var game = new DummyGame(new[] { new DummyUser(true, 0), new DummyUser(true, 1) }, TestGameSettings);

            game.ValidEntitesControllable.First().Shoot(game.ValidEntities.Last().Position);
            game.DoNextTurn();

            Assert.AreEqual(1, game.ValidProjectiles.Count(), "Projectiles do not spawn");

            var projectilePos = game.ValidProjectiles.First().Position;

            game.DoNextTurn();
            Assert.LessOrEqual((game.ValidProjectiles.First().Position - projectilePos).Length - game.Settings.DefaultCharacterData.ProjectileSpeedSec, double.Epsilon, "Projectiles do not move");
        }
Exemple #6
0
        public void CanMove()
        {
            var game        = new DummyGame(new[] { new DummyUser(true, 0), new DummyUser(true, 1) }, TestGameSettings);
            var firstEntity = game.ValidEntitesControllable.First();

            Assert.Greater(firstEntity.CharData.SpeedSec, 0d, "Invalid speed, cannot test movement");

            firstEntity.MoveTo(game.ValidEntities.Last().Position);
            var pos = firstEntity.Position;

            game.DoNextTurn();

            Assert.LessOrEqual(firstEntity.Position.Distance(pos) - firstEntity.CharData.SpeedSec, double.Epsilon, "Did not move as far as expected / didn't move at all");
        }
Exemple #7
0
        public void ArenaShrinking()
        {
            var game = new DummyGame(new[] { new DummyUser(true, 0) }, TestGameSettings);

            game.DoNextTurn();
            Assert.AreEqual(1, game.ValidEntitesControllable.Count(), "Arena shrank instantly / Shrinking start time not applied");

            do
            {
                game.DoNextTurn();
            } while (game.Turn < game.Settings.ArenaShrinkStartTurn);

            Assert.AreEqual(1, game.ValidEntitesControllable.Count(), "Entity gone before arena shrinking");

            game.DoNextTurn();

            Assert.AreEqual(0, game.ValidEntitesControllable.Count(), "Arena shrinking not working / damage not applied");

            Assert.AreEqual(true, game.GameEnded, "Game did not end from arena shrinking");
        }
Exemple #8
0
        public void ProjectilesDespawn()
        {
            var game   = new DummyGame(new[] { new DummyUser(true, 0) }, TestGameSettings);
            var entity = game.ValidEntitesControllable.First();

            entity.Shoot(entity.Position + new Vector2(100, 0));
            var despawnFrame = (int)Math.Ceiling(game.Settings.ProjectileLifeTimeSec / game.TimePerFrameSec);

            Assert.Greater(game.Settings.ProjectileLifeTimeSec, 0);

            while (game.Turn < despawnFrame)
            {
                game.DoNextTurn();
            }

            Assert.AreEqual(1, game.ValidProjectiles.Count(), "Projectile despawned too early");

            game.DoNextTurn();

            Assert.AreEqual(0, game.ValidProjectiles.Count(), "Projectile not despawning / despawning too late");
        }