public CelestialBodyLogic(GameState state, CelestialBody body) { _state = state; Body = body; Buildings = new CelestialBodyBuildings(this); Resources = new CelestialBodyResources(this); ShipQueue = new List <SpaceshipTemplate>(); }
public override void UpdateDisplay() { CelestialBodyResources resources = GetSelectedResources(); foreach (GameObject button in _buttons) { button.GetComponent <Button>().interactable = CanAfford( resources, Ships[button.GetComponent <IndexSelectionButton>().Index] ); } }
public override void UpdateDisplay() { if (GameController.Instance.SelectedBody == null || !gameObject.activeSelf) { return; } CelestialBodyResources resources = GameController.Instance .State .StarSystem .SkipWhile(planet => planet.Body != GameController.Instance.SelectedBody) .First() .Resources; if (Energy != null) { int powerProduction = resources.GetRawProduction(Energy); int powerConsumption = resources.GetRawConsumption(Energy); PowerDisplay.text = $"{powerConsumption} / {powerProduction}"; PowerDisplay.color = powerConsumption > powerProduction ? DeficitColor : Color.white; } Dictionary <Resource, int> resourceDelta = resources.GetIdealResourceDelta(); Dictionary <Resource, int> resourceCapacity = resources.GetIdealResourceCapacity(); foreach (ResourceDisplayEntry entry in ResourceDisplays) { int storage = resources[entry.Resource]; resourceDelta.TryGetValue(entry.Resource, out int delta); resourceCapacity.TryGetValue(entry.Resource, out int capacity); entry.Display.text = $"{storage}{delta:+0;-0} / {capacity}"; if (delta < 0 && storage + delta < 0) { entry.Display.color = DeficitColor; } else if (delta < 0 && storage + delta * 10 < 0) { entry.Display.color = DeficitWarningColor; } else { entry.Display.color = Color.white; } } }
private void ConstructShip(SpaceshipTemplate template) { CelestialBodyResources resources = GetSelectedResources(); if (!CanAfford(resources, template)) { Debug.LogError($"Tried to construct {template.DisplayName} but can't afford!"); return; } foreach (ShipCost cost in template.Costs) { resources[cost.Resource] -= cost.Amount; } GameController.Instance.GetSelectedLogic().ShipQueue.Add(template); UpdateDisplay(); QueueUI.UpdateDisplay(); }
private static bool CanAfford(CelestialBodyResources resources, SpaceshipTemplate template) { return(template.Costs.All(cost => resources[cost.Resource] >= cost.Amount)); }