/// <summary>Generates a new AnimatedSpriteCollection object from the data held in an asset sheet.</summary>
        /// <param name="assetSheet">An asset sheet that holds the data for textures.</param>
        /// <param name="type">The type of asset to get from the sheet. Hair, eyes, shoes, etc.</param>
        public AnimatedSpriteCollection getSpriteCollectionFromSheet(AssetSheet assetSheet, AnimationType type)
        {
            var left  = new AnimatedSpriteExtended(assetSheet.clone().getTexture(Direction.left, type), assetSheet);
            var right = new AnimatedSpriteExtended(assetSheet.clone().getTexture(Direction.right, type), assetSheet);
            var up    = new AnimatedSpriteExtended(assetSheet.clone().getTexture(Direction.up, type), assetSheet);
            var down  = new AnimatedSpriteExtended(assetSheet.clone().getTexture(Direction.down, type), assetSheet);

            return(new AnimatedSpriteCollection(left, right, up, down, Direction.down));
        }
 /// <summary>
 /// Default loading function from paths.
 /// </summary>
 public void loadAssets()
 {
     foreach (var path in this.paths)
     {
         string[] files = Directory.GetFiles(path.Value, "*.json");
         foreach (var file in files)
         {
             AssetInfo  info  = AssetInfo.readFromJson(file);
             AssetSheet sheet = new AssetSheet(info, path.Value);
             this.assets.Add(sheet);
         }
     }
 }
        /// <summary>Creates a character renderer (a collection of textures) from a bunch of different asset sheets.</summary>
        /// <param name="bodySheet">The textures for the NPC's body.</param>
        /// <param name="eyesSheet">The textures for the NPC's eyes.</param>
        /// <param name="hairSheet">The textures for the NPC's hair.</param>
        /// <param name="shirtSheet">The textures for the NPC's shirt.</param>
        /// <param name="pantsSheet">The textures for the NPC's pants.</param>
        /// <param name="shoesSheet">The textures for the NPC's shoes.</param>
        /// <param name="accessorySheet">The textures for the NPC's accessories.</param>
        /// <param name="drawColors">The colors for the NPC's different assets.</param>
        public virtual BasicRenderer generateBasicRenderer(AssetSheet bodySheet, AssetSheet eyesSheet, AssetSheet hairSheet, AssetSheet shirtSheet, AssetSheet pantsSheet, AssetSheet shoesSheet, List <AssetSheet> accessorySheet, StandardColorCollection drawColors = null)
        {
            if (drawColors == null)
            {
                drawColors = new StandardColorCollection();
            }

            // Get all of the appropriate animations.
            StandardCharacterAnimation standingAnimation = this.generateCharacterAnimation(bodySheet, eyesSheet, hairSheet, shirtSheet, pantsSheet, shoesSheet, accessorySheet, AnimationType.standing, drawColors);
            StandardCharacterAnimation movingAnimation   = this.generateCharacterAnimation(bodySheet, eyesSheet, hairSheet, shirtSheet, pantsSheet, shoesSheet, accessorySheet, AnimationType.walking, drawColors);
            StandardCharacterAnimation swimmingAnimation = this.generateCharacterAnimation(bodySheet, eyesSheet, hairSheet, shirtSheet, pantsSheet, shoesSheet, accessorySheet, AnimationType.swimming, drawColors);

            return(new BasicRenderer(standingAnimation, movingAnimation, swimmingAnimation));
        }
 /// <summary>
 /// Actually load in the asset information.
 /// </summary>
 /// <param name="file"></param>
 /// <param name="path"></param>
 private void ProcessFile(string file, string path)
 {
     try
     {
         ExtendedAssetInfo info  = ExtendedAssetInfo.readFromJson(file);
         AssetSheet        sheet = new AssetSheet(info, path);
         addAsset(sheet);
         Class1.ModMonitor.Log("Loaded in new modular asset: " + info.assetName + " asset type: " + info.type);
     }
     catch (Exception err)
     {
         AssetInfo  info  = AssetInfo.readFromJson(file);
         AssetSheet sheet = new AssetSheet(info, path);
         addAsset(sheet);
     }
 }
 /// <summary>Actually load in the asset information.</summary>
 /// <param name="relativeFilePath">The relative path to the file to process.</param>
 /// <param name="relativeDirPath">The relative path containing the file.</param>
 private void ProcessFile(string relativeFilePath, string relativeDirPath)
 {
     try
     {
         ExtendedAssetInfo info  = ExtendedAssetInfo.readFromJson(relativeFilePath);
         AssetSheet        sheet = new AssetSheet(info, relativeDirPath);
         this.addAsset(sheet);
         Class1.ModMonitor.Log("Loaded in new modular asset: " + info.assetName + " asset type: " + info.type);
     }
     catch
     {
         AssetInfo  info  = AssetInfo.readFromJson(relativeFilePath);
         AssetSheet sheet = new AssetSheet(info, relativeDirPath);
         this.addAsset(sheet);
     }
 }
