75 lines
2.1 KiB
GDScript3
Raw Permalink Normal View History

extends Building
var money: int = 0:
set(value):
money = value
_set_money_label()
@onready var money_label: Label = %MoneyLabel
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)
)
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.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.UP.rotated(deg_to_rad(90 * get_rotation_count())))
)
)
return result
func get_direction_queue(_citizen: Citizen) -> Array[Board.Direction]:
return [
Board.get_next_direction(Board.Direction.DOWN, get_rotation_count()),
Board.get_next_direction(Board.Direction.UP, get_rotation_count()),
Board.get_next_direction(Board.Direction.UP, get_rotation_count())
]
func activate(citizen: Citizen) -> void:
if citizen.get_status_count(Citizen.Status.ARMED) > 0:
citizen.money += money
citizen.play_money_animation()
citizen.remove_status(Citizen.Status.ARMED)
money = 0
elif citizen.money > 0:
money += citizen.money
citizen.money = 0
citizen.play_money_animation()
func handle_post_turn_actions() -> void:
money *= 2
func _ready() -> void:
_set_money_label()
func _set_money_label() -> void:
if is_node_ready():
money_label.text = "$%d" % money