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; }); }); }); }); }