v1.4.4
This commit is contained in:
commit
9c94d113d3
10260 changed files with 1237388 additions and 0 deletions
119
source/game/StarBehaviorState.hpp
Normal file
119
source/game/StarBehaviorState.hpp
Normal file
|
@ -0,0 +1,119 @@
|
|||
#ifndef STAR_BEHAVIOR_STATE_HPP
|
||||
#define STAR_BEHAVIOR_STATE_HPP
|
||||
|
||||
#include "StarBehaviorDatabase.hpp"
|
||||
#include "StarLua.hpp"
|
||||
|
||||
namespace Star {
|
||||
|
||||
STAR_CLASS(Blackboard);
|
||||
STAR_CLASS(BehaviorState);
|
||||
STAR_STRUCT(ActionState);
|
||||
STAR_STRUCT(DecoratorState);
|
||||
STAR_STRUCT(CompositeState);
|
||||
|
||||
STAR_EXCEPTION(BehaviorException, StarException);
|
||||
|
||||
extern List<NodeParameterType> BlackboardTypes;
|
||||
|
||||
class Blackboard {
|
||||
public:
|
||||
Blackboard(LuaTable luaContext);
|
||||
|
||||
LuaValue get(NodeParameterType type, String const& key) const;
|
||||
void set(NodeParameterType type, String const& key, LuaValue value);
|
||||
|
||||
LuaTable parameters(StringMap<NodeParameter> const& nodeParameters, uint64_t nodeId);
|
||||
void setOutput(ActionNode const& node, LuaTable const& output);
|
||||
|
||||
// takes the set of currently held ephemeral values
|
||||
Set<pair<NodeParameterType, String>> takeEphemerals();
|
||||
|
||||
// clears any provided ephemerals that are not currently held
|
||||
void clearEphemerals(Set<pair<NodeParameterType, String>> ephemerals);
|
||||
private:
|
||||
LuaTable m_luaContext;
|
||||
|
||||
HashMap<uint64_t, LuaTable> m_parameters;
|
||||
HashMap<NodeParameterType, StringMap<LuaValue>> m_board;
|
||||
|
||||
HashMap<NodeParameterType, StringMap<List<pair<uint64_t, String>>>> m_input;
|
||||
StringMap<List<pair<uint64_t, LuaTable>>> m_vectorNumberInput;
|
||||
|
||||
Set<pair<NodeParameterType, String>> m_ephemeral;
|
||||
};
|
||||
|
||||
typedef Maybe<Variant<ActionState,DecoratorState,CompositeState>> NodeState;
|
||||
typedef shared_ptr<NodeState> NodeStatePtr;
|
||||
|
||||
typedef pair<LuaFunction, LuaThread> Coroutine;
|
||||
|
||||
enum class NodeStatus {
|
||||
Invalid,
|
||||
Success,
|
||||
Failure,
|
||||
Running
|
||||
};
|
||||
|
||||
typedef LuaTupleReturn<NodeStatus, LuaValue> ActionReturn;
|
||||
struct ActionState {
|
||||
LuaThread thread;
|
||||
};
|
||||
|
||||
struct DecoratorState {
|
||||
DecoratorState(LuaThread thread);
|
||||
LuaThread thread;
|
||||
NodeStatePtr child;
|
||||
};
|
||||
|
||||
struct CompositeState {
|
||||
CompositeState(size_t children);
|
||||
CompositeState(size_t children, size_t index);
|
||||
|
||||
size_t index;
|
||||
List<NodeStatePtr> children;
|
||||
};
|
||||
|
||||
class BehaviorState {
|
||||
public:
|
||||
BehaviorState(BehaviorTreeConstPtr tree, LuaTable context, Maybe<BlackboardWeakPtr> blackboard = {});
|
||||
|
||||
NodeStatus run(float dt);
|
||||
void clear();
|
||||
|
||||
BlackboardWeakPtr blackboardPtr();
|
||||
private:
|
||||
BlackboardPtr board();
|
||||
|
||||
LuaThread nodeLuaThread(String const& funcName);
|
||||
|
||||
NodeStatus runNode(BehaviorNode const& node, NodeState& state);
|
||||
|
||||
NodeStatus runAction(ActionNode const& node, NodeState& state);
|
||||
NodeStatus runDecorator(DecoratorNode const& node, NodeState& state);
|
||||
|
||||
NodeStatus runComposite(CompositeNode const& node, NodeState& state);
|
||||
NodeStatus runSequence(SequenceNode const& node, NodeState& state);
|
||||
NodeStatus runSelector(SelectorNode const& node, NodeState& state);
|
||||
NodeStatus runParallel(ParallelNode const& node, NodeState& state);
|
||||
NodeStatus runDynamic(DynamicNode const& node, NodeState& state);
|
||||
NodeStatus runRandomize(RandomizeNode const& node, NodeState& state);
|
||||
|
||||
BehaviorTreeConstPtr m_tree;
|
||||
NodeState m_rootState;
|
||||
|
||||
LuaTable m_luaContext;
|
||||
|
||||
// The blackboard can either be created and owned by this behavior,
|
||||
// or a blackboard from another behavior can be used
|
||||
Variant<BlackboardPtr, BlackboardWeakPtr> m_board;
|
||||
|
||||
// Keep threads here for recycling
|
||||
List<LuaThread> m_threads;
|
||||
StringMap<LuaFunction> m_functions;
|
||||
|
||||
float m_lastDt;
|
||||
};
|
||||
|
||||
}
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue