semi-idle-arpg/scripts/WorldArea.gd

71 lines
1.9 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))
_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))