diff options
author | chai <chaifix@163.com> | 2021-08-05 17:32:37 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2021-08-05 17:32:37 +0800 |
commit | 5f9bce715954b5b6e2db1168f0a065cce23f5519 (patch) | |
tree | c1956cb496731a1e5b396c9d878a333b442d7d80 /Assets/Scripts/Unit/AnimationData.cs | |
parent | ee5bab88ccb538782943979eaa3f3d3746a5e6b7 (diff) |
*misc
Diffstat (limited to 'Assets/Scripts/Unit/AnimationData.cs')
-rw-r--r-- | Assets/Scripts/Unit/AnimationData.cs | 85 |
1 files changed, 85 insertions, 0 deletions
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<ColliderData> 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()
{
|