From 0fe0a5258550cb8954e256d2f7da550381d5c9c4 Mon Sep 17 00:00:00 2001 From: Pasha Date: Mon, 13 Apr 2026 20:10:20 +0100 Subject: [PATCH] Added a scene controller --- Assets/Scripts/Game/Buildings/Building.cs | 1 - .../Scripts/Game/Buildings/BuildingManager.cs | 8 ++- Assets/Scripts/Game/SceneController.cs | 50 +++++++++++++++++++ Assets/Scripts/Game/SceneController.cs.meta | 2 + Assets/Scripts/UI/FruitBowlController.cs | 2 + 5 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 Assets/Scripts/Game/SceneController.cs create mode 100644 Assets/Scripts/Game/SceneController.cs.meta diff --git a/Assets/Scripts/Game/Buildings/Building.cs b/Assets/Scripts/Game/Buildings/Building.cs index 23b899b..4380c3c 100644 --- a/Assets/Scripts/Game/Buildings/Building.cs +++ b/Assets/Scripts/Game/Buildings/Building.cs @@ -28,7 +28,6 @@ namespace Fruitomation.Game [UsedImplicitly, Preserve, InspectorCallable("Click Building")] public void OnBuildingClicked() { - Debug.Log($"Building clicked {gameObject.name}"); if (GameStateController.Is(GameState.Editing)) { Manager.RemoveBuilding(this); diff --git a/Assets/Scripts/Game/Buildings/BuildingManager.cs b/Assets/Scripts/Game/Buildings/BuildingManager.cs index b051cbb..fead5e9 100644 --- a/Assets/Scripts/Game/Buildings/BuildingManager.cs +++ b/Assets/Scripts/Game/Buildings/BuildingManager.cs @@ -82,6 +82,12 @@ namespace Fruitomation.Game info.Building.Init(this, building.GridPosition, building.Position, building.IsFlipped); Buildings.Add(info.Building); + + for (int x = building.GridPosition.x; x < building.GridPosition.x + info.Building.SizeOnGrid.x; x++) + for (int y = building.GridPosition.y; y < building.GridPosition.y + info.Building.SizeOnGrid.y; y++) + { + InhabitedCells[x, y] = true; + } } } @@ -98,7 +104,7 @@ namespace Fruitomation.Game ) ).ToList(); - string json = JsonUtility.ToJson(new SerializedBuildings(serialized), false); + string json = JsonUtility.ToJson(new SerializedBuildings(serialized), true); File.WriteAllText(Filepath, json); } diff --git a/Assets/Scripts/Game/SceneController.cs b/Assets/Scripts/Game/SceneController.cs new file mode 100644 index 0000000..dab9a10 --- /dev/null +++ b/Assets/Scripts/Game/SceneController.cs @@ -0,0 +1,50 @@ +using PashaBibko.Pacore.Attributes; +using UnityEngine.SceneManagement; +using System.Collections; +using System.Diagnostics; +using UnityEngine; +using System; + +using Debug = UnityEngine.Debug; + +namespace Fruitomation.Game +{ + [CreateInstanceOnStart] public class SceneController : MonoBehaviour + { + private static SceneController Instance; + + private void Awake() + { + if (Instance is not null) + { + Debug.LogError($"Multiple instances of [{nameof(SceneController)}] cannot exist."); + return; + } + + Instance = this; + } + + private IEnumerator StartLoadInternal(string scene) + { + Stopwatch sw = Stopwatch.StartNew(); + AsyncOperation operation = SceneManager.LoadSceneAsync(scene); + if (operation == null) + { + string error = $"Unknown scene [{scene}]"; + throw new ArgumentException(error); + } + + operation.allowSceneActivation = false; + operation.completed += _ => + { + sw.Stop(); + Debug.Log($"Scene finished loading [Took {sw.ElapsedMilliseconds}ms]"); + }; + + yield return new WaitForSeconds(5f); + operation.allowSceneActivation = true; + } + + public static void StartLoadOf(string scene) => Instance.StartCoroutine(Instance.StartLoadInternal(scene)); + } +} diff --git a/Assets/Scripts/Game/SceneController.cs.meta b/Assets/Scripts/Game/SceneController.cs.meta new file mode 100644 index 0000000..887cd79 --- /dev/null +++ b/Assets/Scripts/Game/SceneController.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 0d873aa48a3b7c44db3a4bd68b11c113 \ No newline at end of file diff --git a/Assets/Scripts/UI/FruitBowlController.cs b/Assets/Scripts/UI/FruitBowlController.cs index c301417..29bb730 100644 --- a/Assets/Scripts/UI/FruitBowlController.cs +++ b/Assets/Scripts/UI/FruitBowlController.cs @@ -1,3 +1,4 @@ +using Fruitomation.Game; using Fruitomation.Global; using UnityEngine.UI; using UnityEngine; @@ -19,6 +20,7 @@ namespace Fruitomation.UI UpgradesButton.onClick.AddListener(() => { GameStateController.State = GameState.UpgradeMenu; + SceneController.StartLoadOf("SampleScene"); }); SimulateButton.onClick.AddListener(() =>