Added the unlock menu thing

This commit is contained in:
Pasha Bibko
2026-05-05 11:21:44 +01:00
parent 4b08904de9
commit 066b3bc958
6 changed files with 934 additions and 69 deletions

View File

@@ -106,20 +106,15 @@ namespace Fruitomation.UI
UpgradeLines = lines.ToArray();
}
private void OnButtonClicked()
{
if (Cost == 0f)
{
Debug.LogWarning("Upgrade Cost has not been set");
return;
}
if (MoneyController.CanBuy(Cost))
{
UpgradeManager.Unlock(Upgrade);
}
}
private void OnButtonClicked() => UpgradeBoard.Enable
(
Upgrade,
Inputs,
Outputs,
Building,
Cost
);
private bool IsUnlockable =>
RequiredUpgrades.Length == 0 ||
RequiredUpgrades.All(required => required.IsUnlocked);
@@ -170,7 +165,8 @@ namespace Fruitomation.UI
State = UpgradeState.Hidden;
}
AttachedButton.interactable = State == UpgradeState.Unlockable;
AttachedButton.interactable =
State is UpgradeState.Unlockable or UpgradeState.Unlocked;
string cost = Cost == 0f ? "UNAVAILABLE" : $"{Cost:F1}";

View File

@@ -1,22 +1,105 @@
using UnityEngine;
using System.Collections.Generic;
using Fruitomation.Game.Items;
using Fruitomation.Game;
using UnityEngine.UI;
using UnityEngine;
namespace Fruitomation.UI
{
public class UpgradeInfoBoard : MonoBehaviour
{
[SerializeField] private GameObject BoardGO;
[SerializeField] private Button[] ExitButtons;
[SerializeField] private BuildingRegistry Registry;
[SerializeField] private GameObject InputParent;
[SerializeField] private GameObject OutputParent;
[SerializeField] private GameObject BuildingDisplay;
[SerializeField] private GameObject LeftArrow;
[SerializeField] private GameObject SpawnerText;
private readonly Dictionary<AutomationBuildingType, GameObject> BuildingRegistry = new();
private readonly List<GameObject> ChildrenToKill = new();
private void Start()
{
BoardGO.SetActive(false);
foreach (Button b in ExitButtons)
{
b.onClick.AddListener(Disable);
}
foreach (BuildingRegistry.BuildingInfo info in Registry.GetBuildings())
{
if (info.Type != AutomationBuildingType.None)
{
BuildingRegistry.Add(info.Type, info.Prefab);
}
}
}
public void Enable()
public void Enable
(
BasicUpgrade upgrade,
ItemType[] inputs,
ItemType[] outputs,
AutomationBuildingType building,
double cost
)
// Wow, those function params are horrible
{
BoardGO.SetActive(true);
foreach (ItemType input in inputs)
{
ItemInfo info = ItemInfoRegistry.Get(input);
GameObject go = Instantiate(info.Prefab, InputParent.transform);
ChildrenToKill.Add(go);
}
foreach (ItemType output in outputs)
{
ItemInfo info = ItemInfoRegistry.Get(output);
GameObject go = Instantiate(info.Prefab, OutputParent.transform);
ChildrenToKill.Add(go);
}
if (building != AutomationBuildingType.Spawner)
{
BuildingDisplay.SetActive(true);
LeftArrow.SetActive(true);
SpawnerText.SetActive(false);
Sprite sprite = BuildingRegistry[building].GetComponent<Building>().Sprite;
BuildingDisplay.GetComponent<Image>().sprite = sprite;
if (building == AutomationBuildingType.HeatExchanger)
{
RectTransform rt = BuildingDisplay.GetComponent<RectTransform>();
rt.sizeDelta = new Vector2(125f, 250f);
}
else
{
RectTransform rt = BuildingDisplay.GetComponent<RectTransform>();
rt.sizeDelta = new Vector2(250f, 250f);
}
}
else
{
BuildingDisplay.SetActive(false);
LeftArrow.SetActive(false);
SpawnerText.SetActive(true);
}
}
public void Disable()
private void Disable()
{
BoardGO.SetActive(false);
foreach (GameObject child in ChildrenToKill)
{
Destroy(child);
}
ChildrenToKill.Clear();
}
}
}
}