PlayerData and EnemyData reworked for WeaponData
This commit is contained in:
@@ -35,8 +35,8 @@ func _set_enemy_data(data: EnemyData) -> void:
|
|||||||
positions.remove_at(0)
|
positions.remove_at(0)
|
||||||
|
|
||||||
for i in range(min(enemy_data.weapon_count, positions.size())):
|
for i in range(min(enemy_data.weapon_count, positions.size())):
|
||||||
var weapon := _create_weapon(enemy_data.weapon_id)
|
var weapon : AbstractWeapon = enemy_data.weapon.scene.instantiate()
|
||||||
_add_weapon(weapon, positions[i])
|
_add_weapon(weapon, weapon_positions[i])
|
||||||
|
|
||||||
|
|
||||||
func _create_weapon(weapon_id : String) -> AbstractWeapon:
|
func _create_weapon(weapon_id : String) -> AbstractWeapon:
|
||||||
|
|||||||
@@ -67,21 +67,15 @@ func _set_player_data(new_data: PlayerData) -> void:
|
|||||||
|
|
||||||
player_data = new_data
|
player_data = new_data
|
||||||
_weapons.clear()
|
_weapons.clear()
|
||||||
for i in range(min(player_data.weapon_ids.size(), weapon_positions.size())):
|
for i in range(min(player_data.weapons.size(), weapon_positions.size())):
|
||||||
_add_weapon_by_id(player_data.weapon_ids[i], weapon_positions[i])
|
var weapon_scene := player_data.weapons[i].scene
|
||||||
|
var weapon : AbstractWeapon = weapon_scene.instantiate()
|
||||||
|
_add_weapon(weapon, weapon_positions[i])
|
||||||
|
|
||||||
if player_data.hull > 0:
|
if player_data.hull > 0:
|
||||||
health.hull = min(player_data.hull, health.max_hull)
|
health.hull = min(player_data.hull, health.max_hull)
|
||||||
|
|
||||||
|
|
||||||
func _add_weapon_by_id(weapon_id: String, weapon_position: Vector2) -> void:
|
|
||||||
if weapon_id.is_empty() or not weapon_id in WEAPON_SCENES: return
|
|
||||||
|
|
||||||
var weapon_scene : PackedScene = load(WEAPON_SCENES[weapon_id])
|
|
||||||
var weapon : AbstractWeapon = weapon_scene.instantiate()
|
|
||||||
_add_weapon(weapon, weapon_position)
|
|
||||||
|
|
||||||
|
|
||||||
func _on_hull_updated(value: int, max_value: int) -> void:
|
func _on_hull_updated(value: int, max_value: int) -> void:
|
||||||
super._on_hull_updated(value, max_value)
|
super._on_hull_updated(value, max_value)
|
||||||
|
|
||||||
|
|||||||
@@ -7,5 +7,6 @@
|
|||||||
script = ExtResource("1_c34y3")
|
script = ExtResource("1_c34y3")
|
||||||
id = "cannon"
|
id = "cannon"
|
||||||
name = "Cannon"
|
name = "Cannon"
|
||||||
|
group = "explosion"
|
||||||
scene = ExtResource("3_2dgua")
|
scene = ExtResource("3_2dgua")
|
||||||
metadata/_custom_type_script = "uid://870r1efinhqd"
|
metadata/_custom_type_script = "uid://870r1efinhqd"
|
||||||
|
|||||||
@@ -7,5 +7,6 @@
|
|||||||
script = ExtResource("1_bt4k8")
|
script = ExtResource("1_bt4k8")
|
||||||
id = "gatling"
|
id = "gatling"
|
||||||
name = "Gatling"
|
name = "Gatling"
|
||||||
|
group = "kinetic"
|
||||||
scene = ExtResource("3_2rwg6")
|
scene = ExtResource("3_2rwg6")
|
||||||
metadata/_custom_type_script = "uid://870r1efinhqd"
|
metadata/_custom_type_script = "uid://870r1efinhqd"
|
||||||
|
|||||||
@@ -7,5 +7,6 @@
|
|||||||
script = ExtResource("1_ipxhy")
|
script = ExtResource("1_ipxhy")
|
||||||
id = "laser"
|
id = "laser"
|
||||||
name = "Laser"
|
name = "Laser"
|
||||||
|
group = "energy"
|
||||||
scene = ExtResource("1_aey1r")
|
scene = ExtResource("1_aey1r")
|
||||||
metadata/_custom_type_script = "uid://870r1efinhqd"
|
metadata/_custom_type_script = "uid://870r1efinhqd"
|
||||||
|
|||||||
@@ -7,5 +7,6 @@
|
|||||||
script = ExtResource("1_tcis2")
|
script = ExtResource("1_tcis2")
|
||||||
id = "launcher"
|
id = "launcher"
|
||||||
name = "launcher"
|
name = "launcher"
|
||||||
|
group = "explosion"
|
||||||
scene = ExtResource("1_3oqtq")
|
scene = ExtResource("1_3oqtq")
|
||||||
metadata/_custom_type_script = "uid://870r1efinhqd"
|
metadata/_custom_type_script = "uid://870r1efinhqd"
|
||||||
|
|||||||
@@ -7,5 +7,6 @@
|
|||||||
script = ExtResource("1_152qt")
|
script = ExtResource("1_152qt")
|
||||||
id = "minelayer"
|
id = "minelayer"
|
||||||
name = "Minelayer"
|
name = "Minelayer"
|
||||||
|
group = "explosion"
|
||||||
scene = ExtResource("1_fh5qv")
|
scene = ExtResource("1_fh5qv")
|
||||||
metadata/_custom_type_script = "uid://870r1efinhqd"
|
metadata/_custom_type_script = "uid://870r1efinhqd"
|
||||||
|
|||||||
@@ -7,5 +7,6 @@
|
|||||||
script = ExtResource("1_3fasx")
|
script = ExtResource("1_3fasx")
|
||||||
id = "plasma"
|
id = "plasma"
|
||||||
name = "Plasma"
|
name = "Plasma"
|
||||||
|
group = "energy"
|
||||||
scene = ExtResource("1_rcvob")
|
scene = ExtResource("1_rcvob")
|
||||||
metadata/_custom_type_script = "uid://870r1efinhqd"
|
metadata/_custom_type_script = "uid://870r1efinhqd"
|
||||||
|
|||||||
@@ -7,5 +7,6 @@
|
|||||||
script = ExtResource("1_6lcn5")
|
script = ExtResource("1_6lcn5")
|
||||||
id = "railgun"
|
id = "railgun"
|
||||||
name = "Railgun"
|
name = "Railgun"
|
||||||
|
group = "kinetic"
|
||||||
scene = ExtResource("1_cbt0i")
|
scene = ExtResource("1_cbt0i")
|
||||||
metadata/_custom_type_script = "uid://870r1efinhqd"
|
metadata/_custom_type_script = "uid://870r1efinhqd"
|
||||||
|
|||||||
@@ -7,5 +7,6 @@
|
|||||||
script = ExtResource("1_xds2o")
|
script = ExtResource("1_xds2o")
|
||||||
id = "shrapnel"
|
id = "shrapnel"
|
||||||
name = "Shrapnel"
|
name = "Shrapnel"
|
||||||
|
group = "kinetic"
|
||||||
scene = ExtResource("1_8lpql")
|
scene = ExtResource("1_8lpql")
|
||||||
metadata/_custom_type_script = "uid://870r1efinhqd"
|
metadata/_custom_type_script = "uid://870r1efinhqd"
|
||||||
|
|||||||
@@ -7,5 +7,6 @@
|
|||||||
script = ExtResource("1_a16gw")
|
script = ExtResource("1_a16gw")
|
||||||
id = "tesla"
|
id = "tesla"
|
||||||
name = "Tesla"
|
name = "Tesla"
|
||||||
|
group = "energy"
|
||||||
scene = ExtResource("1_uxb6m")
|
scene = ExtResource("1_uxb6m")
|
||||||
metadata/_custom_type_script = "uid://870r1efinhqd"
|
metadata/_custom_type_script = "uid://870r1efinhqd"
|
||||||
|
|||||||
+2
-2
@@ -50,8 +50,8 @@ func start_game(game_data: GameData) -> void:
|
|||||||
|
|
||||||
|
|
||||||
func _initialize_new_game() -> void:
|
func _initialize_new_game() -> void:
|
||||||
for i in range(data.player_start_weapon_ids.size()):
|
for i in range(data.player_start_weapons.size()):
|
||||||
SaveManager.player_data.weapon_ids.append(data.player_start_weapon_ids[i])
|
SaveManager.player_data.weapons.append(data.player_start_weapons[i])
|
||||||
SaveManager.player_data.is_new_game = false
|
SaveManager.player_data.is_new_game = false
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,6 @@ extends Resource
|
|||||||
|
|
||||||
@export var enemy_scene: String
|
@export var enemy_scene: String
|
||||||
|
|
||||||
@export var weapon_id: String
|
@export var weapon: WeaponData
|
||||||
|
|
||||||
@export var weapon_count: int
|
@export var weapon_count: int
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ class_name PlayerData
|
|||||||
extends Resource
|
extends Resource
|
||||||
|
|
||||||
|
|
||||||
@export var weapon_ids: Array[String]
|
@export var weapons: Array[WeaponData]
|
||||||
|
|
||||||
@export var hull: int
|
@export var hull: int
|
||||||
|
|
||||||
@@ -11,6 +11,6 @@ var is_new_game: bool = false
|
|||||||
|
|
||||||
|
|
||||||
func reset() -> void:
|
func reset() -> void:
|
||||||
weapon_ids.clear()
|
weapons.clear()
|
||||||
hull = 0
|
hull = 0
|
||||||
is_new_game = true
|
is_new_game = true
|
||||||
|
|||||||
@@ -4,5 +4,6 @@ extends Resource
|
|||||||
|
|
||||||
@export var id: String
|
@export var id: String
|
||||||
@export var name: String
|
@export var name: String
|
||||||
|
@export var group: String
|
||||||
|
|
||||||
@export var scene: PackedScene
|
@export var scene: PackedScene
|
||||||
|
|||||||
@@ -6,4 +6,4 @@ extends Resource
|
|||||||
|
|
||||||
@export var seed_value : int = 0
|
@export var seed_value : int = 0
|
||||||
|
|
||||||
@export var player_start_weapon_ids: Array[String]
|
@export var player_start_weapons: Array[WeaponData]
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ var enemy_seed_rng : RandomNumberGenerator = RandomNumberGenerator.new()
|
|||||||
var enemy_delay_rng : RandomNumberGenerator = RandomNumberGenerator.new()
|
var enemy_delay_rng : RandomNumberGenerator = RandomNumberGenerator.new()
|
||||||
var enemy_weapon_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
|
@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_delay_rng.seed = local_seed_rng.randi()
|
||||||
enemy_weapon_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()
|
var data : PassageData = PassageData.new()
|
||||||
data.seed_value = seed_value
|
data.seed_value = seed_value
|
||||||
@@ -46,8 +46,8 @@ func generate(seed_value: int) -> PassageData:
|
|||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
func _get_weapon_ids() -> Array[String]:
|
func _get_weapons() -> Array[WeaponData]:
|
||||||
var array : Array[String] = AbstractShip.WEAPON_SCENES.keys().duplicate()
|
var array : Array[WeaponData] = SaveManager.WEAPONS.duplicate()
|
||||||
|
|
||||||
for i in range(array.size() - 1, 0, -1):
|
for i in range(array.size() - 1, 0, -1):
|
||||||
var j := weapon_ids_rng.randi_range(0, i)
|
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)
|
var enemy := enemy_generator.generate(seed_value)
|
||||||
|
|
||||||
enemy.spawn_time = time
|
enemy.spawn_time = time
|
||||||
enemy.weapon_id = _get_weapon_id()
|
enemy.weapon = _get_weapon()
|
||||||
|
|
||||||
data.enemies.append(enemy)
|
data.enemies.append(enemy)
|
||||||
|
|
||||||
@@ -85,13 +85,13 @@ func _fill_enemies(data: PassageData) -> void:
|
|||||||
data.enemies.sort_custom(enemy_spawn_time_compare)
|
data.enemies.sort_custom(enemy_spawn_time_compare)
|
||||||
|
|
||||||
|
|
||||||
func _get_weapon_id() -> String:
|
func _get_weapon() -> WeaponData:
|
||||||
var index := 0
|
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:
|
if enemy_weapon_rng.randi_range(1, 100) <= USE_NEXT_WEAPON_CHANCE:
|
||||||
index += 1
|
index += 1
|
||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
|
|
||||||
return weapon_ids[index]
|
return weapons[index]
|
||||||
|
|||||||
@@ -4,12 +4,6 @@ extends Node
|
|||||||
|
|
||||||
const AREA_COUNT = 3
|
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 local_seed_rng : RandomNumberGenerator = RandomNumberGenerator.new()
|
||||||
var area_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:
|
func _fill_weapons(data : WorldData) -> void:
|
||||||
for i in range(WEAPON_GROUPS.size()):
|
var weapon_by_group : Dictionary[String, Array] = {}
|
||||||
var group := WEAPON_GROUPS[i]
|
|
||||||
if group.size() == 0: continue
|
|
||||||
|
|
||||||
var index := weapon_rng.randi_range(1, group.size()) - 1
|
for weapon in SaveManager.WEAPONS:
|
||||||
data.player_start_weapon_ids.append(group[index])
|
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, array.size()) - 1
|
||||||
|
data.player_start_weapons.append(array[index])
|
||||||
|
|||||||
@@ -1,6 +1,18 @@
|
|||||||
extends Node
|
extends Node
|
||||||
|
|
||||||
|
|
||||||
|
const WEAPONS : Array[WeaponData] = [
|
||||||
|
preload("res://game/entities/weapons/cannon/cannon_data.tres"),
|
||||||
|
preload("res://game/entities/weapons/gatling/gatling_data.tres"),
|
||||||
|
preload("res://game/entities/weapons/laser/laser_data.tres"),
|
||||||
|
preload("res://game/entities/weapons/launcher/launcher_data.tres"),
|
||||||
|
preload("res://game/entities/weapons/minelayer/minelayer_data.tres"),
|
||||||
|
preload("res://game/entities/weapons/plasma/plasma_data.tres"),
|
||||||
|
preload("res://game/entities/weapons/railgun/railgun_data.tres"),
|
||||||
|
preload("res://game/entities/weapons/shrapnel/shrapnel_data.tres"),
|
||||||
|
preload("res://game/entities/weapons/tesla/tesla_data.tres"),
|
||||||
|
]
|
||||||
|
|
||||||
const SAVE_FILE = "user://save.bin"
|
const SAVE_FILE = "user://save.bin"
|
||||||
const SAVE_FILE_PASS = "save_file_data"
|
const SAVE_FILE_PASS = "save_file_data"
|
||||||
|
|
||||||
@@ -29,6 +41,14 @@ func _ready() -> void:
|
|||||||
_load()
|
_load()
|
||||||
|
|
||||||
|
|
||||||
|
static func get_weapon_data(weapon_id: String) -> WeaponData:
|
||||||
|
for weapon in WEAPONS:
|
||||||
|
if weapon.id == weapon_id:
|
||||||
|
return weapon
|
||||||
|
|
||||||
|
return null
|
||||||
|
|
||||||
|
|
||||||
func save() -> void:
|
func save() -> void:
|
||||||
_set_game_values()
|
_set_game_values()
|
||||||
_set_player_values()
|
_set_player_values()
|
||||||
@@ -67,29 +87,39 @@ func _set_game_values() -> void:
|
|||||||
|
|
||||||
|
|
||||||
func _set_player_values() -> void:
|
func _set_player_values() -> void:
|
||||||
_save_file.set_value(CATEGORY_PLAYER, PLAYER_WEAPONS, player_data.weapon_ids)
|
var weapon_ids : Array[String] = []
|
||||||
|
for weapon in player_data.weapons:
|
||||||
|
weapon_ids.append(weapon.id)
|
||||||
|
|
||||||
|
|
||||||
|
_save_file.set_value(CATEGORY_PLAYER, PLAYER_WEAPONS, weapon_ids)
|
||||||
_save_file.set_value(CATEGORY_PLAYER, PLAYER_HULL, player_data.hull)
|
_save_file.set_value(CATEGORY_PLAYER, PLAYER_HULL, player_data.hull)
|
||||||
|
|
||||||
|
|
||||||
func _get_game_values() -> void:
|
func _get_game_values() -> void:
|
||||||
game_data.game_seed = _save_file.get_value(
|
game_data.game_seed = _save_file.get_value(
|
||||||
CATEGORY_GAME, GAME_SEED, game_data.game_seed
|
CATEGORY_GAME, GAME_SEED, game_data.game_seed
|
||||||
)
|
)
|
||||||
game_data.current_area_index = _save_file.get_value(
|
game_data.current_area_index = _save_file.get_value(
|
||||||
CATEGORY_GAME, GAME_AREA_INDEX, game_data.current_area_index
|
CATEGORY_GAME, GAME_AREA_INDEX, game_data.current_area_index
|
||||||
)
|
)
|
||||||
game_data.current_stage_index = _save_file.get_value(
|
game_data.current_stage_index = _save_file.get_value(
|
||||||
CATEGORY_GAME, GAME_STAGE_INDEX, game_data.current_stage_index
|
CATEGORY_GAME, GAME_STAGE_INDEX, game_data.current_stage_index
|
||||||
)
|
)
|
||||||
game_data.current_sector_index = _save_file.get_value(
|
game_data.current_sector_index = _save_file.get_value(
|
||||||
CATEGORY_GAME, GAME_SECTOR_INDEX, game_data.current_sector_index
|
CATEGORY_GAME, GAME_SECTOR_INDEX, game_data.current_sector_index
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
func _get_player_values() -> void:
|
func _get_player_values() -> void:
|
||||||
player_data.weapon_ids = _save_file.get_value(
|
var weapon_ids : Array[String] = _save_file.get_value(
|
||||||
CATEGORY_PLAYER, PLAYER_WEAPONS, player_data.weapon_ids
|
CATEGORY_PLAYER, PLAYER_WEAPONS, []
|
||||||
)
|
)
|
||||||
player_data.hull = _save_file.get_value(
|
for weapon_id in weapon_ids:
|
||||||
|
var weapon := get_weapon_data(weapon_id)
|
||||||
|
if weapon != null:
|
||||||
|
player_data.weapons.append(weapon)
|
||||||
|
|
||||||
|
player_data.hull = _save_file.get_value(
|
||||||
CATEGORY_PLAYER, PLAYER_HULL, player_data.hull
|
CATEGORY_PLAYER, PLAYER_HULL, player_data.hull
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user