75 lines
2.7 KiB
GDScript3
Raw Normal View History

extends Building
func can_citizen_enter(coord: Vector2i, direction: Board.Direction) -> bool:
var up_adjustment := Board.get_next_direction(Board.Direction.UP, get_rotation_count())
var right_adjustment := Board.get_next_direction(Board.Direction.RIGHT, get_rotation_count())
var correct_heading_1 := Board.get_next_direction(Board.Direction.LEFT, get_rotation_count())
var correct_heading_2 := Board.get_next_direction(Board.Direction.UP, get_rotation_count())
var entrance_1 := (
starting_coord
+ (Board.get_direction_vector(up_adjustment) * 2)
+ (Board.get_direction_vector(right_adjustment) * 3)
)
var entrance_2 := starting_coord - Board.get_direction_vector(up_adjustment)
return (
(coord == entrance_1 and direction == correct_heading_1)
or (coord == entrance_2 and direction == correct_heading_2)
)
func get_tile_coords() -> Array[Vector2i]:
var result: Array[Vector2i] = []
result.push_back(starting_coord)
result.push_back(
starting_coord + Vector2i(Vector2.UP.rotated(deg_to_rad(90 * get_rotation_count())))
)
result.push_back(
(
starting_coord
+ Vector2i(Vector2.UP.rotated(deg_to_rad(90 * get_rotation_count())))
+ Vector2i(Vector2.RIGHT.rotated(deg_to_rad(90 * get_rotation_count())))
)
)
result.push_back(
starting_coord + (Vector2i(Vector2.UP.rotated(deg_to_rad(90 * get_rotation_count()))) * 2)
)
result.push_back(
(
starting_coord
+ (Vector2i(Vector2.UP.rotated(deg_to_rad(90 * get_rotation_count()))) * 2)
+ Vector2i(Vector2.RIGHT.rotated(deg_to_rad(90 * get_rotation_count())))
)
)
result.push_back(
(
starting_coord
+ (Vector2i(Vector2.UP.rotated(deg_to_rad(90 * get_rotation_count()))) * 2)
+ (Vector2i(Vector2.RIGHT.rotated(deg_to_rad(90 * get_rotation_count()))) * 2)
)
)
return result
func get_direction_queue(citizen: Citizen) -> Array[Board.Direction]:
if (citizen.current_tile_coords - starting_coord) == Vector2i.ZERO:
return [
Board.get_next_direction(Board.Direction.UP, get_rotation_count()),
Board.get_next_direction(Board.Direction.RIGHT, get_rotation_count()),
Board.get_next_direction(Board.Direction.UP, get_rotation_count()),
Board.get_next_direction(Board.Direction.RIGHT, get_rotation_count()),
Board.get_next_direction(Board.Direction.RIGHT, get_rotation_count())
]
return [
Board.get_next_direction(Board.Direction.LEFT, get_rotation_count()),
Board.get_next_direction(Board.Direction.DOWN, get_rotation_count()),
Board.get_next_direction(Board.Direction.LEFT, get_rotation_count()),
Board.get_next_direction(Board.Direction.DOWN, get_rotation_count()),
Board.get_next_direction(Board.Direction.DOWN, get_rotation_count())
]
func activate(citizen: Citizen) -> void:
citizen.add_status(Citizen.Status.ARMED)