From 43e2dc557ea2fbef7a9b3f0dec72c7787ae86655 Mon Sep 17 00:00:00 2001
From: MuhamadAjiW <16521119@mahasiswa.itb.ac.id>
Date: Fri, 19 Apr 2024 09:11:38 +0700
Subject: [PATCH] refactor: object factory default parents to appropriate
 managers

---
 .../Collectibles/TestCollectible/TestCollectible.cs   |  2 +-
 Assets/Scripts/Core/Objects/Projectiles/Projectile.cs |  3 +++
 .../Core/Objects/Projectiles/Projectile.cs.meta       | 11 +++++++++++
 .../Core/Objects/Projectiles/TestProjectile.meta      |  8 ++++++++
 .../Projectiles/TestProjectile/TestProjectile.cs      |  3 +++
 .../Projectiles/TestProjectile/TestProjectile.cs.meta | 11 +++++++++++
 .../Library/BaseClasses/EntityObject/AttackEntity.cs  |  2 +-
 .../Library/BaseClasses/EntityObject/AttackObject.cs  |  3 ++-
 Assets/Scripts/Library/Util/ObjectFactory.cs          |  8 +++-----
 9 files changed, 43 insertions(+), 8 deletions(-)
 create mode 100644 Assets/Scripts/Core/Objects/Projectiles/Projectile.cs
 create mode 100644 Assets/Scripts/Core/Objects/Projectiles/Projectile.cs.meta
 create mode 100644 Assets/Scripts/Core/Objects/Projectiles/TestProjectile.meta
 create mode 100644 Assets/Scripts/Core/Objects/Projectiles/TestProjectile/TestProjectile.cs
 create mode 100644 Assets/Scripts/Core/Objects/Projectiles/TestProjectile/TestProjectile.cs.meta

