/// <summary> /// For LoseHealth, GainHealth, GainTemp /// </summary> private static void Parse_Info_HealthChange(ConsoleKeyInfo keyInfo) { switch (keyInfo.Key) { case Confirm: // Evaluate Tokens if (Program.data.idList.Count > 0) { var tokens = ObjectParser.GetTokens(Program.outputData.Info_GetArgument()); if (tokens.HasValue) { var result = tokens.Value.Evaluate(); if (result.HasValue) { switch (Program.outputData.info_opMode) { case Info_OpMode.LoseHealth: Program.data.LoseHealth(Program.data.idList[Program.outputData.Info_GetSelected()], result.Value); break; case Info_OpMode.GainHealth: Program.data.GainHealth(Program.data.idList[Program.outputData.Info_GetSelected()], result.Value); break; case Info_OpMode.GainTemp: Program.data.GainTemporary(Program.data.idList[Program.outputData.Info_GetSelected()], result.Value); break; default: throw new ArgumentOutOfRangeException(nameof(Program.outputData.info_opMode)); } } } } break; case GainHealth: // Gain Health if (Program.data.idList.Count > 0) { if ((keyInfo.Modifiers & ConsoleModifiers.Alt) != 0) { Program.data.GainHealth(Program.data.idList[Program.outputData.Info_GetSelected()], AltAmount); } else if ((keyInfo.Modifiers & ConsoleModifiers.Control) != 0) { Program.data.GainHealth(Program.data.idList[Program.outputData.Info_GetSelected()], CtrlAmount); } else if ((keyInfo.Modifiers & ConsoleModifiers.Shift) != 0) { Program.data.GainHealth(Program.data.idList[Program.outputData.Info_GetSelected()], ShiftAmount); } else { Program.data.GainHealth(Program.data.idList[Program.outputData.Info_GetSelected()], DefAmount); } } break; case LoseHealth: // Lose Health if (Program.data.idList.Count > 0) { if ((keyInfo.Modifiers & ConsoleModifiers.Alt) != 0) { Program.data.LoseHealth(Program.data.idList[Program.outputData.Info_GetSelected()], AltAmount); } else if ((keyInfo.Modifiers & ConsoleModifiers.Control) != 0) { Program.data.LoseHealth(Program.data.idList[Program.outputData.Info_GetSelected()], CtrlAmount); } else if ((keyInfo.Modifiers & ConsoleModifiers.Shift) != 0) { Program.data.LoseHealth(Program.data.idList[Program.outputData.Info_GetSelected()], ShiftAmount); } else { Program.data.LoseHealth(Program.data.idList[Program.outputData.Info_GetSelected()], DefAmount); } } break; default: // Add Character to Argument ObjectParser.FormatExpressionChar(keyInfo.KeyChar, Program.outputData.Info_Argument_Add); break; } }
public void Info_UpdateArgumentInfo() { Actor actor; if (Program.data.idList.Count == 0) { actor = null; } else { actor = Program.data.GetActor(Program.data.idList[info_selected]); } if (actor == null) { info_argument_valid = false; info_argument_condition = Option <Condition> .Null; } else { switch (info_opMode) { case Info_OpMode.LoseHealth: case Info_OpMode.GainHealth: case Info_OpMode.GainTemp: var tokens = ObjectParser.GetTokens(info_argumentString); info_argument_valid = tokens.HasValue && tokens.Value.Validate(); info_argument_condition = Option <Condition> .Null; return; case Info_OpMode.Remove: if (info_argumentString.Length == 0) { // Remove Creature info_argument_valid = true; info_argument_condition = Option <Condition> .Null; } else { var condition = info_argumentString.GetCondition(); if (condition.HasValue) { // Conditon info_argument_valid = actor.conditions.Contains(condition.Value); info_argument_condition = condition.Value; } else { // Note (indexed by Number) var index = ObjectParser.GetInt10(info_argumentString); info_argument_valid = index.HasValue && actor.HasNote(index.Value); info_argument_condition = Option <Condition> .Null; } } return; case Info_OpMode.Condition: { var condition = info_argumentString.GetCondition(); info_argument_valid = condition.HasValue && !actor.conditions.Contains(condition.Value); info_argument_condition = condition; } return; case Info_OpMode.Note: // Parse Integer info_argument_valid = true; return; } } }