Add function to asset Lua namespace that can check whether another asset exists

This commit is contained in:
Alexander Bock
2017-12-31 19:41:56 -05:00
parent cac2f24b40
commit f5662b3fe4
3 changed files with 47 additions and 24 deletions
+21
View File
@@ -43,6 +43,7 @@ namespace {
constexpr const char* RequireFunctionName = "require";
constexpr const char* RequestFunctionName = "request";
constexpr const char* ExistsFunctionName = "exists";
constexpr const char* ExportFunctionName = "export";
constexpr const char* SyncedResourceFunctionName = "syncedResource";
@@ -132,6 +133,7 @@ void AssetLoader::setUpAssetLuaTable(Asset* asset) {
| |- syncedResource
| |- require
| |- request
| |- exists
| |- export
| |- onInitialize
| |- onDeinitialize
@@ -186,6 +188,12 @@ void AssetLoader::setUpAssetLuaTable(Asset* asset) {
lua_pushcclosure(*_luaState, &assetloader::request, 1);
lua_setfield(*_luaState, assetTableIndex, RequestFunctionName);
// Register exists function
// bool exsists(string path)
lua_pushlightuserdata(*_luaState, asset);
lua_pushcclosure(*_luaState, &assetloader::exists, 1);
lua_setfield(*_luaState, assetTableIndex, ExistsFunctionName);
// Register export-dependency function
// export(string key, any value)
lua_pushlightuserdata(*_luaState, asset);
@@ -620,6 +628,19 @@ int AssetLoader::requestLua(Asset* parent) {
return 1;
}
int AssetLoader::existsLua(Asset* asset) {
int nArguments = lua_gettop(*_luaState);
SCRIPT_CHECK_ARGUMENTS("exists", *_luaState, 1, nArguments);
std::string assetName = luaL_checkstring(*_luaState, 1);
ghoul::filesystem::Directory directory = currentDirectory();
std::string path = generateAssetPath(directory, assetName);
lua_pushboolean(*_luaState, FileSys.fileExists(path));
return 1;
}
int AssetLoader::exportAssetLua(Asset* asset) {
int nArguments = lua_gettop(*_luaState);
SCRIPT_CHECK_ARGUMENTS("exportAsset", *_luaState, 2, nArguments);
+23 -24
View File
@@ -29,8 +29,7 @@ namespace openspace::assetloader {
* Usage: void asset.onInitialize(function<void()> initFun)
*/
int onInitialize(lua_State* state) {
Asset *asset =
reinterpret_cast<Asset*>(lua_touserdata(state, lua_upvalueindex(1)));
Asset* asset = reinterpret_cast<Asset*>(lua_touserdata(state, lua_upvalueindex(1)));
return asset->loader()->onInitializeLua(asset);
}
@@ -39,8 +38,7 @@ int onInitialize(lua_State* state) {
* Usage: void asset.onDeinitialize(function<void()> initFun)
*/
int onDeinitialize(lua_State* state) {
Asset *asset =
reinterpret_cast<Asset*>(lua_touserdata(state, lua_upvalueindex(1)));
Asset* asset = reinterpret_cast<Asset*>(lua_touserdata(state, lua_upvalueindex(1)));
return asset->loader()->onDeinitializeLua(asset);
}
@@ -49,10 +47,12 @@ int onDeinitialize(lua_State* state) {
* Usage: void asset.onInitialize(function<void()> initFun)
*/
int onInitializeDependency(lua_State* state) {
Asset *dependant =
reinterpret_cast<Asset*>(lua_touserdata(state, lua_upvalueindex(1)));
Asset *dependency =
reinterpret_cast<Asset*>(lua_touserdata(state, lua_upvalueindex(2)));
Asset* dependant = reinterpret_cast<Asset*>(
lua_touserdata(state, lua_upvalueindex(1))
);
Asset* dependency = reinterpret_cast<Asset*>(
lua_touserdata(state, lua_upvalueindex(2))
);
return dependant->loader()->onInitializeDependencyLua(dependant, dependency);
}
@@ -61,14 +61,15 @@ int onInitializeDependency(lua_State* state) {
* Usage: void asset.onDeinitialize(function<void()> initFun)
*/
int onDeinitializeDependency(lua_State* state) {
Asset *dependant =
reinterpret_cast<Asset*>(lua_touserdata(state, lua_upvalueindex(1)));
Asset *dependency =
reinterpret_cast<Asset*>(lua_touserdata(state, lua_upvalueindex(2)));
Asset* dependant = reinterpret_cast<Asset*>(
lua_touserdata(state, lua_upvalueindex(1))
);
Asset* dependency = reinterpret_cast<Asset*>(
lua_touserdata(state, lua_upvalueindex(2))
);
return dependant->loader()->onDeinitializeDependencyLua(dependant, dependency);
}
/**
* Requires rependency
* Gives access to
@@ -77,8 +78,7 @@ int onDeinitializeDependency(lua_State* state) {
* Usage: {AssetTable, Dependency} = asset.import(string assetIdentifier)
*/
int require(lua_State* state) {
Asset *asset =
reinterpret_cast<Asset*>(lua_touserdata(state, lua_upvalueindex(1)));
Asset* asset = reinterpret_cast<Asset*>(lua_touserdata(state, lua_upvalueindex(1)));
return asset->loader()->requireLua(asset);
}
@@ -89,22 +89,22 @@ int require(lua_State* state) {
* Usage: Dependency = asset.import(string assetIdentifier)
*/
int request(lua_State* state) {
Asset *asset =
reinterpret_cast<Asset*>(lua_touserdata(state, lua_upvalueindex(1)));
Asset* asset = reinterpret_cast<Asset*>(lua_touserdata(state, lua_upvalueindex(1)));
return asset->loader()->requestLua(asset);
}
int exists(lua_State* state) {
Asset* asset = reinterpret_cast<Asset*>(lua_touserdata(state, lua_upvalueindex(1)));
return asset->loader()->existsLua(asset);
}
int localResource(lua_State* state) {
Asset *asset =
reinterpret_cast<Asset*>(lua_touserdata(state, lua_upvalueindex(1)));
Asset* asset = reinterpret_cast<Asset*>(lua_touserdata(state, lua_upvalueindex(1)));
return asset->loader()->localResourceLua(asset);
}
int syncedResource(lua_State* state) {
Asset *asset =
reinterpret_cast<Asset*>(lua_touserdata(state, lua_upvalueindex(1)));
Asset* asset = reinterpret_cast<Asset*>(lua_touserdata(state, lua_upvalueindex(1)));
return asset->loader()->syncedResourceLua(asset);
}
@@ -113,8 +113,7 @@ int noOperation(lua_State*) {
}
int exportAsset(lua_State* state) {
Asset *asset =
reinterpret_cast<Asset*>(lua_touserdata(state, lua_upvalueindex(1)));
Asset* asset = reinterpret_cast<Asset*>(lua_touserdata(state, lua_upvalueindex(1)));
return asset->loader()->exportAssetLua(asset);
}