ToolCoreJS.cpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  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. using namespace Atomic;
  7. namespace Atomic
  8. {
  9. extern void jsb_package_toolcore_init(JSVM* vm);
  10. }
  11. namespace ToolCore
  12. {
  13. static int js_atomic_GetToolEnvironment(duk_context* ctx)
  14. {
  15. JSVM* vm = JSVM::GetJSVM(ctx);
  16. js_push_class_object_instance(ctx, vm->GetSubsystem<ToolEnvironment>());
  17. return 1;
  18. }
  19. static int js_atomic_GetToolSystem(duk_context* ctx)
  20. {
  21. JSVM* vm = JSVM::GetJSVM(ctx);
  22. js_push_class_object_instance(ctx, vm->GetSubsystem<ToolSystem>());
  23. return 1;
  24. }
  25. static int js_atomic_GetAssetDatabase(duk_context* ctx)
  26. {
  27. JSVM* vm = JSVM::GetJSVM(ctx);
  28. js_push_class_object_instance(ctx, vm->GetSubsystem<AssetDatabase>());
  29. return 1;
  30. }
  31. static int AssetDatabase_GetFolderAssets(duk_context* ctx)
  32. {
  33. JSVM* vm = JSVM::GetJSVM(ctx);
  34. ToolSystem* ts = vm->GetSubsystem<ToolSystem>();
  35. AssetDatabase* db = vm->GetSubsystem<AssetDatabase>();
  36. Project* project = ts->GetProject();
  37. String folder = duk_require_string(ctx, 0);
  38. duk_push_array(ctx);
  39. if (!project)
  40. return 1;
  41. PODVector<Asset*> assets;
  42. db->GetFolderAssets(folder, assets);
  43. for(unsigned i = 0; i < assets.Size(); i++)
  44. {
  45. js_push_class_object_instance(ctx, assets[i], 0);
  46. duk_put_prop_index(ctx, -2, i);
  47. }
  48. return 1;
  49. }
  50. static int AssetDatabase_GetAssetsByImporterType(duk_context* ctx)
  51. {
  52. JSVM* vm = JSVM::GetJSVM(ctx);
  53. ToolSystem* ts = vm->GetSubsystem<ToolSystem>();
  54. AssetDatabase* db = vm->GetSubsystem<AssetDatabase>();
  55. Project* project = ts->GetProject();
  56. StringHash type = duk_require_string(ctx, 0);
  57. duk_push_array(ctx);
  58. if (!project)
  59. return 1;
  60. PODVector<Asset*> assets;
  61. db->GetAssetsByImporterType(type, assets);
  62. for(unsigned i = 0; i < assets.Size(); i++)
  63. {
  64. js_push_class_object_instance(ctx, assets[i], 0);
  65. duk_put_prop_index(ctx, -2, i);
  66. }
  67. return 1;
  68. }
  69. void jsapi_init_toolcore(JSVM* vm)
  70. {
  71. duk_context* ctx = vm->GetJSContext();
  72. duk_push_object(ctx);
  73. duk_put_global_string(ctx, "ToolCore");
  74. jsb_package_toolcore_init(vm);
  75. duk_get_global_string(ctx, "ToolCore");
  76. duk_push_c_function(ctx, js_atomic_GetToolEnvironment, 0);
  77. duk_put_prop_string(ctx, -2, "getToolEnvironment");
  78. duk_push_c_function(ctx, js_atomic_GetToolSystem, 0);
  79. duk_put_prop_string(ctx, -2, "getToolSystem");
  80. duk_push_c_function(ctx, js_atomic_GetAssetDatabase, 0);
  81. duk_put_prop_string(ctx, -2, "getAssetDatabase");
  82. duk_pop(ctx);
  83. js_class_get_prototype(ctx, "ToolCore", "AssetDatabase");
  84. duk_push_c_function(ctx, AssetDatabase_GetFolderAssets, 1);
  85. duk_put_prop_string(ctx, -2, "getFolderAssets");
  86. duk_push_c_function(ctx, AssetDatabase_GetAssetsByImporterType, 1);
  87. duk_put_prop_string(ctx, -2, "getAssetsByImporterType");
  88. duk_pop(ctx);
  89. }
  90. }