TextEditor2.Message.ControlTagsToCodes C# (CSharp) Method

ControlTagsToCodes() public method

public ControlTagsToCodes ( ) : void
return void
        public void ControlTagsToCodes()
        {
            ProofReadTagstoCodes();

            for (int i = 0; i < charData.Count; i++)
            {
                if (charData[i] != '<')
                {
                    continue;
                }

                if (charData[i] == '>')
                {
                    //Error correction box call will go here
                }

                List<byte> tagBuffer = new List<byte>();

                uint tagSize = 1;

                while (charData[(int)(i + tagSize)] != '>')
                {
                    tagBuffer.Add(charData[(int)(i + tagSize)]);

                    tagSize += 1;
                }

                //tagSize at this point only covers the text within the angled brackets.
                //This figures the brackets into the size
                tagSize += 1;

                string tempTag = new string(Encoding.ASCII.GetChars(tagBuffer.ToArray()));

                string[] tagArgs = tempTag.Split(':');

                tagArgs[0] = tagArgs[0].ToLower();

                if (tagArgs.Length > 1)
                {
                    tagArgs[1] = tagArgs[1].ToLower();
                }

                List<byte> code = new List<byte>();

                switch (tagArgs[0])
                {
                    #region Five-Byte Codes
                    case "player":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.PlayerName, 0);
                        break;

                    case "draw":
                        if (tagArgs.Length > 1)
                        {
                            if (tagArgs[1] == "instant")
                            {
                                code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.CharDrawInstant, 0);
                            }

                            if (tagArgs[1] == "bychar")
                            {
                                code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.CharDrawByChar, 0);
                            }

                            else
                            {
                                //Error handler
                            }
                        }
                        break;

                    case "two choices":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.TwoChoices, 0);
                        break;

                    case "three choices":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.ThreeChoices, 0);
                        break;

                    case "a button":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.AButtonIcon, 0);
                        break;

                    case "b button":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.BButtonIcon, 0);
                        break;

                    case "c-stick":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.CStickIcon, 0);
                        break;

                    case "l trigger":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.LTriggerIcon, 0);
                        break;

                    case "r trigger":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.RTriggerIcon, 0);
                        break;

                    case "x button":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.XButtonIcon, 0);
                        break;

                    case "y button":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.YButtonIcon, 0);
                        break;

                    case "z button":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.ZButtonIcon, 0);
                        break;

                    case "d pad":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.DPadIcon, 0);
                        break;

                    case "control stick":
                        if (tagArgs.Length == 1)
                        {
                            code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.StaticControlStickIcon, 0);
                        }

                        else
                        {
                            switch (tagArgs[1])
                            {
                                #region Direction Switch
                                case "up":
                                    code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.ControlStickMovingUp, 0);
                                break;

                                case "down":
                                code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.ControlStickMovingDown, 0);
                                break;

                                case "left":
                                code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.ControlStickMovingLeft, 0);
                                break;

                                case "right":
                                code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.ControlStickMovingRight, 0);
                                break;

                                case "up+down":
                                code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.ControlStickMovingUpAndDown, 0);
                                break;

                                case "left+right":
                                code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.ControlStickMovingLeftAndRight, 0);
                                break;

                                default:
                                    //Error handling
                                break;
                                #endregion
                            }
                        }
                        break;

                    case "left arrow":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.LeftArrowIcon, 0);
                        break;

                    case "right arrow":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.RightArrowIcon, 0);
                        break;

                    case "up arrow":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.UpArrowIcon, 0);
                        break;

                    case "down arrow":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.DownArrowIcon, 0);
                        break;

                    case "choice one":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.ChoiceOne, 0);
                        break;

                    case "choice two":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.ChoiceTwo, 0);
                        break;

                    case "canon game balls":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.CanonGameBalls, 0);
                        break;

                    case "broken vase payment":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.BrokenVasePayment, 0);
                        break;

                    case "auction attendee":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.AuctionCharacter, 0);
                        break;

                    case "auction item name":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.AuctionItemName, 0);
                        break;

                    case "auction attendee bid":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.AuctionPersonBid, 0);
                        break;

                    case "auction starting bid":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.AuctionStartingBid, 0);
                        break;

                    case "player auction bid selector":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.PlayerAuctionBidSelector, 0);
                        break;

                    case "starburst a button":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.StarburstAIcon, 0);
                        break;

                    case "orca blow count":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.OrcaBlowCount, 0);
                        break;

                    case "pirate ship password":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.PirateShipPassword, 0);
                        break;

                    case "target starburst":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.TargetStarburstIcon, 0);
                        break;

                    case "player letter count":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.PostOfficeGamePlayerLetterCount, 0);
                        break;

                    case "letter rupee reward":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.PostOfficeGameRupeeReward, 0);
                        break;

                    case "letters":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.PostBoxLetterCount, 0);
                        break;

                    case "remaining koroks":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.RemainingKoroks, 0);
                        break;

                    case "remaining forest water time":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.RemainingForestWaterTime, 0);
                        break;

                    case "flight control game time":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.FlightPlatformGameTime, 0);
                        break;

                    case "flight control game record":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.FlightPlatformGameRecord, 0);
                        break;

                    case "beedle points":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.BeedlePointCount, 0);
                        break;

                    case "joy pendant count (ms. marie)":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.JoyPendantCountMsMarie, 0);
                        break;

                    case "pendant total":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.MsMariePendantTotal, 0);
                        break;

                    case "pig game time":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.PigGameTime, 0);
                        break;

                    case "sailing game rupee reward":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.SailingGameRupeeReward, 0);
                        break;

                    case "current bomb capacity":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.CurrentBombCapacity, 0);
                        break;

                    case "current arrow capacity":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.CurrentArrowCapacity, 0);
                        break;

                    case "heart icon":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.HeartIcon, 0);
                        break;

                    case "music note icon":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.MusicNoteIcon, 0);
                        break;

                    case "target letter count":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.TargetLetterCount, 0);
                        break;

                    case "fishman hit count":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.FishmanHitCount, 0);
                        break;

                    case "fishman rupee reward":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.FishmanRupeeReward, 0);
                        break;

                    case "boko baba seed count":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.BokoBabaSeedCount, 0);
                        break;

                    case "skull necklace count":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.SkullNecklaceCount, 0);
                        break;

                    case "chu jelly count":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.ChuJellyCount, 0);
                        break;

                    case "joy pendant count (beedle)":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.JoyPendantCountBeedle, 0);
                        break;

                    case "golden feather count":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.GoldenFeatherCount, 0);
                        break;

                    case "knight's crest count":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.KnightsCrestCount, 0);
                        break;

                    case "beedle price offer":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.BeedlePriceOffer, 0);
                        break;

                    case "boko baba seed sell selector":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.BokoBabaSeedSellSelector, 0);
                        break;

                    case "skull necklace sell selector":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.SkullNecklaceSellSelector, 0);
                        break;

                    case "chu jelly sell selector":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.ChuJellySellSelector, 0);
                        break;

                    case "joy pendant sell selector":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.JoyPendantSellSelector, 0);
                        break;

                    case "golden feather sell selector":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.GoldenFeatherSellSelector, 0);
                        break;

                    case "knight's crest sell selector":
                        code = ConvertTagToFiveByteControlCode(i, 0, (byte)FiveByteTypes.KnightsCrestSellSelector, 0);
                        break;

                    case "sound":
                        if (tagArgs.Length > 1)
                        {
                            code = ConvertTagToFiveByteControlCode(i, 1, 1, Convert.ToInt16(tagArgs[1]));
                        }

                        else
                        {
                            //Error handler
                        }
                        break;

                    case "camera modifier":
                        if (tagArgs.Length > 1)
                        {
                            code = ConvertTagToFiveByteControlCode(i, 2, 2, Convert.ToInt16(tagArgs[1]));
                        }

                        else
                        {
                            //Error handler
                        }
                        break;

                    case "anim":
                        if (tagArgs.Length > 1)
                        {
                            code = ConvertTagToFiveByteControlCode(i, 3, 3, Convert.ToInt16(tagArgs[1]));
                        }

                        else
                        {
                            //Error handler
                        }
                        break;
                    #endregion

                    #region Six-Byte Code
                    case "color":
                        if (tagArgs.Length > 1)
                        {
                            code.Add(0x1A);
                            code.Add(0x06);
                            code.Add(0xFF);
                            code.Add(0x00);
                            code.Add(0x00);
                            code.Add(Convert.ToByte(tagArgs[1]));
                        }

                        else
                        {
                            //error handling
                        }
                        break;
                    #endregion

                    #region Seven-Byte Codes
                    case "scale":
                            if (tagArgs.Length > 1)
                        {
                            code.Add(0x1A);
                            code.Add(0x07);
                            code.Add(0xFF);
                            code.Add(0x00);
                            code.Add((byte)SevenByteTypes.SetTextSize);

                            byte[] tempShort = BitConverter.GetBytes(Convert.ToInt16(tagArgs[1]));

                            code.Add(tempShort[1]);
                            code.Add(tempShort[0]);
                        }

                        else
                        {
                            //error handling
                        }
                        break;

                    case "wait + dismiss (prompt)":
                        if (tagArgs.Length > 1)
                        {
                            code.Add(0x1A);
                            code.Add(0x07);
                            code.Add(0x00);
                            code.Add(0x00);
                            code.Add((byte)SevenByteTypes.WaitAndDismissWithPrompt);

                            byte[] tempShort = BitConverter.GetBytes(Convert.ToInt16(tagArgs[1]));

                            code.Add(tempShort[1]);
                            code.Add(tempShort[0]);
                        }

                        else
                        {
                            //error handling
                        }
                        break;

                    case "wait + dismiss":
                        if (tagArgs.Length > 1)
                        {
                            code.Add(0x1A);
                            code.Add(0x07);
                            code.Add(0x00);
                            code.Add(0x00);
                            code.Add((byte)SevenByteTypes.WaitAndDismiss);

                            byte[] tempShort = BitConverter.GetBytes(Convert.ToInt16(tagArgs[1]));

                            code.Add(tempShort[1]);
                            code.Add(tempShort[0]);
                        }

                        else
                        {
                            //error handling
                        }
                        break;

                    case "dismiss":
                        if (tagArgs.Length > 1)
                        {
                            code.Add(0x1A);
                            code.Add(0x07);
                            code.Add(0x00);
                            code.Add(0x00);
                            code.Add((byte)SevenByteTypes.Dismiss);

                            byte[] tempShort = BitConverter.GetBytes(Convert.ToInt16(tagArgs[1]));

                            code.Add(tempShort[1]);
                            code.Add(tempShort[0]);
                        }

                        else
                        {
                            //error handling
                        }
                        break;

                    case "dummy":
                        if (tagArgs.Length > 1)
                        {
                            code.Add(0x1A);
                            code.Add(0x07);
                            code.Add(0x00);
                            code.Add(0x00);
                            code.Add((byte)SevenByteTypes.Dummy);

                            byte[] tempShort = BitConverter.GetBytes(Convert.ToInt16(tagArgs[1]));

                            code.Add(tempShort[1]);
                            code.Add(tempShort[0]);
                        }

                        else
                        {
                            //error handling
                        }
                        break;

                    case "wait":
                        if (tagArgs.Length > 1)
                        {
                            code.Add(0x1A);
                            code.Add(0x07);
                            code.Add(0x00);
                            code.Add(0x00);
                            code.Add((byte)SevenByteTypes.Wait);

                            byte[] tempShort = BitConverter.GetBytes(Convert.ToInt16(tagArgs[1]));

                            code.Add(tempShort[1]);
                            code.Add(tempShort[0]);
                        }

                        else
                        {
                            //error handling
                        }
                        break;
                    #endregion
                }

                charData.InsertRange((int)(i + tagSize), code.ToArray());

                charData.RemoveRange(i, (int)tagSize);

                i += code.Count - 1;
            }
        }