ToolCoreJS.cpp 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  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 <Atomic/Atomic3D/Animation.h>
  8. #include <AtomicJS/Javascript/JSVM.h>
  9. #include <ToolCore/ToolEnvironment.h>
  10. #include <ToolCore/ToolSystem.h>
  11. #include <ToolCore/Assets/AssetDatabase.h>
  12. #include <ToolCore/Project/Project.h>
  13. #include <ToolCore/License/LicenseSystem.h>
  14. #include <ToolCore/Build/BuildSystem.h>
  15. #include <ToolCore/Assets/ModelImporter.h>
  16. using namespace Atomic;
  17. namespace Atomic
  18. {
  19. extern void jsb_package_toolcore_init(JSVM* vm);
  20. }
  21. namespace ToolCore
  22. {
  23. static int js_atomic_GetToolEnvironment(duk_context* ctx)
  24. {
  25. JSVM* vm = JSVM::GetJSVM(ctx);
  26. js_push_class_object_instance(ctx, vm->GetSubsystem<ToolEnvironment>());
  27. return 1;
  28. }
  29. static int js_atomic_GetToolSystem(duk_context* ctx)
  30. {
  31. JSVM* vm = JSVM::GetJSVM(ctx);
  32. js_push_class_object_instance(ctx, vm->GetSubsystem<ToolSystem>());
  33. return 1;
  34. }
  35. static int js_atomic_GetLicenseSystem(duk_context* ctx)
  36. {
  37. JSVM* vm = JSVM::GetJSVM(ctx);
  38. js_push_class_object_instance(ctx, vm->GetSubsystem<LicenseSystem>());
  39. return 1;
  40. }
  41. static int js_atomic_GetAssetDatabase(duk_context* ctx)
  42. {
  43. JSVM* vm = JSVM::GetJSVM(ctx);
  44. js_push_class_object_instance(ctx, vm->GetSubsystem<AssetDatabase>());
  45. return 1;
  46. }
  47. static int AssetDatabase_GetFolderAssets(duk_context* ctx)
  48. {
  49. JSVM* vm = JSVM::GetJSVM(ctx);
  50. ToolSystem* ts = vm->GetSubsystem<ToolSystem>();
  51. AssetDatabase* db = vm->GetSubsystem<AssetDatabase>();
  52. Project* project = ts->GetProject();
  53. String folder = duk_require_string(ctx, 0);
  54. duk_push_array(ctx);
  55. if (!project)
  56. return 1;
  57. PODVector<Asset*> assets;
  58. db->GetFolderAssets(folder, assets);
  59. for(unsigned i = 0; i < assets.Size(); i++)
  60. {
  61. js_push_class_object_instance(ctx, assets[i], 0);
  62. duk_put_prop_index(ctx, -2, i);
  63. }
  64. return 1;
  65. }
  66. static int AssetDatabase_GetAssetsByImporterType(duk_context* ctx)
  67. {
  68. JSVM* vm = JSVM::GetJSVM(ctx);
  69. ToolSystem* ts = vm->GetSubsystem<ToolSystem>();
  70. AssetDatabase* db = vm->GetSubsystem<AssetDatabase>();
  71. Project* project = ts->GetProject();
  72. StringHash type = duk_require_string(ctx, 0);
  73. String resourceType = duk_require_string(ctx, 1);
  74. duk_push_array(ctx);
  75. if (!project)
  76. return 1;
  77. PODVector<Asset*> assets;
  78. db->GetAssetsByImporterType(type, resourceType, assets);
  79. for(unsigned i = 0; i < assets.Size(); i++)
  80. {
  81. js_push_class_object_instance(ctx, assets[i], 0);
  82. duk_put_prop_index(ctx, -2, i);
  83. }
  84. return 1;
  85. }
  86. static int ModelImporter_GetAnimations(duk_context* ctx)
  87. {
  88. duk_push_this(ctx);
  89. ModelImporter* importer = js_to_class_instance<ModelImporter>(ctx, -1, 0);
  90. PODVector<Animation*> animations;
  91. importer->GetAnimations(animations);
  92. duk_push_array(ctx);
  93. for(unsigned i = 0; i < animations.Size(); i++)
  94. {
  95. js_push_class_object_instance(ctx, animations[i], 0);
  96. duk_put_prop_index(ctx, -2, i);
  97. }
  98. return 1;
  99. }
  100. void jsapi_init_toolcore(JSVM* vm)
  101. {
  102. duk_context* ctx = vm->GetJSContext();
  103. jsb_package_toolcore_init(vm);
  104. duk_get_global_string(ctx, "ToolCore");
  105. duk_push_c_function(ctx, js_atomic_GetToolEnvironment, 0);
  106. duk_put_prop_string(ctx, -2, "getToolEnvironment");
  107. js_push_class_object_instance(ctx, vm->GetSubsystem<ToolEnvironment>(), "ToolEnvironment");
  108. duk_put_prop_string(ctx, -2, "toolEnvironment");
  109. duk_push_c_function(ctx, js_atomic_GetToolSystem, 0);
  110. duk_put_prop_string(ctx, -2, "getToolSystem");
  111. js_push_class_object_instance(ctx, vm->GetSubsystem<ToolSystem>(), "ToolSystem");
  112. duk_put_prop_string(ctx, -2, "toolSystem");
  113. js_push_class_object_instance(ctx, vm->GetSubsystem<BuildSystem>(), "BuildSystem");
  114. duk_put_prop_string(ctx, -2, "buildSystem");
  115. duk_push_c_function(ctx, js_atomic_GetLicenseSystem, 0);
  116. duk_put_prop_string(ctx, -2, "getLicenseSystem");
  117. js_push_class_object_instance(ctx, vm->GetSubsystem<LicenseSystem>(), "LicenseSystem");
  118. duk_put_prop_string(ctx, -2, "licenseSystem");
  119. duk_push_c_function(ctx, js_atomic_GetAssetDatabase, 0);
  120. duk_put_prop_string(ctx, -2, "getAssetDatabase");
  121. js_push_class_object_instance(ctx, vm->GetSubsystem<AssetDatabase>(), "AssetDatabase");
  122. duk_put_prop_string(ctx, -2, "assetDatabase");
  123. duk_pop(ctx);
  124. js_class_get_prototype(ctx, "ToolCore", "AssetDatabase");
  125. duk_push_c_function(ctx, AssetDatabase_GetFolderAssets, 1);
  126. duk_put_prop_string(ctx, -2, "getFolderAssets");
  127. duk_push_c_function(ctx, AssetDatabase_GetAssetsByImporterType, 2);
  128. duk_put_prop_string(ctx, -2, "getAssetsByImporterType");
  129. duk_pop(ctx);
  130. js_class_get_prototype(ctx, "ToolCore", "ModelImporter");
  131. duk_push_c_function(ctx, ModelImporter_GetAnimations, 0);
  132. duk_put_prop_string(ctx, -2, "getAnimations");
  133. duk_pop(ctx);
  134. }
  135. }