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