/// <summary>
        /// Apply action-related changes to the world.
        /// </summary>
        /// <returns> Returns <see cref="System.Collections.Concurrent.ConcurrentBag"/> class with the affected region./></returns>
        public override ConcurrentBag <Core.Models.Region> Do()
        {
            var action            = (Core.Models.Action)Model;
            var entityPosition    = (PositionI)action.Parameters[CREATE_POSITION];
            var region            = Controller.Instance.RegionManagerController.GetRegion(entityPosition.RegionPosition);
            var entityCellPostion = entityPosition.CellPosition;
            var type = (long)action.Parameters[CREATION_TYPE];

            var entityDef    = Controller.Instance.DefinitionManagerController.DefinitionManager.GetDefinition((EntityType)type);
            var entityHealth = ((UnitDefinition)entityDef).Health;
            var entityMoves  = ((UnitDefinition)entityDef).Moves;

            // create the new entity and link to the correct account
            var entity = new Core.Models.Entity(
                IdGenerator.GetId(),
                entityDef,
                action.Account,
                entityPosition,
                entityHealth,
                entityMoves);

            entity.Position = entityPosition;
            region.AddEntity(action.ActionTime, entity);

            action.Account.Buildings.Add(entity.Position, type);
            LogicRules.IncreaseResourceGeneration(action.Account, action.ActionTime, entity.Position, Controller.Instance.RegionManagerController);
            LogicRules.EnableBuildOptions(type, action.Account);
            LogicRules.IncreaseStorage(action.Account, entity);
            LogicRules.ConsumeResource(action.Account, action.ActionTime, entityDef);

            return(new ConcurrentBag <Core.Models.Region>()
            {
                region
            });
        }
Esempio n. 2
0
        public void StorageTest()
        {
            var acc = GetTestAcc();

            var oldEnergy     = acc.Energy.MaximumValue;
            var oldPopulation = acc.Population.MaximumValue;
            var oldPlutonium  = acc.Population.MaximumValue;
            var oldScrap      = acc.Scrap.MaximumValue;
            var oldTechnology = acc.Technology.MaximumValue;

            LogicRules.IncreaseWholeStorage(acc);

            Assert.AreNotEqual(oldEnergy, acc.Energy.MaximumValue);
            Assert.AreNotEqual(oldPopulation, acc.Population.MaximumValue);
            Assert.AreNotEqual(oldPlutonium, acc.Plutonium.MaximumValue);
            Assert.AreNotEqual(oldScrap, acc.Scrap.MaximumValue);
            Assert.AreNotEqual(oldTechnology, acc.Technology.MaximumValue);

            LogicRules.DecreaseWholeStorage(acc);

            Assert.AreEqual(oldEnergy, acc.Energy.MaximumValue);
            Assert.AreEqual(oldPopulation, acc.Population.MaximumValue);
            Assert.AreEqual(oldPlutonium, acc.Plutonium.MaximumValue);
            Assert.AreEqual(oldScrap, acc.Scrap.MaximumValue);
            Assert.AreEqual(oldTechnology, acc.Technology.MaximumValue);

            // Increase and Decrease Scrap Strorage
            var entity = new Entity(336, Core.Models.Definitions.EntityType.Scrapyard, acc, new PositionI(new Position(new LatLon(50.97695325, 11.02396488))), 100, 0);

            LogicRules.IncreaseStorage(acc, entity);

            Assert.AreNotEqual(oldScrap, acc.Scrap.MaximumValue);

            LogicRules.DecreasStorage(acc, entity);

            Assert.AreEqual(oldScrap, acc.Scrap.MaximumValue);

            // Increase and Decrease Population Strorage
            entity = new Entity(342, Core.Models.Definitions.EntityType.Tent, acc, new PositionI(new Position(new LatLon(50.97695325, 11.02396488))), 100, 0);

            LogicRules.IncreaseStorage(acc, entity);

            Assert.AreNotEqual(oldPopulation, acc.Population.MaximumValue);

            LogicRules.DecreasStorage(acc, entity);

            Assert.AreEqual(oldPopulation, acc.Population.MaximumValue);

            // Increase and Decrease Energy Strorage
            entity = new Entity(330, Core.Models.Definitions.EntityType.Transformer, acc, new PositionI(new Position(new LatLon(50.97695325, 11.02396488))), 100, 0);

            LogicRules.IncreaseStorage(acc, entity);

            Assert.AreNotEqual(oldEnergy, acc.Energy.MaximumValue);

            LogicRules.DecreasStorage(acc, entity);

            Assert.AreEqual(oldEnergy, acc.Energy.MaximumValue);
        }