ToolCoreJS.cpp 3.8 KB

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