コード例 #1
0
        public override void Activate()
        {
            RoomLayout room    = manager.GetActiveRoomLayout();
            int        tileset = room.Tileset.Index;

            var reader = new XmlTextReader(Helper.GetResourceStream("LynnaLab.Resources.AutoSmoother.xml"));

            Smoother smoother     = new Smoother();
            bool     validTileset = false;

            string name = "";

            while (reader.Read())
            {
                string s;

                switch (reader.NodeType)
                {
                case XmlNodeType.Element:
                    name = reader.Name;
                    switch (name)
                    {
                    case "tileset":
                        s = reader.GetAttribute("index");
                        List <int> ints = GetIntList(s);
                        validTileset = ints.Contains(tileset);
                        break;
                    }
                    break;

                case XmlNodeType.Text:
                    if (!validTileset)
                    {
                        continue;
                    }

                    s = reader.Value.Trim();
                    switch (name)
                    {
                    case "base":
                    {
                        IEnumerable <int> values = Regex.Split(s, @"\s+")
                                                   .Select(a => Convert.ToInt32(a, 16));
                        int c = 0;
                        foreach (int i in values)
                        {
                            smoother.baseTiles[c / 3, c % 3] = i;
                            c++;
                        }
                    }
                    break;

                    case "horizontal":
                    {
                        IEnumerable <int> values = Regex.Split(s, @"\s+")
                                                   .Select(a => Convert.ToInt32(a, 16));
                        int c = 0;
                        foreach (int i in values)
                        {
                            smoother.hTiles[c] = i;
                            c++;
                        }
                    }
                    break;

                    case "vertical":
                    {
                        IEnumerable <int> values = Regex.Split(s, @"\s+")
                                                   .Select(a => Convert.ToInt32(a, 16));
                        int c = 0;
                        foreach (int i in values)
                        {
                            smoother.vTiles[c] = i;
                            c++;
                        }
                    }
                    break;

                    case "friendly":
                    {
                        s = Regex.Replace(s, @"\s", "");
                        List <int> ints = GetIntList(s);
                        foreach (int i in ints)
                        {
                            smoother.ignoreTiles.Add(i);
                        }
                    }
                    break;
                    }
                    break;

                case XmlNodeType.EndElement:
                    switch (reader.Name)
                    {
                    case "tileset":
                        validTileset = false;
                        break;

                    case "smoother":
                        smoother.Apply(manager);
                        smoother = new Smoother();
                        break;
                    }
                    name = "";
                    break;
                }
            }
        }
コード例 #2
0
ファイル: AutoSmoother.cs プロジェクト: Drenn1/LynnaLab
        public override void Clicked()
        {
            Room room = manager.GetActiveRoom();
            int area = room.Area.Index;

            var reader = new XmlTextReader("Plugins/AutoSmoother.xml");

            Smoother smoother = new Smoother();
            bool validArea = false;

            string name = "";
            while (reader.Read())
            {
                string s;

                switch (reader.NodeType)
                {
                    case XmlNodeType.Element:
                        name = reader.Name;
                        switch(name) {
                            case "area":
                                s = reader.GetAttribute("index");
                                List<int> ints = GetIntList(s);
                                validArea = ints.Contains(area);
                                break;
                        }
                        break;
                    case XmlNodeType.Text:
                        if (!validArea)
                            continue;

                        s = reader.Value.Trim();
                        switch(name) {
                            case "base":
                                {
                                    IEnumerable<int> values = Regex.Split(s, @"\s+")
                                        .Select(a => Convert.ToInt32(a,16));
                                    int c=0;
                                    foreach (int i in values) {
                                        smoother.baseTiles[c/3,c%3] = i;
                                        c++;
                                    }
                                }
                                break;
                            case "horizontal":
                                {
                                    IEnumerable<int> values = Regex.Split(s,@"\s+")
                                        .Select(a => Convert.ToInt32(a,16));
                                    int c=0;
                                    foreach (int i in values) {
                                        smoother.hTiles[c] = i;
                                        c++;
                                    }
                                }
                                break;
                            case "vertical":
                                {
                                    IEnumerable<int> values = Regex.Split(s,@"\s+")
                                        .Select(a => Convert.ToInt32(a,16));
                                    int c=0;
                                    foreach (int i in values) {
                                        smoother.vTiles[c] = i;
                                        c++;
                                    }
                                }
                                break;
                            case "friendly":
                                {
                                    s = Regex.Replace(s, @"\s","");
                                    List<int> ints = GetIntList(s);
                                    foreach (int i in ints) {
                                        smoother.ignoreTiles.Add(i);
                                    }
                                }
                                break;
                        }
                        break;
                    case XmlNodeType.EndElement:
                        switch(reader.Name) {
                            case "area":
                                validArea = false;
                                break;
                            case "smoother":
                                smoother.Apply(manager);
                                smoother = new Smoother();
                                break;
                        }
                        name = "";
                        break;
                }
            }
        }