using System.Collections; using System.Collections.Generic; using UnityEngine; using SiegeSong; namespace SiegeSong { public class InstanceManager : MonoBehaviour { public GameObject SpeciesDefinitionsContainer; public GameObject ActorInstanceContainer; public string CurrentPlayerInstanceID; public GameObject[] Instances; public string[] InstanceIDs; public int[] ActorIDs; public string HumanSpeciesKey = "_Human"; public int LastGeneratedInstanceIndex; public int MaxInstanceIDLength = 5; void Start() { } void Update() { } public void ClearAndUnload() { for (var i = 0; i < Instances.Length; i++) { Instances[i].active = false; GameObject.Destroy(Instances[i]); } LastGeneratedInstanceIndex = 0; CurrentPlayerInstanceID = ""; Instances = new GameObject[0]; InstanceIDs = new string[0]; ActorIDs = new int[0]; } public string GenerateInstanceID() { LastGeneratedInstanceIndex++; var instanceIndex = LastGeneratedInstanceIndex.ToString(); var newInstanceID = ""; for (var i = 0; i < MaxInstanceIDLength; i++) { if (i >= instanceIndex.Length) { newInstanceID += "A"; } else { newInstanceID += "BCDEFGHIJK"[int.Parse(instanceIndex[i].ToString())]; } } return newInstanceID; } public GameObject GetInstanceByID(string instanceID) { for(var i = 0; i < Instances.Length; i++) { if (InstanceIDs[i].ToLower() == instanceID.ToLower()) { return Instances[i]; } } return new GameObject(); } public void AddInstance(string instanceID, GameObject newInstance) { var newInstanceArray = new GameObject[Instances.Length + 1]; var newInstanceIDArray = new string[InstanceIDs.Length + 1]; Instances.CopyTo(newInstanceArray, 0); InstanceIDs.CopyTo(newInstanceIDArray, 0); newInstanceArray[newInstanceArray.Length - 1] = newInstance; newInstanceIDArray[newInstanceIDArray.Length - 1] = instanceID; Instances = newInstanceArray; InstanceIDs = newInstanceIDArray; newInstance.transform.parent = ActorInstanceContainer.transform; } public void RemoveInstance(string instanceID) { var newInstanceArray = new GameObject[Instances.Length - 1]; var newInstanceIDArray = new string[InstanceIDs.Length - 1]; Instances.CopyTo(newInstanceArray, 0); InstanceIDs.CopyTo(newInstanceIDArray, 0); var iterator = 0; var index = 0; foreach (var instance in Instances) { iterator++; if (InstanceIDs[iterator].ToLower() == instanceID.ToLower()) { var instanceObject = Instances[iterator]; GameObject.Destroy(instanceObject); } else { index++; newInstanceArray[index] = instance; newInstanceIDArray[index] = InstanceIDs[iterator]; } } Instances = newInstanceArray; InstanceIDs = newInstanceIDArray; } } }