summaryrefslogtreecommitdiff
path: root/Assets/Scripts/Avatar/Avatar.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/Scripts/Avatar/Avatar.cs')
-rw-r--r--Assets/Scripts/Avatar/Avatar.cs73
1 files changed, 22 insertions, 51 deletions
diff --git a/Assets/Scripts/Avatar/Avatar.cs b/Assets/Scripts/Avatar/Avatar.cs
index 928d2197..dc6c7858 100644
--- a/Assets/Scripts/Avatar/Avatar.cs
+++ b/Assets/Scripts/Avatar/Avatar.cs
@@ -13,8 +13,8 @@ public class Avatar : MonoBehaviour, IInteractable
// 一个角色包括一个身体的collider和若干hitbox和hurtbox
public PhysicsBody m_Body;
public PhysicsBox m_BodyCollider;
- public PhysicsBox[] m_Hitbox;
- public PhysicsBox[] m_Hurtbox;
+ public Hitbox[] m_Hitbox;
+ public Hurtbox[] m_Hurtbox;
protected AbilitySystem m_AbilitySystem = new AbilitySystem();
@@ -55,7 +55,7 @@ public class Avatar : MonoBehaviour, IInteractable
{
for (int i = 0; i < m_Hitbox.Length; ++i)
{
- if (PhysicsWorld.Instance.HasCollision(m_Hitbox[i]))
+ if (PhysicsWorld.Instance.HasCollision(m_Hitbox[i].Collider))
{
return true;
}
@@ -67,7 +67,7 @@ public class Avatar : MonoBehaviour, IInteractable
{
for (int i = 0; i < m_Hitbox.Length; ++i)
{
- if (PhysicsWorld.Instance.HasCollision(m_Hurtbox[i]))
+ if (PhysicsWorld.Instance.HasCollision(m_Hurtbox[i].Collider))
{
return true;
}
@@ -81,54 +81,9 @@ public class Avatar : MonoBehaviour, IInteractable
}
// 在物理模拟之后调用
- public void OnLateUpdate()
+ public void OnPhysicsUpdate()
{
- // hitbox
- for(int i = 0;i < m_Hitbox.Length; ++i)
- {
- PhysicsBox hitbox = m_Hitbox[i];
- if (hitbox == null || !hitbox.IsActive)
- continue;
- for(int j = 0;j < PhysicsWorld.Instance.Collisions.Count; ++j)
- {
- PhysicsCollisionInfo info = PhysicsWorld.Instance.Collisions[j];
- if(info.prim1 == hitbox)
- {
- m_AbilitySystem.OnHit(info);
- }
- else if(info.prim2 == hitbox)
- {
- PhysicsPrimitive temp = info.prim1;
- info.prim1 = info.prim2;
- info.prim2 = temp;
- m_AbilitySystem.OnHit(info);
- }
- }
- }
- // hurtbox
- for (int i = 0; i < m_Hurtbox.Length; ++i)
- {
- PhysicsBox hurtbox = m_Hurtbox[i];
- if (hurtbox == null || !hurtbox.IsActive)
- continue;
- for (int j = 0; j < PhysicsWorld.Instance.Collisions.Count; ++j)
- {
- PhysicsCollisionInfo info = PhysicsWorld.Instance.Collisions[j];
- if (info.prim1 == hurtbox)
- {
- m_AbilitySystem.OnHurt(info);
- }
- else if(info.prim2 == hurtbox)
- {
- PhysicsPrimitive temp = info.prim1;
- info.prim1 = info.prim2;
- info.prim2 = temp;
- m_AbilitySystem.OnHurt(info);
- }
- }
- }
-
- m_AbilitySystem.OnLateUpdate();
+ m_AbilitySystem.OnPhysicsUpdate();
}
public virtual Vector3 GetEffectPosition()
@@ -136,4 +91,20 @@ public class Avatar : MonoBehaviour, IInteractable
return Vector3.zero;
}
+ // 获得当前击打如果有的话
+ public Hit GetHit()
+ {
+ return m_AbilitySystem.GetHit();
+ }
+
+ public virtual void OnHit(HitInfo hitInfo)
+ {
+ Debug.Log("Hit");
+ }
+
+ public virtual void OnHurt(HurtInfo hurtInfo)
+ {
+ Debug.Log("Hurt");
+ }
+
}