PlayerData and EnemyData reworked for WeaponData

This commit is contained in:
2025-12-17 22:02:54 +03:00
parent 36e6a9bb10
commit d55047239a
19 changed files with 80 additions and 45 deletions
+1 -1
View File
@@ -9,6 +9,6 @@ extends Resource
@export var enemy_scene: String
@export var weapon_id: String
@export var weapon: WeaponData
@export var weapon_count: int
+2 -2
View File
@@ -2,7 +2,7 @@ class_name PlayerData
extends Resource
@export var weapon_ids: Array[String]
@export var weapons: Array[WeaponData]
@export var hull: int
@@ -11,6 +11,6 @@ var is_new_game: bool = false
func reset() -> void:
weapon_ids.clear()
weapons.clear()
hull = 0
is_new_game = true
+1
View File
@@ -4,5 +4,6 @@ extends Resource
@export var id: String
@export var name: String
@export var group: String
@export var scene: PackedScene
+1 -1
View File
@@ -6,4 +6,4 @@ extends Resource
@export var seed_value : int = 0
@export var player_start_weapon_ids: Array[String]
@export var player_start_weapons: Array[WeaponData]
+8 -8
View File
@@ -21,7 +21,7 @@ var enemy_seed_rng : RandomNumberGenerator = RandomNumberGenerator.new()
var enemy_delay_rng : RandomNumberGenerator = RandomNumberGenerator.new()
var enemy_weapon_rng : RandomNumberGenerator = RandomNumberGenerator.new()
var weapon_ids : Array[String]
var weapons : Array[WeaponData]
@onready var enemy_generator : EnemyGenerator = $EnemyGenerator
@@ -35,7 +35,7 @@ func generate(seed_value: int) -> PassageData:
enemy_delay_rng.seed = local_seed_rng.randi()
enemy_weapon_rng.seed = local_seed_rng.randi()
weapon_ids = _get_weapon_ids()
weapons = _get_weapons()
var data : PassageData = PassageData.new()
data.seed_value = seed_value
@@ -46,8 +46,8 @@ func generate(seed_value: int) -> PassageData:
return data
func _get_weapon_ids() -> Array[String]:
var array : Array[String] = AbstractShip.WEAPON_SCENES.keys().duplicate()
func _get_weapons() -> Array[WeaponData]:
var array : Array[WeaponData] = SaveManager.WEAPONS.duplicate()
for i in range(array.size() - 1, 0, -1):
var j := weapon_ids_rng.randi_range(0, i)
@@ -76,7 +76,7 @@ func _fill_enemies(data: PassageData) -> void:
var enemy := enemy_generator.generate(seed_value)
enemy.spawn_time = time
enemy.weapon_id = _get_weapon_id()
enemy.weapon = _get_weapon()
data.enemies.append(enemy)
@@ -85,13 +85,13 @@ func _fill_enemies(data: PassageData) -> void:
data.enemies.sort_custom(enemy_spawn_time_compare)
func _get_weapon_id() -> String:
func _get_weapon() -> WeaponData:
var index := 0
while index < weapon_ids.size() - 1:
while index < weapons.size() - 1:
if enemy_weapon_rng.randi_range(1, 100) <= USE_NEXT_WEAPON_CHANCE:
index += 1
else:
break
return weapon_ids[index]
return weapons[index]
+12 -11
View File
@@ -4,12 +4,6 @@ extends Node
const AREA_COUNT = 3
const WEAPON_GROUPS : Array[Array] = [
[ "gatling", "railgun", "shrapnel", ],
[ "laser", "plasma", "tesla", ],
[ "minelayer", "launcher", "cannon", ],
]
var local_seed_rng : RandomNumberGenerator = RandomNumberGenerator.new()
var area_seed_rng : RandomNumberGenerator = RandomNumberGenerator.new()
@@ -41,9 +35,16 @@ func _fill_areas(data : WorldData) -> void:
func _fill_weapons(data : WorldData) -> void:
for i in range(WEAPON_GROUPS.size()):
var group := WEAPON_GROUPS[i]
if group.size() == 0: continue
var weapon_by_group : Dictionary[String, Array] = {}
for weapon in SaveManager.WEAPONS:
if not weapon.group in weapon_by_group:
weapon_by_group[weapon.group] = [] as Array[WeaponData]
weapon_by_group[weapon.group].append(weapon)
for group in weapon_by_group:
var array : Array[WeaponData] = weapon_by_group[group]
if array.size() == 0: continue
var index := weapon_rng.randi_range(1, group.size()) - 1
data.player_start_weapon_ids.append(group[index])
var index := weapon_rng.randi_range(1, array.size()) - 1
data.player_start_weapons.append(array[index])