From 11f2ae26cc31b90cf0fa05323db7fb3d5793f53c Mon Sep 17 00:00:00 2001 From: Chris Date: Sat, 4 Oct 2025 13:47:32 -0400 Subject: [PATCH] maint: moving around methods to work better with Unit/Player/Enemy classes --- Assets/Scripts/Units/Enemy.cs | 44 +++++++++++++++++++++++++-- Assets/Scripts/Units/IKillable.cs | 28 +++++++++++++++++- Assets/Scripts/Units/Player.cs | 49 ++++--------------------------- Assets/Scripts/Units/Unit.cs | 48 +++++++++++++++++++++++++++++- 4 files changed, 121 insertions(+), 48 deletions(-) diff --git a/Assets/Scripts/Units/Enemy.cs b/Assets/Scripts/Units/Enemy.cs index 5561770..d45eea9 100644 --- a/Assets/Scripts/Units/Enemy.cs +++ b/Assets/Scripts/Units/Enemy.cs @@ -1,11 +1,51 @@ -using Reset.Core; +using System; +using Reset.Core; +using UnityEngine; namespace Reset.Units{ - public class Enemy : Unit, ILockOnTarget{ + public class Enemy : Unit, ILockOnTarget, IKillable { public float lockonTargetRadius{ get; set; } = 10f; + + public Animator testModelAnimator; + + public override void UnitStart(){ + base.UnitStart(); + ((IKillable)this).IKillableInitialize(); + } public void OnTargetDelete(){ GetComponent().SafelyDeleteTarget(); } + + public void TakeDamage(DamageSource[] sources){ + foreach (DamageSource source in sources) { + TakeDamage(source); + } + } + + public void TakeDamage(DamageSource source){ + try { + ((IKillable)this).currentHealth -= source.damageDealt; + + testModelAnimator.SetTrigger("Hit"); + + if (((IKillable)this).currentHealth <= 0) { + Kill(); + } + } catch (Exception e) { + Debug.LogError($"Failed TakeDamage on {this.name}: {e.Message}"); + } + } + + public void Kill(){ + throw new System.NotImplementedException(); + } + + void Update(){ + GetComponent().DrawHealthDebug(); + } + + public float maxHealth{ get; set; } + public float currentHealth{ get; set; } } } \ No newline at end of file diff --git a/Assets/Scripts/Units/IKillable.cs b/Assets/Scripts/Units/IKillable.cs index 3ad6c30..343be49 100644 --- a/Assets/Scripts/Units/IKillable.cs +++ b/Assets/Scripts/Units/IKillable.cs @@ -1,4 +1,6 @@ -using Reset.Core; +using Drawing; +using Reset.Core; +using UnityEngine; namespace Reset.Units{ public interface IKillable : IDamageable{ @@ -6,5 +8,29 @@ namespace Reset.Units{ public float maxHealth{ get; set; } public float currentHealth{ get; set; } + + void IKillableInitialize(){ + SetMaxHealth(); + } + + private void SetMaxHealth(){ + if (maxHealth == 0f) { + Debug.LogError($"Max health is not set for type of {((object)this)}. Setting to 10000."); + currentHealth = 10000f; + } else { + currentHealth = maxHealth; + } + } + + internal void DrawHealthDebug(){ + using (Draw.WithColor(Color.blue)) { + Draw.ingame.Label2D(((MonoBehaviour)this).transform.position + Vector3.up * 2.2f, ((IKillable)this).currentHealth.ToString(), + Color.blue); + } + } + + private void InternalUpdate(){ + Debug.Log("is this possible"); + } } } \ No newline at end of file diff --git a/Assets/Scripts/Units/Player.cs b/Assets/Scripts/Units/Player.cs index fcbda7f..02cb82e 100644 --- a/Assets/Scripts/Units/Player.cs +++ b/Assets/Scripts/Units/Player.cs @@ -21,53 +21,14 @@ public class Player : Unit, IKillable{ controls = GetComponent(); } - void Start(){ - if (((IKillable)this).maxHealth == 0f) { - Debug.LogError($"Max health is not set for type of {name}. Setting to 100."); - ((IKillable)this).currentHealth = 10000f; - } else { - ((IKillable)this).currentHealth = ((IKillable)this).maxHealth; - } - - - if (!NetworkManager.Singleton.IsConnectedClient && !NetworkManager.Singleton.IsHost) { - Attach(); - } else { - StartCoroutine(WaitForOnline()); - } + public override void UnitStart(){ + base.UnitStart(); + ((IKillable)this).IKillableInitialize(); } - - private IEnumerator WaitForOnline(){ - while (!NetworkManager.Singleton.didAwake) { - Debug.Log("waiting"); - yield return null; - } - - // Debug.Log($"{IsHost}, {IsClient}, {IsLocalPlayer}"); - if (IsLocalPlayer){ - GameManager.Player = gameObject; - Attach(); - } - } - - public void Attach(){ - if (GameManager.Player == gameObject){ - GameManager.RequestNewController(); - GetComponent().AttachCamera(gameObject); - } - } - - protected override void OnNetworkPostSpawn(){ - // GetComponent().AttachCamera(gameObject); - } - - + // Update is called once per frame void Update(){ - using (Draw.WithColor(Color.blue)) { - Draw.ingame.Label2D(transform.position + Vector3.up * 2.2f, ((IKillable)this).currentHealth.ToString(), - Color.blue); - } + GetComponent().DrawHealthDebug(); } public void TakeDamage(DamageSource[] sources){ diff --git a/Assets/Scripts/Units/Unit.cs b/Assets/Scripts/Units/Unit.cs index 4a60172..c9e6b0e 100644 --- a/Assets/Scripts/Units/Unit.cs +++ b/Assets/Scripts/Units/Unit.cs @@ -1,4 +1,50 @@ -using Unity.Netcode; +using System.Collections; +using Reset; +using Unity.Netcode; +using UnityEngine; public class Unit : NetworkBehaviour{ + public virtual void Start(){ + UnitStart(); + } + + public virtual void UnitStart(){ + OnlineStart(); + } + + protected void OnlineStart(){ + if (!NetworkManager.Singleton.IsConnectedClient && !NetworkManager.Singleton.IsHost) { + Attach(); + } else { + StartCoroutine(WaitForOnline()); + } + } + + private IEnumerator WaitForOnline(){ + while (!NetworkManager.Singleton.didAwake) { + Debug.Log("waiting"); + yield return null; + } + + // Debug.Log($"{IsHost}, {IsClient}, {IsLocalPlayer}"); + if (IsLocalPlayer){ + GameManager.Player = gameObject; + Attach(); + } + } + + public void Attach(){ + if (GameManager.Player == gameObject){ + GameManager.RequestNewController(); + GetComponent().AttachCamera(gameObject); + } + } + + void Update(){ + + } + + protected override void OnNetworkPostSpawn(){ + // GetComponent().AttachCamera(gameObject); + } } \ No newline at end of file