/// <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);
        }
Пример #2
0
 public void Apply(RaceConfig raceConfig, RaceDescriptionResult raceData)
 {
     _raceConfig = raceConfig;
     _raceData   = raceData;
     RefreshContent();
 }
Пример #3
0
        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);
        }
Пример #4
0
        public StatusCodeResult SetConfiguration([FromBody] RaceConfig config)
        {
            manager.Start(config, new List <Rider>());

            return(new StatusCodeResult(200));
        }
Пример #5
0
        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);
            }
        }