diff options
author | chai <chaifix@163.com> | 2021-07-09 20:41:17 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2021-07-09 20:41:17 +0800 |
commit | 54626116a6dd170e92e2ca68130a270de284cf87 (patch) | |
tree | 946a977d0c64de13213ecf38dffb929c93edf704 /Assets/Scripts | |
parent | 9ceee66bf53b1fed9cd522bd288c4a1734c5d96e (diff) |
*misc
Diffstat (limited to 'Assets/Scripts')
-rw-r--r-- | Assets/Scripts/Unit/Collider/ColliderData.cs | 41 |
1 files changed, 39 insertions, 2 deletions
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<ColliderFrame>();
}
- 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;
}
|