Skip to content

Instantly share code, notes, and snippets.

@GammaGames
Last active August 24, 2019 04:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save GammaGames/de710b926a045616a7295a973583e2f6 to your computer and use it in GitHub Desktop.
Save GammaGames/de710b926a045616a7295a973583e2f6 to your computer and use it in GitHub Desktop.
Godot Viewport Input from Raycast (Useful for VR)
extends Area
onready var viewport = $"../Viewport"
onready var collion = $CollisionShape
var last_collided = Vector3.ZERO
var mouse_mask = 0
var mesh_size_x = 0.5
var mesh_size_y = 0.5
var uv_offset_x = -0.1
var uv_offset_y = -0.1
func global_to_viewport(point):
var t = collion.global_transform
var at = t.xform_inv(point)
var half = 0.5
at.x = ((at.x / mesh_size_x) + half + uv_offset_x) * viewport.size.x
at.y = (half - (at.y / mesh_size_y) + uv_offset_y) * viewport.size.y
return Vector2(at.x, at.y)
func _on_pointer_moved(point):
if point != last_collided:
var at = global_to_viewport(point)
var from = global_to_viewport(last_collided)
last_collided = point
var event = InputEventMouseMotion.new()
event.set_position(at)
event.set_global_position(at)
event.set_relative(at - from)
event.set_button_mask(mouse_mask)
viewport.input(event)
extends Node
onready var raycast = $RayCast
func _process(delta):
var target = raycast.get_collider()
if target and target.has_method("_on_pointer_moved"):
target._on_pointer_moved(raycast.get_collision_point())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment