public static void Initialize() { ScriptFolder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Scripts"); //CompileAsync(); lock (SynchronizeLock) { var typeScripts = Assembly.GetExecutingAssembly().GetTypes() .Where(t => t.IsSubclassOf(typeof(Script))); foreach (var t in typeScripts) { RegistrationQueue.Enqueue(t); } } }
public static void Pulse() { lock (SynchronizeLock) { while (RegistrationQueue.Count > 0) { Register(RegistrationQueue.Dequeue()); } foreach (var script in Scripts) { CurrentScript = script; script.Tick(); } CurrentScript = null; } }
private static void AnalyzeAssembly(Assembly asm) { Log.WriteLine("Analyzing compiled assembly {0}", asm.FullName); var types = asm.GetTypes(); Log.WriteLine("Found {0} types", types.Length); lock (SynchronizeLock) { foreach (var type in types) { if (!type.IsClass || !type.IsSubclassOf(typeof(Script))) { Log.WriteLine("Ignoring {0}", type.Name); continue; } RegistrationQueue.Enqueue(type); } } }
public static void Pulse() { if (!Manager.IsInGame) { return; } lock (SynchronizeLock) { while (RegistrationQueue.Count > 0) { Register(RegistrationQueue.Dequeue()); } foreach (var script in ScriptPool) { CurrentScript = script; script.Tick(); } CurrentScript = null; } }