private static void CombineAnimatedTiles(AnimatedTilesBank basic, List <string> additions, RandoSettings settings)
        {
            var counts = new Dictionary <string, int>();

            foreach (var key in basic.AnimationsByName.Keys)
            {
                counts[key] = 1;
            }
            var r = new Random((int)settings.IntSeed);

            foreach (var path in additions)
            {
                XmlElement animatedData = Calc.LoadContentXML(path)["Data"];
                foreach (XmlElement el in animatedData)
                {
                    if (el == null)
                    {
                        continue;
                    }

                    var  name = el.Attr("name");
                    bool insert;
                    if (counts.TryGetValue(name, out int count))
                    {
                        count++;
                        counts[name] = count;
                        insert       = r.Next(count) == 0;
                    }
                    else
                    {
                        counts[name] = 1;
                        insert       = true;
                    }

                    if (insert)
                    {
                        int idx = -1;
                        if (basic.AnimationsByName.ContainsKey(name))
                        {
                            idx = basic.Animations.IndexOf(basic.AnimationsByName[name]);
                            basic.AnimationsByName.Remove(name);
                        }
                        basic.Add(
                            name,
                            el.AttrFloat("delay", 0f),
                            el.AttrVector2("posX", "posY", Vector2.Zero),
                            el.AttrVector2("origX", "origY", Vector2.Zero),
                            GFX.Game.GetAtlasSubtextures(el.Attr("path"))
                            );
                        if (idx != -1)
                        {
                            basic.Animations[idx] = basic.AnimationsByName[name];
                            basic.Animations.RemoveAt(basic.Animations.Count - 1);
                        }
                    }
                }
            }
        }
Example #2
0
 public AnimatedTiles(int columns, int rows, AnimatedTilesBank bank)
 {
     this.tiles = new VirtualMap <List <AnimatedTiles.Tile> >(columns, rows, (List <AnimatedTiles.Tile>)null);
     this.Bank  = bank;
 }