duncgibbs 70c49d768c
All checks were successful
linting & formatting / build (push) Successful in 19s
itch.io publish action / build (web, html) (push) Successful in 3m51s
hospital lint fix
2026-04-20 13:05:08 -05:00

85 lines
3.2 KiB
GDScript

extends Building
#const CITIZEN_SCENE = preload("uid://bwx0lqtkd2jd7")
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 := Board.get_next_direction(Board.Direction.DOWN, get_rotation_count())
var entrance_1 := (
starting_coord
+ Board.get_direction_vector(up_adjustment)
+ Board.get_direction_vector(up_adjustment)
+ Board.get_direction_vector(right_adjustment)
)
var entrance_2 := entrance_1 + Board.get_direction_vector(right_adjustment)
return (coord == entrance_1 or coord == entrance_2) and direction == correct_heading
func get_tile_coords() -> Array[Vector2i]:
var result: Array[Vector2i] = []
result.push_back(starting_coord)
result.push_back(
starting_coord + Vector2i(Vector2.RIGHT.rotated(deg_to_rad(90 * get_rotation_count())))
)
result.push_back(
starting_coord + Vector2i(Vector2.RIGHT.rotated(deg_to_rad(90 * get_rotation_count()))) * 2
)
result.push_back(
starting_coord + Vector2i(Vector2.RIGHT.rotated(deg_to_rad(90 * get_rotation_count()))) * 3
)
result.push_back(
(
starting_coord
+ Vector2i(Vector2.RIGHT.rotated(deg_to_rad(90 * get_rotation_count())))
+ Vector2i(Vector2.UP.rotated(deg_to_rad(90 * get_rotation_count())))
)
)
result.push_back(
(
starting_coord
+ Vector2i(Vector2.RIGHT.rotated(deg_to_rad(90 * get_rotation_count())))
+ Vector2i(Vector2.RIGHT.rotated(deg_to_rad(90 * get_rotation_count())))
+ Vector2i(Vector2.UP.rotated(deg_to_rad(90 * get_rotation_count())))
)
)
return result
func get_direction_queue(citizen: Citizen) -> Array[Board.Direction]:
var tile_offset := citizen.current_tile_coords - starting_coord
if tile_offset == Vector2i(1, -1):
return [
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.LEFT, get_rotation_count())
]
return [
Board.get_next_direction(Board.Direction.DOWN, get_rotation_count()),
Board.get_next_direction(Board.Direction.RIGHT, get_rotation_count()),
Board.get_next_direction(Board.Direction.RIGHT, get_rotation_count())
]
func activate(citizen: Citizen) -> void:
var new_citizen: Citizen = load("uid://bwx0lqtkd2jd7").instantiate()
citizen.call_deferred("add_sibling", new_citizen)
await new_citizen.ready
new_citizen.direction = citizen.direction
new_citizen.money = citizen.money
new_citizen.board = citizen.board
new_citizen.current_tile_coords = citizen.current_tile_coords
new_citizen.set_offset(Vector2(randf_range(-40, 40), randf_range(-40, 40)))
var tile_offset := citizen.current_tile_coords - starting_coord
if tile_offset == Vector2i(1, -1):
new_citizen.current_tile_coords = starting_coord + Vector2i(2, -1)
new_citizen.position = citizen.position + Vector2(110, 0)
elif tile_offset == Vector2i(2, -1):
new_citizen.current_tile_coords = starting_coord + Vector2i(1, -1)
new_citizen.position = citizen.position - Vector2(110, 0)
new_citizen.direction_queue = get_direction_queue(new_citizen)
new_citizen.direction_queue.remove_at(0)