From e0d5864bfa74f3639baa87dc7e5d915fd9b7ae71 Mon Sep 17 00:00:00 2001
From: MuhamadAjiW <16521119@mahasiswa.itb.ac.id>
Date: Tue, 23 Apr 2024 09:27:49 +0700
Subject: [PATCH] refactor: data types

---
 Assets/_Scripts/Config/GameConfig.cs          | 24 +++++++++----------
 .../_Scripts/Core/Entities/Mobs/BossEntity.cs | 13 ++++++++++
 .../Core/Entities/Mobs/EnemyEntity.cs         |  6 ++---
 .../_Scripts/Core/Entities/Pets/Companion.cs  |  3 +++
 .../Core/Objects/Weapons/WeaponObject.cs      |  1 -
 Assets/_Scripts/Core/Player/Player.cs         |  4 ++--
 .../EntityObject/CombatantEntity.cs           |  4 ++--
 .../BaseClasses/EntityObject/PlayerEntity.cs  | 14 +++++++++++
 .../Library/DataTypes/CompanionData.cs        |  5 ++++
 .../Library/DataTypes/DifficultyData.cs       | 12 ++++------
 .../Library/DataTypes/ProjectileData.cs       |  2 +-
 .../_Scripts/Library/DataTypes/WeaponData.cs  |  6 ++++-
 .../Library/Interfaces/IAccompanied.cs        |  3 +++
 13 files changed, 68 insertions(+), 29 deletions(-)

diff --git a/Assets/_Scripts/Config/GameConfig.cs b/Assets/_Scripts/Config/GameConfig.cs
index f02be23d..b7941cc8 100644
--- a/Assets/_Scripts/Config/GameConfig.cs
+++ b/Assets/_Scripts/Config/GameConfig.cs
@@ -14,24 +14,24 @@ public static class GameConfig
     // Difficulty multipliers
     private static readonly DifficultyData EasyData = new()
     {
-        EnemyDamageMultiplier = 0.5f,
-        EnemyHealthMultiplier = 0.5f,
-        PlayerDamageMultiplier = 2f,
-        PlayerHealthMultiplier = 2f,
+        enemyDamageMultiplier = 0.5f,
+        enemyHealthMultiplier = 0.5f,
+        playerDamageMultiplier = 2f,
+        playerHealthMultiplier = 2f,
     };
     private static readonly DifficultyData MediumData = new()
     {
-        EnemyDamageMultiplier = 0.5f,
-        EnemyHealthMultiplier = 0.5f,
-        PlayerDamageMultiplier = 2f,
-        PlayerHealthMultiplier = 2f,
+        enemyDamageMultiplier = 0.5f,
+        enemyHealthMultiplier = 0.5f,
+        playerDamageMultiplier = 2f,
+        playerHealthMultiplier = 2f,
     };
     private static readonly DifficultyData HardData = new()
     {
-        EnemyDamageMultiplier = 2f,
-        EnemyHealthMultiplier = 2f,
-        PlayerDamageMultiplier = 0.5f,
-        PlayerHealthMultiplier = 0.5f,
+        enemyDamageMultiplier = 2f,
+        enemyHealthMultiplier = 2f,
+        playerDamageMultiplier = 0.5f,
+        playerHealthMultiplier = 0.5f,
     };
 
     public static readonly Dictionary<DifficultyType, DifficultyData> DIFFICULTY_MODIFIERS = new()
diff --git a/Assets/_Scripts/Core/Entities/Mobs/BossEntity.cs b/Assets/_Scripts/Core/Entities/Mobs/BossEntity.cs
index 9554a3f7..5aec3ba4 100644
--- a/Assets/_Scripts/Core/Entities/Mobs/BossEntity.cs
+++ b/Assets/_Scripts/Core/Entities/Mobs/BossEntity.cs
@@ -5,8 +5,21 @@ public abstract class BossEntity : EnemyEntity, IAccompaniable
 {
     // Attributes
     private readonly List<Companion> companionList = new();    
+    private readonly List<bool> Activecompanions = new();    
 
     // Set-Getters
+    public List<bool> ActiveCompanions => ActiveCompanions;
     public List<Companion> Companions => companionList;
     public MonoBehaviour CompanionController => this;
+
+    // Functions
+    public void ActivateCompanion(int index)
+    {
+        throw new System.NotImplementedException();
+    }
+
+    public void DeactivateCompanion(int index)
+    {
+        throw new System.NotImplementedException();
+    }
 }
