using Fie.Object; using Spine; using System; using System.Collections.Generic; using UnityEngine; namespace Fie.Ponies { public class FieStateMachinePoniesLanding : FieStateMachineGameCharacterBase { public enum LandingState { LANDING_START, LANDING } private const float LANDING_DELAY = 0.5f; private bool _isEnd; private bool _isFinished; private LandingState _landingState; private float _landingCount = 0.05f; public override void updateState(ref T gameCharacter) { if (gameCharacter is FiePonies) { FiePonies fiePonies = gameCharacter as FiePonies; Vector3 a = fiePonies.externalInputVector; a.y = (a.z = 0f); switch (_landingState) { case LandingState.LANDING_START: if (fiePonies.groundState == FieObjectGroundState.Grounding) { Vector3 externalInputVector = fiePonies.externalInputVector; fiePonies.addMoveForce(new Vector3(externalInputVector.x * (500f * fiePonies.externalInputForce), 0f, 0f), 0.5f); _landingCount = 0.5f; TrackEntry trackEntry = fiePonies.animationManager.SetAnimation(4, isLoop: false, isForceSet: true); if (trackEntry != null) { trackEntry.Event += delegate(Spine.AnimationState state, int trackIndex, Spine.Event e) { if (e.Data.Name == "finished") { _isFinished = true; } }; trackEntry.Complete += delegate { _isEnd = true; }; } _landingState = LandingState.LANDING; } break; case LandingState.LANDING: _landingCount -= Time.deltaTime; if (_landingCount <= 0f) { _isEnd = true; } a *= 0.5f; fiePonies.physicalForce.SetPhysicalForce(Vector3.zero, 0f); break; } } } public override void initialize(FieGameCharacter gameCharacter) { if (!(gameCharacter == null)) { gameCharacter.isEnableAutoFlip = true; } } public override void terminate(FieGameCharacter gameCharacter) { if (!(gameCharacter == null)) { gameCharacter.setGravityRate(1f); gameCharacter.isEnableGravity = true; gameCharacter.isEnableAutoFlip = true; } } public override bool isEnd() { return _isEnd; } public override Type getNextState() { return typeof(FieStateMachineCommonIdle); } public override List getAllowedStateList() { if (!_isFinished) { return new List(); } List list = new List(); list.Add(typeof(FieStateMachineAnyConsider)); return list; } } }