Merge pull request #111149 from WhalesState/fix-2d-templates

Fix game `Camera2D` override from editor and 2D debug templates building.
This commit is contained in:
Thaddeus Crews
2025-10-02 15:11:58 -05:00
3 changed files with 9 additions and 4 deletions

View File

@ -229,7 +229,9 @@ 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(p_args.is_empty(), ERR_INVALID_DATA);
ERR_FAIL_COND_V(!SceneTree::get_singleton()->get_root()->is_camera_2d_override_enabled(), ERR_BUG); ERR_FAIL_COND_V(!SceneTree::get_singleton()->get_root()->is_camera_2d_override_enabled(), ERR_BUG);
Transform2D transform = p_args[0]; Transform2D transform = p_args[0];
SceneTree::get_singleton()->get_root()->get_override_camera_2d()->set_transform(transform); 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(); RuntimeNodeSelect::get_singleton()->_queue_selection_update();
return OK; return OK;
} }
@ -1622,7 +1624,6 @@ void RuntimeNodeSelect::_select_set_mode(SelectMode p_mode) {
void RuntimeNodeSelect::_set_camera_override_enabled(bool p_enabled) { void RuntimeNodeSelect::_set_camera_override_enabled(bool p_enabled) {
camera_override = p_enabled; camera_override = p_enabled;
Window *root = SceneTree::get_singleton()->get_root();
if (camera_first_override) { if (camera_first_override) {
_reset_camera_2d(); _reset_camera_2d();
#ifndef _3D_DISABLED #ifndef _3D_DISABLED
@ -1634,6 +1635,7 @@ void RuntimeNodeSelect::_set_camera_override_enabled(bool p_enabled) {
_update_view_2d(); _update_view_2d();
#ifndef _3D_DISABLED #ifndef _3D_DISABLED
Window *root = SceneTree::get_singleton()->get_root();
ERR_FAIL_COND(!root->is_camera_3d_override_enabled()); ERR_FAIL_COND(!root->is_camera_3d_override_enabled());
Camera3D *override_camera = root->get_override_camera_3d(); Camera3D *override_camera = root->get_override_camera_3d();
override_camera->set_transform(_get_cursor_transform()); override_camera->set_transform(_get_cursor_transform());
@ -2477,6 +2479,7 @@ void RuntimeNodeSelect::_zoom_callback(float p_zoom_factor, Vector2 p_origin, Re
} }
void RuntimeNodeSelect::_reset_camera_2d() { void RuntimeNodeSelect::_reset_camera_2d() {
camera_first_override = true;
Window *root = SceneTree::get_singleton()->get_root(); Window *root = SceneTree::get_singleton()->get_root();
Camera2D *game_camera = root->is_camera_2d_override_enabled() ? root->get_overridden_camera_2d() : root->get_camera_2d(); Camera2D *game_camera = root->is_camera_2d_override_enabled() ? root->get_overridden_camera_2d() : root->get_camera_2d();
if (game_camera) { if (game_camera) {
@ -2500,7 +2503,7 @@ void RuntimeNodeSelect::_update_view_2d() {
Camera2D *override_camera = root->get_override_camera_2d(); Camera2D *override_camera = root->get_override_camera_2d();
override_camera->set_anchor_mode(Camera2D::ANCHOR_MODE_FIXED_TOP_LEFT); override_camera->set_anchor_mode(Camera2D::ANCHOR_MODE_FIXED_TOP_LEFT);
override_camera->set_zoom(Vector2(view_2d_zoom, view_2d_zoom)); override_camera->set_zoom(Vector2(view_2d_zoom, view_2d_zoom));
override_camera->set_position(view_2d_offset); override_camera->set_offset(view_2d_offset);
_queue_selection_update(); _queue_selection_update();
} }

View File

@ -284,6 +284,7 @@ private:
RID sel_drag_ci; RID sel_drag_ci;
bool camera_override = false; bool camera_override = false;
bool camera_first_override = true;
// Values taken from EditorZoomWidget. // Values taken from EditorZoomWidget.
const float VIEW_2D_MIN_ZOOM = 1.0 / 128; const float VIEW_2D_MIN_ZOOM = 1.0 / 128;
@ -326,7 +327,6 @@ private:
const float CAMERA_MIN_FOV_SCALE = 0.1; const float CAMERA_MIN_FOV_SCALE = 0.1;
const float CAMERA_MAX_FOV_SCALE = 2.5; const float CAMERA_MAX_FOV_SCALE = 2.5;
bool camera_first_override = true;
bool camera_freelook = false; bool camera_freelook = false;
real_t camera_fov = 0; real_t camera_fov = 0;

View File

@ -5603,5 +5603,7 @@ T *Viewport::CameraOverride<T>::get_overridden_camera() const {
// Explicit template instantiation to allow template definitions inside cpp file // Explicit template instantiation to allow template definitions inside cpp file
// and prevent instantiation using other than the desired camera types. // and prevent instantiation using other than the desired camera types.
template class Viewport::CameraOverride<Camera2D>; template class Viewport::CameraOverride<Camera2D>;
#ifndef _3D_DISABLED
template class Viewport::CameraOverride<Camera3D>; template class Viewport::CameraOverride<Camera3D>;
#endif // _3D_DISABLED
#endif // DEBUG_ENABLED #endif // DEBUG_ENABLED