AEEditorMode.cpp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. #include <Atomic/IO/Log.h>
  2. #include <Atomic/IPC/IPC.h>
  3. #include <Atomic/IPC/IPCEvents.h>
  4. #include <Atomic/IPC/IPCBroker.h>
  5. #include <ToolCore/ToolEnvironment.h>
  6. #include <ToolCore/ToolSystem.h>
  7. #include <ToolCore/License/LicenseSystem.h>
  8. #include <ToolCore/Project/Project.h>
  9. #include <AtomicJS/Javascript/JSIPCEvents.h>
  10. #include <Atomic/UI/SystemUI/DebugHud.h>
  11. #include "AEEditorMode.h"
  12. using namespace ToolCore;
  13. namespace AtomicEditor
  14. {
  15. EditorMode::EditorMode(Context* context) :
  16. Object(context)
  17. {
  18. SubscribeToEvent(E_IPCWORKERSTART, HANDLER(EditorMode, HandleIPCWorkerStarted));
  19. }
  20. EditorMode::~EditorMode()
  21. {
  22. }
  23. void EditorMode::HandleIPCWorkerStarted(StringHash eventType, VariantMap& eventData)
  24. {
  25. LicenseSystem* licenseSystem = GetSubsystem<LicenseSystem>();
  26. VariantMap startupData;
  27. SystemUI::DebugHud* debugHud = GetSubsystem<SystemUI::DebugHud>();
  28. // BEGIN LICENSE MANAGEMENT
  29. startupData["license3D"] = licenseSystem->GetLicenseModule3D();
  30. // END LICENSE MANAGEMENT
  31. startupData["debugHudMode"] = debugHud ? debugHud->GetMode() : (unsigned) 0;
  32. playerBroker_->PostMessage(E_IPCINITIALIZE, startupData);
  33. SendEvent("EditorPlayerStarted");
  34. }
  35. void EditorMode::HandleIPCWorkerExit(StringHash eventType, VariantMap& eventData)
  36. {
  37. //SendEvent(E_EDITORPLAYSTOP);
  38. }
  39. void EditorMode::HandleIPCWorkerLog(StringHash eventType, VariantMap& eventData)
  40. {
  41. using namespace IPCWorkerLog;
  42. // convert to a player log
  43. VariantMap playerLogData;
  44. playerLogData["message"] = eventData[P_MESSAGE].GetString();
  45. playerLogData["level"] = eventData[P_LEVEL].GetInt();
  46. SendEvent("EditorPlayerLog", playerLogData);
  47. }
  48. void EditorMode::HandleIPCJSError(StringHash eventType, VariantMap& eventData)
  49. {
  50. }
  51. bool EditorMode::PlayProject()
  52. {
  53. ToolEnvironment* env = GetSubsystem<ToolEnvironment>();
  54. ToolSystem* tsystem = GetSubsystem<ToolSystem>();
  55. const String& editorBinary = env->GetEditorBinary();
  56. Project* project = tsystem->GetProject();
  57. if (!project)
  58. return false;
  59. Vector<String> paths;
  60. paths.Push(env->GetCoreDataDir());
  61. paths.Push(env->GetPlayerDataDir());
  62. paths.Push(project->GetResourcePath());
  63. // fixme: this is for loading from cache
  64. paths.Push(project->GetProjectPath());
  65. paths.Push(project->GetProjectPath() + "Cache");
  66. String resourcePaths;
  67. resourcePaths.Join(paths, "!");
  68. Vector<String> vargs;
  69. String args = ToString("--player --project \"%s\"", AddTrailingSlash(project->GetProjectPath()).CString());
  70. vargs = args.Split(' ');
  71. String dump;
  72. dump.Join(vargs, " ");
  73. LOGINFOF("Launching Broker %s %s", editorBinary.CString(), dump.CString());
  74. IPC* ipc = GetSubsystem<IPC>();
  75. playerBroker_ = ipc->SpawnWorker(editorBinary, vargs);
  76. if (playerBroker_)
  77. {
  78. SubscribeToEvent(playerBroker_, E_IPCJSERROR, HANDLER(EditorMode, HandleIPCJSError));
  79. SubscribeToEvent(playerBroker_, E_IPCWORKEREXIT, HANDLER(EditorMode, HandleIPCWorkerExit));
  80. SubscribeToEvent(playerBroker_, E_IPCWORKERLOG, HANDLER(EditorMode, HandleIPCWorkerLog));
  81. }
  82. return playerBroker_.NotNull();
  83. }
  84. }