From 550c40a3e982ca7120fcbeb28107a97b31a7dddd Mon Sep 17 00:00:00 2001
From: rheael <rpandumpi@gmail.com>
Date: Thu, 7 Apr 2022 09:46:20 +0700
Subject: [PATCH] add spawning orbs (only speed(?))

---
 Assets/Prefabs/HealthOrb.prefab            |  38 ++++
 Assets/Prefabs/PowerOrb.prefab             |  38 ++++
 Assets/Prefabs/SpeedOrb.prefab             |  38 ++++
 Assets/Scenes/Level_01.unity               | 241 ++++++++++++++++++++-
 Assets/Scripts/Factory/OrbFactory.cs       |  16 ++
 Assets/Scripts/Factory/OrbFactory.cs.meta  |  11 +
 Assets/Scripts/Managers/OrbManager.cs      |  37 ++++
 Assets/Scripts/Managers/OrbManager.cs.meta |  11 +
 Assets/Scripts/Orbs.meta                   |   8 +
 Assets/Scripts/Orbs/HealthOrb.cs           |  34 +++
 Assets/Scripts/Orbs/HealthOrb.cs.meta      |  11 +
 Assets/Scripts/Orbs/PowerOrb.cs            |  34 +++
 Assets/Scripts/Orbs/PowerOrb.cs.meta       |  11 +
 Assets/Scripts/Orbs/SpeedOrb.cs            |  34 +++
 Assets/Scripts/Orbs/SpeedOrb.cs.meta       |  11 +
 Assets/Scripts/Player/PlayerHealth.cs      |   6 +
 Assets/Scripts/Player/PlayerPower.cs       |  10 +-
 Assets/Scripts/Player/PlayerSpeed.cs       |  10 +-
 18 files changed, 588 insertions(+), 11 deletions(-)
 create mode 100644 Assets/Scripts/Factory/OrbFactory.cs
 create mode 100644 Assets/Scripts/Factory/OrbFactory.cs.meta
 create mode 100644 Assets/Scripts/Managers/OrbManager.cs
 create mode 100644 Assets/Scripts/Managers/OrbManager.cs.meta
 create mode 100644 Assets/Scripts/Orbs.meta
 create mode 100644 Assets/Scripts/Orbs/HealthOrb.cs
 create mode 100644 Assets/Scripts/Orbs/HealthOrb.cs.meta
 create mode 100644 Assets/Scripts/Orbs/PowerOrb.cs
 create mode 100644 Assets/Scripts/Orbs/PowerOrb.cs.meta
 create mode 100644 Assets/Scripts/Orbs/SpeedOrb.cs
 create mode 100644 Assets/Scripts/Orbs/SpeedOrb.cs.meta

diff --git a/Assets/Prefabs/HealthOrb.prefab b/Assets/Prefabs/HealthOrb.prefab
index ab0965e..17e06df 100644
--- a/Assets/Prefabs/HealthOrb.prefab
+++ b/Assets/Prefabs/HealthOrb.prefab
@@ -11,6 +11,8 @@ GameObject:
   - component: {fileID: 2535262335353558129}
   - component: {fileID: 2535262335353558126}
   - component: {fileID: 2535262335353558128}
+  - component: {fileID: -4094635597638346364}
+  - component: {fileID: 705583067959343806}
   m_Layer: 0
   m_Name: HealthOrb
   m_TagString: Untagged
@@ -99,3 +101,39 @@ SpriteRenderer:
   m_WasSpriteAssigned: 1
   m_MaskInteraction: 0
   m_SpriteSortPoint: 0
