diff --git a/Assets/Prefabs/TestUnit.prefab b/Assets/Prefabs/TestUnit.prefab
index c7ac2eb..cbaf7be 100644
--- a/Assets/Prefabs/TestUnit.prefab
+++ b/Assets/Prefabs/TestUnit.prefab
@@ -179,12 +179,12 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 9815bed5dc151c8c6a271899ed1b7c4f, type: 3}
m_Name:
m_EditorClassIdentifier:
-
k__BackingField: {fileID: 3280843376750909586}
- k__BackingField: {fileID: 8213395333053285225}
- k__BackingField: {fileID: 8908285060348773052}
- k__BackingField: {fileID: 6587310683195830629}
- k__BackingField: 1
price: 0
+ k__BackingField: 1
+ k__BackingField: {fileID: 3280843376750909586}
+ k__BackingField: {fileID: 8213395333053285225}
+ k__BackingField: {fileID: 8908285060348773052}
+ k__BackingField: {fileID: 6587310683195830629}
--- !u!114 &8213395333053285225
MonoBehaviour:
m_ObjectHideFlags: 0
diff --git a/Assets/Scripts/GlobalsVariable.cs b/Assets/Scripts/GlobalsVariable.cs
deleted file mode 100644
index 7535645..0000000
--- a/Assets/Scripts/GlobalsVariable.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using System;
-using System.Collections.Generic;
-using UnityEngine;
-
-public static class GlobalsVariable
-{
- public static List AliveUnitsTeamA = new List();
- public static List AliveUnitsTeamB = new List();
-
-}
diff --git a/Assets/Scripts/Unit.cs b/Assets/Scripts/Unit.cs
deleted file mode 100644
index 0faeb2c..0000000
--- a/Assets/Scripts/Unit.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-using Unity.VisualScripting;
-using UnityEngine;
-using UnityEngine.AI;
-
-[DisallowMultipleComponent]
-[RequireComponent(typeof(Rigidbody))]
-public class Unit : MonoBehaviour
-{
- [field: SerializeField] public Rigidbody Body { get; private set; }
- [field: SerializeField] public HealthHandler Health { get; private set; }
- [field: SerializeField] public AttackHandler Attack { get; private set; }
- [field: SerializeField] public MovementHandler Move { get; private set; }
-
- [field: SerializeField] public bool IsTeamA { get; private set; }
-
- [SerializeField] private int price;
-
-
-
- void OnValidate()
- {
- Debug.Assert(Body != null);
- Debug.Assert(Health != null);
- Debug.Assert(Attack != null);
- Debug.Assert(Move != null);
- }
-
- void Awake()
- {
-
- if (IsTeamA)
- {
- GlobalsVariable.AliveUnitsTeamA.Add(this);
- }
- else
- {
- GlobalsVariable.AliveUnitsTeamB.Add(this);
- }
- }
-
-
-}
diff --git a/Assets/Scripts/UnitScripts.meta b/Assets/Scripts/UnitScripts.meta
new file mode 100644
index 0000000..eb10dd8
--- /dev/null
+++ b/Assets/Scripts/UnitScripts.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 8a05c17988617d46a9233519a2dfbf3c
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/UnitScripts/AbstractUnit.cs b/Assets/Scripts/UnitScripts/AbstractUnit.cs
new file mode 100644
index 0000000..2bf69db
--- /dev/null
+++ b/Assets/Scripts/UnitScripts/AbstractUnit.cs
@@ -0,0 +1,10 @@
+using UnityEngine;
+
+public abstract class AbstractUnit : MonoBehaviour
+{
+ public float price;
+ [field: SerializeField] public bool IsTeamA { get; private set; }
+ public abstract bool Attack();
+ public abstract void TakeDamage(float damage);
+
+}
diff --git a/Assets/Scripts/UnitScripts/AbstractUnit.cs.meta b/Assets/Scripts/UnitScripts/AbstractUnit.cs.meta
new file mode 100644
index 0000000..8b6d1a3
--- /dev/null
+++ b/Assets/Scripts/UnitScripts/AbstractUnit.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: c34c1a29dc0657256b674f37fe8466d9
\ No newline at end of file
diff --git a/Assets/Scripts/AttackHandler.cs b/Assets/Scripts/UnitScripts/AttackHandler.cs
similarity index 76%
rename from Assets/Scripts/AttackHandler.cs
rename to Assets/Scripts/UnitScripts/AttackHandler.cs
index e99923b..b0ff288 100644
--- a/Assets/Scripts/AttackHandler.cs
+++ b/Assets/Scripts/UnitScripts/AttackHandler.cs
@@ -4,7 +4,7 @@ using UnityEngine;
using UnityEngine.Serialization;
using Random = UnityEngine.Random;
-[RequireComponent(typeof(Unit))]
+[RequireComponent(typeof(MinecraftUnit))]
public class AttackHandler : MonoBehaviour
{
[SerializeField] private float damage;
@@ -14,11 +14,11 @@ public class AttackHandler : MonoBehaviour
[SerializeField] private float knockbackVerticalForce;
private float _timer;
- private Unit _unit;
+ private MinecraftUnit _minecraftUnit;
void Awake()
{
- _unit = GetComponent();
+ _minecraftUnit = GetComponent();
}
void Start()
@@ -46,16 +46,22 @@ public class AttackHandler : MonoBehaviour
{
if (!target.CompareTag("Unit")) continue;
// GetComponent is expensive in performance, optimize here if it's slow
- Unit targetUnit = target.GetComponent();
+ AbstractUnit targetUnit = target.GetComponent();
// No friendly fire
- if (targetUnit.IsTeamA == _unit.IsTeamA) continue;
+ if (targetUnit.IsTeamA == _minecraftUnit.IsTeamA) continue;
+
+ targetUnit.TakeDamage(damage);
- targetUnit.Health.TakeDamage(damage);
Vector3 knockbackVector = knockbackHorizontalForce * (target.transform.position - transform.position).normalized
+ knockbackVerticalForce * Vector3.up;
- targetUnit.StartCoroutine(targetUnit.Move.TakeImpulse(knockbackVector));
+ // Knockback logic specific to MinecraftUnit (can't force other team to do our weird impl)
+ if (targetUnit is MinecraftUnit)
+ {
+ MinecraftUnit minecraftTarget = (MinecraftUnit)targetUnit;
+ minecraftTarget.StartCoroutine(minecraftTarget.MovementHandler.TakeImpulse(knockbackVector));
+ }
}
_timer = cooldown + Random.Range(-cooldown*0.2f, cooldown*0.2f);
return true;
diff --git a/Assets/Scripts/AttackHandler.cs.meta b/Assets/Scripts/UnitScripts/AttackHandler.cs.meta
similarity index 100%
rename from Assets/Scripts/AttackHandler.cs.meta
rename to Assets/Scripts/UnitScripts/AttackHandler.cs.meta
diff --git a/Assets/Scripts/CameraMouvement.cs b/Assets/Scripts/UnitScripts/CameraMouvement.cs
similarity index 100%
rename from Assets/Scripts/CameraMouvement.cs
rename to Assets/Scripts/UnitScripts/CameraMouvement.cs
diff --git a/Assets/Scripts/CameraMouvement.cs.meta b/Assets/Scripts/UnitScripts/CameraMouvement.cs.meta
similarity index 100%
rename from Assets/Scripts/CameraMouvement.cs.meta
rename to Assets/Scripts/UnitScripts/CameraMouvement.cs.meta
diff --git a/Assets/Scripts/UnitScripts/GlobalsVariable.cs b/Assets/Scripts/UnitScripts/GlobalsVariable.cs
new file mode 100644
index 0000000..3f3fb78
--- /dev/null
+++ b/Assets/Scripts/UnitScripts/GlobalsVariable.cs
@@ -0,0 +1,10 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+public static class GlobalsVariable
+{
+ public static List AliveUnitsTeamA = new List();
+ public static List AliveUnitsTeamB = new List();
+
+}
diff --git a/Assets/Scripts/GlobalsVariable.cs.meta b/Assets/Scripts/UnitScripts/GlobalsVariable.cs.meta
similarity index 100%
rename from Assets/Scripts/GlobalsVariable.cs.meta
rename to Assets/Scripts/UnitScripts/GlobalsVariable.cs.meta
diff --git a/Assets/Scripts/HealthHandler.cs b/Assets/Scripts/UnitScripts/HealthHandler.cs
similarity index 80%
rename from Assets/Scripts/HealthHandler.cs
rename to Assets/Scripts/UnitScripts/HealthHandler.cs
index 3f1e5c9..b2c82a2 100644
--- a/Assets/Scripts/HealthHandler.cs
+++ b/Assets/Scripts/UnitScripts/HealthHandler.cs
@@ -1,17 +1,17 @@
using UnityEngine;
-[RequireComponent(typeof(Unit))]
+[RequireComponent(typeof(MinecraftUnit))]
public class HealthHandler : MonoBehaviour
{
[SerializeField] private float maxHealth;
[SerializeField] private float currentHealth;
[SerializeField] private float armor;
- private Unit _unit;
+ private MinecraftUnit _minecraftUnit;
public void Awake()
{
- _unit = GetComponent();
+ _minecraftUnit = GetComponent();
}
public void TakeDamage(float damage)
@@ -47,13 +47,13 @@ public class HealthHandler : MonoBehaviour
public void Death()
{
print("you dead");
- if (_unit.IsTeamA)
+ if (_minecraftUnit.IsTeamA)
{
- GlobalsVariable.AliveUnitsTeamA.Remove(_unit);
+ GlobalsVariable.AliveUnitsTeamA.Remove(_minecraftUnit);
}
else
{
- GlobalsVariable.AliveUnitsTeamB.Remove(_unit);
+ GlobalsVariable.AliveUnitsTeamB.Remove(_minecraftUnit);
}
Destroy(gameObject);
diff --git a/Assets/Scripts/HealthHandler.cs.meta b/Assets/Scripts/UnitScripts/HealthHandler.cs.meta
similarity index 100%
rename from Assets/Scripts/HealthHandler.cs.meta
rename to Assets/Scripts/UnitScripts/HealthHandler.cs.meta
diff --git a/Assets/Scripts/UnitScripts/MinecraftUnit.cs b/Assets/Scripts/UnitScripts/MinecraftUnit.cs
new file mode 100644
index 0000000..12a4d34
--- /dev/null
+++ b/Assets/Scripts/UnitScripts/MinecraftUnit.cs
@@ -0,0 +1,48 @@
+using Unity.VisualScripting;
+using UnityEngine;
+using UnityEngine.AI;
+
+[DisallowMultipleComponent]
+[RequireComponent(typeof(Rigidbody))]
+public class MinecraftUnit : AbstractUnit
+{
+ [field: SerializeField] public Rigidbody Body { get; private set; }
+ [field: SerializeField] public HealthHandler HealthHandler { get; private set; }
+ [field: SerializeField] public AttackHandler AttackHandler { get; private set; }
+ [field: SerializeField] public MovementHandler MovementHandler { get; private set; }
+
+
+
+ void OnValidate()
+ {
+ Debug.Assert(Body != null);
+ Debug.Assert(HealthHandler != null);
+ Debug.Assert(AttackHandler != null);
+ Debug.Assert(MovementHandler != null);
+ }
+
+ void Awake()
+ {
+
+ if (IsTeamA)
+ {
+ GlobalsVariable.AliveUnitsTeamA.Add(this);
+ }
+ else
+ {
+ GlobalsVariable.AliveUnitsTeamB.Add(this);
+ }
+ }
+
+ // Abstract implementation for compatibility with other team
+
+ public override bool Attack()
+ {
+ return AttackHandler.Attack();
+ }
+
+ public override void TakeDamage(float damage)
+ {
+ HealthHandler.TakeDamage(damage);
+ }
+}
diff --git a/Assets/Scripts/Unit.cs.meta b/Assets/Scripts/UnitScripts/MinecraftUnit.cs.meta
similarity index 100%
rename from Assets/Scripts/Unit.cs.meta
rename to Assets/Scripts/UnitScripts/MinecraftUnit.cs.meta
diff --git a/Assets/Scripts/MovementHandler.cs b/Assets/Scripts/UnitScripts/MovementHandler.cs
similarity index 81%
rename from Assets/Scripts/MovementHandler.cs
rename to Assets/Scripts/UnitScripts/MovementHandler.cs
index 925d710..fd2b921 100644
--- a/Assets/Scripts/MovementHandler.cs
+++ b/Assets/Scripts/UnitScripts/MovementHandler.cs
@@ -6,7 +6,7 @@ using UnityEngine;
using UnityEngine.AI;
using UnityEngine.InputSystem.iOS;
-[RequireComponent(typeof(Unit))]
+[RequireComponent(typeof(MinecraftUnit))]
[RequireComponent(typeof(Rigidbody))]
public class MovementHandler : MonoBehaviour
{
@@ -14,12 +14,12 @@ public class MovementHandler : MonoBehaviour
[SerializeField] private NavMeshAgent agent;
[SerializeField] private Transform defaultMoveTarget;
- private Unit _unit;
+ private MinecraftUnit _minecraftUnit;
private Rigidbody _rigidbody;
void Awake()
{
- _unit = GetComponent();
+ _minecraftUnit = GetComponent();
_rigidbody = GetComponent();
}
@@ -48,23 +48,23 @@ public class MovementHandler : MonoBehaviour
MoveTowards(FindNearestEnemy().transform.position);
}
- Unit FindNearestEnemy()
+ MinecraftUnit FindNearestEnemy()
{
- List enemies = _unit.IsTeamA ? GlobalsVariable.AliveUnitsTeamB : GlobalsVariable.AliveUnitsTeamA;
+ List enemies = _minecraftUnit.IsTeamA ? GlobalsVariable.AliveUnitsTeamB : GlobalsVariable.AliveUnitsTeamA;
- Unit closestUnit = null;
+ MinecraftUnit closestMinecraftUnit = null;
float closestDistance = float.MaxValue;
- foreach (Unit enemy in enemies)
+ foreach (MinecraftUnit enemy in enemies)
{
float distanceToEnemy = (enemy.transform.position - transform.position).sqrMagnitude;
if (distanceToEnemy < closestDistance)
{
- closestUnit = enemy;
+ closestMinecraftUnit = enemy;
closestDistance = distanceToEnemy;
}
}
- return closestUnit;
+ return closestMinecraftUnit;
}
void Update()
@@ -94,7 +94,7 @@ public class MovementHandler : MonoBehaviour
// Die if exited navMesh for to long
if (noSurfaceTime > 6.0f)
{
- _unit.Health.Death();
+ _minecraftUnit.HealthHandler.Death();
yield break;
}
diff --git a/Assets/Scripts/MovementHandler.cs.meta b/Assets/Scripts/UnitScripts/MovementHandler.cs.meta
similarity index 100%
rename from Assets/Scripts/MovementHandler.cs.meta
rename to Assets/Scripts/UnitScripts/MovementHandler.cs.meta