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());
        }
Esempio n. 3
0
        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());
        }
Esempio n. 4
0
 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());
 }
Esempio n. 5
0
        /// <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());
 }
Esempio n. 7
0
        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);
        }
Esempio n. 8
0
 protected ParseState Backwards(MUDToken token, Player player)
 {
     if (token.TokenType == MUDTokenType.EraseLine)
     {
         return(Next(BackwardsErase));
     }
     return(new ParseState());
 }
Esempio n. 9
0
 protected ParseState Zerom(MUDToken token, Player player)
 {
     if (token.TokenType == MUDTokenType.Color && token.String == "\x1B[32m")
     {
         return(new StatParseState());
     }
     return(new ParseState());
 }
Esempio n. 10
0
 protected ParseState AfterStatusBack(MUDToken token, Player player)
 {
     if (token.TokenType == MUDTokenType.EraseLine)
     {
         return(Next(AfterStatusErase));
     }
     return(Backwards(token, player));
 }
Esempio n. 11
0
 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());
 }
Esempio n. 12
0
 protected ParseState AfterStatusErase(MUDToken token, Player player)
 {
     if (token.TokenType == MUDTokenType.Text)
     {
         return(Next(AfterStatusText));
     }
     return(BackwardsErase(token, player));
 }
Esempio n. 13
0
 protected ParseState AfterStatusText(MUDToken token, Player player)
 {
     if (token.TokenType == MUDTokenType.NewLine)
     {
         return(Next(AfterStatus));
     }
     return(new ParseState());
 }
Esempio n. 14
0
 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());
 }
Esempio n. 19
0
        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());
        }
Esempio n. 23
0
        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());
 }
Esempio n. 26
0
        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);
 }
Esempio n. 29
0
 public ExperienceParseState(MUDToken token, Player player)
 {
     line = token.String;
     Next(ExperienceState);
 }
 public bool Check(MUDToken token)
 {
     return(Tokens[0].Equals(token));
 }