diff --git a/Assets/_Scripts/Core/Entities/Mobs/EnemyEntity.cs b/Assets/_Scripts/Core/Entities/Mobs/EnemyEntity.cs
index 9ffb4e15..f35a0ec5 100644
--- a/Assets/_Scripts/Core/Entities/Mobs/EnemyEntity.cs
+++ b/Assets/_Scripts/Core/Entities/Mobs/EnemyEntity.cs
@@ -2,14 +2,14 @@ public abstract class EnemyEntity : CombatantEntity
 {
     // Set-Getters
     public new string AttackLayerCode => EnvironmentConfig.LAYER_ENEMY_ATTACK;
-    public new float AttackMultiplier => GameConfig.DIFFICULTY_MODIFIERS[GameSaveData.instance.difficulty].EnemyDamageMultiplier;
+    public new float AttackMultiplier => GameConfig.DIFFICULTY_MODIFIERS[GameSaveData.instance.difficulty].enemyDamageMultiplier;
 
     // Functions
     new protected void Start()
     {
         base.Start();
-        Health *= GameConfig.DIFFICULTY_MODIFIERS[GameSaveData.instance.difficulty].EnemyHealthMultiplier;
-        BaseDamage *= GameConfig.DIFFICULTY_MODIFIERS[GameSaveData.instance.difficulty].EnemyDamageMultiplier;
+        Health *= GameConfig.DIFFICULTY_MODIFIERS[GameSaveData.instance.difficulty].enemyHealthMultiplier;
+        BaseDamage *= GameConfig.DIFFICULTY_MODIFIERS[GameSaveData.instance.difficulty].enemyDamageMultiplier;
         tag = EnvironmentConfig.TAG_ENEMY;
     }
 }
