Files
tgcc/core/main_menu/sign.gd
2026-07-07 21:53:11 +02:00

48 lines
1.4 KiB
GDScript

extends Node3D
@export var sub_viewport: SubViewport
@onready var quad_cartello = $%QuadSign
@onready var coll_shape = $%CollisionShape3D
func _ready() -> void:
sub_viewport.transparent_bg = true
var mat = StandardMaterial3D.new()
mat.albedo_texture = sub_viewport.get_texture()
mat.transparency = BaseMaterial3D.TRANSPARENCY_ALPHA
#fix color
#sub_viewport.use_hdr_2d = false
#mat.albedo_texture_force_srgb = true
#mat.shading_mode = BaseMaterial3D.SHADING_MODE_UNSHADED
#mat.albedo_color = Color(0.85, 0.85, 0.85, 1.0)
quad_cartello.material_override = mat
coll_shape.shape.size = Vector3(2.0, 2.0, 2.0)
coll_shape.position.z = 0.0
func _on_area_3d_input_event(camera: Node, event: InputEvent, event_position: Vector3, normal: Vector3, shape_idx: int) -> void:
if event is InputEventMouse:
var local_cam = quad_cartello.to_local(camera.global_position)
var local_hit = quad_cartello.to_local(event_position)
var ray_dir = (local_hit - local_cam).normalized()
if abs(ray_dir.z) < 0.0001: return
var t = -local_cam.z / ray_dir.z
var exact_pos = local_cam + ray_dir * t
var uv_x = exact_pos.x + 0.5
var uv_y = 0.5 - exact_pos.y
if uv_x < 0 or uv_x > 1 or uv_y < 0 or uv_y > 1:
return
var viewport_pos = Vector2(uv_x * sub_viewport.size.x, uv_y * sub_viewport.size.y)
var ev2d = event.duplicate()
ev2d.position = viewport_pos
ev2d.global_position = viewport_pos
sub_viewport.push_input(ev2d)