using System.Collections; using System.Collections.Generic; using UnityEngine; /// /// 角色,包括player和opponents /// public partial class Avatar : MonoBehaviour, IInteractable { public string Name; // 一个角色包括一个身体的collider和若干hitbox和hurtbox public PhysicsBody m_Body; public PhysicsBox m_BodyCollider; public Hitbox[] m_Hitbox; public Hurtbox[] m_Hurtbox; protected AbilitySystem m_AbilitySystem = new AbilitySystem(); public PhysicsBody Body { get { return m_Body; } } public PhysicsPrimitive[] GetAllPrimitive() { throw new System.NotImplementedException(); } protected void Init() { AvatarManager.Instance.AddAvatar(this); } public PhysicsBox GetHitbox() { throw new System.NotImplementedException(); } public PhysicsBox GetHurtbox() { throw new System.NotImplementedException(); } public PhysicsPrimitive[] GetAllHit() { throw new System.NotImplementedException(); } public bool IsHit() { for (int i = 0; i < m_Hitbox.Length; ++i) { if (PhysicsWorld.Instance.HasCollision(m_Hitbox[i].Collider)) { return true; } } return false; } public bool IsHurt() { for (int i = 0; i < m_Hitbox.Length; ++i) { if (PhysicsWorld.Instance.HasCollision(m_Hurtbox[i].Collider)) { return true; } } return false; } public void OnUpdate() { m_AbilitySystem.OnUpdate(); } // 在物理模拟之后调用 public void OnPhysicsUpdate() { m_AbilitySystem.OnPhysicsUpdate(); } public virtual Vector3 GetEffectPosition() { return Vector3.zero; } // 获得当前击打如果有的话 public Hit GetHit() { return m_AbilitySystem.GetHit(); } public virtual void OnHit(HitInfo hitInfo) { //Debug.Log("Hit"); m_AbilitySystem.OnHit(hitInfo); } public virtual void OnHurt(HurtInfo hurtInfo) { //Debug.Log("Hurt"); HitDefination hitDef = hurtInfo.hitDef; if (hitDef != null) ApplyHit(hitDef); m_AbilitySystem.OnHurt(hurtInfo); } }