Merge pull request #111106 from aaronfranke/group-2d-cam-override

Group together 2D camera override functions
This commit is contained in:
Thaddeus Crews 2025-10-03 12:00:59 -05:00
commit c3caa263bf
No known key found for this signature in database
GPG key ID: 8C6E5FEB5FC03CCC
4 changed files with 80 additions and 80 deletions

View file

@ -225,39 +225,6 @@ Error SceneDebugger::_msg_override_cameras(const Array &p_args) {
return OK; return OK;
} }
Error SceneDebugger::_msg_transform_camera_2d(const Array &p_args) {
ERR_FAIL_COND_V(p_args.is_empty(), ERR_INVALID_DATA);
ERR_FAIL_COND_V(!SceneTree::get_singleton()->get_root()->is_camera_2d_override_enabled(), ERR_BUG);
Transform2D transform = p_args[0];
Camera2D *override_camera = SceneTree::get_singleton()->get_root()->get_override_camera_2d();
override_camera->set_offset(transform.affine_inverse().get_origin());
override_camera->set_zoom(transform.get_scale());
RuntimeNodeSelect::get_singleton()->_queue_selection_update();
return OK;
}
#ifndef _3D_DISABLED
Error SceneDebugger::_msg_transform_camera_3d(const Array &p_args) {
ERR_FAIL_COND_V(p_args.size() < 5, ERR_INVALID_DATA);
ERR_FAIL_COND_V(!SceneTree::get_singleton()->get_root()->is_camera_3d_override_enabled(), ERR_BUG);
Transform3D transform = p_args[0];
bool is_perspective = p_args[1];
float size_or_fov = p_args[2];
float depth_near = p_args[3];
float depth_far = p_args[4];
Camera3D *override_camera = SceneTree::get_singleton()->get_root()->get_override_camera_3d();
if (is_perspective) {
override_camera->set_perspective(size_or_fov, depth_near, depth_far);
} else {
override_camera->set_orthogonal(size_or_fov, depth_near, depth_far);
}
override_camera->set_transform(transform);
RuntimeNodeSelect::get_singleton()->_queue_selection_update();
return OK;
}
#endif // _3D_DISABLED
Error SceneDebugger::_msg_set_object_property(const Array &p_args) { Error SceneDebugger::_msg_set_object_property(const Array &p_args) {
ERR_FAIL_COND_V(p_args.size() < 3, ERR_INVALID_DATA); ERR_FAIL_COND_V(p_args.size() < 3, ERR_INVALID_DATA);
_set_object_property(p_args[0], p_args[1], p_args[2]); _set_object_property(p_args[0], p_args[1], p_args[2]);
@ -443,11 +410,43 @@ Error SceneDebugger::_msg_runtime_node_select_reset_camera_2d(const Array &p_arg
RuntimeNodeSelect::get_singleton()->_reset_camera_2d(); RuntimeNodeSelect::get_singleton()->_reset_camera_2d();
return OK; return OK;
} }
Error SceneDebugger::_msg_transform_camera_2d(const Array &p_args) {
ERR_FAIL_COND_V(p_args.is_empty(), ERR_INVALID_DATA);
ERR_FAIL_COND_V(!SceneTree::get_singleton()->get_root()->is_camera_2d_override_enabled(), ERR_BUG);
Transform2D transform = p_args[0];
Camera2D *override_camera = SceneTree::get_singleton()->get_root()->get_override_camera_2d();
override_camera->set_offset(transform.affine_inverse().get_origin());
override_camera->set_zoom(transform.get_scale());
RuntimeNodeSelect::get_singleton()->_queue_selection_update();
return OK;
}
#ifndef _3D_DISABLED #ifndef _3D_DISABLED
Error SceneDebugger::_msg_runtime_node_select_reset_camera_3d(const Array &p_args) { Error SceneDebugger::_msg_runtime_node_select_reset_camera_3d(const Array &p_args) {
RuntimeNodeSelect::get_singleton()->_reset_camera_3d(); RuntimeNodeSelect::get_singleton()->_reset_camera_3d();
return OK; return OK;
} }
Error SceneDebugger::_msg_transform_camera_3d(const Array &p_args) {
ERR_FAIL_COND_V(p_args.size() < 5, ERR_INVALID_DATA);
ERR_FAIL_COND_V(!SceneTree::get_singleton()->get_root()->is_camera_3d_override_enabled(), ERR_BUG);
Transform3D transform = p_args[0];
bool is_perspective = p_args[1];
float size_or_fov = p_args[2];
float depth_near = p_args[3];
float depth_far = p_args[4];
Camera3D *override_camera = SceneTree::get_singleton()->get_root()->get_override_camera_3d();
if (is_perspective) {
override_camera->set_perspective(size_or_fov, depth_near, depth_far);
} else {
override_camera->set_orthogonal(size_or_fov, depth_near, depth_far);
}
override_camera->set_transform(transform);
RuntimeNodeSelect::get_singleton()->_queue_selection_update();
return OK;
}
#endif // _3D_DISABLED #endif // _3D_DISABLED
// endregion // endregion
@ -534,7 +533,7 @@ void SceneDebugger::_init_message_handlers() {
message_handlers["transform_camera_2d"] = _msg_transform_camera_2d; message_handlers["transform_camera_2d"] = _msg_transform_camera_2d;
#ifndef _3D_DISABLED #ifndef _3D_DISABLED
message_handlers["transform_camera_3d"] = _msg_transform_camera_3d; message_handlers["transform_camera_3d"] = _msg_transform_camera_3d;
#endif #endif // _3D_DISABLED
message_handlers["set_object_property"] = _msg_set_object_property; message_handlers["set_object_property"] = _msg_set_object_property;
message_handlers["set_object_property_field"] = _msg_set_object_property_field; message_handlers["set_object_property_field"] = _msg_set_object_property_field;
message_handlers["reload_cached_files"] = _msg_reload_cached_files; message_handlers["reload_cached_files"] = _msg_reload_cached_files;

View file

@ -91,10 +91,6 @@ private:
static Error _msg_next_frame(const Array &p_args); static Error _msg_next_frame(const Array &p_args);
static Error _msg_debug_mute_audio(const Array &p_args); static Error _msg_debug_mute_audio(const Array &p_args);
static Error _msg_override_cameras(const Array &p_args); static Error _msg_override_cameras(const Array &p_args);
static Error _msg_transform_camera_2d(const Array &p_args);
#ifndef _3D_DISABLED
static Error _msg_transform_camera_3d(const Array &p_args);
#endif
static Error _msg_set_object_property(const Array &p_args); static Error _msg_set_object_property(const Array &p_args);
static Error _msg_set_object_property_field(const Array &p_args); static Error _msg_set_object_property_field(const Array &p_args);
static Error _msg_reload_cached_files(const Array &p_args); static Error _msg_reload_cached_files(const Array &p_args);
@ -118,11 +114,14 @@ private:
static Error _msg_runtime_node_select_set_type(const Array &p_args); static Error _msg_runtime_node_select_set_type(const Array &p_args);
static Error _msg_runtime_node_select_set_mode(const Array &p_args); static Error _msg_runtime_node_select_set_mode(const Array &p_args);
static Error _msg_runtime_node_select_set_visible(const Array &p_args); static Error _msg_runtime_node_select_set_visible(const Array &p_args);
static Error _msg_rq_screenshot(const Array &p_args);
static Error _msg_runtime_node_select_reset_camera_2d(const Array &p_args); static Error _msg_runtime_node_select_reset_camera_2d(const Array &p_args);
static Error _msg_transform_camera_2d(const Array &p_args);
#ifndef _3D_DISABLED #ifndef _3D_DISABLED
static Error _msg_runtime_node_select_reset_camera_3d(const Array &p_args); static Error _msg_runtime_node_select_reset_camera_3d(const Array &p_args);
#endif static Error _msg_transform_camera_3d(const Array &p_args);
static Error _msg_rq_screenshot(const Array &p_args); #endif // _3D_DISABLED
public: public:
static Error parse_message(void *p_user, const String &p_msg, const Array &p_args, bool &r_captured); static Error parse_message(void *p_user, const String &p_msg, const Array &p_args, bool &r_captured);

View file

@ -34,8 +34,6 @@
#include "core/debugger/engine_debugger.h" #include "core/debugger/engine_debugger.h"
#include "core/templates/pair.h" #include "core/templates/pair.h"
#include "core/templates/sort_array.h" #include "core/templates/sort_array.h"
#include "scene/2d/audio_listener_2d.h"
#include "scene/2d/camera_2d.h"
#include "scene/gui/control.h" #include "scene/gui/control.h"
#include "scene/gui/label.h" #include "scene/gui/label.h"
#include "scene/gui/popup.h" #include "scene/gui/popup.h"
@ -50,6 +48,10 @@
#include "servers/audio_server.h" #include "servers/audio_server.h"
#include "servers/rendering/rendering_server_globals.h" #include "servers/rendering/rendering_server_globals.h"
// 2D.
#include "scene/2d/audio_listener_2d.h"
#include "scene/2d/camera_2d.h"
#ifndef _3D_DISABLED #ifndef _3D_DISABLED
#include "scene/3d/audio_listener_3d.h" #include "scene/3d/audio_listener_3d.h"
#include "scene/3d/camera_3d.h" #include "scene/3d/camera_3d.h"
@ -1205,35 +1207,6 @@ void Viewport::canvas_parent_mark_dirty(Node *p_node) {
} }
} }
#if DEBUG_ENABLED
void Viewport::enable_camera_2d_override(bool p_enable) {
ERR_MAIN_THREAD_GUARD;
if (p_enable) {
camera_2d_override.enable(this, camera_2d);
} else {
camera_2d_override.disable(camera_2d);
}
}
bool Viewport::is_camera_2d_override_enabled() const {
ERR_READ_THREAD_GUARD_V(false);
return camera_2d_override.is_enabled();
}
Camera2D *Viewport::get_overridden_camera_2d() const {
ERR_READ_THREAD_GUARD_V(nullptr);
ERR_FAIL_COND_V(!camera_2d_override.is_enabled(), nullptr);
return camera_2d_override.get_overridden_camera();
}
Camera2D *Viewport::get_override_camera_2d() const {
ERR_READ_THREAD_GUARD_V(nullptr);
ERR_FAIL_COND_V(!camera_2d_override.is_enabled(), nullptr);
return camera_2d_override.is_enabled() ? get_camera_2d() : nullptr;
}
#endif // DEBUG_ENABLED
void Viewport::set_canvas_transform(const Transform2D &p_transform) { void Viewport::set_canvas_transform(const Transform2D &p_transform) {
ERR_MAIN_THREAD_GUARD; ERR_MAIN_THREAD_GUARD;
canvas_transform = p_transform; canvas_transform = p_transform;
@ -4400,6 +4373,35 @@ void Viewport::assign_next_enabled_camera_2d(const StringName &p_camera_group) {
} }
} }
#if DEBUG_ENABLED
void Viewport::enable_camera_2d_override(bool p_enable) {
ERR_MAIN_THREAD_GUARD;
if (p_enable) {
camera_2d_override.enable(this, camera_2d);
} else {
camera_2d_override.disable(camera_2d);
}
}
bool Viewport::is_camera_2d_override_enabled() const {
ERR_READ_THREAD_GUARD_V(false);
return camera_2d_override.is_enabled();
}
Camera2D *Viewport::get_overridden_camera_2d() const {
ERR_READ_THREAD_GUARD_V(nullptr);
ERR_FAIL_COND_V(!camera_2d_override.is_enabled(), nullptr);
return camera_2d_override.get_overridden_camera();
}
Camera2D *Viewport::get_override_camera_2d() const {
ERR_READ_THREAD_GUARD_V(nullptr);
ERR_FAIL_COND_V(!camera_2d_override.is_enabled(), nullptr);
return camera_2d_override.is_enabled() ? get_camera_2d() : nullptr;
}
#endif // DEBUG_ENABLED
#ifndef _3D_DISABLED #ifndef _3D_DISABLED
AudioListener3D *Viewport::get_audio_listener_3d() const { AudioListener3D *Viewport::get_audio_listener_3d() const {
ERR_READ_THREAD_GUARD_V(nullptr); ERR_READ_THREAD_GUARD_V(nullptr);

View file

@ -534,13 +534,6 @@ public:
Ref<World2D> get_world_2d() const; Ref<World2D> get_world_2d() const;
Ref<World2D> find_world_2d() const; Ref<World2D> find_world_2d() const;
#if DEBUG_ENABLED
void enable_camera_2d_override(bool p_enable);
bool is_camera_2d_override_enabled() const;
Camera2D *get_overridden_camera_2d() const;
Camera2D *get_override_camera_2d() const;
#endif // DEBUG_ENABLED
void set_canvas_transform(const Transform2D &p_transform); void set_canvas_transform(const Transform2D &p_transform);
Transform2D get_canvas_transform() const; Transform2D get_canvas_transform() const;
@ -766,11 +759,18 @@ private:
friend class Camera2D; // Needs _camera_2d_set friend class Camera2D; // Needs _camera_2d_set
Camera2D *camera_2d = nullptr; Camera2D *camera_2d = nullptr;
void _camera_2d_set(Camera2D *p_camera_2d);
#if DEBUG_ENABLED #if DEBUG_ENABLED
CameraOverride<Camera2D> camera_2d_override; CameraOverride<Camera2D> camera_2d_override;
#endif // DEBUG_ENABLED
void _camera_2d_set(Camera2D *p_camera_2d);
public:
void enable_camera_2d_override(bool p_enable);
bool is_camera_2d_override_enabled() const;
Camera2D *get_overridden_camera_2d() const;
Camera2D *get_override_camera_2d() const;
#endif // DEBUG_ENABLED
private:
#ifndef PHYSICS_2D_DISABLED #ifndef PHYSICS_2D_DISABLED
// Collider to frame // Collider to frame
HashMap<ObjectID, uint64_t> physics_2d_mouseover; HashMap<ObjectID, uint64_t> physics_2d_mouseover;