public void Combat_CantFireWhenNoCharge()
        {
            MockEquipmentRepository mor = new MockEquipmentRepository();

            mor.Mock_SetWeaponProperties(100, 10, 89);
            TestPreparedWorld tpw = TestUtils.CreateWorldWithBotsReadyForCombat(4, mor);

            tpw.Engine.Mock_DirectSetBotCharge(tpw.Bot1.PublicId, 0);
            var eur = tpw.Bot1.FireWeapon(4, "Gun_Turret");

            Assert.Equal(UsageEndState.Fail_NoCharge, eur.State);
        }
        public void Weapon_HasCorrectInitialAmmoAllocation()
        {
            MockEquipmentRepository mor = new MockEquipmentRepository();

            mor.Mock_SetWeaponProperties(100, 11);
            TestPreparedWorld tpw = TestUtils.CreateWorldWithBotsReadyForCombat(4, mor);

            var ae            = tpw.Bot1.GetEquipment("Gun_Turret");
            int initialRounds = tpw.Engine.Mock_GetEquipmentInstanceById(ae.InstanceId).RoundsRemaining;

            Assert.Equal(11, initialRounds);
        }
        public void Combat_FireProjectileWeaponHitsTargetDoesDamage()
        {
            MockEquipmentRepository mor = new MockEquipmentRepository();

            mor.Mock_SetWeaponProperties(100);
            TestPreparedWorld tpw = TestUtils.CreateWorldWithBotsReadyForCombat(4, mor);

            int beforeLife = tpw.Engine.GetMappedBotById(tpw.GetBot2EngineId()).LifeRemaining;

            tpw.Engine.PerformNextTick();
            var eur = tpw.Bot1.FireWeapon(4, "Gun_Turret");

            Assert.True(eur.State == UsageEndState.Success, "The weapon did not fire correctly");
            int afterLife = tpw.Engine.GetMappedBotById(tpw.GetBot2EngineId()).LifeRemaining;

            Assert.True(afterLife < beforeLife);
        }
        public void Combat_VictimRecievesDamageNoteNextTurn()
        {
            MockEquipmentRepository mor = new MockEquipmentRepository();

            mor.Mock_SetWeaponProperties(100);
            TestPreparedWorld tpw = TestUtils.CreateWorldWithBotsReadyForCombat(4, mor);

            tpw.Engine.Mock_SetBotLife(tpw.Bot2.PublicId, 1000);
            tpw.Engine.PerformNextTick();
            var eur = tpw.Bot1.FireWeapon(4, "Gun_Turret");

            Assert.True(eur.State == UsageEndState.Success, "The weapon did not fire correctly");
            tpw.Engine.PerformNextTick();
            var ad = tpw.Bot2.Mock_GetLTR();

            Assert.NotNull(ad);
            Assert.True(ad.Events.Count == 1, "There should have been a fire event");
        }
        public void Combat_FireProjectileWeapon_ConsumesCharge()
        {
            MockEquipmentRepository mor = new MockEquipmentRepository();

            mor.Mock_SetWeaponProperties(100, 10, 89);
            mor.Mock_SetPowerPackProperties(123);
            TestPreparedWorld tpw = TestUtils.CreateWorldWithBotsReadyForCombat(4, mor);

            var ae = tpw.Bot1.GetEquipment("Gun_Turret");

            var mo      = tpw.Engine.Mock_GetBotMapOBjectByPublicId(tpw.Bot1.PublicId);
            int charge  = mo.ChargeRemaining;
            var eur     = tpw.Bot1.FireWeapon(4, "Gun_Turret");
            int charge2 = mo.ChargeRemaining;

            Assert.True(eur.State == UsageEndState.Success, "The weapon did not fire correctly - " + eur.State.ToString());
            Assert.True(charge > charge2, "No charge was consumed when the weapon was fired");
            Assert.Equal(charge - charge2, 89);
        }
        public void Combat_FireProjectileWeaponHitsTargetGeneratesMessage()
        {
            MockEquipmentRepository mor = new MockEquipmentRepository();

            mor.Mock_SetWeaponProperties(100);
            TestPreparedWorld tpw = TestUtils.CreateWorldWithBotsReadyForCombat(4, mor);
            int messageRecieved   = 0;

            tpw.HubUsed.LookFor <Message_Ui>(uim => {
                if (uim.SubKind == KnownSubkinds.WeaponFire)
                {
                    messageRecieved++;
                }
            });

            tpw.Engine.PerformNextTick();
            var eur = tpw.Bot1.FireWeapon(4, "Gun_Turret");

            Assert.Equal(1, messageRecieved);
        }