void jsapi_init_graphics(JSVM* vm) { duk_context* ctx = vm->GetJSContext(); js_class_get_prototype(ctx, "Atomic", "Light"); duk_push_c_function(ctx, Light_SetShadowCascade, DUK_VARARGS); duk_put_prop_string(ctx, -2, "setShadowCascade"); duk_push_c_function(ctx, Light_SetShadowCascadeParameter, 2); duk_put_prop_string(ctx, -2, "setShadowCascadeParameter"); duk_push_c_function(ctx, Light_GetShadowCascade, 0); duk_put_prop_string(ctx, -2, "getShadowCascade"); duk_push_c_function(ctx, Light_SetShadowBias, 2); duk_put_prop_string(ctx, -2, "setShadowBias"); duk_pop(ctx); js_class_get_prototype(ctx, "Atomic", "Material"); duk_push_c_function(ctx, Material_GetShaderParameters, 0); duk_put_prop_string(ctx, -2, "getShaderParameters"); duk_push_c_function(ctx, Material_SetShaderParameter, 2); duk_put_prop_string(ctx, -2, "setShaderParameter"); duk_pop(ctx); // static methods js_class_get_constructor(ctx, "Atomic", "Material"); duk_push_c_function(ctx, Material_GetTextureUnitName, 1); duk_put_prop_string(ctx, -2, "getTextureUnitName"); duk_pop(ctx); }
void jsapi_init_ui(JSVM* vm) { duk_context* ctx = vm->GetJSContext(); // UI class object duk_get_global_string(ctx, "Atomic"); duk_get_prop_string(ctx, -1, "UI"); duk_push_c_function(ctx, UI_DebugGetWrappedWidgetCount, 0); duk_put_prop_string(ctx, -2, "debugGetWrappedWidgetCount"); duk_push_c_function(ctx, UI_DebugGetUIKeepAliveCount, 0); duk_put_prop_string(ctx, -2, "debugGetUIKeepAliveCount"); duk_push_c_function(ctx, UI_DebugShowSettingsWindow, 1); duk_put_prop_string(ctx, -2, "debugShowSettingsWindow"); duk_pop_2(ctx); js_class_get_prototype(ctx, "Atomic", "UIButton"); duk_push_c_function(ctx, UIButton_Popup, 2); duk_put_prop_string(ctx, -2, "popup"); duk_pop(ctx); js_class_get_prototype(ctx, "Atomic", "UIWindow"); duk_push_c_function(ctx, UIWindow_GetResizeToFitContentRect, 0); duk_put_prop_string(ctx, -2, "getResizeToFitContentRect"); duk_pop(ctx); }
void jsapi_init_atomic3d(JSVM* vm) { duk_context* ctx = vm->GetJSContext(); js_class_get_prototype(ctx, "Atomic", "StaticModel"); duk_push_c_function(ctx, StaticModel_SetMaterialIndex, 2); duk_put_prop_string(ctx, -2, "setMaterialIndex"); duk_pop(ctx); // pop AObject prototype js_class_get_prototype(ctx, "Atomic", "CustomGeometry"); duk_push_c_function(ctx, CustomGeometry_SetMaterialIndex, 2); duk_put_prop_string(ctx, -2, "setMaterialIndex"); duk_pop(ctx); // pop AObject prototype }
void jsapi_init_toolcore(JSVM* vm) { duk_context* ctx = vm->GetJSContext(); jsb_package_toolcore_init(vm); duk_get_global_string(ctx, "ToolCore"); duk_push_c_function(ctx, js_atomic_GetToolEnvironment, 0); duk_put_prop_string(ctx, -2, "getToolEnvironment"); js_push_class_object_instance(ctx, vm->GetSubsystem<ToolEnvironment>(), "ToolEnvironment"); duk_put_prop_string(ctx, -2, "toolEnvironment"); duk_push_c_function(ctx, js_atomic_GetToolSystem, 0); duk_put_prop_string(ctx, -2, "getToolSystem"); js_push_class_object_instance(ctx, vm->GetSubsystem<ToolSystem>(), "ToolSystem"); duk_put_prop_string(ctx, -2, "toolSystem"); js_push_class_object_instance(ctx, vm->GetSubsystem<BuildSystem>(), "BuildSystem"); duk_put_prop_string(ctx, -2, "buildSystem"); duk_push_c_function(ctx, js_atomic_GetLicenseSystem, 0); duk_put_prop_string(ctx, -2, "getLicenseSystem"); js_push_class_object_instance(ctx, vm->GetSubsystem<LicenseSystem>(), "LicenseSystem"); duk_put_prop_string(ctx, -2, "licenseSystem"); duk_push_c_function(ctx, js_atomic_GetAssetDatabase, 0); duk_put_prop_string(ctx, -2, "getAssetDatabase"); js_push_class_object_instance(ctx, vm->GetSubsystem<AssetDatabase>(), "AssetDatabase"); duk_put_prop_string(ctx, -2, "assetDatabase"); duk_pop(ctx); js_class_get_prototype(ctx, "ToolCore", "AssetDatabase"); duk_push_c_function(ctx, AssetDatabase_GetFolderAssets, 1); duk_put_prop_string(ctx, -2, "getFolderAssets"); duk_push_c_function(ctx, AssetDatabase_GetAssetsByImporterType, 2); duk_put_prop_string(ctx, -2, "getAssetsByImporterType"); duk_pop(ctx); js_class_get_prototype(ctx, "ToolCore", "ModelImporter"); duk_push_c_function(ctx, ModelImporter_GetAnimations, 0); duk_put_prop_string(ctx, -2, "getAnimations"); duk_pop(ctx); }
void jsapi_init_filesystem(JSVM* vm) { duk_context* ctx = vm->GetJSContext(); duk_get_global_string(ctx, "Atomic"); duk_push_c_function(ctx, Atomic_SplitPath, 1); duk_put_prop_string(ctx, -2, "splitPath"); duk_push_c_function(ctx, Atomic_AddTrailingSlash, 1); duk_put_prop_string(ctx, -2, "addTrailingSlash"); duk_push_c_function(ctx, Atomic_GetParentPath, 1); duk_put_prop_string(ctx, -2, "getParentPath"); duk_push_c_function(ctx, Atomic_GetExtenstion, 1); duk_put_prop_string(ctx, -2, "getExtension"); duk_pop(ctx); // pop Atomic object js_class_get_prototype(ctx, "Atomic", "FileSystem"); duk_push_c_function(ctx, FileSystem_ScanDir, 4); duk_put_prop_string(ctx, -2, "scanDir"); duk_pop(ctx); }
static void AddDeserializerMixin(duk_context* ctx, const String& package, const String& classname) { js_class_get_prototype(ctx, package.CString(), classname.CString()); duk_push_c_function(ctx, Deserializer_Read, 0); duk_set_magic(ctx, -1, (unsigned) VAR_INT); duk_put_prop_string(ctx, -2, "readInt"); duk_push_c_function(ctx, Deserializer_Read, 0); duk_set_magic(ctx, -1, (unsigned) IO_MAGIC_STRING); duk_put_prop_string(ctx, -2, "readString"); duk_push_c_function(ctx, Deserializer_Read, 0); duk_set_magic(ctx, -1, (unsigned) IO_MAGIC_ZEROSTRING); duk_put_prop_string(ctx, -2, "readZeroString"); duk_push_c_function(ctx, Deserializer_Read, 0); duk_set_magic(ctx, -1, (unsigned)IO_MAGIC_BINARY); duk_put_prop_string(ctx, -2, "readBinary"); duk_push_c_function(ctx, Deserializer_GetSize, 0); duk_put_prop_string(ctx, -2, "getSize"); duk_pop(ctx); }
void jsapi_init_graphics(JSVM* vm) { duk_context* ctx = vm->GetJSContext(); js_class_get_prototype(ctx, "Atomic", "Light"); duk_push_c_function(ctx, Light_SetShadowCascade, DUK_VARARGS); duk_put_prop_string(ctx, -2, "setShadowCascade"); duk_push_c_function(ctx, Light_SetShadowCascadeParameter, 2); duk_put_prop_string(ctx, -2, "setShadowCascadeParameter"); duk_push_c_function(ctx, Light_GetShadowCascade, 0); duk_put_prop_string(ctx, -2, "getShadowCascade"); duk_push_c_function(ctx, Light_SetShadowBias, 2); duk_put_prop_string(ctx, -2, "setShadowBias"); duk_pop(ctx); js_class_get_prototype(ctx, "Atomic", "Material"); duk_push_c_function(ctx, Material_GetShaderParameters, 0); duk_put_prop_string(ctx, -2, "getShaderParameters"); duk_push_c_function(ctx, Material_SetShaderParameter, 2); duk_put_prop_string(ctx, -2, "setShaderParameter"); duk_pop(ctx); js_class_get_prototype(ctx, "Atomic", "Octree"); duk_push_c_function(ctx, Octree_Raycast, DUK_VARARGS); duk_set_magic(ctx, -1, (unsigned) DUK_MAGIC_RAYCAST); duk_put_prop_string(ctx, -2, "rayCast"); duk_push_c_function(ctx, Octree_Raycast, DUK_VARARGS); duk_set_magic(ctx, -1, (unsigned) DUK_MAGIC_RAYCAST_SINGLE); duk_put_prop_string(ctx, -2, "rayCastSingle"); duk_pop(ctx); js_class_get_prototype(ctx, "Atomic", "Camera"); duk_push_c_function(ctx, Camera_GetScreenRay, 2); duk_put_prop_string(ctx, -2, "getScreenRay"); duk_pop(ctx); // static methods js_class_get_constructor(ctx, "Atomic", "Material"); duk_push_c_function(ctx, Material_GetTextureUnitName, 1); duk_put_prop_string(ctx, -2, "getTextureUnitName"); duk_pop(ctx); }
void jsapi_init_network(JSVM* vm) { duk_context* ctx = vm->GetJSContext(); js_class_get_prototype(ctx, "Atomic", "HttpRequest"); duk_push_c_function(ctx, HttpRequest_Read, 0); duk_put_prop_string(ctx, -2, "read"); duk_pop(ctx); }
void jsapi_init_io(JSVM* vm) { duk_context* ctx = vm->GetJSContext(); js_class_get_prototype(ctx, "Atomic", "File"); duk_push_c_function(ctx, File_ReadText, 0); duk_put_prop_string(ctx, -2, "readText"); duk_pop(ctx); AddSerializerMixin(ctx, "Atomic", "File"); AddDeserializerMixin(ctx, "Atomic", "File"); }
static void AddSerializerMixin(duk_context* ctx, const String& package, const String& classname) { js_class_get_prototype(ctx, package.CString(), classname.CString()); duk_push_c_function(ctx, Serializer_Write, 1); duk_set_magic(ctx, -1, (unsigned) VAR_INT); duk_put_prop_string(ctx, -2, "writeInt"); duk_push_c_function(ctx, Serializer_Write, 1); duk_set_magic(ctx, -1, (unsigned) IO_MAGIC_STRING); duk_put_prop_string(ctx, -2, "writeString"); duk_push_c_function(ctx, Serializer_Write, 1); duk_set_magic(ctx, -1, (unsigned) IO_MAGIC_ZEROSTRING); duk_put_prop_string(ctx, -2, "writeZeroString"); duk_pop(ctx); }