/// <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 }); }
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); }