diff --git a/Resources/Debug/DebugLevels.tres b/Resources/Debug/DebugLevels.tres new file mode 100644 index 00000000..875331b0 --- /dev/null +++ b/Resources/Debug/DebugLevels.tres @@ -0,0 +1,85 @@ +[gd_resource type="Resource" script_class="DebugMapSelectData" load_steps=20 format=3 uid="uid://d1lc8lhq1b05p"] + +[ext_resource type="Script" path="res://Scripts/Resources/DebugMenu/DebugMapSelectData.cs" id="1_6kwth"] +[ext_resource type="Script" path="res://Scripts/Resources/MapStartDataResource.cs" id="1_ov731"] +[ext_resource type="Script" path="res://Scripts/Resources/DebugMenu/DebugMapSelectResource.cs" id="2_tnajf"] +[ext_resource type="Resource" uid="uid://dau0s8ob7qnpc" path="res://Resources/Items/IceShotgun.tres" id="3_fydgr"] +[ext_resource type="Resource" uid="uid://ct1fa2huvy34n" path="res://Resources/Items/Ammo1.tres" id="4_38yta"] +[ext_resource type="Resource" uid="uid://cj5aa7btaw6q0" path="res://Resources/Items/Blue_Keycard.tres" id="5_em757"] +[ext_resource type="Resource" uid="uid://clr1gln7nxa1o" path="res://Resources/Items/Power_Pickup.tres" id="6_sdmg8"] + +[sub_resource type="Resource" id="Resource_tpb7s"] +script = ExtResource("1_ov731") +EggIndex = 0 +StartingEquipment = [] + +[sub_resource type="Resource" id="Resource_edoov"] +script = ExtResource("2_tnajf") +Enabled = true +Path = "res://Scenes/test.tscn" +_name = "Level 1" +StartData = SubResource("Resource_tpb7s") + +[sub_resource type="Resource" id="Resource_1sw5g"] +script = ExtResource("1_ov731") +EggIndex = 255 +StartingEquipment = [] + +[sub_resource type="Resource" id="Resource_47bot"] +script = ExtResource("2_tnajf") +Enabled = true +Path = "res://Scenes/test.tscn" +_name = "Level 1 (Debug Room)" +StartData = SubResource("Resource_1sw5g") + +[sub_resource type="Resource" id="Resource_o7bux"] +script = ExtResource("1_ov731") +EggIndex = 2 +StartingEquipment = [ExtResource("3_fydgr"), ExtResource("4_38yta"), ExtResource("5_em757"), ExtResource("6_sdmg8")] + +[sub_resource type="Resource" id="Resource_mgdm6"] +script = ExtResource("2_tnajf") +Enabled = true +Path = "res://Scenes/test.tscn" +_name = "Level 1 (Boss)" +StartData = SubResource("Resource_o7bux") + +[sub_resource type="Resource" id="Resource_6wrc7"] +script = ExtResource("2_tnajf") +Enabled = true +Path = "res://Scenes/naviogation_test.tscn" +_name = "Navigation Test" + +[sub_resource type="Resource" id="Resource_x3w7w"] +script = ExtResource("2_tnajf") +Enabled = true +Path = "res://Scenes/Actors/ActorEnemyTest.tscn" +_name = "Enemy Actor Test" + +[sub_resource type="Resource" id="Resource_ajht5"] +script = ExtResource("2_tnajf") +Enabled = true +Path = "res://Scenes/Maps/BossTestArena.tscn" +_name = "Boss Test Arena" + +[sub_resource type="Resource" id="Resource_v2as6"] +script = ExtResource("2_tnajf") +Enabled = true +Path = "res://Scenes/Maps/RebelBase.tscn" +_name = "Rebel Base" + +[sub_resource type="Resource" id="Resource_qnbi6"] +script = ExtResource("2_tnajf") +Enabled = true +Path = "res://Scenes/Cutscenes/Intro.tscn" +_name = "Intro" + +[sub_resource type="Resource" id="Resource_7vmdn"] +script = ExtResource("2_tnajf") +Enabled = true +Path = "res://Scenes/Maps/SimpleScene.tscn" +_name = "Default Scene" + +[resource] +script = ExtResource("1_6kwth") +Maps = Array[Object]([SubResource("Resource_edoov"), SubResource("Resource_47bot"), SubResource("Resource_mgdm6"), SubResource("Resource_6wrc7"), SubResource("Resource_x3w7w"), SubResource("Resource_ajht5"), SubResource("Resource_v2as6"), SubResource("Resource_qnbi6"), SubResource("Resource_7vmdn")]) diff --git a/Scenes/HUD/debug_menu.tscn b/Scenes/HUD/debug_menu.tscn index 5790d586..eaedcf8f 100644 --- a/Scenes/HUD/debug_menu.tscn +++ b/Scenes/HUD/debug_menu.tscn @@ -1,7 +1,8 @@ -[gd_scene load_steps=3 format=3 uid="uid://bemu3l6b1e84y"] +[gd_scene load_steps=4 format=3 uid="uid://bemu3l6b1e84y"] [ext_resource type="Script" path="res://Scripts/UI/DebugMenu.cs" id="1_5vtnj"] [ext_resource type="Theme" uid="uid://dnsadvmunm76k" path="res://Resources/Styles/MainMenuButtons.tres" id="2_wqb8e"] +[ext_resource type="Resource" uid="uid://d1lc8lhq1b05p" path="res://Resources/Debug/DebugLevels.tres" id="3_cvgqx"] [node name="DebugMenu" type="VBoxContainer" node_paths=PackedStringArray("ButtonsContainer")] anchors_preset = 15 @@ -11,8 +12,8 @@ grow_horizontal = 2 grow_vertical = 2 script = ExtResource("1_5vtnj") ButtonTheme = ExtResource("2_wqb8e") -Levels = Array[String](["res://Scenes/test.tscn", "res://Scenes/naviogation_test.tscn", "res://Scenes/Actors/ActorEnemyTest.tscn", "res://Scenes/Maps/BossTestArena.tscn", "res://Scenes/Maps/RebelBase.tscn", "res://Scenes/Cutscenes/Intro.tscn"]) -ButtonsContainer = NodePath("Level Select") +Levels = ExtResource("3_cvgqx") +ButtonsContainer = NodePath("ScrollContainer/Level Select") [node name="HBoxContainer" type="HBoxContainer" parent="."] layout_mode = 2 @@ -30,12 +31,18 @@ theme_override_font_sizes/font_size = 14 text = "God Mode " -[node name="Level Select" type="FlowContainer" parent="."] +[node name="ScrollContainer" type="ScrollContainer" parent="."] layout_mode = 2 +size_flags_vertical = 3 -[node name="BackButton" type="Button" parent="Level Select"] +[node name="Level Select" type="FlowContainer" parent="ScrollContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="BackButton" type="Button" parent="ScrollContainer/Level Select"] layout_mode = 2 theme = ExtResource("2_wqb8e") text = "Back" -[connection signal="pressed" from="Level Select/BackButton" to="." method="_on_back_button_pressed"] +[connection signal="pressed" from="ScrollContainer/Level Select/BackButton" to="." method="_on_back_button_pressed"] diff --git a/Scenes/Maps/SimpleScene.tscn b/Scenes/Maps/SimpleScene.tscn new file mode 100644 index 00000000..91731bdc --- /dev/null +++ b/Scenes/Maps/SimpleScene.tscn @@ -0,0 +1,66 @@ +[gd_scene load_steps=11 format=4 uid="uid://prgabjxh44lf"] + +[ext_resource type="Script" path="res://Scripts/GameManager.cs" id="1_4uv21"] +[ext_resource type="PackedScene" uid="uid://bghghp5ep4w2j" path="res://Scenes/player.tscn" id="2_j0vja"] +[ext_resource type="PackedScene" uid="uid://crry0rgk7a8sm" path="res://Scenes/Weapons/BaseWeapon.tscn" id="3_a16tm"] +[ext_resource type="TileSet" uid="uid://6k28roiljylj" path="res://Tilesets/factory_tileset.tres" id="4_em3f4"] +[ext_resource type="Script" path="res://Scripts/TilemapAvoidance.cs" id="5_75e1c"] +[ext_resource type="Script" path="res://Scenes/CameraController.gd" id="11_uct4d"] +[ext_resource type="Script" path="res://Scripts/InventoryManager.cs" id="12_hibtc"] +[ext_resource type="PackedScene" uid="uid://dkwi1hu1bixoe" path="res://Scenes/HUD/HUD.tscn" id="13_66bei"] +[ext_resource type="Script" path="res://Scenes/CameraTarget.gd" id="14_2aa7w"] +[ext_resource type="Script" path="res://Scripts/AlarmManager.cs" id="15_d7e3u"] + +[node name="GameScene" type="Node2D" node_paths=PackedStringArray("PlayerSpawnMarker")] +script = ExtResource("1_4uv21") +PlayerTemplate = ExtResource("2_j0vja") +PlayerSpawnMarker = NodePath("PlayerStartPosition") +WeaponTemplate = ExtResource("3_a16tm") +StartingEquipment = Array[Object]([]) + +[node name="Tilemaps" type="Node2D" parent="."] + +[node name="Floor" type="TileMapLayer" parent="Tilemaps" node_paths=PackedStringArray("_solidLayer")] +tile_map_data = PackedByteArray("AAAEABAAAAAEAAIAAAAEABEAAAAEAAIAAAAEABIAAAAEAAIAAAAEABMAAAAEAAIAAAAEABQAAAAEAAIAAAAEABUAAAAEAAIAAAAEABYAAAAEAAIAAAAFABAAAAAEAAIAAAAFABEAAAAEAAIAAAAFABIAAAAEAAIAAAAFABMAAAAEAAIAAAAFABQAAAAEAAIAAAAFABUAAAAEAAIAAAAFABYAAAAEAAIAAAAGABAAAAAEAAIAAAAGABEAAAAEAAIAAAAGABIAAAAEAAIAAAAGABMAAAAEAAIAAAAGABQAAAAEAAIAAAAGABUAAAAEAAIAAAAGABYAAAAEAAIAAAAHABAAAAAEAAIAAAAHABEAAAAEAAIAAAAHABIAAAAEAAIAAAAHABMAAAAEAAIAAAAHABQAAAAEAAIAAAAHABUAAAAEAAIAAAAHABYAAAAEAAIAAAAIABAAAAAEAAIAAAAIABEAAAAEAAIAAAAIABIAAAAEAAIAAAAIABMAAAAEAAIAAAAIABQAAAAEAAIAAAAIABUAAAAEAAIAAAAIABYAAAAEAAIAAAAJABAAAAAEAAIAAAAJABEAAAAEAAIAAAAJABIAAAAEAAIAAAAJABMAAAAEAAIAAAAJABQAAAAEAAIAAAAJABUAAAAEAAIAAAAJABYAAAAEAAIAAAAKABAAAAAEAAIAAAAKABEAAAAEAAIAAAAKABIAAAAEAAIAAAAKABMAAAAEAAIAAAAKABQAAAAEAAIAAAAKABUAAAAEAAIAAAAKABYAAAAEAAIAAAADABAAAAAEAAIAAAADABEAAAAEAAIAAAADABIAAAAEAAIAAAADABMAAAAEAAIAAAADABQAAAAEAAIAAAADABUAAAAEAAIAAAADABYAAAAEAAIAAAADABcAAAAEAAIAAAADABgAAAAEAAIAAAAEABcAAAAEAAIAAAAEABgAAAAEAAIAAAAFABcAAAAEAAIAAAAFABgAAAAEAAIAAAAGABcAAAAEAAIAAAAGABgAAAAEAAIAAAAHABcAAAAEAAIAAAAHABgAAAAEAAIAAAAIABcAAAAEAAIAAAAIABgAAAAEAAIAAAAJABcAAAAEAAIAAAAJABgAAAAEAAIAAAAKABcAAAAEAAIAAAAKABgAAAAEAAIAAAALABAAAAAEAAIAAAALABEAAAAEAAIAAAALABIAAAAEAAIAAAALABMAAAAEAAIAAAALABQAAAAEAAIAAAALABUAAAAEAAIAAAALABYAAAAEAAIAAAALABcAAAAEAAIAAAALABgAAAAEAAIAAAA=") +tile_set = ExtResource("4_em3f4") +script = ExtResource("5_75e1c") +_solidLayer = NodePath("../Solid") +metadata/_edit_lock_ = true + +[node name="Solid" type="TileMapLayer" parent="Tilemaps" groups=["Solid"]] +tile_map_data = PackedByteArray("AAACAA0AAAAAAAsAAAADAA0AAAABAAQAAAAEAA0AAAABAAQAAAAFAA0AAAABAAQAAAAGAA0AAAABAAQAAAAHAA0AAAABAAQAAAAIAA0AAAABAAQAAAAJAA0AAAABAAQAAAAKAA0AAAABAAQAAAALAA0AAAABAAQAAAAMAA0AAAABAAsAAAAMAA4AAAAAAAQAAAAMAA8AAAAAAAQAAAAMABAAAAAAAAQAAAAMABEAAAAAAAQAAAAMABMAAAAAAAQAAAAMABIAAAAAAAQAAAAMABQAAAAAAAQAAAAMABUAAAAAAAQAAAAMABYAAAAAAAQAAAAMABcAAAAAAAQAAAAMABgAAAAAAAQAAAAMABkAAAABAAwAAAALABkAAAABAAQAAAAKABkAAAABAAQAAAAJABkAAAABAAQAAAAIABkAAAABAAQAAAAHABkAAAABAAQAAAAGABkAAAABAAQAAAAFABkAAAABAAQAAAAEABkAAAABAAQAAAADABkAAAABAAQAAAACABkAAAAAAAwAAAACABgAAAAAAAQAAAACABYAAAAAAAQAAAACABcAAAAAAAQAAAACABUAAAAAAAQAAAACABQAAAAAAAQAAAACABIAAAAAAAQAAAACABMAAAAAAAQAAAACABEAAAAAAAQAAAACABAAAAAAAAQAAAACAA8AAAAAAAQAAAACAA4AAAAAAAQAAAADAA4AAAABAAEAAAADAA8AAAABAAEAAAAEAA4AAAABAAEAAAAEAA8AAAABAAEAAAAFAA4AAAABAAEAAAAFAA8AAAABAAEAAAAGAA4AAAABAAEAAAAGAA8AAAABAAEAAAAHAA4AAAABAAEAAAAHAA8AAAABAAEAAAAIAA4AAAABAAEAAAAIAA8AAAABAAEAAAAJAA4AAAABAAEAAAAJAA8AAAABAAEAAAAKAA4AAAABAAEAAAAKAA8AAAABAAEAAAALAA4AAAABAAEAAAALAA8AAAABAAEAAAA=") +tile_set = ExtResource("4_em3f4") +metadata/_edit_lock_ = true + +[node name="Props" type="TileMapLayer" parent="Tilemaps"] +tile_set = ExtResource("4_em3f4") +metadata/_edit_lock_ = true + +[node name="Actors" type="Node2D" parent="Tilemaps"] +metadata/_edit_lock_ = true + +[node name="CameraController" type="Camera2D" parent="."] +script = ExtResource("11_uct4d") +pixel_snap = false + +[node name="ReferenceRect" type="ReferenceRect" parent="."] +visible = false +offset_left = -38.0 +offset_top = -39.0 +offset_right = 124.0 +offset_bottom = 44.0 + +[node name="InventoryManager" type="Node2D" parent="."] +script = ExtResource("12_hibtc") + +[node name="HUD" parent="." instance=ExtResource("13_66bei")] + +[node name="CameraTarget" type="Node2D" parent="."] +position = Vector2(115, 328) +script = ExtResource("14_2aa7w") + +[node name="PlayerStartPosition" type="Marker2D" parent="."] +position = Vector2(111, 305) + +[node name="AlarmManager" type="Node2D" parent="."] +script = ExtResource("15_d7e3u") diff --git a/Scenes/test.tscn b/Scenes/test.tscn index 4e6eec67..e869d75b 100644 --- a/Scenes/test.tscn +++ b/Scenes/test.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=75 format=4 uid="uid://bv451a8wgty4u"] +[gd_scene load_steps=78 format=4 uid="uid://bv451a8wgty4u"] [ext_resource type="Script" path="res://Scripts/GameManager.cs" id="1_8tmoj"] [ext_resource type="PackedScene" uid="uid://bghghp5ep4w2j" path="res://Scenes/player.tscn" id="2_8mh54"] @@ -8,8 +8,10 @@ [ext_resource type="PackedScene" uid="uid://rp4jhx0tuh24" path="res://Scenes/fragola.tscn" id="4_s7wq6"] [ext_resource type="Resource" uid="uid://ct1fa2huvy34n" path="res://Resources/Items/Ammo1.tres" id="4_swym2"] [ext_resource type="Resource" uid="uid://cs3ihltcn2166" path="res://Resources/Items/IcicleGun.tres" id="5_nqier"] +[ext_resource type="Resource" uid="uid://clr1gln7nxa1o" path="res://Resources/Items/Power_Pickup.tres" id="6_khabp"] [ext_resource type="PackedScene" uid="uid://uaf5r6cd71hu" path="res://Scenes/Props/LargeTank.tscn" id="6_nkauc"] [ext_resource type="Script" path="res://Scenes/CameraController.gd" id="6_t8ide"] +[ext_resource type="Script" path="res://Scripts/Resources/MapStartDataResource.cs" id="7_l32kg"] [ext_resource type="PackedScene" uid="uid://crmwuwhltmdq7" path="res://Scenes/Props/MediumTank.tscn" id="7_lmrl1"] [ext_resource type="PackedScene" uid="uid://7cpk3c3d8cl7" path="res://Scenes/Props/MediumLiquidTank.tscn" id="8_2wpw7"] [ext_resource type="PackedScene" uid="uid://q7hau0tl3vsr" path="res://Scenes/Items/IcicleGun.tscn" id="10_iihys"] @@ -63,6 +65,11 @@ [ext_resource type="Script" path="res://Scripts/Resources/Events/ControlEnemyEvent.cs" id="52_5m7td"] [ext_resource type="PackedScene" uid="uid://bqjcwxene73l2" path="res://Scenes/Actors/ActorEnemyTest.tscn" id="55_chha6"] +[sub_resource type="Resource" id="Resource_6sau4"] +script = ExtResource("7_l32kg") +EggIndex = 0 +StartingEquipment = [ExtResource("6_khabp")] + [sub_resource type="Resource" id="Resource_5er5x"] script = ExtResource("49_0si7g") Target = NodePath("../Factory Tilemaps/Teleporter") @@ -122,19 +129,24 @@ ActivationType = 0 Targets = Array[NodePath]([NodePath("../Rumia")]) WaitForCompletion = true -[sub_resource type="Resource" id="Resource_o7jyd"] +[sub_resource type="Resource" id="Resource_sl7qj"] resource_local_to_scene = true script = ExtResource("49_0si7g") Target = NodePath(".") WaitForCompletion = true -[node name="GameScene" type="Node2D" node_paths=PackedStringArray("PlayerSpawnMarker")] +[node name="GameScene" type="Node2D"] position = Vector2(38, 39) script = ExtResource("1_8tmoj") PlayerTemplate = ExtResource("2_8mh54") -PlayerSpawnMarker = NodePath("PlayerStartPosition") +SpawnMarkers = { +0: NodePath("StartPosition"), +2: NodePath("Factory Tilemaps/BossDebugTeleporterDestination"), +255: NodePath("Factory Tilemaps/Debug Room/DebugRoomStartPosition") +} WeaponTemplate = ExtResource("3_2wlhc") StartingEquipment = Array[Object]([ExtResource("4_swym2"), ExtResource("5_nqier")]) +MapStartData = SubResource("Resource_6sau4") metadata/_edit_lock_ = true [node name="Factory Tilemaps" type="Node2D" parent="."] @@ -247,6 +259,9 @@ offset_right = 23.0 text = "Boss Test" label_settings = ExtResource("14_c4c20") +[node name="DebugRoomStartPosition" type="Marker2D" parent="Factory Tilemaps/Debug Room"] +position = Vector2(-741, -380) + [node name="LargeTank" parent="Factory Tilemaps" instance=ExtResource("6_nkauc")] position = Vector2(-640, 54) @@ -355,7 +370,6 @@ Target = NodePath("../Teleporter7") [node name="BossDebugTeleporterDestination" parent="Factory Tilemaps" node_paths=PackedStringArray("Target") instance=ExtResource("30_8fdby")] position = Vector2(-1489, -345) -IsEnabled = true Invisible = true Target = NodePath("../Teleporter7") @@ -474,12 +488,9 @@ position = Vector2(-1159, 213) [node name="HUD" parent="." instance=ExtResource("22_krk0o")] [node name="CameraTarget" type="Node2D" parent="."] -position = Vector2(-741, -380) +position = Vector2(-808, -169) script = ExtResource("24_0c2yt") -[node name="PlayerStartPosition" type="Marker2D" parent="."] -position = Vector2(-741, -380) - [node name="AlarmManager" type="Node2D" parent="."] script = ExtResource("25_rpwvt") @@ -586,7 +597,7 @@ Events = Array[Object]([SubResource("Resource_068l7"), SubResource("Resource_l3n [node name="BossBattleStartScript" parent="." instance=ExtResource("43_kf3qc")] position = Vector2(-1487, -396) -Events = Array[Object]([SubResource("Resource_4f4id"), SubResource("Resource_s2o7m"), SubResource("Resource_b1dht"), SubResource("Resource_xrgpy"), SubResource("Resource_o7jyd")]) +Events = Array[Object]([SubResource("Resource_4f4id"), SubResource("Resource_s2o7m"), SubResource("Resource_b1dht"), SubResource("Resource_xrgpy"), SubResource("Resource_sl7qj")]) [node name="Enemy8" parent="." instance=ExtResource("47_u1ve6")] position = Vector2(-968, 206) @@ -615,3 +626,6 @@ Target = NodePath("../BulletEmitter") [node name="BulletEmitter" parent="." instance=ExtResource("49_64oga")] position = Vector2(-728, 57) + +[node name="StartPosition" type="Marker2D" parent="."] +position = Vector2(-808, -167) diff --git a/Scripts/GameManager.cs b/Scripts/GameManager.cs index 697a29be..c2a93634 100644 --- a/Scripts/GameManager.cs +++ b/Scripts/GameManager.cs @@ -23,15 +23,18 @@ public partial class GameManager : Node2D [Export] public PackedScene PlayerTemplate { get; set; } - [Export] public Marker2D PlayerSpawnMarker { get; set; } + [Export] public Dictionary SpawnMarkers { get; private set; } = new(); + + //[Export] public Marker2D PlayerSpawnMarker { get; set; } [Export] public PackedScene WeaponTemplate { get; private set; } - [Export] public Array StartingEquipment { get; private set; } + [Export] public Array StartingEquipment { get; private set; } = new(); private InventoryManager _inventoryManager { get; set; } - public MapStartData MapStartData { get; set; } + [Export] + public MapStartDataResource MapStartData { get; private set; } //private AlarmManager _alarmManager { get; set; } @@ -48,7 +51,7 @@ public partial class GameManager : Node2D // Called when the node enters the scene tree for the first time. public override void _Ready() { - Instance = this; + Instance = this; _hud = GetNodeOrNull("HUD"); if (_hud == null) GD.Print("No HUD in scene."); @@ -81,6 +84,15 @@ public partial class GameManager : Node2D CallDeferred(MethodName.DelayPlayerSpawn); } + public void ApplyMapStartData(MapStartDataResource mapStartData) + { + MapStartData = mapStartData; + + StartingEquipment.AddRange(mapStartData.StartingEquipment); + + + } + // Called every frame. 'delta' is the elapsed time since the previous frame. public override void _Process(double delta) { @@ -94,7 +106,7 @@ public partial class GameManager : Node2D { //await Task.Delay(500); - if (PlayerSpawnMarker != null) + if (SpawnMarkers.Any()) { SpawnPlayer(); } @@ -141,13 +153,16 @@ public partial class GameManager : Node2D public void SpawnPlayer() { if (_player != null) return; + //_player = this.CreateChild(PlayerTemplate, PlayerSpawnMarker.Position ); _player = PlayerTemplate.Instantiate(); this.CallDeferred("add_child", _player); _player.Transform = this.GlobalTransform; - - _player.GlobalPosition = PlayerSpawnMarker.Position; + + _player.GlobalPosition = GetStartPosition(); + + //_player.GlobalPosition = PlayerSpawnMarker.Position; CameraTargetPlayer(); // @@ -158,6 +173,22 @@ public partial class GameManager : Node2D // } } + private Vector2 GetStartPosition() + { + if (MapStartData != null) + { + if (SpawnMarkers.TryGetValue(MapStartData.EggIndex, out var spawnMarker)) + { + var marker = GetNode(spawnMarker); + + return marker.Position; // Why position and not globalposition? I have no idea + } + } + + var m = GetNode(SpawnMarkers.First().Value); + return m.GlobalPosition; + } + public void CameraTargetPlayer() { if (_player is null) return; diff --git a/Scripts/GlobalState.cs b/Scripts/GlobalState.cs index 5371711f..feb7ed7f 100644 --- a/Scripts/GlobalState.cs +++ b/Scripts/GlobalState.cs @@ -1,3 +1,4 @@ +using Cirno.Scripts.Resources; using Godot; public partial class GlobalState : Node @@ -13,8 +14,6 @@ public partial class GlobalState : Node Viewport root = GetTree().Root; // Using a negative index counts from the end, so this gets the last child node of `root`. CurrentScene = root.GetChild(-1); - - } public void GotoScene(string path) @@ -31,7 +30,13 @@ public partial class GlobalState : Node CallDeferred(MethodName.DeferredGotoScene, path); } - public void DeferredGotoScene(string path) + public void GoToScene(string path, MapStartDataResource startData) + { + // TODO: Implement startdata usage + CallDeferred(MethodName.DeferredGotoScene, path, startData); + } + + private void DeferredGotoScene(string path, MapStartDataResource startData = null) { // It is now safe to remove the current scene. CurrentScene.Free(); @@ -47,11 +52,16 @@ public partial class GlobalState : Node // Optionally, to make it compatible with the SceneTree.change_scene_to_file() API. GetTree().CurrentScene = CurrentScene; + + if (startData is not null) + { + // Call deferred if it gives issues + DeferredAddStartDataToGameManager(startData); + } } -} -public class MapStartData -{ - public int EggIndex = 0; - + private void DeferredAddStartDataToGameManager(MapStartDataResource resource) + { + GameManager.Instance.ApplyMapStartData(resource); + } } \ No newline at end of file diff --git a/Scripts/MainMenu.cs b/Scripts/MainMenu.cs index 52b98259..8af9c790 100644 --- a/Scripts/MainMenu.cs +++ b/Scripts/MainMenu.cs @@ -59,7 +59,8 @@ public partial class MainMenu : Control private void _on_mainmenu_button_pressed() { if (MainMenuScene != null) { - GetTree().ChangeSceneToFile(MainMenuScene); + GlobalState.Instance.GotoScene(MainMenuScene); + //GetTree().ChangeSceneToFile(MainMenuScene); } } diff --git a/Scripts/Resources/DebugMenu/DebugMapSelectData.cs b/Scripts/Resources/DebugMenu/DebugMapSelectData.cs new file mode 100644 index 00000000..68bec5e9 --- /dev/null +++ b/Scripts/Resources/DebugMenu/DebugMapSelectData.cs @@ -0,0 +1,11 @@ +using Godot; +using Godot.Collections; + +namespace Cirno.Scripts.Resources.DebugMenu; + +[GlobalClass] +public partial class DebugMapSelectData : Resource +{ + [Export] + public Array Maps { get; private set; } +} \ No newline at end of file diff --git a/Scripts/Resources/DebugMenu/DebugMapSelectResource.cs b/Scripts/Resources/DebugMenu/DebugMapSelectResource.cs new file mode 100644 index 00000000..16c1a5b1 --- /dev/null +++ b/Scripts/Resources/DebugMenu/DebugMapSelectResource.cs @@ -0,0 +1,35 @@ +using Godot; + +namespace Cirno.Scripts.Resources.DebugMenu; + +[GlobalClass] +public partial class DebugMapSelectResource : Resource +{ + [Export] public bool Enabled { get; private set; } = true; + [Export] public string Path { get; private set; } + + [Export] private string _name { get; set; } + + [Export] public MapStartDataResource StartData { get; private set; } + + [Export] public Texture2D Icon { get; private set; } + + public string DisplayName + { + get + { + if (!string.IsNullOrWhiteSpace(_name)) + { + return _name; + } + + if (!string.IsNullOrWhiteSpace(Path)) + { + return Path.Split("/")[^1].Split(".")[0]; + } + + return string.Empty; + } + set => _name = value; + } +} \ No newline at end of file diff --git a/Scripts/Resources/MapStartDataResource.cs b/Scripts/Resources/MapStartDataResource.cs new file mode 100644 index 00000000..d90f2324 --- /dev/null +++ b/Scripts/Resources/MapStartDataResource.cs @@ -0,0 +1,20 @@ +using System.Linq; +using Godot; +using Godot.Collections; + +namespace Cirno.Scripts.Resources; + +[GlobalClass] +public partial class MapStartDataResource : Resource +{ + [Export] + public int EggIndex { get; set; } + + [Export] + public Array StartingEquipment { get; set; } = new Array(); + + public override string ToString() + { + return $"EggIndex: {EggIndex}, Equipment: {string.Join("," ,StartingEquipment.Select(x => x.ItemKey))}"; + } +} \ No newline at end of file diff --git a/Scripts/UI/DebugMenu.cs b/Scripts/UI/DebugMenu.cs index a05dbdba..902d7672 100644 --- a/Scripts/UI/DebugMenu.cs +++ b/Scripts/UI/DebugMenu.cs @@ -1,6 +1,9 @@ using Godot; using System; +using Cirno.Scripts.Resources; +using Cirno.Scripts.Resources.DebugMenu; using Godot.Collections; +using DebugMapSelectData = Cirno.Scripts.Resources.DebugMenu.DebugMapSelectData; public partial class DebugMenu : Control { @@ -9,7 +12,7 @@ public partial class DebugMenu : Control public Theme ButtonTheme { get; private set; } [Export] - public Array Levels { get; set; } + public DebugMapSelectData Levels { get; set; } [Export] public Container ButtonsContainer { get; private set; } @@ -20,26 +23,25 @@ public partial class DebugMenu : Control // Called when the node enters the scene tree for the first time. public override void _Ready() { - foreach (var level in Levels) + foreach (var level in Levels.Maps) { + if (!level.Enabled) continue; var button = new Button(); - button.Text = level.Split("/")[^1].Split(".")[0]; + //button.Text = level.Split("/")[^1].Split(".")[0]; + button.Text = level.DisplayName; + button.Icon = level.Icon; //button.Text = level; button.Theme = ButtonTheme; ButtonsContainer.CallDeferred("add_child", button); button.Pressed += () => ButtonOnPressed(level); - } } - private void ButtonOnPressed(string scene) + private void ButtonOnPressed(DebugMapSelectResource scene) { - GD.Print("Button was pressed, now what"); - GlobalState.Instance.GotoScene(scene); - //GetTree().ChangeSceneToFile(scene); - + GlobalState.Instance.GoToScene(scene.Path, scene.StartData); } private void _on_back_button_pressed()