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

summaryrefslogtreecommitdiff
path: root/source/game
diff options
context:
space:
mode:
Diffstat (limited to 'source/game')
-rw-r--r--source/game/StarItemDatabase.cpp2
-rw-r--r--source/game/StarItemDatabase.hpp2
-rw-r--r--source/game/StarItemRecipe.cpp7
-rw-r--r--source/game/StarItemRecipe.hpp4
-rw-r--r--source/game/StarTileDrawer.cpp4
-rw-r--r--source/game/scripting/StarPlayerLuaBindings.cpp11
-rw-r--r--source/game/scripting/StarRootLuaBindings.cpp17
-rw-r--r--source/game/scripting/StarRootLuaBindings.hpp3
8 files changed, 38 insertions, 12 deletions
diff --git a/source/game/StarItemDatabase.cpp b/source/game/StarItemDatabase.cpp
index c3f2447..b3eb16b 100644
--- a/source/game/StarItemDatabase.cpp
+++ b/source/game/StarItemDatabase.cpp
@@ -375,7 +375,7 @@ ItemRecipe ItemDatabase::parseRecipe(Json const& config) const {
return res;
}
-HashSet<ItemRecipe> ItemDatabase::allRecipes() const {
+HashSet<ItemRecipe> const& ItemDatabase::allRecipes() const {
return m_recipes;
}
diff --git a/source/game/StarItemDatabase.hpp b/source/game/StarItemDatabase.hpp
index 50a8e35..d5b86fc 100644
--- a/source/game/StarItemDatabase.hpp
+++ b/source/game/StarItemDatabase.hpp
@@ -138,7 +138,7 @@ public:
ItemRecipe parseRecipe(Json const& config) const;
- HashSet<ItemRecipe> allRecipes() const;
+ HashSet<ItemRecipe> const& allRecipes() const;
HashSet<ItemRecipe> allRecipes(StringSet const& types) const;
ItemPtr applyAugment(ItemPtr const item, AugmentItem* augment) const;
diff --git a/source/game/StarItemRecipe.cpp b/source/game/StarItemRecipe.cpp
index 7295cd1..1ba4b70 100644
--- a/source/game/StarItemRecipe.cpp
+++ b/source/game/StarItemRecipe.cpp
@@ -5,9 +5,10 @@
namespace Star {
-Json ItemRecipe::toJson() {
+Json ItemRecipe::toJson() const {
JsonArray inputList;
- for (auto input : inputs)
+ inputList.reserve(inputList.size());
+ for (auto& input : inputs)
inputList.append(input.toJson());
return JsonObject{
@@ -21,7 +22,7 @@ Json ItemRecipe::toJson() {
};
}
-bool ItemRecipe::isNull() {
+bool ItemRecipe::isNull() const {
return currencyInputs.size() == 0 && inputs.size() == 0 && output.isNull();
}
diff --git a/source/game/StarItemRecipe.hpp b/source/game/StarItemRecipe.hpp
index b2d51d7..5285c9a 100644
--- a/source/game/StarItemRecipe.hpp
+++ b/source/game/StarItemRecipe.hpp
@@ -8,9 +8,9 @@ namespace Star {
STAR_EXCEPTION(RecipeException, StarException);
struct ItemRecipe {
- Json toJson();
+ Json toJson() const;
- bool isNull();
+ bool isNull() const;
bool operator==(ItemRecipe const& rhs) const;
bool operator!=(ItemRecipe const& rhs) const;
diff --git a/source/game/StarTileDrawer.cpp b/source/game/StarTileDrawer.cpp
index 2fa5051..15e88f3 100644
--- a/source/game/StarTileDrawer.cpp
+++ b/source/game/StarTileDrawer.cpp
@@ -100,9 +100,11 @@ bool TileDrawer::produceTerrainDrawables(Drawables& drawables,
return false;
auto getPieceImage = [](MaterialRenderPieceConstPtr const& piece, Box<float, 2> const& box, MaterialHue hue, Directives const* directives) -> AssetPath {
- AssetPath image = hue == 0
+ String path = (hue == 0)
? strf("{}?crop={};{};{};{}", piece->texture, box.xMin(), box.yMin(), box.xMax(), box.yMax())
: strf("{}?crop={};{};{};{}?hueshift={}", piece->texture, box.xMin(), box.yMin(), box.xMax(), box.yMax(), materialHueToDegrees(hue));
+
+ AssetPath image(path);
if (directives)
image.directives += *directives;
diff --git a/source/game/scripting/StarPlayerLuaBindings.cpp b/source/game/scripting/StarPlayerLuaBindings.cpp
index d303c94..5f12ee3 100644
--- a/source/game/scripting/StarPlayerLuaBindings.cpp
+++ b/source/game/scripting/StarPlayerLuaBindings.cpp
@@ -247,6 +247,17 @@ LuaCallbacks LuaBindings::makePlayerCallbacks(Player* player) {
callbacks.registerCallback("blueprintKnown", [player](Json const& item) { return player->blueprintKnown(ItemDescriptor(item)); });
+ callbacks.registerCallback("availableRecipes", [player](Maybe<StringSet> const& filter) {
+ auto itemDatabase = Root::singleton().itemDatabase();
+ auto inventory = player->inventory();
+ auto recipes = itemDatabase->recipesFromBagContents(inventory->availableItems(), inventory->availableCurrencies(), filter.value());
+ JsonArray result;
+ result.reserve(recipes.size());
+ for (auto& recipe : recipes)
+ result.append(recipe.toJson());
+ return result;
+ });
+
callbacks.registerCallback("makeTechAvailable", [player](String const& tech) {
player->techs()->makeAvailable(tech);
});
diff --git a/source/game/scripting/StarRootLuaBindings.cpp b/source/game/scripting/StarRootLuaBindings.cpp
index a08be7f..50d18e8 100644
--- a/source/game/scripting/StarRootLuaBindings.cpp
+++ b/source/game/scripting/StarRootLuaBindings.cpp
@@ -44,7 +44,8 @@ LuaCallbacks LuaBindings::makeRootCallbacks() {
callbacks.registerCallbackWithSignature<Json, String>("npcConfig", bind(RootCallbacks::npcConfig, root, _1));
callbacks.registerCallbackWithSignature<float, String>("projectileGravityMultiplier", bind(RootCallbacks::projectileGravityMultiplier, root, _1));
callbacks.registerCallbackWithSignature<Json, String>("projectileConfig", bind(RootCallbacks::projectileConfig, root, _1));
- callbacks.registerCallbackWithSignature<Json, String>("recipesForItem", bind(RootCallbacks::recipesForItem, root, _1));
+ callbacks.registerCallbackWithSignature<JsonArray, String>("recipesForItem", bind(RootCallbacks::recipesForItem, root, _1));
+ callbacks.registerCallbackWithSignature<JsonArray>("allRecipes", bind(RootCallbacks::allRecipes, root));
callbacks.registerCallbackWithSignature<String, String>("itemType", bind(RootCallbacks::itemType, root, _1));
callbacks.registerCallbackWithSignature<Json, String>("itemTags", bind(RootCallbacks::itemTags, root, _1));
callbacks.registerCallbackWithSignature<bool, String, String>("itemHasTag", bind(RootCallbacks::itemHasTag, root, _1, _2));
@@ -308,10 +309,20 @@ Json LuaBindings::RootCallbacks::projectileConfig(Root* root, String const& arg1
return projectileDatabase->projectileConfig(arg1);
}
-Json LuaBindings::RootCallbacks::recipesForItem(Root* root, String const& arg1) {
+JsonArray LuaBindings::RootCallbacks::recipesForItem(Root* root, String const& arg1) {
auto recipes = root->itemDatabase()->recipesForOutputItem(arg1);
JsonArray result;
- for (auto recipe : recipes)
+ result.reserve(recipes.size());
+ for (auto& recipe : recipes)
+ result.append(recipe.toJson());
+ return result;
+}
+
+JsonArray LuaBindings::RootCallbacks::allRecipes(Root* root) {
+ auto& recipes = root->itemDatabase()->allRecipes();
+ JsonArray result;
+ result.reserve(recipes.size());
+ for (auto& recipe : recipes)
result.append(recipe.toJson());
return result;
}
diff --git a/source/game/scripting/StarRootLuaBindings.hpp b/source/game/scripting/StarRootLuaBindings.hpp
index 3979f2f..0cee77f 100644
--- a/source/game/scripting/StarRootLuaBindings.hpp
+++ b/source/game/scripting/StarRootLuaBindings.hpp
@@ -26,7 +26,8 @@ namespace LuaBindings {
Json npcConfig(Root* root, String const& arg1);
float projectileGravityMultiplier(Root* root, String const& arg1);
Json projectileConfig(Root* root, String const& arg1);
- Json recipesForItem(Root* root, String const& arg1);
+ JsonArray recipesForItem(Root* root, String const& arg1);
+ JsonArray allRecipes(Root* root);
String itemType(Root* root, String const& itemName);
Json itemTags(Root* root, String const& itemName);
bool itemHasTag(Root* root, String const& itemName, String const& itemTag);