From 5f9bce715954b5b6e2db1168f0a065cce23f5519 Mon Sep 17 00:00:00 2001 From: chai Date: Thu, 5 Aug 2021 17:32:37 +0800 Subject: *misc --- Assets/Scripts/Unit/AnimationData.cs | 85 ++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) (limited to 'Assets/Scripts/Unit/AnimationData.cs') diff --git a/Assets/Scripts/Unit/AnimationData.cs b/Assets/Scripts/Unit/AnimationData.cs index 74f5eee1..211e9acb 100644 --- a/Assets/Scripts/Unit/AnimationData.cs +++ b/Assets/Scripts/Unit/AnimationData.cs @@ -24,6 +24,8 @@ public class AnimationData : ScriptableObject // 对应的进度的播放速度,默认是1 public AnimationCurve curve; + public const int FPS = 30; + public AnimationData() { Keyframe frame0 = new Keyframe(0, 1); @@ -31,6 +33,87 @@ public class AnimationData : ScriptableObject curve = new AnimationCurve(frame0, frame1); } + public List GetColliderBoxesByType(ColliderBox.EColliderType type) + { + switch(type) + { + case ColliderBox.EColliderType.HurtBox: + return hurtBoxes; + case ColliderBox.EColliderType.HitBox: + return hitBoxes; + case ColliderBox.EColliderType.BlockBox: + return blockBoxes; + case ColliderBox.EColliderType.ThrowBox: + return throwBoxes; + case ColliderBox.EColliderType.DefendBox: + return defendBoxes; + } + return null; + } + + public ColliderInfo GetColliderInfo(ColliderBox.EColliderType type, int index, float playbackTime) + { + return GetColliderInfoByFrame(type, index, playbackTime * FPS); + } + + public ColliderInfo GetColliderInfoByFrame(ColliderBox.EColliderType type, int index, float frame) + { + ColliderInfo info = new ColliderInfo(); + var colliders = GetColliderBoxesByType(type); + if (colliders == null || colliders.Count <= index) + return info; //info.isValid == false + info = colliders[index].GetColliderInfo(frame); + return info; + } + + public ColliderInfo[] GetCollidersInfo(ColliderBox.EColliderType type, float playbackTime) + { + return GetCollidersInfoByFrame(type, playbackTime * FPS); + } + + public ColliderInfo[] GetCollidersInfoByFrame(ColliderBox.EColliderType type, float frame) + { + var colliders = GetColliderBoxesByType(type); + if (colliders == null || colliders.Count == 0) + return null; + ColliderInfo[] infos = new ColliderInfo[colliders.Count]; + for(int i = 0; i < colliders.Count; ++i) + { + infos[i] = colliders[i].GetColliderInfo(frame); + } + return infos; + } + + public ColliderInfo[] GetActiveCollidersInfo(ColliderBox.EColliderType type, float playbackTime) + { + return GetActiveCollidersInfoByFrame(type , playbackTime * FPS); + } + + public ColliderInfo[] GetActiveCollidersInfoByFrame(ColliderBox.EColliderType type, float frame) + { + var all = GetCollidersInfoByFrame(type, frame); + if (all == null || all.Length == 0) + return null; + int activeCount = 0; + foreach(var c in all) + { + if (c.active) + activeCount++; + } + if (activeCount == 0) + return null; + ColliderInfo[] active = new ColliderInfo[activeCount]; + int i = 0; + foreach(var c in all) + { + if(c.active) + { + active[i++] = c; + } + } + return active; + } + public int GetBoxesCount() { int hurt = hurtBoxes != null ? hurtBoxes.Count : 0; @@ -134,6 +217,8 @@ public class AnimationData : ScriptableObject } } + + #if UNITY_EDITOR public void OnSaveToDisk() { -- cgit v1.1-26-g67d0