/// <summary> /// Registers an <see cref="ISharperSystem{T}"/> to the Game. This should not be called from external code. /// </summary> /// <param name="system">The target system to register.</param> public void RegisterSystem <T>(T system) where T : ISharperSystem { if (Systems.Contains(system) || Systems.Any(x => x.GetType() == system.GetType())) { throw new DuplicateSharperObjectException(); } Systems.Add(system); }
/// <summary> /// Registers an <see cref="ISharperSystem{T}"/> to the Game. This should not be called from external code. /// </summary> /// <param name="system">The target system to register.</param> public void RegisterSystem(ISharperSystem <BaseSharperComponent> system) { if (Systems.Contains(system) || Systems.Any(x => x.GetType() == system.GetType())) { throw new DuplicateSharperObjectException(); } Systems.Add(system); }
public void RemoveSystem(BaseSystem system) { if (Systems.Contains(system)) { Systems.Remove(system); } else { System.Diagnostics.Debug.WriteLine($"System of type {system.GetType()} not registered."); } }
public void RegisterSystem(BaseSystem system) { if (Systems.Contains(system)) { System.Diagnostics.Debug.WriteLine($"System of type {system.GetType()} already registered."); } else { Systems.Add(system); } }
public void ProcessScript(string Command) { List <string> CommandParts; string Arguments = null; string TargetCommand = default; if (Command.Contains('(') && Command.Contains(')') && Command[Command.Length - 1] == ')') { for (int i = 0; i < Command.Length - 1; ++i) { if (Command[i] == '(') { TargetCommand = Command.Substring(0, i); if (i + 1 != Command.Length - 1) { Arguments = Command.Substring(i + 1, Command.Length - (i + 2)); } break; } } // Check for command bind string ResultCommand = ProcessCommandBinding(TargetCommand); if (ResultCommand != null) { TargetCommand = ResultCommand; } CommandParts = TargetCommand.Split('.').ToList(); if (CommandParts.Count != 5) { ConsoleSys.Error("Invalid command syntax"); ConsoleSys.Error("Have you tried using \"Help()\"?"); return; } if (TargetCommand != "Unary.Common.Shared.ConsoleSys.Message" && TargetCommand != "Unary.Common.Shared.ConsoleSys.Warning" && TargetCommand != "Unary.Common.Shared.ConsoleSys.Error" && TargetCommand != "Unary.Common.Shared.ConsoleSys.Panic") { ConsoleSys.Message("> " + Command); } } else { ConsoleSys.Error("Invalid command syntax"); ConsoleSys.Error("Have you tried using \"Help()\"?"); return; } string ModID = ModIDUtil.ModID(TargetCommand); if (!RegisteredCommands.ContainsKey(ModID)) { ConsoleSys.Error(ModID + " is an invalid ModID"); ConsoleSys.Error(GetModIDs()); return; } List <string> Systems; if (CommandParts[2] == "Shared") { Systems = Sys.Ref.Shared.Order; } else if (CommandParts[2] == "Client") { Systems = Sys.Ref.Client.Order; } else if (CommandParts[2] == "Server") { Systems = Sys.Ref.Server.Order; } else { ConsoleSys.Error(CommandParts[2] + " is an invalid System type"); ConsoleSys.Error(GetSystemTypes()); return; } string ModIDEntry = TargetCommand.GetPartsFromBeginToIndex('.', 3); SysType Type; if (!Systems.Contains(ModIDEntry)) { ConsoleSys.Error(CommandParts[2] + " is an invalid System ModIDEntry"); ConsoleSys.Error(GetSystems(CommandParts[2], Systems)); return; } Godot.Object TargetSystem = default; SysManager TargetManager; if (CommandParts[2] == "Shared") { TargetManager = Sys.Ref.Shared; } else if (CommandParts[2] == "Client") { TargetManager = Sys.Ref.Client; } else { TargetManager = Sys.Ref.Server; } Type = TargetManager.GetType(ModIDEntry); switch (Type) { case SysType.Object: TargetSystem = TargetManager.GetObject(ModIDEntry); break; case SysType.Node: TargetSystem = TargetManager.GetNode(ModIDEntry); break; case SysType.UI: TargetSystem = TargetManager.GetUI(ModIDEntry); break; } Type TargetType = TargetSystem.GetType(); MethodInfo[] Methods = TargetType.GetMethods().Where(m => m.DeclaringType == TargetType).ToArray(); MethodInfo TargetMethod = null; foreach (var Method in Methods) { if (Method.Name == CommandParts[4]) { TargetMethod = Method; break; } } if (TargetMethod == null) { ConsoleSys.Error(CommandParts[4] + " is an invalid method"); ConsoleSys.Error(GetMethods(Methods)); return; } ParameterInfo[] ArgumentsInfo = TargetMethod.GetParameters(); string ArgumentValues = '[' + Arguments + ']'; JArray Array; try { Array = JArray.Parse(ArgumentValues); } catch (Exception) { ConsoleSys.Error(Arguments + " is an invalid set of arguments"); ConsoleSys.Error(GetArguments(ArgumentsInfo)); return; } if (Array.Count != ArgumentsInfo.Length) { ConsoleSys.Error("Invalid ammount of arguments"); ConsoleSys.Error(GetArguments(ArgumentsInfo)); return; } List <object> FinalArguments = new List <object>(); for (int i = 0; i < Array.Count; ++i) { try { object Argument = JsonConvert.DeserializeObject(Array[i].ToString(Formatting.None), ArgumentsInfo[i].ParameterType); FinalArguments.Add(Argument); } catch (Exception) { ConsoleSys.Error(Array[i].ToString() + " is not matching an argument type of " + ArgumentsInfo[i].ParameterType); ConsoleSys.Error(GetArguments(ArgumentsInfo)); return; } } object CallResult = TargetSystem.Call(CommandParts[4], FinalArguments.ToArray()); if (CallResult != null) { ConsoleSys.Message(CallResult.ToString()); } }