private XFSMLite.InStateFunc _GetHitboxFunc(XHitboxAnimation xHitboxData) { List <InState> setHitDatas = new List <InState>(); XFSMLite.InStateFunc setFrameFunc = null; float[] times = new float[xHitboxData.framedata.Length]; for (int i = 0; i < times.Length; i++) { times[i] = xHitboxData.framedata[i].time; } for (int i = 0; i < xHitboxData.framedata.Length; i++) { int m = i; InState inFrame = null; inFrame = new InState(() => { _SetColliders(xHitboxData, m); }); setHitDatas.Add(inFrame); } setFrameFunc = new XFSMLite.InStateFunc((target) => { mHitboxTime = (mHitboxTime + Time.deltaTime) % xHitboxData.clip.length; int frame = _GetNowFrame(mHitboxTime, times); if (frame == mLastFrame) { return; } else { setHitDatas[frame](); } mLastFrame = frame; }); return(setFrameFunc); }
private void _SetColliders(XHitboxAnimation data, int index) { for (int i = 0; i < mFeeders.Length; i++) { mFeeders[i].Disable(); } var colliders = data.framedata[index].collider; mCurHitBoxData = colliders; for (int i = 0; i < colliders.Length; i++) { var collider = colliders[i]; var rect = collider.rect; Vector2 size = new Vector2(rect.size.x / mPixelPerUnit, rect.size.y / mPixelPerUnit); Vector2 offset = new Vector2((rect.position.x + rect.size.x / 2) / mPixelPerUnit, (rect.position.y + rect.size.y / 2) / mPixelPerUnit); var remainTime = mAnimator.GetCurrentAnimatorClipInfo(0)[0].clip.length - mTriggerTime; if (collider.type == HitboxType.TRIGGER) { if (i > mPhyBoxCount) { return; } mFeeders[i].Feed(size, offset, collider.type, data.damage, data.strength, data.force, false, remainTime, mXFSMLite.CurState); mFeeders[i + mPhyBoxCount].Feed(size, offset, collider.type, data.damage, data.strength, data.force, true, remainTime, mXFSMLite.CurState); } else if (collider.type != HitboxType.TRIGGER) { int j = i > mPhyBoxCount * 2 - 1 ? i : i += mPhyBoxCount + 1; mFeeders[j].Feed(size, offset, collider.type, data.damage, data.strength, data.force, true, remainTime, mXFSMLite.CurState); } } }