예제 #1
0
        // Returns the text formatted without any format codes in.
        public static LetterString FormatString(string text)
        {
            int          currentCharacter = 0;
            Color        currentColor     = Letter.DefaultColor;
            LetterString letterString     = new LetterString();

            bool   inCode      = false;
            string currentCode = "";

            while (currentCharacter < text.Length)
            {
                if (!inCode && text[currentCharacter] == '<')
                {
                    // Start string code
                    inCode = true;
                }
                else if (inCode)
                {
                    if (text[currentCharacter] == '>')
                    {
                        // End string code
                        FormatCodeType codeType = FormatCodes.GetFormatCodeType(currentCode);
                        if (codeType == FormatCodeType.String || codeType == FormatCodeType.Variable)
                        {
                            string stringCode = FormatCodes.GetFormatCodeString(currentCode);
                            letterString.AddRange(stringCode, currentColor);
                        }
                        else if (codeType == FormatCodeType.Color)
                        {
                            Color colorCode = FormatCodes.GetFormatCodeColor(currentCode);
                            if (colorCode == currentColor)
                            {
                                currentColor = Letter.DefaultColor;
                            }
                            else
                            {
                                currentColor = colorCode;
                            }
                        }
                        else
                        {
                            // Invalid code
                        }
                        inCode      = false;
                        currentCode = "";
                    }
                    else
                    {
                        currentCode += text[currentCharacter];
                    }
                }
                else
                {
                    letterString.Add(new Letter(text[currentCharacter], currentColor));
                }
                currentCharacter++;
            }

            return(letterString);
        }
예제 #2
0
        // Returns a substring of the letter string.
        public LetterString Substring(int startIndex, int length)
        {
            LetterString letterString = new LetterString();

            for (int i = 0; i < length; i++)
            {
                letterString.letters.Add(letters[startIndex + i]);
            }
            return(letterString);
        }
예제 #3
0
        // Returns a substring of the letter string.
        public LetterString Substring(int startIndex)
        {
            LetterString letterString = new LetterString();

            for (int i = startIndex; i < letters.Count; i++)
            {
                letterString.letters.Add(letters[i]);
            }
            return(letterString);
        }
예제 #4
0
 //-----------------------------------------------------------------------------
 // Constructors
 //-----------------------------------------------------------------------------
 public InventoryMenu(GameManager gameManager)
     : base(gameManager)
 {
     this.previousMenu	= null;
     this.nextMenu		= null;
     this.drawHUD		= true;
     this.description	= new LetterString();
     this.textPosition	= 0;
     this.textTimer		= 0;
     this.textStart		= 0;
     this.inSubMenu		= false;
 }
예제 #5
0
 // Returns true if the letter string ends with the specified letter string.
 public bool EndsWith(LetterString letterString)
 {
     if (letters.Count >= letterString.letters.Count)
     {
         for (int i = 0; i < letterString.letters.Count; i++)
         {
             if (letters[letters.Count - letterString.letters.Count + i] != letterString.letters[i])
             {
                 return(false);
             }
         }
         return(true);
     }
     return(false);
 }
예제 #6
0
        // Returns the text formatted without any format codes in.
        public static LetterString FormatString(string text)
        {
            int currentCharacter = 0;
            Color currentColor = Letter.DefaultColor;
            LetterString letterString = new LetterString();

            bool inCode = false;
            string currentCode = "";

            while (currentCharacter < text.Length) {
                if (!inCode && text[currentCharacter] == '<') {
                    // Start string code
                    inCode = true;
                }
                else if (inCode) {
                    if (text[currentCharacter] == '>') {
                        // End string code
                        FormatCodeType codeType = FormatCodes.GetFormatCodeType(currentCode);
                        if (codeType == FormatCodeType.String || codeType == FormatCodeType.Variable) {
                            string stringCode = FormatCodes.GetFormatCodeString(currentCode);
                            letterString.AddRange(stringCode, currentColor);
                        }
                        else if (codeType == FormatCodeType.Color) {
                            Color colorCode = FormatCodes.GetFormatCodeColor(currentCode);
                            if (colorCode == currentColor)
                                currentColor = Letter.DefaultColor;
                            else
                                currentColor = colorCode;
                        }
                        else {
                            // Invalid code
                        }
                        inCode = false;
                        currentCode = "";
                    }
                    else {
                        currentCode += text[currentCharacter];
                    }
                }
                else {
                    letterString.Add(new Letter(text[currentCharacter], currentColor));
                }
                currentCharacter++;
            }

            return letterString;
        }
