This commit is contained in:
Felipe M. 2023-10-10 08:18:50 +02:00
parent deaacb3076
commit 9263f7590e
Signed by: fmartingr
GPG Key ID: CCFBC5637D4000A8
6 changed files with 67 additions and 43 deletions

View File

@ -4,9 +4,6 @@ var disks: Array
const disk_separation: float = 0.1
signal entered
signal exited
# Called when the node enters the scene tree for the first time.
func _ready():
pass # Replace with function body.
@ -51,22 +48,3 @@ func get_position_for_disk(disk) -> Vector3:
if disks[n].size == disk.size:
return Vector3(self.position.x, disk_separation * n + (0.1*n + 0.2), 0)
return Vector3.ZERO
func _on_mouse_entered():
entered.emit(self)
func _on_mouse_exited():
exited.emit(self)
func _on_area_entered(area):
print("area entered")
func _on_area_exited(area):
print("area exited")
pass # Replace with function body.
func _on_body_shape_entered(body_rid, body, body_shape_index, local_shape_index):
print(body) # Replace with function body.

View File

@ -23,8 +23,5 @@ transform = Transform3D(0.1, 0, 0, 0, 1, 0, 0, 0, 0.1, 2.08165e-12, 1, 2.08165e-
material_override = SubResource("StandardMaterial3D_ota7e")
use_collision = true
[connection signal="area_entered" from="." to="." method="_on_area_entered"]
[connection signal="area_exited" from="." to="." method="_on_area_exited"]
[connection signal="body_entered" from="." to="." method="_on_body_shape_entered"]
[connection signal="mouse_entered" from="." to="." method="_on_mouse_entered"]
[connection signal="mouse_exited" from="." to="." method="_on_mouse_exited"]

View File

@ -2,11 +2,12 @@ extends Node3D
var Disk = preload("res://elements/disk.tscn")
const RAY_LENGTH = 5
@onready var left_column = get_node("cylinders/left")
@export var disk_count: int = 7
var origin_cylinder
var hovering_cylinder
func _init_disks():
for n in range(disk_count, 0, -1):
@ -20,15 +21,33 @@ func _init_disks():
func _ready():
_init_disks()
func _input(event):
if event is InputEventMouseButton and event.is_action_pressed("click"):
func _physics_process(_delta):
if Input.is_action_just_pressed("click") or Input.is_action_just_released("click"):
_calculate_input()
func _calculate_input():
var hovering_cylinder
var space_state = get_world_3d().direct_space_state
var cam = get_viewport().get_camera_3d()
var mousepos = get_viewport().get_mouse_position()
var origin = cam.project_ray_origin(mousepos)
var end = origin + cam.project_ray_normal(mousepos) * RAY_LENGTH
var query = PhysicsRayQueryParameters3D.create(origin, end)
query.collide_with_areas = true
var result = space_state.intersect_ray(query)
if result:
hovering_cylinder = result.collider
if Input.is_action_pressed("click"):
if hovering_cylinder:
var disk = hovering_cylinder.get_top_disk()
if disk:
disk.set_follow_mouse(true)
origin_cylinder = hovering_cylinder
if event is InputEventMouseButton and event.is_action_released("click"):
if Input.is_action_just_released("click"):
if not origin_cylinder:
return
@ -48,11 +67,5 @@ func _input(event):
else:
disk.tween_to(origin_cylinder.get_position_for_disk(disk))
origin_cylinder = null
func _on_cylinder_entered(cylinder):
print("Cylinder entered: " + cylinder.name)
hovering_cylinder = cylinder
func _on_cylinder_exited(cylinder):
print("Cylinder exited: " + cylinder.name)
hovering_cylinder = null

View File

@ -24,10 +24,3 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.75, 2.08165e-12, 2.08165e-
[node name="right" parent="cylinders" instance=ExtResource("3_qo4i0")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.75, 2.08165e-12, 2.08165e-12)
[connection signal="entered" from="cylinders/left" to="." method="_on_cylinder_entered"]
[connection signal="exited" from="cylinders/left" to="." method="_on_cylinder_exited"]
[connection signal="entered" from="cylinders/middle" to="." method="_on_cylinder_entered"]
[connection signal="exited" from="cylinders/middle" to="." method="_on_cylinder_exited"]
[connection signal="entered" from="cylinders/right" to="." method="_on_cylinder_entered"]
[connection signal="exited" from="cylinders/right" to="." method="_on_cylinder_exited"]

View File

@ -70,3 +70,41 @@ portrait_launch_screens/iphone_1125x2436=""
portrait_launch_screens/ipad_768x1024=""
portrait_launch_screens/ipad_1536x2048=""
portrait_launch_screens/iphone_1242x2208=""
[preset.1]
name="Web"
platform="Web"
runnable=true
dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path="../../Desktop/Hanoi-html/godot-hanoi.html"
encryption_include_filters=""
encryption_exclude_filters=""
encrypt_pck=false
encrypt_directory=false
[preset.1.options]
custom_template/debug=""
custom_template/release=""
variant/extensions_support=false
vram_texture_compression/for_desktop=true
vram_texture_compression/for_mobile=true
html/export_icon=true
html/custom_html_shell=""
html/head_include=""
html/canvas_resize_policy=2
html/focus_canvas_on_start=true
html/experimental_virtual_keyboard=false
progressive_web_app/enabled=true
progressive_web_app/offline_page=""
progressive_web_app/display=1
progressive_web_app/orientation=1
progressive_web_app/icon_144x144=""
progressive_web_app/icon_180x180=""
progressive_web_app/icon_512x512=""
progressive_web_app/background_color=Color(0, 0, 0, 1)

View File

@ -22,6 +22,11 @@ click={
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"canceled":false,"pressed":false,"double_click":false,"script":null)
, null]
}
middle_click={
"deadzone": 0.5,
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":3,"canceled":false,"pressed":false,"double_click":false,"script":null)
]
}
[input_devices]