/// <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); } }
/// <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); }
/// <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)); }
/// <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); }
/// <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))); }