diff options
Diffstat (limited to 'scene/main/viewport.cpp')
-rw-r--r-- | scene/main/viewport.cpp | 47 |
1 files changed, 40 insertions, 7 deletions
diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp index a1bfbda1fc..104806d891 100644 --- a/scene/main/viewport.cpp +++ b/scene/main/viewport.cpp @@ -533,7 +533,7 @@ void Viewport::_notification(int p_what) { Vector2 point = get_canvas_transform().affine_inverse().xform(pos); Physics2DDirectSpaceState::ShapeResult res[64]; - int rc = ss2d->intersect_point(point,res,64,Set<RID>(),0xFFFFFFFF,0xFFFFFFFF); + int rc = ss2d->intersect_point(point,res,64,Set<RID>(),0xFFFFFFFF,0xFFFFFFFF,true); for(int i=0;i<rc;i++) { if (res[i].collider_id && res[i].collider) { @@ -855,7 +855,7 @@ void Viewport::_camera_transform_changed_notify() { #endif } -void Viewport::_set_camera(Camera* p_camera) { +void Viewport::_camera_set(Camera* p_camera) { #ifndef _3D_DISABLED @@ -880,6 +880,36 @@ void Viewport::_set_camera(Camera* p_camera) { #endif } +bool Viewport::_camera_add(Camera* p_camera) { + + cameras.insert(p_camera); + return cameras.size()==1; +} + +void Viewport::_camera_remove(Camera* p_camera) { + + cameras.erase(p_camera); + if (camera==p_camera) { + camera=NULL; + } +} + +void Viewport::_camera_make_next_current(Camera* p_exclude) { + + for(Set<Camera*>::Element *E=cameras.front();E;E=E->next()) { + + if (p_exclude==E->get()) + continue; + if (!E->get()->is_inside_tree()) + continue; + if (camera!=NULL) + return; + + E->get()->make_current(); + + } +} + void Viewport::set_transparent_background(bool p_enable) { @@ -1486,7 +1516,8 @@ Control* Viewport::_gui_find_control(const Point2& p_global) { CanvasItem *pci = sw->get_parent_item(); if (pci) xform=pci->get_global_transform_with_canvas(); - + else + xform=sw->get_canvas_transform(); Control *ret = _gui_find_control_at_pos(sw,p_global,xform,gui.focus_inv_xform); if (ret) @@ -1505,6 +1536,8 @@ Control* Viewport::_gui_find_control(const Point2& p_global) { CanvasItem *pci = sw->get_parent_item(); if (pci) xform=pci->get_global_transform_with_canvas(); + else + xform=sw->get_canvas_transform(); Control *ret = _gui_find_control_at_pos(sw,p_global,xform,gui.focus_inv_xform); @@ -1624,7 +1657,7 @@ void Viewport::_gui_input_event(InputEvent p_event) { - Matrix32 parent_xform; + //Matrix32 parent_xform; //if (data.parent_canvas_item) // parent_xform=data.parent_canvas_item->get_global_transform(); @@ -2177,7 +2210,7 @@ void Viewport::_gui_grab_click_focus(Control *p_control) { //send unclic - Point2 click =gui.mouse_focus->get_global_transform().affine_inverse().xform(gui.last_mouse_pos); + Point2 click =gui.mouse_focus->get_global_transform_with_canvas().affine_inverse().xform(gui.last_mouse_pos); mb.x=click.x; mb.y=click.y; mb.button_index=gui.mouse_focus_button; @@ -2186,8 +2219,8 @@ void Viewport::_gui_grab_click_focus(Control *p_control) { gui.mouse_focus=p_control; - gui.focus_inv_xform=gui.mouse_focus->get_global_transform().affine_inverse(); - click =gui.mouse_focus->get_global_transform().affine_inverse().xform(gui.last_mouse_pos); + gui.focus_inv_xform=gui.mouse_focus->get_global_transform_with_canvas().affine_inverse(); + click =gui.mouse_focus->get_global_transform_with_canvas().affine_inverse().xform(gui.last_mouse_pos); mb.x=click.x; mb.y=click.y; mb.button_index=gui.mouse_focus_button; |