2026-04-13 11:34:00 -05:00
|
|
|
class_name Spawn extends Tile
|
|
|
|
|
|
|
|
|
|
enum Size { SMALL, MEDIUM, LARGE }
|
|
|
|
|
|
2026-04-15 10:45:43 -05:00
|
|
|
const CITIZEN_SCENE = preload("uid://bwx0lqtkd2jd7")
|
2026-04-13 11:34:00 -05:00
|
|
|
|
|
|
|
|
@export var spawn_size: Size = Size.SMALL
|
|
|
|
|
@export var direction: Board.Direction = Board.Direction.UP
|
|
|
|
|
|
|
|
|
|
var spawn_time: float = 0.5
|
|
|
|
|
var spawn_left: int
|
|
|
|
|
var current_time: float = 0
|
2026-04-15 10:45:43 -05:00
|
|
|
var paused: bool = true
|
|
|
|
|
|
2026-04-20 13:03:39 -05:00
|
|
|
@onready var icon: ColorRect = %Icon
|
|
|
|
|
|
2026-04-13 11:34:00 -05:00
|
|
|
|
|
|
|
|
func _ready() -> void:
|
|
|
|
|
match spawn_size:
|
|
|
|
|
Size.SMALL:
|
2026-04-20 13:03:39 -05:00
|
|
|
spawn_left = 1
|
2026-04-13 11:34:00 -05:00
|
|
|
|
2026-04-15 10:45:43 -05:00
|
|
|
|
|
|
|
|
func pause() -> void:
|
|
|
|
|
paused = true
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func unpause() -> void:
|
|
|
|
|
paused = false
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func handle_post_turn_actions() -> void:
|
|
|
|
|
match spawn_size:
|
|
|
|
|
Size.SMALL:
|
|
|
|
|
spawn_left = 10
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func _physics_process(delta: float) -> void:
|
|
|
|
|
#print(paused)
|
|
|
|
|
if paused:
|
|
|
|
|
return
|
2026-04-13 11:34:00 -05:00
|
|
|
current_time += delta
|
|
|
|
|
if current_time >= spawn_time and spawn_left > 0:
|
|
|
|
|
spawn_left -= 1
|
|
|
|
|
current_time = 0
|
2026-04-15 10:45:43 -05:00
|
|
|
var citizen: Citizen = CITIZEN_SCENE.instantiate()
|
2026-04-13 11:34:00 -05:00
|
|
|
add_sibling(citizen)
|
2026-04-15 10:45:43 -05:00
|
|
|
citizen.add_to_group("Pausable")
|
2026-04-20 13:03:39 -05:00
|
|
|
citizen.position = position
|
2026-04-13 11:34:00 -05:00
|
|
|
citizen.set_offset(Vector2(randf_range(-40, 40), randf_range(-40, 40)))
|
|
|
|
|
citizen.direction = direction
|