Exemplo n.º 1
0
 public void Begin(ISkillHoster hoster, XHitData data, Vector3 dir, bool bAttackOnHitDown)
 {
     if (_attr != null)
     {
         _attr.Begin(hoster, data, dir, bAttackOnHitDown);
     }
 }
Exemplo n.º 2
0
 public void Begin(ISkillHoster hoster, XHitData data, Vector3 dir, bool bAttackOnHitDown)
 {
     if (_attr != null && _entity.CurState != XStateDefine.XState_Death)
     {
         _entity.OnHit(true);
         _attr.Begin(hoster, data, dir, bAttackOnHitDown);
     }
 }
Exemplo n.º 3
0
    public void Cancel()
    {
        elapsed = 0;
        rticalV = 0;
        gravity = 0;
        data    = null;
        hoster  = null;

        ator.speed = 1;
        DestroyFx();
        //ator.SetTrigger(AnimTriger.EndSkill);
        ator.SetTrigger(AnimTriger.ToStand);
    }
Exemplo n.º 4
0
    public void BuildAnimation(XHitData data)
    {
        string[] anims = null;
        switch (data.State)
        {
        case XBeHitState.Hit_Back:
            if (change_to_fly)
            {
                anims = present.HitFly != null && present.HitFly.Length > 0 ? present.HitFly : present.Hit_f;
            }
            else
            {
                switch (data.State_Animation)
                {
                case XBeHitState_Animation.Hit_Back_Front: anims = present.Hit_f; break;

                case XBeHitState_Animation.Hit_Back_Left: anims = present.Hit_l; break;

                case XBeHitState_Animation.Hit_Back_Right: anims = present.Hit_r; break;
                }
            }
            break;

        case XBeHitState.Hit_Roll:
            anims = change_to_fly ?
                    present.HitFly != null && present.HitFly.Length > 0 ? present.HitFly : present.Hit_f :
                    present.HitFly != null && present.HitFly.Length > 0 ? present.Hit_Roll : present.Hit_f;
            break;

        case XBeHitState.Hit_Fly:
            anims = present.HitFly != null && present.HitFly.Length > 0 ? present.HitFly : present.Hit_f;
            break;

        case XBeHitState.Hit_Freezed:
            if (data.FreezePresent)
            {
                string        freeze      = "Animation/" + present.AnimLocation + present.Freeze;
                AnimationClip freeze_clip = XResources.Load <AnimationClip>(freeze, AssetType.Anim);
                present_anim_time         = freeze_clip.length;
                controllder[Clip.Freezed] = freeze_clip;
            }
            return;
        }
        if (anims == null)
        {
            return;
        }
        int idx = 0;

        string        clipname = "Animation/" + present.AnimLocation + anims[idx++];
        AnimationClip clip     = XResources.Load <AnimationClip>(clipname, AssetType.Anim);

        present_anim_time = clip.length;
        controllder[Clip.PresentStraight] = clip;

        if ((change_to_fly || data.State == XBeHitState.Hit_Fly) && present.HitFly != null && present.HitFly.Length > 0)
        {
            clipname     = "Animation/" + present.AnimLocation + anims[idx++];
            clip         = XResources.Load <AnimationClip>(clipname, AssetType.Anim);
            landing_time = clip.length;
        }
        else
        {
            landing_time = 0;
        }

        clipname = "Animation/" + present.AnimLocation + anims[idx++];
        clip     = XResources.Load <AnimationClip>(clipname, AssetType.Anim);
        controllder[Clip.HardStraight] = clip;
        loop_hard          = (clip.wrapMode == WrapMode.Loop);
        hard_straight_time = clip.length;

        clipname   = "Animation/" + present.AnimLocation + anims[idx++];
        clip       = XResources.Load <AnimationClip>(clipname, AssetType.Anim);
        getup_time = clip.length;
        controllder[Clip.GetUp] = clip;
    }
