Added a building menu

This commit is contained in:
2026-03-31 16:48:27 +01:00
parent 0b9f49e5ea
commit f962d34596
8 changed files with 488 additions and 18 deletions

View File

@@ -6,6 +6,7 @@ namespace Fruitomation.Global
public enum GameState
{
Simulation,
BuildingMenu,
Building,
UpgradeMenu,
Paused,

View File

@@ -0,0 +1,48 @@
using System.Collections.Generic;
using Fruitomation.Global;
using UnityEngine;
using UnityEngine.UI;
namespace Fruitomation.UI
{
public class BuildingMenu : MonoBehaviour
{
[System.Serializable] private class BuildingInfo
{
public string Name;
public GameObject Prefab;
}
[Header("References")]
[SerializeField] private GameCursor Cursor;
[SerializeField] private GameObject Menu;
[SerializeField] private GameObject MenuGrid;
[SerializeField] private GameObject MenuItemPrefab;
[Header("Options")]
[SerializeField] private List<BuildingInfo> BuildingPrefabs;
private void Update()
{
Menu.SetActive(GameStateController.Is(GameState.BuildingMenu));
}
private void Start()
{
foreach (BuildingInfo info in BuildingPrefabs)
{
GameObject go = Instantiate(MenuItemPrefab, MenuGrid.transform);
Text text = go.GetComponentInChildren<Text>();
text.text = info.Name;
Button butt = go.GetComponent<Button>();
butt.onClick.AddListener(() =>
{
GameStateController.State = GameState.Building;
Cursor.SetSelectedBuildingToBuild(info.Prefab);
});
}
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 2bb002f4016c430087d575013ed27739
timeCreated: 1774970427

View File

@@ -27,7 +27,7 @@ namespace Fruitomation.UI
BuildButton.onClick.AddListener(() =>
{
GameStateController.State = GameState.Building;
GameStateController.State = GameState.BuildingMenu;
});
PauseButton.onClick.AddListener(() =>

View File

@@ -21,19 +21,25 @@ namespace Fruitomation.UI
[SerializeField] private Image CursorImage;
[SerializeField] private BuildingManager BuildingManager;
[Header("Dev")]
[SerializeField] private GameObject BuildingPrefab;
[Header("Read Only")]
[SerializeField, InspectorReadOnly] private float CurrentMouseClickStrength;
[SerializeField, InspectorReadOnly] private Vector2Int GridPosition;
[SerializeField, InspectorReadOnly] private GameObject SelectedBuildingToBuild;
private readonly ContactFilter2D ContactFilter = new();
private readonly List<Collider2D> Colliders = new();
private BuildingBase SelectedBuildingsBuildingBase;
private float StartOfMouseClick;
private bool MouseOnGrid;
public void SetSelectedBuildingToBuild(GameObject prefab)
{
SelectedBuildingsBuildingBase = prefab.GetComponent<BuildingBase>();
SelectedBuildingToBuild = prefab;
}
private void UpdatePosition()
{
Ray ray = ActiveCamera.ScreenPointToRay(Input.mousePosition);
@@ -62,6 +68,9 @@ namespace Fruitomation.UI
private void Update()
{
UpdatePosition();
CursorImage.enabled = false;
BuildingPreview.enabled = false;
CurrentMouseClickStrength = MIN_STRENGTH;
switch (GameStateController.State)
@@ -77,6 +86,7 @@ namespace Fruitomation.UI
case GameState.UpgradeMenu:
case GameState.Paused:
case GameState.Default:
case GameState.BuildingMenu:
break; // No extra logic needed
default:
@@ -93,7 +103,6 @@ namespace Fruitomation.UI
private void UpdateMouseStateSimulation()
{
CursorImage.enabled = true;
BuildingPreview.enabled = false;
if (Input.GetMouseButtonUp(0))
{
@@ -134,29 +143,26 @@ namespace Fruitomation.UI
private void UpdateMouseStateBuilding()
{
CursorImage.enabled = false;
BuildingPreview.enabled = true;
//
BuildingBase building = BuildingPrefab.GetComponent<BuildingBase>();
BuildingPreview.material = new Material(Shader.Find("UI/Default"))
{
mainTexture = building.Texture
mainTexture = SelectedBuildingsBuildingBase.Texture
};
BuildingPreview.rectTransform.sizeDelta = building.SizeOnGrid * 40;
BuildingPreview.rectTransform.sizeDelta = SelectedBuildingsBuildingBase.SizeOnGrid * 40;
//
Vector2Int p0 = new
(
Math.Clamp(GridPosition.x, 0, 96 - building.SizeOnGrid.x),
Math.Clamp(GridPosition.y, 0, 49 - building.SizeOnGrid.y)
Math.Clamp(GridPosition.x, 0, 96 - SelectedBuildingsBuildingBase.SizeOnGrid.x),
Math.Clamp(GridPosition.y, 0, 49 - SelectedBuildingsBuildingBase.SizeOnGrid.y)
);
Vector2Int p1 = p0 - new Vector2Int(48, 24);
Vector2Int p2 = p1 * 40;
Vector2Int p3 = p2 + new Vector2Int(20, 100);
Vector2 o0 = building.SizeOnGrid - Vector2.one;
Vector2 o0 = SelectedBuildingsBuildingBase.SizeOnGrid - Vector2.one;
Vector2 o1 = o0 * 20;
Vector2 p4 = p3 + o1;
BuildingPreview.rectTransform.anchoredPosition = p4;
@@ -164,7 +170,7 @@ namespace Fruitomation.UI
//
if (Input.GetMouseButtonDown(0) && MouseOnGrid)
{
BuildingManager.AddBuildingAt(p1, BuildingPrefab);
BuildingManager.AddBuildingAt(p1, SelectedBuildingToBuild);
}
}
}