From 5f3094564ee9dcb0f270782df2258a124d38a4ed Mon Sep 17 00:00:00 2001
From: MuhamadAjiW <16521119@mahasiswa.itb.ac.id>
Date: Sat, 20 Apr 2024 15:05:37 +0700
Subject: [PATCH] fix: knockback calculation

---
 Assets/Scenes/SampleScene.unity               | 203 +++++++++++++++++-
 .../BaseClasses/EntityObject/AttackEntity.cs  |  38 ----
 .../EntityObject/AttackEntity.cs.meta         |  11 -
 .../BaseClasses/EntityObject/AttackObject.cs  |   2 +-
 .../EntityObject/DamageableObject.cs          |  42 ----
 .../EntityObject/DamageableObject.cs.meta     |  11 -
 Assets/Scripts/Library/Util/MathUtil.cs       |   4 +-
 ProjectSettings/TagManager.asset              |   4 +-
 8 files changed, 207 insertions(+), 108 deletions(-)
 delete mode 100644 Assets/Scripts/Library/BaseClasses/EntityObject/AttackEntity.cs
 delete mode 100644 Assets/Scripts/Library/BaseClasses/EntityObject/AttackEntity.cs.meta
 delete mode 100644 Assets/Scripts/Library/BaseClasses/EntityObject/DamageableObject.cs
 delete mode 100644 Assets/Scripts/Library/BaseClasses/EntityObject/DamageableObject.cs.meta

diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity
index 904f3548..6f5bf0d1 100644
--- a/Assets/Scenes/SampleScene.unity
+++ b/Assets/Scenes/SampleScene.unity
@@ -154,6 +154,7 @@ MonoBehaviour:
   m_EditorClassIdentifier: 
   backButton: 27
   attackButton: 122
+  interactButton: 120
 --- !u!4 &6125823
 Transform:
   m_ObjectHideFlags: 0
@@ -183,7 +184,7 @@ GameObject:
   - component: {fileID: 117855958}
   m_Layer: 6
   m_Name: Player
-  m_TagString: Untagged
+  m_TagString: Player
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
@@ -265,6 +266,7 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: bbd12f0cc12b22743998413b3f14b197, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+  Id: 
   knockbackResistance: 1
   baseSpeed: 10
   maxHealth: 100
@@ -317,6 +319,7 @@ Transform:
   - {fileID: 963194228}
   - {fileID: 484130345}
   - {fileID: 1098815287}
+  - {fileID: 2127634081}
   m_Father: {fileID: 0}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1 &484130344
@@ -505,6 +508,7 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 36e5aa8cb18425941b8dede35c491e0e, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+  Id: 
   knockbackResistance: 1
   baseSpeed: 0
   maxHealth: 100000
@@ -814,6 +818,75 @@ Animator:
   m_AllowConstantClipSamplingOptimization: 1
   m_KeepAnimatorStateOnDisable: 0
   m_WriteDefaultValuesOnDisable: 0
+--- !u!1 &766737619
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 766737620}
+  - component: {fileID: 766737622}
+  - component: {fileID: 766737621}
+  m_Layer: 0
+  m_Name: TestCollectible
+  m_TagString: Collectible
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &766737620
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 766737619}
+  serializedVersion: 2
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: -1.597, y: 0.843, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 1792976464}
+  m_Father: {fileID: 2127634081}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &766737621
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 766737619}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 6a318ebd05eb15c4fabf9cbe7355eb41, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  Id: 
+  TimeToLive: 5
+--- !u!135 &766737622
+SphereCollider:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 766737619}
+  m_Material: {fileID: 0}
+  m_IncludeLayers:
+    serializedVersion: 2
+    m_Bits: 0
+  m_ExcludeLayers:
+    serializedVersion: 2
+    m_Bits: 0
+  m_LayerOverridePriority: 0
+  m_IsTrigger: 1
+  m_ProvidesContacts: 0
+  m_Enabled: 1
+  serializedVersion: 3
+  m_Radius: 0.5
+  m_Center: {x: 0, y: 0, z: 0}
 --- !u!1 &770593019
 GameObject:
   m_ObjectHideFlags: 0
