public static void ConfigureBuildingConstructorAgent(WorldRules worldRules) { Contract.Requires(worldRules != null); EmptyLocationVoter emptyLocation = EmptyLocationVoter.GetInstance(); StochasticVoter stochastic = new StochasticVoter(worldRules.Random); worldRules.ConfigProvider.RegisterConfigUpdateListener <double>("tiledev.rate", rate => { Contract.Requires(rate >= 0.0 && rate <= 1.0); stochastic.DevelopmentRate = rate; }); var buildingTransportLinkFinder = new BuildingTransportLinkFinder(); worldRules.OnNewWorldListener += buildingTransportLinkFinder.OnNewWorld; worldRules.ConfigProvider.RegisterConfigUpdateListener <int>("transport_location.max_distance", maxDistance => { Contract.Requires(maxDistance > 0); buildingTransportLinkFinder.MaxDistance = maxDistance; }); var buildingConnectionFinder = new BuildingConnectionFinder(CreatePathFinder(), new RandomResourceProvider(buildingTransportLinkFinder)); worldRules.OnNewWorldListener += buildingConnectionFinder.OnNewWorld; var buildingResource = new BuildingResourceVoter(buildingConnectionFinder, buildingTransportLinkFinder); CombinedBuildingDevelopmentVoter combinedTileDevelopmentVoter = new CombinedBuildingDevelopmentVoter(emptyLocation, stochastic, buildingResource); BuildingConstructorVoter buildingConstructionVoter = new BuildingConstructorVoter(combinedTileDevelopmentVoter, new ZoneBuildingModels()); worldRules.OnNewWorldListener += w => buildingConstructionVoter.OnNewWorld(w); var zoneDeveloper = new BuildingConstructor(buildingConstructionVoter); worldRules.Agents[zoneDeveloper.Name] = new ScheduledAgent(zoneDeveloper, 1.0f); }
/// <summary> /// Initializes a new instance of the <see cref="BuildingConstructor"/> class. /// </summary> public BuildingConstructor(BuildingConstructorVoter rootTileDevelopmentVoter) { this.buildingConstructorVoter = rootTileDevelopmentVoter; }