summaryrefslogtreecommitdiff
path: root/scene/2d/node_2d.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'scene/2d/node_2d.cpp')
-rw-r--r--scene/2d/node_2d.cpp47
1 files changed, 44 insertions, 3 deletions
diff --git a/scene/2d/node_2d.cpp b/scene/2d/node_2d.cpp
index a2bee43e58..4c00db2429 100644
--- a/scene/2d/node_2d.cpp
+++ b/scene/2d/node_2d.cpp
@@ -51,9 +51,9 @@ bool Node2D::edit_has_pivot() const {
Variant Node2D::edit_get_state() const {
Array state;
- state.push_back(pos);
- state.push_back(angle);
- state.push_back(scale);
+ state.push_back(get_pos());
+ state.push_back(get_rot());
+ state.push_back(get_scale());
return state;
@@ -224,11 +224,47 @@ Rect2 Node2D::get_item_rect() const {
return Rect2(Point2(-32,-32),Size2(64,64));
}
+void Node2D::rotate(float p_degrees) {
+
+ set_rot( get_rot() + p_degrees);
+}
+
+void Node2D::move_x(float p_delta,bool p_scaled){
+
+ Matrix32 t = get_transform();
+ Vector2 m = t[0];
+ if (!p_scaled)
+ m.normalize();
+ set_pos(t[2]+m*p_delta);
+}
+
+void Node2D::move_y(float p_delta,bool p_scaled){
+
+ Matrix32 t = get_transform();
+ Vector2 m = t[1];
+ if (!p_scaled)
+ m.normalize();
+ set_pos(t[2]+m*p_delta);
+}
+
+
Point2 Node2D::get_global_pos() const {
return get_global_transform().get_origin();
}
+void Node2D::set_global_pos(const Point2& p_pos) {
+
+ Matrix32 inv;
+ CanvasItem *pi = get_parent_item();
+ if (pi) {
+ inv = pi->get_global_transform().affine_inverse();
+ set_pos(inv.xform(p_pos));
+ } else {
+ set_pos(p_pos);
+ }
+}
+
void Node2D::set_transform(const Matrix32& p_transform) {
_mat=p_transform;
@@ -268,7 +304,12 @@ void Node2D::_bind_methods() {
ObjectTypeDB::bind_method(_MD("get_rot"),&Node2D::get_rot);
ObjectTypeDB::bind_method(_MD("get_scale"),&Node2D::get_scale);
+ ObjectTypeDB::bind_method(_MD("rotate","degrees"),&Node2D::rotate);
+ ObjectTypeDB::bind_method(_MD("move_local_x","delta","scaled"),&Node2D::move_x,DEFVAL(false));
+ ObjectTypeDB::bind_method(_MD("move_local_y","delta","scaled"),&Node2D::move_y,DEFVAL(false));
+
ObjectTypeDB::bind_method(_MD("get_global_pos"),&Node2D::get_global_pos);
+ ObjectTypeDB::bind_method(_MD("set_global_pos"),&Node2D::set_global_pos);
ObjectTypeDB::bind_method(_MD("set_transform","xform"),&Node2D::set_transform);
ObjectTypeDB::bind_method(_MD("set_global_transform","xform"),&Node2D::set_global_transform);