Added player weapon generation from seed

This commit is contained in:
2025-12-14 17:10:29 +03:00
parent abb680ed53
commit ccf5d4c93b
8 changed files with 50 additions and 20 deletions
+4 -4
View File
@@ -67,11 +67,11 @@ func _set_player_data(new_data: PlayerData) -> void:
player_data = new_data player_data = new_data
_weapons.clear() _weapons.clear()
_add_weapon_by_id(player_data.first_weapon_id, weapon_positions[0]) for i in range(min(player_data.weapon_ids.size(), weapon_positions.size())):
_add_weapon_by_id(player_data.second_weapon_id, weapon_positions[1]) _add_weapon_by_id(player_data.weapon_ids[i], weapon_positions[i])
if player_data.hull > 0: if player_data.is_new_game:
health.hull = mini(player_data.hull, health.max_hull) health.hull = health.max_hull
func _add_weapon_by_id(weapon_id: String, weapon_position: Vector2) -> void: func _add_weapon_by_id(weapon_id: String, weapon_position: Vector2) -> void:
+2 -2
View File
@@ -93,10 +93,10 @@ offset_top = 19.0
offset_bottom = 19.0 offset_bottom = 19.0
[node name="First" type="Node2D" parent="WeaponSlots" index="0"] [node name="First" type="Node2D" parent="WeaponSlots" index="0"]
position = Vector2(-2, 8) position = Vector2(-2, -8)
[node name="Second" type="Node2D" parent="WeaponSlots" index="1"] [node name="Second" type="Node2D" parent="WeaponSlots" index="1"]
position = Vector2(-2, -8) position = Vector2(-2, 8)
[node name="BlinkChargeIndicator" parent="." index="10" instance=ExtResource("5_uf2n1")] [node name="BlinkChargeIndicator" parent="." index="10" instance=ExtResource("5_uf2n1")]
position = Vector2(-11, 0) position = Vector2(-11, 0)
+9
View File
@@ -35,14 +35,23 @@ func _input(event: InputEvent) -> void:
func start_game(game_data: GameData) -> void: func start_game(game_data: GameData) -> void:
if not _fill_data(game_data): if not _fill_data(game_data):
print("Can't process game data") print("Can't process game data")
_show_main_menu() _show_main_menu()
return return
if SaveManager.player_data.is_new_game:
_initialize_new_game()
_create_game_map() _create_game_map()
func _initialize_new_game() -> void:
for i in range(data.player_start_weapon_ids.size()):
SaveManager.player_data.weapon_ids.append(data.player_start_weapon_ids[i])
func _fill_data(game_data: GameData) -> bool: func _fill_data(game_data: GameData) -> bool:
data = world_generator.generate(game_data.game_seed.hash()) data = world_generator.generate(game_data.game_seed.hash())
+10 -2
View File
@@ -2,7 +2,15 @@ class_name PlayerData
extends Resource extends Resource
@export var first_weapon_id: String @export var weapon_ids: Array[String]
@export var second_weapon_id: String
@export var hull: int @export var hull: int
var is_new_game: bool = false
func reset() -> void:
weapon_ids.clear()
hull = 0
is_new_game = true
+2
View File
@@ -5,3 +5,5 @@ extends Resource
@export var areas : Array[AreaData] = [] @export var areas : Array[AreaData] = []
@export var seed_value : int = 0 @export var seed_value : int = 0
@export var player_start_weapon_ids: Array[String]
+18
View File
@@ -4,9 +4,16 @@ 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()
var weapon_rng : RandomNumberGenerator = RandomNumberGenerator.new()
@onready var area_generator : AreaGenerator = $AreaGenerator @onready var area_generator : AreaGenerator = $AreaGenerator
@@ -15,11 +22,13 @@ var area_seed_rng : RandomNumberGenerator = RandomNumberGenerator.new()
func generate(seed_value: int) -> WorldData: func generate(seed_value: int) -> WorldData:
local_seed_rng.seed = seed_value local_seed_rng.seed = seed_value
area_seed_rng.seed = local_seed_rng.randi() area_seed_rng.seed = local_seed_rng.randi()
weapon_rng.seed = local_seed_rng.randi()
var data : WorldData = WorldData.new() var data : WorldData = WorldData.new()
data.seed_value = seed_value data.seed_value = seed_value
_fill_areas(data) _fill_areas(data)
_fill_weapons(data)
return data return data
@@ -29,3 +38,12 @@ func _fill_areas(data : WorldData) -> void:
var seed_value := area_seed_rng.randi() var seed_value := area_seed_rng.randi()
var area := area_generator.generate(seed_value) var area := area_generator.generate(seed_value)
data.areas.append(area) data.areas.append(area)
func _fill_weapons(data : WorldData) -> void:
for i in range(WEAPON_GROUPS.size()):
var group := WEAPON_GROUPS[i]
if group.size() == 0: continue
var index := weapon_rng.randi_range(1, group.size()) - 1
data.player_start_weapon_ids.append(group[index])
+4 -9
View File
@@ -11,8 +11,7 @@ const GAME_STAGE_INDEX = "current_stage_index"
const GAME_SECTOR_INDEX = "current_sector_index" const GAME_SECTOR_INDEX = "current_sector_index"
const CATEGORY_PLAYER = "player" const CATEGORY_PLAYER = "player"
const PLAYER_FIRST_WEAPON = "first_weapon_id" const PLAYER_WEAPONS = "weapon_ids"
const PLAYER_SECOND_WEAPON = "second_weapon_id"
const PLAYER_HULL = "hull" const PLAYER_HULL = "hull"
@@ -66,8 +65,7 @@ func _set_game_values() -> void:
func _set_player_values() -> void: func _set_player_values() -> void:
_save_file.set_value(CATEGORY_PLAYER, PLAYER_FIRST_WEAPON, player_data.first_weapon_id) _save_file.set_value(CATEGORY_PLAYER, PLAYER_WEAPONS, player_data.weapon_ids)
_save_file.set_value(CATEGORY_PLAYER, PLAYER_SECOND_WEAPON, player_data.second_weapon_id)
_save_file.set_value(CATEGORY_PLAYER, PLAYER_HULL, player_data.hull) _save_file.set_value(CATEGORY_PLAYER, PLAYER_HULL, player_data.hull)
@@ -87,11 +85,8 @@ func _get_game_values() -> void:
func _get_player_values() -> void: func _get_player_values() -> void:
player_data.first_weapon_id = _save_file.get_value( player_data.weapon_ids = _save_file.get_value(
CATEGORY_PLAYER, PLAYER_FIRST_WEAPON, player_data.first_weapon_id CATEGORY_PLAYER, PLAYER_WEAPONS, player_data.weapon_ids
)
player_data.second_weapon_id = _save_file.get_value(
CATEGORY_PLAYER, PLAYER_SECOND_WEAPON, player_data.second_weapon_id
) )
player_data.hull = _save_file.get_value( player_data.hull = _save_file.get_value(
CATEGORY_PLAYER, PLAYER_HULL, player_data.hull CATEGORY_PLAYER, PLAYER_HULL, player_data.hull
+1 -3
View File
@@ -27,9 +27,7 @@ func _on_main_menu_continue_game() -> void:
func _on_main_menu_new_game() -> void: func _on_main_menu_new_game() -> void:
SaveManager.new_game() SaveManager.new_game()
SaveManager.player_data.first_weapon_id = _get_random_weapon_id() SaveManager.player_data.reset()
SaveManager.player_data.second_weapon_id = _get_random_weapon_id()
SaveManager.player_data.hull = 0
get_tree().change_scene_to_file("res://game/game.tscn") get_tree().change_scene_to_file("res://game/game.tscn")