Added map usage
This commit is contained in:
@@ -2,7 +2,7 @@ class_name AreaMap
|
|||||||
extends Node2D
|
extends Node2D
|
||||||
|
|
||||||
|
|
||||||
signal sector_selected(sector: SectorData)
|
signal passage_selected(passage: PassageData)
|
||||||
|
|
||||||
|
|
||||||
const SECTOR_XS = [
|
const SECTOR_XS = [
|
||||||
@@ -94,8 +94,9 @@ func _input(event: InputEvent) -> void:
|
|||||||
if event.is_action_pressed("ui_down"):
|
if event.is_action_pressed("ui_down"):
|
||||||
_set_selected_sector(selected_sector.sector_below)
|
_set_selected_sector(selected_sector.sector_below)
|
||||||
if event.is_action_pressed("ui_accept"):
|
if event.is_action_pressed("ui_accept"):
|
||||||
if _is_sector_accessible(current_sector):
|
var selected_passage := _get_passage_to_sector(selected_sector)
|
||||||
sector_selected.emit(current_sector)
|
if selected_passage != null:
|
||||||
|
passage_selected.emit(selected_passage)
|
||||||
|
|
||||||
|
|
||||||
func _fill_sector_positions() -> void:
|
func _fill_sector_positions() -> void:
|
||||||
@@ -224,10 +225,13 @@ func _update_selected_sector_indicator() -> void:
|
|||||||
|
|
||||||
|
|
||||||
func _is_sector_accessible(sector: SectorData) -> bool:
|
func _is_sector_accessible(sector: SectorData) -> bool:
|
||||||
if current_sector == null: return false
|
return _get_passage_to_sector(sector) != null
|
||||||
|
|
||||||
|
|
||||||
|
func _get_passage_to_sector(sector: SectorData) -> PassageData:
|
||||||
|
if current_sector == null: return null
|
||||||
|
|
||||||
for passage in current_sector.next_passages:
|
for passage in current_sector.next_passages:
|
||||||
if passage.next_sector == sector:
|
if passage.next_sector == sector:
|
||||||
return true
|
return passage
|
||||||
|
return null
|
||||||
return false
|
|
||||||
|
|||||||
+71
-4
@@ -1,7 +1,20 @@
|
|||||||
|
class_name Game
|
||||||
extends Node
|
extends Node
|
||||||
|
|
||||||
|
|
||||||
@onready var passage : Passage = $Passage
|
const PASSAGE = preload("res://game/passage.tscn")
|
||||||
|
const AREA_MAP = preload("res://game/area_map/area_map.tscn")
|
||||||
|
|
||||||
|
|
||||||
|
var data : WorldData
|
||||||
|
var current_area : AreaData
|
||||||
|
var current_stage : StageData
|
||||||
|
var current_sector : SectorData
|
||||||
|
|
||||||
|
var _current_passage_scene : Passage
|
||||||
|
var _current_area_map_scene : AreaMap
|
||||||
|
|
||||||
|
|
||||||
@onready var pause_screen : Control = $PauseScreen
|
@onready var pause_screen : Control = $PauseScreen
|
||||||
@onready var game_over_screen : Control = $GameOverScreen
|
@onready var game_over_screen : Control = $GameOverScreen
|
||||||
@onready var world_generator : WorldGenerator = $WorldGenerator
|
@onready var world_generator : WorldGenerator = $WorldGenerator
|
||||||
@@ -10,8 +23,8 @@ extends Node
|
|||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
pause_screen.hide()
|
pause_screen.hide()
|
||||||
game_over_screen.hide()
|
game_over_screen.hide()
|
||||||
var world_data := world_generator.generate(randi())
|
|
||||||
passage.data = world_data.areas[0].stages[0].sectors[0].next_passages[0]
|
start_game(SaveManager.game_data)
|
||||||
|
|
||||||
|
|
||||||
func _input(event: InputEvent) -> void:
|
func _input(event: InputEvent) -> void:
|
||||||
@@ -20,11 +33,65 @@ func _input(event: InputEvent) -> void:
|
|||||||
get_tree().paused = true
|
get_tree().paused = true
|
||||||
|
|
||||||
|
|
||||||
|
func start_game(game_data: GameData) -> void:
|
||||||
|
if not _fill_data(game_data):
|
||||||
|
print("Can't process game data")
|
||||||
|
_show_main_menu()
|
||||||
|
return
|
||||||
|
|
||||||
|
_create_game_map()
|
||||||
|
|
||||||
|
|
||||||
|
func _fill_data(game_data: GameData) -> bool:
|
||||||
|
data = world_generator.generate(game_data.game_seed.hash())
|
||||||
|
|
||||||
|
if game_data.current_area_index >= data.areas.size(): return false
|
||||||
|
current_area = data.areas[game_data.current_area_index]
|
||||||
|
|
||||||
|
if game_data.current_stage_index >= current_area.stages.size(): return false
|
||||||
|
current_stage = current_area.stages[game_data.current_stage_index]
|
||||||
|
|
||||||
|
if game_data.current_sector_index >= current_stage.sectors.size(): return false
|
||||||
|
current_sector = current_stage.sectors[game_data.current_sector_index]
|
||||||
|
|
||||||
|
return true
|
||||||
|
|
||||||
|
|
||||||
|
func _create_game_map() -> void:
|
||||||
|
if _current_area_map_scene != null: _current_area_map_scene.queue_free()
|
||||||
|
|
||||||
|
_current_area_map_scene = AREA_MAP.instantiate()
|
||||||
|
add_child(_current_area_map_scene)
|
||||||
|
_current_area_map_scene.area_data = current_area
|
||||||
|
_current_area_map_scene.current_sector = current_sector
|
||||||
|
_current_area_map_scene.selected_sector = current_sector
|
||||||
|
_current_area_map_scene.passage_selected.connect(_create_passage)
|
||||||
|
|
||||||
|
|
||||||
|
func _show_map() -> void:
|
||||||
|
if _current_passage_scene != null: _current_passage_scene.queue_free()
|
||||||
|
_current_area_map_scene.show()
|
||||||
|
|
||||||
|
|
||||||
|
func _create_passage(passage_data: PassageData) -> void:
|
||||||
|
if _current_passage_scene != null: _current_passage_scene.queue_free()
|
||||||
|
_current_area_map_scene.hide()
|
||||||
|
|
||||||
|
_current_passage_scene = PASSAGE.instantiate()
|
||||||
|
add_child(_current_passage_scene)
|
||||||
|
|
||||||
|
_current_passage_scene.data = passage_data
|
||||||
|
_current_passage_scene.completed.connect(_show_map)
|
||||||
|
|
||||||
|
|
||||||
func _on_pause_screen_continue_game() -> void:
|
func _on_pause_screen_continue_game() -> void:
|
||||||
pause_screen.hide()
|
pause_screen.hide()
|
||||||
|
|
||||||
|
|
||||||
func _on_show_main_menu() -> void:
|
func _show_main_menu() -> void:
|
||||||
|
if _current_passage_scene: _current_passage_scene.queue_free()
|
||||||
|
if _current_area_map_scene: _current_area_map_scene.queue_free()
|
||||||
|
|
||||||
get_tree().paused = false
|
get_tree().paused = false
|
||||||
get_tree().change_scene_to_file("res://menu/title_screen.tscn")
|
get_tree().change_scene_to_file("res://menu/title_screen.tscn")
|
||||||
|
|
||||||
|
|||||||
+3
-7
@@ -1,16 +1,13 @@
|
|||||||
[gd_scene load_steps=6 format=3 uid="uid://dl7m4rqyj8mck"]
|
[gd_scene load_steps=5 format=3 uid="uid://dl7m4rqyj8mck"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://1wfu4iuddo25" path="res://game/game.gd" id="1_l1rk1"]
|
[ext_resource type="Script" uid="uid://1wfu4iuddo25" path="res://game/game.gd" id="1_l1rk1"]
|
||||||
[ext_resource type="PackedScene" uid="uid://d34nh3lc1gpb" path="res://menu/pause_screen.tscn" id="2_h7iqs"]
|
[ext_resource type="PackedScene" uid="uid://d34nh3lc1gpb" path="res://menu/pause_screen.tscn" id="2_h7iqs"]
|
||||||
[ext_resource type="PackedScene" uid="uid://dgc0087kvarx6" path="res://game/passage.tscn" id="3_4fuuu"]
|
|
||||||
[ext_resource type="PackedScene" uid="uid://duxm8n62j2qt6" path="res://menu/game_over_screen.tscn" id="4_4fuuu"]
|
[ext_resource type="PackedScene" uid="uid://duxm8n62j2qt6" path="res://menu/game_over_screen.tscn" id="4_4fuuu"]
|
||||||
[ext_resource type="PackedScene" uid="uid://ggf76ayl53bb" path="res://game/world/generators/world_generator.tscn" id="5_dxrkv"]
|
[ext_resource type="PackedScene" uid="uid://ggf76ayl53bb" path="res://game/world/generators/world_generator.tscn" id="5_dxrkv"]
|
||||||
|
|
||||||
[node name="Game" type="Node2D"]
|
[node name="Game" type="Node2D"]
|
||||||
script = ExtResource("1_l1rk1")
|
script = ExtResource("1_l1rk1")
|
||||||
|
|
||||||
[node name="Passage" parent="." instance=ExtResource("3_4fuuu")]
|
|
||||||
|
|
||||||
[node name="PauseScreen" parent="." instance=ExtResource("2_h7iqs")]
|
[node name="PauseScreen" parent="." instance=ExtResource("2_h7iqs")]
|
||||||
process_mode = 2
|
process_mode = 2
|
||||||
z_index = 100
|
z_index = 100
|
||||||
@@ -29,7 +26,6 @@ offset_bottom = 172.0
|
|||||||
|
|
||||||
[node name="WorldGenerator" parent="." instance=ExtResource("5_dxrkv")]
|
[node name="WorldGenerator" parent="." instance=ExtResource("5_dxrkv")]
|
||||||
|
|
||||||
[connection signal="player_died" from="Passage" to="." method="_on_passage_player_died"]
|
|
||||||
[connection signal="continue_game" from="PauseScreen" to="." method="_on_pause_screen_continue_game"]
|
[connection signal="continue_game" from="PauseScreen" to="." method="_on_pause_screen_continue_game"]
|
||||||
[connection signal="show_main_menu" from="PauseScreen" to="." method="_on_show_main_menu"]
|
[connection signal="show_main_menu" from="PauseScreen" to="." method="_show_main_menu"]
|
||||||
[connection signal="show_main_menu" from="GameOverScreen" to="." method="_on_show_main_menu"]
|
[connection signal="show_main_menu" from="GameOverScreen" to="." method="_show_main_menu"]
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
class_name GameData
|
||||||
|
extends Resource
|
||||||
|
|
||||||
|
const SEED_CHARS := "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||||
|
const DEFAULT_SEED_LENGTH := 16
|
||||||
|
|
||||||
|
|
||||||
|
@export var game_seed: String
|
||||||
|
@export var current_area_index: int
|
||||||
|
@export var current_stage_index: int
|
||||||
|
@export var current_sector_index: int
|
||||||
|
|
||||||
|
|
||||||
|
func randomize() -> void:
|
||||||
|
var seed_chars_length := SEED_CHARS.length()
|
||||||
|
|
||||||
|
for i in range(DEFAULT_SEED_LENGTH):
|
||||||
|
var index := randi_range(1, seed_chars_length) - 1
|
||||||
|
game_seed += SEED_CHARS[index]
|
||||||
|
|
||||||
|
current_area_index = 0
|
||||||
|
current_stage_index = 0
|
||||||
|
current_sector_index = 0
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://cmqv00wdh1jk5
|
||||||
+5
-3
@@ -3,6 +3,7 @@ extends Node2D
|
|||||||
|
|
||||||
|
|
||||||
signal player_died
|
signal player_died
|
||||||
|
signal completed
|
||||||
|
|
||||||
|
|
||||||
@export var data : PassageData:
|
@export var data : PassageData:
|
||||||
@@ -18,9 +19,10 @@ var _current_progress := 0.0
|
|||||||
|
|
||||||
|
|
||||||
func _physics_process(delta: float) -> void:
|
func _physics_process(delta: float) -> void:
|
||||||
if data:
|
_current_progress += delta
|
||||||
_current_progress += delta
|
_update_progress_indicator()
|
||||||
_update_progress_indicator()
|
if _current_progress >= data.length:
|
||||||
|
completed.emit()
|
||||||
|
|
||||||
|
|
||||||
func _set_data(new_data: PassageData) -> void:
|
func _set_data(new_data: PassageData) -> void:
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ enum PassageType {
|
|||||||
Plus45Grad,
|
Plus45Grad,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@export var previous_sector : SectorData
|
@export var previous_sector : SectorData
|
||||||
@export var next_sector : SectorData
|
@export var next_sector : SectorData
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
extends Node
|
||||||
|
|
||||||
|
|
||||||
|
var game_data : GameData
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://calwg6oh6lv0r
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
extends Node
|
extends Node
|
||||||
|
|
||||||
|
|
||||||
const CONFIG_FILE = "user://settings.cfg"
|
const CONFIG_FILE = "user://settings.cfg"
|
||||||
const BASE_SIZE = Vector2i(640, 360)
|
const BASE_SIZE = Vector2i(640, 360)
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,10 @@ func _on_main_menu_continue_game() -> void:
|
|||||||
|
|
||||||
|
|
||||||
func _on_main_menu_new_game() -> void:
|
func _on_main_menu_new_game() -> void:
|
||||||
|
var game_data := GameData.new()
|
||||||
|
game_data.randomize()
|
||||||
|
SaveManager.game_data = game_data
|
||||||
|
|
||||||
get_tree().change_scene_to_file("res://game/game.tscn")
|
get_tree().change_scene_to_file("res://game/game.tscn")
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ config/icon="res://icon.svg"
|
|||||||
[autoload]
|
[autoload]
|
||||||
|
|
||||||
SettingsManager="*res://managers/settings_manager.gd"
|
SettingsManager="*res://managers/settings_manager.gd"
|
||||||
|
SaveManager="*res://managers/save_manager.gd"
|
||||||
|
|
||||||
[debug]
|
[debug]
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user