예제 #7
0
 // Returns true if the specified letter string is equal to the letter string.
 public override bool Equals(object obj)
 {
     if (obj is LetterString)
     {
         LetterString ls = (LetterString)obj;
         if (letters.Count == ls.letters.Count)
         {
             for (int i = 0; i < letters.Count; i++)
             {
                 if (letters[i] != ls.letters[i])
                 {
                     return(false);
                 }
             }
             return(true);
         }
     }
     return(false);
 }
예제 #8
0
 // Returns a substring of the letter string.
 public LetterString Substring(int startIndex)
 {
     LetterString letterString = new LetterString();
     for (int i = startIndex; i < letters.Count; i++) {
         letterString.letters.Add(letters[i]);
     }
     return letterString;
 }
예제 #9
0
 // Returns true if the letter string starts with the specified letter string.
 public bool StartsWith(LetterString letterString)
 {
     if (letters.Count >= letterString.letters.Count) {
         for (int i = 0; i < letterString.letters.Count; i++) {
             if (letters[i] != letterString.letters[i])
                 return false;
         }
         return true;
     }
     return false;
 }
예제 #10
0
 // Inserts a letter string into the letter string.
 public void InsertRange(int index, LetterString letterString)
 {
     letters.InsertRange(index, letterString.letters);
 }
예제 #11
0
 // Adds a letter string to the letter string.
 public void AddRange(LetterString letterString)
 {
     letters.AddRange(letterString.letters);
 }
예제 #12
0
 // Constructs a copy of the letter string.
 public LetterString(LetterString letterString)
 {
     this.letters = new List<Letter>();
     this.letters.AddRange(letterString.letters);
 }
예제 #13
0
        //-----------------------------------------------------------------------------
        // Description
        //-----------------------------------------------------------------------------
        public void ResetDescription()
        {
            ISlotItem item = currentSlotGroup.CurrentSlot.SlotItem;
            description = FormatCodes.FormatString(item != null ? item.Name : "");
            textPosition = 0;
            textTimer = 0;
            textStart = 0;
            if (!description.IsEmpty) {
                if (description.Length % 2 == 1)
                    description.Add(' ');

                if (description.Length == 16) {
                    description.Add(' ');
                    textStart = 0;
                }
                else {
                    for (int i = (8 - description.Length / 2); i > 0; i--)
                        description.Add(' ');
                    textStart = (16 - description.Length) * 8;
                }

                description.AddRange(FormatCodes.FormatString(item.Description));
            }
        }
예제 #14
0
 // Constructs a copy of the letter string.
 public LetterString(LetterString letterString)
 {
     this.letters = new List <Letter>();
     this.letters.AddRange(letterString.letters);
 }
예제 #15
0
 // Returns a substring of the letter string.
 public LetterString Substring(int startIndex, int length)
 {
     LetterString letterString = new LetterString();
     for (int i = 0; i < length; i++) {
         letterString.letters.Add(letters[startIndex + i]);
     }
     return letterString;
 }
예제 #16
0
 // Adds a letter string to the letter string.
 public void AddRange(LetterString letterString)
 {
     letters.AddRange(letterString.letters);
 }
예제 #17
0
 // Inserts a letter string into the letter string.
 public void InsertRange(int index, LetterString letterString)
 {
     letters.InsertRange(index, letterString.letters);
 }
