ToolCoreJS.cpp 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. //
  2. // Copyright (c) 2014-2015, THUNDERBEAST GAMES LLC All rights reserved
  3. // LICENSE: Atomic Game Engine Editor and Tools EULA
  4. // Please see LICENSE_ATOMIC_EDITOR_AND_TOOLS.md in repository root for
  5. // license information: https://github.com/AtomicGameEngine/AtomicGameEngine
  6. //
  7. #include <AtomicJS/Javascript/JSVM.h>
  8. #include <ToolCore/ToolEnvironment.h>
  9. #include <ToolCore/ToolSystem.h>
  10. #include <ToolCore/Assets/AssetDatabase.h>
  11. #include <ToolCore/Project/Project.h>
  12. #include <ToolCore/License/LicenseSystem.h>
  13. #include <ToolCore/Build/BuildSystem.h>
  14. using namespace Atomic;
  15. namespace Atomic
  16. {
  17. extern void jsb_package_toolcore_init(JSVM* vm);
  18. }
  19. namespace ToolCore
  20. {
  21. static int js_atomic_GetToolEnvironment(duk_context* ctx)
  22. {
  23. JSVM* vm = JSVM::GetJSVM(ctx);
  24. js_push_class_object_instance(ctx, vm->GetSubsystem<ToolEnvironment>());
  25. return 1;
  26. }
  27. static int js_atomic_GetToolSystem(duk_context* ctx)
  28. {
  29. JSVM* vm = JSVM::GetJSVM(ctx);
  30. js_push_class_object_instance(ctx, vm->GetSubsystem<ToolSystem>());
  31. return 1;
  32. }
  33. static int js_atomic_GetLicenseSystem(duk_context* ctx)
  34. {
  35. JSVM* vm = JSVM::GetJSVM(ctx);
  36. js_push_class_object_instance(ctx, vm->GetSubsystem<LicenseSystem>());
  37. return 1;
  38. }
  39. static int js_atomic_GetAssetDatabase(duk_context* ctx)
  40. {
  41. JSVM* vm = JSVM::GetJSVM(ctx);
  42. js_push_class_object_instance(ctx, vm->GetSubsystem<AssetDatabase>());
  43. return 1;
  44. }
  45. static int AssetDatabase_GetFolderAssets(duk_context* ctx)
  46. {
  47. JSVM* vm = JSVM::GetJSVM(ctx);
  48. ToolSystem* ts = vm->GetSubsystem<ToolSystem>();
  49. AssetDatabase* db = vm->GetSubsystem<AssetDatabase>();
  50. Project* project = ts->GetProject();
  51. String folder = duk_require_string(ctx, 0);
  52. duk_push_array(ctx);
  53. if (!project)
  54. return 1;
  55. PODVector<Asset*> assets;
  56. db->GetFolderAssets(folder, assets);
  57. for(unsigned i = 0; i < assets.Size(); i++)
  58. {
  59. js_push_class_object_instance(ctx, assets[i], 0);
  60. duk_put_prop_index(ctx, -2, i);
  61. }
  62. return 1;
  63. }
  64. static int AssetDatabase_GetAssetsByImporterType(duk_context* ctx)
  65. {
  66. JSVM* vm = JSVM::GetJSVM(ctx);
  67. ToolSystem* ts = vm->GetSubsystem<ToolSystem>();
  68. AssetDatabase* db = vm->GetSubsystem<AssetDatabase>();
  69. Project* project = ts->GetProject();
  70. StringHash type = duk_require_string(ctx, 0);
  71. duk_push_array(ctx);
  72. if (!project)
  73. return 1;
  74. PODVector<Asset*> assets;
  75. db->GetAssetsByImporterType(type, assets);
  76. for(unsigned i = 0; i < assets.Size(); i++)
  77. {
  78. js_push_class_object_instance(ctx, assets[i], 0);
  79. duk_put_prop_index(ctx, -2, i);
  80. }
  81. return 1;
  82. }
  83. void jsapi_init_toolcore(JSVM* vm)
  84. {
  85. duk_context* ctx = vm->GetJSContext();
  86. jsb_package_toolcore_init(vm);
  87. duk_get_global_string(ctx, "ToolCore");
  88. duk_push_c_function(ctx, js_atomic_GetToolEnvironment, 0);
  89. duk_put_prop_string(ctx, -2, "getToolEnvironment");
  90. js_push_class_object_instance(ctx, vm->GetSubsystem<ToolEnvironment>(), "ToolEnvironment");
  91. duk_put_prop_string(ctx, -2, "toolEnvironment");
  92. duk_push_c_function(ctx, js_atomic_GetToolSystem, 0);
  93. duk_put_prop_string(ctx, -2, "getToolSystem");
  94. js_push_class_object_instance(ctx, vm->GetSubsystem<ToolSystem>(), "ToolSystem");
  95. duk_put_prop_string(ctx, -2, "toolSystem");
  96. js_push_class_object_instance(ctx, vm->GetSubsystem<BuildSystem>(), "BuildSystem");
  97. duk_put_prop_string(ctx, -2, "buildSystem");
  98. duk_push_c_function(ctx, js_atomic_GetLicenseSystem, 0);
  99. duk_put_prop_string(ctx, -2, "getLicenseSystem");
  100. js_push_class_object_instance(ctx, vm->GetSubsystem<LicenseSystem>(), "LicenseSystem");
  101. duk_put_prop_string(ctx, -2, "licenseSystem");
  102. duk_push_c_function(ctx, js_atomic_GetAssetDatabase, 0);
  103. duk_put_prop_string(ctx, -2, "getAssetDatabase");
  104. js_push_class_object_instance(ctx, vm->GetSubsystem<AssetDatabase>(), "AssetDatabase");
  105. duk_put_prop_string(ctx, -2, "assetDatabase");
  106. duk_pop(ctx);
  107. js_class_get_prototype(ctx, "ToolCore", "AssetDatabase");
  108. duk_push_c_function(ctx, AssetDatabase_GetFolderAssets, 1);
  109. duk_put_prop_string(ctx, -2, "getFolderAssets");
  110. duk_push_c_function(ctx, AssetDatabase_GetAssetsByImporterType, 1);
  111. duk_put_prop_string(ctx, -2, "getAssetsByImporterType");
  112. duk_pop(ctx);
  113. }
  114. }