delurbelako/scripts/construction.gd
2025-10-11 12:58:36 +05:00

44 lines
1.2 KiB
GDScript

@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