Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/game/scripting/StarRootLuaBindings.cpp
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2023-11-03 06:51:17 +1100
committerKae <80987908+Novaenia@users.noreply.github.com>2023-11-03 06:51:17 +1100
commit5815a873a7b425551b26ae58430ba8f2af961746 (patch)
tree33cd3798bf40ca9e2c39a2693ec24ee4267e46af /source/game/scripting/StarRootLuaBindings.cpp
parentab7768a3f0dd2ddc0356fa81cef83f971005bc42 (diff)
Add more root.asset* functions
Diffstat (limited to 'source/game/scripting/StarRootLuaBindings.cpp')
-rw-r--r--source/game/scripting/StarRootLuaBindings.cpp40
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))