+--- !u!114 &-4094635597638346364
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2535262335353558127}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 764e68913424eeb419dd38af7e60ff61, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  healthOrbTime: 0.5
+  powerUpValue: 10
+--- !u!195 &705583067959343806
+NavMeshAgent:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2535262335353558127}
+  m_Enabled: 1
+  m_AgentTypeID: 0
+  m_Radius: 1.125
+  m_Speed: 3.5
+  m_Acceleration: 8
+  avoidancePriority: 50
+  m_AngularSpeed: 120
+  m_StoppingDistance: 0
+  m_AutoTraverseOffMeshLink: 1
+  m_AutoBraking: 1
+  m_AutoRepath: 1
+  m_Height: 2.25
+  m_BaseOffset: 1.125
+  m_WalkableMask: 4294967295
+  m_ObstacleAvoidanceType: 4
diff --git a/Assets/Prefabs/PowerOrb.prefab b/Assets/Prefabs/PowerOrb.prefab
index 0313bb8..46308ba 100644
--- a/Assets/Prefabs/PowerOrb.prefab
+++ b/Assets/Prefabs/PowerOrb.prefab
@@ -11,6 +11,8 @@ GameObject:
   - component: {fileID: 4657511723775529484}
   - component: {fileID: 4657511723775529483}
   - component: {fileID: 4657511723775529485}
+  - component: {fileID: -6770075547395189657}
+  - component: {fileID: 8369794267398069332}
   m_Layer: 0
   m_Name: PowerOrb
   m_TagString: Untagged
@@ -99,3 +101,39 @@ SpriteRenderer:
   m_WasSpriteAssigned: 1
   m_MaskInteraction: 0
   m_SpriteSortPoint: 0
+--- !u!114 &-6770075547395189657
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4657511723775529482}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 25d572023fc8dca439d7bd171c970c34, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  powerOrbTime: 0.5
+  powerUpValue: 10
+--- !u!195 &8369794267398069332
+NavMeshAgent:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4657511723775529482}
+  m_Enabled: 1
+  m_AgentTypeID: 0
+  m_Radius: 1.7399999
+  m_Speed: 3.5
+  m_Acceleration: 8
+  avoidancePriority: 50
+  m_AngularSpeed: 120
+  m_StoppingDistance: 0
+  m_AutoTraverseOffMeshLink: 1
+  m_AutoBraking: 1
+  m_AutoRepath: 1
+  m_Height: 3.4799998
+  m_BaseOffset: 1.7399999
+  m_WalkableMask: 4294967295
+  m_ObstacleAvoidanceType: 4
diff --git a/Assets/Prefabs/SpeedOrb.prefab b/Assets/Prefabs/SpeedOrb.prefab
index a2d34f7..89b8eba 100644
--- a/Assets/Prefabs/SpeedOrb.prefab
+++ b/Assets/Prefabs/SpeedOrb.prefab
@@ -11,6 +11,8 @@ GameObject:
   - component: {fileID: 7205800141201514947}
   - component: {fileID: 7205800141201514972}
   - component: {fileID: 7205800141201514946}
+  - component: {fileID: 647105530061794655}
+  - component: {fileID: -888242424389404344}
   m_Layer: 0
   m_Name: SpeedOrb
   m_TagString: Untagged
@@ -99,3 +101,39 @@ SpriteRenderer:
   m_WasSpriteAssigned: 1
   m_MaskInteraction: 0
   m_SpriteSortPoint: 0
+--- !u!114 &647105530061794655
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7205800141201514973}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: d104f8fb432c7ba41998f84129eedf56, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  speedOrbTime: 0.5
+  powerUpValue: 10
+--- !u!195 &-888242424389404344
+NavMeshAgent:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7205800141201514973}
+  m_Enabled: 1
+  m_AgentTypeID: 0
+  m_Radius: 2.505
+  m_Speed: 3.5
+  m_Acceleration: 8
+  avoidancePriority: 50
+  m_AngularSpeed: 120
+  m_StoppingDistance: 0
+  m_AutoTraverseOffMeshLink: 1
+  m_AutoBraking: 1
+  m_AutoRepath: 1
+  m_Height: 4.98
+  m_BaseOffset: 2.49
+  m_WalkableMask: 4294967295
+  m_ObstacleAvoidanceType: 4
diff --git a/Assets/Scenes/Level_01.unity b/Assets/Scenes/Level_01.unity
index 27a4705..8bdfaa5 100644
--- a/Assets/Scenes/Level_01.unity
+++ b/Assets/Scenes/Level_01.unity
@@ -479,9 +479,9 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: d2ec7b0143f45684d84465ca4e1ae31d, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  startingPower: 100
+  startingPower: 10
   currentPower: 0
