public void Begin(ISkillHoster hoster, XHitData data, Vector3 dir, bool bAttackOnHitDown) { if (_attr != null) { _attr.Begin(hoster, data, dir, bAttackOnHitDown); } }
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); } }
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); }
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; }
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; }