From 6eb915c129fc90c6f4c82ae097dd6ffad5239efc Mon Sep 17 00:00:00 2001 From: chai Date: Mon, 25 Jan 2021 14:28:30 +0800 Subject: +scripts --- .../Components/ActionStates/XFreezeComponent.cs | 229 +++++++++++++++++++++ 1 file changed, 229 insertions(+) create mode 100644 Client/Assets/Scripts/XMainClient/Components/ActionStates/XFreezeComponent.cs (limited to 'Client/Assets/Scripts/XMainClient/Components/ActionStates/XFreezeComponent.cs') diff --git a/Client/Assets/Scripts/XMainClient/Components/ActionStates/XFreezeComponent.cs b/Client/Assets/Scripts/XMainClient/Components/ActionStates/XFreezeComponent.cs new file mode 100644 index 00000000..3a04200b --- /dev/null +++ b/Client/Assets/Scripts/XMainClient/Components/ActionStates/XFreezeComponent.cs @@ -0,0 +1,229 @@ +using System; +using KKSG; +using UnityEngine; +using XUtliPoolLib; + +namespace XMainClient +{ + internal sealed class XFreezeComponent : XActionStateComponent + { + public override uint ID + { + get + { + return XFreezeComponent.uuID; + } + } + + public override bool IsUsingCurve + { + get + { + return false; + } + } + + public override string PresentCommand + { + get + { + return "ToFreezed"; + } + } + + public override string PresentName + { + get + { + return "Freezed"; + } + } + + public new static readonly uint uuID = XSingleton.singleton.XHash("Freezing_Presentation"); + + private float _freeze_time = 0f; + + private bool _present = false; + + private float _elapsed = 0f; + + private float _height_drop = 0f; + + private XFx _hit_fx = null; + + private XFx _hit_freeze_fx = null; + + public override void OnAttachToHost(XObject host) + { + base.OnAttachToHost(host); + this._selfState = XStateDefine.XState_Freeze; + this._freeze_time = 0f; + this._present = false; + this._elapsed = 0f; + bool isNotEmptyObject = this._entity.EngineObject.IsNotEmptyObject; + if (isNotEmptyObject) + { + this._entity.OverrideAnimClip("Freezed", this._entity.Present.PresentLib.Freeze, true, false); + } + } + + public override void OnDetachFromHost() + { + this.DestroyFx(ref this._hit_fx); + this.DestroyFx(ref this._hit_freeze_fx); + base.OnDetachFromHost(); + } + + public override string TriggerAnim(string pre) + { + bool flag = this._entity.Ator != null; + if (flag) + { + bool present = this._present; + if (present) + { + this._entity.Ator.speed = 1f; + this._entity.Ator.SetTrigger(this.PresentCommand); + pre = this.PresentCommand; + } + else + { + this._entity.Ator.speed = 0f; + } + } + return pre; + } + + protected override void Cancel(XStateDefine next) + { + bool flag = this._entity.Ator != null; + if (flag) + { + this._entity.Ator.speed = 1f; + } + this.DestroyFx(ref this._hit_fx); + this.DestroyFx(ref this._hit_freeze_fx); + this.TrytoTirggerQTE(true); + } + + protected override void EventSubscribe() + { + base.RegisterEvent(XEventDefine.XEvent_Freeze, new XComponent.XEventHandler(base.OnActionEvent)); + } + + protected override bool OnGetEvent(XFreezeEventArgs e, XStateDefine last) + { + this._freeze_time = ((e.HitData != null) ? e.HitData.FreezeDuration : e.Duration); + this._present = ((e.HitData != null) ? e.HitData.FreezePresent : e.Present); + bool flag = e.HitData != null; + if (flag) + { + bool flag2 = !string.IsNullOrEmpty(e.HitData.Fx); + if (flag2) + { + this.PlayHitFx(e.HitData.Fx, e.HitData.Fx_Follow, ref this._hit_fx); + } + bool flag3 = this._present && !string.IsNullOrEmpty(this._entity.Present.PresentLib.FreezeFx); + if (flag3) + { + this.PlayHitFx(this._entity.Present.PresentLib.FreezeFx, true, ref this._hit_freeze_fx); + } + } + XEndureEventArgs @event = XEventPool.GetEvent(); + @event.Firer = this._entity; + @event.Dir = e.Dir; + XSingleton.singleton.FireEvent(@event); + return true; + } + + protected override void Begin() + { + this._elapsed = 0f; + this._height_drop = this._entity.EngineObject.Position.y - ((this._entity.Fly != null) ? (XSingleton.singleton.TerrainY(this._entity.EngineObject.Position) + this._entity.Fly.CurrentHeight) : XSingleton.singleton.TerrainY(this._entity.EngineObject.Position)); + bool flag = this._height_drop < 0f; + if (flag) + { + this._height_drop = 0f; + } + this.TrytoTirggerQTE(false); + bool flag2 = !XSingleton.singleton.SyncMode && this._freeze_time <= 0f; + if (flag2) + { + base.Finish(); + } + } + + public override void OnRejected(XStateDefine current) + { + } + + protected override void ActionUpdate(float deltaTime) + { + bool flag = base.IsFinished || XSingleton.singleton.SyncMode; + if (!flag) + { + this._elapsed += deltaTime; + float num = deltaTime * (this._height_drop / this._freeze_time); + this._entity.ApplyMove(0f, -num, 0f); + bool flag2 = this._elapsed > this._freeze_time; + if (flag2) + { + base.Finish(); + } + bool flag3 = this._entity.Ator != null && !this._present; + if (flag3) + { + this._entity.Ator.speed = 0f; + } + } + } + + private void TrytoTirggerQTE(bool bEnd = false) + { + bool flag = !this._entity.Destroying && this._entity.QTE != null; + if (flag) + { + KKSG.XQTEState en = KKSG.XQTEState.QTE_None; + bool flag2 = !bEnd; + if (flag2) + { + en = KKSG.XQTEState.QTE_HitFreeze; + } + XSkillQTEEventArgs @event = XEventPool.GetEvent(); + @event.Firer = this._entity; + @event.On = !bEnd; + @event.State = (uint)XFastEnumIntEqualityComparer.ToInt(en); + XSingleton.singleton.FireEvent(@event); + } + } + + private void PlayHitFx(string fx, bool follow, ref XFx xfx) + { + bool flag = xfx != null && xfx.FxName != fx; + if (flag) + { + this.DestroyFx(ref xfx); + } + bool flag2 = XEntity.FilterFx(this._entity, XFxMgr.FilterFxDis1); + if (!flag2) + { + bool flag3 = xfx == null; + if (flag3) + { + xfx = XSingleton.singleton.CreateFx(fx, null, true); + } + xfx.Play(this._entity.EngineObject, Vector3.zero, ((this._entity.Radius > 0.5f) ? (this._entity.Radius * 2f) : 1f) * Vector3.one, 1f, follow, false, "", this._entity.Height * 0.5f); + } + } + + private void DestroyFx(ref XFx xfx) + { + bool flag = xfx != null; + if (flag) + { + XSingleton.singleton.DestroyFx(xfx, true); + xfx = null; + } + } + } +} -- cgit v1.1-26-g67d0