PlayerApp.cs 2.1 KB

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