Files
cobor/nodes/word/terrain_editor.gd
2025-08-29 17:04:57 +02:00

33 lines
1.0 KiB
GDScript

extends Node
@onready var voxelTool := (get_parent() as VoxelTerrain).get_voxel_tool()
var block_edit := false
func _unhandled_input(event):
if event is InputEventMouseButton and event.is_pressed():
if block_edit:
if event.button_index == MOUSE_BUTTON_LEFT:
perform_block_action(true)
elif event.button_index == MOUSE_BUTTON_RIGHT:
get_tree().create_timer(0.15).timeout.connect(
func():
if not Input.is_mouse_button_pressed(MOUSE_BUTTON_RIGHT):
perform_block_action(false)
)
func perform_block_action(add_block:bool)->void:
var mouse_pos_2d := get_viewport().get_mouse_position()
var current_camera := get_viewport().get_camera_3d()
var origin := current_camera.project_ray_origin(mouse_pos_2d)
var dir := current_camera.project_ray_normal(mouse_pos_2d)
var res := voxelTool.raycast(origin, dir, 50)
if res != null:
if add_block:
voxelTool.set_voxel(res.previous_position, 1)
else:
voxelTool.set_voxel(res.position, 0)
func _on_button_toggled(toggled_on: bool) -> void:
block_edit = toggled_on