|
|
|
|
|
|
*/ |
|
|
|
public class Brain : MonoBehaviour |
|
|
|
{ |
|
|
|
private bool isInitialized = false; |
|
|
|
|
|
|
|
private Dictionary<Agent, AgentInfo> agentInfos = |
|
|
|
new Dictionary<Agent, AgentInfo>(1024); |
|
|
|
|
|
|
CoreBrains = new ScriptableObject[numCoreBrains]; |
|
|
|
foreach (BrainType bt in System.Enum.GetValues(typeof(BrainType))) |
|
|
|
{ |
|
|
|
CoreBrains[(int)bt] = |
|
|
|
CoreBrains[(int)bt] = |
|
|
|
ScriptableObject.CreateInstance( |
|
|
|
"CoreBrain" + bt.ToString()); |
|
|
|
} |
|
|
|
|
|
|
break; |
|
|
|
if (CoreBrains[(int)bt] == null) |
|
|
|
{ |
|
|
|
CoreBrains[(int)bt] = |
|
|
|
CoreBrains[(int)bt] = |
|
|
|
ScriptableObject.CreateInstance( |
|
|
|
"CoreBrain" + bt.ToString()); |
|
|
|
} |
|
|
|
|
|
|
if (CoreBrains.Length < System.Enum.GetValues(typeof(BrainType)).Length) |
|
|
|
{ |
|
|
|
int numCoreBrains = System.Enum.GetValues(typeof(BrainType)).Length; |
|
|
|
ScriptableObject[] new_CoreBrains = |
|
|
|
ScriptableObject[] new_CoreBrains = |
|
|
|
new ScriptableObject[numCoreBrains]; |
|
|
|
foreach (BrainType bt in System.Enum.GetValues(typeof(BrainType))) |
|
|
|
{ |
|
|
|
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
new_CoreBrains[(int)bt] = |
|
|
|
new_CoreBrains[(int)bt] = |
|
|
|
ScriptableObject.CreateInstance( |
|
|
|
"CoreBrain" + bt.ToString()); |
|
|
|
} |
|
|
|
|
|
|
{ |
|
|
|
if (CoreBrains[(int)bt] == null) |
|
|
|
{ |
|
|
|
CoreBrains[(int)bt] = |
|
|
|
CoreBrains[(int)bt] = |
|
|
|
CoreBrains[(int)bt] = |
|
|
|
CoreBrains[(int)bt] = |
|
|
|
ScriptableObject.Instantiate(CoreBrains[(int)bt]); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
UpdateCoreBrains(); |
|
|
|
coreBrain.InitializeCoreBrain(communicator); |
|
|
|
aca.BrainDecideAction += DecideAction; |
|
|
|
isInitialized = true; |
|
|
|
agentInfos.Add(agent, info); |
|
|
|
// If the brain is not active or not properly initialized, an error is
|
|
|
|
// thrown.
|
|
|
|
if (!gameObject.activeSelf) |
|
|
|
{ |
|
|
|
throw new UnityAgentsException( |
|
|
|
string.Format("Agent {0} tried to request an action " + |
|
|
|
"from brain {1} but it is not active.", |
|
|
|
agent.gameObject.name, gameObject.name)); |
|
|
|
} |
|
|
|
else if (!isInitialized) |
|
|
|
{ |
|
|
|
throw new UnityAgentsException( |
|
|
|
string.Format("Agent {0} tried to request an action " + |
|
|
|
"from brain {1} but it was not initialized.", |
|
|
|
agent.gameObject.name, gameObject.name)); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
agentInfos.Add(agent, info); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|