added endless mode support to the wave viewer

This commit is contained in:
2026-02-07 09:07:00 +11:00
parent 9453389853
commit 8f14012fff
41 changed files with 145 additions and 344 deletions

View File

@@ -13,7 +13,8 @@ extends Object
## Takes in wave number and number of players and returns a spawn power value
## intended for passing into the generate_wave method
static func calculate_spawn_power(wave_number: int, number_of_players: int) -> int:
return (20 * number_of_players) + (4 * wave_number)
#print("wave number: " + str(wave_number) + ", number of players: " + str(number_of_players))
return (11 * number_of_players) + (6 * wave_number)
## Takes in wave number and number of players and returns the amount of coins
@@ -38,9 +39,8 @@ static func get_test_wave(spawn_pool: Array[Enemy]) -> Wave:
static func generate_wave(spawn_power: int, spawn_pool: Array[Enemy]) -> Wave:
var wave: Wave = Wave.new()
var points: int = int(spawn_power / 10.0)
#print("Generating wave with " + str(points) + " points to spend")
while points > 0:
while spawn_power > 0:
var new_card: EnemyCard = EnemyCard.new()
#First, choose an enemy at random
@@ -50,49 +50,33 @@ static func generate_wave(spawn_power: int, spawn_pool: Array[Enemy]) -> Wave:
#and, if not, then we have to pick a different enemy, repeat until
#we've successfully chosen one we can actually afford
var enemy_chosen: bool = false
var highest_rarity: Data.Rarity = Data.Rarity.COMMON
var most_enemies_afforded: int = 0
var first_enemy_id: int = -1
while !enemy_chosen:
#Next, determine which is the most expensive rarity we can afford
if new_card.enemy.legendary_cost <= points:
highest_rarity = Data.Rarity.LEGENDARY
enemy_chosen = true
elif new_card.enemy.epic_cost <= points:
highest_rarity = Data.Rarity.EPIC
enemy_chosen = true
elif new_card.enemy.rare_cost <= points:
highest_rarity = Data.Rarity.RARE
enemy_chosen = true
elif new_card.enemy.uncommon_cost <= points:
highest_rarity = Data.Rarity.UNCOMMON
enemy_chosen = true
elif new_card.enemy.common_cost <= points:
highest_rarity = Data.Rarity.COMMON
#Next, determine what is the most groups we can afford
most_enemies_afforded = int(spawn_power / new_card.enemy.spawn_power)
if most_enemies_afforded > 0:
enemy_chosen = true
else:
#Even the common rarity was too expensive, so we have to choose
#Even 1 group was too expensive, so we have to choose
#a different enemy and try this process again
var enemy_id: int = spawn_pool.find(new_card.enemy)
enemy_id -= 1
if first_enemy_id == -1:
first_enemy_id = enemy_id
if enemy_id < 0:
new_card.enemy = spawn_pool[spawn_pool.size() - 1]
else:
new_card.enemy = spawn_pool[enemy_id]
#Now that we know which rarities we could afford, lets just choose a
#random one
var chosen_rarity: int = NoiseRandom.randi_in_range(spawn_power, 0, highest_rarity)
new_card.rarity = chosen_rarity as Data.Rarity
most_enemies_afforded = 0
if enemy_id == first_enemy_id:
return wave
#Now that we know how many we could afford, lets just choose a
#random number of groups
var chosen_groups: int = NoiseRandom.randi_in_range(spawn_power, 1, most_enemies_afforded)
new_card.count = chosen_groups * new_card.enemy.group_size
#Add that new enemy to the wave and spend the points!
wave.enemy_groups.append(new_card)
if chosen_rarity == Data.Rarity.COMMON:
points -= new_card.enemy.common_cost
elif chosen_rarity == Data.Rarity.UNCOMMON:
points -= new_card.enemy.uncommon_cost
elif chosen_rarity == Data.Rarity.RARE:
points -= new_card.enemy.rare_cost
elif chosen_rarity == Data.Rarity.EPIC:
points -= new_card.enemy.epic_cost
elif chosen_rarity == Data.Rarity.LEGENDARY:
points -= new_card.enemy.legendary_cost
spawn_power -= chosen_groups * new_card.enemy.spawn_power
return wave