39 lines
1.1 KiB
GDScript
39 lines
1.1 KiB
GDScript
|
|
extends Spatial
|
|
|
|
# member variables
|
|
var prev_pos = null
|
|
|
|
|
|
func _input(event):
|
|
# all other (non-mouse) events
|
|
if (not event.type in [InputEvent.MOUSE_BUTTON, InputEvent.MOUSE_MOTION, InputEvent.SCREEN_DRAG, InputEvent.SCREEN_TOUCH]):
|
|
get_node("viewport").input(event)
|
|
|
|
|
|
# mouse events for area
|
|
func _on_area_input_event(camera, event, 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
|
|
event.pos = pos
|
|
event.global_pos = pos
|
|
if (prev_pos == null):
|
|
prev_pos = pos
|
|
if (event.type == InputEvent.MOUSE_MOTION):
|
|
event.relative_pos = pos - prev_pos
|
|
prev_pos = pos
|
|
# sned the event to the viewport
|
|
get_node("viewport").input(event)
|
|
|
|
|
|
func _ready():
|
|
# Initalization here
|
|
get_node("area/quad").get_material_override().set_texture(FixedMaterial.PARAM_DIFFUSE, get_node("viewport").get_render_target_texture())
|
|
set_process_input(true)
|