summaryrefslogtreecommitdiff
path: root/scene/2d/parallax_layer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'scene/2d/parallax_layer.cpp')
-rw-r--r--scene/2d/parallax_layer.cpp36
1 files changed, 35 insertions, 1 deletions
diff --git a/scene/2d/parallax_layer.cpp b/scene/2d/parallax_layer.cpp
index bf559deb09..e9378b1d02 100644
--- a/scene/2d/parallax_layer.cpp
+++ b/scene/2d/parallax_layer.cpp
@@ -32,6 +32,15 @@
void ParallaxLayer::set_motion_scale(const Size2& p_scale) {
motion_scale=p_scale;
+
+
+ ParallaxBackground *pb = get_parent()->cast_to<ParallaxBackground>();
+ if (is_inside_tree() && pb) {
+ Vector2 ofs = pb->get_final_offset();
+ float scale = pb->get_scroll_scale();
+ set_base_offset_and_scale(ofs,scale);
+ }
+
}
Size2 ParallaxLayer::get_motion_scale() const {
@@ -40,6 +49,23 @@ Size2 ParallaxLayer::get_motion_scale() const {
}
+void ParallaxLayer::set_motion_offset(const Size2& p_offset) {
+
+ motion_offset=p_offset;
+
+ ParallaxBackground *pb = get_parent()->cast_to<ParallaxBackground>();
+ if (is_inside_tree() && pb) {
+ Vector2 ofs = pb->get_final_offset();
+ float scale = pb->get_scroll_scale();
+ set_base_offset_and_scale(ofs,scale);
+ }
+}
+
+Size2 ParallaxLayer::get_motion_offset() const {
+
+ return motion_offset;
+
+}
void ParallaxLayer::_update_mirroring() {
@@ -59,6 +85,11 @@ void ParallaxLayer::_update_mirroring() {
void ParallaxLayer::set_mirroring(const Size2& p_mirroring) {
mirroring=p_mirroring;
+ if (mirroring.x<0)
+ mirroring.x=0;
+ if (mirroring.y<0)
+ mirroring.y=0;
+
_update_mirroring();
}
@@ -89,7 +120,7 @@ void ParallaxLayer::set_base_offset_and_scale(const Point2& p_offset,float p_sca
return;
if (get_tree()->is_editor_hint())
return;
- Point2 new_ofs = ((orig_offset+p_offset)*motion_scale)*p_scale;
+ Point2 new_ofs = ((orig_offset+p_offset)*motion_scale)*p_scale+motion_offset;
if (mirroring.x) {
@@ -132,10 +163,13 @@ void ParallaxLayer::_bind_methods() {
ObjectTypeDB::bind_method(_MD("set_motion_scale","scale"),&ParallaxLayer::set_motion_scale);
ObjectTypeDB::bind_method(_MD("get_motion_scale"),&ParallaxLayer::get_motion_scale);
+ ObjectTypeDB::bind_method(_MD("set_motion_offset","offset"),&ParallaxLayer::set_motion_offset);
+ ObjectTypeDB::bind_method(_MD("get_motion_offset"),&ParallaxLayer::get_motion_offset);
ObjectTypeDB::bind_method(_MD("set_mirroring","mirror"),&ParallaxLayer::set_mirroring);
ObjectTypeDB::bind_method(_MD("get_mirroring"),&ParallaxLayer::get_mirroring);
ADD_PROPERTY( PropertyInfo(Variant::VECTOR2,"motion/scale"),_SCS("set_motion_scale"),_SCS("get_motion_scale"));
+ ADD_PROPERTY( PropertyInfo(Variant::VECTOR2,"motion/offset"),_SCS("set_motion_offset"),_SCS("get_motion_offset"));
ADD_PROPERTY( PropertyInfo(Variant::VECTOR2,"motion/mirroring"),_SCS("set_mirroring"),_SCS("get_mirroring"));
}