summaryrefslogtreecommitdiffstats
path: root/scene/main
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2018-08-21 21:46:04 +0200
committerGitHub <noreply@github.com>2018-08-21 21:46:04 +0200
commited10ff65fd741263ab44eeb75b198b3a41c2eb67 (patch)
treee00b29d4217400d8ae1a231d2ca5eac567c48da9 /scene/main
parent65c8a491221efdb4fd26ff230f22b541a2511483 (diff)
parent20dc63054f7846a9179b546dd3f02096ff4c6609 (diff)
downloadredot-engine-ed10ff65fd741263ab44eeb75b198b3a41c2eb67.tar.gz
Merge pull request #21245 from RandomShaper/fix-physics-canvas-xform
Take CanvasLayer transform into account for 2D physics
Diffstat (limited to 'scene/main')
-rw-r--r--scene/main/canvas_layer.cpp19
-rw-r--r--scene/main/canvas_layer.h1
2 files changed, 20 insertions, 0 deletions
diff --git a/scene/main/canvas_layer.cpp b/scene/main/canvas_layer.cpp
index a2e890e7a7..c044443b51 100644
--- a/scene/main/canvas_layer.cpp
+++ b/scene/main/canvas_layer.cpp
@@ -29,6 +29,7 @@
/*************************************************************************/
#include "canvas_layer.h"
+#include "scene/2d/canvas_item.h"
#include "viewport.h"
void CanvasLayer::set_layer(int p_xform) {
@@ -62,6 +63,24 @@ void CanvasLayer::_update_xform() {
transform.set_origin(ofs);
if (viewport.is_valid())
VisualServer::get_singleton()->viewport_set_canvas_transform(viewport, canvas, transform);
+
+ if (!is_inside_tree())
+ return;
+
+ _notify_xform(this);
+}
+
+void CanvasLayer::_notify_xform(Node *p_node) {
+
+ for (int i = 0; i < p_node->get_child_count(); i++) {
+
+ CanvasItem *ci = Object::cast_to<CanvasItem>(p_node->get_child(i));
+ if (ci) {
+ ci->_notify_transform(ci);
+ } else {
+ _notify_xform(p_node->get_child(i));
+ }
+ }
}
void CanvasLayer::_update_locrotscale() {
diff --git a/scene/main/canvas_layer.h b/scene/main/canvas_layer.h
index aae23fbb12..fd347c4739 100644
--- a/scene/main/canvas_layer.h
+++ b/scene/main/canvas_layer.h
@@ -56,6 +56,7 @@ class CanvasLayer : public Node {
int sort_index;
void _update_xform();
+ void _notify_xform(Node *p_node);
void _update_locrotscale();
protected: