diff options
author | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-06-20 14:33:09 +1000 |
---|---|---|
committer | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-06-20 14:33:09 +1000 |
commit | 6352e8e3196f78388b6c771073f9e03eaa612673 (patch) | |
tree | e23772f79a7fbc41bc9108951e9e136857484bf4 /source/game/scripting/StarBehaviorLuaBindings.cpp | |
parent | 6741a057e5639280d85d0f88ba26f000baa58f61 (diff) |
everything everywhere
all at once
Diffstat (limited to 'source/game/scripting/StarBehaviorLuaBindings.cpp')
-rw-r--r-- | source/game/scripting/StarBehaviorLuaBindings.cpp | 37 |
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; +} + +} |