-  healthSlider: {fileID: 941469807}
+  powerSlider: {fileID: 941469807}
   damageImage: {fileID: 1109176449}
   deathClip: {fileID: 8300000, guid: d36a393bca4582043982db9089e1694f, type: 3}
 --- !u!135 &33458253
@@ -522,11 +522,11 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: f3b1eeb6e043e4144afac8ee2325014c, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  startingSpeed: 100
+  startingSpeed: 10
   currentSpeed: 0
-  healthSlider: {fileID: 375658143}
+  speedSlider: {fileID: 375658143}
   damageImage: {fileID: 1109176449}
-  deathClip: {fileID: 0}
+  deathClip: {fileID: 8300000, guid: d36a393bca4582043982db9089e1694f, type: 3}
 --- !u!1 &36326047
 GameObject:
   m_ObjectHideFlags: 0
@@ -766,7 +766,7 @@ MonoBehaviour:
   - {fileID: 2022850296, guid: 73871ddf5c8d02442be00d9671a9d510, type: 3}
   - {fileID: 1914384308, guid: 3688f3f3f312c984fa78e00c09819e6c, type: 3}
   - {fileID: 1206665591, guid: f264ab47e25d0374ba89abced0b94b2a, type: 3}
-  - {fileID: 0}
+  - {fileID: 6451117433343572282, guid: 9fb82f159b80fbb4f86ae46808c152cd, type: 3}
   - {fileID: 7193182883264875344, guid: 5caccc7eeef745c4cb8cdf5aeb3c2d0f, type: 3}
 --- !u!4 &180263586
 Transform:
@@ -1166,7 +1166,7 @@ Transform:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 530599531}
   m_LocalRotation: {x: 0, y: 0.9063079, z: 0, w: 0.42261827}
-  m_LocalPosition: {x: -30.5, y: 0, z: 25}
+  m_LocalPosition: {x: 30.5, y: 0, z: 25}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children: []
   m_Father: {fileID: 0}
@@ -6376,6 +6376,36 @@ MonoBehaviour:
   damagePerShot: 20
   timeBetweenBullets: 0.15
   range: 100
+--- !u!1 &725605032
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 725605033}
+  m_Layer: 0
+  m_Name: PowerOrbSpawnPoint
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &725605033
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 725605032}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: -100, y: 0, z: 100}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 16
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1 &732164003
 GameObject:
   m_ObjectHideFlags: 0
@@ -6998,6 +7028,36 @@ CanvasRenderer:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1118055506}
   m_CullTransparentMesh: 0
+--- !u!1 &1159231083
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1159231084}
+  m_Layer: 0
+  m_Name: SpeedOrbSpawnPoint
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &1159231084
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1159231083}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: -30, y: 0, z: 20}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 17
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1 &1263355631
 GameObject:
   m_ObjectHideFlags: 0
@@ -7440,6 +7500,96 @@ CanvasRenderer:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1401845282}
   m_CullTransparentMesh: 0
