From 59596fead888b0f8e2ffed82cc8bd67e9ae1dffc Mon Sep 17 00:00:00 2001 From: Pasha Date: Mon, 19 Jan 2026 21:04:58 +0000 Subject: [PATCH] Made game able to be reloaded --- Assets/Prefabs/GameCanvas.prefab | 234 ++++++++++++++++++++++++++- Assets/Prefabs/PlayerReplayer.prefab | 37 ++--- Assets/Scenes/WorldScene.unity | 17 ++ Assets/Scripts/PlayerController.cs | 53 +++--- Assets/Scripts/WindowBase.cs | 2 +- Assets/Scripts/WindowSpawner.cs | 25 ++- 6 files changed, 321 insertions(+), 47 deletions(-) diff --git a/Assets/Prefabs/GameCanvas.prefab b/Assets/Prefabs/GameCanvas.prefab index 9bfa0c8..32eda56 100644 --- a/Assets/Prefabs/GameCanvas.prefab +++ b/Assets/Prefabs/GameCanvas.prefab @@ -47,6 +47,7 @@ MonoBehaviour: k__BackingField: {fileID: 8853825751094127020, guid: 2cad467961f3cff4984a6f50fc091377, type: 3} k__BackingField: {fileID: 7700643890201660349} + k__BackingField: {fileID: 2058749420242249500} k__BackingField: - k__BackingField: InterfaceOff.BasicWindow k__BackingField: 10 @@ -58,6 +59,7 @@ MonoBehaviour: k__BackingField: 2 - k__BackingField: InterfaceOff.TriviaWindow k__BackingField: 4 + k__BackingField: 0 k__BackingField: 1 --- !u!1 &2020022267469913571 GameObject: @@ -92,6 +94,140 @@ Transform: - {fileID: 1862862063758533551} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2058749420242249500 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5018153252802778155} + m_Layer: 5 + m_Name: DeathInfo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &5018153252802778155 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2058749420242249500} + 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: 450953812910381365} + - {fileID: 7960376733688604242} + m_Father: {fileID: 834552907522022778} + 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: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &3563736642392842882 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7960376733688604242} + - component: {fileID: 3987117081994636230} + - component: {fileID: 3457638843023186478} + - component: {fileID: 7487102586556094918} + m_Layer: 5 + m_Name: Continue + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7960376733688604242 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3563736642392842882} + 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: 5018153252802778155} + 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: -75} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3987117081994636230 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3563736642392842882} + m_CullTransparentMesh: 1 +--- !u!114 &3457638843023186478 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3563736642392842882} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 20 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 'Press SPACE to continue + +' +--- !u!114 &7487102586556094918 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3563736642392842882} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e19747de3f5aca642ab2be37e372fb86, type: 3} + m_Name: + m_EditorClassIdentifier: + m_EffectColor: {r: 0, g: 0, b: 0, a: 1} + m_EffectDistance: {x: 2, y: -2} + m_UseGraphicAlpha: 1 --- !u!1 &4509675489510948023 GameObject: m_ObjectHideFlags: 0 @@ -123,7 +259,8 @@ RectTransform: m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 0, y: 0, z: 0} m_ConstrainProportionsScale: 0 - m_Children: [] + m_Children: + - {fileID: 5018153252802778155} m_Father: {fileID: 3614641596273148411} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} @@ -208,3 +345,98 @@ MonoBehaviour: m_BlockingMask: serializedVersion: 2 m_Bits: 0 +--- !u!1 &5990535583955157797 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 450953812910381365} + - component: {fileID: 2263699857257715248} + - component: {fileID: 6436671234165154367} + - component: {fileID: 8550888136129672418} + m_Layer: 5 + m_Name: DeathText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &450953812910381365 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5990535583955157797} + 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: 5018153252802778155} + 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: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2263699857257715248 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5990535583955157797} + m_CullTransparentMesh: 1 +--- !u!114 &6436671234165154367 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5990535583955157797} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 100 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 100 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: Haha you lost noob +--- !u!114 &8550888136129672418 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5990535583955157797} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e19747de3f5aca642ab2be37e372fb86, type: 3} + m_Name: + m_EditorClassIdentifier: + m_EffectColor: {r: 0, g: 0, b: 0, a: 1} + m_EffectDistance: {x: 2, y: -2} + m_UseGraphicAlpha: 1 diff --git a/Assets/Prefabs/PlayerReplayer.prefab b/Assets/Prefabs/PlayerReplayer.prefab index fa4004b..e2c187d 100644 --- a/Assets/Prefabs/PlayerReplayer.prefab +++ b/Assets/Prefabs/PlayerReplayer.prefab @@ -71,9 +71,9 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 1807660236798938897} + - component: {fileID: 1013965729963872153} - component: {fileID: 7220179918976106526} - component: {fileID: 9011244016352067911} - - component: {fileID: 1013965729963872153} m_Layer: 0 m_Name: PlayerReplayer m_TagString: Untagged @@ -99,6 +99,24 @@ Transform: - {fileID: 8852994287323472227} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1013965729963872153 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5082956827802089079} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 42603e4f95b24efa85355a04450c20e2, type: 3} + m_Name: + m_EditorClassIdentifier: + ActiveWindowSpawner: {fileID: 0} + BulletTracerRenderer: {fileID: 1440177105284983216} + BulletTracerStart: {fileID: 5020301824866751461} + BulletTracerEnd: {fileID: 8852994287323472227} + k__BackingField: 0 + DeathIndices: be000000f8000000eb0100005a0200008f020000 --- !u!20 &7220179918976106526 Camera: m_ObjectHideFlags: 0 @@ -194,23 +212,6 @@ MonoBehaviour: m_MipBias: 0 m_VarianceClampScale: 0.9 m_ContrastAdaptiveSharpening: 0 ---- !u!114 &1013965729963872153 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5082956827802089079} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 42603e4f95b24efa85355a04450c20e2, type: 3} - m_Name: - m_EditorClassIdentifier: - BulletTracerRenderer: {fileID: 1440177105284983216} - BulletTracerStart: {fileID: 5020301824866751461} - BulletTracerEnd: {fileID: 8852994287323472227} - k__BackingField: 0 - DeathIndices: be000000f8000000eb0100005a0200008f020000 --- !u!1 &6013909295272487250 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Scenes/WorldScene.unity b/Assets/Scenes/WorldScene.unity index e372244..3b8c52b 100644 --- a/Assets/Scenes/WorldScene.unity +++ b/Assets/Scenes/WorldScene.unity @@ -314,6 +314,18 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &447617108 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 1850279079604088768, guid: e29ce1fe47a855c4e907d4312c9e9d6e, + type: 3} + m_PrefabInstance: {fileID: 1758685209} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83fa400829eb6494796e00cfbb1c5d71, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1001 &466407930 PrefabInstance: m_ObjectHideFlags: 0 @@ -322,6 +334,11 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: + - target: {fileID: 1013965729963872153, guid: 2b0bfd2786fee6740a799a99023f5000, + type: 3} + propertyPath: ActiveWindowSpawner + value: + objectReference: {fileID: 447617108} - target: {fileID: 1807660236798938897, guid: 2b0bfd2786fee6740a799a99023f5000, type: 3} propertyPath: m_LocalPosition.x diff --git a/Assets/Scripts/PlayerController.cs b/Assets/Scripts/PlayerController.cs index b97785d..d78cd50 100644 --- a/Assets/Scripts/PlayerController.cs +++ b/Assets/Scripts/PlayerController.cs @@ -8,13 +8,15 @@ namespace InterfaceOff.WorldScene { private static PlayerController Instance; private PlayerFrameInfo[] Frames; - + + [SerializeField] private WindowSpawner ActiveWindowSpawner; [SerializeField] private LineRenderer BulletTracerRenderer; [SerializeField] private Transform BulletTracerStart; [SerializeField] private Transform BulletTracerEnd; [field: SerializeField] public int FrameIndex { get; private set; } [SerializeField] private int[] DeathIndices; + private bool PlayerAlive = true; private float LerpValue; private void Awake() @@ -26,34 +28,41 @@ namespace InterfaceOff.WorldScene private void FixedUpdate() { - /* Iterates the frame index */ - FrameIndex = (FrameIndex + 1) % (Frames.Length - 2); - - if (DeathIndices.Contains(FrameIndex)) + if (PlayerAlive) { - Debug.Log("Possible player death"); + /* Iterates the frame index */ + FrameIndex = (FrameIndex + 1) % (Frames.Length - 2); + + if (DeathIndices.Contains(FrameIndex) && ActiveWindowSpawner.SpawnedWindowCount > 20) + { + ActiveWindowSpawner.StartEndSequence(); + PlayerAlive = false; + } } } private void Update() { - /* Updates the position according to the lerp */ - LerpValue = (LerpValue + Time.deltaTime * 20f) % 1f; - - PlayerFrameInfo frameA = Frames[FrameIndex + 0]; - PlayerFrameInfo frameB = Frames[FrameIndex + 1]; - - transform.position = Vector3.Lerp(frameA.Position, frameB.Position, LerpValue); - - Vector2 rotation = Vector2.Lerp(frameA.Rotation, frameB.Rotation, LerpValue); - transform.rotation = Quaternion.Euler(rotation.x, rotation.y, 0); - - /* Updates the gun state */ - BulletTracerRenderer.positionCount = 2; - BulletTracerRenderer.SetPosition(index: 0, BulletTracerStart.position); - BulletTracerRenderer.SetPosition(index: 1, BulletTracerEnd.position); + if (PlayerAlive) + { + /* Updates the position according to the lerp */ + LerpValue = (LerpValue + Time.deltaTime * 20f) % 1f; - BulletTracerRenderer.enabled = Frames[FrameIndex].ShootGun; + PlayerFrameInfo frameA = Frames[FrameIndex + 0]; + PlayerFrameInfo frameB = Frames[FrameIndex + 1]; + + transform.position = Vector3.Lerp(frameA.Position, frameB.Position, LerpValue); + + Vector2 rotation = Vector2.Lerp(frameA.Rotation, frameB.Rotation, LerpValue); + transform.rotation = Quaternion.Euler(rotation.x, rotation.y, 0); + + /* Updates the gun state */ + BulletTracerRenderer.positionCount = 2; + BulletTracerRenderer.SetPosition(index: 0, BulletTracerStart.position); + BulletTracerRenderer.SetPosition(index: 1, BulletTracerEnd.position); + + BulletTracerRenderer.enabled = Frames[FrameIndex].ShootGun; + } } } } \ No newline at end of file diff --git a/Assets/Scripts/WindowBase.cs b/Assets/Scripts/WindowBase.cs index 4007894..c4c2f17 100644 --- a/Assets/Scripts/WindowBase.cs +++ b/Assets/Scripts/WindowBase.cs @@ -60,7 +60,7 @@ namespace InterfaceOff /* Default close button closes the window */ public virtual void OnWindowCloseButtonClicked() => DestroyWindow(); - protected void DestroyWindow() + public void DestroyWindow() { Creator.AlertOfDespawnedWindow(); Destroy(gameObject); diff --git a/Assets/Scripts/WindowSpawner.cs b/Assets/Scripts/WindowSpawner.cs index ae43486..d576931 100644 --- a/Assets/Scripts/WindowSpawner.cs +++ b/Assets/Scripts/WindowSpawner.cs @@ -1,6 +1,7 @@ using System; using Ext.B83.Unity.Attributes; using UnityEngine; +using UnityEngine.SceneManagement; using Random = UnityEngine.Random; namespace InterfaceOff @@ -17,7 +18,7 @@ namespace InterfaceOff { [field: SerializeField] private GameObject SampleChild { get; set; } [field: SerializeField] private Canvas GameCanvas { get; set; } - + [field: SerializeField] private GameObject DeathInfo { get; set; } [field: SerializeField] private SpawnableWindowType[] WindowTypes { get; set; } private int TotalSpawnWeight { get; set; } @@ -92,6 +93,7 @@ namespace InterfaceOff private void FixedUpdate() { + /* Spawns new windows whilst active */ if (AutoSpawn) { const int TICKS_PER_SECOND = 20; @@ -106,17 +108,30 @@ namespace InterfaceOff SpawnNewRandomWindow(); } } + + /* Else checks if it should reload the scene */ + else if (Input.GetKey(KeyCode.Space)) + { + int sceneIndex = SceneManager.GetActiveScene().buildIndex; + SceneManager.LoadScene(sceneIndex); + } } - private void Update() + public void StartEndSequence() { - if (!AutoSpawn) + /* Destroys all children and stops them from spawning */ + AutoSpawn = false; + foreach (Transform child in GameCanvas.transform) { - if (Input.GetKeyDown(KeyCode.Space)) + WindowBase window = child.GetComponent(); + if (DebugUtils.IsNotNull(window)) { - SpawnNewRandomWindow(); + window.DestroyWindow(); } } + + /* Makes the death text visible to the player */ + DeathInfo.SetActive(true); } } }