From 1804d2d4b39bd8626301fe39a54a8ac8d0fa43b3 Mon Sep 17 00:00:00 2001 From: Hazim Bin Ijaz Date: Fri, 22 Aug 2025 20:43:18 +0500 Subject: [PATCH] Added level --- .../Scenes/DemoExterior.unity | 530 +++++++++++++++++- Assets/Prefabs/Enemy/Enemy.prefab | 2 +- Assets/Scripts/GameplayManager.cs | 84 +++ Assets/Scripts/GameplayManager.cs.meta | 11 + Assets/Scripts/Level.cs | 29 + Assets/Scripts/Level.cs.meta | 11 + Assets/Scripts/Level1.cs | 108 ++++ Assets/Scripts/Level1.cs.meta | 11 + Assets/Scripts/LevelStartTrigger.cs | 49 ++ Assets/Scripts/LevelStartTrigger.cs.meta | 11 + 10 files changed, 837 insertions(+), 9 deletions(-) create mode 100644 Assets/Scripts/GameplayManager.cs create mode 100644 Assets/Scripts/GameplayManager.cs.meta create mode 100644 Assets/Scripts/Level.cs create mode 100644 Assets/Scripts/Level.cs.meta create mode 100644 Assets/Scripts/Level1.cs create mode 100644 Assets/Scripts/Level1.cs.meta create mode 100644 Assets/Scripts/LevelStartTrigger.cs create mode 100644 Assets/Scripts/LevelStartTrigger.cs.meta diff --git a/Assets/Polyart/PolyartStudio/DreamscapeCastle/Scenes/DemoExterior.unity b/Assets/Polyart/PolyartStudio/DreamscapeCastle/Scenes/DemoExterior.unity index 76b5d5ec..be5e11bc 100644 --- a/Assets/Polyart/PolyartStudio/DreamscapeCastle/Scenes/DemoExterior.unity +++ b/Assets/Polyart/PolyartStudio/DreamscapeCastle/Scenes/DemoExterior.unity @@ -7743,6 +7743,127 @@ Transform: type: 3} m_PrefabInstance: {fileID: 58977073} m_PrefabAsset: {fileID: 0} +--- !u!1 &59673816 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 59673822} + - component: {fileID: 59673821} + - component: {fileID: 59673820} + - component: {fileID: 59673819} + - component: {fileID: 59673818} + m_Layer: 0 + m_Name: Trigger L1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &59673818 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 59673816} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0b4302f1f4adaa7459679bfdb9c36650, type: 3} + m_Name: + m_EditorClassIdentifier: + playerTag: Player + levelIndexToStart: 0 + oneShot: 1 +--- !u!65 &59673819 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 59673816} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 1 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &59673820 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 59673816} + m_Enabled: 0 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &59673821 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 59673816} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &59673822 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 59673816} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 141.0367, y: 26.4137, z: 389.6348} + m_LocalScale: {x: 17.00827, y: 2.3127, z: 15.96308} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &59942680 PrefabInstance: m_ObjectHideFlags: 0 @@ -45497,6 +45618,24 @@ Transform: type: 3} m_PrefabInstance: {fileID: 268364652} m_PrefabAsset: {fileID: 0} +--- !u!114 &269148361 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 385312391933029727, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + m_PrefabInstance: {fileID: 447491950} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9de313fb3f367d04bbd130657183cdc8, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &269148367 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 7154477416992791333, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + m_PrefabInstance: {fileID: 447491950} + m_PrefabAsset: {fileID: 0} --- !u!1 &270497163 GameObject: m_ObjectHideFlags: 0 @@ -69176,6 +69315,99 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 446839706} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1001 &447491950 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 481936153} + m_Modifications: + - target: {fileID: 3951388154437428790, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + propertyPath: enableRegen + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4006626876238256025, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + propertyPath: m_Name + value: Enemy (1) + objectReference: {fileID: 0} + - target: {fileID: 4006626876238256025, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7154477416992791333, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + propertyPath: m_LocalScale.x + value: 0.05879492 + objectReference: {fileID: 0} + - target: {fileID: 7154477416992791333, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + propertyPath: m_LocalScale.y + value: 0.43239498 + objectReference: {fileID: 0} + - target: {fileID: 7154477416992791333, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + propertyPath: m_LocalScale.z + value: 0.06264454 + objectReference: {fileID: 0} + - target: {fileID: 7154477416992791333, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + propertyPath: m_LocalPosition.x + value: -0.103 + objectReference: {fileID: 0} + - target: {fileID: 7154477416992791333, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.16271059 + objectReference: {fileID: 0} + - target: {fileID: 7154477416992791333, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + propertyPath: m_LocalPosition.z + value: -0.274 + objectReference: {fileID: 0} + - target: {fileID: 7154477416992791333, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7154477416992791333, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 7154477416992791333, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 7154477416992791333, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 7154477416992791333, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7154477416992791333, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7154477416992791333, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: a205c5f30032031428dae83c4a2f2af8, type: 3} --- !u!1001 &447901445 PrefabInstance: m_ObjectHideFlags: 0 @@ -74454,6 +74686,40 @@ Transform: type: 3} m_PrefabInstance: {fileID: 480673091} m_PrefabAsset: {fileID: 0} +--- !u!1 &481936152 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 481936153} + m_Layer: 0 + m_Name: Enemies + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &481936153 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 481936152} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 17.00827, y: 2.3127, z: 15.96308} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1806068479} + - {fileID: 269148367} + - {fileID: 2008455231} + m_Father: {fileID: 1078692958} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &483243085 GameObject: m_ObjectHideFlags: 0 @@ -168155,6 +168421,57 @@ Transform: type: 3} m_PrefabInstance: {fileID: 1078679029} m_PrefabAsset: {fileID: 0} +--- !u!1 &1078692956 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1078692958} + - component: {fileID: 1078692957} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1078692957 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1078692956} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 42850bd66917c2648a04c287cd0fa78f, type: 3} + m_Name: + m_EditorClassIdentifier: + enemiesParent: {fileID: 481936153} + enemies: + - {fileID: 1806068473} + - {fileID: 269148361} + - {fileID: 2008455225} + checkInterval: 0.25 +--- !u!4 &1078692958 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1078692956} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 141.0367, y: 26.4137, z: 389.6348} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 481936153} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &1080331081 PrefabInstance: m_ObjectHideFlags: 0 @@ -293565,6 +293882,52 @@ Transform: type: 3} m_PrefabInstance: {fileID: 1754425684} m_PrefabAsset: {fileID: 0} +--- !u!1 &1755519503 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1755519505} + - component: {fileID: 1755519504} + m_Layer: 0 + m_Name: GameplayManager + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1755519504 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1755519503} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4497af8e23ccf414794a5808125f4aa5, type: 3} + m_Name: + m_EditorClassIdentifier: + levels: + - {fileID: 1078692957} +--- !u!4 &1755519505 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1755519503} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 141.0367, y: 26.4137, z: 389.6348} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &1756934197 PrefabInstance: m_ObjectHideFlags: 0 @@ -300942,6 +301305,24 @@ Transform: type: 3} m_PrefabInstance: {fileID: 1805929970} m_PrefabAsset: {fileID: 0} +--- !u!114 &1806068473 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 385312391933029727, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + m_PrefabInstance: {fileID: 1527259665985799113} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9de313fb3f367d04bbd130657183cdc8, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &1806068479 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 7154477416992791333, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + m_PrefabInstance: {fileID: 1527259665985799113} + m_PrefabAsset: {fileID: 0} --- !u!1001 &1806685759 PrefabInstance: m_ObjectHideFlags: 0 @@ -313298,6 +313679,94 @@ Transform: type: 3} m_PrefabInstance: {fileID: 1886256379} m_PrefabAsset: {fileID: 0} +--- !u!1001 &1886577979 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 481936153} + m_Modifications: + - target: {fileID: 4006626876238256025, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + propertyPath: m_Name + value: Enemy (2) + objectReference: {fileID: 0} + - target: {fileID: 4006626876238256025, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7154477416992791333, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + propertyPath: m_LocalScale.x + value: 0.05879492 + objectReference: {fileID: 0} + - target: {fileID: 7154477416992791333, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + propertyPath: m_LocalScale.y + value: 0.43239498 + objectReference: {fileID: 0} + - target: {fileID: 7154477416992791333, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + propertyPath: m_LocalScale.z + value: 0.06264454 + objectReference: {fileID: 0} + - target: {fileID: 7154477416992791333, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + propertyPath: m_LocalPosition.x + value: -0.049 + objectReference: {fileID: 0} + - target: {fileID: 7154477416992791333, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.16271059 + objectReference: {fileID: 0} + - target: {fileID: 7154477416992791333, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.118 + objectReference: {fileID: 0} + - target: {fileID: 7154477416992791333, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7154477416992791333, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 7154477416992791333, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 7154477416992791333, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 7154477416992791333, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7154477416992791333, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7154477416992791333, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: a205c5f30032031428dae83c4a2f2af8, type: 3} --- !u!1001 &1887138831 PrefabInstance: m_ObjectHideFlags: 0 @@ -330805,6 +331274,24 @@ Transform: type: 3} m_PrefabInstance: {fileID: 2008147940} m_PrefabAsset: {fileID: 0} +--- !u!114 &2008455225 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 385312391933029727, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + m_PrefabInstance: {fileID: 1886577979} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9de313fb3f367d04bbd130657183cdc8, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &2008455231 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 7154477416992791333, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + m_PrefabInstance: {fileID: 1886577979} + m_PrefabAsset: {fileID: 0} --- !u!1001 &2008475454 PrefabInstance: m_ObjectHideFlags: 0 @@ -354632,27 +355119,52 @@ PrefabInstance: serializedVersion: 2 m_Modification: serializedVersion: 3 - m_TransformParent: {fileID: 0} + m_TransformParent: {fileID: 481936153} m_Modifications: + - target: {fileID: 3951388154437428790, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + propertyPath: enableRegen + value: 0 + objectReference: {fileID: 0} - target: {fileID: 4006626876238256025, guid: a205c5f30032031428dae83c4a2f2af8, type: 3} propertyPath: m_Name value: Enemy objectReference: {fileID: 0} + - target: {fileID: 4006626876238256025, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7154477416992791333, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + propertyPath: m_LocalScale.x + value: 0.05879492 + objectReference: {fileID: 0} + - target: {fileID: 7154477416992791333, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + propertyPath: m_LocalScale.y + value: 0.43239498 + objectReference: {fileID: 0} + - target: {fileID: 7154477416992791333, guid: a205c5f30032031428dae83c4a2f2af8, + type: 3} + propertyPath: m_LocalScale.z + value: 0.06264454 + objectReference: {fileID: 0} - target: {fileID: 7154477416992791333, guid: a205c5f30032031428dae83c4a2f2af8, type: 3} propertyPath: m_LocalPosition.x - value: 123.2 + value: 0.224 objectReference: {fileID: 0} - target: {fileID: 7154477416992791333, guid: a205c5f30032031428dae83c4a2f2af8, type: 3} propertyPath: m_LocalPosition.y - value: 26.79 + value: 0.16271059 objectReference: {fileID: 0} - target: {fileID: 7154477416992791333, guid: a205c5f30032031428dae83c4a2f2af8, type: 3} propertyPath: m_LocalPosition.z - value: 341.72 + value: -0.136 objectReference: {fileID: 0} - target: {fileID: 7154477416992791333, guid: a205c5f30032031428dae83c4a2f2af8, type: 3} @@ -354662,17 +355174,17 @@ PrefabInstance: - target: {fileID: 7154477416992791333, guid: a205c5f30032031428dae83c4a2f2af8, type: 3} propertyPath: m_LocalRotation.x - value: 0 + value: -0 objectReference: {fileID: 0} - target: {fileID: 7154477416992791333, guid: a205c5f30032031428dae83c4a2f2af8, type: 3} propertyPath: m_LocalRotation.y - value: 0 + value: -0 objectReference: {fileID: 0} - target: {fileID: 7154477416992791333, guid: a205c5f30032031428dae83c4a2f2af8, type: 3} propertyPath: m_LocalRotation.z - value: 0 + value: -0 objectReference: {fileID: 0} - target: {fileID: 7154477416992791333, guid: a205c5f30032031428dae83c4a2f2af8, type: 3} @@ -356035,5 +356547,7 @@ SceneRoots: - {fileID: 2042403783257441060} - {fileID: 812152301} - {fileID: 1282845313} - - {fileID: 1527259665985799113} - {fileID: 1308217107} + - {fileID: 1078692958} + - {fileID: 59673822} + - {fileID: 1755519505} diff --git a/Assets/Prefabs/Enemy/Enemy.prefab b/Assets/Prefabs/Enemy/Enemy.prefab index f4400ef1..4636757d 100644 --- a/Assets/Prefabs/Enemy/Enemy.prefab +++ b/Assets/Prefabs/Enemy/Enemy.prefab @@ -124,7 +124,7 @@ MonoBehaviour: m_EditorClassIdentifier: maxHealth: 100 health: 100 - enableRegen: 1 + enableRegen: 0 regenPerSecond: 1.5 regenDelayAfterDamage: 4 healthFillImage: {fileID: 0} diff --git a/Assets/Scripts/GameplayManager.cs b/Assets/Scripts/GameplayManager.cs new file mode 100644 index 00000000..b76fecdb --- /dev/null +++ b/Assets/Scripts/GameplayManager.cs @@ -0,0 +1,84 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +public class GameplayManager : MonoBehaviour +{ + public static GameplayManager Instance = null; + + [Header("Assign levels in order (Level 1 at index 0)")] + public List levels; + + private int currentLevelIndex = -1; + private Level currentLevel; + + private void Awake() + { + if (Instance == null) + Instance = this; + else if (Instance != this) + { + DestroyImmediate(gameObject); + return; + } + + DontDestroyOnLoad(gameObject); + + // Ensure all levels are disabled initially + foreach (var lvl in levels) + { + if (lvl != null) lvl.gameObject.SetActive(false); + } + } + + public void StartLevel(int index) + { + if (index < 0 || index >= levels.Count) + { + Debug.LogError($"GameplayManager: Invalid level index {index}"); + return; + } + + // End previous level if any + if (currentLevel != null) + { + currentLevel.OnLevelEnd(); + currentLevel.gameObject.SetActive(false); + } + + currentLevelIndex = index; + currentLevel = levels[currentLevelIndex]; + + currentLevel.gameObject.SetActive(true); + currentLevel.OnLevelStart(); + Debug.Log($"GameplayManager: Started Level {currentLevelIndex + 1}"); + } + + public void CompleteCurrentLevel() + { + if (currentLevel == null) return; + + Debug.Log($"GameplayManager: Level {currentLevelIndex + 1} completed."); + + currentLevel.OnLevelEnd(); + currentLevel.gameObject.SetActive(false); + currentLevel = null; + + // If you want to auto-progress: + int next = currentLevelIndex + 1; + if (next < levels.Count) + { + StartLevel(next); + } + else + { + Debug.Log("GameplayManager: All levels completed!"); + } + } + + // Optional: callable by a trigger to start Level 1 specifically + public void StartLevelOne() + { + StartLevel(0); + } +} diff --git a/Assets/Scripts/GameplayManager.cs.meta b/Assets/Scripts/GameplayManager.cs.meta new file mode 100644 index 00000000..754b3a9c --- /dev/null +++ b/Assets/Scripts/GameplayManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4497af8e23ccf414794a5808125f4aa5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Level.cs b/Assets/Scripts/Level.cs new file mode 100644 index 00000000..8b45488d --- /dev/null +++ b/Assets/Scripts/Level.cs @@ -0,0 +1,29 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public abstract class Level : MonoBehaviour +{ + // Start is called before the first frame update + void Start() + { + + } + + // Update is called once per frame + void Update() + { + + } + + public virtual void OnLevelStart() + { + + } + + public virtual void OnLevelEnd() + { + + } + +} diff --git a/Assets/Scripts/Level.cs.meta b/Assets/Scripts/Level.cs.meta new file mode 100644 index 00000000..4d55681c --- /dev/null +++ b/Assets/Scripts/Level.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8afbbb6c328f08d44bd0e79d228ec1c8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Level1.cs b/Assets/Scripts/Level1.cs new file mode 100644 index 00000000..891c02f5 --- /dev/null +++ b/Assets/Scripts/Level1.cs @@ -0,0 +1,108 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class Level1 : Level +{ + [Header("Enemy Setup")] + [Tooltip("Optional: parent whose children have EnemyBase components")] + public Transform enemiesParent; + + [Tooltip("Or manually assign enemies here")] + public List enemies = new List(); + + [Header("Monitoring")] + [Tooltip("How often to check alive enemies")] + public float checkInterval = 0.25f; + + private bool _running; + private Coroutine _monitorCo; + + public override void OnLevelStart() + { + base.OnLevelStart(); + + // Collect enemies if using a parent + if (enemiesParent != null) + { + enemies.Clear(); + foreach (Transform child in enemiesParent) + { + var eb = child.GetComponent(); + if (eb != null) enemies.Add(eb); + } + } + + // Turn enemies on & let their own Start() find the player + foreach (var e in enemies) + { + if (e == null) continue; + e.gameObject.SetActive(true); + } + + // Edge case: no enemies -> complete immediately + if (CountAlive() == 0) + { + CompleteLevel(); + return; + } + + _running = true; + _monitorCo = StartCoroutine(MonitorEnemies()); + Debug.Log("Level1: Started, monitoring enemies..."); + } + + public override void OnLevelEnd() + { + base.OnLevelEnd(); + _running = false; + if (_monitorCo != null) + { + StopCoroutine(_monitorCo); + _monitorCo = null; + } + } + + private IEnumerator MonitorEnemies() + { + var wait = new WaitForSeconds(checkInterval); + while (_running) + { + if (CountAlive() == 0) + { + CompleteLevel(); + yield break; + } + yield return wait; + } + } + + private int CountAlive() + { + int alive = 0; + for (int i = 0; i < enemies.Count; i++) + { + var e = enemies[i]; + if (e != null && e.gameObject.activeInHierarchy && !e.IsDead()) + alive++; + } + return alive; + } + + private void CompleteLevel() + { + Debug.Log("Level1: All enemies defeated. Completing level."); + _running = false; + + // Tell GameplayManager if available + if (GameplayManager.Instance != null) + { + GameplayManager.Instance.CompleteCurrentLevel(); + } + else + { + // Fallback: just disable this level object + gameObject.SetActive(false); + } + } +} diff --git a/Assets/Scripts/Level1.cs.meta b/Assets/Scripts/Level1.cs.meta new file mode 100644 index 00000000..2b097a49 --- /dev/null +++ b/Assets/Scripts/Level1.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 42850bd66917c2648a04c287cd0fa78f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/LevelStartTrigger.cs b/Assets/Scripts/LevelStartTrigger.cs new file mode 100644 index 00000000..13ae6458 --- /dev/null +++ b/Assets/Scripts/LevelStartTrigger.cs @@ -0,0 +1,49 @@ +using UnityEngine; + +[RequireComponent(typeof(Collider))] +public class LevelStartTrigger : MonoBehaviour +{ + [SerializeField] private string playerTag = "Player"; + [SerializeField] private int levelIndexToStart = 0; // Level 1 = 0 + [Tooltip("Disable the trigger after first use")] + [SerializeField] private bool oneShot = true; + + private bool _used; + + private void Reset() + { + var col = GetComponent(); + if (col) col.isTrigger = true; + } + + private void OnTriggerEnter(Collider other) + { + if (_used) return; + if (!other.CompareTag(playerTag)) return; + + _used = true; + + // Prefer using GameplayManager + if (GameplayManager.Instance != null) + { + GameplayManager.Instance.StartLevel(levelIndexToStart); + } + else + { + // Fallback: find any Level component at index and start manually + // (only used if your manager doesn't have StartLevel yet) + var level = FindObjectOfType(); + if (level != null) + { + level.gameObject.SetActive(true); + level.OnLevelStart(); + } + else + { + Debug.LogWarning("LevelStartTrigger: No GameplayManager and no Level1 found."); + } + } + + if (oneShot) gameObject.SetActive(false); + } +} \ No newline at end of file diff --git a/Assets/Scripts/LevelStartTrigger.cs.meta b/Assets/Scripts/LevelStartTrigger.cs.meta new file mode 100644 index 00000000..71812922 --- /dev/null +++ b/Assets/Scripts/LevelStartTrigger.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0b4302f1f4adaa7459679bfdb9c36650 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: