/// <summary> /// Manage a race from real sensor data /// </summary> public void Start(RaceConfig config, List <Rider> riders) { Stop(); CommunicationManager CommunicationManager = new CommunicationManager(source.Token); SerialTimingUnit timer = new SerialTimingUnit(CommunicationManager.GetCommunicationDevice(config.TimingUnitId), "timerUnit", source.Token, config.StartTimingGateId, config.EndTimingGateId); timing = timer; displays.Add(timer); BLERiderIdUnit realStartId = new BLERiderIdUnit(CommunicationManager.GetCommunicationDevice(config.StartIdUnitId), "startUnit", config.StartIdRange, source.Token); endGate = new BLERiderIdUnit(CommunicationManager.GetCommunicationDevice(config.EndIdUnitId), "finishUnit", config.EndIdRange, source.Token); startGate = realStartId; startLight = realStartId; startGate?.ClearKnownRiders(); endGate?.ClearKnownRiders(); startLight.SetStartLightColor(StartLightColor.YELLOW); startGate.AddKnownRiders(riders); tracker = new RaceTracker(timing, startGate, endGate, config.ExtractTrackerConfig(), riders); HookEvents(tracker); CombinedTasks = tracker.Run(source.Token); }
public void Apply(RaceConfig raceConfig, RaceDescriptionResult raceData) { _raceConfig = raceConfig; _raceData = raceData; RefreshContent(); }
public static int DetermineGrowthRate(int maxSettlementSize, int numberOfCitizens, RaceConfig race, List <int> buildingsBuilt) { // base if (numberOfCitizens >= maxSettlementSize) { return(0); } var baseGrowthRate = (maxSettlementSize - numberOfCitizens + 1) * Zen.Utilities.Constants.OneHalf; var baseGrowthRateFloored = (int)Math.Floor(baseGrowthRate); var adjustedGrowthRate = baseGrowthRateFloored * 10; // racial modifiers adjustedGrowthRate += (int)race.GrowthRateModifier; // settlement buildings (granary +20, farmers market +30) var gameConfigCache = CallContext <GameConfigCache> .GetData("GameConfigCache"); foreach (var buildingBuilt in buildingsBuilt) { var building = gameConfigCache.GetBuildingConfigById(buildingBuilt); adjustedGrowthRate += (int)building.PopulationGrowthRateIncrease; } // TODO: spells (stream of life, dark rituals) // TODO: random events (population boom) // TODO: housing // TODO: starvation return(adjustedGrowthRate); }
public StatusCodeResult SetConfiguration([FromBody] RaceConfig config) { manager.Start(config, new List <Rider>()); return(new StatusCodeResult(200)); }
public GameConfigCache() { var gameConfigRepository = CallContext <GameConfigRepository> .GetData("GameConfigRepository"); var actions = gameConfigRepository.GetEntities("Action"); foreach (var action in actions) { var id = (int)action.Id; var config = new ActionConfig(id); _actionConfigsById.Add(id, config); _actionConfigIds.Add(id); _actionConfigsByName.Add(config.Name, id); } var buildings = gameConfigRepository.GetEntities("Building"); foreach (var building in buildings) { var id = (int)building.Id; var config = new BuildingConfig(id); _buildingConfigsById.Add(id, config); _buildingConfigIds.Add(id); _buildingConfigsByName.Add(config.Name, id); } var movements = gameConfigRepository.GetEntities("Movement"); foreach (var movement in movements) { var id = (int)movement.Id; var config = new MovementConfig(id); _movementConfigsById.Add(id, config); _movementConfigIds.Add(id); _movementConfigsByName.Add(config.Name, id); } var races = gameConfigRepository.GetEntities("Race"); foreach (var race in races) { var id = (int)race.Id; var config = new RaceConfig(id); _raceConfigsById.Add(id, config); _raceConfigIds.Add(id); _raceConfigsByName.Add(config.Name, id); } var terrains = gameConfigRepository.GetEntities("Terrain"); foreach (var terrain in terrains) { var id = (int)terrain.Id; var config = new TerrainConfig(id); _terrainConfigsById.Add(id, config); _terrainConfigIds.Add(id); _terrainConfigsByName.Add(config.Name, id); } var units = gameConfigRepository.GetEntities("Unit"); foreach (var unit in units) { var id = (int)unit.Id; var config = new UnitConfig(id); _unitConfigsById.Add(id, config); _unitConfigIds.Add(id); _unitConfigsByName.Add(config.Name, id); } }