@@ -1184,6 +1257,134 @@ MeshFilter:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1374546118}
   m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!1 &1792976463
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1792976464}
+  - component: {fileID: 1792976466}
+  - component: {fileID: 1792976465}
+  m_Layer: 0
+  m_Name: Model
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &1792976464
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1792976463}
+  serializedVersion: 2
+  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_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 766737620}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!23 &1792976465
+MeshRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1792976463}
+  m_Enabled: 1
+  m_CastShadows: 1
+  m_ReceiveShadows: 1
+  m_DynamicOccludee: 1
+  m_StaticShadowCaster: 0
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RayTracingMode: 2
+  m_RayTraceProcedural: 0
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_ReceiveGI: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 1
+  m_SelectedEditorRenderState: 3
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: 0
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_AdditionalVertexStreams: {fileID: 0}
+--- !u!33 &1792976466
+MeshFilter:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1792976463}
+  m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!1 &2127634080
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2127634081}
+  - component: {fileID: 2127634082}
+  m_Layer: 0
+  m_Name: ObjectManager
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &2127634081
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2127634080}
+  serializedVersion: 2
+  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_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 766737620}
+  m_Father: {fileID: 239523007}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &2127634082
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2127634080}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: c051aae39aef0264ba144bc30cbe301e, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
 --- !u!1001 &4718921866596059802
 PrefabInstance:
   m_ObjectHideFlags: 0
