diff --git a/Assets/Scenes/Wave_Mode.unity b/Assets/Scenes/Wave_Mode.unity index a7a08b59449eb547f3144e04f33d279116ecb36a..abd0baa8c8f5b8071daf9a5811bd6cf8b7a9b2fd 100644 --- a/Assets/Scenes/Wave_Mode.unity +++ b/Assets/Scenes/Wave_Mode.unity @@ -563,6 +563,7 @@ RectTransform: - {fileID: 732164004} - {fileID: 1401845283} - {fileID: 1733453808} + - {fileID: 1569865516} m_Father: {fileID: 0} m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -682,7 +683,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!114 &180263585 MonoBehaviour: m_ObjectHideFlags: 0 @@ -6850,6 +6851,98 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 10 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1569865515 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1569865516} + - component: {fileID: 1569865518} + - component: {fileID: 1569865517} + - component: {fileID: 1569865519} + m_Layer: 5 + m_Name: Wave + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1569865516 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1569865515} + 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_Children: [] + m_Father: {fileID: 38786128} + m_RootOrder: 7 + 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: 418.8, y: 233.39} + m_SizeDelta: {x: 120, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1569865517 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1569865515} + 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: 12800000, guid: 46238fb1ad7a7a84ba8954c1c860994c, type: 3} + m_FontSize: 30 + m_FontStyle: 2 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Wave: ' +--- !u!222 &1569865518 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1569865515} + m_CullTransparentMesh: 1 +--- !u!114 &1569865519 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1569865515} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c28f4cf9025a6694b85720e383356c21, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1001 &1687477066 PrefabInstance: m_ObjectHideFlags: 0 @@ -7295,17 +7388,44 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: waves: - - name: ZomBunny - enemy: {fileID: 2022850303, guid: 73871ddf5c8d02442be00d9671a9d510, type: 3} - count: 2 - rate: 1 - - name: ZomBear - enemy: {fileID: 1914384318, guid: 3688f3f3f312c984fa78e00c09819e6c, type: 3} - count: 3 + - name: Wave 1 + enemyPool: + - {fileID: 2022850303, guid: 73871ddf5c8d02442be00d9671a9d510, type: 3} + weight: 3 + rate: 5 + - name: Wave 2 + enemyPool: + - {fileID: 1914384318, guid: 3688f3f3f312c984fa78e00c09819e6c, type: 3} + - {fileID: 2022850303, guid: 73871ddf5c8d02442be00d9671a9d510, type: 3} + weight: 5 rate: 1.5 - - name: Hellephant - enemy: {fileID: 1206665596, guid: f264ab47e25d0374ba89abced0b94b2a, type: 3} - count: 5 + - name: Wave 3 + enemyPool: + - {fileID: 1206665596, guid: f264ab47e25d0374ba89abced0b94b2a, type: 3} + - {fileID: 1914384318, guid: 3688f3f3f312c984fa78e00c09819e6c, type: 3} + - {fileID: 2022850303, guid: 73871ddf5c8d02442be00d9671a9d510, type: 3} + weight: 10 + rate: 2 + - name: Wave 4 + enemyPool: + - {fileID: 1206665596, guid: f264ab47e25d0374ba89abced0b94b2a, type: 3} + - {fileID: 1914384318, guid: 3688f3f3f312c984fa78e00c09819e6c, type: 3} + - {fileID: 2022850303, guid: 73871ddf5c8d02442be00d9671a9d510, type: 3} + weight: 3 + rate: 2 + - name: Wave 5 + enemyPool: + - {fileID: 1206665596, guid: f264ab47e25d0374ba89abced0b94b2a, type: 3} + - {fileID: 1914384318, guid: 3688f3f3f312c984fa78e00c09819e6c, type: 3} + - {fileID: 2022850303, guid: 73871ddf5c8d02442be00d9671a9d510, type: 3} + weight: 3 + rate: 2 + - name: Wave 6 + enemyPool: + - {fileID: 1206665596, guid: f264ab47e25d0374ba89abced0b94b2a, type: 3} + - {fileID: 1914384318, guid: 3688f3f3f312c984fa78e00c09819e6c, type: 3} + - {fileID: 2022850303, guid: 73871ddf5c8d02442be00d9671a9d510, type: 3} + weight: 3 rate: 2 spawnPoints: - {fileID: 9083842937541373870, guid: 6bbf9ef8fcce5114482d813a9b680d17, type: 3} diff --git a/Assets/Scripts/WaveMode.meta b/Assets/Scripts/WaveMode.meta new file mode 100644 index 0000000000000000000000000000000000000000..579a1ba9aca3e2ec635ed10c37134bdfe4c87da6 --- /dev/null +++ b/Assets/Scripts/WaveMode.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 19389e43b76c8cc4cb80864831522d40 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/WaveMode/WaveManager.cs b/Assets/Scripts/WaveMode/WaveManager.cs new file mode 100644 index 0000000000000000000000000000000000000000..9ebb6c90747b6a66f40debf4beaae5d14903789d --- /dev/null +++ b/Assets/Scripts/WaveMode/WaveManager.cs @@ -0,0 +1,23 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; + +public class WaveManager : MonoBehaviour +{ + public static int wave; + + Text text; + + + void Awake() + { + text = GetComponent<Text>(); + wave = 0; + } + + void Update() + { + text.text = "Wave: " + wave; + } +} diff --git a/Assets/Scripts/WaveMode/WaveManager.cs.meta b/Assets/Scripts/WaveMode/WaveManager.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..f7dac7b9728da144273f78a78bba20d6373b79c2 --- /dev/null +++ b/Assets/Scripts/WaveMode/WaveManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c28f4cf9025a6694b85720e383356c21 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/WaveSpawner.cs b/Assets/Scripts/WaveMode/WaveSpawner.cs similarity index 75% rename from Assets/Scripts/WaveSpawner.cs rename to Assets/Scripts/WaveMode/WaveSpawner.cs index 1b85d9f7aae45f16983a49001a5343d9bf07f5e5..6f00a6ad572c7843933f290edadacd6fe329eadf 100644 --- a/Assets/Scripts/WaveSpawner.cs +++ b/Assets/Scripts/WaveMode/WaveSpawner.cs @@ -10,8 +10,8 @@ public class WaveSpawner : MonoBehaviour public class Wave { public string name; - public Transform enemy; - public int count; + public Transform[] enemyPool; + public int weight; public float rate; } @@ -80,10 +80,13 @@ public class WaveSpawner : MonoBehaviour if (nextWave + 1 > waves.Length - 1) { - nextWave = -1; // biar pas di-increment jadi 0 + //nextWave = -1; // biar pas di-increment jadi 0 Debug.Log("All Waves Completed! Looping..."); + return; } + // TODO kondisi wave completed + nextWave++; } @@ -107,13 +110,30 @@ public class WaveSpawner : MonoBehaviour Debug.Log("Spawning Wave: " + _wave.name); state = SpawnState.SPAWNING; + // increment wave UI + WaveManager.wave++; + + // menangani enemy pool kosong + if (_wave.enemyPool.Length == 0) + { + Debug.LogError("Enemy pool is empty!"); + } + // spawn - for (int i=0; i<_wave.count; i++) + for (int i=0; i<_wave.weight; i++) { - SpawnEnemy(_wave.enemy); + SpawnEnemy(RandomizeEnemy(_wave)); yield return new WaitForSeconds(1f / _wave.rate); } + // wave dengan nomor kelipatan 3 + if ((nextWave + 1) % 3 == 0) + { + Debug.Log("SPAWN BOSS WAVE " + (nextWave + 1)); + // TODO Spawn boss + SpawnEnemy(_wave.enemyPool[0]); + } + // balik set jadi waiting state = SpawnState.WAITING; @@ -125,7 +145,13 @@ public class WaveSpawner : MonoBehaviour // spawn enemy Debug.Log("Spawning Enemy: " + _enemy.name); + // TODO setiap enemy ada spawn point masing2? Transform _sp = spawnPoints[Random.Range(0, spawnPoints.Length)]; Instantiate(_enemy, _sp.position, _sp.rotation); } + + Transform RandomizeEnemy (Wave _wave) + { + return _wave.enemyPool[Random.Range(0, _wave.enemyPool.Length)]; + } } diff --git a/Assets/Scripts/WaveSpawner.cs.meta b/Assets/Scripts/WaveMode/WaveSpawner.cs.meta similarity index 100% rename from Assets/Scripts/WaveSpawner.cs.meta rename to Assets/Scripts/WaveMode/WaveSpawner.cs.meta