Beispiel #1
0
        public static bool IsReadyForDrop(LevelBuilder context)
        {
            PositionDoorAction readyPosition = null;

            foreach (var element in context.UndoStack.UndoElements.Reverse())
            {
                if (element is PositionDoorAction)
                {
                    readyPosition = element as PositionDoorAction;
                }
                else if (element is DropDoorAction)
                {
                    readyPosition = null;
                }
            }
            return(readyPosition != null);
        }
        private void SetupDropKeyInput()
        {
            BrokerToScene(ConsoleKey.W, () => { UndoStack.Do(new DropWallAction()
                {
                    Context = this
                }); });
            BrokerToScene(ConsoleKey.C, () => { UndoStack.Do(new DropAutoCeilingAction()
                {
                    Context = this
                }); });
            BrokerToScene(ConsoleKey.T, () => { UndoStack.Do(new DropTurretAction()
                {
                    Context = this
                }); });

            BrokerToScene(ConsoleKey.M, () => { UndoStack.Do(new DropMainCharacterAction()
                {
                    Context = this
                }); });

            BrokerToScene(ConsoleKey.Z, () => { UndoStack.Do(new DropZombieAction()
                {
                    Context = this
                }); });
            PushAppHandler(ConsoleKey.A, () => { UndoStack.Do(new DropAmmoAction()
                {
                    Context = this
                }); });
            PushAppHandler(ConsoleKey.P, () => { UndoStack.Do(new DropPortalAction()
                {
                    Context = this
                }); });
            BrokerToScene(ConsoleKey.D, () =>
            {
                if (PositionDoorAction.IsReadyForDrop(this) == false)
                {
                    UndoStack.Do(new PositionDoorAction(false)
                    {
                        Context = this
                    });
                }
                else
                {
                    UndoStack.Do(new DropDoorAction()
                    {
                        Context = this
                    });
                }
            });

            BrokerToScene(ConsoleKey.D, () =>
            {
                if (PositionDoorAction.IsReadyForDrop(this) == false)
                {
                    UndoStack.Do(new PositionDoorAction(true)
                    {
                        Context = this
                    });
                }
                else
                {
                    UndoStack.Do(new DropDoorAction()
                    {
                        Context = this
                    });
                }
            }, ConsoleModifiers.Shift);


            BrokerToScene(ConsoleKey.Delete, () => { UndoStack.Do(new DeleteAction()
                {
                    Context = this
                }); });

            BrokerToScene(ConsoleKey.U, () => { UndoStack.Undo(); });
            BrokerToScene(ConsoleKey.R, () => { UndoStack.Redo(); });

            PushAppHandler(ConsoleKey.T, () =>
            {
                Dialog.PickFromEnum <ConsoleColor>("Choose a background color".ToConsoleString())
                .Then((val) =>
                {
                    if (val.HasValue == false)
                    {
                        return;
                    }

                    this.WallPen = new ConsoleCharacter(this.WallPen.Value, this.WallPen.ForegroundColor, val.Value);
                }).Then((val) =>
                {
                    Dialog.ShowTextInput("Pick a character".ToConsoleString(), (result) =>
                    {
                        this.WallPen = new ConsoleCharacter(result.Length == 0 ? ' ' : result[0].Value, WallPen.ForegroundColor, WallPen.BackgroundColor);

                        Dialog.ShowTextInput("Pick HP".ToConsoleString(), (hpResult) =>
                        {
                            float hpVal;
                            if (float.TryParse(hpResult.ToString(), out hpVal) == false)
                            {
                                hpVal = 10;
                            }
                            this.WallPenHP = hpVal;
                        });
                    });
                });
            });
        }