Added weapon selection
This commit is contained in:
@@ -6,7 +6,7 @@
|
|||||||
[resource]
|
[resource]
|
||||||
script = ExtResource("1_tcis2")
|
script = ExtResource("1_tcis2")
|
||||||
id = "launcher"
|
id = "launcher"
|
||||||
name = "launcher"
|
name = "Launcher"
|
||||||
group = "explosion"
|
group = "explosion"
|
||||||
scene = ExtResource("1_3oqtq")
|
scene = ExtResource("1_3oqtq")
|
||||||
metadata/_custom_type_script = "uid://870r1efinhqd"
|
metadata/_custom_type_script = "uid://870r1efinhqd"
|
||||||
|
|||||||
+26
-13
@@ -4,9 +4,10 @@ extends Node
|
|||||||
|
|
||||||
const PASSAGE = preload("res://game/passage.tscn")
|
const PASSAGE = preload("res://game/passage.tscn")
|
||||||
const AREA_MAP = preload("res://game/area_map/area_map.tscn")
|
const AREA_MAP = preload("res://game/area_map/area_map.tscn")
|
||||||
|
const WEAPON_SELECTION_SCREEN = preload("res://menu/ingame/weapon_selection_screen.tscn")
|
||||||
|
|
||||||
|
|
||||||
var data : WorldData
|
var world_data : WorldData
|
||||||
var current_area : AreaData
|
var current_area : AreaData
|
||||||
var current_stage : StageData
|
var current_stage : StageData
|
||||||
var current_sector : SectorData
|
var current_sector : SectorData
|
||||||
@@ -14,6 +15,7 @@ var current_passage : PassageData
|
|||||||
|
|
||||||
var _current_passage_scene : Passage
|
var _current_passage_scene : Passage
|
||||||
var _current_area_map_scene : AreaMap
|
var _current_area_map_scene : AreaMap
|
||||||
|
var weapon_selection_screen : WeaponSelectionScreen
|
||||||
|
|
||||||
|
|
||||||
@onready var pause_screen : Control = $PauseScreen
|
@onready var pause_screen : Control = $PauseScreen
|
||||||
@@ -44,26 +46,28 @@ func start_game(game_data: GameData) -> void:
|
|||||||
return
|
return
|
||||||
|
|
||||||
if SaveManager.player_data.is_new_game:
|
if SaveManager.player_data.is_new_game:
|
||||||
_initialize_new_game()
|
_show_weapon_selection_screen()
|
||||||
|
else:
|
||||||
_create_game_map()
|
_create_game_map()
|
||||||
|
|
||||||
|
|
||||||
func _initialize_new_game() -> void:
|
func _show_weapon_selection_screen() -> void:
|
||||||
for i in range(data.player_start_weapons.size()):
|
if weapon_selection_screen != null: weapon_selection_screen.queue_free()
|
||||||
SaveManager.player_data.weapons.append(data.player_start_weapons[i])
|
weapon_selection_screen = WEAPON_SELECTION_SCREEN.instantiate()
|
||||||
SaveManager.player_data.is_new_game = false
|
add_child(weapon_selection_screen)
|
||||||
|
weapon_selection_screen.world_data = world_data
|
||||||
|
weapon_selection_screen.weapon_selected.connect(_on_weapon_selected)
|
||||||
|
|
||||||
|
|
||||||
func _fill_data(game_data: GameData) -> bool:
|
func _fill_data(game_data: GameData) -> bool:
|
||||||
data = world_generator.generate(game_data.game_seed.hash())
|
world_data = world_generator.generate(game_data.game_seed.hash())
|
||||||
|
|
||||||
return _set_currents(game_data)
|
return _set_currents(game_data)
|
||||||
|
|
||||||
|
|
||||||
func _set_currents(game_data: GameData) -> bool:
|
func _set_currents(game_data: GameData) -> bool:
|
||||||
if game_data.current_area_index >= data.areas.size(): return false
|
if game_data.current_area_index >= world_data.areas.size(): return false
|
||||||
current_area = data.areas[game_data.current_area_index]
|
current_area = world_data.areas[game_data.current_area_index]
|
||||||
|
|
||||||
if game_data.current_stage_index >= current_area.stages.size(): return false
|
if game_data.current_stage_index >= current_area.stages.size(): return false
|
||||||
current_stage = current_area.stages[game_data.current_stage_index]
|
current_stage = current_area.stages[game_data.current_stage_index]
|
||||||
@@ -81,7 +85,7 @@ func _process_to_next_area() -> void:
|
|||||||
|
|
||||||
print(SaveManager.game_data.current_area_index)
|
print(SaveManager.game_data.current_area_index)
|
||||||
|
|
||||||
if SaveManager.game_data.current_area_index >= data.areas.size():
|
if SaveManager.game_data.current_area_index >= world_data.areas.size():
|
||||||
SaveManager.delete_game_data()
|
SaveManager.delete_game_data()
|
||||||
victory_screen.show()
|
victory_screen.show()
|
||||||
else:
|
else:
|
||||||
@@ -123,6 +127,15 @@ func _create_passage(passage_data: PassageData) -> void:
|
|||||||
_current_passage_scene.player_died.connect(_on_passage_player_died)
|
_current_passage_scene.player_died.connect(_on_passage_player_died)
|
||||||
|
|
||||||
|
|
||||||
|
func _on_weapon_selected(weapon_data: WeaponData) -> void:
|
||||||
|
if weapon_selection_screen != null: weapon_selection_screen.queue_free()
|
||||||
|
|
||||||
|
SaveManager.player_data.weapons.append(weapon_data)
|
||||||
|
SaveManager.player_data.is_new_game = false
|
||||||
|
SaveManager.save()
|
||||||
|
_create_game_map()
|
||||||
|
|
||||||
|
|
||||||
func _on_pause_screen_continue_game() -> void:
|
func _on_pause_screen_continue_game() -> void:
|
||||||
pause_screen.hide()
|
pause_screen.hide()
|
||||||
|
|
||||||
@@ -157,8 +170,8 @@ func _on_passage_completion() -> void:
|
|||||||
|
|
||||||
|
|
||||||
func _update_data_indexes() -> void:
|
func _update_data_indexes() -> void:
|
||||||
for area_index in range(data.areas.size()):
|
for area_index in range(world_data.areas.size()):
|
||||||
var area := data.areas[area_index]
|
var area := world_data.areas[area_index]
|
||||||
for stage_index in range(area.stages.size()):
|
for stage_index in range(area.stages.size()):
|
||||||
var stage := area.stages[stage_index]
|
var stage := area.stages[stage_index]
|
||||||
for sector_index in range(stage.sectors.size()):
|
for sector_index in range(stage.sectors.size()):
|
||||||
|
|||||||
@@ -35,16 +35,18 @@ func _fill_areas(data : WorldData) -> void:
|
|||||||
|
|
||||||
|
|
||||||
func _fill_weapons(data : WorldData) -> void:
|
func _fill_weapons(data : WorldData) -> void:
|
||||||
var weapon_by_group : Dictionary[String, Array] = {}
|
var weapons_by_group : Dictionary[String, Array] = {}
|
||||||
|
|
||||||
for weapon in SaveManager.WEAPONS:
|
for weapon in SaveManager.WEAPONS:
|
||||||
if not weapon.group in weapon_by_group:
|
if not weapon.group in weapons_by_group:
|
||||||
weapon_by_group[weapon.group] = [] as Array[WeaponData]
|
weapons_by_group[weapon.group] = [] as Array[WeaponData]
|
||||||
weapon_by_group[weapon.group].append(weapon)
|
weapons_by_group[weapon.group].append(weapon)
|
||||||
|
|
||||||
for group in weapon_by_group:
|
for group in weapons_by_group:
|
||||||
var array : Array[WeaponData] = weapon_by_group[group]
|
var array : Array[WeaponData] = weapons_by_group[group]
|
||||||
if array.size() == 0: continue
|
if array.size() == 0: continue
|
||||||
|
|
||||||
var index := weapon_rng.randi_range(1, array.size()) - 1
|
var index := weapon_rng.randi_range(1, array.size()) - 1
|
||||||
data.player_start_weapons.append(array[index])
|
data.player_start_weapons.append(array[index])
|
||||||
|
|
||||||
|
data.player_start_weapons.shuffle()
|
||||||
|
|||||||
@@ -0,0 +1,39 @@
|
|||||||
|
class_name WeaponSelectionScreen
|
||||||
|
extends Control
|
||||||
|
|
||||||
|
|
||||||
|
signal weapon_selected(weapon_data: WeaponData)
|
||||||
|
|
||||||
|
|
||||||
|
const WEAPON_SELECTOR = preload("res://menu/ingame/weapon_selector.tscn")
|
||||||
|
|
||||||
|
|
||||||
|
@export var world_data : WorldData:
|
||||||
|
set = _set_world_data
|
||||||
|
|
||||||
|
|
||||||
|
@onready var weapon_selectors : Control = $%WeaponSelectors
|
||||||
|
|
||||||
|
|
||||||
|
func _set_world_data(data: WorldData) -> void:
|
||||||
|
world_data = data
|
||||||
|
|
||||||
|
for child in weapon_selectors.get_children():
|
||||||
|
child.queue_free()
|
||||||
|
|
||||||
|
if world_data == null: return
|
||||||
|
|
||||||
|
var selectors : Array[WeaponSelector] = []
|
||||||
|
for weapon_data in world_data.player_start_weapons:
|
||||||
|
var selector : WeaponSelector = WEAPON_SELECTOR.instantiate()
|
||||||
|
weapon_selectors.add_child(selector)
|
||||||
|
selector.weapon_data = weapon_data
|
||||||
|
selectors.append(selector)
|
||||||
|
selector.weapon_selected.connect(_on_weapon_selected)
|
||||||
|
|
||||||
|
if selectors.size() > 0:
|
||||||
|
selectors[0].button.grab_focus()
|
||||||
|
|
||||||
|
|
||||||
|
func _on_weapon_selected(weapon_data: WeaponData) -> void:
|
||||||
|
weapon_selected.emit(weapon_data)
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://6isk1tmc2ik1
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
[gd_scene load_steps=2 format=3 uid="uid://cv122gw47cnun"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://6isk1tmc2ik1" path="res://menu/ingame/weapon_selection_screen.gd" id="1_hl2ql"]
|
||||||
|
|
||||||
|
[node name="WeaponSelectionScreen" type="Control"]
|
||||||
|
layout_mode = 3
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
script = ExtResource("1_hl2ql")
|
||||||
|
|
||||||
|
[node name="MarginContainer" type="MarginContainer" parent="."]
|
||||||
|
layout_mode = 0
|
||||||
|
offset_right = 640.0
|
||||||
|
offset_bottom = 360.0
|
||||||
|
theme_override_constants/margin_left = 16
|
||||||
|
theme_override_constants/margin_top = 16
|
||||||
|
theme_override_constants/margin_right = 16
|
||||||
|
theme_override_constants/margin_bottom = 16
|
||||||
|
|
||||||
|
[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
alignment = 1
|
||||||
|
|
||||||
|
[node name="Label" type="Label" parent="MarginContainer/VBoxContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
size_flags_horizontal = 4
|
||||||
|
size_flags_vertical = 0
|
||||||
|
text = "Select your first weapon"
|
||||||
|
|
||||||
|
[node name="WeaponSelectors" type="HBoxContainer" parent="MarginContainer/VBoxContainer"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 2
|
||||||
|
size_flags_horizontal = 4
|
||||||
|
size_flags_vertical = 4
|
||||||
|
alignment = 1
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
class_name WeaponSelector
|
||||||
|
extends Control
|
||||||
|
|
||||||
|
|
||||||
|
signal weapon_selected(weapon_data: WeaponData)
|
||||||
|
|
||||||
|
|
||||||
|
@export var weapon_data: WeaponData:
|
||||||
|
set = _set_weapon_data
|
||||||
|
|
||||||
|
|
||||||
|
@onready var name_label : Label = $%NameLabel
|
||||||
|
@onready var button : Button = $%Button
|
||||||
|
|
||||||
|
|
||||||
|
func _set_weapon_data(data: WeaponData) -> void:
|
||||||
|
weapon_data = data
|
||||||
|
|
||||||
|
if weapon_data == null: return
|
||||||
|
|
||||||
|
name_label.text = weapon_data.name
|
||||||
|
|
||||||
|
|
||||||
|
func _on_button_pressed() -> void:
|
||||||
|
weapon_selected.emit(weapon_data)
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://beiydi6w6gqqc
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
[gd_scene load_steps=3 format=3 uid="uid://1o3idp54lil2"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://beiydi6w6gqqc" path="res://menu/ingame/weapon_selector.gd" id="1_4acia"]
|
||||||
|
[ext_resource type="Theme" uid="uid://dtnd3tqllufey" path="res://images/menu_button.tres" id="2_g83h6"]
|
||||||
|
|
||||||
|
[node name="WeaponSelector" type="MarginContainer"]
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
script = ExtResource("1_4acia")
|
||||||
|
|
||||||
|
[node name="Button" type="Button" parent="."]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 2
|
||||||
|
theme = ExtResource("2_g83h6")
|
||||||
|
|
||||||
|
[node name="MarginContainer" type="MarginContainer" parent="."]
|
||||||
|
layout_mode = 2
|
||||||
|
theme_override_constants/margin_left = 10
|
||||||
|
theme_override_constants/margin_top = 10
|
||||||
|
theme_override_constants/margin_right = 10
|
||||||
|
theme_override_constants/margin_bottom = 10
|
||||||
|
|
||||||
|
[node name="NameLabel" type="Label" parent="MarginContainer"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 2
|
||||||
|
theme = ExtResource("2_g83h6")
|
||||||
|
horizontal_alignment = 1
|
||||||
|
|
||||||
|
[connection signal="pressed" from="Button" to="." method="_on_button_pressed"]
|
||||||
Reference in New Issue
Block a user