Exemplo n.º 5
0
    public void Begin(ISkillHoster host, XHitData da, Vector3 d, bool bAttackOnHitDown)
    {
        if (da.State == XBeHitState.Hit_Free)
        {
            return;
        }
        hoster        = host;
        deltaH        = transform.position.y;
        data          = da;
        change_to_fly = (data.State == XBeHitState.Hit_Back || data.State == XBeHitState.Hit_Roll) && deltaH > 0.1f;

        DestroyFx();
        BuildAnimation(data);

        if (data.State == XBeHitState.Hit_Freezed)
        {
            time_total = data.FreezeDuration;
            present_animation_factor = 1;
        }
        else
        {
            float OffsetTimeScale_Offset  = 1;
            float OffsetTimeScale_Height  = 1;
            float OffsetTimeScale_Present = 1;
            float OffsetTimeScale_Hard    = 1;

            switch (data.State)
            {
            case XBeHitState.Hit_Back:
                if (change_to_fly)
                {
                    OffsetTimeScale_Offset  = present.HitFlyOffsetTimeScale[0] == 0 ? 1 : present.HitFlyOffsetTimeScale[0];
                    OffsetTimeScale_Height  = present.HitFlyOffsetTimeScale[1] == 0 ? 1 : present.HitFlyOffsetTimeScale[1];
                    OffsetTimeScale_Present = present.HitFlyOffsetTimeScale[2] == 0 ? 1 : present.HitFlyOffsetTimeScale[2];
                    OffsetTimeScale_Hard    = present.HitFlyOffsetTimeScale[3] == 0 ? 1 : present.HitFlyOffsetTimeScale[3];
                }
                else
                {
                    OffsetTimeScale_Offset  = present.HitBackOffsetTimeScale[0] == 0 ? 1 : present.HitBackOffsetTimeScale[0];
                    OffsetTimeScale_Present = present.HitBackOffsetTimeScale[1] == 0 ? 1 : present.HitBackOffsetTimeScale[1];
                    OffsetTimeScale_Hard    = present.HitBackOffsetTimeScale[2] == 0 ? 1 : present.HitBackOffsetTimeScale[2];
                }
                break;

            case XBeHitState.Hit_Fly:
                OffsetTimeScale_Offset  = present.HitFlyOffsetTimeScale[0] == 0 ? 1 : present.HitFlyOffsetTimeScale[0];
                OffsetTimeScale_Height  = present.HitFlyOffsetTimeScale[1] == 0 ? 1 : present.HitFlyOffsetTimeScale[1];
                OffsetTimeScale_Present = present.HitFlyOffsetTimeScale[2] == 0 ? 1 : present.HitFlyOffsetTimeScale[2];
                OffsetTimeScale_Hard    = present.HitFlyOffsetTimeScale[3] == 0 ? 1 : present.HitFlyOffsetTimeScale[3];
                break;

            case XBeHitState.Hit_Roll:
                if (change_to_fly)
                {
                    OffsetTimeScale_Offset  = present.HitFlyOffsetTimeScale[0] == 0 ? 1 : present.HitFlyOffsetTimeScale[0];
                    OffsetTimeScale_Height  = present.HitFlyOffsetTimeScale[1] == 0 ? 1 : present.HitFlyOffsetTimeScale[1];
                    OffsetTimeScale_Present = present.HitFlyOffsetTimeScale[2] == 0 ? 1 : present.HitFlyOffsetTimeScale[2];
                    OffsetTimeScale_Hard    = present.HitFlyOffsetTimeScale[3] == 0 ? 1 : present.HitFlyOffsetTimeScale[3];
                }
                else
                {
                    OffsetTimeScale_Offset  = present.HitRollOffsetTimeScale[0] == 0 ? 1 : present.HitRollOffsetTimeScale[0];
                    OffsetTimeScale_Present = present.HitRollOffsetTimeScale[1] == 0 ? 1 : present.HitRollOffsetTimeScale[1];
                    OffsetTimeScale_Hard    = present.HitRollOffsetTimeScale[2] == 0 ? 1 : present.HitRollOffsetTimeScale[2];
                }
                break;
            }

            present_straight = (change_to_fly ? data.Additional_Hit_Time_Present_Straight : data.Time_Present_Straight) * OffsetTimeScale_Present;
            hard_straight    = (change_to_fly ? data.Additional_Hit_Time_Hard_Straight : data.Time_Hard_Straight) * OffsetTimeScale_Hard;
            height           = (change_to_fly ? data.Additional_Hit_Height : data.Height) * OffsetTimeScale_Height;
            offset           = (change_to_fly ? data.Additional_Hit_Offset : data.Offset) * OffsetTimeScale_Offset;

            dir        = d;
            time_total = present_straight + landing_time + hard_straight + getup_time;
            bcurve     = data.CurveUsing;
            present_animation_factor = present_anim_time / present_straight;

            //need re-calculate between hurt and broken
            if (bcurve)
            {
                if (present.HitFly != null && present.HitCurves != null)
                {
                    IXCurve raw_h = ((change_to_fly || data.State == XBeHitState.Hit_Fly) && present.HitFly.Length > 0) ?
                                    XResources.Load <XCurve>("Curve/" + present.CurveLocation + present.HitCurves[4], AssetType.Prefab) : null;
                    IXCurve raw_v = ((change_to_fly || data.State == XBeHitState.Hit_Fly) && present.HitFly.Length > 0) ?
                                    XResources.Load <XCurve>("Curve/" + present.CurveLocation + present.HitCurves[3], AssetType.Prefab) :
                                    ((data.State == XBeHitState.Hit_Roll && present.Hit_Roll.Length > 0) ?
                                     XResources.Load <XCurve>("Curve/" + present.CurveLocation + present.HitCurves[5], AssetType.Prefab) :
                                     (data.State == XBeHitState.Hit_Back ? XResources.Load <XCurve>("Curve/" + present.CurveLocation + present.HitCurves[(int)data.State_Animation], AssetType.Prefab) :
                                      XResources.Load <XCurve>("Curve/" + present.CurveLocation + present.HitCurves[0], AssetType.Prefab)));

                    curve_h            = raw_h != null ? raw_h : null;
                    curve_v            = raw_v;
                    curve_height_scale = (raw_h == null || raw_h.GetMaxValue() == 0) ? 1 : height / raw_h.GetMaxValue();
                    curve_offset_scale = (raw_v == null || raw_v.GetMaxValue() == 0) ? 1 : offset / raw_v.GetMaxValue();
                }
            }
        }

        if (data.Fx != null)
        {
            PlayHitFx(transform, data.Fx, data.Fx_Follow);
        }
        ReadyToGo();
        ator.speed = trigger == null ? 0 : present_animation_factor;
    }