using CustomNPCFramework.Framework.NPCS; using Microsoft.Xna.Framework; using StardewValley; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CustomNPCFramework.Framework.Utilities { /// /// Used to keep track of all of the custom npcs. /// public class NPCTracker { /// /// A list used to keep track of the npcs. /// public List moddedNPCS; /// /// Constructor. /// public NPCTracker() { this.moddedNPCS = new List(); } /// /// Use this to add a new npc into the game. /// /// The game location to add the npc to. /// The extended npc to add to the location. public void addNewNPCToLocation(GameLocation loc,ExtendedNPC npc) { this.moddedNPCS.Add(npc); npc.defaultLocation = loc; npc.currentLocation = loc; loc.addCharacter(npc); } /// /// Add a npc to a location. /// /// The game location to add an npc to. /// The extended npc to add to the location. /// The tile position at the game location to add the mpc to. public void addNewNPCToLocation(GameLocation loc, ExtendedNPC npc, Vector2 tilePosition) { this.moddedNPCS.Add(npc); npc.defaultLocation = loc; npc.currentLocation = loc; npc.position.Value = tilePosition*Game1.tileSize; loc.addCharacter(npc); } /// /// Use this simply to remove a single npc from a location. /// /// /// public void removeCharacterFromLocation(GameLocation loc, ExtendedNPC npc) { loc.characters.Remove(npc); } /// /// Use this to completly remove and npc from the game as it is removed from the location and is no longer tracked. /// /// The npc to remove from the location. public void removeFromLocationAndTrackingList(ExtendedNPC npc) { if (npc.currentLocation != null) { npc.currentLocation.characters.Remove(npc); } this.moddedNPCS.Remove(npc); } /// /// Use this to clean up all of the npcs before the game is saved. /// public void cleanUpBeforeSave() { foreach(ExtendedNPC npc in this.moddedNPCS) { //npc.currentLocation.characters.Remove(npc); //Game1.removeThisCharacterFromAllLocations(npc); Game1.removeCharacterFromItsLocation(npc.Name); Class1.ModMonitor.Log("Removed an npc!"); //Do some saving code here. } } /// /// Use this to load in all of the npcs again after saving. /// public void afterSave() { foreach(ExtendedNPC npc in this.moddedNPCS) { npc.defaultLocation.addCharacter(npc); } } } }