+--- !u!1 &1516506356
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1516506358}
+  - component: {fileID: 1516506357}
+  - component: {fileID: 1516506360}
+  - component: {fileID: 1516506359}
+  m_Layer: 0
+  m_Name: OrbManager
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &1516506357
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1516506356}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 3ebce3593297a094592f1a96d5e9cbed, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  playerHealth: {fileID: 33458251}
+  orb: {fileID: 4657511723775529482, guid: 372c1cb97a0b4e540b8d303e12c33815, type: 3}
+  spawnOrb: 1
+  spawnTime: 3
+  spawnPoints:
+  - {fileID: 725605033}
+  factory: {fileID: 1906920587}
+--- !u!4 &1516506358
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1516506356}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 1.7, y: -0.7, z: -0.7}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 18
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &1516506359
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1516506356}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 3ebce3593297a094592f1a96d5e9cbed, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  playerHealth: {fileID: 33458251}
+  orb: {fileID: 2535262335353558127, guid: 7fbb627886736534ba911bf6675933f4, type: 3}
+  spawnOrb: 1
+  spawnTime: 3
+  spawnPoints:
+  - {fileID: 1571986862}
+  factory: {fileID: 1906920587}
+--- !u!114 &1516506360
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1516506356}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 3ebce3593297a094592f1a96d5e9cbed, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  playerHealth: {fileID: 33458251}
+  orb: {fileID: 7205800141201514973, guid: a6916ad5a6c03624cb0d3a6f5bcbbcb1, type: 3}
+  spawnOrb: 1
+  spawnTime: 3
+  spawnPoints:
+  - {fileID: 1159231084}
+  factory: {fileID: 1906920587}
 --- !u!850595691 &1523013122
 LightingSettings:
   m_ObjectHideFlags: 0
@@ -7501,6 +7651,36 @@ LightingSettings:
   m_PVRFilteringAtrousPositionSigmaDirect: 0.5
   m_PVRFilteringAtrousPositionSigmaIndirect: 2
   m_PVRFilteringAtrousPositionSigmaAO: 1
+--- !u!1 &1571986861
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1571986862}
+  m_Layer: 0
+  m_Name: HealthOrbSpawnPoint
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &1571986862
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1571986861}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: -50, y: 0, z: 50}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 15
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1 &1666523284
 GameObject:
   m_ObjectHideFlags: 0
@@ -7927,6 +8107,53 @@ CanvasRenderer:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1838919311}
   m_CullTransparentMesh: 0
+--- !u!1 &1906920586
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1906920588}
+  - component: {fileID: 1906920587}
+  m_Layer: 0
+  m_Name: OrbFactory
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &1906920587
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1906920586}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 249a5d810d5a74844ab587bb9b46c0ee, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  orbPrefab:
+  - {fileID: 4657511723775529482, guid: 372c1cb97a0b4e540b8d303e12c33815, type: 3}
+  - {fileID: 7205800141201514973, guid: a6916ad5a6c03624cb0d3a6f5bcbbcb1, type: 3}
+  - {fileID: 2535262335353558127, guid: 7fbb627886736534ba911bf6675933f4, type: 3}
+--- !u!4 &1906920588
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1906920586}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 3.00243, y: 0.8076969, z: 1.67373}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 19
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1 &1975464296
 GameObject:
   m_ObjectHideFlags: 0
