From 44de4a8a8c80179e54ebc21b0cbedcbb863982a5 Mon Sep 17 00:00:00 2001 From: Pasha Date: Thu, 23 Apr 2026 14:31:11 +0100 Subject: [PATCH] Added basic heat grid --- Assets/Scenes/GameScene.unity | 280 ++++++++++++++++++ .../Scripts/Game/Buildings/BuildingManager.cs | 66 ++++- 2 files changed, 344 insertions(+), 2 deletions(-) diff --git a/Assets/Scenes/GameScene.unity b/Assets/Scenes/GameScene.unity index e7ee851..ef5ec6d 100644 --- a/Assets/Scenes/GameScene.unity +++ b/Assets/Scenes/GameScene.unity @@ -368,6 +368,66 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!1 &208685785 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 208685786} + - component: {fileID: 208685787} + m_Layer: 5 + m_Name: HeatGrid + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &208685786 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 208685785} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1165634414} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 100} + m_SizeDelta: {x: 3840, y: 1960} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &208685787 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 208685785} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8a8695521f0d02e499659fee002a26c2, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.GridLayoutGroup + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_StartCorner: 0 + m_StartAxis: 0 + m_CellSize: {x: 40, y: 40} + m_Spacing: {x: 0, y: 0} + m_Constraint: 0 + m_ConstraintCount: 2 --- !u!1 &224905609 GameObject: m_ObjectHideFlags: 0 @@ -1468,6 +1528,7 @@ RectTransform: - {fileID: 2112507919} - {fileID: 2026916298} - {fileID: 96288173} + - {fileID: 208685786} - {fileID: 2142689107} - {fileID: 1330313875} - {fileID: 1194686691} @@ -2034,6 +2095,85 @@ MonoBehaviour: m_Spacing: {x: 25, y: 25} m_Constraint: 0 m_ConstraintCount: 2 +--- !u!1 &1504934455 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1504934456} + - component: {fileID: 1504934458} + - component: {fileID: 1504934457} + m_Layer: 5 + m_Name: Text (Legacy) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1504934456 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1504934455} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.25, y: 0.25, z: 0.25} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 1754435485} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1504934457 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1504934455} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Text + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 140 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 140 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: Heat Grid +--- !u!222 &1504934458 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1504934455} + m_CullTransparentMesh: 1 --- !u!1 &1511006084 GameObject: m_ObjectHideFlags: 0 @@ -2201,6 +2341,139 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Fruitomation::Fruitomation.Game.Items.ItemInfoRegistry SerializedRegistry: {fileID: 11400000, guid: b518751a8b5ee0942af68ec87eeba0c5, type: 2} +--- !u!1 &1754435484 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1754435485} + - component: {fileID: 1754435488} + - component: {fileID: 1754435487} + - component: {fileID: 1754435486} + m_Layer: 5 + m_Name: Button (Legacy) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1754435485 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1754435484} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1504934456} + m_Father: {fileID: 2112507919} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 175, y: 125} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1754435486 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1754435484} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Button + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1754435487} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 2005593405} + m_TargetAssemblyTypeName: Fruitomation.Game.BuildingManager, Fruitomation + m_MethodName: ToggleGrid + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1754435487 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1754435484} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1754435488 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1754435484} + m_CullTransparentMesh: 1 --- !u!1 &1935863237 GameObject: m_ObjectHideFlags: 0 @@ -2474,6 +2747,12 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Registry: {fileID: 11400000, guid: e6ae3d283005f994da00a3d8835a3cb5, type: 2} + HeatGrid: {fileID: 208685785} + FreezingColor: {r: 0, g: 0.19607843, b: 1, a: 0.5882353} + ColdColor: {r: 0, g: 0.78431374, b: 1, a: 0.5882353} + RoomColor: {r: 1, g: 1, b: 1, a: 0.5882353} + WarmColor: {r: 1, g: 0.5882353, b: 0, a: 0.5882353} + BoilingColor: {r: 1, g: 0.19607843, b: 0, a: 0.5882353} --- !u!1 &2026916297 GameObject: m_ObjectHideFlags: 0 @@ -2708,6 +2987,7 @@ RectTransform: - {fileID: 1347333877} - {fileID: 873667506} - {fileID: 1511006085} + - {fileID: 1754435485} - {fileID: 2048015618} m_Father: {fileID: 1165634414} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Scripts/Game/Buildings/BuildingManager.cs b/Assets/Scripts/Game/Buildings/BuildingManager.cs index fe22980..b86ff08 100644 --- a/Assets/Scripts/Game/Buildings/BuildingManager.cs +++ b/Assets/Scripts/Game/Buildings/BuildingManager.cs @@ -5,17 +5,37 @@ using UnityEngine; using System.Linq; using System.IO; using System; +using Random = UnityEngine.Random; #if UNITY_EDITOR using UnityEditor; +using UnityEngine.UI; #endif // UNITY_EDITOR namespace Fruitomation.Game { public class BuildingManager : MonoBehaviour { + [Header("References")] [SerializeField] private BuildingRegistry Registry; - + [SerializeField] private GameObject HeatGrid; + + [Header("Colors")] + [SerializeField] private Color FreezingColor; + [SerializeField] private Color ColdColor; + [SerializeField] private Color RoomColor; + [SerializeField] private Color WarmColor; + [SerializeField] private Color BoilingColor; + + private enum HeatingLevel + { + Freezing, + Cold, + Room, + Warm, + Boiling + } + private class BuildingInfo { public BuildingInfo(Building b, RectTransform rt) @@ -55,13 +75,55 @@ namespace Fruitomation.Game private static string Filepath => Path.Combine(Application.persistentDataPath, "buildings.json"); + private (HeatingLevel, Image)[,] HeatingLevels { get; } = new (HeatingLevel, Image)[96, 49]; private bool[,] InhabitedCells { get; } = new bool[96, 49]; + private List Buildings { get; } = new(); #if UNITY_EDITOR private static BuildingManager Instance; - private void Awake() => Instance = this; + + public void ToggleGrid() => HeatGrid.SetActive(!HeatGrid.activeSelf); + + private Color LevelToColor(HeatingLevel level) + { + return level switch + { + HeatingLevel.Room => RoomColor, + HeatingLevel.Boiling => BoilingColor, + HeatingLevel.Cold => ColdColor, + HeatingLevel.Freezing => FreezingColor, + HeatingLevel.Warm => WarmColor, + var _ => new Color() + }; + } + + private void Awake() + { + HeatGrid.SetActive(false); + Instance = this; + + for (int x = 0; x < HeatingLevels.GetLength(0); x++) + { + for (int y = 0; y < HeatingLevels.GetLength(1); y++) + { + GameObject go = new($"Grid_{x}_{y}"); + go.transform.SetParent(HeatGrid.transform); + + RectTransform rt = go.AddComponent(); + Image img = go.AddComponent(); + + HeatingLevels[x, y].Item1 = (HeatingLevel)Random.Range(0, 5); + HeatingLevels[x, y].Item2 = img; + + img.color = LevelToColor(HeatingLevels[x, y].Item1); + + rt.localScale = Vector3.one; + img.raycastTarget = false; + } + } + } [MenuItem("Fruitomation/Clear Buildings")] public static void ClearBuildings()