示例#1
0
 public void LoadBuilding(RecipeBuildingInfo info)
 {
     gameObject.SetActive(true);
     _activeSlots.Clear();
     foreach (var slot in Slots)
     {
         var slotInfo = info.Slots.Find(x => x.Slot == slot);
         if (slotInfo != null)
         {
             slot.ApplyOverrides(slotInfo);
             slot.Load();
             _activeSlots.Add(slot);
         }
         else
         {
             slot.Unload();
         }
     }
 }
示例#2
0
    void InitLevel(LevelConfig config)
    {
        CurrentLevel      = config;
        _result           = Result.Running;
        _gameTimerElapsed = 0;
        _finished         = false;

        ActiveResourceBuildings.Clear();
        foreach (var building in AllResourceBuildings)
        {
            ResourceBuildingInfo resInfo = config.ActiveResourcesBuildings.Find(x => x.Building == building);
            if (resInfo != null)
            {
                building.LoadBuilding(resInfo);
                ActiveResourceBuildings.Add(building);
            }
            else
            {
                building.Unload();
            }
        }

        ActiveRecipeBuildings.Clear();
        foreach (var building in AllRecipeBuildings)
        {
            RecipeBuildingInfo resInfo = config.ActiveRecipeBuildings.Find(x => x.Building == building);
            if (config.ActiveRecipeBuildings.Exists(x => x.Building == building))
            {
                building.LoadBuilding(resInfo);
                ActiveRecipeBuildings.Add(building);
            }
            else
            {
                building.Unload();
            }
        }

        _requestAllocations.Clear();
        ActiveClientRequestSlots.Clear();
        foreach (var slot in AllClientSlots)
        {
            slot.Clear();
            if (config.ActiveSlots.Contains(slot))
            {
                ActiveClientRequestSlots.Add(slot);
            }
        }

        ActiveDisposalFacilities.Clear();
        foreach (var wasteland in AllDisposalFacilities)
        {
            if (config.Wastelands.Contains(wasteland))
            {
                wasteland.Load();
                ActiveDisposalFacilities.Add(wasteland);
            }
            else
            {
                wasteland.UnLoad();
            }
        }

        int numClients = CurrentLevel.NumClients;

        _requestTimes = new float[numClients];
        float avgTime = CurrentLevel.LevelTimeSeconds / CurrentLevel.NumClients;

        for (int i = 0; i < numClients; ++i)
        {
            _requestTimes[i] = Mathf.Clamp(i * avgTime + UnityEngine.Random.Range(-CurrentLevel.DistributionNoise, CurrentLevel.DistributionNoise), 0, CurrentLevel.LevelTimeSeconds);
        }
        _requestIdx     = 0;
        _requestElapsed = 0;
        _numFailures    = 0;
        _revenue        = 0;


        _stalledRequests = new Queue <RequestData>();

        _dragging = false;
        _fatigue  = StartFatigue;
        _elapsedSinceLastDragFinished = -1.0f;

        GameStarted?.Invoke(LevelIdx, CurrentLevel, SecondsToGameStart);
        _startReady = false;
        StartCoroutine(DelayedReady());
    }