Rewrite Enemy Spawn Script
This commit is contained in:
parent
9e975bb9bf
commit
275e11722c
12 changed files with 249 additions and 168 deletions
|
@ -5,7 +5,9 @@ var game = {
|
|||
"duration": 300,
|
||||
"health": 6,
|
||||
"resource": 100,
|
||||
"spawn_timer": 3.0,
|
||||
"spawn_timer": 10.0,
|
||||
"spawn_count": 3,
|
||||
"spawn_delay": 2,
|
||||
"offset": [-30.0, 30.0],
|
||||
"path_direction": [
|
||||
[
|
||||
|
@ -131,44 +133,11 @@ var tower = [
|
|||
var enemy = [
|
||||
{
|
||||
"name": "Demon",
|
||||
"asset": preload("res://scenes/enemies/demon.tscn"),
|
||||
"health": 100,
|
||||
"speed": 30,
|
||||
"damage": 1,
|
||||
"reward": 10
|
||||
},
|
||||
{
|
||||
"name": "Orc",
|
||||
"health": 100,
|
||||
"speed": 30,
|
||||
"damage": 1,
|
||||
"reward": 20
|
||||
},
|
||||
{
|
||||
"name": "Cyclops",
|
||||
"health": 100,
|
||||
"speed": 30,
|
||||
"damage": 1,
|
||||
"reward": 30
|
||||
},
|
||||
{
|
||||
"name": "Demon Boar",
|
||||
"health": 100,
|
||||
"speed": 30,
|
||||
"damage": 1,
|
||||
"reward": 40
|
||||
},
|
||||
{
|
||||
"name": "Demon Fungus",
|
||||
"health": 100,
|
||||
"speed": 30,
|
||||
"damage": 1,
|
||||
"reward": 50
|
||||
},
|
||||
{
|
||||
"name": "Demon Shark",
|
||||
"health": 100,
|
||||
"speed": 30,
|
||||
"damage": 1,
|
||||
"reward": 60
|
||||
"reward": 10,
|
||||
"spawn_rate": 1
|
||||
}
|
||||
]
|
||||
|
|
|
@ -1,25 +1,47 @@
|
|||
extends Path2D
|
||||
|
||||
|
||||
@onready var timer = $Timer
|
||||
@export var type: int = 0
|
||||
|
||||
var config_path = "res://scripts/stages/1/config.gd"
|
||||
var config = load(config_path).new()
|
||||
|
||||
var spawn_first: bool = true
|
||||
|
||||
var enemy: PackedScene = preload("res://scenes/enemies/demon.tscn")
|
||||
var enemies = []
|
||||
var probabilities = []
|
||||
|
||||
func _ready():
|
||||
summon()
|
||||
for enemy in config.enemy:
|
||||
enemies.append(enemy['asset'])
|
||||
probabilities.append(enemy['spawn_rate'])
|
||||
|
||||
summon_init()
|
||||
|
||||
timer.wait_time = config.game['spawn_timer']
|
||||
timer.start()
|
||||
|
||||
func weighted_random_choice(items, weights):
|
||||
var total_weight = 0
|
||||
for weight in weights:
|
||||
total_weight += weight
|
||||
|
||||
var random_value = randf() * total_weight
|
||||
|
||||
for i in range(len(items)):
|
||||
random_value -= weights[i]
|
||||
if random_value <= 0:
|
||||
return items[i]
|
||||
|
||||
func _on_timer_timeout():
|
||||
summon()
|
||||
summon_init()
|
||||
timer.start()
|
||||
|
||||
func summon():
|
||||
func summon_init():
|
||||
for x in range(config.game['spawn_count']):
|
||||
summon(weighted_random_choice(enemies, probabilities))
|
||||
await get_tree().create_timer(config.game['spawn_delay']).timeout
|
||||
|
||||
func summon(enemy: PackedScene):
|
||||
var rng = RandomNumberGenerator.new()
|
||||
|
||||
var enemy_instance = enemy.instantiate()
|
||||
|
|
|
@ -5,7 +5,9 @@ var game = {
|
|||
"duration": 300,
|
||||
"health": 6,
|
||||
"resource": 100,
|
||||
"spawn_timer": 3.0,
|
||||
"spawn_timer": 10.0,
|
||||
"spawn_count": 2,
|
||||
"spawn_delay": 2,
|
||||
"offset": [-40.0, 35.0],
|
||||
"path_direction": [
|
||||
[
|
||||
|
@ -161,44 +163,20 @@ var tower = [
|
|||
var enemy = [
|
||||
{
|
||||
"name": "Demon",
|
||||
"asset": preload("res://scenes/enemies/demon.tscn"),
|
||||
"health": 100,
|
||||
"speed": 30,
|
||||
"damage": 1,
|
||||
"reward": 10
|
||||
"reward": 10,
|
||||
"spawn_rate": 0.80
|
||||
},
|
||||
{
|
||||
"name": "Orc",
|
||||
"asset": preload("res://scenes/enemies/orc.tscn"),
|
||||
"health": 100,
|
||||
"speed": 30,
|
||||
"damage": 1,
|
||||
"reward": 20
|
||||
},
|
||||
{
|
||||
"name": "Cyclops",
|
||||
"health": 100,
|
||||
"speed": 30,
|
||||
"damage": 1,
|
||||
"reward": 30
|
||||
},
|
||||
{
|
||||
"name": "Demon Boar",
|
||||
"health": 100,
|
||||
"speed": 30,
|
||||
"damage": 1,
|
||||
"reward": 40
|
||||
},
|
||||
{
|
||||
"name": "Demon Fungus",
|
||||
"health": 100,
|
||||
"speed": 30,
|
||||
"damage": 1,
|
||||
"reward": 50
|
||||
},
|
||||
{
|
||||
"name": "Demon Shark",
|
||||
"health": 100,
|
||||
"speed": 30,
|
||||
"damage": 1,
|
||||
"reward": 60
|
||||
"reward": 20,
|
||||
"spawn_rate": 0.20
|
||||
}
|
||||
]
|
||||
|
|
|
@ -1,25 +1,47 @@
|
|||
extends Path2D
|
||||
|
||||
|
||||
@onready var timer = $Timer
|
||||
@export var type: int = 0
|
||||
|
||||
var config_path = "res://scripts/stages/2/config.gd"
|
||||
var config = load(config_path).new()
|
||||
|
||||
var spawn_first: bool = true
|
||||
|
||||
var enemy: PackedScene = preload("res://scenes/enemies/demon.tscn")
|
||||
var enemies = []
|
||||
var probabilities = []
|
||||
|
||||
func _ready():
|
||||
summon()
|
||||
for enemy in config.enemy:
|
||||
enemies.append(enemy['asset'])
|
||||
probabilities.append(enemy['spawn_rate'])
|
||||
|
||||
summon_init()
|
||||
|
||||
timer.wait_time = config.game['spawn_timer']
|
||||
timer.start()
|
||||
|
||||
func weighted_random_choice(items, weights):
|
||||
var total_weight = 0
|
||||
for weight in weights:
|
||||
total_weight += weight
|
||||
|
||||
var random_value = randf() * total_weight
|
||||
|
||||
for i in range(len(items)):
|
||||
random_value -= weights[i]
|
||||
if random_value <= 0:
|
||||
return items[i]
|
||||
|
||||
func _on_timer_timeout():
|
||||
summon()
|
||||
summon_init()
|
||||
timer.start()
|
||||
|
||||
func summon():
|
||||
func summon_init():
|
||||
for x in range(config.game['spawn_count']):
|
||||
summon(weighted_random_choice(enemies, probabilities))
|
||||
await get_tree().create_timer(config.game['spawn_delay']).timeout
|
||||
|
||||
func summon(enemy: PackedScene):
|
||||
var rng = RandomNumberGenerator.new()
|
||||
|
||||
var enemy_instance = enemy.instantiate()
|
||||
|
|
|
@ -5,7 +5,9 @@ var game = {
|
|||
"duration": 300,
|
||||
"health": 6,
|
||||
"resource": 100,
|
||||
"spawn_timer": 3.0,
|
||||
"spawn_timer": 10.0,
|
||||
"spawn_count": 3,
|
||||
"spawn_delay": 2,
|
||||
"offset": [-40.0, 50.0],
|
||||
"path_direction": [
|
||||
[
|
||||
|
@ -143,44 +145,29 @@ var tower = [
|
|||
var enemy = [
|
||||
{
|
||||
"name": "Demon",
|
||||
"asset": preload("res://scenes/enemies/demon.tscn"),
|
||||
"health": 100,
|
||||
"speed": 30,
|
||||
"damage": 1,
|
||||
"reward": 10
|
||||
"reward": 10,
|
||||
"spawn_rate": 0.60
|
||||
},
|
||||
{
|
||||
"name": "Orc",
|
||||
"asset": preload("res://scenes/enemies/orc.tscn"),
|
||||
"health": 100,
|
||||
"speed": 30,
|
||||
"damage": 1,
|
||||
"reward": 20
|
||||
"reward": 20,
|
||||
"spawn_rate": 0.30
|
||||
},
|
||||
{
|
||||
"name": "Cyclops",
|
||||
"asset": preload("res://scenes/enemies/cyclops.tscn"),
|
||||
"health": 100,
|
||||
"speed": 30,
|
||||
"damage": 1,
|
||||
"reward": 30
|
||||
},
|
||||
{
|
||||
"name": "Demon Boar",
|
||||
"health": 100,
|
||||
"speed": 30,
|
||||
"damage": 1,
|
||||
"reward": 40
|
||||
},
|
||||
{
|
||||
"name": "Demon Fungus",
|
||||
"health": 100,
|
||||
"speed": 30,
|
||||
"damage": 1,
|
||||
"reward": 50
|
||||
},
|
||||
{
|
||||
"name": "Demon Shark",
|
||||
"health": 100,
|
||||
"speed": 30,
|
||||
"damage": 1,
|
||||
"reward": 60
|
||||
"reward": 30,
|
||||
"spawn_rate": 0.10
|
||||
}
|
||||
]
|
||||
|
|
|
@ -1,25 +1,47 @@
|
|||
extends Path2D
|
||||
|
||||
|
||||
@onready var timer = $Timer
|
||||
@export var type: int = 0
|
||||
|
||||
var config_path = "res://scripts/stages/3/config.gd"
|
||||
var config = load(config_path).new()
|
||||
|
||||
var spawn_first: bool = true
|
||||
|
||||
var enemy: PackedScene = preload("res://scenes/enemies/demon.tscn")
|
||||
var enemies = []
|
||||
var probabilities = []
|
||||
|
||||
func _ready():
|
||||
summon()
|
||||
for enemy in config.enemy:
|
||||
enemies.append(enemy['asset'])
|
||||
probabilities.append(enemy['spawn_rate'])
|
||||
|
||||
summon_init()
|
||||
|
||||
timer.wait_time = config.game['spawn_timer']
|
||||
timer.start()
|
||||
|
||||
func weighted_random_choice(items, weights):
|
||||
var total_weight = 0
|
||||
for weight in weights:
|
||||
total_weight += weight
|
||||
|
||||
var random_value = randf() * total_weight
|
||||
|
||||
for i in range(len(items)):
|
||||
random_value -= weights[i]
|
||||
if random_value <= 0:
|
||||
return items[i]
|
||||
|
||||
func _on_timer_timeout():
|
||||
summon()
|
||||
summon_init()
|
||||
timer.start()
|
||||
|
||||
func summon():
|
||||
func summon_init():
|
||||
for x in range(config.game['spawn_count']):
|
||||
summon(weighted_random_choice(enemies, probabilities))
|
||||
await get_tree().create_timer(config.game['spawn_delay']).timeout
|
||||
|
||||
func summon(enemy: PackedScene):
|
||||
var rng = RandomNumberGenerator.new()
|
||||
|
||||
var enemy_instance = enemy.instantiate()
|
||||
|
|
|
@ -5,7 +5,9 @@ var game = {
|
|||
"duration": 300,
|
||||
"health": 6,
|
||||
"resource": 100,
|
||||
"spawn_timer": 3.0,
|
||||
"spawn_timer": 10.0,
|
||||
"spawn_count": 2,
|
||||
"spawn_delay": 2,
|
||||
"offset": [-20.0, 13.0],
|
||||
"path_direction": [
|
||||
[
|
||||
|
@ -149,44 +151,38 @@ var tower = [
|
|||
var enemy = [
|
||||
{
|
||||
"name": "Demon",
|
||||
"asset": preload("res://scenes/enemies/demon.tscn"),
|
||||
"health": 100,
|
||||
"speed": 30,
|
||||
"damage": 1,
|
||||
"reward": 10
|
||||
"reward": 10,
|
||||
"spawn_rate": 0.45
|
||||
},
|
||||
{
|
||||
"name": "Orc",
|
||||
"asset": preload("res://scenes/enemies/orc.tscn"),
|
||||
"health": 100,
|
||||
"speed": 30,
|
||||
"damage": 1,
|
||||
"reward": 20
|
||||
"reward": 20,
|
||||
"spawn_rate": 0.35
|
||||
},
|
||||
{
|
||||
"name": "Cyclops",
|
||||
"asset": preload("res://scenes/enemies/cyclops.tscn"),
|
||||
"health": 100,
|
||||
"speed": 30,
|
||||
"damage": 1,
|
||||
"reward": 30
|
||||
"reward": 30,
|
||||
"spawn_rate": 0.15
|
||||
},
|
||||
{
|
||||
"name": "Demon Boar",
|
||||
"asset": preload("res://scenes/enemies/demon_boar.tscn"),
|
||||
"health": 100,
|
||||
"speed": 30,
|
||||
"damage": 1,
|
||||
"reward": 40
|
||||
},
|
||||
{
|
||||
"name": "Demon Fungus",
|
||||
"health": 100,
|
||||
"speed": 30,
|
||||
"damage": 1,
|
||||
"reward": 50
|
||||
},
|
||||
{
|
||||
"name": "Demon Shark",
|
||||
"health": 100,
|
||||
"speed": 30,
|
||||
"damage": 1,
|
||||
"reward": 60
|
||||
"reward": 40,
|
||||
"spawn_rate": 0.05
|
||||
}
|
||||
]
|
||||
|
|
|
@ -1,25 +1,47 @@
|
|||
extends Path2D
|
||||
|
||||
|
||||
@onready var timer = $Timer
|
||||
@export var type: int = 0
|
||||
|
||||
var config_path = "res://scripts/stages/4/config.gd"
|
||||
var config = load(config_path).new()
|
||||
|
||||
var spawn_first: bool = true
|
||||
|
||||
var enemy: PackedScene = preload("res://scenes/enemies/demon.tscn")
|
||||
var enemies = []
|
||||
var probabilities = []
|
||||
|
||||
func _ready():
|
||||
summon()
|
||||
for enemy in config.enemy:
|
||||
enemies.append(enemy['asset'])
|
||||
probabilities.append(enemy['spawn_rate'])
|
||||
|
||||
summon_init()
|
||||
|
||||
timer.wait_time = config.game['spawn_timer']
|
||||
timer.start()
|
||||
|
||||
func weighted_random_choice(items, weights):
|
||||
var total_weight = 0
|
||||
for weight in weights:
|
||||
total_weight += weight
|
||||
|
||||
var random_value = randf() * total_weight
|
||||
|
||||
for i in range(len(items)):
|
||||
random_value -= weights[i]
|
||||
if random_value <= 0:
|
||||
return items[i]
|
||||
|
||||
func _on_timer_timeout():
|
||||
summon()
|
||||
summon_init()
|
||||
timer.start()
|
||||
|
||||
func summon():
|
||||
func summon_init():
|
||||
for x in range(config.game['spawn_count']):
|
||||
summon(weighted_random_choice(enemies, probabilities))
|
||||
await get_tree().create_timer(config.game['spawn_delay']).timeout
|
||||
|
||||
func summon(enemy: PackedScene):
|
||||
var rng = RandomNumberGenerator.new()
|
||||
|
||||
var enemy_instance = enemy.instantiate()
|
||||
|
|
|
@ -5,7 +5,9 @@ var game = {
|
|||
"duration": 300,
|
||||
"health": 6,
|
||||
"resource": 100,
|
||||
"spawn_timer": 3.0,
|
||||
"spawn_timer": 10.0,
|
||||
"spawn_count": 3,
|
||||
"spawn_delay": 2,
|
||||
"offset": [-20.0, 25.0],
|
||||
"path_direction": [
|
||||
[
|
||||
|
@ -149,44 +151,47 @@ var tower = [
|
|||
var enemy = [
|
||||
{
|
||||
"name": "Demon",
|
||||
"asset": preload("res://scenes/enemies/demon.tscn"),
|
||||
"health": 100,
|
||||
"speed": 30,
|
||||
"damage": 1,
|
||||
"reward": 10
|
||||
"reward": 10,
|
||||
"spawn_rate": 0.30
|
||||
},
|
||||
{
|
||||
"name": "Orc",
|
||||
"asset": preload("res://scenes/enemies/orc.tscn"),
|
||||
"health": 100,
|
||||
"speed": 30,
|
||||
"damage": 1,
|
||||
"reward": 20
|
||||
"reward": 20,
|
||||
"spawn_rate": 0.25
|
||||
},
|
||||
{
|
||||
"name": "Cyclops",
|
||||
"asset": preload("res://scenes/enemies/cyclops.tscn"),
|
||||
"health": 100,
|
||||
"speed": 30,
|
||||
"damage": 1,
|
||||
"reward": 30
|
||||
"reward": 30,
|
||||
"spawn_rate": 0.20
|
||||
},
|
||||
{
|
||||
"name": "Demon Boar",
|
||||
"asset": preload("res://scenes/enemies/demon_boar.tscn"),
|
||||
"health": 100,
|
||||
"speed": 30,
|
||||
"damage": 1,
|
||||
"reward": 40
|
||||
"reward": 40,
|
||||
"spawn_rate": 0.15
|
||||
},
|
||||
{
|
||||
"name": "Demon Fungus",
|
||||
"asset": preload("res://scenes/enemies/demon_fungus.tscn"),
|
||||
"health": 100,
|
||||
"speed": 30,
|
||||
"damage": 1,
|
||||
"reward": 50
|
||||
},
|
||||
{
|
||||
"name": "Demon Shark",
|
||||
"health": 100,
|
||||
"speed": 30,
|
||||
"damage": 1,
|
||||
"reward": 60
|
||||
"reward": 50,
|
||||
"spawn_rate": 0.10
|
||||
}
|
||||
]
|
||||
|
|
|
@ -1,25 +1,47 @@
|
|||
extends Path2D
|
||||
|
||||
|
||||
@onready var timer = $Timer
|
||||
@export var type: int = 0
|
||||
|
||||
var config_path = "res://scripts/stages/5/config.gd"
|
||||
var config = load(config_path).new()
|
||||
|
||||
var spawn_first: bool = true
|
||||
|
||||
var enemy: PackedScene = preload("res://scenes/enemies/demon.tscn")
|
||||
var enemies = []
|
||||
var probabilities = []
|
||||
|
||||
func _ready():
|
||||
summon()
|
||||
for enemy in config.enemy:
|
||||
enemies.append(enemy['asset'])
|
||||
probabilities.append(enemy['spawn_rate'])
|
||||
|
||||
summon_init()
|
||||
|
||||
timer.wait_time = config.game['spawn_timer']
|
||||
timer.start()
|
||||
|
||||
func weighted_random_choice(items, weights):
|
||||
var total_weight = 0
|
||||
for weight in weights:
|
||||
total_weight += weight
|
||||
|
||||
var random_value = randf() * total_weight
|
||||
|
||||
for i in range(len(items)):
|
||||
random_value -= weights[i]
|
||||
if random_value <= 0:
|
||||
return items[i]
|
||||
|
||||
func _on_timer_timeout():
|
||||
summon()
|
||||
summon_init()
|
||||
timer.start()
|
||||
|
||||
func summon():
|
||||
func summon_init():
|
||||
for x in range(config.game['spawn_count']):
|
||||
summon(weighted_random_choice(enemies, probabilities))
|
||||
await get_tree().create_timer(config.game['spawn_delay']).timeout
|
||||
|
||||
func summon(enemy: PackedScene):
|
||||
var rng = RandomNumberGenerator.new()
|
||||
|
||||
var enemy_instance = enemy.instantiate()
|
||||
|
|
|
@ -5,7 +5,9 @@ var game = {
|
|||
"duration": 300,
|
||||
"health": 6,
|
||||
"resource": 100,
|
||||
"spawn_timer": 3.0,
|
||||
"spawn_timer": 10.0,
|
||||
"spawn_count": 3,
|
||||
"spawn_delay": 2,
|
||||
"offset": [-20.0, 20.0],
|
||||
"path_direction": [
|
||||
[
|
||||
|
@ -191,44 +193,56 @@ var tower = [
|
|||
var enemy = [
|
||||
{
|
||||
"name": "Demon",
|
||||
"asset": preload("res://scenes/enemies/demon.tscn"),
|
||||
"health": 100,
|
||||
"speed": 30,
|
||||
"damage": 1,
|
||||
"reward": 10
|
||||
"reward": 10,
|
||||
"spawn_rate": 0.15
|
||||
},
|
||||
{
|
||||
"name": "Orc",
|
||||
"asset": preload("res://scenes/enemies/orc.tscn"),
|
||||
"health": 100,
|
||||
"speed": 30,
|
||||
"damage": 1,
|
||||
"reward": 20
|
||||
"reward": 20,
|
||||
"spawn_rate": 0.20
|
||||
},
|
||||
{
|
||||
"name": "Cyclops",
|
||||
"asset": preload("res://scenes/enemies/cyclops.tscn"),
|
||||
"health": 100,
|
||||
"speed": 30,
|
||||
"damage": 1,
|
||||
"reward": 30
|
||||
"reward": 30,
|
||||
"spawn_rate": 0.25
|
||||
},
|
||||
{
|
||||
"name": "Demon Boar",
|
||||
"asset": preload("res://scenes/enemies/demon_boar.tscn"),
|
||||
"health": 100,
|
||||
"speed": 30,
|
||||
"damage": 1,
|
||||
"reward": 40
|
||||
"reward": 40,
|
||||
"spawn_rate": 0.20
|
||||
},
|
||||
{
|
||||
"name": "Demon Fungus",
|
||||
"asset": preload("res://scenes/enemies/demon_fungus.tscn"),
|
||||
"health": 100,
|
||||
"speed": 30,
|
||||
"damage": 1,
|
||||
"reward": 50
|
||||
"reward": 50,
|
||||
"spawn_rate": 0.15
|
||||
},
|
||||
{
|
||||
"name": "Demon Shark",
|
||||
"asset": preload("res://scenes/enemies/demon_shark.tscn"),
|
||||
"health": 100,
|
||||
"speed": 30,
|
||||
"damage": 1,
|
||||
"reward": 60
|
||||
"reward": 60,
|
||||
"spawn_rate": 0.05
|
||||
}
|
||||
]
|
||||
|
|
|
@ -1,25 +1,47 @@
|
|||
extends Path2D
|
||||
|
||||
|
||||
@onready var timer = $Timer
|
||||
@export var type: int = 0
|
||||
|
||||
var config_path = "res://scripts/stages/6/config.gd"
|
||||
var config = load(config_path).new()
|
||||
|
||||
var spawn_first: bool = true
|
||||
|
||||
var enemy: PackedScene = preload("res://scenes/enemies/demon.tscn")
|
||||
var enemies = []
|
||||
var probabilities = []
|
||||
|
||||
func _ready():
|
||||
summon()
|
||||
for enemy in config.enemy:
|
||||
enemies.append(enemy['asset'])
|
||||
probabilities.append(enemy['spawn_rate'])
|
||||
|
||||
summon_init()
|
||||
|
||||
timer.wait_time = config.game['spawn_timer']
|
||||
timer.start()
|
||||
|
||||
func weighted_random_choice(items, weights):
|
||||
var total_weight = 0
|
||||
for weight in weights:
|
||||
total_weight += weight
|
||||
|
||||
var random_value = randf() * total_weight
|
||||
|
||||
for i in range(len(items)):
|
||||
random_value -= weights[i]
|
||||
if random_value <= 0:
|
||||
return items[i]
|
||||
|
||||
func _on_timer_timeout():
|
||||
summon()
|
||||
summon_init()
|
||||
timer.start()
|
||||
|
||||
func summon():
|
||||
func summon_init():
|
||||
for x in range(config.game['spawn_count']):
|
||||
summon(weighted_random_choice(enemies, probabilities))
|
||||
await get_tree().create_timer(config.game['spawn_delay']).timeout
|
||||
|
||||
func summon(enemy: PackedScene):
|
||||
var rng = RandomNumberGenerator.new()
|
||||
|
||||
var enemy_instance = enemy.instantiate()
|
||||
|
|
Loading…
Reference in a new issue