53 lines
1.5 KiB
GDScript
53 lines
1.5 KiB
GDScript
extends Module
|
|
|
|
var enabled := true
|
|
|
|
var pos_x_register_index:int
|
|
var pos_y_register_index:int
|
|
var pos_z_register_index:int
|
|
|
|
var pos := Vector3i.ZERO
|
|
|
|
func _ready() -> void:
|
|
if Terrain.instance == null:
|
|
print("No terrain to get clicks from")
|
|
|
|
func get_register_reservation_size()->int:
|
|
return 3
|
|
|
|
func set_reserved_registers(index:int)->void:
|
|
pos_x_register_index = index
|
|
pos_y_register_index = index+1
|
|
pos_z_register_index = index+2
|
|
|
|
func get_register_types()->Dictionary[int, String]:
|
|
return {
|
|
pos_x_register_index: "[X] Click",
|
|
pos_y_register_index: "[Y] Click",
|
|
pos_z_register_index: "[Z] Click"
|
|
}
|
|
|
|
func _unhandled_input(event: InputEvent) -> void:
|
|
if not enabled: return
|
|
if event is InputEventMouseButton and event.is_pressed():
|
|
var button_event = event as InputEventMouseButton
|
|
if button_event.button_index == MOUSE_BUTTON_LEFT:
|
|
set_click_registers()
|
|
elif button_event.button_index == MOUSE_BUTTON_RIGHT:
|
|
pass
|
|
|
|
func set_click_registers()->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 := Terrain.instance.get_voxel_tool().raycast(origin, dir, 100)
|
|
pos = res.previous_position
|
|
|
|
func early_tick()->void:
|
|
var registers := cpu.cobor_vm.get_registers()
|
|
registers[pos_x_register_index] = pos.x
|
|
registers[pos_y_register_index] = pos.y
|
|
registers[pos_z_register_index] = pos.z
|
|
cpu.cobor_vm.set_registers(cpu.register_size, registers)
|