Added player weapon generation from seed
This commit is contained in:
@@ -67,11 +67,11 @@ func _set_player_data(new_data: PlayerData) -> void:
|
||||
|
||||
player_data = new_data
|
||||
_weapons.clear()
|
||||
_add_weapon_by_id(player_data.first_weapon_id, weapon_positions[0])
|
||||
_add_weapon_by_id(player_data.second_weapon_id, weapon_positions[1])
|
||||
for i in range(min(player_data.weapon_ids.size(), weapon_positions.size())):
|
||||
_add_weapon_by_id(player_data.weapon_ids[i], weapon_positions[i])
|
||||
|
||||
if player_data.hull > 0:
|
||||
health.hull = mini(player_data.hull, health.max_hull)
|
||||
if player_data.is_new_game:
|
||||
health.hull = health.max_hull
|
||||
|
||||
|
||||
func _add_weapon_by_id(weapon_id: String, weapon_position: Vector2) -> void:
|
||||
|
||||
@@ -93,10 +93,10 @@ offset_top = 19.0
|
||||
offset_bottom = 19.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"]
|
||||
position = Vector2(-2, -8)
|
||||
position = Vector2(-2, 8)
|
||||
|
||||
[node name="BlinkChargeIndicator" parent="." index="10" instance=ExtResource("5_uf2n1")]
|
||||
position = Vector2(-11, 0)
|
||||
|
||||
@@ -35,14 +35,23 @@ func _input(event: InputEvent) -> void:
|
||||
|
||||
|
||||
func start_game(game_data: GameData) -> void:
|
||||
|
||||
if not _fill_data(game_data):
|
||||
print("Can't process game data")
|
||||
_show_main_menu()
|
||||
return
|
||||
|
||||
if SaveManager.player_data.is_new_game:
|
||||
_initialize_new_game()
|
||||
|
||||
_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:
|
||||
data = world_generator.generate(game_data.game_seed.hash())
|
||||
|
||||
|
||||
@@ -2,7 +2,15 @@ class_name PlayerData
|
||||
extends Resource
|
||||
|
||||
|
||||
@export var first_weapon_id: String
|
||||
@export var second_weapon_id: String
|
||||
@export var weapon_ids: Array[String]
|
||||
|
||||
@export var hull: int
|
||||
|
||||
|
||||
var is_new_game: bool = false
|
||||
|
||||
|
||||
func reset() -> void:
|
||||
weapon_ids.clear()
|
||||
hull = 0
|
||||
is_new_game = true
|
||||
|
||||
@@ -5,3 +5,5 @@ extends Resource
|
||||
@export var areas : Array[AreaData] = []
|
||||
|
||||
@export var seed_value : int = 0
|
||||
|
||||
@export var player_start_weapon_ids: Array[String]
|
||||
|
||||
@@ -4,9 +4,16 @@ 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()
|
||||
var weapon_rng : RandomNumberGenerator = RandomNumberGenerator.new()
|
||||
|
||||
|
||||
@onready var area_generator : AreaGenerator = $AreaGenerator
|
||||
@@ -15,11 +22,13 @@ var area_seed_rng : RandomNumberGenerator = RandomNumberGenerator.new()
|
||||
func generate(seed_value: int) -> WorldData:
|
||||
local_seed_rng.seed = seed_value
|
||||
area_seed_rng.seed = local_seed_rng.randi()
|
||||
weapon_rng.seed = local_seed_rng.randi()
|
||||
|
||||
var data : WorldData = WorldData.new()
|
||||
data.seed_value = seed_value
|
||||
|
||||
_fill_areas(data)
|
||||
_fill_weapons(data)
|
||||
|
||||
return data
|
||||
|
||||
@@ -29,3 +38,12 @@ func _fill_areas(data : WorldData) -> void:
|
||||
var seed_value := area_seed_rng.randi()
|
||||
var area := area_generator.generate(seed_value)
|
||||
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])
|
||||
|
||||
Reference in New Issue
Block a user