gui in 3D demo now uses area for input

This commit is contained in:
Juan Linietsky 2015-03-22 11:52:07 -03:00
parent e4f0291904
commit 2179681806
2 changed files with 25 additions and 24 deletions

View File

@ -7,38 +7,39 @@ extends Spatial
var prev_pos=null var prev_pos=null
func _input(ev):
if (ev.type in [InputEvent.MOUSE_BUTTON,InputEvent.MOUSE_MOTION]): func _input( ev ):
var pos = ev.pos #all other (non-mouse) events
var rfrom = get_node("camera").project_ray_origin(pos) if (not ev.type in [InputEvent.MOUSE_BUTTON,InputEvent.MOUSE_MOTION,InputEvent.SCREEN_DRAG,InputEvent.SCREEN_TOUCH]):
var rnorm = get_node("camera").project_ray_normal(pos) get_node("viewport").input(ev)
#simple collision test against aligned plane
#for game UIs of this kind consider more complex collision against plane #mouse events for area
var p = Plane(Vector3(0,0,1),0).intersects_ray(rfrom,rnorm) func _on_area_input_event( camera, ev, click_pos, click_normal, shape_idx ):
if (p==null):
return #use click pos (click in 3d space, convert to area space
var pos = get_node("area").get_global_transform().affine_inverse() * click_pos
pos.x=(p.x+1.5)*100 #convert to 2D
pos.y=(-p.y+0.75)*100 pos = Vector2(pos.x,pos.y)
ev.pos=pos #convert to viewport coordinate system
ev.global_pos=pos pos.x=(pos.x+1.5)*100
if (prev_pos==null): pos.y=(-pos.y+0.75)*100
prev_pos=pos #set to event
if (ev.type==InputEvent.MOUSE_MOTION): ev.pos=pos
ev.relative_pos=pos-prev_pos ev.global_pos=pos
if (prev_pos==null):
prev_pos=pos prev_pos=pos
if (ev.type==InputEvent.MOUSE_MOTION):
ev.relative_pos=pos-prev_pos
prev_pos=pos
get_node("viewport").input(ev) get_node("viewport").input(ev)
func _ready(): func _ready():
# Initalization here # Initalization here
get_node("quad").get_material_override().set_texture(FixedMaterial.PARAM_DIFFUSE, get_node("viewport").get_render_target_texture() ) get_node("area/quad").get_material_override().set_texture(FixedMaterial.PARAM_DIFFUSE, get_node("viewport").get_render_target_texture() )
set_process_input(true) set_process_input(true)
pass pass

Binary file not shown.