generated from krampus/template-godot4
93 lines
2.8 KiB
GDScript3
93 lines
2.8 KiB
GDScript3
|
|
extends Building
|
||
|
|
|
||
|
|
|
||
|
|
func can_citizen_enter(coord: Vector2i, direction: Board.Direction) -> bool:
|
||
|
|
var down_adjustment := Board.get_next_direction(Board.Direction.DOWN, get_rotation_count())
|
||
|
|
var left_adjustment := Board.get_next_direction(Board.Direction.LEFT, 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.UP, get_rotation_count())
|
||
|
|
|
||
|
|
var entrance_1 := starting_coord + Board.get_direction_vector(down_adjustment)
|
||
|
|
var entrance_2 := (
|
||
|
|
starting_coord
|
||
|
|
+ Board.get_direction_vector(left_adjustment)
|
||
|
|
+ Board.get_direction_vector(down_adjustment)
|
||
|
|
)
|
||
|
|
var entrance_3 := (
|
||
|
|
starting_coord
|
||
|
|
+ Board.get_direction_vector(left_adjustment)
|
||
|
|
+ Board.get_direction_vector(left_adjustment)
|
||
|
|
+ Board.get_direction_vector(down_adjustment)
|
||
|
|
)
|
||
|
|
var entrance_4 := (
|
||
|
|
starting_coord
|
||
|
|
+ Board.get_direction_vector(right_adjustment)
|
||
|
|
+ Board.get_direction_vector(down_adjustment)
|
||
|
|
)
|
||
|
|
var entrance_5 := (
|
||
|
|
starting_coord
|
||
|
|
+ Board.get_direction_vector(right_adjustment)
|
||
|
|
+ Board.get_direction_vector(right_adjustment)
|
||
|
|
+ Board.get_direction_vector(down_adjustment)
|
||
|
|
)
|
||
|
|
|
||
|
|
return (
|
||
|
|
(
|
||
|
|
coord == entrance_1
|
||
|
|
or coord == entrance_2
|
||
|
|
or coord == entrance_3
|
||
|
|
or coord == entrance_4
|
||
|
|
or coord == entrance_5
|
||
|
|
)
|
||
|
|
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.LEFT.rotated(deg_to_rad(90 * get_rotation_count())))
|
||
|
|
)
|
||
|
|
result.push_back(
|
||
|
|
starting_coord + Vector2i(Vector2.LEFT.rotated(deg_to_rad(90 * get_rotation_count()))) * 2
|
||
|
|
)
|
||
|
|
return result
|
||
|
|
|
||
|
|
|
||
|
|
func get_direction_queue(citizen: Citizen) -> Array[Board.Direction]:
|
||
|
|
var result: Array[Board.Direction] = []
|
||
|
|
match citizen.current_tile_coords - starting_coord:
|
||
|
|
Vector2i(-2, 0):
|
||
|
|
result.append(Board.Direction.RIGHT)
|
||
|
|
result.append(Board.Direction.RIGHT)
|
||
|
|
Vector2i(-1, 0):
|
||
|
|
result.append(Board.Direction.RIGHT)
|
||
|
|
Vector2i(2, 0):
|
||
|
|
result.append(Board.Direction.LEFT)
|
||
|
|
result.append(Board.Direction.LEFT)
|
||
|
|
Vector2i(1, 0):
|
||
|
|
result.append(Board.Direction.LEFT)
|
||
|
|
Vector2i(0, -2):
|
||
|
|
result.append(Board.Direction.DOWN)
|
||
|
|
result.append(Board.Direction.DOWN)
|
||
|
|
Vector2i(0, -1):
|
||
|
|
result.append(Board.Direction.DOWN)
|
||
|
|
Vector2i(0, 2):
|
||
|
|
result.append(Board.Direction.UP)
|
||
|
|
result.append(Board.Direction.UP)
|
||
|
|
Vector2i(0, 1):
|
||
|
|
result.append(Board.Direction.UP)
|
||
|
|
result.append(Board.get_next_direction(Board.Direction.UP, get_rotation_count()))
|
||
|
|
return result
|
||
|
|
|
||
|
|
|
||
|
|
func activate(_citizen: Citizen) -> void:
|
||
|
|
pass
|