diff --git a/Assets/Scripts/Factory/OrbFactory.cs b/Assets/Scripts/Factory/OrbFactory.cs
new file mode 100644
index 0000000..30ef483
--- /dev/null
+++ b/Assets/Scripts/Factory/OrbFactory.cs
@@ -0,0 +1,16 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class OrbFactory : MonoBehaviour, IFactory
+{
+
+    [SerializeField]
+    public GameObject[] orbPrefab;
+
+    public GameObject FactoryMethod(int tag)
+    {
+        GameObject orb = orbPrefab[tag];
+        return orb;
+    }
+}
\ No newline at end of file
diff --git a/Assets/Scripts/Factory/OrbFactory.cs.meta b/Assets/Scripts/Factory/OrbFactory.cs.meta
new file mode 100644
index 0000000..9341a85
--- /dev/null
+++ b/Assets/Scripts/Factory/OrbFactory.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 249a5d810d5a74844ab587bb9b46c0ee
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/Managers/OrbManager.cs b/Assets/Scripts/Managers/OrbManager.cs
new file mode 100644
index 0000000..f8a1550
--- /dev/null
+++ b/Assets/Scripts/Managers/OrbManager.cs
@@ -0,0 +1,37 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class OrbManager : MonoBehaviour
+{
+    public PlayerHealth playerHealth;
+    public GameObject orb;
+    public int spawnOrb;
+    public float spawnTime = 3f;
+    public Transform[] spawnPoints;
+
+    [SerializeField]
+    public MonoBehaviour factory;
+    IFactory Factory { get { return factory as IFactory; } }
+
+    void Start()
+    {
+        //Mengeksekusi fungs Spawn setiap beberapa detik sesui dengan nilai spawnTime
+        InvokeRepeating("Spawn", spawnTime, spawnTime);
+    }
+
+
+    void Spawn()
+    {
+        if (playerHealth.currentHealth <= 0f)
+        {
+            return;
+        }
+
+        int spawnPointIndex = Random.Range(0, spawnPoints.Length);
+
+        // Menduplikasi enemy
+        Instantiate(Factory.FactoryMethod(spawnOrb), spawnPoints[spawnPointIndex].position, spawnPoints[spawnPointIndex].rotation);
+
+    }
+}
diff --git a/Assets/Scripts/Managers/OrbManager.cs.meta b/Assets/Scripts/Managers/OrbManager.cs.meta
new file mode 100644
index 0000000..0cf75d9
--- /dev/null
+++ b/Assets/Scripts/Managers/OrbManager.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 3ebce3593297a094592f1a96d5e9cbed
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/Orbs.meta b/Assets/Scripts/Orbs.meta
new file mode 100644
index 0000000..e1916ec
--- /dev/null
+++ b/Assets/Scripts/Orbs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 38f470ab5e93e81459ef5cb668fa6846
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/Orbs/HealthOrb.cs b/Assets/Scripts/Orbs/HealthOrb.cs
new file mode 100644
index 0000000..c9bc774
--- /dev/null
+++ b/Assets/Scripts/Orbs/HealthOrb.cs
@@ -0,0 +1,34 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class HealthOrb : MonoBehaviour
+{
+    public float healthOrbTime = 0.5f;
+    public int powerUpValue = 10;
+    Animator anim;
+    GameObject player;
+    PlayerHealth playerHealth;
+    float timer;
+    // Start is called before the first frame update
+    void Awake()
+    {
+        player = GameObject.FindGameObjectWithTag("Player");
+        playerHealth = player.GetComponent<PlayerHealth>();
+        anim = GetComponent<Animator>();
+    }
+
+    // Update is called once per frame
+    void Update()
+    {
+        if (timer >= healthOrbTime)
+        {
+            // hilang
+        }
+    }
+
+    void Taken()
+    {
+        playerHealth.TakePowerUp(powerUpValue);
+    }
+}
diff --git a/Assets/Scripts/Orbs/HealthOrb.cs.meta b/Assets/Scripts/Orbs/HealthOrb.cs.meta
new file mode 100644
index 0000000..cfaf97f
--- /dev/null
+++ b/Assets/Scripts/Orbs/HealthOrb.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 764e68913424eeb419dd38af7e60ff61
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/Orbs/PowerOrb.cs b/Assets/Scripts/Orbs/PowerOrb.cs
new file mode 100644
index 0000000..ece06d3
--- /dev/null
+++ b/Assets/Scripts/Orbs/PowerOrb.cs
@@ -0,0 +1,34 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class PowerOrb : MonoBehaviour
+{
+    public float powerOrbTime = 0.5f;
+    public int powerUpValue = 10;
+    Animator anim;
+    GameObject player;
+    PlayerPower playerPower;
+    float timer;
+    // Start is called before the first frame update
+    void Awake()
+    {
+        player = GameObject.FindGameObjectWithTag("Player");
+        playerPower = player.GetComponent<PlayerPower>();
+        anim = GetComponent<Animator>();
+    }
+
+    // Update is called once per frame
+    void Update()
+    {
+        if (timer >= powerOrbTime)
+        {
+            // hilang
+        }
+    }
+
+    void Taken()
+    {
+        playerPower.TakePowerUp(powerUpValue);
+    }
+}
diff --git a/Assets/Scripts/Orbs/PowerOrb.cs.meta b/Assets/Scripts/Orbs/PowerOrb.cs.meta
new file mode 100644
index 0000000..08f2a9c
--- /dev/null
+++ b/Assets/Scripts/Orbs/PowerOrb.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 25d572023fc8dca439d7bd171c970c34
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/Orbs/SpeedOrb.cs b/Assets/Scripts/Orbs/SpeedOrb.cs
new file mode 100644
index 0000000..6fc5fbd
--- /dev/null
+++ b/Assets/Scripts/Orbs/SpeedOrb.cs
@@ -0,0 +1,34 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class SpeedOrb : MonoBehaviour
+{
+    public float speedOrbTime = 0.5f;
+    public int powerUpValue = 10;
+    Animator anim;
+    GameObject player;
+    PlayerSpeed playerSpeed;
+    float timer;
+    // Start is called before the first frame update
+    void Awake()
+    {
+        player = GameObject.FindGameObjectWithTag("Player");
+        playerSpeed = player.GetComponent<PlayerSpeed>();
+        anim = GetComponent<Animator>();
+    }
+
+    // Update is called once per frame
+    void Update()
+    {
+        if (timer >= speedOrbTime)
+        {
+            // hilang
+        }
+    }
+
+    void Taken()
+    {
+        playerSpeed.TakePowerUp(powerUpValue);
+    }
+}
diff --git a/Assets/Scripts/Orbs/SpeedOrb.cs.meta b/Assets/Scripts/Orbs/SpeedOrb.cs.meta
new file mode 100644
index 0000000..2c811bd
--- /dev/null
+++ b/Assets/Scripts/Orbs/SpeedOrb.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d104f8fb432c7ba41998f84129eedf56
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/Player/PlayerHealth.cs b/Assets/Scripts/Player/PlayerHealth.cs
index d439222..11ce850 100644
--- a/Assets/Scripts/Player/PlayerHealth.cs
+++ b/Assets/Scripts/Player/PlayerHealth.cs
@@ -68,6 +68,12 @@ public class PlayerHealth : MonoBehaviour
         }
     }
 