예제 #18
0
 // Draws a formatted game string at the specified position
 public void DrawLetterString(GameFont font, LetterString letterString, Point2I position, Color color, float depth = 0.0f)
 {
     for (int i = 0; i < letterString.Length; i++) {
     spriteBatch.Draw(
         font.SpriteSheet.Image,
         NewRect(new Rectangle2I(
             position.X + i * (font.SpriteSheet.CellSize.X + font.CharacterSpacing),
             position.Y,
             font.SpriteSheet.CellSize.X,
             font.SpriteSheet.CellSize.Y
         )),
         (Rectangle)new Rectangle2I(
             font.SpriteSheet.Offset.X + ((int)letterString[i].Char % font.CharactersPerRow) * (font.SpriteSheet.CellSize.X + font.SpriteSheet.Spacing.X),
             font.SpriteSheet.Offset.Y + ((int)letterString[i].Char / font.CharactersPerRow) * (font.SpriteSheet.CellSize.Y + font.SpriteSheet.Spacing.Y),
             font.SpriteSheet.CellSize.X,
             font.SpriteSheet.CellSize.Y
         ),
         (letterString[i].Color == Letter.DefaultColor ? color : letterString[i].Color), 0.0f, Vector2.Zero, SpriteEffects.None, depth
     );
     }
 }
예제 #19
0
        //-----------------------------------------------------------------------------
        // Strings
        //-----------------------------------------------------------------------------
        // Returns the wrapped and formatted string of the text.
        public WrappedLetterString WrapString(string text, int width)
        {
            List<LetterString> lines = new List<LetterString>();
            List<int> lineLengths = new List<int>();
            int currentLine = 0;
            int currentCharacter = 0;

            LetterString word = new LetterString();
            int wordStart = 0;
            int wordLength = 0;
            int wordLineCount = 0;
            bool firstChar = true;

            LetterString letterString = FormatCodes.FormatString(text);

            while (currentCharacter < letterString.Length) {
                lines.Add(new LetterString());
                lineLengths.Add(0);

                // Remove starting spaces in the line.
                while (letterString[currentCharacter].Char == ' ') {
                    currentCharacter++;
                }

                wordStart = currentCharacter;
                word.Clear();
                wordLength = 0;
                wordLineCount = 0;
                firstChar = true;

                do {
                    if (currentCharacter >= letterString.Length || letterString[currentCharacter].Char == ' ' ||
                        letterString[currentCharacter].Char == FormatCodes.ParagraphCharacter || letterString[currentCharacter].Char == '\n')
                    {
                        if (wordLineCount > 0)
                            lines[currentLine].Add(' ');
                        lines[currentLine].AddRange(word);
                        lineLengths[currentLine] += (wordLineCount > 0 ? (characterSpacing + spriteSheet.CellSize.X) : 0) + wordLength;

                        wordLineCount++;
                        wordLength = 0;
                        wordStart = currentCharacter + 1;
                        word.Clear();
                        if (currentCharacter < letterString.Length &&
                            (letterString[currentCharacter].Char == FormatCodes.ParagraphCharacter || letterString[currentCharacter].Char == '\n'))
                        {
                            if (letterString[currentCharacter].Char == FormatCodes.ParagraphCharacter)
                                lines[currentLine].Add(letterString[currentCharacter]);
                            currentCharacter++;
                            break;
                        }
                    }
                    else {
                        word.Add(letterString[currentCharacter]);
                        wordLength += (firstChar ? 0 : characterSpacing) + spriteSheet.CellSize.X;
                        firstChar = false;
                    }
                    currentCharacter++;
                } while (lineLengths[currentLine] + wordLength + characterSpacing + spriteSheet.CellSize.X <= width);

                currentCharacter = wordStart;
                currentLine++;
            }

            WrappedLetterString wrappedString = new WrappedLetterString();
            wrappedString.Lines = lines.ToArray();
            wrappedString.LineLengths = lineLengths.ToArray();
            wrappedString.Bounds = new Rectangle2I(width, (lines.Count - 1) * lineSpacing + spriteSheet.CellSize.Y);
            return wrappedString;
        }