way too many changes to list, oops. big rewrite.
This commit is contained in:
@ -2,20 +2,110 @@ extends Node
|
||||
|
||||
|
||||
func calculate_spawn_power(wave_number: int, number_of_players: int) -> int:
|
||||
return 20 + (50 * number_of_players) + (30 * wave_number)
|
||||
return (20 * number_of_players) + (5 * wave_number)
|
||||
|
||||
|
||||
func generate_wave(spawn_power: int, spawn_pool: Array[Enemy]) -> Dictionary:
|
||||
var wave: Dictionary = {}
|
||||
#var sp_used = 0
|
||||
var enemy_types: int = randi_range(1, 5)
|
||||
var enemy_choices: Array[Enemy] = spawn_pool.duplicate()
|
||||
var sp_allotment: int = floori(float(spawn_power) / float(enemy_types))
|
||||
for x: int in enemy_types:
|
||||
var choice: Enemy = enemy_choices.pick_random()
|
||||
enemy_choices.erase(choice)
|
||||
if floori(float(sp_allotment) / float(choice.spawn_power)) > 0:
|
||||
wave[Data.enemies.find(choice)] = floori(float(sp_allotment) / float(choice.spawn_power))
|
||||
#sp_used += wave[Data.enemies.find(choice)] * choice.spawn_power
|
||||
#print("Generated wave with spawn power: " + str(sp_used) + "/" + str(spawn_power))
|
||||
func calculate_pot(wave_number: int, number_of_players: int) -> int:
|
||||
return 20 + (50 * number_of_players) + (15 * wave_number)
|
||||
|
||||
|
||||
#func generate_wave(spawn_power: int, spawn_pool: Array[Enemy]) -> Dictionary:
|
||||
#var wave: Dictionary = {}
|
||||
##var sp_used = 0
|
||||
#var enemy_types: int = randi_range(1, 5)
|
||||
#var enemy_choices: Array[Enemy] = spawn_pool.duplicate()
|
||||
#var sp_allotment: int = floori(float(spawn_power) / float(enemy_types))
|
||||
#for x: int in enemy_types:
|
||||
#var choice: Enemy = enemy_choices.pick_random()
|
||||
#enemy_choices.erase(choice)
|
||||
#if floori(float(sp_allotment) / float(choice.spawn_power)) > 0:
|
||||
#wave[Data.enemies.find(choice)] = floori(float(sp_allotment) / float(choice.spawn_power))
|
||||
##sp_used += wave[Data.enemies.find(choice)] * choice.spawn_power
|
||||
##print("Generated wave with spawn power: " + str(sp_used) + "/" + str(spawn_power))
|
||||
#return wave
|
||||
|
||||
|
||||
#func generate_wave(spawn_power: int, spawn_pool: Array[Enemy], spawners: Array[EnemySpawner]) -> Wave:
|
||||
#var wave: Wave = Wave.new()
|
||||
#var new_card: EnemyCard = EnemyCard.new()
|
||||
#new_card.enemy = Data.enemies[6]
|
||||
#new_card.rarity = Data.Rarity.COMMON
|
||||
#wave.enemy_groups.append(new_card)
|
||||
#spawners[1].add_card(new_card)
|
||||
#return wave
|
||||
|
||||
|
||||
func generate_wave(spawn_power: int, spawn_pool: Array[Enemy], spawners: Array[EnemySpawner]) -> Wave:
|
||||
var wave: Wave = Wave.new()
|
||||
|
||||
var points: int = spawn_power / 10.0
|
||||
#print("Generating wave with " + str(points) + " points to spend")
|
||||
while points > 0:
|
||||
var new_card: EnemyCard = EnemyCard.new()
|
||||
|
||||
#First, choose an enemy at random
|
||||
new_card.enemy = Data.enemies.pick_random()
|
||||
|
||||
#Next, we have to figure out if we can actually buy that enemy
|
||||
#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
|
||||
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
|
||||
enemy_chosen = true
|
||||
else:
|
||||
#Even the common rarity was too expensive, so we have to choose
|
||||
#a different enemy and try this process again
|
||||
var enemy_id: int = Data.enemies.find(new_card.enemy)
|
||||
if enemy_id <= 0:
|
||||
new_card.enemy = Data.enemies[Data.enemies.size() - 1]
|
||||
else:
|
||||
new_card.enemy = Data.enemies[enemy_id - 1]
|
||||
|
||||
#Now that we know which rarities we could afford, lets just choose a
|
||||
#random one
|
||||
var chosen_rarity: int = randi_range(0, highest_rarity)
|
||||
new_card.rarity = chosen_rarity
|
||||
|
||||
#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
|
||||
|
||||
var ground_spawners: Array[EnemySpawner] = []
|
||||
var air_spawners: Array[EnemySpawner] = []
|
||||
for spawner: EnemySpawner in spawners:
|
||||
if spawner.type == Data.EnemyType.LAND:
|
||||
ground_spawners.append(spawner)
|
||||
else:
|
||||
air_spawners.append(spawner)
|
||||
for card: EnemyCard in wave.enemy_groups:
|
||||
if card.enemy.target_type == Data.EnemyType.LAND:
|
||||
#TODO: make this use determinisic noise rng
|
||||
ground_spawners.pick_random().add_card(card)
|
||||
else:
|
||||
air_spawners.pick_random().add_card(card)
|
||||
return wave
|
||||
|
Reference in New Issue
Block a user