extends Node2D @onready var grid: Grid = $/root/Root/Grid @export var highlight_color: Color = Color(1, 1, 1, 0.2) @onready var d_pos: Rect2 = grid.quantize(get_local_mouse_position(), Vector2i.ONE) @onready var c_pos: Rect2 = d_pos @onready var d_opacity = 1.0 if grid.contains_world_pos(get_local_mouse_position()) else 0.0 @onready var c_opacity = 0.0 #eventually, replace this weird shit with an array of old rects that are fading out #let them fade out, and just remove them. have a method to abandon the current box #and start a new one that just follows the normal box-booting procedure. #if you're not in the grid, it simply wont be created yet. have to have a has_box prop #or something like that. but this is good enough for now func _lerp_opacity(c: Color, t: float) -> Color: return Color(c.r, c.g, c.b, c.a * t) func _process(delta): queue_redraw() var a_center = c_pos.get_center() if c_opacity >= 0.01: var b_center = d_pos.get_center() # i know its not right but stfu var n_center = lerp(a_center, b_center, delta * 60) var a_size = c_pos.size var b_size = d_pos.size var n_size: Vector2 if a_size.length_squared() > b_size.length_squared(): n_size = lerp(a_size, b_size, delta * 20) else: #getting bigger needs to be ffaster because it looks nice but also lerping #bigger makes it last longer at the very end n_size = lerp(a_size, b_size, delta * 60) var n_pos = n_center - n_size / 2 c_pos = Rect2(n_pos, n_size) else: c_pos = Rect2(d_pos) var mouse = get_local_mouse_position() if grid.contains_world_pos(mouse) and not grid.left_dragging: d_pos = grid.quantize_on_objects(get_local_mouse_position()) if grid.contains_world_pos(a_center): d_opacity = 1.0 else: d_opacity = 0.0 if d_opacity > c_opacity or grid.left_dragging: c_opacity = lerp(c_opacity, d_opacity, delta * 30) else: c_opacity = lerp(c_opacity, d_opacity, delta * 3) func _draw(): draw_rect(c_pos, _lerp_opacity(highlight_color, c_opacity), true)