BsScriptCodeEditor.cpp 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "Wrappers/BsScriptCodeEditor.h"
  4. #include "BsScriptMeta.h"
  5. #include "BsMonoField.h"
  6. #include "BsMonoClass.h"
  7. #include "BsMonoMethod.h"
  8. #include "BsMonoManager.h"
  9. #include "BsMonoUtil.h"
  10. #include "CodeEditor/BsCodeEditor.h"
  11. #include "BsEngineScriptLibrary.h"
  12. #include "BsEditorScriptLibrary.h"
  13. using namespace std::placeholders;
  14. namespace bs
  15. {
  16. ScriptCodeEditor::ScriptCodeEditor(MonoObject* instance)
  17. :ScriptObject(instance)
  18. { }
  19. void ScriptCodeEditor::initRuntimeData()
  20. {
  21. metaData.scriptClass->addInternalCall("Internal_SetActiveEditor", (void*)&ScriptCodeEditor::internal_SetActiveEditor);
  22. metaData.scriptClass->addInternalCall("Internal_GetActiveEditor", (void*)&ScriptCodeEditor::internal_GetActiveEditor);
  23. metaData.scriptClass->addInternalCall("Internal_GetAvailableEditors", (void*)&ScriptCodeEditor::internal_GetAvailableEditors);
  24. metaData.scriptClass->addInternalCall("Internal_OpenFile", (void*)&ScriptCodeEditor::internal_OpenFile);
  25. metaData.scriptClass->addInternalCall("Internal_SyncSolution", (void*)&ScriptCodeEditor::internal_SyncSolution);
  26. metaData.scriptClass->addInternalCall("Internal_GetSolutionPath", (void*)&ScriptCodeEditor::internal_GetSolutionPath);
  27. }
  28. CodeEditorType ScriptCodeEditor::internal_GetActiveEditor()
  29. {
  30. return CodeEditorManager::instance().getActive();
  31. }
  32. void ScriptCodeEditor::internal_SetActiveEditor(CodeEditorType type)
  33. {
  34. CodeEditorManager::instance().setActive(type);
  35. }
  36. MonoArray* ScriptCodeEditor::internal_GetAvailableEditors()
  37. {
  38. Vector<CodeEditorType> availableEditors = CodeEditorManager::instance().getAvailableEditors();
  39. ScriptArray outArray = ScriptArray::create<INT32>((UINT32)availableEditors.size());
  40. UINT32 idx = 0;
  41. for (auto& entry : availableEditors)
  42. {
  43. outArray.set(idx, (INT32)entry);
  44. idx++;
  45. }
  46. return outArray.getInternal();
  47. }
  48. void ScriptCodeEditor::internal_OpenFile(MonoString* path, UINT32 line)
  49. {
  50. Path filePath = MonoUtil::monoToString(path);
  51. CodeEditorManager::instance().openFile(filePath, line);
  52. }
  53. void ScriptCodeEditor::internal_SyncSolution()
  54. {
  55. CodeEditorManager::instance().syncSolution(SCRIPT_GAME_ASSEMBLY,
  56. CodeProjectReference { ENGINE_ASSEMBLY, EngineScriptLibrary::instance().getEngineAssemblyPath() },
  57. CodeProjectReference { EDITOR_ASSEMBLY, EditorScriptLibrary::instance().getEditorAssemblyPath() });
  58. }
  59. MonoString* ScriptCodeEditor::internal_GetSolutionPath()
  60. {
  61. return MonoUtil::stringToMono(CodeEditorManager::instance().getSolutionPath().toString());
  62. }
  63. }