summary refs log tree commit diff stats
path: root/src/components/ponderable.h
diff options
context:
space:
mode:
authorKelly Rauchenberger <fefferburbia@gmail.com>2018-05-17 15:55:37 -0400
committerGitHub <noreply@github.com>2018-05-17 15:55:37 -0400
commit90aadf3844386824140a20d7fbb847bc16009a94 (patch)
tree6f83fce90e71abb22b1a8f3e09c79963b2a34d5d /src/components/ponderable.h
parentbc63fa57ced1c7329f7fdcfd168eaf7e290158bc (diff)
parent86f0106d0523825549f1e74b835688c78a10cf6c (diff)
downloadtherapy-90aadf3844386824140a20d7fbb847bc16009a94.tar.gz
therapy-90aadf3844386824140a20d7fbb847bc16009a94.tar.bz2
therapy-90aadf3844386824140a20d7fbb847bc16009a94.zip
Merge pull request #7 from hatkirby/es-rewrite
The ECS rewrite exceeds the original branch in functionality, so it is time to merge it in.
Diffstat (limited to 'src/components/ponderable.h')
-rw-r--r--src/components/ponderable.h131
1 files changed, 131 insertions, 0 deletions
diff --git a/src/components/ponderable.h b/src/components/ponderable.h new file mode 100644 index 0000000..221d267 --- /dev/null +++ b/src/components/ponderable.h
@@ -0,0 +1,131 @@
1#ifndef TANGIBLE_H_746DB3EE
2#define TANGIBLE_H_746DB3EE
3
4#include <set>
5#include "component.h"
6#include "entity_manager.h"
7#include "vector.h"
8#include "direction.h"
9
10class PonderableComponent : public Component {
11public:
12
13 using id_type = EntityManager::id_type;
14
15 /**
16 * List of different types of physical bodies.
17 *
18 * vacuumed - Default.
19 * freefalling - The body will be treated as if there were a downward force
20 * of gravity being exerted onto it. The body will also exhibit
21 * terminal velocity (that is, its downward velocity will be
22 * capped at a constant value).
23 */
24 enum class Type {
25 vacuumed,
26 freefalling
27 };
28
29 /**
30 * List of different types of collidable surfaces.
31 */
32 enum class Collision {
33 wall,
34 platform,
35 adjacency,
36 warp,
37 danger,
38 event
39 };
40
41 /**
42 * Constructor for initializing the body type, which is a constant.
43 */
44 PonderableComponent(Type type) : type(type)
45 {
46 }
47
48 /**
49 * The velocity of the body.
50 */
51 vec2d vel = { 0.0, 0.0 };
52
53 /**
54 * The acceleration of the body.
55 */
56 vec2d accel = { 0.0, 0.0 };
57
58 /**
59 * The type of physical body that the entity is meant to assume. The body will
60 * be acted upon differently based on this. See the enumeration above for more
61 * details.
62 *
63 * @managed_by PonderingSystem
64 */
65 const Type type;
66
67 /**
68 * Whether or not a freefalling body is in contact with the ground.
69 *
70 * @managed_by PonderingSystem
71 */
72 bool grounded = false;
73
74 /**
75 * Whether or not a freefalling body is being ferried by another body.
76 *
77 * @managed_by PonderingSystem
78 */
79 bool ferried = false;
80
81 /**
82 * The entity that is ferrying this body, if there is one.
83 *
84 * @managed_by PonderingSystem
85 */
86 id_type ferry;
87
88 /**
89 * The side of the ferry that the body is resting on, if there is one.
90 *
91 * @managed_by PonderingSystem
92 */
93 Direction ferrySide;
94
95 /**
96 * The bodies that are being ferried by this body.
97 *
98 * @managed_by PonderingSystem
99 */
100 std::set<id_type> passengers;
101
102 /**
103 * If enabled, this will prevent the body from moving and accelerating. The
104 * velocity and position of the body can still be affected by sources external
105 * to the PonderingSystem. Enabling this will cause applicable bodies to
106 * become ungrounded and unferried.
107 */
108 bool frozen = false;
109
110 /**
111 * If disabled, collision detection for this body will not be performed and
112 * other bodies will ignore it. Disabling this will cause applicable bodies to
113 * become ungrounded and unferried.
114 */
115 bool collidable = true;
116
117 /**
118 * The effect that colliding with this body has.
119 */
120 Collision colliderType = Collision::wall;
121
122 /**
123 * If this flag is disabled, the entity will be ignored by the pondering
124 * system.
125 *
126 * @managed_by RealizingSystem
127 */
128 bool active = false;
129};
130
131#endif /* end of include guard: TANGIBLE_H_746DB3EE */