public FlexFSM(GameObject _owner) { states = new Dictionary <Enum, FlexState>(); isActive = false; currentState = null; previousToBlipState = null; Owner = _owner; }
private Enum GetIDFromState(FlexState state) { if (!states.ContainsValue(state)) { Debug.LogError("Can't get ID from state: StateID Not found"); return(null); } return(states.FirstOrDefault(x => x.Value == state).Key); }
private void ChangeState(FlexState state) { if (currentState != null) { currentState.OnExit(Owner); } currentState = state; currentState.OnEnter(Owner); }
public void ChangeState(Enum stateID) { if (currentState != null) { currentState.OnExit(Owner); } currentState = GetStateFromID(stateID); currentState.OnEnter(Owner); }
public void AddState(Enum stateID, FlexState state) { if (states.ContainsValue(state) || states.ContainsKey(stateID)) { Debug.LogError("Can't add state: state is already present"); return; } state.SetFSM(this); state.Configure(Owner); states.Add(stateID, state); }
public void PushBlipState(Enum stateID) { if (IsCurrentState(stateID)) { return; } currentState.OnExit(Owner); previousToBlipState = currentState; ChangeState(stateID); currentState.OnEnter(Owner); }
public void RevertBlipState() { if (previousToBlipState == null) { Debug.LogError("Attempting to revert a blip state that hasn't been defined"); return; } currentState.OnExit(Owner); ChangeState(previousToBlipState); previousToBlipState = null; currentState.OnEnter(Owner); }
private double GetContentAlignedCrossOffset(double extraCrossSpaceInExtent, int lineIndex, FlexState state) { double crossContentOffset = 0; if (extraCrossSpaceInExtent > 0) { switch (AlignContent) { case AlignContent.FlexStart: break; case AlignContent.FlexEnd: crossContentOffset = extraCrossSpaceInExtent; break; case AlignContent.Center: crossContentOffset = extraCrossSpaceInExtent / 2; break; case AlignContent.Stretch: crossContentOffset = lineIndex * extraCrossSpaceInExtent / (state.Lines.Count); break; case AlignContent.SpaceBetween: if (state.Lines.Count > 1) { crossContentOffset = lineIndex * (extraCrossSpaceInExtent / (state.Lines.Count - 1)); } break; case AlignContent.SpaceAround: crossContentOffset = (lineIndex * 2 + 1) * extraCrossSpaceInExtent / (state.Lines.Count * 2); break; } } return(crossContentOffset); }