From 0fdb81ffb2af8c39cfd611f485d46f3341206832 Mon Sep 17 00:00:00 2001 From: chai Date: Mon, 9 Nov 2020 16:03:45 +0800 Subject: * HitManager --- Assets/Scripts/Avatar/Abilities/AttackAbility.cs | 65 ++++++++++++------------ 1 file changed, 32 insertions(+), 33 deletions(-) (limited to 'Assets/Scripts/Avatar/Abilities/AttackAbility.cs') diff --git a/Assets/Scripts/Avatar/Abilities/AttackAbility.cs b/Assets/Scripts/Avatar/Abilities/AttackAbility.cs index 5a200cf8..6e7c503f 100644 --- a/Assets/Scripts/Avatar/Abilities/AttackAbility.cs +++ b/Assets/Scripts/Avatar/Abilities/AttackAbility.cs @@ -17,12 +17,12 @@ public class AttackAbility : AbilityBase private List m_Triggers = new List(); - private List m_LateTriggers = new List(); + private List m_PhysicsTriggers = new List(); /// - /// 这个招式产生的hit + /// 这个招式配置的hit /// - private List m_HitInfo = new List(); + private List m_Hits = new List(); /// /// 从动画结束开始计时 @@ -43,7 +43,7 @@ public class AttackAbility : AbilityBase { get { - return m_HitInfo != null ? m_HitInfo.Count : 0; + return m_Hits != null ? m_Hits.Count : 0; } } @@ -81,7 +81,7 @@ public class AttackAbility : AbilityBase m_Config.body.LocalVelocity = m_Config.velocity; } - foreach(var hit in m_HitInfo) + foreach(var hit in m_Hits) { hit.WipeRecords(); } @@ -97,30 +97,11 @@ public class AttackAbility : AbilityBase m_TimeCount = 0; } - public override void OnHit(PhysicsCollisionInfo info) + public override void OnHit(HitInfo info) { - Avatar avatar = info.prim2.GetComponentInParent(); - if (avatar == null) - return; - for (int i = 0; i < m_HitInfo.Count; ++i) - { - HitInfo hitInfo = m_HitInfo[i]; - if(!hitInfo.HasRecord(avatar)) - { - hitInfo.AddRecord(avatar); - Debug.Log("hit " + avatar.Name); - PhysicsBody body = avatar.Body; - body.SetLocalForce(new Vector3(-1000, 5000, 0)); - if(avatar is ArmorSoldierScript) - { - ArmorSoldierScript solider = avatar as ArmorSoldierScript; - solider.Hurt(); - } - } - } } - public override void OnHurt(PhysicsCollisionInfo info) + public override void OnHurt(HurtInfo info) { } @@ -143,9 +124,9 @@ public class AttackAbility : AbilityBase } // 在物理模拟之后 - public override void OnLateUpdate() + public override void OnPhysicsUpdate() { - foreach (var trigger in m_LateTriggers) + foreach (var trigger in m_PhysicsTriggers) { if (trigger.Update() && trigger.Swallow) break; @@ -159,18 +140,36 @@ public class AttackAbility : AbilityBase m_Triggers.Add(trigger); } - public void AddLateTrigger(Trigger trigger) + public void AddPhysicsTrigger(Trigger trigger) { - if (trigger == null || m_LateTriggers.Contains(trigger)) + if (trigger == null || m_PhysicsTriggers.Contains(trigger)) return; - m_LateTriggers.Add(trigger); + m_PhysicsTriggers.Add(trigger); } public void AddHitDefination(HitDefination defination) { - HitInfo info = new HitInfo(); + Hit info = new Hit(); info.defination = defination; - m_HitInfo.Add(info); + m_Hits.Add(info); + } + + // 获得当前时间点产生的hit + public Hit GetHit() + { + AnimatorStateInfo info = m_Config.animator.GetCurrentAnimatorStateInfo(0); + float normalizeTime = info.normalizedTime; + for (int i = 0; i< m_Hits.Count; ++i) + { + Hit hit = m_Hits[i]; + float start = hit.defination.start; + float end = hit.defination.end; + if(normalizeTime >= start && normalizeTime <= end) + { + return hit; + } + } + return null; } } -- cgit v1.1-26-g67d0