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

summaryrefslogtreecommitdiff
path: root/source/game/scripting/StarBehaviorLuaBindings.cpp
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2023-06-20 14:33:09 +1000
committerKae <80987908+Novaenia@users.noreply.github.com>2023-06-20 14:33:09 +1000
commit6352e8e3196f78388b6c771073f9e03eaa612673 (patch)
treee23772f79a7fbc41bc9108951e9e136857484bf4 /source/game/scripting/StarBehaviorLuaBindings.cpp
parent6741a057e5639280d85d0f88ba26f000baa58f61 (diff)
everything everywhere
all at once
Diffstat (limited to 'source/game/scripting/StarBehaviorLuaBindings.cpp')
-rw-r--r--source/game/scripting/StarBehaviorLuaBindings.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/source/game/scripting/StarBehaviorLuaBindings.cpp b/source/game/scripting/StarBehaviorLuaBindings.cpp
new file mode 100644
index 0000000..8866746
--- /dev/null
+++ b/source/game/scripting/StarBehaviorLuaBindings.cpp
@@ -0,0 +1,37 @@
+#include "StarBehaviorLuaBindings.hpp"
+#include "StarLuaGameConverters.hpp"
+#include "StarRoot.hpp"
+
+namespace Star {
+
+LuaCallbacks LuaBindings::makeBehaviorLuaCallbacks(List<BehaviorStatePtr>* list) {
+ LuaCallbacks callbacks;
+
+ callbacks.registerCallback("behavior", [list](Json const& config, JsonObject const& parameters, LuaTable context, Maybe<LuaUserData> blackboard) -> BehaviorStateWeakPtr {
+ auto behaviorDatabase = Root::singleton().behaviorDatabase();
+ Maybe<BlackboardWeakPtr> board = {};
+ if (blackboard && blackboard->is<BlackboardWeakPtr>())
+ board = blackboard->get<BlackboardWeakPtr>();
+
+ BehaviorTreeConstPtr tree;
+ if (config.isType(Json::Type::String)) {
+ if (parameters.empty()) {
+ tree = behaviorDatabase->behaviorTree(config.toString());
+ } else {
+ JsonObject treeConfig = behaviorDatabase->behaviorConfig(config.toString()).toObject();
+ treeConfig.set("parameters", jsonMerge(treeConfig.get("parameters"), parameters));
+ tree = behaviorDatabase->buildTree(treeConfig);
+ }
+ } else {
+ tree = behaviorDatabase->buildTree(config.set("parameters", jsonMerge(config.getObject("parameters", {}), parameters)));
+ }
+
+ BehaviorStatePtr state = make_shared<BehaviorState>(tree, context, board);
+ list->append(state);
+ return weak_ptr<BehaviorState>(state);
+ });
+
+ return callbacks;
+}
+
+}