11 #include <AtomsGraph/Ports.h>
12 #include <Atoms/Globals.h>
13 #include <Atoms/Graph/Operators/StateMachineBaseNodeOperator.h>
14 #include <Atoms/Graph/Operators/ClipReaderOperator.h>
15 #include <Atoms/AnimationClip.h>
16 #include <Atoms/Graph/AgentBehaviourNetwork.h>
17 #include <Atoms/Locomotion.h>
45 AtomsMath::Vector2 position;
71 inline OutputData& outputPortData(
size_t index) {
return m_outPortData[index]; }
73 inline size_t numOutputPorts()
const {
return m_outPortData.size(); }
75 void setLocomotionTriangles(
const std::vector<AtomsUtils::Triangle2>& triangles) { m_locomotionTriangles = triangles; };
77 inline void setMaxAngularAcceleration(
const double value) { m_maxAngularAcceleration = value; };
79 inline void setMaxLinearAcceleration(
const double value) { m_maxLinearAcceleration = value; };
81 inline void setLinearAverageNumFrames(
const int value) { m_linearAverageNumFrames = value; };
83 inline void setAngularAverageNumFrames(
const int value) { m_angularAverageNumFrames = value; };
85 inline void setForcedUnsyncedClips(
const bool value) { m_forceUnsyncedClips = value; };
87 bool isReadyToTransition(
const OutputData& clipData,
double frameStep);
90 bool isReadyToTransition(
double frameRate = 1.0,
bool checkTransitionFrames =
true,
bool checkForceTransition =
true);
91 void advanceSingleClip(
double timeStep,
double frameStep,
bool randomClip =
false);
92 double computeBlendInOffset(
double frameRate,
bool checkTransitionFrames =
true);
93 void computeBlendInOffsetInPlace(
double frameRate,
bool checkTransitionFrames =
true);
94 double getBlendInOffset();
95 void prepareForBlendIn(
double offset,
double timeStep);
96 bool isBlendInStage(
double offset,
unsigned int blend);
97 bool isBlendOutStage(
double& frameDifference,
unsigned int blend);
98 double computeBlendInWeight(
double offset,
unsigned int blend);
99 double computeBlendOutWeight(
unsigned int blend);
100 void setUpBlendOutFrame(
double offset,
double timeStep);
101 bool isBlendOutFinished(
unsigned int blend);
102 void initSubState(
double frame);
103 bool hasClips() {
return false; };
105 void buildNetwork(
const AtomsPtr<Atoms::StateMachine>& stateMachine,
const Atoms::AnimationState& state, std::map<std::string, std::string>& clipToAgentTypeNames, std::mutex& mutex, AtomsCore::Rand32* idRandom);
109 WaitingState waitingState() {
return m_waitingState; };
112 const AtomsCore::Vector3f &barycentricCoordinates() {
return m_prevBarycentricCoordinates; };
114 const int unsyncedClipId() {
return m_nextMajorId; };
121 std::vector<OutputData> m_outPortData;
123 std::vector<AtomsUtils::Triangle2> m_locomotionTriangles;
125 std::deque<float> m_angularVelocities;
127 std::deque<float> m_linearVelocities;
139 double m_previousTime;
141 double m_previousUseClipDirection;
143 double m_maxAngularAcceleration;
145 double m_maxLinearAcceleration;
147 int m_currentUnsyncedStep;
149 int m_currentMajorId;
155 int m_angularAverageNumFrames;
157 int m_linearAverageNumFrames;
159 WaitingState m_waitingState;
161 bool m_forceUnsyncedClips;