private void ProcessState(StateTimeline state, bool onInterrupt = false, bool autoIncrement = false, bool autoLoop = false) { while (true) { int realFrame = onInterrupt ? state.totalFrames + 1 : Mathf.Clamp(CurrentStateFrame, 0, state.totalFrames); foreach (var d in state.data) { ProcessStateVariables(state, d, realFrame); } if (!state.useBaseState) { break; } state = (StateTimeline)state.baseState; } if (onInterrupt != false || !autoIncrement) { return; } IncrementFrame(1); if (autoLoop && CurrentStateFrame > state.totalFrames) { SetFrame(1); } }
private void ProcessStateVariables(StateTimeline timeline, IStateVariables d, int realFrame) { var valid = true; for (int j = 0; j < d.FrameRanges.Length; j++) { if (!(realFrame < d.FrameRanges[j].x) && !(realFrame > d.FrameRanges[j].y)) { continue; } valid = false; break; } if (!valid) { return; } var varType = d.GetType(); if (!conditionMapperBase.TryCondition(varType, fighterManager, d.Condition, timeline, realFrame)) { return; } functionMapperBase.functions[varType](fighterManager, d, timeline, realFrame); foreach (var t in d.Children) { ProcessStateVariables(timeline, t, realFrame); } }
public bool ChangeState(int state, int moveset = -1, int stateFrame = 0, bool callOnInterrupt = true) { markedForStateChange = false; if (callOnInterrupt && CurrentState != (int)FighterStateEnum.NULL) { StateTimeline currentStateTimeline = GetState(); SetFrame(currentStateTimeline.totalFrames + 1); ProcessState(currentStateTimeline, true); } CurrentStateFrame = stateFrame; CurrentStateMoveset = moveset == -1 ? CurrentStateMoveset : moveset; CurrentState = state; if (CurrentStateFrame == 0) { SetFrame(0); ProcessState(GetState()); SetFrame(1); } return(true); }