+    public void TakePowerUp(int amount)
+    {
+        currentHealth += amount;
+        healthSlider.value = currentHealth;
+    }
+
 
     void Death()
     {
diff --git a/Assets/Scripts/Player/PlayerPower.cs b/Assets/Scripts/Player/PlayerPower.cs
index d8b5069..8d2ac04 100644
--- a/Assets/Scripts/Player/PlayerPower.cs
+++ b/Assets/Scripts/Player/PlayerPower.cs
@@ -5,10 +5,10 @@ using UnityEngine.SceneManagement;
 
 public class PlayerPower : MonoBehaviour
 {
-    public int startingPower = 100;
+    public int startingPower = 10;
     public int currentPower;
     Animator anim;
-    public Slider healthSlider;
+    public Slider powerSlider;
     public Image damageImage;
     public AudioClip deathClip;
     AudioSource playerAudio;
@@ -32,4 +32,10 @@ public class PlayerPower : MonoBehaviour
     {
         
     }
+
+    public void TakePowerUp(int amount)
+    {
+        currentPower += amount;
+        powerSlider.value = currentPower;
+    }
 }
diff --git a/Assets/Scripts/Player/PlayerSpeed.cs b/Assets/Scripts/Player/PlayerSpeed.cs
index c8da146..9248013 100644
--- a/Assets/Scripts/Player/PlayerSpeed.cs
+++ b/Assets/Scripts/Player/PlayerSpeed.cs
@@ -5,10 +5,10 @@ using UnityEngine.SceneManagement;
 
 public class PlayerSpeed : MonoBehaviour
 {
-    public int startingSpeed = 100;
+    public int startingSpeed = 10;
     public int currentSpeed;
     Animator anim;
-    public Slider healthSlider;
+    public Slider speedSlider;
     public Image damageImage;
     public AudioClip deathClip;
     AudioSource playerAudio;
@@ -32,4 +32,10 @@ public class PlayerSpeed : MonoBehaviour
     {
 
     }
+
+    public void TakePowerUp(int amount)
+    {
+        currentSpeed += amount;
+        speedSlider.value = currentSpeed;
+    }
 }
-- 
GitLab