示例#1
0
        public static AnimatedSprite LoadAnimatedSprite(ContentManager content,
                                                        string textureFile,
                                                        string mapFile,
                                                        string atlasName,
                                                        float frameDuration,
                                                        bool loop)
        {
            var characterTexture = content.Load <Texture2D>(textureFile);
            var characterMap     = content.Load <Dictionary <string, Rectangle> >(mapFile);
            var characterAtlas   = new TextureAtlas(atlasName, characterTexture, characterMap);

            Dictionary <string, List <KeyValuePair <string, int> > > animations = new Dictionary <string, List <KeyValuePair <string, int> > >();

            List <TextureRegion2D> regions = new List <TextureRegion2D>(characterAtlas.Regions);

            for (int i = 0; i < regions.Count; ++i)
            {
                var region = regions[i];

                var    regionName     = region.Name;
                int    lastIndexOf    = regionName.LastIndexOf("_");
                string animationName  = regionName.Substring(0, lastIndexOf);
                string animationFrame = regionName.Substring(lastIndexOf + 1, regionName.Length - animationName.Length - 1);

                if (!animations.ContainsKey(animationName))
                {
                    animations[animationName] = new List <KeyValuePair <string, int> >();
                }

                animations[animationName].Add(new KeyValuePair <string, int>(animationFrame, i));
            }

            var characterAnimationFactory = new SpriteSheet();

            characterAnimationFactory.TextureAtlas = characterAtlas;

            foreach (var animation in animations)
            {
                var cycle = new SpriteSheetAnimationCycle();
                cycle.IsLooping     = loop;
                cycle.IsPingPong    = false;
                cycle.FrameDuration = frameDuration;

                var frames = new List <SpriteSheetAnimationFrame>();

                for (int i = 0; i < animation.Value.Count; ++i)
                {
                    frames.Add(new SpriteSheetAnimationFrame(animation.Value[i].Value));
                }

                cycle.Frames = frames;

                characterAnimationFactory.Cycles.Add(animation.Key, cycle);
            }

            return(new AnimatedSprite(characterAnimationFactory));
        }
示例#2
0
        private void AddAnimationCycle(SpriteSheet spriteSheet, string name, int[] frames, bool isLooping = true, float frameDuration = 0.1f)
        {
            var cycle = new SpriteSheetAnimationCycle();

            foreach (var f in frames)
            {
                cycle.Frames.Add(new SpriteSheetAnimationFrame(f, frameDuration));
            }

            cycle.IsLooping = isLooping;

            spriteSheet.Cycles.Add(name, cycle);
        }
示例#3
0
        public static SpriteSheet MediumChicken()
        {
            // Medium Chicken Sprite Sheet
            var sheet = new SpriteSheet("medium_chickens", Assets.SpriteSourceChickens, new Dictionary <string, Rectangle>()
            {
                { "fly_01", new Rectangle(287, 3, 99, 119) },
                { "fly_02", new Rectangle(287, 123, 99, 119) },
                { "fly_03", new Rectangle(287, 243, 99, 119) },
                { "fly_04", new Rectangle(287, 363, 99, 119) },
                { "fly_05", new Rectangle(287, 483, 99, 119) },
                { "fly_06", new Rectangle(287, 603, 99, 119) },
                { "fly_07", new Rectangle(287, 723, 99, 119) },
                { "fly_08", new Rectangle(287, 843, 99, 119) },
                { "fly_09", new Rectangle(287, 963, 99, 119) },
                { "fly_10", new Rectangle(287, 1083, 99, 119) },
                { "fly_11", new Rectangle(287, 1203, 99, 119) },
                { "fly_12", new Rectangle(287, 1323, 99, 119) },
                { "fly_13", new Rectangle(287, 1443, 99, 119) },

                { "dead_01", new Rectangle(409, 3, 99, 119) },
                { "dead_02", new Rectangle(409, 123, 99, 119) },
                { "dead_03", new Rectangle(409, 243, 99, 119) },
                { "dead_04", new Rectangle(409, 363, 99, 119) },
                { "dead_05", new Rectangle(409, 483, 99, 119) },
                { "dead_06", new Rectangle(409, 603, 99, 119) },
                { "dead_07", new Rectangle(409, 723, 99, 119) },
                { "dead_08", new Rectangle(409, 842, 99, 119) },
            });

            // Fly Animation Cycle
            var flyCycle = new SpriteSheetAnimationCycle(0, 12)
            {
                IsLooping     = true,
                FrameDuration = 0.1f
            };

            // Dead Animation Cycle
            var deadCycle = new SpriteSheetAnimationCycle(13, 20)
            {
                FrameDuration = 0.1f
            };

            sheet.Cycles.Add("fly", flyCycle);
            sheet.Cycles.Add("dead", deadCycle);

            return(sheet);
        }
