/// Ensures the brain has an up to date array of coreBrains /** Is called when the inspector is modified and into InitializeBrain. * If the brain gameObject was just created, it generates a list of * coreBrains (one for each brainType) */ public void UpdateCoreBrains() { // If CoreBrains is null, this means the Brain object was just // instanciated and we create instances of each CoreBrain if (CoreBrains == null) { CoreBrains = new ScriptableObject[System.Enum.GetValues(typeof(BrainType)).Length]; foreach (BrainType bt in System.Enum.GetValues(typeof(BrainType))) { CoreBrains[(int)bt] = ScriptableObject.CreateInstance("CoreBrain" + bt.ToString()); } } // If the length of CoreBrains does not match the number of BrainTypes, // we increase the length of CoreBrains if (CoreBrains.Length < System.Enum.GetValues(typeof(BrainType)).Length) { ScriptableObject[] new_CoreBrains = new ScriptableObject[System.Enum.GetValues(typeof(BrainType)).Length]; foreach (BrainType bt in System.Enum.GetValues(typeof(BrainType))) { if ((int)bt < CoreBrains.Length) { new_CoreBrains[(int)bt] = CoreBrains[(int)bt]; } else { new_CoreBrains[(int)bt] = ScriptableObject.CreateInstance("CoreBrain" + bt.ToString()); } } CoreBrains = new_CoreBrains; } // If the stored instanceID does not match the current instanceID, // this means that the Brain GameObject was duplicated, and // we need to make a new copy of each CoreBrain if (instanceID != gameObject.GetInstanceID()) { foreach (BrainType bt in System.Enum.GetValues(typeof(BrainType))) { CoreBrains[(int)bt] = ScriptableObject.Instantiate(CoreBrains[(int)bt]); } instanceID = gameObject.GetInstanceID(); } // The coreBrain to display is the one defined in brainType coreBrain = (CoreBrain)CoreBrains[(int)brainType]; coreBrain.SetBrain(this); }