Added a building menu
This commit is contained in:
48
Assets/Scripts/UI/BuildingMenu.cs
Normal file
48
Assets/Scripts/UI/BuildingMenu.cs
Normal 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);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
3
Assets/Scripts/UI/BuildingMenu.cs.meta
Normal file
3
Assets/Scripts/UI/BuildingMenu.cs.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2bb002f4016c430087d575013ed27739
|
||||
timeCreated: 1774970427
|
||||
@@ -27,7 +27,7 @@ namespace Fruitomation.UI
|
||||
|
||||
BuildButton.onClick.AddListener(() =>
|
||||
{
|
||||
GameStateController.State = GameState.Building;
|
||||
GameStateController.State = GameState.BuildingMenu;
|
||||
});
|
||||
|
||||
PauseButton.onClick.AddListener(() =>
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user