diff --git a/Assets/Scripts/Core/Objects/Collectibles/TestCollectible/TestCollectible.cs b/Assets/Scripts/Core/Objects/Collectibles/TestCollectible/TestCollectible.cs
index 86ae86d3..2d334ba1 100644
--- a/Assets/Scripts/Core/Objects/Collectibles/TestCollectible/TestCollectible.cs
+++ b/Assets/Scripts/Core/Objects/Collectibles/TestCollectible/TestCollectible.cs
@@ -2,7 +2,7 @@ using UnityEngine;
 
 public class TestCollectible : Collectible{
     // Static attributes
-    public static string ObjectIdPrefix = "Player";
+    public static string ObjectIdPrefix = "TestCollectible";
 
     // Constructor
     protected new void Start(){
diff --git a/Assets/Scripts/Core/Objects/Projectiles/Projectile.cs b/Assets/Scripts/Core/Objects/Projectiles/Projectile.cs
new file mode 100644
index 00000000..712465ef
--- /dev/null
+++ b/Assets/Scripts/Core/Objects/Projectiles/Projectile.cs
@@ -0,0 +1,3 @@
+public class Projectile : AttackObject{
+    
+}
\ No newline at end of file
diff --git a/Assets/Scripts/Core/Objects/Projectiles/Projectile.cs.meta b/Assets/Scripts/Core/Objects/Projectiles/Projectile.cs.meta
new file mode 100644
index 00000000..e0f9b5c5
--- /dev/null
+++ b/Assets/Scripts/Core/Objects/Projectiles/Projectile.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 155e444c6e73b404981a30f674ebbe98
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/Core/Objects/Projectiles/TestProjectile.meta b/Assets/Scripts/Core/Objects/Projectiles/TestProjectile.meta
new file mode 100644
index 00000000..47ac0ae6
--- /dev/null
+++ b/Assets/Scripts/Core/Objects/Projectiles/TestProjectile.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: e0692a4893eed1143a9ffbe66c0d6767
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/Core/Objects/Projectiles/TestProjectile/TestProjectile.cs b/Assets/Scripts/Core/Objects/Projectiles/TestProjectile/TestProjectile.cs
new file mode 100644
index 00000000..590825f7
--- /dev/null
+++ b/Assets/Scripts/Core/Objects/Projectiles/TestProjectile/TestProjectile.cs
@@ -0,0 +1,3 @@
+public class TestProjectile : Projectile{
+
+}
\ No newline at end of file
diff --git a/Assets/Scripts/Core/Objects/Projectiles/TestProjectile/TestProjectile.cs.meta b/Assets/Scripts/Core/Objects/Projectiles/TestProjectile/TestProjectile.cs.meta
new file mode 100644
index 00000000..cbc956aa
--- /dev/null
+++ b/Assets/Scripts/Core/Objects/Projectiles/TestProjectile/TestProjectile.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 42130989abf222142803c893c15fda1d
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/Library/BaseClasses/EntityObject/AttackEntity.cs b/Assets/Scripts/Library/BaseClasses/EntityObject/AttackEntity.cs
index 5b77ced0..82afa323 100644
--- a/Assets/Scripts/Library/BaseClasses/EntityObject/AttackEntity.cs
+++ b/Assets/Scripts/Library/BaseClasses/EntityObject/AttackEntity.cs
@@ -1,7 +1,7 @@
 using System;
 using UnityEngine;
 
-public class AttackEntity : WorldObject, IAttack{
+public class AttackEntity : WorldEntity, IAttack{
     // Attributes
     [SerializeField] private float damage;
     [SerializeField] private float knockbackPower;
diff --git a/Assets/Scripts/Library/BaseClasses/EntityObject/AttackObject.cs b/Assets/Scripts/Library/BaseClasses/EntityObject/AttackObject.cs
index 940b3447..8c23b46a 100644
--- a/Assets/Scripts/Library/BaseClasses/EntityObject/AttackObject.cs
+++ b/Assets/Scripts/Library/BaseClasses/EntityObject/AttackObject.cs
@@ -1,7 +1,8 @@
 using System;
 using UnityEngine;
 
-public class AttackObject : WorldObject, IAttack{
+// TODO: Review whether attack object should be classified as a world object
+public class AttackObject : MonoBehaviour, IAttack{
     // Attributes
     [SerializeField] private float damage;
     [SerializeField] private float knockbackPower;
diff --git a/Assets/Scripts/Library/Util/ObjectFactory.cs b/Assets/Scripts/Library/Util/ObjectFactory.cs
index bbe48929..3f5a7d74 100644
--- a/Assets/Scripts/Library/Util/ObjectFactory.cs
+++ b/Assets/Scripts/Library/Util/ObjectFactory.cs
@@ -49,7 +49,7 @@ public static class ObjectFactory{
         int renderingOrder = 0,
         string objectName = "Unnamed Object"
     ){
-        GameObject prefabObject = CreateObject(prefabPath, parent, position, scale, rotation, renderingOrder, objectName);
+        GameObject prefabObject = CreateObject(prefabPath, parent == null? ObjectManager.instance.transform : parent, position, scale, rotation, renderingOrder, objectName);
         if(!prefabObject.TryGetComponent<IAttack>(out var attackObject)) Debug.LogError("Loaded prefab is not an IAttack: " + prefabPath);
 
         attackObject.Damage = damage;
@@ -75,14 +75,13 @@ public static class ObjectFactory{
 
     public static Collectible CreateCollectibleObject(
         string prefabPath,
-        Transform parent = null,
         Vector3? position = null,
         Vector3? scale = null,
         Quaternion? rotation = null,
         int renderingOrder = 0,
         string objectName = "Unnamed Object"
     ){
-        GameObject prefabObject = CreateObject(prefabPath, parent == null? ObjectManager.instance.transform : parent, position, scale, rotation, renderingOrder, objectName);
+        GameObject prefabObject = CreateObject(prefabPath, ObjectManager.instance.transform, position, scale, rotation, renderingOrder, objectName);
         if(!prefabObject.TryGetComponent<Collectible>(out var collectible)) Debug.LogError("Loaded prefab is not a Collectible: " + prefabPath);
         prefabObject.layer = LayerMask.NameToLayer(GameEnvironmentConfig.LAYER_COLLECTIBLE);
 
@@ -91,14 +90,13 @@ public static class ObjectFactory{
 
     public static WorldEntity CreateEntity(
         string prefabPath,
-        Transform parent = null,
         Vector3? position = null,
         Vector3? scale = null,
         Quaternion? rotation = null,
         int renderingOrder = 0,
         string objectName = "Unnamed Object"
     ){
-        GameObject prefabObject = CreateObject(prefabPath, parent == null? EntityManager.instance.transform : parent, position, scale, rotation, renderingOrder, objectName);
+        GameObject prefabObject = CreateObject(prefabPath, EntityManager.instance.transform, position, scale, rotation, renderingOrder, objectName);
         if(!prefabObject.TryGetComponent<WorldEntity>(out var entity)) Debug.LogError("Loaded prefab is not an entity: " + prefabPath);
         return entity;
     }
-- 
GitLab