Exemple #6
0
        /// <summary>
        /// Creates a character renderer (a collection of textures) from a bunch of different asset sheets.
        /// </summary>
        /// <param name="bodySheet">The textures for the npc's body.</param>
        /// <param name="eyesSheet">The textures for the npc's eyes.</param>
        /// <param name="hairSheet">The textures for the npc's hair.</param>
        /// <param name="shirtSheet">The textures for the npc's shirt.</param>
        /// <param name="pantsSheet">The textures for the npc's pants.</param>
        /// <param name="shoesSheet">The textures for the npc's shoes.</param>
        /// <param name="accessorySheet">The textures for the npc's accessories.</param>
        /// <param name="DrawColors">The colors for the npc's different assets.</param>
        /// <returns></returns>
        public virtual BasicRenderer generateBasicRenderer(AssetSheet bodySheet, AssetSheet eyesSheet, AssetSheet hairSheet, AssetSheet shirtSheet, AssetSheet pantsSheet, AssetSheet shoesSheet, List <AssetSheet> accessorySheet, StandardColorCollection DrawColors = null)
        {
            if (DrawColors == null)
            {
                DrawColors = new StandardColorCollection();
            }
            //Get all of the appropriate animations.
            AnimationType type = AnimationType.standing;
            var           standingAnimation = generateCharacterAnimation(bodySheet, eyesSheet, hairSheet, shirtSheet, pantsSheet, shoesSheet, accessorySheet, type, DrawColors);

            type = AnimationType.walking;
            var movingAnimation = generateCharacterAnimation(bodySheet, eyesSheet, hairSheet, shirtSheet, pantsSheet, shoesSheet, accessorySheet, type, DrawColors);

            type = AnimationType.swimming;
            var swimmingAnimation = generateCharacterAnimation(bodySheet, eyesSheet, hairSheet, shirtSheet, pantsSheet, shoesSheet, accessorySheet, type, DrawColors);

            BasicRenderer render = new BasicRenderer(standingAnimation, movingAnimation, swimmingAnimation);

            return(render);
        }
Exemple #7
0
        /// <summary>
        /// Generate a Standard Character Animation from some asset sheets.
        /// (collection of textures to animations)
        /// </summary>
        /// <param name="body">The textures for the npc's body.</param>
        /// <param name="eyes">The textures for the npc's eyes.</param>
        /// <param name="hair">The textures for the npc's hair.</param>
        /// <param name="shirt">The textures for the npc's shirt.</param>
        /// <param name="pants">The textures for the npc's pants.</param>
        /// <param name="shoes">The textures for the npc's shoes.</param>
        /// <param name="accessoryType">The textures for the npc's accessories.</param>
        /// <param name="DrawColors">The colors for the npc's different assets.</param>
        /// <returns></returns>
        public virtual StandardCharacterAnimation generateCharacterAnimation(AssetSheet body, AssetSheet eyes, AssetSheet hair, AssetSheet shirt, AssetSheet pants, AssetSheet shoes, List <AssetSheet> accessories, AnimationType animationType, StandardColorCollection DrawColors = null)
        {
            var bodySprite  = getSpriteCollectionFromSheet(body, animationType);
            var eyesSprite  = getSpriteCollectionFromSheet(eyes, animationType);
            var hairSprite  = getSpriteCollectionFromSheet(hair, animationType);
            var shirtSprite = getSpriteCollectionFromSheet(shirt, animationType);
            var pantsSprite = getSpriteCollectionFromSheet(pants, animationType);
            var shoesSprite = getSpriteCollectionFromSheet(shoes, animationType);
            List <AnimatedSpriteCollection> accessoryCollection = new List <AnimatedSpriteCollection>();

            foreach (var v in accessories)
            {
                AnimatedSpriteCollection acc = getSpriteCollectionFromSheet(v, AnimationType.standing);
                accessoryCollection.Add(acc);
            }
            if (DrawColors == null)
            {
                DrawColors = new StandardColorCollection();
            }
            StandardCharacterAnimation standingAnimation = new StandardCharacterAnimation(bodySprite, eyesSprite, hairSprite, shirtSprite, pantsSprite, shoesSprite, accessoryCollection, DrawColors);

            return(standingAnimation);
        }
        /// <summary>Generate a Standard Character Animation from some asset sheets. (collection of textures to animations)</summary>
        /// <param name="body">The textures for the NPC's body.</param>
        /// <param name="eyes">The textures for the NPC's eyes.</param>
        /// <param name="hair">The textures for the NPC's hair.</param>
        /// <param name="shirt">The textures for the NPC's shirt.</param>
        /// <param name="pants">The textures for the NPC's pants.</param>
        /// <param name="shoes">The textures for the NPC's shoes.</param>
        /// <param name="accessories">The textures for the NPC's accessories.</param>
        /// <param name="animationType">The animation type to generate.</param>
        /// <param name="drawColors">The colors for the NPC's different assets.</param>
        public virtual StandardCharacterAnimation generateCharacterAnimation(AssetSheet body, AssetSheet eyes, AssetSheet hair, AssetSheet shirt, AssetSheet pants, AssetSheet shoes, List <AssetSheet> accessories, AnimationType animationType, StandardColorCollection drawColors = null)
        {
            AnimatedSpriteCollection bodySprite  = this.getSpriteCollectionFromSheet(body, animationType);
            AnimatedSpriteCollection eyesSprite  = this.getSpriteCollectionFromSheet(eyes, animationType);
            AnimatedSpriteCollection hairSprite  = this.getSpriteCollectionFromSheet(hair, animationType);
            AnimatedSpriteCollection shirtSprite = this.getSpriteCollectionFromSheet(shirt, animationType);
            AnimatedSpriteCollection pantsSprite = this.getSpriteCollectionFromSheet(pants, animationType);
            AnimatedSpriteCollection shoesSprite = this.getSpriteCollectionFromSheet(shoes, animationType);

            List <AnimatedSpriteCollection> accessoryCollection = new List <AnimatedSpriteCollection>();

            foreach (var v in accessories)
            {
                AnimatedSpriteCollection acc = this.getSpriteCollectionFromSheet(v, AnimationType.standing);
                accessoryCollection.Add(acc);
            }

            if (drawColors == null)
            {
                drawColors = new StandardColorCollection();
            }

            return(new StandardCharacterAnimation(bodySprite, eyesSprite, hairSprite, shirtSprite, pantsSprite, shoesSprite, accessoryCollection, drawColors));
        }
