@tool extends Node2D class_name Construction @export var dimensions : Rect2i = Rect2i(0,0,1,1): set(value): dimensions = value if Engine.is_editor_hint(): queue_redraw() get: return dimensions func _draw() -> void: if Engine.is_editor_hint(): for x in range(dimensions.size.x): for y in range(dimensions.size.y): draw_circle((dimensions.position+Vector2i(x,y)) * Vector2i(Globals.GRID_SIZE),2,Color.AQUA) func get_relative(dv : Vector2) -> Construction: return get_parent().get_at(global_position+dv) func can_be_placed(zone : BuildZone) -> bool: for dp in get_dimension_points(): var point = global_position + dp if zone.is_global_point_in_zone(point) == false: return false if zone.entity_holder.is_point_occupied(point): return false return true func try_place(zone : BuildZone) -> bool: if can_be_placed(zone) == false: return false return zone.entity_holder.add_construction(self) func get_dimension_points() -> Array[Vector2]: var result : Array[Vector2] = [] result.resize(dimensions.size.x*dimensions.size.y) for x in range(dimensions.size.x): for y in range(dimensions.size.y): result[x + y * dimensions.size.x] = (Vector2(x,y)*Globals.GRID_SIZE + Vector2(dimensions.position)) return result