void UpdateState(Entity entity, LocomotionState locoData, LocomotionStateStack stack) { LocomotionState.State locoState = locoData.LocoState; if (locoData.StateEndType == LocomotionState.EndType.None) { return; } // Debug.Log("be end type : "+locoData.StateEndType+" locoData.EndTime:"+locoData.EndTime); if (locoData.StateEndType == LocomotionState.EndType.PlayAnimationOnce) { if (locoData.EndTime == 0) { //最少要播放动画一帧 locoData.EndTime = 1; EntityManager.SetComponentData <LocomotionState>(entity, locoData); return; } var hasLooks = EntityManager.HasComponent <LooksInfo>(entity); if (!hasLooks) { Debug.LogError("has no looks! uid : " + EntityManager.GetComponentData <UID>(entity).Value); return; } var looksInfo = EntityManager.GetComponentData <LooksInfo>(entity); if (looksInfo.CurState != LooksInfo.State.Loaded) { return; } var looksEntity = looksInfo.LooksEntity; Animator animator = EntityManager.GetComponentObject <Animator>(looksEntity); if (animator == null) { return; } // Debug.Log("animator.GetCurrentAnimatorStateInfo(0).normalizedTime : "+animator.GetCurrentAnimatorStateInfo(0).normalizedTime); if (animator.GetCurrentAnimatorStateInfo(0).normalizedTime >= 1.0f) { BackToLastState(entity, stack); } } else if (locoData.StateEndType == LocomotionState.EndType.EndTime) { // Debug.Log("locoData.EndTime >= TimeEx.ServerTime : "+(TimeEx.ServerTime >= locoData.EndTime)+" "+locoData.EndTime+" "+TimeEx.ServerTime); if (TimeEx.ServerTime >= locoData.EndTime) { BackToLastState(entity, stack); } } }
void BackToLastState(Entity entity, LocomotionStateStack stack) { if (stack.Stack.Count > 0) { var lastState = stack.Stack.Pop(); // Debug.Log("ret back state : "+lastState.LocoState+" type:"+lastState.StateEndType+" endTime:"+lastState.EndTime+" "+TimeEx.ServerTime+" "+(TimeEx.ServerTime >= lastState.EndTime)); EntityManager.SetComponentData <LocomotionState>(entity, lastState); } else { EntityManager.SetComponentData <LocomotionState>(entity, new LocomotionState { LocoState = LocomotionState.State.Idle }); } }
void BackToLastState(Entity entity, LocomotionStateStack stack) { var lastState = stack.Stack.Pop(); EntityManager.SetComponentData <LocomotionState>(entity, lastState); }