From 54626116a6dd170e92e2ca68130a270de284cf87 Mon Sep 17 00:00:00 2001 From: chai Date: Fri, 9 Jul 2021 20:41:17 +0800 Subject: *misc --- Assets/Scripts/Unit/Collider/ColliderData.cs | 41 ++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) (limited to 'Assets/Scripts/Unit') diff --git a/Assets/Scripts/Unit/Collider/ColliderData.cs b/Assets/Scripts/Unit/Collider/ColliderData.cs index b4ae17c5..0b79d04a 100644 --- a/Assets/Scripts/Unit/Collider/ColliderData.cs +++ b/Assets/Scripts/Unit/Collider/ColliderData.cs @@ -35,10 +35,47 @@ public class ColliderData this.frames = new List(); } - public ColliderInfo GetColliderInfo() + public ColliderInfo GetColliderInfo(float frame) { ColliderInfo info = new ColliderInfo(); - + info.active = false; // default + int previous = 0; + int end = -1; + for (int i = 0; i < frames.Count; ++i) + { + if(frame >= frames[i].frame) + { + previous = frames[i].frame; + } + if(frames[i].frame > frame) + { + end = frames[i].frame; + break; + } + } + if(end == -1) + { + if(type == ColliderBox.EColliderType.HurtBox) + { + ColliderFrame pre = frames.Find(s => s.frame == previous); + if (pre == null) + return info; + info.active = pre.active; + info.position = pre.position; + info.size = pre.size; + } + } + else + { + ColliderFrame pre = frames.Find(s => s.frame == previous); + ColliderFrame next = frames.Find(s => s.frame == end); + if (pre == null || next == null) + return info; + info.active = pre.active; + float t = (frame - previous) / (end - previous); + info.position = Vector3.Lerp(pre.position, next.position, t); + info.size = Vector3.Lerp(pre.size, next.size, t); + } return info; } -- cgit v1.1-26-g67d0