Exemple #9
0
 /// <summary>
 /// Used just to get a copy of this asset sheet.
 /// </summary>
 public void clone()
 {
     var asset = new AssetSheet(this.assetInfo, (string)this.path.Clone());
 }
 /// <summary>
 /// Add an asset to be handled from the asset manager.
 /// </summary>
 /// <param name="asset"></param>
 public void addAsset(AssetSheet asset)
 {
     this.assets.Add(asset);
 }
Exemple #11
0
        /// <summary>
        /// Used just to get a copy of this asset sheet.
        /// </summary>
        public virtual AssetSheet clone()
        {
            var asset = new AssetSheet(this.assetInfo, (string)this.path.Clone());

            return(asset);
        }
 /// <summary>Get the relative path for the standard character sprite to be used from this asset sheet.</summary>
 /// <param name="imageGraphics">The standard asset sheet to be used.</param>
 public virtual string getDefaultSpriteImage(AssetSheet imageGraphics)
 {
     return(Class1.getRelativeDirectory(Path.Combine(imageGraphics.path, imageGraphics.assetInfo.standingAssetPaths.downString)));
 }
        /// <summary>Generate a basic NPC based on the NPC data here.</summary>
        /// <param name="gender">The NPC gender.</param>
        /// <param name="minNumOfAccessories">The minimum number of accessories to generate.</param>
        /// <param name="maxNumOfAccessories">The maximum number of accessories to generate.</param>
        /// <param name="drawColors">The colors for the NPC's different assets.</param>
        public ExtendedNpc generateNPC(Genders gender, int minNumOfAccessories, int maxNumOfAccessories, StandardColorCollection drawColors = null)
        {
            Seasons myseason = Seasons.spring;

            if (Game1.currentSeason == "spring")
            {
                myseason = Seasons.spring;
            }
            if (Game1.currentSeason == "summer")
            {
                myseason = Seasons.summer;
            }
            if (Game1.currentSeason == "fall")
            {
                myseason = Seasons.fall;
            }
            if (Game1.currentSeason == "winter")
            {
                myseason = Seasons.winter;
            }

            List <AssetSheet> bodyList      = new List <AssetSheet>();
            List <AssetSheet> eyesList      = new List <AssetSheet>();
            List <AssetSheet> hairList      = new List <AssetSheet>();
            List <AssetSheet> shirtList     = new List <AssetSheet>();
            List <AssetSheet> shoesList     = new List <AssetSheet>();
            List <AssetSheet> pantsList     = new List <AssetSheet>();
            List <AssetSheet> accessoryList = new List <AssetSheet>();

            //Get all applicable parts from this current asset manager
            foreach (var assetManager in this.assetPool)
            {
                var body = this.getListOfApplicableBodyParts(assetManager.Key, gender, myseason, PartType.body);
                foreach (var piece in body)
                {
                    bodyList.Add(piece);
                }

                var eyes = this.getListOfApplicableBodyParts(assetManager.Key, gender, myseason, PartType.eyes);
                foreach (var piece in eyes)
                {
                    eyesList.Add(piece);
                }

                var hair = this.getListOfApplicableBodyParts(assetManager.Key, gender, myseason, PartType.hair);
                foreach (var piece in hair)
                {
                    hairList.Add(piece);
                }

                var shirt = this.getListOfApplicableBodyParts(assetManager.Key, gender, myseason, PartType.shirt);
                foreach (var piece in shirt)
                {
                    shirtList.Add(piece);
                }

                var pants = this.getListOfApplicableBodyParts(assetManager.Key, gender, myseason, PartType.pants);
                foreach (var piece in pants)
                {
                    pantsList.Add(piece);
                }

                var shoes = this.getListOfApplicableBodyParts(assetManager.Key, gender, myseason, PartType.shoes);
                foreach (var piece in shoes)
                {
                    shoesList.Add(piece);
                }

                var accessory = this.getListOfApplicableBodyParts(assetManager.Key, gender, myseason, PartType.accessory);
                foreach (var piece in accessory)
                {
                    accessoryList.Add(piece);
                }
            }


            Random r      = new Random(DateTime.Now.Millisecond);
            int    amount = r.Next(minNumOfAccessories, maxNumOfAccessories + 1);

            int bodyIndex;
            int eyesIndex;
            int hairIndex;
            int shirtIndex;
            int pantsIndex;
            int shoesIndex;

            if (bodyList.Count != 0)
            {
                bodyIndex = r.Next(0, bodyList.Count - 1);
            }
            else
            {
                Class1.ModMonitor.Log("Error: Not enough body templates to generate an npc. Aborting", StardewModdingAPI.LogLevel.Error);
                return(null);
            }

            if (eyesList.Count != 0)
            {
                eyesIndex = r.Next(0, eyesList.Count - 1);
            }
            else
            {
                Class1.ModMonitor.Log("Error: Not enough eyes templates to generate an npc. Aborting", StardewModdingAPI.LogLevel.Error);
                return(null);
            }

            if (hairList.Count != 0)
            {
                hairIndex = r.Next(0, hairList.Count - 1);
            }
            else
            {
                Class1.ModMonitor.Log("Error: Not enough hair templates to generate an npc. Aborting", StardewModdingAPI.LogLevel.Error);
                return(null);
            }

            if (shirtList.Count != 0)
            {
                shirtIndex = r.Next(0, shirtList.Count - 1);
            }
            else
            {
                Class1.ModMonitor.Log("Error: Not enough shirt templates to generate an npc. Aborting", StardewModdingAPI.LogLevel.Error);
                return(null);
            }

            if (pantsList.Count != 0)
            {
                pantsIndex = r.Next(0, pantsList.Count - 1);
            }
            else
            {
                Class1.ModMonitor.Log("Error: Not enough pants templates to generate an npc. Aborting", StardewModdingAPI.LogLevel.Error);
                return(null);
            }

            if (shoesList.Count != 0)
            {
                shoesIndex = r.Next(0, shoesList.Count - 1);
            }
            else
            {
                Class1.ModMonitor.Log("Error: Not enough shoes templates to generate an npc. Aborting", StardewModdingAPI.LogLevel.Error);
                return(null);
            }

            List <int> accIntList = new List <int>();

            if (accessoryList.Count != 0)
            {
                for (int i = 0; i < amount; i++)
                {
                    int acc = r.Next(0, accessoryList.Count - 1);
                    accIntList.Add(acc);
                }
            }

            //Get a single sheet to pull from.
            AssetSheet bodySheet  = bodyList.ElementAt(bodyIndex);
            AssetSheet eyesSheet  = eyesList.ElementAt(eyesIndex);
            AssetSheet hairSheet  = hairList.ElementAt(hairIndex);
            AssetSheet shirtSheet = shirtList.ElementAt(shirtIndex);
            AssetSheet pantsSheet = pantsList.ElementAt(pantsIndex);
            AssetSheet shoesSheet = shoesList.ElementAt(shoesIndex);

            List <AssetSheet> accessorySheet = new List <AssetSheet>();

            foreach (int v in accIntList)
            {
                accessorySheet.Add(accessoryList.ElementAt(v));
            }

            if (drawColors == null)
            {
                drawColors = new StandardColorCollection();
            }

            var render = this.generateBasicRenderer(bodySheet, eyesSheet, hairSheet, shirtSheet, pantsSheet, shoesSheet, accessorySheet, drawColors);

            return(new ExtendedNpc(new Sprite(this.getDefaultSpriteImage(bodySheet)), render, new Microsoft.Xna.Framework.Vector2(0, 0) * Game1.tileSize, 2, NpcNames.getRandomNpcName(gender)));
        }