AEEditorMode.cpp 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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/Project/Project.h>
  8. #include "AEEditorMode.h"
  9. using namespace ToolCore;
  10. namespace AtomicEditor
  11. {
  12. EditorMode::EditorMode(Context* context) :
  13. Object(context)
  14. {
  15. SubscribeToEvent(E_IPCWORKERSTART, HANDLER(EditorMode, HandleIPCWorkerStarted));
  16. }
  17. EditorMode::~EditorMode()
  18. {
  19. }
  20. void EditorMode::HandleIPCWorkerStarted(StringHash eventType, VariantMap& eventData)
  21. {
  22. VariantMap weventData;
  23. weventData[HelloFromBroker::P_HELLO] = "Hello";
  24. weventData[HelloFromBroker::P_LIFETHEUNIVERSEANDEVERYTHING] = 42;
  25. playerBroker_->PostMessage(E_IPCHELLOFROMBROKER, weventData);
  26. }
  27. void EditorMode::HandleIPCWorkerExit(StringHash eventType, VariantMap& eventData)
  28. {
  29. //SendEvent(E_EDITORPLAYSTOP);
  30. }
  31. bool EditorMode::PlayProject()
  32. {
  33. ToolEnvironment* env = GetSubsystem<ToolEnvironment>();
  34. ToolSystem* tsystem = GetSubsystem<ToolSystem>();
  35. const String& editorBinary = env->GetEditorBinary();
  36. Project* project = tsystem->GetProject();
  37. Vector<String> paths;
  38. paths.Push(env->GetCoreDataDir());
  39. paths.Push(env->GetPlayerDataDir());
  40. paths.Push(project->GetResourcePath());
  41. // fixme: this is for loading from cache
  42. paths.Push(project->GetProjectPath());
  43. paths.Push(project->GetProjectPath() + "Cache");
  44. String resourcePaths;
  45. resourcePaths.Join(paths, "!");
  46. Vector<String> vargs;
  47. String args = ToString("--player --project \"%s\"", AddTrailingSlash(project->GetProjectPath()).CString());
  48. vargs = args.Split(' ');
  49. String dump;
  50. dump.Join(vargs, " ");
  51. LOGINFOF("Launching Broker %s %s", editorBinary.CString(), dump.CString());
  52. IPC* ipc = GetSubsystem<IPC>();
  53. playerBroker_ = ipc->SpawnWorker(editorBinary, vargs);
  54. if (playerBroker_)
  55. {
  56. SubscribeToEvent(playerBroker_, E_IPCWORKEREXIT, HANDLER(EditorMode, HandleIPCWorkerExit));
  57. }
  58. return playerBroker_.NotNull();
  59. }
  60. }