ui_handler.gd 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. extends Camera3D
  2. @onready var hand := $"../Hand"
  3. @onready var objectives := $objectives
  4. @onready var interaction := $interaction
  5. @onready var inventory := $inventory
  6. @onready var root := get_tree().current_scene
  7. func get_ray():
  8. var space = get_world_3d().direct_space_state
  9. var camera = get_tree().root.get_camera_3d()
  10. var rayOrigin = camera.project_ray_origin(Vector2(225, 200)) # middle of the screen
  11. var rayEnd = rayOrigin + camera.project_ray_normal(Vector2(225, 200)) * 2.5 # middle of the screen
  12. var rayArray = space.intersect_ray(PhysicsRayQueryParameters3D.create(rayOrigin, rayEnd))
  13. return rayArray
  14. func _ready():
  15. if root and root.has_node("questions"):
  16. for question in root.get_node("questions").get_children():
  17. await get_tree().create_timer(question.get_meta("delay")).timeout # wait the delay the question has set
  18. Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
  19. question.visible = true
  20. get_tree().paused = true
  21. func _process(_delta):
  22. #if hand.get_child_count() > 0 and hand.get_child(0).is_in_group("gun"):
  23. # ammo.visible = true
  24. #else:
  25. # ammo.visible = false
  26. var intersected = get_ray()
  27. if intersected.has("collider") and intersected["collider"].has_meta("text"):
  28. # Set interaction text
  29. if intersected["collider"].has_meta("interactable") and intersected["collider"].get_meta("interactable"):
  30. interaction.text = "E - " + intersected["collider"].get_meta("text")
  31. else:
  32. interaction.text = intersected["collider"].get_meta("text")
  33. # Interaction code
  34. if intersected["collider"].has_meta("interactable") and intersected["collider"].get_meta("interactable") and intersected["collider"].has_method("interact") and Input.is_action_just_pressed("interact"):
  35. intersected["collider"].interact(get_node(".")) # pass player into the function
  36. # Add to inventory
  37. if intersected["collider"].has_node("Item") and intersected["collider"].get_meta("interactable") and intersected["collider"].get_meta("interactable") and Input.is_action_just_pressed("interact"):
  38. inventory.add_item(intersected["collider"].get_node("Item"))
  39. intersected["collider"].get_node(intersected["collider"].get_meta("model")).queue_free()
  40. else:
  41. interaction.text = ""