diff --git a/Assets/_Scripts/Core/Entities/Pets/Companion.cs b/Assets/_Scripts/Core/Entities/Pets/Companion.cs
index aa820e9f..00ab2489 100644
--- a/Assets/_Scripts/Core/Entities/Pets/Companion.cs
+++ b/Assets/_Scripts/Core/Entities/Pets/Companion.cs
@@ -3,6 +3,9 @@ using UnityEngine;
 
 public abstract class Companion : DamageableEntity 
 {
+    // Attributes
+    public CompanionData data;
+
     // Getter-Setter
     public IAccompaniable Owner {get; set;}
 
diff --git a/Assets/_Scripts/Core/Objects/Weapons/WeaponObject.cs b/Assets/_Scripts/Core/Objects/Weapons/WeaponObject.cs
index 46562480..8bed7c9e 100644
--- a/Assets/_Scripts/Core/Objects/Weapons/WeaponObject.cs
+++ b/Assets/_Scripts/Core/Objects/Weapons/WeaponObject.cs
@@ -6,7 +6,6 @@ public abstract class WeaponObject : MonoBehaviour
 {
 
     // Attributes
-    public string prefabPath;
     public WeaponData data;
     protected IArmed bearer;
     private bool canAttack = true;
diff --git a/Assets/_Scripts/Core/Player/Player.cs b/Assets/_Scripts/Core/Player/Player.cs
index 89d543c1..aacf5dd0 100644
--- a/Assets/_Scripts/Core/Player/Player.cs
+++ b/Assets/_Scripts/Core/Player/Player.cs
@@ -17,14 +17,14 @@ public class Player : PlayerEntity
 
     // Set-Getters
     public new string AttackLayerCode => EnvironmentConfig.LAYER_PLAYER;
-    public new float AttackMultiplier => GameConfig.DIFFICULTY_MODIFIERS[GameSaveData.instance.difficulty].PlayerDamageMultiplier;
+    public new float AttackMultiplier => GameConfig.DIFFICULTY_MODIFIERS[GameSaveData.instance.difficulty].playerDamageMultiplier;
 
     // Constructor
     new void Start()
     {
         base.Start();
         SetIdPrefix(ObjectIdPrefix);
-        Health *= GameConfig.DIFFICULTY_MODIFIERS[GameSaveData.instance.difficulty].PlayerHealthMultiplier;
+        Health *= GameConfig.DIFFICULTY_MODIFIERS[GameSaveData.instance.difficulty].playerHealthMultiplier;
         stateController = new PlayerStateController(this);
         inputController = new PlayerInputController(this);
         movementController = new PlayerMovementController(this);
diff --git a/Assets/_Scripts/Library/BaseClasses/EntityObject/CombatantEntity.cs b/Assets/_Scripts/Library/BaseClasses/EntityObject/CombatantEntity.cs
index 70030882..5e16f79f 100644
--- a/Assets/_Scripts/Library/BaseClasses/EntityObject/CombatantEntity.cs
+++ b/Assets/_Scripts/Library/BaseClasses/EntityObject/CombatantEntity.cs
@@ -52,9 +52,9 @@ public class CombatantEntity : DamageableEntity, IArmed
         UnequipWeapon();
 
         WeaponIndex = index;
-        WeaponObject blueprint = WeaponList[WeaponIndex];
+        WeaponObject selectedWeapon = WeaponList[WeaponIndex];
         WeaponObject weaponObject = ObjectFactory.CreateObject<WeaponObject>(
-            prefabPath: blueprint == null? NoWeapon.weaponPrefab : blueprint.prefabPath,
+            prefabPath: selectedWeapon == null? NoWeapon.weaponPrefab : selectedWeapon.data.prefabPath,
             parent: transform, 
             objectName: EnvironmentConfig.OBJECT_WEAPON
         );
diff --git a/Assets/_Scripts/Library/BaseClasses/EntityObject/PlayerEntity.cs b/Assets/_Scripts/Library/BaseClasses/EntityObject/PlayerEntity.cs
index b006629a..68b2f0b3 100644
--- a/Assets/_Scripts/Library/BaseClasses/EntityObject/PlayerEntity.cs
+++ b/Assets/_Scripts/Library/BaseClasses/EntityObject/PlayerEntity.cs
@@ -5,8 +5,22 @@ public class PlayerEntity : CombatantEntity, IAccompaniable
 {
     // Attributes
     public List<Companion> companionList = new();    
+    public List<bool> activeCompanions = new();    
     
     // Set-Getters
     public List<Companion> Companions => companionList;
+    public List<bool> ActiveCompanions => activeCompanions;
     public MonoBehaviour CompanionController => this;
+
+    // Functions
+    public void ActivateCompanion(int index)
+    {
+        throw new System.NotImplementedException();
+    }
+
+    public void DeactivateCompanion(int index)
+    {
+        throw new System.NotImplementedException();
+    }
+
 }
diff --git a/Assets/_Scripts/Library/DataTypes/CompanionData.cs b/Assets/_Scripts/Library/DataTypes/CompanionData.cs
index f8ae9dc7..5bfb22e7 100644
--- a/Assets/_Scripts/Library/DataTypes/CompanionData.cs
+++ b/Assets/_Scripts/Library/DataTypes/CompanionData.cs
@@ -4,4 +4,9 @@ using UnityEngine;
 [CreateAssetMenu(fileName = "NewCompanionData", menuName = "Data/Entity/Companion Data")]
 public class CompanionData : ScriptableObject
 {
+    // Note: prefab system is not quite extendable
+    // Learn other systems than this obviously
+    // but I think the window to learn and implement a new system is not viable within the scope of the project
+    public string prefabPath;
+    public GameObject model;
 }
\ No newline at end of file
diff --git a/Assets/_Scripts/Library/DataTypes/DifficultyData.cs b/Assets/_Scripts/Library/DataTypes/DifficultyData.cs
index a8cc3c72..59859f94 100644
--- a/Assets/_Scripts/Library/DataTypes/DifficultyData.cs
+++ b/Assets/_Scripts/Library/DataTypes/DifficultyData.cs
@@ -1,9 +1,7 @@
-using UnityEngine;
-
-public class DifficultyData : ScriptableObject
+public class DifficultyData
 {
-    public float EnemyHealthMultiplier { get; set; }
-    public float EnemyDamageMultiplier { get; set; }
-    public float PlayerHealthMultiplier { get; set; }
-    public float PlayerDamageMultiplier { get; set; }
+    public float enemyHealthMultiplier;
+    public float enemyDamageMultiplier;
+    public float playerHealthMultiplier;
+    public float playerDamageMultiplier;
 }
diff --git a/Assets/_Scripts/Library/DataTypes/ProjectileData.cs b/Assets/_Scripts/Library/DataTypes/ProjectileData.cs
index 556b46f6..9215a845 100644
--- a/Assets/_Scripts/Library/DataTypes/ProjectileData.cs
+++ b/Assets/_Scripts/Library/DataTypes/ProjectileData.cs
@@ -4,8 +4,8 @@ using UnityEngine;
 [CreateAssetMenu(fileName = "NewProjectileData", menuName = "Data/Weapon/Projectile Data")]
 public class ProjectileData : ScriptableObject
 {
+    public GameObject model;
     public float speed;
     public float travelDistance;
     public bool through;
-    public GameObject model;
 }
\ No newline at end of file
diff --git a/Assets/_Scripts/Library/DataTypes/WeaponData.cs b/Assets/_Scripts/Library/DataTypes/WeaponData.cs
index b8031157..3a1f31fb 100644
--- a/Assets/_Scripts/Library/DataTypes/WeaponData.cs
+++ b/Assets/_Scripts/Library/DataTypes/WeaponData.cs
@@ -4,9 +4,13 @@ using UnityEngine;
 [CreateAssetMenu(fileName = "NewWeaponData", menuName = "Data/Weapon/Weapon Data")]
 public class WeaponData : ScriptableObject
 {
+    // Note: prefab system is not quite extendable
+    // Learn other systems than this obviously
+    // but I think the window to learn and implement a new system is not viable within the scope of the project
+    public string prefabPath;
+    public GameObject model;
     public float baseDamage;
     public float knockbackPower;
     public float attackInterval;
     public float alternateAttackInterval;
-    public GameObject model;
 }
\ No newline at end of file
diff --git a/Assets/_Scripts/Library/Interfaces/IAccompanied.cs b/Assets/_Scripts/Library/Interfaces/IAccompanied.cs
index 0c46aa5b..ec66b003 100644
--- a/Assets/_Scripts/Library/Interfaces/IAccompanied.cs
+++ b/Assets/_Scripts/Library/Interfaces/IAccompanied.cs
@@ -5,5 +5,8 @@ public interface IAccompaniable
 {
     // Set-Getters
     public List<Companion> Companions { get; }
+    public List<bool> ActiveCompanions { get; }
     public MonoBehaviour CompanionController { get; }
+    public void ActivateCompanion(int index);
+    public void DeactivateCompanion(int index);
 }
-- 
GitLab