This commit is contained in:
Vincent D 2021-11-10 10:47:57 +01:00 committed by GitHub
commit 9b26f6c5b5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 33 additions and 6 deletions

View file

@ -102,6 +102,8 @@
<member name="global_scale" type="Vector2" setter="set_global_scale" getter="get_global_scale">
Global scale.
</member>
<member name="global_skew" type="float" setter="set_global_skew" getter="get_global_skew">
</member>
<member name="global_transform" type="Transform2D" setter="set_global_transform" getter="get_global_transform">
Global [Transform2D].
</member>

View file

@ -262,16 +262,34 @@ real_t Node2D::get_global_rotation() const {
return get_global_transform().get_rotation();
}
void Node2D::set_global_rotation(real_t p_radians) {
real_t Node2D::get_global_skew() const {
return get_global_transform().get_skew();
}
void Node2D::set_global_rotation(const real_t p_radians) {
CanvasItem *pi = get_parent_item();
if (pi) {
const real_t parent_global_rot = pi->get_global_transform().get_rotation();
set_rotation(p_radians - parent_global_rot);
Transform2D new_transform = get_global_transform();
new_transform.set_rotation(p_radians);
new_transform = pi->get_global_transform().affine_inverse() * new_transform;
set_rotation(new_transform.get_rotation());
} else {
set_rotation(p_radians);
}
}
void Node2D::set_global_skew(const real_t p_radians) {
CanvasItem *pi = get_parent_item();
if (pi) {
Transform2D new_transform = get_global_transform();
new_transform.set_skew(p_radians);
new_transform = pi->get_global_transform().affine_inverse() * new_transform;
set_skew(new_transform.get_skew());
} else {
set_skew(p_radians);
}
}
Size2 Node2D::get_global_scale() const {
return get_global_transform().get_scale();
}
@ -279,8 +297,10 @@ Size2 Node2D::get_global_scale() const {
void Node2D::set_global_scale(const Size2 &p_scale) {
CanvasItem *pi = get_parent_item();
if (pi) {
const Size2 parent_global_scale = pi->get_global_transform().get_scale();
set_scale(p_scale / parent_global_scale);
Transform2D new_transform = get_global_transform();
new_transform.set_scale(p_scale);
new_transform = pi->get_global_transform().affine_inverse() * new_transform;
set_scale(new_transform.get_scale());
} else {
set_scale(p_scale);
}
@ -393,6 +413,8 @@ void Node2D::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_global_position"), &Node2D::get_global_position);
ClassDB::bind_method(D_METHOD("set_global_rotation", "radians"), &Node2D::set_global_rotation);
ClassDB::bind_method(D_METHOD("get_global_rotation"), &Node2D::get_global_rotation);
ClassDB::bind_method(D_METHOD("set_global_skew", "radians"), &Node2D::set_global_skew);
ClassDB::bind_method(D_METHOD("get_global_skew"), &Node2D::get_global_skew);
ClassDB::bind_method(D_METHOD("set_global_scale", "scale"), &Node2D::set_global_scale);
ClassDB::bind_method(D_METHOD("get_global_scale"), &Node2D::get_global_scale);
@ -426,6 +448,7 @@ void Node2D::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "global_position", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NONE), "set_global_position", "get_global_position");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "global_rotation", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NONE), "set_global_rotation", "get_global_rotation");
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "global_scale", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NONE), "set_global_scale", "get_global_scale");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "global_skew", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NONE), "set_global_skew", "get_global_skew");
ADD_PROPERTY(PropertyInfo(Variant::TRANSFORM2D, "global_transform", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NONE), "set_global_transform", "get_global_transform");
ADD_GROUP("Ordering", "");

View file

@ -92,12 +92,14 @@ public:
Point2 get_global_position() const;
real_t get_global_rotation() const;
real_t get_global_skew() const;
Size2 get_global_scale() const;
void set_transform(const Transform2D &p_transform);
void set_global_transform(const Transform2D &p_transform);
void set_global_position(const Point2 &p_pos);
void set_global_rotation(real_t p_radians);
void set_global_rotation(const real_t p_radians);
void set_global_skew(const real_t p_radians);
void set_global_scale(const Size2 &p_scale);
void set_z_index(int p_z);