diff --git a/Assets/Scenes/Level_02.unity b/Assets/Scenes/Level_02.unity
index 29ff8bbbd3fc53c1ed30560ba30ddb6d169deddc..2f2cb2348117fc966df295c52c08971cb463bd1c 100644
--- a/Assets/Scenes/Level_02.unity
+++ b/Assets/Scenes/Level_02.unity
@@ -677,6 +677,7 @@ RectTransform:
   - {fileID: 1755254423}
   - {fileID: 1214467934}
   - {fileID: 1702970505}
+  - {fileID: 83661864}
   m_Father: {fileID: 0}
   m_RootOrder: 6
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -719,6 +720,85 @@ MonoBehaviour:
   warningText: {fileID: 839222784}
   playerHealth: {fileID: 33458251}
   restartDelay: 5
+--- !u!1 &83661861
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 83661864}
+  - component: {fileID: 83661863}
+  - component: {fileID: 83661862}
+  m_Layer: 5
+  m_Name: Wave
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &83661862
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 83661861}
+  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: 16
+    m_FontStyle: 0
+    m_BestFit: 0
+    m_MinSize: 1
+    m_MaxSize: 40
+    m_Alignment: 4
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: 'Wave :'
+--- !u!222 &83661863
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 83661861}
+  m_CullTransparentMesh: 1
+--- !u!224 &83661864
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 83661861}
+  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: 11
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 115, y: -50}
+  m_SizeDelta: {x: 160, y: 30}
+  m_Pivot: {x: 0.5, y: 0.5}
 --- !u!1 &180263584
 GameObject:
   m_ObjectHideFlags: 0
@@ -776,8 +856,6 @@ GameObject:
   m_Component:
   - component: {fileID: 240257950}
   - component: {fileID: 240257949}
-  - component: {fileID: 240257948}
-  - component: {fileID: 240257947}
   - component: {fileID: 240257951}
   m_Layer: 0
   m_Name: EnemyManager
@@ -786,46 +864,6 @@ GameObject:
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
   m_IsActive: 1
---- !u!114 &240257947
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 240257946}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 76a99222b1e4a384e923ac7e86efc709, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  playerHealth: {fileID: 33458251}
-  enemy: {fileID: 5459919538816712371, guid: 08d858bd75521ab4da4ac8522ae60d34, type: 3}
-  spawnEnemy: 2
-  spawnTime: 5
-  spawnPointsCenter: {x: 0, y: 0, z: 0}
-  spawnRotation: {x: 0, y: 0, z: 0}
-  size: {x: 100, y: 0, z: 100}
-  factory: {fileID: 180263585}
---- !u!114 &240257948
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 240257946}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 76a99222b1e4a384e923ac7e86efc709, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  playerHealth: {fileID: 33458251}
-  enemy: {fileID: 8511813286321513077, guid: d0928bd03eab9e64986a2176302bff2d, type: 3}
-  spawnEnemy: 1
-  spawnTime: 5
-  spawnPointsCenter: {x: 0, y: 0, z: 0}
-  spawnRotation: {x: 0, y: 0, z: 0}
-  size: {x: 100, y: 0, z: 100}
-  factory: {fileID: 180263585}
 --- !u!114 &240257949
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -839,12 +877,22 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   playerHealth: {fileID: 33458251}
-  enemy: {fileID: 2419862316602802249, guid: a8b071f04b05806449db0eabf8b36149, type: 3}
-  spawnEnemy: 0
-  spawnTime: 5
+  enemy1: {fileID: 2419862316602802249, guid: a8b071f04b05806449db0eabf8b36149, type: 3}
+  enemy2: {fileID: 8511813286321513077, guid: d0928bd03eab9e64986a2176302bff2d, type: 3}
+  enemy3: {fileID: 5459919538816712371, guid: 08d858bd75521ab4da4ac8522ae60d34, type: 3}
+  spawnEnemy1: 0
+  spawnEnemy2: 1
+  spawnEnemy3: 2
+  spawnTime: 3
   spawnPointsCenter: {x: 0, y: 0, z: 0}
   spawnRotation: {x: 0, y: 0, z: 0}
