Merge pull request #24806 from timoschwarzer/camera2d-process-mode
Add process_mode property to Camera2D
This commit is contained in:
commit
7d22e162e7
2 changed files with 52 additions and 7 deletions
|
@ -61,6 +61,20 @@ void Camera2D::_update_scroll() {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Camera2D::_update_process_mode() {
|
||||||
|
|
||||||
|
if (Engine::get_singleton()->is_editor_hint()) {
|
||||||
|
set_process_internal(false);
|
||||||
|
set_physics_process_internal(false);
|
||||||
|
} else if (process_mode == CAMERA2D_PROCESS_IDLE) {
|
||||||
|
set_process_internal(true);
|
||||||
|
set_physics_process_internal(false);
|
||||||
|
} else {
|
||||||
|
set_process_internal(false);
|
||||||
|
set_physics_process_internal(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Camera2D::set_zoom(const Vector2 &p_zoom) {
|
void Camera2D::set_zoom(const Vector2 &p_zoom) {
|
||||||
|
|
||||||
zoom = p_zoom;
|
zoom = p_zoom;
|
||||||
|
@ -143,7 +157,7 @@ Transform2D Camera2D::get_camera_transform() {
|
||||||
|
|
||||||
if (smoothing_enabled && !Engine::get_singleton()->is_editor_hint()) {
|
if (smoothing_enabled && !Engine::get_singleton()->is_editor_hint()) {
|
||||||
|
|
||||||
float c = smoothing * get_process_delta_time();
|
float c = smoothing * (process_mode == CAMERA2D_PROCESS_PHYSICS ? get_physics_process_delta_time() : get_process_delta_time());
|
||||||
smoothed_camera_pos = ((camera_pos - smoothed_camera_pos) * c) + smoothed_camera_pos;
|
smoothed_camera_pos = ((camera_pos - smoothed_camera_pos) * c) + smoothed_camera_pos;
|
||||||
ret_camera_pos = smoothed_camera_pos;
|
ret_camera_pos = smoothed_camera_pos;
|
||||||
//camera_pos=camera_pos*(1.0-smoothing)+new_camera_pos*smoothing;
|
//camera_pos=camera_pos*(1.0-smoothing)+new_camera_pos*smoothing;
|
||||||
|
@ -217,14 +231,15 @@ void Camera2D::_notification(int p_what) {
|
||||||
|
|
||||||
switch (p_what) {
|
switch (p_what) {
|
||||||
|
|
||||||
case NOTIFICATION_INTERNAL_PROCESS: {
|
case NOTIFICATION_INTERNAL_PROCESS:
|
||||||
|
case NOTIFICATION_INTERNAL_PHYSICS_PROCESS: {
|
||||||
|
|
||||||
_update_scroll();
|
_update_scroll();
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
case NOTIFICATION_TRANSFORM_CHANGED: {
|
case NOTIFICATION_TRANSFORM_CHANGED: {
|
||||||
|
|
||||||
if (!is_processing_internal())
|
if (!is_processing_internal() && !is_physics_processing_internal())
|
||||||
_update_scroll();
|
_update_scroll();
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
|
@ -245,10 +260,7 @@ void Camera2D::_notification(int p_what) {
|
||||||
add_to_group(group_name);
|
add_to_group(group_name);
|
||||||
add_to_group(canvas_group_name);
|
add_to_group(canvas_group_name);
|
||||||
|
|
||||||
if (Engine::get_singleton()->is_editor_hint()) {
|
_update_process_mode();
|
||||||
set_process_internal(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
_update_scroll();
|
_update_scroll();
|
||||||
first = true;
|
first = true;
|
||||||
|
|
||||||
|
@ -379,6 +391,20 @@ bool Camera2D::is_rotating() const {
|
||||||
return rotating;
|
return rotating;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Camera2D::set_process_mode(Camera2DProcessMode p_mode) {
|
||||||
|
|
||||||
|
if (process_mode == p_mode)
|
||||||
|
return;
|
||||||
|
|
||||||
|
process_mode = p_mode;
|
||||||
|
_update_process_mode();
|
||||||
|
}
|
||||||
|
|
||||||
|
Camera2D::Camera2DProcessMode Camera2D::get_process_mode() const {
|
||||||
|
|
||||||
|
return process_mode;
|
||||||
|
}
|
||||||
|
|
||||||
void Camera2D::_make_current(Object *p_which) {
|
void Camera2D::_make_current(Object *p_which) {
|
||||||
|
|
||||||
if (p_which == this) {
|
if (p_which == this) {
|
||||||
|
@ -657,6 +683,9 @@ void Camera2D::_bind_methods() {
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("_update_scroll"), &Camera2D::_update_scroll);
|
ClassDB::bind_method(D_METHOD("_update_scroll"), &Camera2D::_update_scroll);
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("set_process_mode", "mode"), &Camera2D::set_process_mode);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_process_mode"), &Camera2D::get_process_mode);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("_set_current", "current"), &Camera2D::_set_current);
|
ClassDB::bind_method(D_METHOD("_set_current", "current"), &Camera2D::_set_current);
|
||||||
ClassDB::bind_method(D_METHOD("is_current"), &Camera2D::is_current);
|
ClassDB::bind_method(D_METHOD("is_current"), &Camera2D::is_current);
|
||||||
|
|
||||||
|
@ -717,6 +746,7 @@ void Camera2D::_bind_methods() {
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "current"), "_set_current", "is_current");
|
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "current"), "_set_current", "is_current");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "zoom"), "set_zoom", "get_zoom");
|
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "zoom"), "set_zoom", "get_zoom");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "custom_viewport", PROPERTY_HINT_RESOURCE_TYPE, "Viewport", 0), "set_custom_viewport", "get_custom_viewport");
|
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "custom_viewport", PROPERTY_HINT_RESOURCE_TYPE, "Viewport", 0), "set_custom_viewport", "get_custom_viewport");
|
||||||
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "process_mode", PROPERTY_HINT_ENUM, "Physics,Idle"), "set_process_mode", "get_process_mode");
|
||||||
|
|
||||||
ADD_GROUP("Limit", "limit_");
|
ADD_GROUP("Limit", "limit_");
|
||||||
ADD_PROPERTYI(PropertyInfo(Variant::INT, "limit_left"), "set_limit", "get_limit", MARGIN_LEFT);
|
ADD_PROPERTYI(PropertyInfo(Variant::INT, "limit_left"), "set_limit", "get_limit", MARGIN_LEFT);
|
||||||
|
@ -750,6 +780,8 @@ void Camera2D::_bind_methods() {
|
||||||
|
|
||||||
BIND_ENUM_CONSTANT(ANCHOR_MODE_FIXED_TOP_LEFT);
|
BIND_ENUM_CONSTANT(ANCHOR_MODE_FIXED_TOP_LEFT);
|
||||||
BIND_ENUM_CONSTANT(ANCHOR_MODE_DRAG_CENTER);
|
BIND_ENUM_CONSTANT(ANCHOR_MODE_DRAG_CENTER);
|
||||||
|
BIND_ENUM_CONSTANT(CAMERA2D_PROCESS_PHYSICS);
|
||||||
|
BIND_ENUM_CONSTANT(CAMERA2D_PROCESS_IDLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
Camera2D::Camera2D() {
|
Camera2D::Camera2D() {
|
||||||
|
@ -772,6 +804,7 @@ Camera2D::Camera2D() {
|
||||||
limit_smoothing_enabled = false;
|
limit_smoothing_enabled = false;
|
||||||
custom_viewport = NULL;
|
custom_viewport = NULL;
|
||||||
custom_viewport_id = 0;
|
custom_viewport_id = 0;
|
||||||
|
process_mode = CAMERA2D_PROCESS_IDLE;
|
||||||
|
|
||||||
smoothing = 5.0;
|
smoothing = 5.0;
|
||||||
zoom = Vector2(1, 1);
|
zoom = Vector2(1, 1);
|
||||||
|
|
|
@ -44,6 +44,11 @@ public:
|
||||||
ANCHOR_MODE_DRAG_CENTER
|
ANCHOR_MODE_DRAG_CENTER
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum Camera2DProcessMode {
|
||||||
|
CAMERA2D_PROCESS_PHYSICS,
|
||||||
|
CAMERA2D_PROCESS_IDLE
|
||||||
|
};
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Point2 camera_pos;
|
Point2 camera_pos;
|
||||||
Point2 smoothed_camera_pos;
|
Point2 smoothed_camera_pos;
|
||||||
|
@ -73,6 +78,7 @@ protected:
|
||||||
float v_ofs;
|
float v_ofs;
|
||||||
|
|
||||||
Point2 camera_screen_center;
|
Point2 camera_screen_center;
|
||||||
|
void _update_process_mode();
|
||||||
void _update_scroll();
|
void _update_scroll();
|
||||||
|
|
||||||
void _make_current(Object *p_which);
|
void _make_current(Object *p_which);
|
||||||
|
@ -84,6 +90,8 @@ protected:
|
||||||
bool limit_drawing_enabled;
|
bool limit_drawing_enabled;
|
||||||
bool margin_drawing_enabled;
|
bool margin_drawing_enabled;
|
||||||
|
|
||||||
|
Camera2DProcessMode process_mode;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual Transform2D get_camera_transform();
|
virtual Transform2D get_camera_transform();
|
||||||
void _notification(int p_what);
|
void _notification(int p_what);
|
||||||
|
@ -126,6 +134,9 @@ public:
|
||||||
void set_follow_smoothing(float p_speed);
|
void set_follow_smoothing(float p_speed);
|
||||||
float get_follow_smoothing() const;
|
float get_follow_smoothing() const;
|
||||||
|
|
||||||
|
void set_process_mode(Camera2DProcessMode p_mode);
|
||||||
|
Camera2DProcessMode get_process_mode() const;
|
||||||
|
|
||||||
void make_current();
|
void make_current();
|
||||||
void clear_current();
|
void clear_current();
|
||||||
bool is_current() const;
|
bool is_current() const;
|
||||||
|
@ -156,5 +167,6 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
VARIANT_ENUM_CAST(Camera2D::AnchorMode);
|
VARIANT_ENUM_CAST(Camera2D::AnchorMode);
|
||||||
|
VARIANT_ENUM_CAST(Camera2D::Camera2DProcessMode);
|
||||||
|
|
||||||
#endif // CAMERA_2D_H
|
#endif // CAMERA_2D_H
|
||||||
|
|
Loading…
Reference in a new issue