83 lines
2.3 KiB
GDScript
83 lines
2.3 KiB
GDScript
# defines the parameters for quests and spawning enemies within an area
|
|
class_name WorldArea
|
|
extends PanelContainer
|
|
|
|
|
|
enum GoalType {KILL, FIND}
|
|
|
|
@export var area_type := Globals.World.AreaType.WILDS
|
|
@export var spawnTimerValue = 10.0
|
|
|
|
|
|
var middleX: float
|
|
var playerPos: Vector2
|
|
|
|
|
|
func _ready() -> void:
|
|
middleX = get_viewport_rect().size.x / 2
|
|
playerPos = Vector2(middleX, get_viewport_rect().size.y * (0.75))
|
|
|
|
SignalBus.area_continue_pressed.connect(_on_area_continue_pressed)
|
|
|
|
_generate_quest()
|
|
|
|
$SpawnTimer.start(spawnTimerValue)
|
|
_spawn_enemies(randi_range(1, 5))
|
|
# _spawn_enemies(5)
|
|
|
|
|
|
func _process(_delta: float) -> void:
|
|
playerPos = Vector2(middleX, get_viewport_rect().size.y * (0.75))
|
|
|
|
|
|
# instantiate Quest
|
|
func _generate_quest() -> void:
|
|
var quest = load("res://scenes/quest.tscn").instantiate()
|
|
# quest.goalType = GoalType.FIND
|
|
SignalBus.quest_generated.emit(quest)
|
|
|
|
|
|
# spawn appropriate enemies
|
|
func _create_enemy():
|
|
var enemy = load("res://scenes/enemy.tscn").instantiate()
|
|
enemy.scale = Vector2.ONE * 0.5
|
|
enemy.position = Vector2(randf_range(0, get_viewport_rect().size.x), -50.0)
|
|
enemy.speed *= randf_range(0.67, 1.5)
|
|
enemy.target = playerPos
|
|
|
|
return enemy
|
|
|
|
func _get_enemies() -> Array:
|
|
var enemies := get_tree().get_nodes_in_group("enemies")
|
|
return enemies
|
|
|
|
|
|
func _get_num_enemies() -> int:
|
|
var enemies := get_tree().get_nodes_in_group("enemies")
|
|
return len(enemies)
|
|
|
|
|
|
func _spawn_enemies(numEnemies: int) -> void:
|
|
#await get_tree().create_timer(time).timeout
|
|
# var numEnemies = randi_range(1, maxEnemies)
|
|
for i in range(numEnemies):
|
|
var enemy = _create_enemy()
|
|
add_child(enemy)
|
|
# var randEnemyMoveSpeed := randf_range(0.5, 2.0)*enemyMoveSpeed
|
|
# create_tween().tween_property(enemy, "position", playerPos, randEnemyMoveSpeed)
|
|
|
|
|
|
func _on_spawn_timer_timeout() -> void:
|
|
_spawn_enemies(randi_range(1, 5))
|
|
|
|
|
|
func _on_area_continue_pressed() -> void:
|
|
$SpawnTimer.stop()
|
|
# Globals.debug_print("spawn timer stopped")
|
|
while get_child_count() > 1:
|
|
await get_tree().create_timer(1.0).timeout
|
|
# Globals.debug_print("waiting for children to go to 1 or less")
|
|
# Globals.debug_print(get_child_count())
|
|
self.queue_free()
|
|
# Globals.debug_print("area queued tor free")
|