3#include <Tempest/Matrix4x4>
30 static uint8_t
calcAniComb(
const Tempest::Vec3& dpos,
float rotation);
44 bool stopAnim(std::string_view name);
50 bool update(uint64_t tickCount,
bool force);
55 Tempest::Vec3
animMoveSpeed(uint64_t tickCount, uint64_t dt)
const;
69 bool isInAnim(std::string_view sq)
const;
79 auto rootNode() const -> const Tempest::Matrix4x4;
80 auto
rootBone() const -> const Tempest::Matrix4x4;
81 auto
bone(
size_t id) const -> const Tempest::Matrix4x4&;
83 size_t findNode(std::string_view b) const;
91 const Tempest::Matrix4x4*
transform() const;
94 enum SampleStatus : uint8_t {
110 uint16_t len()
const {
return bits & 0x7FFF; }
111 void incLen() { bits = (bits+1)&0x7FFF; };
112 bool isBreak()
const {
return bits & 0x8000; }
113 void setBreak() { bits |=0x8000; }
116 auto mkBaseTranslation() -> Tempest::Vec3;
117 void mkSkeleton(
const Tempest::Matrix4x4 &mt);
118 void implMkSkeleton(
const Tempest::Matrix4x4 &mt);
119 void implMkSkeleton(
const Tempest::Matrix4x4 &mt,
size_t parent);
126 void onAddLayer (
const Layer& l);
127 void onRemoveLayer(
const Layer& l);
129 static bool hasLayerEvents(
const Layer& l);
131 template<
class T,
class F>
132 void removeIf(T& t,F f);
135 std::vector<Layer> lay;
137 int32_t itemUseSt = 0;
138 int32_t itemUseDestSt = 0;
141 uint64_t lastUpdate=0;
143 bool needToUpdate =
true;
144 uint8_t hasEvents = 0;
145 uint8_t isFlyCombined = 0;
146 uint8_t hasTransitions = 0;
148 float headRotX = 0, headRotY = 0;
155 Tempest::Matrix4x4 pos;
bool update(uint64_t tickCount, bool force)
BodyState bodyState() const
const Tempest::Matrix4x4 * transform() const
void setObjectMatrix(const Tempest::Matrix4x4 &obj, bool sync)
auto rootNode() const -> const Tempest::Matrix4x4
bool stopAnim(std::string_view name)
void setAnimRotate(const AnimationSolver &solver, Npc &npc, WeaponState fightMode, AnimationSolver::TurnType turn, int dir)
bool isJumpBack(uint64_t tickCount) const
void load(Serialize &fin, const AnimationSolver &solver)
static uint8_t calcAniComb(const Tempest::Vec3 &dpos, float rotation)
void setHeadRotation(float dx, float dz)
bool startAnim(const AnimationSolver &solver, const Animation::Sequence *sq, uint8_t comb, BodyState bs, StartHint hint, uint64_t tickCount)
bool isDefence(uint64_t tickCount) const
bool isAttackAnim() const
bool isInAnim(std::string_view sq) const
auto setAnimItem(const AnimationSolver &solver, Npc &npc, std::string_view scheme, int state) -> const Animation::Sequence *
bool hasState(BodyState s) const
uint64_t animationTotalTime() const
bool stopItemStateAnim(const AnimationSolver &solver, uint64_t tickCount)
void processLayers(AnimationSolver &solver, uint64_t tickCount)
auto rootBone() const -> const Tempest::Matrix4x4
auto bone(size_t id) const -> const Tempest::Matrix4x4 &
void processPfx(MdlVisual &visual, World &world, uint64_t tickCount)
Tempest::Vec3 animMoveSpeed(uint64_t tickCount, uint64_t dt) const
bool isDefWindow(uint64_t tickCount) const
bool isPrehit(uint64_t now) const
bool processEvents(uint64_t &barrier, uint64_t now, Animation::EvCount &ev) const
Tempest::Vec2 headRotation() const
static uint8_t calcAniCombVert(const Tempest::Vec3 &dpos)
bool isDefParWindow(uint64_t tickCount) const
void processSfx(Npc &npc, uint64_t tickCount)
void setSkeleton(const Skeleton *sk)
auto continueCombo(const AnimationSolver &solver, const Animation::Sequence *sq, BodyState bs, uint64_t tickCount) -> const Animation::Sequence *
uint64_t atkTotalTime() const
uint16_t comboLength() const
void save(Serialize &fout)
bool hasStateFlag(BodyState f) const
size_t findNode(std::string_view b) const
static const size_t MAX_NUM_SKELETAL_NODES