23#define __WIZARD_ENGINE_INTERNAL__
28void wze::entity::update_x(component& instance)
const {
29 if (!instance.attach_x()) {
32 if (instance.x_angle_lock()) {
35 transformation_matrix()));
37 instance.set_x(x() + instance.x_offset());
41void wze::entity::update_y(component& instance)
const {
42 if (!instance.attach_y()) {
45 if (instance.y_angle_lock()) {
48 transformation_matrix()));
50 instance.set_y(y() + instance.y_offset());
54void wze::entity::update_angle(component& instance)
const {
55 if (instance.attach_angle()) {
56 instance.set_angle(angle() + instance.angle_offset());
60std::vector<std::weak_ptr<wze::component>>
const&
61wze::entity::components()
const {
65std::vector<std::weak_ptr<wze::component>>& wze::entity::components() {
69float wze::entity::x()
const {
73void wze::entity::set_x(
float x) {
75 update<&entity::update_x>();
78float wze::entity::y()
const {
82void wze::entity::set_y(
float y) {
84 update<&entity::update_y>();
87float wze::entity::angle()
const {
91void wze::entity::set_angle(
float angle) {
94 update<&entity::update_x, &entity::update_y, &entity::update_angle>();
97std::array<float, 4>
const& wze::entity::transformation_matrix()
const {
98 return _transformation_matrix;
101float wze::entity::x_offset()
const {
105void wze::entity::set_x_offset(
float x_offset) {
106 _x_offset = x_offset;
109float wze::entity::y_offset()
const {
113void wze::entity::set_y_offset(
float y_offset) {
114 _y_offset = y_offset;
117float wze::entity::angle_offset()
const {
118 return _angle_offset;
121void wze::entity::set_angle_offset(
float angle_offset) {
122 _angle_offset = angle_offset;
125bool wze::entity::attach_x()
const {
129void wze::entity::set_attach_x(
bool attach_x) {
130 _attach_x = attach_x;
133bool wze::entity::attach_y()
const {
137void wze::entity::set_attach_y(
bool attach_y) {
138 _attach_y = attach_y;
141bool wze::entity::attach_angle()
const {
142 return _attach_angle;
145void wze::entity::set_attach_angle(
bool attach_angle) {
146 _attach_angle = attach_angle;
149bool wze::entity::x_angle_lock()
const {
150 return _x_angle_lock;
153void wze::entity::set_x_angle_lock(
bool x_angle_lock) {
154 _x_angle_lock = x_angle_lock;
157bool wze::entity::y_angle_lock()
const {
158 return _y_angle_lock;
161void wze::entity::set_y_angle_lock(
bool y_angle_lock) {
162 _y_angle_lock = y_angle_lock;
165wze::entity::entity(std::vector<std::weak_ptr<component>>
const& components,
166 float x,
float y,
float angle,
float x_offset,
167 float y_offset,
float angle_offset,
bool attach_x,
168 bool attach_y,
bool attach_angle,
bool x_angle_lock,
170 this->components() = components;
174 set_x_offset(x_offset);
175 set_y_offset(y_offset);
176 set_angle_offset(angle_offset);
177 set_attach_x(attach_x);
178 set_attach_y(attach_y);
179 set_attach_angle(attach_angle);
180 set_x_angle_lock(x_angle_lock);
181 set_y_angle_lock(y_angle_lock);
184void wze::entity::recompose() {
185 update<&entity::update_x, &entity::update_y, &entity::update_angle>();
static constexpr float transform_y(float x, float y, std::array< float, 4 > const &transformation_matrix)
Transforms the y component of a vector.
static std::array< float, 4 > transformation_matrix(float angle, float scale)
Creates a transformation matrix.
static constexpr float transform_x(float x, float y, std::array< float, 4 > const &transformation_matrix)
Transforms the x component of a vector.
Composes composable objects.