JSAtomic3D.cpp 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #include <Atomic/Atomic3D/StaticModel.h>
  2. #include <Atomic/Atomic3D/CustomGeometry.h>
  3. #include "JSAtomic3D.h"
  4. namespace Atomic
  5. {
  6. static int StaticModel_SetMaterialIndex(duk_context* ctx) {
  7. unsigned index = (unsigned) duk_require_number(ctx, 0);
  8. Material* material = js_to_class_instance<Material>(ctx, 1, 0);
  9. duk_push_this(ctx);
  10. // event receiver
  11. StaticModel* model = js_to_class_instance<StaticModel>(ctx, -1, 0);
  12. model->SetMaterial(index, material);
  13. return 0;
  14. }
  15. static int CustomGeometry_SetMaterial(duk_context* ctx) {
  16. unsigned index = (unsigned)duk_require_number(ctx, 0);
  17. Material* material = js_to_class_instance<Material>(ctx, 1, 0);
  18. duk_push_this(ctx);
  19. // event receiver
  20. CustomGeometry* geometry = js_to_class_instance<CustomGeometry>(ctx, -1, 0);
  21. geometry->SetMaterial(index, material);
  22. return 0;
  23. }
  24. void jsapi_init_atomic3d(JSVM* vm)
  25. {
  26. duk_context* ctx = vm->GetJSContext();
  27. js_class_get_prototype(ctx, "Atomic", "StaticModel");
  28. duk_push_c_function(ctx, StaticModel_SetMaterialIndex, 2);
  29. duk_put_prop_string(ctx, -2, "setMaterialIndex");
  30. duk_pop(ctx); // pop AObject prototype
  31. js_class_get_prototype(ctx, "Atomic", "CustomGeometry");
  32. duk_push_c_function(ctx, CustomGeometry_SetMaterial, 2);
  33. duk_put_prop_string(ctx, -2, "setMaterial");
  34. duk_pop(ctx); // pop AObject prototype
  35. }
  36. }