Exemple #1
0
 public CelestialBodyLogic(GameState state, CelestialBody body)
 {
     _state    = state;
     Body      = body;
     Buildings = new CelestialBodyBuildings(this);
     Resources = new CelestialBodyResources(this);
     ShipQueue = new List <SpaceshipTemplate>();
 }
Exemple #2
0
    public override void UpdateDisplay()
    {
        CelestialBodyResources resources = GetSelectedResources();

        foreach (GameObject button in _buttons)
        {
            button.GetComponent <Button>().interactable = CanAfford(
                resources,
                Ships[button.GetComponent <IndexSelectionButton>().Index]
                );
        }
    }
Exemple #3
0
    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;
            }
        }
    }
Exemple #4
0
    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();
    }
Exemple #5
0
 private static bool CanAfford(CelestialBodyResources resources, SpaceshipTemplate template)
 {
     return(template.Costs.All(cost => resources[cost.Resource] >= cost.Amount));
 }