载入中...
搜索中...
未找到
AnimTrail.h
浏览该文件的文档.
1#pragma once
2
3#include <string>
4#include <vector>
5
6namespace eve::graphics {
7class Graphics;
8}
9
10namespace eve::animation {
11
12class AnimPose;
13
31class AnimTrail {
32public:
33 explicit AnimTrail(int capacity = 64);
34 ~AnimTrail() = default;
35
36 AnimTrail(const AnimTrail &) = delete;
37 AnimTrail &operator=(const AnimTrail &) = delete;
38
40 void setCapacity(int capacity);
41 int getCapacity() const { return capacity_; }
42
44 void setDuration(float seconds);
45 float getDuration() const { return duration_; }
46
48 void setMinDistance(float distance);
49 float getMinDistance() const { return minDistance_; }
50
51 void setWidth(float pixels);
52 float getWidth() const { return width_; }
53
55 void setColor(float r, float g, float b, float a = 1.f);
56 float getColorR() const { return colorR_; }
57 float getColorG() const { return colorG_; }
58 float getColorB() const { return colorB_; }
59 float getColorA() const { return colorA_; }
60
61 void setFade(bool enable);
62 bool getFade() const { return fade_; }
63
65 void setStyle(const std::string &style);
66 std::string getStyle() const;
67
72 void setDrawScale(float sx, float sy);
73 float getDrawScaleX() const { return drawScaleX_; }
74 float getDrawScaleY() const { return drawScaleY_; }
75 void setDrawOffset(float ox, float oy);
76 float getDrawOffsetX() const { return drawOffsetX_; }
77 float getDrawOffsetY() const { return drawOffsetY_; }
78
80 void addPoint(float x, float y);
82 void addPoint3(float x, float y, float z);
83
89 void sampleBone(const AnimPose *pose, int boneIndex, const std::string &plane = "xy");
90 void sampleBoneOffset(const AnimPose *pose, int boneIndex, float ox, float oy, float oz,
91 const std::string &plane = "xy");
92
93 void clear();
94
96 void update(float dt);
97
98 int getPointCount() const { return static_cast<int>(points_.size()); }
100 float getPointX(int index) const;
101 float getPointY(int index) const;
102 float getPointZ(int index) const;
103 float getPointAge(int index) const;
105 float getPointAlpha(int index) const;
106
108 void draw(graphics::Graphics *gfx);
109
110private:
111 enum class Style { Line, Points };
112
113 struct Point {
114 float x = 0.f, y = 0.f, z = 0.f;
115 float age = 0.f;
116 };
117
118 void pushPoint(float x, float y, float z);
119 void requireIndex(int index) const;
120 void projectPlane(float x, float y, float z, const std::string &plane, float *outX,
121 float *outY) const;
122 float alphaFor(const Point &p) const;
123 void toScreen(float x, float y, float *sx, float *sy) const;
124 void drawSegment(graphics::Graphics *gfx, float x0, float y0, float x1, float y1, float a0,
125 float a1) const;
126 void drawDot(graphics::Graphics *gfx, float x, float y, float alpha) const;
127
128 int capacity_ = 64;
129 float duration_ = 0.5f;
130 float minDistance_ = 0.f;
131 float width_ = 3.f;
132 float colorR_ = 1.f, colorG_ = 0.85f, colorB_ = 0.35f, colorA_ = 1.f;
133 bool fade_ = true;
134 Style style_ = Style::Line;
135
136 float drawScaleX_ = 1.f;
137 float drawScaleY_ = 1.f;
138 float drawOffsetX_ = 0.f;
139 float drawOffsetY_ = 0.f;
140
141 std::vector<Point> points_;
142};
143
144} // namespace eve::animation
int y
Definition Grass.cpp:135
int z
Definition Grass.cpp:135
int x
Definition Grass.cpp:135
uint32_t a
uint32_t b
glm::vec4 p[6]
Evaluated local (and optional world) pose for an AnimSkeleton. Script type: AnimPose.
Definition AnimPose.h:15
Motion trail / afterimage recorder + 2D trajectory drawer.
Definition AnimTrail.h:31
std::string getStyle() const
Definition AnimTrail.cpp:62
void setDuration(float seconds)
How long each sample lives (seconds). <= 0 keeps until capacity eviction.
Definition AnimTrail.cpp:27
float getColorB() const
Definition AnimTrail.h:58
void setCapacity(int capacity)
Max retained samples (ring). Clamped to >= 2.
Definition AnimTrail.cpp:19
void setWidth(float pixels)
Definition AnimTrail.cpp:36
void update(float dt)
Age samples by dt; drop expired (when duration > 0).
void addPoint3(float x, float y, float z)
Append a 3D sample (draw uses set plane / first two mapped axes via sampleBone).
Definition AnimTrail.cpp:78
void setDrawOffset(float ox, float oy)
Definition AnimTrail.cpp:71
int getPointCount() const
Definition AnimTrail.h:98
void setMinDistance(float distance)
Skip new samples closer than this distance to the newest point (0 = always add).
Definition AnimTrail.cpp:31
void draw(graphics::Graphics *gfx)
Draw trajectory in 2D pixel/world space via Graphics.
float getDrawScaleY() const
Definition AnimTrail.h:74
float getWidth() const
Definition AnimTrail.h:52
void setColor(float r, float g, float b, float a=1.f)
Head (newest) color; alpha fades toward 0 along the trail when fade is on.
Definition AnimTrail.cpp:41
float getDrawOffsetX() const
Definition AnimTrail.h:76
float getPointZ(int index) const
AnimTrail & operator=(const AnimTrail &)=delete
void sampleBone(const AnimPose *pose, int boneIndex, const std::string &plane="xy")
Sample bone world position after pose->computeWorld. plane maps axes to draw (x,y): "xy" | "xz" | "yz...
float getColorR() const
Definition AnimTrail.h:56
void setStyle(const std::string &style)
"line" | "points". Invalid → exception.
Definition AnimTrail.cpp:50
void setFade(bool enable)
Definition AnimTrail.cpp:48
float getDrawOffsetY() const
Definition AnimTrail.h:77
float getDrawScaleX() const
Definition AnimTrail.h:73
float getMinDistance() const
Definition AnimTrail.h:49
AnimTrail(const AnimTrail &)=delete
float getPointAlpha(int index) const
Effective draw alpha in [0, colorA] after fade.
float getPointX(int index) const
Index 0 = oldest retained sample; count-1 = newest.
float getColorG() const
Definition AnimTrail.h:57
float getColorA() const
Definition AnimTrail.h:59
void setDrawScale(float sx, float sy)
Applied at draw time: screen = (x,y) * scale + offset. Useful when sampling bone world units into pix...
Definition AnimTrail.cpp:66
float getPointY(int index) const
float getDuration() const
Definition AnimTrail.h:45
float getPointAge(int index) const
void sampleBoneOffset(const AnimPose *pose, int boneIndex, float ox, float oy, float oz, const std::string &plane="xy")
void addPoint(float x, float y)
Append a 2D sample (z stored as 0).
Definition AnimTrail.cpp:76
卡牌游戏 UI 工具模块:工厂 + 脚本绑定入口。 功能参考 ycarowr/UiCard:扇形手牌布局、抽牌/洗牌、悬浮放大、拖拽到落牌区、 敌方手牌(背面/偷看)、费用不足置灰,以及可实时调节的布局...
Definition AnimTrail.h:6