-  size: {x: 0, y: 0, z: 0}
+  size: {x: 70, y: 0, z: 70}
+  poolEnemy1: 030000000500000007000000
+  poolEnemy2: 020000000400000006000000
+  poolEnemy3: 000000000000000001000000
+  numOfTotalWaves: 3
+  startWaves: 1
+  waveText: {fileID: 83661862}
   factory: {fileID: 180263585}
 --- !u!4 &240257950
 Transform:
diff --git a/Assets/Scripts/Managers/EnemyManagerWave.cs b/Assets/Scripts/Managers/EnemyManagerWave.cs
index ea416d6d99fa82c290a3e0ef7fdb1b5bd102c674..26f6d9411692d123c5d6b96adb4241693af840ba 100644
--- a/Assets/Scripts/Managers/EnemyManagerWave.cs
+++ b/Assets/Scripts/Managers/EnemyManagerWave.cs
@@ -2,32 +2,89 @@
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.AI;
+using UnityEngine.UI;
 
 public class EnemyManagerWave : MonoBehaviour
 {
     public PlayerHealth playerHealth;
-    public GameObject enemy;
-    public int spawnEnemy;
+    public GameObject enemy1;
+    public GameObject enemy2;
+    public GameObject enemy3;
+    public int spawnEnemy1;
+    public int spawnEnemy2;
+    public int spawnEnemy3;
     public float spawnTime = 3f;
     public Vector3 spawnPointsCenter;
     public Vector3 spawnRotation;
     public Vector3 size;
+    public int[] poolEnemy1;
+    public int[] poolEnemy2;
+    public int[] poolEnemy3;
+    public int numOfTotalWaves = 3;
+    public int startWaves = 1;
+    public Text waveText;
+    int currentWaves = 0;
     UnityEngine.AI.NavMeshAgent nav;
-    int floorMask;
+   
     [SerializeField]
     public MonoBehaviour factory;
     IFactory Factory { get { return factory as IFactory; } }
 
     void Start ()
     {
-        floorMask = LayerMask.GetMask("Floor");
         //Mengeksekusi fungs Spawn setiap beberapa detik sesui dengan nilai spawnTime
         nav = GetComponent<UnityEngine.AI.NavMeshAgent>();
-        InvokeRepeating("Spawn", spawnTime, spawnTime);
+        currentWaves = startWaves - 1;
+        waveText.text = "Wave:" + (currentWaves+1);
+        if (currentWaves < numOfTotalWaves)
+        {
+            //spawn enemy1
+            for(int i = 0; i<poolEnemy1[currentWaves]; i++)
+            {
+                Spawn(spawnEnemy1);
+            }
+            //spawn enemy2
+            for (int i = 0; i < poolEnemy2[currentWaves]; i++)
+            {
+                Spawn(spawnEnemy2);
+            }
+            //spawn enemy3
+            for (int i = 0; i < poolEnemy3[currentWaves]; i++)
+            {
+                Spawn(spawnEnemy3);
+            }
+        }
     }
 
+    void Update()
+    {
+        GameObject enemy = GameObject.FindGameObjectWithTag("Enemy");
+        if(enemy == null)
+        {
+            currentWaves += 1;
+            waveText.text = "Wave:" + (currentWaves + 1);
+            if (currentWaves < numOfTotalWaves)
+            {
+                //spawn enemy1
+                for (int i = 0; i < poolEnemy1[currentWaves]; i++)
+                {
+                    Spawn(spawnEnemy1);
+                }
+                //spawn enemy2
+                for (int i = 0; i < poolEnemy2[currentWaves]; i++)
+                {
+                    Spawn(spawnEnemy2);
+                }
+                //spawn enemy3
+                for (int i = 0; i < poolEnemy3[currentWaves]; i++)
+                {
+                    Spawn(spawnEnemy3);
+                }
+            }
+        }
+    }
 
-    void Spawn ()
+    void Spawn(int spawnEnemy)
     {
         if (playerHealth.currentHealth <= 0f)
         {