diff options
author | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-11-03 06:51:17 +1100 |
---|---|---|
committer | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-11-03 06:51:17 +1100 |
commit | 5815a873a7b425551b26ae58430ba8f2af961746 (patch) | |
tree | 33cd3798bf40ca9e2c39a2693ec24ee4267e46af /source/game/scripting/StarRootLuaBindings.cpp | |
parent | ab7768a3f0dd2ddc0356fa81cef83f971005bc42 (diff) |
Add more root.asset* functions
Diffstat (limited to 'source/game/scripting/StarRootLuaBindings.cpp')
-rw-r--r-- | source/game/scripting/StarRootLuaBindings.cpp | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/source/game/scripting/StarRootLuaBindings.cpp b/source/game/scripting/StarRootLuaBindings.cpp index d72748f..1898fff 100644 --- a/source/game/scripting/StarRootLuaBindings.cpp +++ b/source/game/scripting/StarRootLuaBindings.cpp @@ -63,6 +63,46 @@ LuaCallbacks LuaBindings::makeRootCallbacks() { callbacks.registerCallbackWithSignature<Maybe<String>, String, Maybe<String>>("materialMiningSound", bind(RootCallbacks::materialMiningSound, root, _1, _2)); callbacks.registerCallbackWithSignature<Maybe<String>, String, Maybe<String>>("materialFootstepSound", bind(RootCallbacks::materialFootstepSound, root, _1, _2)); + callbacks.registerCallback("assetOrigin", [root](String const& path) { + auto assets = root->assets(); + if (auto descriptor = assets->assetDescriptor(path)) + return assets->assetSourcePath(descriptor->source); + }); + + callbacks.registerCallback("assetPatches", [root](LuaEngine& engine, String const& path) -> Maybe<LuaTable> { + auto assets = root->assets(); + if (auto descriptor = assets->assetDescriptor(path)) { + auto& patches = descriptor->patchSources; + auto table = engine.createTable(patches.size(), 0); + for (size_t i = 0; i != patches.size(); ++i) { + auto& patch = patches.at(i); + auto patchTable = engine.createTable(2, 0); + if (auto sourcePath = assets->assetSourcePath(patch.second)) + patchTable.set(1, *sourcePath); + patchTable.set(2, patch.first); + table.set(i + 1, patchTable); + } + return table; + } + return {}; + }); + + callbacks.registerCallback("assetSourcePaths", [root](LuaEngine& engine, Maybe<bool> withMetadata) -> LuaTable { + auto assets = root->assets(); + auto assetSources = assets->assetSources(); + auto table = engine.createTable(assetSources.size(), 0); + if (withMetadata.value()) { + for (auto& assetSource : assetSources) + table.set(assetSource, assets->assetSourceMetadata(assetSource)); + } + else { + size_t i = 0; + for (auto& assetSource : assetSources) + table.set(++i, assetSource); + } + return table; + }); + callbacks.registerCallback("materialConfig", [root](String const& materialName) -> Json { auto materialId = root->materialDatabase()->materialId(materialName); if (auto path = root->materialDatabase()->materialPath(materialId)) |