public StructureBuildActiveActionExecuteBuilder(IFixture fixture) { this.fixture = fixture; requirementCsvFactory = fixture.Freeze <IRequirementCsvFactory>(); requirementCsvFactory .GetLayoutRequirement(Arg.Any <ushort>(), Arg.Any <byte>()) .Validate(Arg.Any <IStructure>(), Arg.Any <ushort>(), Arg.Any <uint>(), Arg.Any <uint>(), Arg.Any <byte>()) .Returns(true); structureBaseStats = fixture.Freeze <IStructureBaseStats>(); structureBaseStats.Size.Returns <byte>(0); var structureCost = new Resource(1234, 8446, 1343, 1234, 1246); structureBaseStats.Cost.Returns(structureCost); var structure = fixture.Freeze <IStructure>(); structure.Stats.Base.Returns(structureBaseStats); objectTypeFactory = fixture.Freeze <IObjectTypeFactory>(); objectTypeFactory.IsObjectType("NoRoadRequired", Arg.Any <ushort>()).Returns(true); city = fixture.Create <ICity>(); city.PrimaryPosition.Returns(new Position(99, 98)); city.Radius.Returns <byte>(5); city.Resource.HasEnough(structureBaseStats.Cost).Returns(true); city.CreateStructure(Arg.Any <ushort>(), Arg.Any <byte>(), Arg.Any <uint>(), Arg.Any <uint>()).Returns(structure); roadPathFinder = fixture.Freeze <IRoadPathFinder>(); roadPathFinder.CanBuild(Arg.Any <Position>(), Arg.Any <byte>(), city, Arg.Any <bool>()).Returns(Error.Ok); tileLocator = fixture.Freeze <ITileLocator>(); tileLocator.TileDistance(new Position(99, 98), 1, Arg.Any <Position>(), 1).Returns(1); world = fixture.Freeze <IWorld>(); ICity outCity; world.TryGetObjects(Arg.Any <uint>(), out outCity).Returns(x => { x[1] = city; return(true); }); world.Regions.GetObjectsInTile(Arg.Any <uint>(), Arg.Any <uint>()).Returns(new List <ISimpleGameObject>()); world.Regions.IsValidXandY(0, 0).ReturnsForAnyArgs(true); world.Regions.Add(structure).Returns(true); structureCsvFactory = fixture.Freeze <IStructureCsvFactory>(); structureCsvFactory.GetBaseStats(0, 0).ReturnsForAnyArgs(structureBaseStats); formula = Substitute.For <Formula>(); formula.CityMaxConcurrentBuildActions(0, 0, null, null).ReturnsForAnyArgs(Error.Ok); formula.StructureCost(null, null).ReturnsForAnyArgs(structureCost); fixture.Register(() => formula); }
/// <summary> /// Creates a city under the specified player with initial troop and main building /// </summary> public virtual void CreateCity(ICityFactory cityFactory, IPlayer player, string cityName, byte level, Position cityPosition, IBarbarianTribeManager barbarianTribeManager, out ICity city) { city = cityFactory.CreateCity(world.Cities.GetNextCityId(), player, cityName, cityPosition, formula.GetInitialCityResources(), formula.GetInitialCityRadius(), formula.GetInitialAp(), Theme.DEFAULT_THEME_ID, Theme.DEFAULT_THEME_ID, Theme.DEFAULT_THEME_ID, Theme.DEFAULT_THEME_ID); var mainBuildingPosition = cityPosition.Left(); IStructure mainBuilding = city.CreateStructure(2000, level, mainBuildingPosition.X, mainBuildingPosition.Y); player.Add(city); world.Cities.Add(city); city.BeginUpdate(); mainBuilding.BeginUpdate(); world.Regions.Add(mainBuilding); mainBuilding.EndUpdate(); var defaultTroop = city.CreateTroopStub(); defaultTroop.BeginUpdate(); defaultTroop.AddFormation(FormationType.Normal); defaultTroop.AddFormation(FormationType.Garrison); defaultTroop.AddFormation(FormationType.InBattle); defaultTroop.EndUpdate(); RecalculateCityResourceRates(city); SetResourceCap(city); city.EndUpdate(); if (player.GetCityCount() == 1) { barbarianTribeManager.CreateBarbarianTribeNear(1, 10, city.PrimaryPosition.X, city.PrimaryPosition.Y, 10); } }