protected override void FinalizeState() { base.FinalizeState(); var stateEntry = StateStack.Peek(); var originalStateEntry = originalBuilder.StateStack.Peek(); Merge(from: stateEntry, into: originalStateEntry); }
//TODO activate the current state when the stack is empty public void PopState() { if (StateStack.Count == 0) { throw new Exception("The state stack is empty. Cannot pop."); } StateStack.Peek().OnExit(); StateStack.Peek().gameObject.SetActive(false); StateStack.Pop(); }
protected override void FinalizeState() { base.FinalizeState(); var stateEntry = StateStack.Peek(); var originalStateEntry = originalBuilder.StateStack.Peek(); foreach (var item in stateEntry.Items) { originalStateEntry.Items.Add(item); } }
public void DiscardCurrentObject() { var state = StateStack.Peek(); if (state.Items?.Count > 0) { state.Items.RemoveAt(state.Items.Count - 1); } else { StateStack.Pop(); } }
public void OnObjectEnd() { if (StateStack.Count <= 1) { return; } var state = StateStack.Pop(); var completedObject = MakeObject(state); var parentState = StateStack.Peek(); parentState.Items.Add(completedObject); }
public void OnKeyValuePair(string name, KvValue value) { if (StateStack.Count > 0) { var state = StateStack.Peek(); state.Items.Add(new KvObject(name, value)); } else { var state = new KvPartialState { Key = name, Value = value }; StateStack.Push(state); } }
public KvObject GetObject() { if (StateStack.Count != 1) { throw new KeyValueException("Builder is not in a fully completed state."); } foreach (var associatedBuilder in _associatedBuilders) { associatedBuilder.FinalizeState(); } var state = StateStack.Peek(); return(MakeObject(state)); }
/// <summary> /// Returns our current BotState to see what the bot is doing right now /// </summary> /// <returns>current BotState</returns> public BotState GetCurrentState() => StateStack.Count > 0 ? StateStack.Peek() : BotState.None;
public void PushState() { StateStack.Push(StateStack.Peek().DeepClone()); }
public CurrentGraphicsState GetCurrentState() { return(StateStack.Peek()); }
/// <summary> /// 处理敌人单位的鼠标点击 /// </summary> /// <param name="unit"></param> /// <param name="eventData"></param> public void OnPointerDownEnemy(GameUnit.GameUnit unit, PointerEventData eventData) { StateStack.Peek().OnPointerDownEnemy(unit, eventData); }
/// <summary> /// 处理地图方块的鼠标点击 /// </summary> /// <param name="mapBlock"></param> /// <param name="eventData"></param> public void OnPointerDownBlock(BattleMapBlock mapBlock, PointerEventData eventData) { StateStack.Peek().OnPointerDownBlock(mapBlock, eventData); Debug.Log(BattleMap.BattleMap.Instance().GetCoordinate(mapBlock)); }
private void ScrollViewer_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e) { // Kill the rubberband effect (bounce back) if ((scrollViewer.VerticalOffset == 0 && scrollViewer.VerticalOffset < ScrollViewerPreviousOffset) || (scrollViewer.VerticalOffset == scrollViewer.ScrollableHeight && scrollViewer.VerticalOffset > ScrollViewerPreviousOffset)) { scrollViewer.CancelDirectManipulations(); } ScrollViewerPreviousOffset = scrollViewer.VerticalOffset; // Make it large again SheetFrame.Height = scrollViewer.VerticalOffset; //if (SheetFrame.Height != scrollViewer.ScrollableHeight) SheetFrame.Height = scrollViewer.ScrollableHeight; SLOWER, RESOURCE ARM VARIANT if (e.IsIntermediate) { return; } // Swipe up is s significant State change, so it should be Backbuttonable :D if (SharedState.SheetVisibility != Visibility.Full && SharedState.SheetVisibility != Visibility.Half && Math.Abs(scrollViewer.VerticalOffset - scrollViewer.ScrollableHeight) < 0.001) { // Add this to the Stack NavigateTo(VisibilityFull, null); } Debug.WriteLine("SCROLL:" + scrollViewer.VerticalOffset); Debug.WriteLine(scrollViewer.ScrollableHeight + " / " + MainPage.SheetHalfFactor + " = " + scrollViewer.ScrollableHeight / MainPage.SheetHalfFactor); // Swipe up is s significant State change, so it should be Backbuttonable :D if (Math.Abs(scrollViewer.VerticalOffset - scrollViewer.ScrollableHeight / MainPage.SheetHalfFactor) < 10) { // Add this to the Stack if (SharedState.SheetVisibility != Visibility.Half && SharedState.SheetVisibility != Visibility.Full) { NavigateTo(VisibilityHalf, null); } //SheetFrame.Height = scrollViewer.ScrollableHeight / MainPage.SheetHalfFactor; SLOWER, RESOURCE ARM VARIANT } // Swipe down, directly after a Swipe up should remove the Swipe up from the Stack (UP->DOWN, now Back is the same State) if ((SharedState == VisibilityFull || SharedState == VisibilityHalf) && scrollViewer.VerticalOffset <= MainPage.HiddenSheetPeekSize) { // Manipulate Stack State previousState = StateStack.Pop(); // The currently shown State State nextState = StateStack.Peek(); // Older State // Pop through dem States til we get the one we're searching for while (nextState == VisibilityFull || nextState == VisibilityHalf) { previousState = StateStack.Pop(); // Take the modal away nextState = StateStack.Peek(); // Take a look at the next one } SharedState = nextState; OnPropertyChanged("SharedState"); if (SharedState.HasSheetVisibility) { SetVisibility(SharedState.SheetVisibility); } // Check if we still can go back UpdateBackButtonVisibility(); } }
public T Peek() { return(StateStack.Peek()); }