示例#4
0
        public static SpriteSheet SmallChicken()
        {
            // Small Chicken Sprite Sheet
            var sheet = new SpriteSheet("small_chickens", Assets.SpriteSourceChickens, new Dictionary <string, Rectangle>()
            {
                { "fly_01", new Rectangle(531, 3, 43, 31) },
                { "fly_02", new Rectangle(531, 35, 43, 31) },
                { "fly_03", new Rectangle(531, 67, 43, 31) },
                { "fly_04", new Rectangle(531, 99, 43, 31) },
                { "fly_05", new Rectangle(531, 131, 43, 31) },
                { "fly_06", new Rectangle(531, 163, 43, 31) },
                { "fly_07", new Rectangle(531, 195, 43, 31) },
                { "fly_08", new Rectangle(531, 227, 43, 31) },
                { "fly_09", new Rectangle(531, 259, 43, 31) },
                { "fly_10", new Rectangle(531, 291, 43, 31) },
                { "fly_11", new Rectangle(531, 323, 43, 31) },
                { "fly_12", new Rectangle(531, 355, 43, 31) },
                { "fly_13", new Rectangle(531, 387, 43, 31) },

                { "dead_01", new Rectangle(577, 3, 43, 31) },
                { "dead_02", new Rectangle(577, 35, 43, 31) },
                { "dead_03", new Rectangle(577, 67, 43, 31) },
                { "dead_04", new Rectangle(577, 99, 43, 31) },
                { "dead_05", new Rectangle(577, 131, 43, 31) },
                { "dead_06", new Rectangle(577, 163, 43, 31) },
                { "dead_07", new Rectangle(577, 195, 43, 31) },
                { "dead_08", new Rectangle(577, 227, 43, 31) },
            });

            // Fly Animation Cycle
            var flyCycle = new SpriteSheetAnimationCycle(0, 12)
            {
                IsLooping     = true,
                FrameDuration = 0.1f
            };

            // Dead Animation Cycle
            var deadCycle = new SpriteSheetAnimationCycle(13, 20)
            {
                FrameDuration = 0.1f
            };

            sheet.Cycles.Add("fly", flyCycle);
            sheet.Cycles.Add("dead", deadCycle);

            return(sheet);
        }
示例#5
0
        public static SpriteSheet LargeChicken()
        {
            // Large Chicken Sprite Sheet
            var sheet = new SpriteSheet("large_chickens", Assets.SpriteSourceChickens, new Dictionary <string, Rectangle>
            {
                { "fly_01", new Rectangle(3, 3, 139, 151) },
                { "fly_02", new Rectangle(3, 155, 139, 151) },
                { "fly_03", new Rectangle(3, 307, 139, 151) },
                { "fly_04", new Rectangle(3, 459, 139, 151) },
                { "fly_05", new Rectangle(3, 611, 139, 151) },
                { "fly_06", new Rectangle(3, 763, 139, 151) },
                { "fly_07", new Rectangle(3, 915, 139, 151) },
                { "fly_08", new Rectangle(3, 1067, 139, 151) },
                { "fly_09", new Rectangle(3, 1219, 139, 151) },
                { "fly_10", new Rectangle(3, 1371, 139, 151) },
                { "fly_11", new Rectangle(3, 1523, 139, 151) },
                { "fly_12", new Rectangle(3, 1675, 139, 151) },
                { "fly_13", new Rectangle(3, 1827, 139, 151) },

                { "dead_01", new Rectangle(145, 3, 139, 151) },
                { "dead_02", new Rectangle(145, 155, 139, 151) },
                { "dead_03", new Rectangle(145, 307, 139, 151) },
                { "dead_04", new Rectangle(145, 459, 139, 151) },
                { "dead_05", new Rectangle(145, 611, 139, 151) },
                { "dead_06", new Rectangle(145, 763, 139, 151) },
                { "dead_07", new Rectangle(145, 915, 139, 151) },
                { "dead_08", new Rectangle(145, 1067, 139, 151) },
            });

            // Fly Animation Cycle
            var flyCycle = new SpriteSheetAnimationCycle(0, 12)
            {
                IsLooping     = true,
                FrameDuration = 0.1f
            };

            // Dead Animation Cycle
            var deadCycle = new SpriteSheetAnimationCycle(13, 20)
            {
                FrameDuration = 0.1f
            };

            sheet.Cycles.Add("fly", flyCycle);
            sheet.Cycles.Add("dead", deadCycle);

            return(sheet);
        }
示例#6
0
        public static SpriteSheet Ammo()
        {
            var sheet = new SpriteSheet("ammo", Assets.SpriteSourceAmmo, new Dictionary <string, Rectangle>()
            {
                { "ammo_01", new Rectangle(0, 0, 112, 84) },
                { "ammo_02", new Rectangle(0, 84, 112, 84) },
                { "ammo_03", new Rectangle(0, 168, 112, 84) },
                { "ammo_04", new Rectangle(0, 252, 112, 84) },
                { "ammo_05", new Rectangle(0, 336, 112, 84) },
                { "ammo_06", new Rectangle(0, 420, 112, 84) },
                { "ammo_07", new Rectangle(0, 504, 112, 84) },
                { "ammo_08", new Rectangle(0, 588, 112, 84) },
                { "ammo_09", new Rectangle(0, 672, 112, 84) },
                { "ammo_10", new Rectangle(0, 756, 112, 84) },
                { "ammo_11", new Rectangle(0, 840, 112, 84) },
                { "ammo_12", new Rectangle(0, 924, 112, 84) },
                { "ammo_13", new Rectangle(0, 1008, 112, 84) },
                { "ammo_14", new Rectangle(0, 1092, 112, 84) },
                { "ammo_15", new Rectangle(0, 1176, 112, 84) },
                { "ammo_16", new Rectangle(0, 1260, 112, 84) },
                { "ammo_17", new Rectangle(0, 1344, 112, 84) },
                { "ammo_18", new Rectangle(0, 1428, 112, 84) },
                { "ammo_19", new Rectangle(0, 1512, 112, 84) },
                { "ammo_20", new Rectangle(0, 1596, 112, 84) },
                { "ammo_21", new Rectangle(0, 1680, 112, 84) },
            });

            var explodeCycle = new SpriteSheetAnimationCycle(0, 20)
            {
                FrameDuration = 0.02f,
            };

            sheet.Cycles.Add("explode", explodeCycle);

            return(sheet);
        }