protected ParseState Exits(MUDToken token, Player player) { if (token.TokenType == MUDTokenType.Text) { exits += token.String; if (!token.String.EndsWith(",")) { ParseRoomInfo(player); return(new ParseState()); } return(this); } else if (token.TokenType == MUDTokenType.NewLine) { exits += " "; return(this); } else if (token.TokenType == MUDTokenType.Color) { if (token.TokenType == MUDTokenType.Color && token.String == player.Palette.RoomPeopleColor) { return(Next(People)); } else if (token.TokenType == MUDTokenType.Color && token.String == player.Palette.RoomExitsColor) { return(Next(Exits)); } } return(new ParseState()); }
protected ParseState People(MUDToken token, Player player) { if (token.TokenType == MUDTokenType.Text) { people += token.String; if (token.String == ".") { return(new SequenceParseState( () => Next(Exits), () => new ParseState(), (t, p) => t.TokenType == MUDTokenType.NewLine, (t, p) => t.TokenType == MUDTokenType.Color && t.String == p.Palette.RoomPeopleClearColor, (t, p) => t.TokenType == MUDTokenType.Color && t.String == p.Palette.RoomExitsColor)); } return(this); } else if (token.TokenType == MUDTokenType.NewLine) { people += " "; return(this); } else if (token.TokenType == MUDTokenType.Color) { return(this); } return(new ParseState()); }
protected ParseState BackwardsErase(MUDToken token, Player player) { if (token.TokenType == MUDTokenType.Color && token.String == "\x1B[0;37m") { return(Next(White)); } else if (token.TokenType == MUDTokenType.Color && token.String == player.Palette.RoomNameColor) { return(new RoomParseState()); } else if (token.TokenType == MUDTokenType.Text && token.String == player.Model.DarkString) { RoomParseState.HandleDarkMovement(player); player.UpdateGameStatus(Commands.GameStatusUpdate.RoomParsed); return(new ParseState()); } else if (token.TokenType == MUDTokenType.Text && token.String.StartsWith(player.Model.InventoryString, StringComparison.InvariantCultureIgnoreCase)) { return(new InventoryParseState(token, player)); } else if (token.TokenType == MUDTokenType.Color && token.String == "\x1B[0m") { return(Next(Zerom)); } return(new ParseState()); }
protected ParseState AfterStatus(MUDToken token, Player player) { if (token.TokenType == MUDTokenType.Text && player.SentCommands.Contains(token.String)) { return(new SequenceParseState( () => { player.LastConfirmedCommand = token.String; return new ParseState(); }, () => new ParseState(), (t, p) => t.TokenType == MUDTokenType.NewLine)); } else if (token.TokenType == MUDTokenType.NewLine && player.SentCommands.Contains("")) { player.LastConfirmedCommand = ""; return(new ParseState()); } else if (token.TokenType == MUDTokenType.CursorBackward && token.Arguments[0] == 79) { return(Next(AfterStatusBack)); //return new SequenceParseState( // () => Next(AfterStatus), // () => new ParseState(), // (t, p) => t.TokenType == MUDTokenType.EraseLine, // (t, p) => t.TokenType == MUDTokenType.Text, // (t, p) => t.TokenType == MUDTokenType.NewLine); } return(new ParseState()); }
/// <summary> /// The initial state function which determines which path to follow. /// </summary> /// <param name="token"></param> /// <returns></returns> private ParseState InitialState(MUDToken token, Player player) { if (!player.IsInMajorMUD) { if (player.Model.MudEnterSequence.Check(token)) { return(player.Model.MudEnterSequence.GetSequence( () => { player.IsInMajorMUD = true; player.Interface.DebugText("Game Entered."); return new ParseState(); }, () => new ParseState())); } else { return(this); } } if (token.TokenType == MUDTokenType.Text && token.String.StartsWith(player.Model.ExitString)) { player.IsInMajorMUD = false; player.LastConfirmedCommand = null; player.Interface.DebugText("Game Exited."); return(new ParseState()); } if (token.String == "\x1B[0;37;40m") { return(Next(Reset)); } else if (token.TokenType == MUDTokenType.CursorBackward && token.Arguments[0] == 79) { return(Next(Backwards)); } return(this); }
protected ParseState Items(MUDToken token, Player player) { if (token.TokenType == MUDTokenType.Text) { items += token.String; return(this); } else if (token.TokenType == MUDTokenType.NewLine) { items += " "; return(this); } else if (token.TokenType == MUDTokenType.Color) { if (token.TokenType == MUDTokenType.Color && token.String == player.Palette.RoomPeopleColor) { return(Next(People)); } else if (token.TokenType == MUDTokenType.Color && token.String == player.Palette.RoomExitsColor) { return(Next(Exits)); } } return(new ParseState()); }
private void ProcessToken(MUDToken token) { if (token.TokenType == MUDTokenType.Text) { Run run = new Run(token.Content.ToString()); run.Foreground = new SolidColorBrush(CurrentColor.ForegroundColor); run.Background = new SolidColorBrush(CurrentColor.BackgroundColor); this.Interface.OutputConsole.AddRun(run); // parse the line now that new text has been added to it. LineParser.ParseLine(this.Interface.OutputConsole.LastParagraph(), this); } else if (token.TokenType == MUDTokenType.Color) { CurrentColor.Update(token); } else if (token.TokenType == MUDTokenType.NewLine) { this.Interface.OutputConsole.AddNewParagraph(); } else if (token.TokenType == MUDTokenType.EraseLine) { this.Interface.OutputConsole.ClearLastParagraph(); } else if (token.TokenType == MUDTokenType.CursorBackward) { // do nothing for now. Maybe forever. } CurrentParseState = CurrentParseState.Execute(token, this); }
protected ParseState Backwards(MUDToken token, Player player) { if (token.TokenType == MUDTokenType.EraseLine) { return(Next(BackwardsErase)); } return(new ParseState()); }
protected ParseState Zerom(MUDToken token, Player player) { if (token.TokenType == MUDTokenType.Color && token.String == "\x1B[32m") { return(new StatParseState()); } return(new ParseState()); }
protected ParseState AfterStatusBack(MUDToken token, Player player) { if (token.TokenType == MUDTokenType.EraseLine) { return(Next(AfterStatusErase)); } return(Backwards(token, player)); }
protected ParseState ResetGreen(MUDToken token, Player player) { if (token.TokenType == MUDTokenType.Text && token.String == player.Model.ExperienceStartString) { return(new ExperienceParseState(token, player)); } return(new ParseState()); }
protected ParseState AfterStatusErase(MUDToken token, Player player) { if (token.TokenType == MUDTokenType.Text) { return(Next(AfterStatusText)); } return(BackwardsErase(token, player)); }
protected ParseState AfterStatusText(MUDToken token, Player player) { if (token.TokenType == MUDTokenType.NewLine) { return(Next(AfterStatus)); } return(new ParseState()); }
protected ParseState Reset(MUDToken token, Player player) { if (token.TokenType == MUDTokenType.CursorBackward && token.Arguments[0] == 79) { return(Next(Backwards)); } if (token.TokenType == MUDTokenType.Color && token.String == "\x1B[0;32m") { return(Next(ResetGreen)); } return(new ParseState()); }
private ParseState CheckSequence(MUDToken token, Player player) { if (checks[index](token, player)) { index++; if (index == checks.Length) { return(success()); } return(this); } return(fail()); }
private ParseState CheckSequence(MUDToken token, Player player) { if (token.Equals(sequence.Tokens[index])) { index++; if (index == sequence.Tokens.Count) { return(success()); } return(this); } return(fail()); }
// Room Parsing // Enter Game: Back->Erase->Color->Text->Newline // Hit enter: Back->Erase->Color->Text->Newline // Look: Reset->Back->Erase->Color->Text->Newline // Move <dir>: Reset->Back->Erase->Color->Text->Newline // Look <dir>: Back->Erase->Color->Text->Newline #region State Processing protected ParseState InitialState(MUDToken token, Player player) { if (token.TokenType == MUDTokenType.Text) { roomName += token.Content.ToString(); return(this); } else if (token.TokenType == MUDTokenType.NewLine) { return(Next(AfterName)); } return(new ParseState()); }
protected ParseState WealthState(MUDToken token, Player player) { if (token.TokenType == MUDTokenType.Text) { return(new SequenceParseState( () => Next(EncumbranceState), () => new ParseState(), (t, p) => t.TokenType == MUDTokenType.Color, (t, p) => t.TokenType == MUDTokenType.Text, (t, p) => t.TokenType == MUDTokenType.NewLine, (t, p) => t.TokenType == MUDTokenType.Color)); } return(new ParseState()); }
protected ParseState White(MUDToken token, Player player) { if (token.TokenType == MUDTokenType.Text) { var match = player.StatlineRegex.Match(token.String); if (match.Success) { player.Interface.DebugText("Statline Parsed: " + match.Value); player.HitPoints = Int32.Parse(match.Groups["hp"].Value); player.MaxHitPoints = Int32.Parse(match.Groups["mhp"].Value); player.Power = Int32.Parse(match.Groups["mp"].Value); player.MaxPower = Int32.Parse(match.Groups["mmp"].Value); return(new SequenceParseState( () => Next(AfterStatus), () => new ParseState(), (t, p) => t.TokenType == MUDTokenType.Color && t.String == "\x1B[1m")); } match = player.Model.FollowRegex.Match(token.String); if (match.Success) { var direction = player.Model.IsDirectionCommand(match.Groups["dir"].Value); return(new SequenceParseState( () => new RoomParseState(direction), () => new ParseState(), (t, p) => t.TokenType == MUDTokenType.NewLine, (t, p) => t.TokenType == MUDTokenType.Color && t.String == "\x1B[0;37;40m", (t, p) => t.TokenType == MUDTokenType.CursorBackward && t.Arguments[0] == 79, (t, p) => t.TokenType == MUDTokenType.EraseLine, (t, p) => t.TokenType == MUDTokenType.Color && t.String == player.Palette.RoomNameColor)); } //match = player.Model.DragRegex.Match(token.String); //if( match.Success) //{ // return new SequenceParseState( // () => new RoomParseState(), // () => new ParseState(), // (t, p) => t.TokenType == MUDTokenType.NewLine, // (t, p) => t.TokenType == MUDTokenType.CursorBackward && t.Arguments[0] == 79, // (t, p) => t.TokenType == MUDTokenType.EraseLine, // (t, p) => t.TokenType == MUDTokenType.Color && t.String == player.Palette.RoomNameColor); //} } return(new ParseState()); }
protected ParseState AfterDescription(MUDToken token, Player player) { if (token.TokenType == MUDTokenType.Color && token.String == player.Palette.RoomItemsColor) { return(Next(Items)); } else if (token.TokenType == MUDTokenType.Color && token.String == player.Palette.RoomPeopleColor) { return(Next(People)); } else if (token.TokenType == MUDTokenType.Color && token.String == player.Palette.RoomExitsColor) { return(Next(Exits)); } return(new ParseState()); }
protected ParseState EncumbranceState(MUDToken token, Player player) { if (token.TokenType == MUDTokenType.Text) { weight += token.String; return(this); } else if (token.TokenType == MUDTokenType.Color) { return(this); } else if (token.TokenType == MUDTokenType.NewLine) { ParseInventory(player); } return(new ParseState()); }
protected ParseState KeyState(MUDToken token, Player player) { if (token.TokenType == MUDTokenType.NewLine) { return(this); } else if (token.TokenType == MUDTokenType.Text) { keys += " " + token.String; return(this); } else if (token.TokenType == MUDTokenType.Color && token.String == "\x1b[0;32m") { return(Next(WealthState)); } return(new ParseState()); }
protected ParseState ExperienceState(MUDToken token, Player player) { if (token.TokenType == MUDTokenType.Text) { line += token.String; return(this); } else if (token.TokenType == MUDTokenType.Color) { return(this); } else if (token.TokenType == MUDTokenType.NewLine) { ParseExperience(player); } return(new ParseState()); }
protected ParseState InventoryState(MUDToken token, Player player) { if (token.TokenType == MUDTokenType.NewLine) { return(this); } else if (token.TokenType == MUDTokenType.Text) { items += " " + token.String; return(this); } else if (token.TokenType == MUDTokenType.CursorBackward && token.Arguments[0] == 79) { return(new SequenceParseState( () => Next(KeyState), () => new ParseState(), (t, p) => t.TokenType == MUDTokenType.EraseLine, (t, p) => t.TokenType == MUDTokenType.Color && t.String == "\x1B[0;37;40m")); } return(new ParseState()); }
protected ParseState Description(MUDToken token, Player player) { if (token.TokenType == MUDTokenType.Text) { description += token.String; return(this); } else if (token.TokenType == MUDTokenType.NewLine) { description += " "; return(this); } else if (token.TokenType == MUDTokenType.CursorBackward && token.Arguments[0] == 79) { // bank info return(new SequenceParseState( () => Next(AfterDescription), () => new ParseState(), (t, p) => t.TokenType == MUDTokenType.EraseLine, (t, p) => t.TokenType == MUDTokenType.Color && t.String == p.Palette.RoomBankColor, (t, p) => t.TokenType == MUDTokenType.NewLine, (t, p) => t.TokenType == MUDTokenType.Text, (t, p) => t.TokenType == MUDTokenType.NewLine, (t, p) => t.TokenType == MUDTokenType.Text, (t, p) => t.TokenType == MUDTokenType.NewLine, (t, p) => t.TokenType == MUDTokenType.Text, (t, p) => t.TokenType == MUDTokenType.NewLine, (t, p) => t.TokenType == MUDTokenType.Text, (t, p) => t.TokenType == MUDTokenType.NewLine, (t, p) => t.TokenType == MUDTokenType.Text, (t, p) => t.TokenType == MUDTokenType.NewLine)); } else if (token.TokenType == MUDTokenType.Color) { return(AfterDescription(token, player)); } return(new ParseState()); }
protected ParseState StatState(MUDToken token, Player player) { if (token.TokenType == MUDTokenType.Color && token.String == "\x1B[0;37;40m") { ParseStats(player); return(new ParseState()); } else if (token.TokenType == MUDTokenType.NewLine) { stats += " "; return(this); } else if (token.TokenType == MUDTokenType.Text) { stats += token.String; return(this); } else if (token.TokenType == MUDTokenType.Color) { return(this); } return(new ParseState()); }
protected ParseState AfterName(MUDToken token, Player player) { if (token.TokenType == MUDTokenType.CursorBackward && token.Arguments[0] == 79) { return(new SequenceParseState( () => Next(Description), () => new ParseState(), (t, p) => t.TokenType == MUDTokenType.EraseLine, (t, p) => t.TokenType == MUDTokenType.Color && t.String == player.Palette.RoomDescriptionColor)); } else if (token.TokenType == MUDTokenType.Color && token.String == player.Palette.RoomItemsColor) { return(Next(Items)); } else if (token.TokenType == MUDTokenType.Color && token.String == player.Palette.RoomPeopleColor) { return(Next(People)); } else if (token.TokenType == MUDTokenType.Color && token.String == player.Palette.RoomExitsColor) { return(Next(Exits)); } return(new ParseState()); }
public InventoryParseState(MUDToken token, Player player) { items += token.String; Next(InventoryState); }
public ExperienceParseState(MUDToken token, Player player) { line = token.String; Next(ExperienceState); }
public bool Check(MUDToken token) { return(Tokens[0].Equals(token)); }