Beispiel #1
0
    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);
    }
Beispiel #2
0
    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);
            }
        }
    }