OpenGothic
Open source reimplementation of Gothic I and II
Loading...
Searching...
No Matches
animationsolver.h
Go to the documentation of this file.
1#pragma once
2
3#include <Tempest/Matrix4x4>
4#include <vector>
5
6#include "game/constants.h"
7#include "animation.h"
8
9class Skeleton;
10class Overlay;
11class Pose;
12class Interactive;
13class Serialize;
14class World;
15
16class AnimationSolver final {
17 public:
19
74
75 enum TurnType : uint8_t {
76 Std = 0,
79 };
80
81 struct Overlay final {
82 const Skeleton* skeleton=nullptr;
83 uint64_t time =0;
84 };
85
86 void save(Serialize& fout) const;
87 void load(Serialize& fin);
88
89 void setSkeleton(const Skeleton* sk);
90 void update(uint64_t tickCount);
91
92 bool hasOverlay(const Skeleton* sk) const;
93 void addOverlay(const Skeleton* sk, uint64_t time);
94 void delOverlay(std::string_view sk);
95 void delOverlay(const Skeleton* sk);
96 void clearOverlays();
97
99 const Animation::Sequence* solveFrm (std::string_view format) const;
100 const Animation::Sequence* solveAnim(Anim a, WeaponState st, WalkBit wlk, const Pose &pose) const;
101 const Animation::Sequence* solveAnim(WeaponState st, WeaponState cur, bool run) const;
102 const Animation::Sequence* solveAnim(std::string_view scheme, bool run, bool invest) const;
103 const Animation::Sequence* solveAnim(Interactive *inter, Anim a, const Pose &pose) const;
104
105 private:
106 const Animation::Sequence* solveFrm (std::string_view format, WeaponState st) const;
107
108 const Animation::Sequence* solveMag (std::string_view format, std::string_view spell) const;
109 const Animation::Sequence* solveDead (std::string_view format1, std::string_view format2) const;
110
111 const Animation::Sequence* implSolveAnim(Anim a, WeaponState st, WalkBit wlk, const Pose &pose) const;
112 void invalidateCache();
113
114 const Skeleton* baseSk=nullptr;
115 std::vector<Overlay> overlay;
116
117 mutable const Animation::Sequence* cache [CacheLast][2][2] = {};
118 };
void addOverlay(const Skeleton *sk, uint64_t time)
const Animation::Sequence * solveNext(const Animation::Sequence &sq) const
const Animation::Sequence * solveFrm(std::string_view format) const
void load(Serialize &fin)
const Animation::Sequence * solveAnim(Anim a, WeaponState st, WalkBit wlk, const Pose &pose) const
void setSkeleton(const Skeleton *sk)
void delOverlay(std::string_view sk)
void update(uint64_t tickCount)
void save(Serialize &fout) const
bool hasOverlay(const Skeleton *sk) const
Definition pose.h:16
Definition world.h:31
WalkBit
Definition constants.h:209
WeaponState
Definition constants.h:191
const Skeleton * skeleton