Merge pull request #5490 from timoschwarzer/master
Add new Camera2D alignment functions
This commit is contained in:
commit
b06eca108a
@ -6676,6 +6676,17 @@
|
|||||||
Force the camera to update scroll immediately.
|
Force the camera to update scroll immediately.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</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">
|
<method name="get_anchor_mode" qualifiers="const">
|
||||||
<return type="int">
|
<return type="int">
|
||||||
</return>
|
</return>
|
||||||
|
@ -408,6 +408,35 @@ void Camera2D::force_update_scroll() {
|
|||||||
_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) {
|
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("is_follow_smoothing_enabled"),&Camera2D::is_follow_smoothing_enabled);
|
||||||
|
|
||||||
ObjectTypeDB::bind_method(_MD("force_update_scroll"),&Camera2D::force_update_scroll);
|
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);
|
ObjectTypeDB::bind_method(_MD("_set_old_smoothing","follow_smoothing"),&Camera2D::_set_old_smoothing);
|
||||||
|
|
||||||
|
@ -128,6 +128,8 @@ public:
|
|||||||
|
|
||||||
Vector2 get_camera_pos() const;
|
Vector2 get_camera_pos() const;
|
||||||
void force_update_scroll();
|
void force_update_scroll();
|
||||||
|
void reset_smoothing();
|
||||||
|
void align();
|
||||||
|
|
||||||
Camera2D();
|
Camera2D();
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user