diff --git a/Assets/Scripts/Library/BaseClasses/EntityObject/AttackEntity.cs b/Assets/Scripts/Library/BaseClasses/EntityObject/AttackEntity.cs
deleted file mode 100644
index 82afa323..00000000
--- a/Assets/Scripts/Library/BaseClasses/EntityObject/AttackEntity.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-using System;
-using UnityEngine;
-
-public class AttackEntity : WorldEntity, IAttack{
-    // Attributes
-    [SerializeField] private float damage;
-    [SerializeField] private float knockbackPower;
-    public float Damage { 
-        get => damage; 
-        set => damage = value; 
-    }
-    public float KnockbackPower { 
-        get => KnockbackPower; 
-        set => KnockbackPower = value; 
-    }
-    public Vector3 KnockbackOrigin{get; set;}
-    public event Action OnDamageEvent;
-
-    // Functions
-    public void Knockback(IRigid rigidObject){
-        var knockbackModifier = (-1) * knockbackPower / rigidObject.KnockbackResistance;
-        Vector3 knockbackVector = MathUtils.GetDirectionVector(KnockbackOrigin, rigidObject.Position) * knockbackModifier;
-        rigidObject.Rigidbody.AddForce(knockbackVector, ForceMode.Impulse);
-    }
-
-    protected void Hit(Collider otherCollider){
-        otherCollider.transform.TryGetComponent<IDamageable>(out var damageableObject);
-        if(damageableObject == null) return;
-
-        if(damageableObject.Damageable){
-            damageableObject.InflictDamage(Damage);
-            OnDamageEvent?.Invoke();
-
-            otherCollider.TryGetComponent<IRigid>(out var rigidObject);
-            if(rigidObject != null) Knockback(rigidObject);
-        }
-    }
-}
\ No newline at end of file
diff --git a/Assets/Scripts/Library/BaseClasses/EntityObject/AttackEntity.cs.meta b/Assets/Scripts/Library/BaseClasses/EntityObject/AttackEntity.cs.meta
deleted file mode 100644
index c92870b2..00000000
--- a/Assets/Scripts/Library/BaseClasses/EntityObject/AttackEntity.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 54e836638d4a3a241aa694416c794985
-MonoImporter:
-  externalObjects: {}
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Assets/Scripts/Library/BaseClasses/EntityObject/AttackObject.cs b/Assets/Scripts/Library/BaseClasses/EntityObject/AttackObject.cs
index 8c23b46a..e6f1bafe 100644
--- a/Assets/Scripts/Library/BaseClasses/EntityObject/AttackObject.cs
+++ b/Assets/Scripts/Library/BaseClasses/EntityObject/AttackObject.cs
@@ -20,7 +20,7 @@ public class AttackObject : MonoBehaviour, IAttack{
     // Functions
     public void Knockback(IRigid rigidObject){
         var knockbackModifier = (-1) * knockbackPower / rigidObject.KnockbackResistance;
-        Vector3 knockbackVector = MathUtils.GetDirectionVector(KnockbackOrigin, rigidObject.Position) * knockbackModifier;
+        Vector3 knockbackVector = MathUtils.GetDirectionVectorFlat(KnockbackOrigin, rigidObject.Position) * knockbackModifier;
         rigidObject.Rigidbody.AddForce(knockbackVector, ForceMode.Impulse);
         Debug.Log(knockbackVector);
     }
diff --git a/Assets/Scripts/Library/BaseClasses/EntityObject/DamageableObject.cs b/Assets/Scripts/Library/BaseClasses/EntityObject/DamageableObject.cs
deleted file mode 100644
index 927c4e8c..00000000
--- a/Assets/Scripts/Library/BaseClasses/EntityObject/DamageableObject.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-using System;
-using UnityEngine;
-
-public class DamageableObject : WorldObject, IDamageable{
-    // Attributes
-    private bool damageable = true;
-    [SerializeField] private float maxHealth;
-    [SerializeField] private float health;
-
-    public float MaxHealth {
-        get => maxHealth;
-        set => maxHealth = value > 0? value : 0;
-    }
-    public float Health {
-        get => health;
-        set => health = value > 0? (value > MaxHealth? MaxHealth : value) : 0;
-    }
-    public bool Damageable { 
-        get => damageable; 
-        set => damageable = value; 
-    }
-    public bool Dead => health <= 0;
-    public event Action OnDeathEvent;
-    public event Action OnDamagedEvent;
-    public event Action OnHealEvent;
-
-    // Functions
-    public float InflictDamage(float damage){
-        Health -= damage;
-        OnDamagedEvent?.Invoke();
-        if(Dead) OnDeathEvent?.Invoke();
-
-        return Health;
-    }
-
-    public float InflictHeal(float heal){
-        Health += heal;
-        OnHealEvent?.Invoke();
-
-        return Health;
-    }
-}
diff --git a/Assets/Scripts/Library/BaseClasses/EntityObject/DamageableObject.cs.meta b/Assets/Scripts/Library/BaseClasses/EntityObject/DamageableObject.cs.meta
deleted file mode 100644
index f4624cd6..00000000
--- a/Assets/Scripts/Library/BaseClasses/EntityObject/DamageableObject.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: dd6098adc98e03648b9f5ee6bd1efb8f
-MonoImporter:
-  externalObjects: {}
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Assets/Scripts/Library/Util/MathUtil.cs b/Assets/Scripts/Library/Util/MathUtil.cs
index ac69919f..7188bcf2 100644
--- a/Assets/Scripts/Library/Util/MathUtil.cs
+++ b/Assets/Scripts/Library/Util/MathUtil.cs
@@ -1,8 +1,8 @@
 using UnityEngine;
 
 public static class MathUtils{
-    public static Vector3 GetDirectionVector(Vector3 origin, Vector3 target){
-        Vector3 direction = origin - target;
+    public static Vector3 GetDirectionVectorFlat(Vector3 origin, Vector3 target){
+        Vector3 direction = new(origin.x - target.x, 0, origin.z - target.z);
         return direction.normalized;
     }
 
diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset
index c7e81253..2ad472a7 100644
--- a/ProjectSettings/TagManager.asset
+++ b/ProjectSettings/TagManager.asset
@@ -6,7 +6,7 @@ TagManager:
   tags:
   - Ground
   - Enemy
-  - Collectibles
+  - Collectible
   layers:
   - Default
   - TransparentFX
@@ -18,7 +18,7 @@ TagManager:
   - Enemy
   - PlayerAttack
   - EnemyAttack
-  - 
+  - Collectible
   - 
   - 
   - 
-- 
GitLab