day 7
This commit is contained in:
parent
deaacb3076
commit
9263f7590e
|
@ -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.
|
||||
|
|
|
@ -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"]
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"]
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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]
|
||||
|
||||
|
|
Loading…
Reference in New Issue