diff options
author | Juan Linietsky <reduzio@gmail.com> | 2016-07-10 12:39:50 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-07-10 12:39:50 -0300 |
commit | b06eca108af4da333e84f553ac1e8ca25e6c1cdf (patch) | |
tree | d49a6b4073c7b3d8268576db1d82cb9da70dac2f | |
parent | 5bb552273bf1bf2dd1ce4b79678d0cbd1262dd04 (diff) | |
parent | 185ba75bfac7fc958bf334ca017579177e094149 (diff) | |
download | redot-engine-b06eca108af4da333e84f553ac1e8ca25e6c1cdf.tar.gz |
Merge pull request #5490 from timoschwarzer/master
Add new Camera2D alignment functions
-rw-r--r-- | doc/base/classes.xml | 11 | ||||
-rw-r--r-- | scene/2d/camera_2d.cpp | 31 | ||||
-rw-r--r-- | scene/2d/camera_2d.h | 2 |
3 files changed, 44 insertions, 0 deletions
diff --git a/doc/base/classes.xml b/doc/base/classes.xml index e49407d2d6..dd00a0312c 100644 --- a/doc/base/classes.xml +++ b/doc/base/classes.xml @@ -6676,6 +6676,17 @@ Force the camera to update scroll immediately. </description> </method> + <method name="reset_smoothing"> + <description> + Set the camera's position immediately to its current smoothing destination. + This has no effect if smoothing is disabled. + </description> + </method> + <method name="align"> + <description> + Align the camera to the tracked node + </description> + </method> <method name="get_anchor_mode" qualifiers="const"> <return type="int"> </return> diff --git a/scene/2d/camera_2d.cpp b/scene/2d/camera_2d.cpp index 27e07a35be..f98a50e3e0 100644 --- a/scene/2d/camera_2d.cpp +++ b/scene/2d/camera_2d.cpp @@ -408,6 +408,35 @@ void Camera2D::force_update_scroll() { _update_scroll(); } +void Camera2D::reset_smoothing() { + + smoothed_camera_pos = camera_pos; + _update_scroll(); +} + +void Camera2D::align() { + + Size2 screen_size = get_viewport_rect().size; + screen_size=get_viewport_rect().size; + Point2 current_camera_pos = get_global_transform().get_origin(); + if (anchor_mode==ANCHOR_MODE_DRAG_CENTER) { + if (h_ofs<0) { + camera_pos.x = current_camera_pos.x + screen_size.x * 0.5 * drag_margin[MARGIN_RIGHT] * h_ofs; + } else { + camera_pos.x = current_camera_pos.x + screen_size.x * 0.5 * drag_margin[MARGIN_LEFT] * h_ofs; + } + if (v_ofs<0) { + camera_pos.y = current_camera_pos.y + screen_size.y * 0.5 * drag_margin[MARGIN_TOP] * v_ofs; + } else { + camera_pos.y = current_camera_pos.y + screen_size.y * 0.5 * drag_margin[MARGIN_BOTTOM] * v_ofs; + } + } else if (anchor_mode==ANCHOR_MODE_FIXED_TOP_LEFT){ + + camera_pos=current_camera_pos; + } + + _update_scroll(); +} void Camera2D::set_follow_smoothing(float p_speed) { @@ -543,6 +572,8 @@ void Camera2D::_bind_methods() { ObjectTypeDB::bind_method(_MD("is_follow_smoothing_enabled"),&Camera2D::is_follow_smoothing_enabled); ObjectTypeDB::bind_method(_MD("force_update_scroll"),&Camera2D::force_update_scroll); + ObjectTypeDB::bind_method(_MD("reset_smoothing"),&Camera2D::reset_smoothing); + ObjectTypeDB::bind_method(_MD("align"),&Camera2D::align); ObjectTypeDB::bind_method(_MD("_set_old_smoothing","follow_smoothing"),&Camera2D::_set_old_smoothing); diff --git a/scene/2d/camera_2d.h b/scene/2d/camera_2d.h index 22e5bc382a..b3f55d798d 100644 --- a/scene/2d/camera_2d.h +++ b/scene/2d/camera_2d.h @@ -128,6 +128,8 @@ public: Vector2 get_camera_pos() const; void force_update_scroll(); + void reset_smoothing(); + void align(); Camera2D(); }; |