protected override void FinalizeState()
        {
            base.FinalizeState();

            var stateEntry         = StateStack.Peek();
            var originalStateEntry = originalBuilder.StateStack.Peek();

            Merge(from: stateEntry, into: originalStateEntry);
        }
示例#2
0
 //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);
            }
        }
示例#4
0
        public void DiscardCurrentObject()
        {
            var state = StateStack.Peek();

            if (state.Items?.Count > 0)
            {
                state.Items.RemoveAt(state.Items.Count - 1);
            }
            else
            {
                StateStack.Pop();
            }
        }
示例#5
0
        public void OnObjectEnd()
        {
            if (StateStack.Count <= 1)
            {
                return;
            }

            var state           = StateStack.Pop();
            var completedObject = MakeObject(state);

            var parentState = StateStack.Peek();

            parentState.Items.Add(completedObject);
        }
示例#6
0
 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);
     }
 }
示例#7
0
        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));
        }
示例#8
0
 /// <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;
示例#9
0
 public void PushState()
 {
     StateStack.Push(StateStack.Peek().DeepClone());
 }
示例#10
0
 public CurrentGraphicsState GetCurrentState()
 {
     return(StateStack.Peek());
 }
示例#11
0
 /// <summary>
 /// 处理敌人单位的鼠标点击
 /// </summary>
 /// <param name="unit"></param>
 /// <param name="eventData"></param>
 public void OnPointerDownEnemy(GameUnit.GameUnit unit, PointerEventData eventData)
 {
     StateStack.Peek().OnPointerDownEnemy(unit, eventData);
 }
示例#12
0
 /// <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();
            }
        }
示例#14
0
 public T Peek()
 {
     return(StateStack.Peek());
 }