xrfragment/example/godot/main.gd

47 lines
1.4 KiB
GDScript3
Raw Normal View History

2024-05-08 07:40:09 +00:00
extends Node3D
var xr_interface: XRInterface
2024-05-10 13:41:20 +02:00
var xrf
var scene
var player:CharacterBody3D
2024-05-08 07:40:09 +00:00
func _ready():
2024-05-10 13:41:20 +02:00
xrf = preload("res://xrfragment.gd").new()
2024-05-08 07:40:09 +00:00
add_child(xrf)
#xrf.to("https://xrfragment.org/other.glb", _onXRF )
xrf.to("http://localhost:8080/example/assets/other.glb", _onXRF )
2024-05-10 13:41:20 +02:00
player = find_child("PlayerBody")
player.enabled = false # optional: turn off gravity
2024-05-08 07:40:09 +00:00
2024-05-10 13:41:20 +02:00
func _onXRF(event:String,data ):
if event == "scene_loaded":
scene = data
2024-05-13 14:11:02 +02:00
if event == 'href':
print(data)
if event == 'teleport':
print("teleport!")
find_child("XROrigin3D").position = data.origin
#player.teleport( data )
2024-05-10 13:41:20 +02:00
func _input(event):
2024-05-13 14:11:02 +02:00
var cam = find_child("XRCamera3D")
2024-05-10 13:41:20 +02:00
if event is InputEventMouseMotion:
var mouse_sens = 0.2
cam.rotate_y(deg_to_rad(-event.relative.x*mouse_sens))
2024-05-13 14:11:02 +02:00
if event is InputEventMouseButton:
var mouse_pos = get_viewport().get_mouse_position()
var from = cam.project_ray_origin(mouse_pos)
var to = from + cam.project_ray_normal(mouse_pos) * 20000 #200
var space_state = get_world_3d().direct_space_state
var handle_query = PhysicsRayQueryParameters3D.create(from, to)
handle_query.collide_with_areas = true
var mesh_query = PhysicsRayQueryParameters3D.create(from, to)
mesh_query.collide_with_areas = true
var intersectMesh = space_state.intersect_ray(mesh_query)
var intersectHandle = space_state.intersect_ray(handle_query)
if intersectMesh.has('collider'):
xrf.traverse( intersectMesh.collider, xrf.href_click )
2024-05-10 13:41:20 +02:00