Reorganized input
This commit is contained in:
@@ -1,42 +1,5 @@
|
||||
class_name CameraController extends Camera2D
|
||||
|
||||
const DRAG_THRESHOLD := 8.0
|
||||
|
||||
var _dragging := false
|
||||
var _left_pending := false
|
||||
var _drag_start := Vector2.ZERO
|
||||
|
||||
|
||||
func _unhandled_input(event: InputEvent) -> void:
|
||||
if event is InputEventMouseButton:
|
||||
match event.button_index:
|
||||
MOUSE_BUTTON_LEFT:
|
||||
if event.pressed:
|
||||
_left_pending = true
|
||||
_drag_start = event.position
|
||||
else:
|
||||
_left_pending = false
|
||||
if _dragging:
|
||||
_dragging = false
|
||||
Input.set_default_cursor_shape(Input.CURSOR_ARROW)
|
||||
get_viewport().set_input_as_handled()
|
||||
MOUSE_BUTTON_MIDDLE:
|
||||
if event.pressed:
|
||||
_dragging = true
|
||||
_drag_start = event.position
|
||||
Input.set_default_cursor_shape(Input.CURSOR_DRAG)
|
||||
else:
|
||||
_dragging = false
|
||||
Input.set_default_cursor_shape(Input.CURSOR_ARROW)
|
||||
get_viewport().set_input_as_handled()
|
||||
elif event is InputEventMouseMotion:
|
||||
if _left_pending and not _dragging:
|
||||
if event.position.distance_to(_drag_start) >= DRAG_THRESHOLD:
|
||||
_dragging = true
|
||||
_left_pending = false
|
||||
Input.set_default_cursor_shape(Input.CURSOR_DRAG)
|
||||
if _dragging:
|
||||
var delta: Vector2 = _drag_start - event.position
|
||||
_drag_start = event.position
|
||||
position += delta / zoom
|
||||
get_viewport().set_input_as_handled()
|
||||
func apply_drag(delta: Vector2) -> void:
|
||||
position += delta / zoom
|
||||
|
||||
@@ -1,11 +1,8 @@
|
||||
extends ColorRect
|
||||
|
||||
signal tile_hovered(coords: Vector2i)
|
||||
|
||||
@export var tile_size: float = 48.0
|
||||
|
||||
var _time: float = 0.0
|
||||
var _previous_coords := Vector2i(INF, INF)
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
@@ -17,13 +14,10 @@ func _ready() -> void:
|
||||
func _process(delta: float) -> void:
|
||||
_time += delta
|
||||
color.a = 0.25 + 0.1 * sin(_time * 4.0)
|
||||
var mouse_pos := get_global_mouse_position()
|
||||
var snapped_pos := _snap_to_grid(mouse_pos)
|
||||
global_position = snapped_pos
|
||||
var coords := Vector2i(snapped_pos / tile_size)
|
||||
if coords != _previous_coords:
|
||||
_previous_coords = coords
|
||||
tile_hovered.emit(coords)
|
||||
|
||||
|
||||
func set_grid_coords(coords: Vector2i) -> void:
|
||||
global_position = Vector2(coords) * tile_size
|
||||
|
||||
|
||||
func _notification(what: int) -> void:
|
||||
@@ -31,7 +25,3 @@ func _notification(what: int) -> void:
|
||||
hide()
|
||||
elif what == NOTIFICATION_WM_MOUSE_ENTER:
|
||||
show()
|
||||
|
||||
|
||||
func _snap_to_grid(pos: Vector2) -> Vector2:
|
||||
return Vector2(floorf(pos.x / tile_size), floorf(pos.y / tile_size)) * tile_size
|
||||
|
||||
Reference in New Issue
Block a user