NETIPCPlayerApp.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. using System;
  2. using System.Reflection;
  3. namespace AtomicEngine
  4. {
  5. public partial class PlayerApp : AppBase
  6. {
  7. protected static void ExecuteAtomicMain(string[] args)
  8. {
  9. var file = AtomicNET.Cache.GetFile("AtomicProject.dll");
  10. if (file == null)
  11. return;
  12. Assembly assembly = Assembly.LoadFrom(file.FullPath);
  13. if (assembly == null)
  14. return;
  15. Type atomicMainType = null;
  16. Type[] assemblyTypes = assembly.GetTypes();
  17. for (int j = 0; j < assemblyTypes.Length; j++)
  18. {
  19. if (assemblyTypes[j].Name == "AtomicMain")
  20. {
  21. atomicMainType = assemblyTypes[j];
  22. break;
  23. }
  24. }
  25. if (atomicMainType == null)
  26. return;
  27. Type[] mainParms = new Type[1] { typeof(string[]) };
  28. var method = atomicMainType.GetMethod("Main", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic, Type.DefaultBinder, mainParms, null);
  29. if (method == null)
  30. return;
  31. Object[] parms = new Object[1] { args };
  32. method.Invoke(null, parms);
  33. }
  34. }
  35. public partial class NETIPCPlayerApp : IPCPlayerApp
  36. {
  37. public static NETIPCPlayerApp Create(string[] args, bool headless = false)
  38. {
  39. // Initialize AtomicNET
  40. AtomicNET.Initialize();
  41. var app = CreateInternal();
  42. app.Initialize();
  43. // TODO: Refactor these registrations
  44. AtomicNET.RegisterSubsystem("FileSystem");
  45. AtomicNET.RegisterSubsystem("Graphics");
  46. AtomicNET.RegisterSubsystem("Player");
  47. AtomicNET.RegisterSubsystem("Input");
  48. AtomicNET.RegisterSubsystem("Renderer");
  49. AtomicNET.RegisterSubsystem("ResourceCache");
  50. AtomicNET.Cache = AtomicNET.GetSubsystem<ResourceCache>();
  51. ExecuteAtomicMain(args);
  52. return app;
  53. }
  54. }
  55. }