| using System; | |
| namespace Unity.MLAgents | |
| { | |
| /// <summary> | |
| /// Factory class for an ICommunicator instance. This is used to the <see cref="Academy"/> at startup. | |
| /// By default, on desktop platforms, an ICommunicator will be created and attempt to connect | |
| /// to a trainer. This behavior can be prevented by setting <see cref="CommunicatorFactory.Enabled"/> to false | |
| /// *before* the <see cref="Academy"/> is initialized. | |
| /// </summary> | |
| public static class CommunicatorFactory | |
| { | |
| static Func<ICommunicator> s_Creator; | |
| static bool s_Enabled = true; | |
| /// <summary> | |
| /// Whether or not an ICommunicator instance will be created when the <see cref="Academy"/> is initialized. | |
| /// Changing this has no effect after the <see cref="Academy"/> has already been initialized. | |
| /// </summary> | |
| public static bool Enabled | |
| { | |
| get => s_Enabled; | |
| set => s_Enabled = value; | |
| } | |
| public static bool CommunicatorRegistered => s_Creator != null; | |
| internal static ICommunicator Create() | |
| { | |
| return s_Enabled ? s_Creator() : null; | |
| } | |
| public static void Register<T>(Func<T> creator) where T : ICommunicator | |
| { | |
| s_Creator = () => creator(); | |
| } | |
| public static void ClearCreator() | |
| { | |
| s_Creator = null; | |
| } | |
| } | |
| } | |