-
Notifications
You must be signed in to change notification settings - Fork 1
/
circle_effect.hpp
85 lines (62 loc) · 1.82 KB
/
circle_effect.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#ifndef CIRCLE_HPP
#define CIRCLE_HPP
#include <bitset>
#include "effect.hpp"
class CircleEffect : public Effect
{
Point m_center;
float m_radius;
Color3 m_color;
bool m_fill;
public:
CircleEffect(const Point& center, const float radius, const Color3& color, const bool fill);
void fill(EffectBuffer& buffer, const EffectState& state) override;
void set_radius(const float radius) { m_radius = radius; }
void set_color(const Color3& color) { m_color = color; }
void set_center(const Point& center) { m_center = center; }
};
class ExtendingCircleEffect : public Effect
{
float m_radius;
double m_duration;
double m_start;
Color3 m_color;
CircleEffect m_circle;
public:
ExtendingCircleEffect(float radius, const Color3& color, float duration, const double start);
void fill(EffectBuffer& buffer, const EffectState& state) override;
};
class ExplodingCircleEffect : public Effect
{
float m_radius;
double m_duration;
double m_start;
CircleEffect m_circle;
public:
ExplodingCircleEffect(float radius, float duration, const double start);
void fill(EffectBuffer& buffer, const EffectState& state) override;
};
class DisolvingCircleFieldEffect : public Effect
{
struct CircleData {
CircleData()
: m_start(0),
m_lenghth(0),
m_radius(0),
m_color(0),
m_center(0, 0)
{}
double m_start;
double m_lenghth;
float m_radius;
Color3 m_color;
Point m_center;
};
unsigned int m_count;
std::vector<CircleData> circles;
std::bitset<EffectBuffer::Height * EffectBuffer::Width> occupied;
public:
DisolvingCircleFieldEffect(unsigned int count);
void fill(EffectBuffer& buffer, const EffectState& state) override;
};
#endif