38 lines
930 B
GDScript
38 lines
930 B
GDScript
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:
|
|
size = Vector2(tile_size, tile_size)
|
|
color = Color(1.0, 1.0, 1.0, 0.25)
|
|
mouse_filter = Control.MOUSE_FILTER_IGNORE
|
|
|
|
|
|
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 _notification(what: int) -> void:
|
|
if what == NOTIFICATION_WM_MOUSE_EXIT:
|
|
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
|