31#ifndef FENNEC_SCENE_COMPONENTS_TRANSFORM2D_H
32#define FENNEC_SCENE_COMPONENTS_TRANSFORM2D_H
35#include <fennec/math/ext/transform.h>
37#include <fennec/core/event.h>
47struct transform_update_2d : event {
50 FENNEC_RTTI_CLASS_ENABLE(event) {
55struct node2d : scene_node {
58 enum mobility_ :
bool {
59 mobility_static =
false,
71 : scene_node(scn, id, name)
72 , _mobility(mobility_free)
81 template<
typename TypeT>
82 node2d(
fennec::scene* scn,
size_t id,
const string& name, TypeT* type)
83 : scene_node(scn, id, name, type)
84 , _mobility(mobility_free)
91 node2d(
const node2d&) =
default;
92 node2d(node2d&&) noexcept = default;
98 constexpr const vec2& position()
const {
102 constexpr const vec2& scale()
const {
106 constexpr float rotation()
const {
110 constexpr const vec2& shear()
const {
114 constexpr bool mobility()
const {
121 constexpr void translate(
const vec2& x) {
127 constexpr void scale(
const vec2& s) {
133 constexpr void rotate(
float r) {
139 constexpr void shear(
const vec2& s) {
145 constexpr void commit() {
160 constexpr const mat3& local() {
164 constexpr const mat3& global() {
175 mat3 _local, _global;
180 constexpr void _recalculate(
const mat3& parent) {
181 _local = fennec::rotation(_rotation);
182 _local *= fennec::shear(_shear);
183 _local *= fennec::scaling(_scale);
184 _local *= fennec::translation(_position);
185 _global = parent * _local;
Main Scene Hierarchy.
Definition scene.h:36
tvec2< float_t > vec2
A two-component single-precision floating-point vector.
Definition vector.h:162