Minor cleanup.
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
#include "AnimGraphResource.h"
|
||||
#include "imnodes.h"
|
||||
|
||||
using namespace AnimGraphCode;
|
||||
using namespace AniGraph;
|
||||
|
||||
ImNodesPinShape sGetSocketShapeFromSocketType(const SocketType& socket_type) {
|
||||
switch (socket_type) {
|
||||
|
||||
+10
-10
@@ -8,7 +8,7 @@
|
||||
|
||||
#include "3rdparty/json/json.hpp"
|
||||
|
||||
namespace AnimGraphCode {
|
||||
namespace AniGraph {
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
@@ -351,7 +351,7 @@ bool AnimGraphResource::loadFromFile(const char* filename) {
|
||||
return true;
|
||||
}
|
||||
|
||||
void AnimGraph::UpdateOrderedNodes() {
|
||||
void AnimGraph::updateOrderedNodes() {
|
||||
std::vector<int> node_index_stack;
|
||||
node_index_stack.push_back(0);
|
||||
|
||||
@@ -387,7 +387,7 @@ void AnimGraph::UpdateOrderedNodes() {
|
||||
}
|
||||
}
|
||||
|
||||
void AnimGraph::MarkActiveNodes() {
|
||||
void AnimGraph::markActiveNodes() {
|
||||
for (size_t i = 0, n = m_nodes.size(); i < n; i++) {
|
||||
m_nodes[i]->m_state = AnimNodeEvalState::Deactivated;
|
||||
}
|
||||
@@ -403,7 +403,7 @@ void AnimGraph::MarkActiveNodes() {
|
||||
|
||||
for (size_t i = 0, n = m_eval_ordered_nodes.size(); i < n; i++) {
|
||||
AnimNode* node = m_eval_ordered_nodes[i];
|
||||
if (CheckIsNodeActive(node)) {
|
||||
if (checkIsNodeActive(node)) {
|
||||
int node_index = node->m_index;
|
||||
node->MarkActiveInputs(m_node_inputs[node_index]);
|
||||
|
||||
@@ -418,7 +418,7 @@ void AnimGraph::MarkActiveNodes() {
|
||||
}
|
||||
}
|
||||
|
||||
void AnimGraph::EvalSyncTracks() {
|
||||
void AnimGraph::evalSyncTracks() {
|
||||
for (size_t i = m_eval_ordered_nodes.size() - 1; i >= 0; i--) {
|
||||
AnimNode* node = m_eval_ordered_nodes[i];
|
||||
int node_index = node->m_index;
|
||||
@@ -430,7 +430,7 @@ void AnimGraph::EvalSyncTracks() {
|
||||
}
|
||||
}
|
||||
|
||||
void AnimGraph::UpdateTime(float dt) {
|
||||
void AnimGraph::updateTime(float dt) {
|
||||
const std::vector<NodeInput> graph_output_inputs = m_node_inputs[0];
|
||||
for (size_t i = 0, n = graph_output_inputs.size(); i < n; i++) {
|
||||
AnimNode* node = m_eval_ordered_nodes[i];
|
||||
@@ -464,7 +464,7 @@ void AnimGraph::UpdateTime(float dt) {
|
||||
}
|
||||
}
|
||||
|
||||
void AnimGraph::Evaluate() {
|
||||
void AnimGraph::evaluate() {
|
||||
for (size_t i = m_eval_ordered_nodes.size() - 1; i >= 0; i--) {
|
||||
AnimNode* node = m_eval_ordered_nodes[i];
|
||||
if (node->m_state == AnimNodeEvalState::Deactivated) {
|
||||
@@ -475,7 +475,7 @@ void AnimGraph::Evaluate() {
|
||||
}
|
||||
}
|
||||
|
||||
void* AnimGraph::GetOutput(const std::string& name) const {
|
||||
void* AnimGraph::getOutput(const std::string& name) const {
|
||||
Socket* socket = m_socket_accessor->FindInputSocket(name);
|
||||
if (socket == nullptr) {
|
||||
return nullptr;
|
||||
@@ -484,7 +484,7 @@ void* AnimGraph::GetOutput(const std::string& name) const {
|
||||
return socket->m_value.ptr;
|
||||
}
|
||||
|
||||
void* AnimGraph::GetInput(const std::string& name) const {
|
||||
void* AnimGraph::getInput(const std::string& name) const {
|
||||
Socket* socket = m_socket_accessor->FindOutputSocket(name);
|
||||
if (socket == nullptr) {
|
||||
return nullptr;
|
||||
@@ -493,4 +493,4 @@ void* AnimGraph::GetInput(const std::string& name) const {
|
||||
return *(socket->m_value.ptr_ptr);
|
||||
}
|
||||
|
||||
} // namespace AnimGraphCode
|
||||
} // namespace AniGraph
|
||||
+64
-45
@@ -14,19 +14,11 @@
|
||||
|
||||
#include "SyncTrack.h"
|
||||
|
||||
namespace AnimGraphCode {
|
||||
namespace AniGraph {
|
||||
|
||||
enum class SocketType {
|
||||
SocketTypeUndefined,
|
||||
SocketTypeBool,
|
||||
SocketTypeAnimation,
|
||||
SocketTypeFloat,
|
||||
SocketTypeVec3,
|
||||
SocketTypeQuat,
|
||||
SocketTypeString
|
||||
};
|
||||
|
||||
enum SocketFlags { SocketFlagAffectsTime = 1 };
|
||||
//
|
||||
// Data types
|
||||
//
|
||||
|
||||
struct AnimData {
|
||||
float m_bone_transforms[16];
|
||||
@@ -55,7 +47,18 @@ SplitOutputAttributeId(int attribute_id, int* node_id, int* output_index) {
|
||||
*output_index = (attribute_id >> 23) - 1;
|
||||
}
|
||||
|
||||
struct AnimNodeResource;
|
||||
|
||||
enum class SocketType {
|
||||
SocketTypeUndefined,
|
||||
SocketTypeBool,
|
||||
SocketTypeAnimation,
|
||||
SocketTypeFloat,
|
||||
SocketTypeVec3,
|
||||
SocketTypeQuat,
|
||||
SocketTypeString
|
||||
};
|
||||
|
||||
enum SocketFlags { SocketFlagAffectsTime = 1 };
|
||||
|
||||
struct Socket {
|
||||
std::string m_name;
|
||||
@@ -77,7 +80,6 @@ struct AnimNodeResource {
|
||||
std::string m_type_name;
|
||||
AnimNode* m_anim_node = nullptr;
|
||||
NodeSocketAccessorBase* m_socket_accessor = nullptr;
|
||||
|
||||
float m_position[2] = {0.f, 0.f};
|
||||
};
|
||||
|
||||
@@ -140,6 +142,10 @@ struct AnimNode {
|
||||
|
||||
|
||||
struct NodeSocketAccessorBase {
|
||||
std::vector<Socket> m_properties;
|
||||
std::vector<Socket> m_inputs;
|
||||
std::vector<Socket> m_outputs;
|
||||
|
||||
NodeSocketAccessorBase() {}
|
||||
virtual ~NodeSocketAccessorBase() {}
|
||||
|
||||
@@ -319,10 +325,6 @@ struct NodeSocketAccessorBase {
|
||||
size_t GetOutputIndex(const std::string& name) {
|
||||
return GetSocketIndex(m_outputs, name);
|
||||
}
|
||||
|
||||
std::vector<Socket> m_properties;
|
||||
std::vector<Socket> m_inputs;
|
||||
std::vector<Socket> m_outputs;
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
@@ -337,6 +339,9 @@ struct NodeRegistry {
|
||||
AnimNode* node);
|
||||
};
|
||||
|
||||
//
|
||||
// BlendTreeNode
|
||||
//
|
||||
struct BlendTreeNode : public AnimNode {};
|
||||
|
||||
template <>
|
||||
@@ -344,6 +349,9 @@ struct NodeSocketAccessor<BlendTreeNode> : public NodeSocketAccessorBase {
|
||||
NodeSocketAccessor(AnimNode* node_) {}
|
||||
};
|
||||
|
||||
//
|
||||
// Blend2Node
|
||||
//
|
||||
struct Blend2Node : public AnimNode {
|
||||
AnimData m_input0;
|
||||
AnimData m_input1;
|
||||
@@ -351,7 +359,6 @@ struct Blend2Node : public AnimNode {
|
||||
float m_blend_weight = 0.f;
|
||||
bool m_sync_blend = false;
|
||||
|
||||
|
||||
virtual void MarkActiveInputs(const std::vector<NodeInput>& inputs) override {
|
||||
for (size_t i = 0, n = inputs.size(); i < n; i++) {
|
||||
AnimNode* input_node = inputs[i].m_node;
|
||||
@@ -421,6 +428,9 @@ struct NodeSocketAccessor<Blend2Node> : public NodeSocketAccessorBase {
|
||||
}
|
||||
};
|
||||
|
||||
//
|
||||
// SpeedScaleNode
|
||||
//
|
||||
struct SpeedScaleNode : public AnimNode {
|
||||
AnimData m_input;
|
||||
AnimData* m_output = nullptr;
|
||||
@@ -447,6 +457,9 @@ struct NodeSocketAccessor<SpeedScaleNode> : public NodeSocketAccessorBase {
|
||||
}
|
||||
};
|
||||
|
||||
//
|
||||
// AnimSamplerNode
|
||||
//
|
||||
struct AnimSamplerNode : public AnimNode {
|
||||
AnimData* m_output = nullptr;
|
||||
std::string m_filename;
|
||||
@@ -462,6 +475,9 @@ struct NodeSocketAccessor<AnimSamplerNode> : public NodeSocketAccessorBase {
|
||||
}
|
||||
};
|
||||
|
||||
//
|
||||
// AnimGraphResource
|
||||
//
|
||||
struct AnimGraphConnection {
|
||||
int m_source_node_index;
|
||||
int m_source_socket_index;
|
||||
@@ -490,7 +506,6 @@ struct AnimGraphResource {
|
||||
bool loadFromFile(const char* filename);
|
||||
|
||||
AnimNodeResource& getGraphOutputNode() { return m_nodes[0]; }
|
||||
|
||||
AnimNodeResource& getGraphInputNode() { return m_nodes[1]; }
|
||||
|
||||
size_t addNode(AnimNodeResource node_resource) {
|
||||
@@ -596,7 +611,22 @@ static inline AnimNodeResource AnimNodeResourceFactory(
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// AnimGraph (Runtime)
|
||||
//
|
||||
struct AnimGraph {
|
||||
AnimData m_local_transforms;
|
||||
|
||||
std::vector<AnimNode*> m_nodes;
|
||||
std::vector<AnimNode*> m_eval_ordered_nodes;
|
||||
std::vector<std::vector<NodeInput> > m_node_inputs;
|
||||
NodeSocketAccessorBase* m_socket_accessor;
|
||||
char* m_input_buffer = nullptr;
|
||||
char* m_output_buffer = nullptr;
|
||||
|
||||
std::vector<Socket>& getGraphOutputs() { return m_socket_accessor->m_inputs; }
|
||||
std::vector<Socket>& getGraphInputs() { return m_socket_accessor->m_outputs; }
|
||||
|
||||
~AnimGraph() {
|
||||
delete[] m_input_buffer;
|
||||
delete[] m_output_buffer;
|
||||
@@ -608,15 +638,15 @@ struct AnimGraph {
|
||||
delete m_socket_accessor;
|
||||
}
|
||||
|
||||
void UpdateOrderedNodes();
|
||||
void MarkActiveNodes();
|
||||
bool CheckIsNodeActive(AnimNode* node) {
|
||||
void updateOrderedNodes();
|
||||
void markActiveNodes();
|
||||
bool checkIsNodeActive(AnimNode* node) {
|
||||
return node->m_state != AnimNodeEvalState::Deactivated;
|
||||
}
|
||||
void EvalSyncTracks();
|
||||
void UpdateTime(float dt);
|
||||
void Evaluate();
|
||||
void Reset() {
|
||||
void evalSyncTracks();
|
||||
void updateTime(float dt);
|
||||
void evaluate();
|
||||
void reset() {
|
||||
for (size_t i = 0, n = m_nodes.size(); i < n; i++) {
|
||||
m_nodes[i]->m_time_now = 0.f;
|
||||
m_nodes[i]->m_time_last = 0.f;
|
||||
@@ -624,20 +654,9 @@ struct AnimGraph {
|
||||
}
|
||||
}
|
||||
|
||||
AnimData m_local_transforms;
|
||||
|
||||
std::vector<AnimNode*> m_nodes;
|
||||
std::vector<AnimNode*> m_eval_ordered_nodes;
|
||||
std::vector<std::vector<NodeInput> > m_node_inputs;
|
||||
NodeSocketAccessorBase* m_socket_accessor;
|
||||
char* m_input_buffer = nullptr;
|
||||
char* m_output_buffer = nullptr;
|
||||
|
||||
std::vector<Socket>& GetGraphOutputs() { return m_socket_accessor->m_inputs; }
|
||||
std::vector<Socket>& GetGraphInputs() { return m_socket_accessor->m_outputs; }
|
||||
|
||||
void* GetOutput(const std::string& name) const;
|
||||
void* GetInput(const std::string& name) const;
|
||||
void* getOutput(const std::string& name) const;
|
||||
void* getInput(const std::string& name) const;
|
||||
|
||||
int getNodeEvalOrderIndex(const AnimNode* node) {
|
||||
for (size_t i = 0, n = m_eval_ordered_nodes.size(); i < n; i++) {
|
||||
@@ -715,7 +734,7 @@ struct AnimGraph {
|
||||
|
||||
// inputs
|
||||
int input_block_size = 0;
|
||||
std::vector<Socket>& graph_inputs = result.GetGraphInputs();
|
||||
std::vector<Socket>& graph_inputs = result.getGraphInputs();
|
||||
for (int i = 0; i < graph_inputs.size(); i++) {
|
||||
input_block_size += sizeof(void*);
|
||||
}
|
||||
@@ -733,7 +752,7 @@ struct AnimGraph {
|
||||
|
||||
// outputs
|
||||
int output_block_size = 0;
|
||||
std::vector<Socket>& graph_outputs = result.GetGraphOutputs();
|
||||
std::vector<Socket>& graph_outputs = result.getGraphOutputs();
|
||||
for (int i = 0; i < graph_outputs.size(); i++) {
|
||||
output_block_size += graph_outputs[i].m_type_size;
|
||||
}
|
||||
@@ -846,13 +865,13 @@ struct AnimGraph {
|
||||
}
|
||||
}
|
||||
|
||||
result.UpdateOrderedNodes();
|
||||
result.Reset();
|
||||
result.updateOrderedNodes();
|
||||
result.reset();
|
||||
|
||||
return result;
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace AnimGraphCode
|
||||
} // namespace AniGraph
|
||||
|
||||
#endif //ANIMTESTBED_ANIMGRAPHRESOURCE_H
|
||||
|
||||
Reference in New Issue
Block a user