diff --git a/Autoloads/AchievementManager.cs b/Autoloads/AchievementManager.cs new file mode 100644 index 0000000..5b275e9 --- /dev/null +++ b/Autoloads/AchievementManager.cs @@ -0,0 +1,105 @@ +using Godot; +using Godot.Collections; +using Mr.BrickAdventures.scripts.Resources; + +namespace Mr.BrickAdventures.Autoloads; + +public partial class AchievementManager : Node +{ + [Export] private string AchievementsFolderPath = "res://achievements/"; + [Export] private PackedScene AchievementPopupScene { get; set; } + + private System.Collections.Generic.Dictionary _achievements = new(); + private Array _unlockedAchievementIds = []; + private GameManager _gameManager; + + public override void _Ready() + { + _gameManager = GetNode("/root/GameManager"); + LoadAchievementsFromFolder(); + LoadUnlockedAchievements(); + } + + private void LoadAchievementsFromFolder() + { + using var dir = DirAccess.Open(AchievementsFolderPath); + if (dir == null) + { + GD.PrintErr($"AchievementManager: Could not open achievements folder at '{AchievementsFolderPath}'"); + return; + } + + dir.ListDirBegin(); + var fileName = dir.GetNext(); + while (fileName != "") + { + if (!dir.CurrentIsDir() && fileName.EndsWith(".tres")) + { + var achievement = GD.Load(AchievementsFolderPath + fileName); + if (achievement != null) + { + _achievements.TryAdd(achievement.Id, achievement); + } + } + fileName = dir.GetNext(); + } + } + + public void UnlockAchievement(string achievementId) + { + if (!_achievements.TryGetValue(achievementId, out var achievement)) + { + GD.PrintErr($"Attempted to unlock non-existent achievement: '{achievementId}'"); + return; + } + + if (_unlockedAchievementIds.Contains(achievementId)) + { + return; // Already unlocked + } + + // 1. Mark as unlocked internally + _unlockedAchievementIds.Add(achievementId); + GD.Print($"Achievement Unlocked: {achievement.DisplayName}"); + + // 2. Show the UI popup + if (AchievementPopupScene != null) + { + var popup = AchievementPopupScene.Instantiate(); + GetTree().Root.AddChild(popup); + _ = popup.ShowAchievement(achievement); + } + + // 3. Call SteamManager if it's available + if (SteamManager.IsSteamInitialized) + { + SteamManager.UnlockAchievement(achievement.Id); + } + + // 4. Save progress + SaveUnlockedAchievements(); + } + + public void LockAchievement(string achievementId) + { + if (_unlockedAchievementIds.Contains(achievementId)) + { + _unlockedAchievementIds.Remove(achievementId); + SaveUnlockedAchievements(); + } + } + + private void SaveUnlockedAchievements() + { + _gameManager.PlayerState["unlocked_achievements"] = _unlockedAchievementIds; + // You might want to trigger a save game here, depending on your SaveSystem + } + + private void LoadUnlockedAchievements() + { + if (_gameManager.PlayerState.TryGetValue("unlocked_achievements", out var unlocked)) + { + _unlockedAchievementIds = (Array)unlocked; + } + } +} \ No newline at end of file diff --git a/Autoloads/AchievementManager.cs.uid b/Autoloads/AchievementManager.cs.uid new file mode 100644 index 0000000..2c6256d --- /dev/null +++ b/Autoloads/AchievementManager.cs.uid @@ -0,0 +1 @@ +uid://c4vvuqnx5y33u diff --git a/Autoloads/ConsoleManager.cs b/Autoloads/ConsoleManager.cs index 6cafdf9..55b78a2 100644 --- a/Autoloads/ConsoleManager.cs +++ b/Autoloads/ConsoleManager.cs @@ -10,10 +10,12 @@ public partial class ConsoleManager : Node private GameManager _gameManager; private SkillManager _skillManager; private SkillUnlockerComponent _skillUnlockerComponent; + private AchievementManager _achievementManager; public override void _Ready() { _gameManager = GetNode("/root/GameManager"); + _achievementManager = GetNode("/root/AchievementManager"); RegisterConsoleCommands(); } @@ -154,5 +156,18 @@ public partial class ConsoleManager : Node { _gameManager.OnLevelComplete(); } + + [ConsoleCommand("unlock_achievement", "Unlocks an achievement by its ID.")] + private void UnlockAchievementCommand(string achievementId) + { + _achievementManager.UnlockAchievement(achievementId); + LimboConsole.Info($"Attempted to unlock achievement '{achievementId}'."); + } + + [ConsoleCommand("reset_achievement", "Resets (locks) an achievement by its ID.")] + private void ResetAchievementCommand(string achievementId) + { + _achievementManager.LockAchievement(achievementId); + } } \ No newline at end of file diff --git a/Autoloads/SteamManager.cs b/Autoloads/SteamManager.cs new file mode 100644 index 0000000..b8fedf9 --- /dev/null +++ b/Autoloads/SteamManager.cs @@ -0,0 +1,77 @@ +using System; +using Godot; +using Steamworks; +using Steamworks.Data; + +namespace Mr.BrickAdventures.Autoloads; + +public partial class SteamManager : Node +{ + private const uint AppId = 3575090; + + public static string PlayerName { get; private set; } = "Player"; + public static bool IsSteamInitialized { get; private set; } = false; + + public override void _Ready() + { + try + { + SteamClient.Init(AppId); + IsSteamInitialized = true; + + PlayerName = SteamClient.Name; + + GD.Print($"Steam initialized successfully for user: {PlayerName}"); + } + catch (Exception e) + { + GD.PushError("Failed to initialize Steamworks. Is Steam running?"); + GD.PushError(e.Message); + IsSteamInitialized = false; + } + } + + public override void _Process(double delta) + { + if (IsSteamInitialized) SteamClient.RunCallbacks(); + } + + public override void _Notification(int what) + { + if (what == NotificationWMCloseRequest) + { + if (IsSteamInitialized) + { + SteamClient.Shutdown(); + } + GetTree().Quit(); + } + } + + public static void UnlockAchievement(string achievementId) + { + if (!IsSteamInitialized) + { + GD.Print($"Steam not initialized. Cannot unlock achievement '{achievementId}'."); + return; + } + + var ach = new Achievement(achievementId); + + if (ach.State) + { + GD.Print($"Achievement '{achievementId}' is already unlocked."); + return; + } + + if (ach.Trigger()) + { + SteamUserStats.StoreStats(); + GD.Print($"Successfully triggered achievement: {ach.Name} ({ach.Identifier})"); + } + else + { + GD.PrintErr($"Failed to trigger achievement: {achievementId}"); + } + } +} \ No newline at end of file diff --git a/Autoloads/SteamManager.cs.uid b/Autoloads/SteamManager.cs.uid new file mode 100644 index 0000000..af397df --- /dev/null +++ b/Autoloads/SteamManager.cs.uid @@ -0,0 +1 @@ +uid://b5abjlnbia63q diff --git a/Mr. Brick Adventures.csproj b/Mr. Brick Adventures.csproj index a4e2ad9..d48013a 100644 --- a/Mr. Brick Adventures.csproj +++ b/Mr. Brick Adventures.csproj @@ -5,6 +5,9 @@ Mr.BrickAdventures + + + \ No newline at end of file diff --git a/achievements/level_complete_1.tres b/achievements/level_complete_1.tres new file mode 100644 index 0000000..e0d386c --- /dev/null +++ b/achievements/level_complete_1.tres @@ -0,0 +1,13 @@ +[gd_resource type="Resource" script_class="AchievementResource" load_steps=3 format=3 uid="uid://3odfkm1ig5"] + +[ext_resource type="Texture2D" uid="uid://cebeyr4wnibvk" path="res://sprites/achievement.png" id="1_usw25"] +[ext_resource type="Script" uid="uid://duib5phrmpro5" path="res://scripts/Resources/AchievementResource.cs" id="2_n7ktn"] + +[resource] +script = ExtResource("2_n7ktn") +Id = "level_complete_1" +DisplayName = "Complete level 1" +Description = "" +Icon = ExtResource("1_usw25") +IsSecret = false +metadata/_custom_type_script = "uid://duib5phrmpro5" diff --git a/addons/godotsteam/godotsteam.gdextension b/addons/godotsteam/godotsteam.gdextension deleted file mode 100644 index 5917bed..0000000 --- a/addons/godotsteam/godotsteam.gdextension +++ /dev/null @@ -1,22 +0,0 @@ -[configuration] -entry_symbol = "godotsteam_init" -compatibility_minimum = "4.4" - -[libraries] -macos.debug = "res://addons/godotsteam/osx/libgodotsteam.macos.template_debug.framework" -macos.release = "res://addons/godotsteam/osx/libgodotsteam.macos.template_release.framework" -windows.debug.x86_64 = "res://addons/godotsteam/win64/libgodotsteam.windows.template_debug.x86_64.dll" -windows.debug.x86_32 = "res://addons/godotsteam/win32/libgodotsteam.windows.template_debug.x86_32.dll" -windows.release.x86_64 = "res://addons/godotsteam/win64/libgodotsteam.windows.template_release.x86_64.dll" -windows.release.x86_32 = "res://addons/godotsteam/win32/libgodotsteam.windows.template_release.x86_32.dll" -linux.debug.x86_64 = "res://addons/godotsteam/linux64/libgodotsteam.linux.template_debug.x86_64.so" -linux.debug.x86_32 = "res://addons/godotsteam/linux32/libgodotsteam.linux.template_debug.x86_32.so" -linux.release.x86_64 = "res://addons/godotsteam/linux64/libgodotsteam.linux.template_release.x86_64.so" -linux.release.x86_32 = "res://addons/godotsteam/linux32/libgodotsteam.linux.template_release.x86_32.so" - -[dependencies] -macos.universal = { "res://addons/godotsteam/osx/libsteam_api.dylib": "" } -windows.x86_64 = { "res://addons/godotsteam/win64/steam_api64.dll": "" } -windows.x86_32 = { "res://addons/godotsteam/win32/steam_api.dll": "" } -linux.x86_64 = { "res://addons/godotsteam/linux64/libsteam_api.so": "" } -linux.x86_32 = { "res://addons/godotsteam/linux32/libsteam_api.so": "" } diff --git a/addons/godotsteam/godotsteam.gdextension.uid b/addons/godotsteam/godotsteam.gdextension.uid deleted file mode 100644 index 8869f04..0000000 --- a/addons/godotsteam/godotsteam.gdextension.uid +++ /dev/null @@ -1 +0,0 @@ -uid://cbt61wgh4qe5l diff --git a/addons/godotsteam/linux32/libgodotsteam.linux.template_debug.x86_32.so b/addons/godotsteam/linux32/libgodotsteam.linux.template_debug.x86_32.so deleted file mode 100644 index 00be7c5..0000000 Binary files a/addons/godotsteam/linux32/libgodotsteam.linux.template_debug.x86_32.so and /dev/null differ diff --git a/addons/godotsteam/linux32/libgodotsteam.linux.template_release.x86_32.so b/addons/godotsteam/linux32/libgodotsteam.linux.template_release.x86_32.so deleted file mode 100644 index 658694b..0000000 Binary files a/addons/godotsteam/linux32/libgodotsteam.linux.template_release.x86_32.so and /dev/null differ diff --git a/addons/godotsteam/linux32/libsteam_api.so b/addons/godotsteam/linux32/libsteam_api.so deleted file mode 100644 index 2d9e8a7..0000000 Binary files a/addons/godotsteam/linux32/libsteam_api.so and /dev/null differ diff --git a/addons/godotsteam/linux64/libgodotsteam.linux.template_debug.x86_64.so b/addons/godotsteam/linux64/libgodotsteam.linux.template_debug.x86_64.so deleted file mode 100644 index 045b00d..0000000 Binary files a/addons/godotsteam/linux64/libgodotsteam.linux.template_debug.x86_64.so and /dev/null differ diff --git a/addons/godotsteam/linux64/libgodotsteam.linux.template_release.x86_64.so b/addons/godotsteam/linux64/libgodotsteam.linux.template_release.x86_64.so deleted file mode 100644 index b273ec7..0000000 Binary files a/addons/godotsteam/linux64/libgodotsteam.linux.template_release.x86_64.so and /dev/null differ diff --git a/addons/godotsteam/linux64/libsteam_api.so b/addons/godotsteam/linux64/libsteam_api.so deleted file mode 100644 index 8783570..0000000 Binary files a/addons/godotsteam/linux64/libsteam_api.so and /dev/null differ diff --git a/addons/godotsteam/osx/libgodotsteam.macos.template_debug.framework/Resources/Info.plist b/addons/godotsteam/osx/libgodotsteam.macos.template_debug.framework/Resources/Info.plist deleted file mode 100644 index 68caf2b..0000000 --- a/addons/godotsteam/osx/libgodotsteam.macos.template_debug.framework/Resources/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleExecutable - libgodotsteam.debug - CFBundleIdentifier - org.godotsteam.godotsteam - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - libgodotsteam.debug - CFBundlePackageType - FMWK - CFBundleShortVersionString - 4.15 - CFBundleSupportedPlatforms - - MacOSX - - CFBundleVersion - 4.15 - LSMinimumSystemVersion - 10.12 - - \ No newline at end of file diff --git a/addons/godotsteam/osx/libgodotsteam.macos.template_debug.framework/libgodotsteam.macos.template_debug b/addons/godotsteam/osx/libgodotsteam.macos.template_debug.framework/libgodotsteam.macos.template_debug deleted file mode 100644 index 8a8b2b7..0000000 Binary files a/addons/godotsteam/osx/libgodotsteam.macos.template_debug.framework/libgodotsteam.macos.template_debug and /dev/null differ diff --git a/addons/godotsteam/osx/libgodotsteam.macos.template_debug.framework/libsteam_api.dylib b/addons/godotsteam/osx/libgodotsteam.macos.template_debug.framework/libsteam_api.dylib deleted file mode 100644 index c493b2b..0000000 Binary files a/addons/godotsteam/osx/libgodotsteam.macos.template_debug.framework/libsteam_api.dylib and /dev/null differ diff --git a/addons/godotsteam/osx/libgodotsteam.macos.template_release.framework/Resources/Info.plist b/addons/godotsteam/osx/libgodotsteam.macos.template_release.framework/Resources/Info.plist deleted file mode 100644 index e3e8dac..0000000 --- a/addons/godotsteam/osx/libgodotsteam.macos.template_release.framework/Resources/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleExecutable - libgodotsteam - CFBundleIdentifier - org.godotsteam.godotsteam - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - libgodotsteam - CFBundlePackageType - FMWK - CFBundleShortVersionString - 4.15 - CFBundleSupportedPlatforms - - MacOSX - - CFBundleVersion - 4.15 - LSMinimumSystemVersion - 10.12 - - \ No newline at end of file diff --git a/addons/godotsteam/osx/libgodotsteam.macos.template_release.framework/libgodotsteam.macos.template_release b/addons/godotsteam/osx/libgodotsteam.macos.template_release.framework/libgodotsteam.macos.template_release deleted file mode 100644 index ce91b3e..0000000 Binary files a/addons/godotsteam/osx/libgodotsteam.macos.template_release.framework/libgodotsteam.macos.template_release and /dev/null differ diff --git a/addons/godotsteam/osx/libgodotsteam.macos.template_release.framework/libsteam_api.dylib b/addons/godotsteam/osx/libgodotsteam.macos.template_release.framework/libsteam_api.dylib deleted file mode 100644 index c493b2b..0000000 Binary files a/addons/godotsteam/osx/libgodotsteam.macos.template_release.framework/libsteam_api.dylib and /dev/null differ diff --git a/addons/godotsteam/osx/libsteam_api.dylib b/addons/godotsteam/osx/libsteam_api.dylib deleted file mode 100644 index c493b2b..0000000 Binary files a/addons/godotsteam/osx/libsteam_api.dylib and /dev/null differ diff --git a/addons/godotsteam/win32/libgodotsteam.windows.template_debug.x86_32.dll b/addons/godotsteam/win32/libgodotsteam.windows.template_debug.x86_32.dll deleted file mode 100644 index cebcc9b..0000000 Binary files a/addons/godotsteam/win32/libgodotsteam.windows.template_debug.x86_32.dll and /dev/null differ diff --git a/addons/godotsteam/win32/libgodotsteam.windows.template_release.x86_32.dll b/addons/godotsteam/win32/libgodotsteam.windows.template_release.x86_32.dll deleted file mode 100644 index 21c3a1e..0000000 Binary files a/addons/godotsteam/win32/libgodotsteam.windows.template_release.x86_32.dll and /dev/null differ diff --git a/addons/godotsteam/win32/steam_api.dll b/addons/godotsteam/win32/steam_api.dll deleted file mode 100644 index 2372ab1..0000000 Binary files a/addons/godotsteam/win32/steam_api.dll and /dev/null differ diff --git a/addons/godotsteam/win64/libgodotsteam.windows.template_debug.x86_64.dll b/addons/godotsteam/win64/libgodotsteam.windows.template_debug.x86_64.dll deleted file mode 100644 index 3d02848..0000000 Binary files a/addons/godotsteam/win64/libgodotsteam.windows.template_debug.x86_64.dll and /dev/null differ diff --git a/addons/godotsteam/win64/libgodotsteam.windows.template_release.x86_64.dll b/addons/godotsteam/win64/libgodotsteam.windows.template_release.x86_64.dll deleted file mode 100644 index 6bb49b3..0000000 Binary files a/addons/godotsteam/win64/libgodotsteam.windows.template_release.x86_64.dll and /dev/null differ diff --git a/addons/godotsteam/win64/steam_api64.dll b/addons/godotsteam/win64/steam_api64.dll deleted file mode 100644 index 6d11825..0000000 Binary files a/addons/godotsteam/win64/steam_api64.dll and /dev/null differ diff --git a/export_presets.cfg b/export_presets.cfg index 11b7d26..feb61c0 100644 --- a/export_presets.cfg +++ b/export_presets.cfg @@ -6,11 +6,10 @@ runnable=true advanced_options=true dedicated_server=false custom_features="" -export_filter="scenes" -export_files=PackedStringArray("res://scenes/test.tscn", "res://objects/game_manager.tscn") +export_filter="all_resources" include_filter="" exclude_filter="" -export_path="builds/optimized_for_size/Mr. Brick Adventures.exe" +export_path="builds/windows/Mr. Brick Adventures.exe" patches=PackedStringArray() encryption_include_filters="" encryption_exclude_filters="" @@ -22,7 +21,7 @@ script_export_mode=2 [preset.0.options] custom_template/debug="" -custom_template/release="D:/Dev/godot/bin/godot.windows.template_release.x86_64.exe" +custom_template/release="" debug/export_console_wrapper=1 binary_format/embed_pck=true texture_format/s3tc_bptc=true @@ -65,6 +64,9 @@ Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorActi ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue Remove-Item -Recurse -Force '{temp_dir}'" +dotnet/include_scripts_content=false +dotnet/include_debug_symbols=true +dotnet/embed_build_outputs=false [preset.1] @@ -109,13 +111,16 @@ progressive_web_app/icon_144x144="" progressive_web_app/icon_180x180="" progressive_web_app/icon_512x512="" progressive_web_app/background_color=Color(0, 0, 0, 1) +dotnet/include_scripts_content=false +dotnet/include_debug_symbols=true +dotnet/embed_build_outputs=false [preset.2] name="Linux" platform="Linux" runnable=true -advanced_options=false +advanced_options=true dedicated_server=false custom_features="" export_filter="all_resources" @@ -151,3 +156,6 @@ unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\" ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\") rm -rf \"{temp_dir}\"" +dotnet/include_scripts_content=false +dotnet/include_debug_symbols=true +dotnet/embed_build_outputs=false diff --git a/objects/achievement_manager.tscn b/objects/achievement_manager.tscn new file mode 100644 index 0000000..a7681b5 --- /dev/null +++ b/objects/achievement_manager.tscn @@ -0,0 +1,8 @@ +[gd_scene load_steps=3 format=3 uid="uid://bjdhgdolcxxbq"] + +[ext_resource type="Script" uid="uid://c4vvuqnx5y33u" path="res://Autoloads/AchievementManager.cs" id="1_lomle"] +[ext_resource type="PackedScene" uid="uid://tgaadui3lvdc" path="res://objects/ui/achievement_popup.tscn" id="2_k3wdv"] + +[node name="AchievementManager" type="Node"] +script = ExtResource("1_lomle") +AchievementPopupScene = ExtResource("2_k3wdv") diff --git a/objects/achievements.tscn b/objects/achievements.tscn deleted file mode 100644 index 85d568b..0000000 --- a/objects/achievements.tscn +++ /dev/null @@ -1,6 +0,0 @@ -[gd_scene load_steps=2 format=3 uid="uid://rnpsa2u74nio"] - -[ext_resource type="Script" uid="uid://deguukal87gcb" path="res://scripts/achievements.gd" id="1_1itsx"] - -[node name="Achievements" type="Node"] -script = ExtResource("1_1itsx") diff --git a/objects/entities/exit_level.tscn b/objects/entities/exit_level.tscn index f0e8963..7f1a92d 100644 --- a/objects/entities/exit_level.tscn +++ b/objects/entities/exit_level.tscn @@ -8,9 +8,12 @@ [sub_resource type="RectangleShape2D" id="RectangleShape2D_yfu6m"] size = Vector2(28, 32) -[node name="ExitLevel" type="Area2D"] +[node name="ExitLevel" type="Area2D" node_paths=PackedStringArray("DoorSprite")] collision_layer = 0 collision_mask = 4 +script = ExtResource("4_06sog") +DoorSprite = NodePath("Sprite2D") +OpenedDoorFrame = 88 [node name="Sprite2D" type="Sprite2D" parent="."] position = Vector2(0, -8) @@ -27,17 +30,8 @@ shape = SubResource("RectangleShape2D_yfu6m") [node name="RequirementComponent" type="Node" parent="."] script = ExtResource("2_ed7mh") RequirementType = 1 -metadata/_custom_type_script = "uid://cmh8k0rdsyh7j" [node name="UnlockOnRequirementComponent" type="Node" parent="." node_paths=PackedStringArray("RequirementComponent", "UnlockTarget")] script = ExtResource("3_ed7mh") RequirementComponent = NodePath("../RequirementComponent") -UnlockTarget = NodePath("../ExitDoorComponent") -metadata/_custom_type_script = "uid://c8xhgkg8gcqu6" - -[node name="ExitDoorComponent" type="Node" parent="." node_paths=PackedStringArray("ExitArea", "DoorSprite")] -script = ExtResource("4_06sog") -ExitArea = NodePath("..") -DoorSprite = NodePath("../Sprite2D") -OpenedDoorFrame = 88 -metadata/_custom_type_script = "uid://bwamqffvpa452" +UnlockTarget = NodePath("..") diff --git a/objects/steam_integration.tscn b/objects/steam_integration.tscn deleted file mode 100644 index 2cd65ec..0000000 --- a/objects/steam_integration.tscn +++ /dev/null @@ -1,6 +0,0 @@ -[gd_scene load_steps=2 format=3 uid="uid://cyvcg2re4qifd"] - -[ext_resource type="Script" uid="uid://f4y8evisxgnc" path="res://scripts/steam_integration.gd" id="1_ds8p3"] - -[node name="SteamIntegration" type="Node"] -script = ExtResource("1_ds8p3") diff --git a/objects/ui/achievement_popup.tscn b/objects/ui/achievement_popup.tscn new file mode 100644 index 0000000..85bebd6 --- /dev/null +++ b/objects/ui/achievement_popup.tscn @@ -0,0 +1,80 @@ +[gd_scene load_steps=4 format=3 uid="uid://tgaadui3lvdc"] + +[ext_resource type="Script" uid="uid://cejjan582nhfn" path="res://scripts/UI/AchievementPopup.cs" id="1_8pd1y"] +[ext_resource type="Texture2D" uid="uid://cebeyr4wnibvk" path="res://sprites/achievement.png" id="2_1wq1d"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_enx8n"] +bg_color = Color(0, 0, 0, 1) + +[node name="AchievementPopup" type="CanvasLayer" node_paths=PackedStringArray("TitleLabel", "DescriptionLabel", "IconRect")] +script = ExtResource("1_8pd1y") +TitleLabel = NodePath("Container/Panel/MarginContainer/VBoxContainer/Title") +DescriptionLabel = NodePath("Container/Panel/MarginContainer/VBoxContainer/Description") +IconRect = NodePath("Container/Panel/MarginContainer/VBoxContainer/TextureRect") +metadata/_custom_type_script = "uid://cejjan582nhfn" + +[node name="Container" type="Control" parent="."] +custom_minimum_size = Vector2(200, 120) +layout_mode = 3 +anchors_preset = 3 +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -200.0 +offset_top = -120.0 +grow_horizontal = 0 +grow_vertical = 0 + +[node name="Panel" type="Panel" parent="Container"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_enx8n") + +[node name="MarginContainer" type="MarginContainer" parent="Container/Panel"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/margin_left = 4 +theme_override_constants/margin_top = 4 +theme_override_constants/margin_right = 4 +theme_override_constants/margin_bottom = 4 + +[node name="VBoxContainer" type="VBoxContainer" parent="Container/Panel/MarginContainer"] +layout_mode = 2 + +[node name="Title" type="Label" parent="Container/Panel/MarginContainer/VBoxContainer"] +custom_minimum_size = Vector2(120, 30) +layout_mode = 2 +theme_override_font_sizes/font_size = 16 +text = "saaaaaaaaaaaaaaaaaaa" +autowrap_mode = 3 + +[node name="Description" type="Label" parent="Container/Panel/MarginContainer/VBoxContainer"] +custom_minimum_size = Vector2(120, 40) +layout_mode = 2 +theme_override_colors/font_color = Color(0.7, 0.7, 0.7, 1) +text = "aaaaaaaaaaaaaaaaa" +autowrap_mode = 3 + +[node name="Control" type="Control" parent="Container/Panel/MarginContainer/VBoxContainer"] +visible = false +layout_mode = 2 +size_flags_vertical = 3 + +[node name="TextureRect" type="TextureRect" parent="Container/Panel/MarginContainer/VBoxContainer"] +visible = false +custom_minimum_size = Vector2(128, 32) +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 8 +texture = ExtResource("2_1wq1d") +expand_mode = 4 +stretch_mode = 5 diff --git a/project.godot b/project.godot index dd84546..e7dceb7 100644 --- a/project.godot +++ b/project.godot @@ -38,6 +38,8 @@ SaveSystem="*res://Autoloads/SaveSystem.cs" ConsoleManager="*res://Autoloads/ConsoleManager.cs" LimboConsole="*res://addons/limbo_console/limbo_console.gd" DialogueManager="*res://addons/dialogue_manager/dialogue_manager.gd" +SteamManager="*res://Autoloads/SteamManager.cs" +AchievementManager="*res://objects/achievement_manager.tscn" [debug] diff --git a/scenes/level_forest_5.tscn b/scenes/level_forest_5.tscn deleted file mode 100644 index 8937784..0000000 --- a/scenes/level_forest_5.tscn +++ /dev/null @@ -1,131 +0,0 @@ -[gd_scene load_steps=21 format=4 uid="uid://dagpmlgvr262d"] - -[ext_resource type="PackedScene" uid="uid://bqi5s710xb1ju" path="res://objects/entities/brick_player.tscn" id="1_ovh7x"] -[ext_resource type="PackedScene" uid="uid://cawlpch2lk3a2" path="res://objects/level/world_environment.tscn" id="2_5g07y"] -[ext_resource type="PackedScene" uid="uid://6foggu31cu14" path="res://objects/level/ui_layer.tscn" id="3_bprg7"] -[ext_resource type="Resource" uid="uid://cqtalsov2bkpo" path="res://resources/levels/village/village_1.tres" id="4_h4xa7"] -[ext_resource type="PackedScene" uid="uid://cywsu7yrtjdog" path="res://objects/level/global_light.tscn" id="5_dwr4o"] -[ext_resource type="PackedScene" uid="uid://cb0mnye1ki5a6" path="res://objects/level/camera_2d.tscn" id="6_nxlss"] -[ext_resource type="Script" uid="uid://d23haq52m7ulv" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd" id="7_ic31u"] -[ext_resource type="Script" uid="uid://ccfft4b8rwgbo" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="8_00nug"] -[ext_resource type="TileSet" uid="uid://dua4ns4tdknd1" path="res://resources/tilesets/village/background_tileset.tres" id="9_5fruj"] -[ext_resource type="TileSet" uid="uid://cu2sx7qigrqnv" path="res://resources/tilesets/village/terain.tres" id="10_ykq8c"] -[ext_resource type="TileSet" uid="uid://bc5a20s6kuy8e" path="res://resources/tilesets/village/entities.tres" id="11_ln8vx"] -[ext_resource type="TileSet" uid="uid://bbppo0irxdmqy" path="res://resources/tilesets/village/foreground.tres" id="12_juomk"] -[ext_resource type="Script" uid="uid://8r1y8elyw7kt" path="res://scripts/console_management.gd" id="13_wxe3r"] -[ext_resource type="PackedScene" uid="uid://bqom4cm7r18db" path="res://objects/entities/killzone.tscn" id="14_o0rcr"] - -[sub_resource type="Gradient" id="Gradient_qb72p"] -colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0) - -[sub_resource type="GradientTexture1D" id="GradientTexture1D_f1fvy"] -gradient = SubResource("Gradient_qb72p") - -[sub_resource type="Curve" id="Curve_82d6e"] -_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0] -point_count = 2 - -[sub_resource type="CurveTexture" id="CurveTexture_7b7mt"] -curve = SubResource("Curve_82d6e") - -[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_lgb3u"] -resource_local_to_scene = true -lifetime_randomness = 1.0 -particle_flag_disable_z = true -emission_shape = 1 -emission_sphere_radius = 8.0 -direction = Vector3(0.1, -0.5, 0) -initial_velocity_min = 200.0 -initial_velocity_max = 400.0 -gravity = Vector3(0, 80, 0) -damping_min = 400.0 -damping_max = 800.0 -scale_max = 3.0 -scale_curve = SubResource("CurveTexture_7b7mt") -color = Color(0.764706, 0.443137, 0, 1) -color_ramp = SubResource("GradientTexture1D_f1fvy") - -[sub_resource type="Resource" id="Resource_0nwt7"] -script = ExtResource("8_00nug") -duration = 1.0 -transition = 0 -ease = 2 - -[node name="World" type="Node2D"] - -[node name="Brick Player" parent="." instance=ExtResource("1_ovh7x")] - -[node name="HitParticles" parent="Brick Player" index="27"] -process_material = SubResource("ParticleProcessMaterial_lgb3u") - -[node name="WorldEnvironment" parent="." instance=ExtResource("2_5g07y")] - -[node name="UI Layer" parent="." instance=ExtResource("3_bprg7")] - -[node name="HUD" parent="UI Layer" index="0" node_paths=PackedStringArray("player_health")] -player_health = NodePath("../../Brick Player/HealthComponent") - -[node name="DeathScreen" parent="UI Layer" index="1" node_paths=PackedStringArray("nodes_to_disable")] -current_level = ExtResource("4_h4xa7") -nodes_to_disable = [NodePath("../../Brick Player")] - -[node name="Marketplace" parent="UI Layer" index="3" node_paths=PackedStringArray("skill_unlocker", "components_to_disable")] -skill_unlocker = NodePath("../../Brick Player/SkillUnlockerComponent") -components_to_disable = [NodePath("../../Brick Player")] - -[node name="Global Light" parent="." instance=ExtResource("5_dwr4o")] - -[node name="Camera2D" parent="." instance=ExtResource("6_nxlss")] -physics_interpolation_mode = 1 -process_callback = 0 -limit_left = -10000000 -limit_top = -10000000 -limit_right = 10000000 -limit_bottom = 10000000 - -[node name="VillageParallaxBackground" parent="Camera2D" index="2"] -visible = false - -[node name="ParallaxBackground" parent="Camera2D" index="3"] -visible = true - -[node name="PhantomCamera2D" type="Node2D" parent="." node_paths=PackedStringArray("follow_target")] -top_level = true -script = ExtResource("7_ic31u") -follow_mode = 2 -follow_target = NodePath("../Brick Player") -snap_to_pixel = true -tween_resource = SubResource("Resource_0nwt7") -draw_limits = true -metadata/_custom_type_script = "uid://d23haq52m7ulv" - -[node name="Background Layer" type="TileMapLayer" parent="."] -tile_set = ExtResource("9_5fruj") - -[node name="Terrain Layer" type="TileMapLayer" parent="."] -tile_map_data = PackedByteArray("AAAjABMAAAADAAQAAAAjABIAAAAEAAIAAAAjABEAAAAEAAIAAAAjABAAAAAEAAIAAAAjAA8AAAAEAAIAAAAjAA4AAAAEAAIAAAAjAA0AAAAEAAIAAAAjAAwAAAAEAAIAAAAjAAsAAAAEAAIAAAAjAAoAAAAEAAIAAAAjAAkAAAAEAAIAAAAjAAgAAAAEAAIAAAAjAAcAAAAEAAIAAAAjAAYAAAAEAAIAAAAjAAUAAAAEAAIAAAAjAAQAAAAEAAIAAAAjAAMAAAAEAAIAAAAjAAIAAAADAAAAAAAiABMAAAACAAQAAAAiABIAAAACAAEAAAAiABEAAAABAAIAAAAiABAAAAACAAMAAAAiAA8AAAABAAIAAAAiAA4AAAACAAMAAAAiAA0AAAACAAIAAAAiAAwAAAACAAIAAAAiAAsAAAACAAIAAAAiAAoAAAABAAIAAAAiAAkAAAADAAIAAAAiAAgAAAACAAMAAAAiAAcAAAABAAIAAAAiAAYAAAACAAMAAAAiAAUAAAABAAIAAAAiAAQAAAACAAIAAAAiAAMAAAABAAIAAAAiAAIAAAACAAAAAAAhABMAAAACAAQAAAAhABIAAAACAAMAAAAhABEAAAABAAIAAAAhABAAAAADAAIAAAAhAA8AAAACAAEAAAAhAA4AAAACAAEAAAAhAA0AAAABAAIAAAAhAAwAAAACAAMAAAAhAAsAAAACAAMAAAAhAAoAAAACAAMAAAAhAAkAAAACAAIAAAAhAAgAAAADAAIAAAAhAAcAAAACAAEAAAAhAAYAAAACAAEAAAAhAAUAAAABAAIAAAAhAAQAAAACAAIAAAAhAAMAAAACAAMAAAAhAAIAAAACAAAAAAAgABMAAAACAAQAAAAgABIAAAADAAIAAAAgABEAAAABAAIAAAAgABAAAAADAAIAAAAgAA8AAAADAAIAAAAgAA4AAAADAAIAAAAgAA0AAAADAAIAAAAgAAwAAAACAAEAAAAgAAsAAAACAAMAAAAgAAoAAAACAAMAAAAgAAkAAAADAAIAAAAgAAgAAAACAAIAAAAgAAcAAAABAAIAAAAgAAYAAAADAAIAAAAgAAUAAAACAAIAAAAgAAQAAAACAAEAAAAgAAMAAAADAAIAAAAgAAIAAAACAAAAAAAfABMAAAACAAQAAAAfABIAAAABAAIAAAAfABEAAAADAAIAAAAfABAAAAACAAEAAAAfAA8AAAABAAIAAAAfAA4AAAACAAEAAAAfAA0AAAACAAIAAAAfAAwAAAABAAIAAAAfAAsAAAACAAIAAAAfAAoAAAACAAMAAAAfAAkAAAADAAIAAAAfAAgAAAACAAEAAAAfAAcAAAABAAIAAAAfAAYAAAACAAIAAAAfAAUAAAACAAEAAAAfAAQAAAABAAIAAAAfAAMAAAABAAIAAAAfAAIAAAACAAAAAAAeABMAAAACAAQAAAAeABIAAAACAAMAAAAeABEAAAACAAIAAAAeABAAAAADAAIAAAAeAA8AAAACAAIAAAAeAA4AAAADAAIAAAAeAA0AAAACAAEAAAAeAAwAAAACAAIAAAAeAAsAAAACAAMAAAAeAAoAAAABAAIAAAAeAAkAAAACAAIAAAAeAAgAAAACAAEAAAAeAAcAAAABAAIAAAAeAAYAAAACAAEAAAAeAAUAAAABAAIAAAAeAAQAAAADAAIAAAAeAAMAAAADAAIAAAAeAAIAAAACAAAAAAAdABMAAAACAAQAAAAdABIAAAACAAIAAAAdABEAAAACAAEAAAAdABAAAAACAAIAAAAdAA8AAAACAAIAAAAdAA4AAAACAAIAAAAdAA0AAAADAAIAAAAdAAwAAAACAAMAAAAdAAsAAAADAAIAAAAdAAoAAAACAAMAAAAdAAkAAAADAAIAAAAdAAgAAAABAAIAAAAdAAcAAAABAAIAAAAdAAYAAAADAAIAAAAdAAUAAAACAAEAAAAdAAQAAAACAAIAAAAdAAMAAAABAAIAAAAdAAIAAAACAAAAAAAcABMAAAACAAQAAAAcABIAAAACAAMAAAAcABEAAAACAAMAAAAcABAAAAABAAIAAAAcAA8AAAACAAIAAAAcAA4AAAACAAIAAAAcAA0AAAADAAIAAAAcAAwAAAACAAEAAAAcAAsAAAACAAIAAAAcAAoAAAACAAMAAAAcAAkAAAADAAIAAAAcAAgAAAADAAIAAAAcAAcAAAACAAMAAAAcAAYAAAABAAIAAAAcAAUAAAACAAIAAAAcAAQAAAACAAEAAAAcAAMAAAACAAIAAAAcAAIAAAACAAAAAAAbABMAAAACAAQAAAAbABIAAAACAAIAAAAbABEAAAABAAIAAAAbABAAAAACAAIAAAAbAA8AAAABAAIAAAAbAA4AAAACAAEAAAAbAA0AAAACAAMAAAAbAAwAAAACAAMAAAAbAAsAAAACAAMAAAAbAAoAAAACAAIAAAAbAAkAAAACAAIAAAAbAAgAAAACAAEAAAAbAAcAAAABAAIAAAAbAAYAAAACAAIAAAAbAAUAAAABAAIAAAAbAAQAAAABAAIAAAAbAAMAAAACAAMAAAAbAAIAAAACAAAAAAAaABMAAAACAAQAAAAaABIAAAACAAEAAAAaABEAAAACAAMAAAAaABAAAAACAAIAAAAaAA8AAAABAAIAAAAaAA4AAAACAAEAAAAaAA0AAAADAAIAAAAaAAwAAAABAAIAAAAaAAsAAAACAAEAAAAaAAoAAAACAAIAAAAaAAkAAAACAAMAAAAaAAgAAAACAAEAAAAaAAcAAAABAAIAAAAaAAYAAAACAAIAAAAaAAUAAAADAAIAAAAaAAQAAAACAAEAAAAaAAMAAAABAAIAAAAaAAIAAAACAAAAAAAZABMAAAACAAQAAAAZABIAAAACAAEAAAAZABEAAAACAAEAAAAZABAAAAADAAIAAAAZAA8AAAACAAEAAAAZAA4AAAABAAIAAAAZAA0AAAACAAEAAAAZAAwAAAACAAIAAAAZAAsAAAACAAEAAAAZAAoAAAACAAEAAAAZAAkAAAACAAEAAAAZAAgAAAABAAIAAAAZAAcAAAACAAMAAAAZAAYAAAACAAEAAAAZAAUAAAACAAMAAAAZAAQAAAACAAMAAAAZAAMAAAACAAIAAAAZAAIAAAACAAAAAAAYABMAAAACAAQAAAAYABIAAAADAAIAAAAYABEAAAACAAIAAAAYABAAAAACAAEAAAAYAA8AAAACAAMAAAAYAA4AAAABAAIAAAAYAA0AAAACAAEAAAAYAAwAAAACAAIAAAAYAAsAAAACAAMAAAAYAAoAAAADAAIAAAAYAAkAAAACAAIAAAAYAAgAAAACAAEAAAAYAAcAAAABAAIAAAAYAAYAAAACAAEAAAAYAAUAAAACAAEAAAAYAAQAAAACAAMAAAAYAAMAAAACAAEAAAAYAAIAAAACAAAAAAAXABMAAAACAAQAAAAXABIAAAACAAMAAAAXABEAAAADAAIAAAAXABAAAAABAAIAAAAXAA8AAAACAAEAAAAXAA4AAAADAAIAAAAXAA0AAAADAAIAAAAXAAwAAAABAAIAAAAXAAsAAAADAAIAAAAXAAoAAAABAAIAAAAXAAkAAAADAAIAAAAXAAgAAAACAAEAAAAXAAcAAAADAAIAAAAXAAYAAAACAAMAAAAXAAUAAAACAAEAAAAXAAQAAAADAAIAAAAXAAMAAAACAAEAAAAXAAIAAAACAAAAAAAWABMAAAACAAQAAAAWABIAAAACAAMAAAAWABEAAAADAAIAAAAWABAAAAABAAIAAAAWAA8AAAADAAIAAAAWAA4AAAACAAIAAAAWAA0AAAACAAEAAAAWAAwAAAACAAMAAAAWAAsAAAACAAMAAAAWAAoAAAACAAEAAAAWAAkAAAACAAIAAAAWAAgAAAACAAMAAAAWAAcAAAABAAIAAAAWAAYAAAACAAEAAAAWAAUAAAACAAEAAAAWAAQAAAACAAIAAAAWAAMAAAADAAIAAAAWAAIAAAACAAAAAAAVABMAAAACAAQAAAAVABIAAAABAAIAAAAVABEAAAABAAIAAAAVABAAAAACAAIAAAAVAA8AAAABAAIAAAAVAA4AAAACAAMAAAAVAA0AAAADAAIAAAAVAAwAAAACAAIAAAAVAAsAAAABAAIAAAAVAAoAAAABAAIAAAAVAAkAAAABAAIAAAAVAAgAAAACAAEAAAAVAAcAAAABAAIAAAAVAAYAAAACAAEAAAAVAAUAAAACAAMAAAAVAAQAAAACAAIAAAAVAAMAAAADAAIAAAAVAAIAAAACAAAAAAAUABMAAAACAAQAAAAUABIAAAADAAIAAAAUABEAAAACAAEAAAAUABAAAAACAAIAAAAUAA8AAAACAAEAAAAUAA4AAAACAAMAAAAUAA0AAAADAAIAAAAUAAwAAAACAAIAAAAUAAsAAAADAAIAAAAUAAoAAAADAAIAAAAUAAkAAAADAAIAAAAUAAgAAAABAAIAAAAUAAcAAAABAAIAAAAUAAYAAAABAAIAAAAUAAUAAAADAAIAAAAUAAQAAAACAAIAAAAUAAMAAAACAAIAAAAUAAIAAAACAAAAAAATABMAAAACAAQAAAATABIAAAACAAIAAAATABEAAAACAAMAAAATABAAAAACAAEAAAATAA8AAAACAAMAAAATAA4AAAACAAIAAAATAA0AAAACAAEAAAATAAwAAAADAAIAAAATAAsAAAABAAIAAAATAAoAAAACAAMAAAATAAkAAAACAAEAAAATAAgAAAADAAIAAAATAAcAAAABAAIAAAATAAYAAAACAAMAAAATAAUAAAACAAIAAAATAAQAAAADAAIAAAATAAMAAAADAAIAAAATAAIAAAACAAAAAAASABMAAAACAAQAAAASABIAAAACAAIAAAASABEAAAADAAIAAAASABAAAAACAAIAAAASAA8AAAACAAMAAAASAA4AAAACAAMAAAASAA0AAAACAAEAAAASAAwAAAACAAMAAAASAAsAAAACAAEAAAASAAoAAAADAAIAAAASAAkAAAACAAIAAAASAAgAAAACAAEAAAASAAcAAAACAAMAAAASAAYAAAACAAIAAAASAAUAAAACAAEAAAASAAQAAAABAAIAAAASAAMAAAADAAIAAAASAAIAAAACAAAAAAARABMAAAACAAQAAAARABIAAAACAAIAAAARABEAAAACAAMAAAARABAAAAACAAIAAAARAA8AAAACAAIAAAARAA4AAAACAAEAAAARAA0AAAACAAEAAAARAAwAAAACAAIAAAARAAsAAAACAAEAAAARAAoAAAACAAMAAAARAAkAAAADAAIAAAARAAgAAAABAAIAAAARAAcAAAACAAIAAAARAAYAAAABAAIAAAARAAUAAAACAAIAAAARAAQAAAABAAIAAAARAAMAAAADAAIAAAARAAIAAAACAAAAAAAQABMAAAACAAQAAAAQABIAAAADAAIAAAAQABEAAAACAAMAAAAQABAAAAADAAIAAAAQAAkAAAADAAIAAAAQAAgAAAACAAEAAAAQAAcAAAABAAIAAAAQAAYAAAADAAIAAAAQAAUAAAACAAIAAAAQAAQAAAACAAIAAAAQAAMAAAACAAMAAAAQAAIAAAACAAAAAAAPABMAAAACAAQAAAAPABIAAAACAAMAAAAPABEAAAADAAIAAAAPABAAAAACAAEAAAAPAAkAAAADAAIAAAAPAAgAAAACAAEAAAAPAAcAAAACAAMAAAAPAAYAAAACAAEAAAAPAAUAAAACAAIAAAAPAAQAAAADAAIAAAAPAAMAAAADAAIAAAAPAAIAAAACAAAAAAAOABMAAAACAAQAAAAOABIAAAABAAIAAAAOABEAAAACAAEAAAAOABAAAAACAAIAAAAOAAkAAAACAAIAAAAOAAgAAAACAAMAAAAOAAcAAAADAAIAAAAOAAYAAAACAAMAAAAOAAUAAAACAAMAAAAOAAQAAAACAAMAAAAOAAMAAAACAAMAAAAOAAIAAAACAAAAAAANABMAAAACAAQAAAANABIAAAACAAMAAAANABEAAAACAAEAAAANABAAAAABAAIAAAANAAkAAAABAAIAAAANAAgAAAADAAIAAAANAAcAAAADAAIAAAANAAYAAAACAAMAAAANAAUAAAACAAEAAAANAAQAAAACAAIAAAANAAMAAAACAAMAAAANAAIAAAACAAAAAAAMABMAAAACAAQAAAAMABIAAAACAAEAAAAMABEAAAACAAIAAAAMABAAAAADAAIAAAAMAAkAAAABAAIAAAAMAAgAAAABAAIAAAAMAAcAAAABAAIAAAAMAAYAAAADAAIAAAAMAAUAAAACAAEAAAAMAAQAAAADAAIAAAAMAAMAAAACAAIAAAAMAAIAAAACAAAAAAALABMAAAACAAQAAAALABIAAAABAAIAAAALABEAAAADAAIAAAALABAAAAACAAEAAAALAAkAAAABAAIAAAALAAgAAAADAAIAAAALAAcAAAACAAMAAAALAAYAAAABAAIAAAALAAUAAAADAAIAAAALAAQAAAACAAIAAAALAAMAAAACAAMAAAALAAIAAAACAAAAAAAKABMAAAACAAQAAAAKABIAAAADAAIAAAAKABEAAAACAAMAAAAKABAAAAACAAIAAAAKAAkAAAACAAMAAAAKAAgAAAADAAIAAAAKAAcAAAABAAIAAAAKAAYAAAABAAIAAAAKAAUAAAACAAIAAAAKAAQAAAACAAIAAAAKAAMAAAACAAIAAAAKAAIAAAACAAAAAAAJABMAAAACAAQAAAAJABIAAAABAAIAAAAJABEAAAACAAEAAAAJABAAAAACAAMAAAAJAAcAAAACAAIAAAAJAAYAAAACAAIAAAAJAAUAAAACAAIAAAAJAAQAAAACAAMAAAAJAAMAAAADAAIAAAAJAAIAAAACAAAAAAAIABMAAAACAAQAAAAIABIAAAACAAEAAAAIABEAAAADAAIAAAAIABAAAAACAAEAAAAIAAcAAAADAAIAAAAIAAYAAAACAAMAAAAIAAUAAAADAAIAAAAIAAQAAAACAAMAAAAIAAMAAAABAAIAAAAIAAIAAAACAAAAAAAHABMAAAACAAQAAAAHABIAAAACAAEAAAAHABEAAAABAAIAAAAHABAAAAACAAMAAAAHAAcAAAACAAMAAAAHAAYAAAACAAEAAAAHAAUAAAACAAEAAAAHAAQAAAACAAMAAAAHAAMAAAACAAEAAAAHAAIAAAACAAAAAAAGABMAAAACAAQAAAAGABIAAAACAAIAAAAGABEAAAACAAEAAAAGABAAAAADAAIAAAAGAAcAAAABAAIAAAAGAAYAAAADAAIAAAAGAAUAAAACAAMAAAAGAAQAAAACAAEAAAAGAAMAAAACAAMAAAAGAAIAAAACAAAAAAAFABMAAAACAAQAAAAFABIAAAACAAIAAAAFABEAAAACAAEAAAAFABAAAAACAAIAAAAFAAcAAAADAAIAAAAFAAYAAAADAAIAAAAFAAUAAAACAAMAAAAFAAQAAAABAAIAAAAFAAMAAAACAAIAAAAFAAIAAAACAAAAAAAEABMAAAACAAQAAAAEABIAAAACAAMAAAAEABEAAAACAAIAAAAEABAAAAABAAIAAAAEAAcAAAABAAIAAAAEAAYAAAACAAIAAAAEAAUAAAACAAMAAAAEAAQAAAACAAIAAAAEAAMAAAACAAMAAAAEAAIAAAACAAAAAAADABMAAAACAAQAAAADABIAAAACAAIAAAADABEAAAACAAIAAAADABAAAAABAAIAAAADAAcAAAACAAMAAAADAAYAAAACAAIAAAADAAUAAAACAAEAAAADAAQAAAABAAIAAAADAAMAAAACAAMAAAADAAIAAAACAAAAAAACABMAAAACAAQAAAACABIAAAABAAIAAAACABEAAAACAAIAAAACABAAAAACAAMAAAACAAcAAAACAAEAAAACAAYAAAACAAMAAAACAAUAAAADAAIAAAACAAQAAAACAAMAAAACAAMAAAACAAIAAAACAAIAAAACAAAAAAABABMAAAACAAQAAAABABIAAAACAAMAAAABABEAAAACAAMAAAABABAAAAADAAIAAAABAAcAAAACAAEAAAABAAYAAAABAAIAAAABAAUAAAADAAIAAAABAAQAAAACAAIAAAABAAMAAAACAAEAAAABAAIAAAACAAAAAAAAABMAAAACAAQAAAAAABIAAAADAAIAAAAAABEAAAACAAMAAAAAABAAAAABAAIAAAAAAAcAAAACAAEAAAAAAAYAAAADAAIAAAAAAAUAAAADAAIAAAAAAAQAAAADAAIAAAAAAAMAAAADAAIAAAAAAAIAAAACAAAAAAD//xMAAAACAAQAAAD//xIAAAABAAIAAAD//xEAAAACAAEAAAD//xAAAAACAAEAAAD//w4AAAACAAEAAAD//w0AAAADAAIAAAD//wwAAAACAAIAAAD//wsAAAADAAIAAAD//woAAAADAAIAAAD//wkAAAACAAIAAAD//wcAAAADAAIAAAD//wYAAAACAAMAAAD//wUAAAADAAIAAAD//wQAAAACAAMAAAD//wMAAAADAAIAAAD//wIAAAACAAAAAAD+/xMAAAACAAQAAAD+/xIAAAACAAIAAAD+/xEAAAABAAIAAAD+/xAAAAADAAIAAAD+/wgAAAACAAEAAAD+/wcAAAACAAEAAAD+/wYAAAACAAIAAAD+/wUAAAACAAEAAAD+/wQAAAACAAIAAAD+/wMAAAADAAIAAAD+/wIAAAACAAAAAAD9/xMAAAACAAQAAAD9/xIAAAACAAIAAAD9/xEAAAABAAIAAAD9/xAAAAACAAIAAAD9/wgAAAABAAIAAAD9/wcAAAACAAIAAAD9/wYAAAABAAIAAAD9/wUAAAACAAMAAAD9/wQAAAABAAIAAAD9/wMAAAACAAMAAAD9/wIAAAACAAAAAAD8/xMAAAACAAQAAAD8/xIAAAABAAIAAAD8/xEAAAACAAEAAAD8/xAAAAACAAIAAAD8/wgAAAACAAIAAAD8/wcAAAACAAEAAAD8/wYAAAADAAIAAAD8/wUAAAACAAEAAAD8/wQAAAACAAEAAAD8/wMAAAACAAEAAAD8/wIAAAACAAAAAAD7/xMAAAACAAQAAAD7/xIAAAADAAIAAAD7/xEAAAABAAIAAAD7/xAAAAACAAMAAAD7/wgAAAACAAIAAAD7/wcAAAACAAEAAAD7/wYAAAABAAIAAAD7/wUAAAADAAIAAAD7/wQAAAACAAMAAAD7/wMAAAADAAIAAAD7/wIAAAACAAAAAAD6/xMAAAACAAQAAAD6/xIAAAABAAIAAAD6/xEAAAACAAMAAAD6/xAAAAABAAIAAAD6/wgAAAADAAIAAAD6/wcAAAACAAEAAAD6/wYAAAACAAMAAAD6/wUAAAACAAIAAAD6/wQAAAACAAEAAAD6/wMAAAACAAIAAAD6/wIAAAACAAAAAAD5/xMAAAACAAQAAAD5/xIAAAACAAEAAAD5/xEAAAADAAIAAAD5/xAAAAACAAEAAAD5/wgAAAABAAIAAAD5/wcAAAACAAEAAAD5/wYAAAADAAIAAAD5/wUAAAACAAMAAAD5/wQAAAABAAIAAAD5/wMAAAACAAIAAAD5/wIAAAACAAAAAAD4/xMAAAACAAQAAAD4/xIAAAABAAIAAAD4/xEAAAABAAIAAAD4/xAAAAACAAMAAAD4/wgAAAABAAIAAAD4/wcAAAACAAEAAAD4/wYAAAACAAEAAAD4/wUAAAACAAIAAAD4/wQAAAACAAEAAAD4/wMAAAABAAIAAAD4/wIAAAACAAAAAAD3/xMAAAACAAQAAAD3/xIAAAACAAEAAAD3/xEAAAABAAIAAAD3/xAAAAABAAIAAAD3/wgAAAACAAIAAAD3/wcAAAACAAIAAAD3/wYAAAACAAMAAAD3/wUAAAACAAMAAAD3/wQAAAACAAEAAAD3/wMAAAADAAIAAAD3/wIAAAACAAAAAAD2/xMAAAACAAQAAAD2/xIAAAACAAIAAAD2/xEAAAADAAIAAAD2/xAAAAACAAMAAAD2/wgAAAACAAIAAAD2/wcAAAADAAIAAAD2/wYAAAACAAEAAAD2/wUAAAABAAIAAAD2/wQAAAACAAIAAAD2/wMAAAABAAIAAAD2/wIAAAACAAAAAAD1/xMAAAACAAQAAAD1/xIAAAACAAIAAAD1/xEAAAACAAEAAAD1/xAAAAACAAIAAAD1/w8AAAABAAIAAAD1/w4AAAACAAIAAAD1/w0AAAACAAIAAAD1/wwAAAACAAEAAAD1/wsAAAACAAEAAAD1/woAAAACAAMAAAD1/wkAAAABAAIAAAD1/wgAAAACAAIAAAD1/wcAAAACAAEAAAD1/wYAAAACAAEAAAD1/wUAAAACAAIAAAD1/wQAAAADAAIAAAD1/wMAAAADAAIAAAD1/wIAAAACAAAAAAD0/xMAAAACAAQAAAD0/xIAAAACAAMAAAD0/xEAAAABAAIAAAD0/xAAAAACAAEAAAD0/w8AAAADAAIAAAD0/w4AAAACAAMAAAD0/w0AAAACAAIAAAD0/wwAAAACAAMAAAD0/wsAAAACAAMAAAD0/woAAAADAAIAAAD0/wkAAAADAAIAAAD0/wgAAAABAAIAAAD0/wcAAAACAAEAAAD0/wYAAAADAAIAAAD0/wUAAAABAAIAAAD0/wQAAAACAAEAAAD0/wMAAAACAAIAAAD0/wIAAAACAAAAAADz/xMAAAACAAQAAADz/xIAAAACAAEAAADz/xEAAAACAAEAAADz/xAAAAABAAIAAADz/w8AAAACAAEAAADz/w4AAAADAAIAAADz/w0AAAACAAIAAADz/wwAAAACAAIAAADz/wsAAAACAAMAAADz/woAAAABAAIAAADz/wkAAAABAAIAAADz/wgAAAACAAIAAADz/wcAAAACAAEAAADz/wYAAAABAAIAAADz/wUAAAACAAEAAADz/wQAAAACAAEAAADz/wMAAAADAAIAAADz/wIAAAACAAAAAADy/xMAAAAAAAMAAADy/xIAAAAAAAIAAADy/xEAAAAAAAIAAADy/xAAAAAAAAIAAADy/w8AAAAAAAIAAADy/w4AAAAAAAIAAADy/w0AAAAAAAIAAADy/wwAAAAAAAIAAADy/wsAAAAAAAIAAADy/woAAAAAAAIAAADy/wkAAAAAAAIAAADy/wgAAAAAAAIAAADy/wcAAAAAAAIAAADy/wYAAAAAAAIAAADy/wUAAAAAAAIAAADy/wQAAAAAAAIAAADy/wMAAAAAAAIAAADy/wIAAAABAAAAAAAQAA8AAAACAAIAAAAQAA4AAAABAAIAAAAQAA0AAAACAAMAAAAQAAwAAAACAAMAAAAQAAsAAAACAAIAAAAQAAoAAAACAAMAAAAPAA8AAAACAAEAAAAPAA4AAAABAAIAAAAPAA0AAAACAAIAAAAPAAwAAAACAAIAAAAPAAsAAAACAAMAAAAPAAoAAAADAAIAAAAOAA8AAAADAAIAAAAOAA4AAAACAAMAAAAOAA0AAAABAAIAAAAOAAwAAAABAAIAAAAOAAsAAAADAAIAAAAOAAoAAAADAAIAAAANAA8AAAACAAEAAAANAA4AAAADAAIAAAANAA0AAAACAAIAAAANAAwAAAABAAIAAAANAAsAAAACAAMAAAANAAoAAAACAAMAAAAMAA8AAAACAAIAAAAMAA4AAAACAAEAAAAMAA0AAAADAAIAAAAMAAwAAAADAAIAAAAMAAsAAAACAAMAAAAMAAoAAAACAAIAAAALAA8AAAADAAIAAAALAA4AAAACAAMAAAALAA0AAAACAAEAAAALAAwAAAADAAIAAAALAAsAAAACAAMAAAALAAoAAAABAAIAAAAKAA8AAAACAAMAAAAKAA4AAAABAAIAAAAKAA0AAAADAAIAAAAKAAwAAAACAAIAAAAKAAsAAAADAAIAAAAKAAoAAAACAAIAAAAJAA8AAAACAAIAAAAJAA4AAAABAAIAAAAJAA0AAAABAAIAAAAJAAwAAAACAAIAAAAJAAsAAAACAAMAAAAJAAoAAAADAAIAAAAJAAkAAAACAAEAAAAJAAgAAAACAAMAAAAIAA8AAAABAAIAAAAIAA4AAAABAAIAAAAIAA0AAAACAAIAAAAIAAwAAAACAAMAAAAIAAsAAAACAAMAAAAIAAoAAAACAAMAAAAIAAkAAAACAAEAAAAIAAgAAAADAAIAAAAHAA8AAAADAAIAAAAHAA4AAAACAAIAAAAHAA0AAAACAAEAAAAHAAwAAAACAAEAAAAHAAsAAAACAAIAAAAHAAoAAAABAAIAAAAHAAkAAAACAAIAAAAHAAgAAAACAAMAAAAGAA8AAAADAAIAAAAGAA4AAAADAAIAAAAGAA0AAAABAAIAAAAGAAwAAAACAAIAAAAGAAsAAAACAAIAAAAGAAoAAAACAAIAAAAGAAkAAAADAAIAAAAGAAgAAAACAAIAAAAFAA8AAAACAAMAAAAFAA4AAAABAAIAAAAFAA0AAAACAAIAAAAFAAwAAAACAAEAAAAFAAsAAAABAAIAAAAFAAoAAAACAAMAAAAFAAkAAAADAAIAAAAFAAgAAAADAAIAAAAEAA8AAAACAAMAAAAEAA4AAAACAAIAAAAEAA0AAAACAAMAAAAEAAwAAAACAAMAAAAEAAsAAAACAAMAAAAEAAoAAAADAAIAAAAEAAkAAAACAAMAAAAEAAgAAAADAAIAAAADAA8AAAACAAIAAAADAA4AAAACAAIAAAADAA0AAAACAAIAAAADAAwAAAADAAIAAAADAAsAAAADAAIAAAADAAoAAAABAAIAAAADAAkAAAABAAIAAAADAAgAAAADAAIAAAACAA8AAAACAAMAAAACAA4AAAACAAEAAAACAA0AAAACAAIAAAACAAwAAAACAAEAAAACAAsAAAACAAIAAAACAAoAAAABAAIAAAACAAkAAAABAAIAAAACAAgAAAACAAIAAAABAA8AAAADAAIAAAABAA4AAAADAAIAAAABAA0AAAACAAIAAAABAAwAAAADAAIAAAABAAsAAAACAAIAAAABAAoAAAACAAIAAAABAAkAAAACAAEAAAABAAgAAAADAAIAAAAAAA8AAAACAAIAAAAAAA4AAAADAAIAAAAAAA0AAAADAAIAAAAAAAwAAAACAAEAAAAAAAsAAAACAAMAAAAAAAoAAAABAAIAAAAAAAkAAAADAAIAAAAAAAgAAAABAAIAAAD//w8AAAACAAEAAAD//wgAAAACAAEAAAD+/w8AAAACAAEAAAD+/w4AAAACAAIAAAD+/w0AAAACAAMAAAD+/wwAAAABAAIAAAD+/wsAAAACAAIAAAD+/woAAAABAAIAAAD+/wkAAAABAAIAAAD9/w8AAAACAAMAAAD9/w4AAAABAAIAAAD9/w0AAAACAAEAAAD9/wwAAAADAAIAAAD9/wsAAAABAAIAAAD9/woAAAACAAEAAAD9/wkAAAACAAEAAAD8/w8AAAACAAIAAAD8/w4AAAACAAIAAAD8/w0AAAABAAIAAAD8/wwAAAADAAIAAAD8/wsAAAABAAIAAAD8/woAAAADAAIAAAD8/wkAAAACAAMAAAD7/w8AAAACAAMAAAD7/w4AAAADAAIAAAD7/w0AAAACAAEAAAD7/wwAAAACAAMAAAD7/wsAAAADAAIAAAD7/woAAAACAAEAAAD7/wkAAAACAAIAAAD6/w8AAAACAAEAAAD6/w4AAAADAAIAAAD6/w0AAAACAAMAAAD6/wwAAAACAAIAAAD6/wsAAAACAAIAAAD6/woAAAADAAIAAAD6/wkAAAACAAEAAAD5/w8AAAACAAEAAAD5/w4AAAACAAEAAAD5/w0AAAABAAIAAAD5/wwAAAACAAEAAAD5/wsAAAACAAIAAAD5/woAAAACAAIAAAD5/wkAAAADAAIAAAD4/w8AAAACAAIAAAD4/w4AAAACAAIAAAD4/w0AAAACAAEAAAD4/wwAAAACAAIAAAD4/wsAAAACAAEAAAD4/woAAAADAAIAAAD4/wkAAAACAAEAAAD3/w8AAAABAAIAAAD3/w4AAAACAAIAAAD3/w0AAAACAAMAAAD3/wwAAAABAAIAAAD3/wsAAAACAAEAAAD3/woAAAABAAIAAAD3/wkAAAABAAIAAAD2/w8AAAADAAIAAAD2/w4AAAACAAIAAAD2/w0AAAABAAIAAAD2/wwAAAACAAIAAAD2/wsAAAACAAIAAAD2/woAAAACAAMAAAD2/wkAAAACAAEAAAA=") -tile_set = ExtResource("10_ykq8c") - -[node name="Entities layer" type="TileMapLayer" parent="."] -tile_set = ExtResource("11_ln8vx") - -[node name="Foreground layer" type="TileMapLayer" parent="."] -tile_map_data = PackedByteArray("AADy//z/AwANAAUAAADz//z/AwAOAAUAAAD0//z/AwAPAAUAAAAKAPv/AwANAAYAAAALAPv/AwAOAAYAAAANAPv/AwATAAUAAAAOAPv/AwAUAAUAAAAPAPv/AwAVAAUAAAAQAPv/AwANAAYAAAARAPv/AwAOAAYAAAASAPv/AwAPAAYAAAATAPv/AwANAAYAAAAUAPv/AwAOAAYAAAAVAPv/AwAPAAYAAAAJAPv/AwARAAYAAAAIAPv/AwARAAYAAAAHAPv/AwARAAcAAAAGAPv/AwARAAYAAAADAPv/AwATAAUAAAAEAPv/AwAUAAUAAAAFAPv/AwAVAAUAAAAWAPv/AwATAAUAAAAXAPv/AwAUAAUAAAAYAPv/AwAVAAUAAAAMAPv/AwAVAAYAAAABAPv/AwASAAoAAAABAPz/AwASAAsAAAACAPv/AwATAAoAAAACAPz/AwATAAsAAAD9//v/AwASAAoAAAD9//z/AwASAAsAAAD+//v/AwATAAoAAAD+//z/AwATAAsAAAD7//v/AwASAAoAAAD7//z/AwASAAsAAAD8//v/AwATAAoAAAD8//z/AwATAAsAAAD5//v/AwASAAoAAAD5//z/AwASAAsAAAD6//v/AwATAAoAAAD6//z/AwATAAsAAAD3//v/AwASAAoAAAD3//z/AwASAAsAAAD4//v/AwATAAoAAAD4//z/AwATAAsAAAD1//v/AwASAAoAAAD1//z/AwASAAsAAAD2//v/AwATAAoAAAD2//z/AwATAAsAAAD1//3/AwASAAwAAAD2//3/AwATAAwAAAD1//7/AwASAAwAAAD2//7/AwATAAwAAAD1////AwASAAwAAAD2////AwATAAwAAAD1/wAAAwASAAwAAAD2/wAAAwATAAwAAAD1/wEAAwASAAwAAAD2/wEAAwATAAwAAAD3//3/AwASAAwAAAD4//3/AwATAAwAAAD3//7/AwASAAwAAAD4//7/AwATAAwAAAD3////AwASAAwAAAD4////AwATAAwAAAD3/wAAAwASAAwAAAD4/wAAAwATAAwAAAD3/wEAAwASAAwAAAD4/wEAAwATAAwAAAD5//3/AwASAAwAAAD6//3/AwATAAwAAAD5//7/AwASAAwAAAD6//7/AwATAAwAAAD5////AwASAAwAAAD6////AwATAAwAAAD5/wAAAwASAAwAAAD6/wAAAwATAAwAAAD5/wEAAwASAAwAAAD6/wEAAwATAAwAAAD7//3/AwASAAwAAAD8//3/AwATAAwAAAD7//7/AwASAAwAAAD8//7/AwATAAwAAAD7////AwASAAwAAAD8////AwATAAwAAAD7/wAAAwASAAwAAAD8/wAAAwATAAwAAAD7/wEAAwASAAwAAAD8/wEAAwATAAwAAAD9//3/AwASAAwAAAD+//3/AwATAAwAAAD9//7/AwASAAwAAAD+//7/AwATAAwAAAD9////AwASAAwAAAD+////AwATAAwAAAD9/wAAAwASAAwAAAD+/wAAAwATAAwAAAD9/wEAAwASAAwAAAD+/wEAAwATAAwAAAABAP3/AwASAAwAAAACAP3/AwATAAwAAAABAP7/AwASAAwAAAACAP7/AwATAAwAAAABAP//AwASAAwAAAACAP//AwATAAwAAAABAAAAAwASAAwAAAACAAAAAwATAAwAAAABAAEAAwASAAwAAAACAAEAAwATAAwAAAA=") -tile_set = ExtResource("12_juomk") - -[node name="ConsoleManagement" type="Node" parent="." node_paths=PackedStringArray("player_health", "skill_unlocker", "skill_manager")] -script = ExtResource("13_wxe3r") -player_health = NodePath("../Brick Player/HealthComponent") -skill_unlocker = NodePath("../Brick Player/SkillUnlockerComponent") -skill_manager = NodePath("../Brick Player/SkillManager") -metadata/_custom_type_script = "uid://8r1y8elyw7kt" - -[node name="Killzone" parent="." instance=ExtResource("14_o0rcr")] -position = Vector2(215, 324) - -[connection signal="on_death" from="Brick Player/HealthComponent" to="UI Layer/DeathScreen" method="on_player_death"] -[connection signal="on_death" from="Brick Player/HealthComponent" to="UI Layer/GameOverScreen" method="on_player_death"] - -[editable path="Brick Player"] -[editable path="UI Layer"] -[editable path="Camera2D"] diff --git a/scripts/Resources/AchievementResource.cs b/scripts/Resources/AchievementResource.cs new file mode 100644 index 0000000..64fb409 --- /dev/null +++ b/scripts/Resources/AchievementResource.cs @@ -0,0 +1,13 @@ +using Godot; + +namespace Mr.BrickAdventures.scripts.Resources; + +[GlobalClass] +public partial class AchievementResource : Resource +{ + [Export] public string Id { get; set; } = ""; // e.g., "level_1_complete" + [Export] public string DisplayName { get; set; } = "New Achievement"; + [Export(PropertyHint.MultilineText)] public string Description { get; set; } = ""; + [Export] public Texture2D Icon { get; set; } + [Export] public bool IsSecret { get; set; } = false; +} \ No newline at end of file diff --git a/scripts/Resources/AchievementResource.cs.uid b/scripts/Resources/AchievementResource.cs.uid new file mode 100644 index 0000000..d8cdbea --- /dev/null +++ b/scripts/Resources/AchievementResource.cs.uid @@ -0,0 +1 @@ +uid://duib5phrmpro5 diff --git a/scripts/UI/AchievementPopup.cs b/scripts/UI/AchievementPopup.cs new file mode 100644 index 0000000..fa8d802 --- /dev/null +++ b/scripts/UI/AchievementPopup.cs @@ -0,0 +1,52 @@ +using System.Threading.Tasks; +using Godot; +using Mr.BrickAdventures.scripts.Resources; + +namespace Mr.BrickAdventures.scripts.UI; + +[GlobalClass] +public partial class AchievementPopup : CanvasLayer +{ + [Export] public Label TitleLabel { get; set; } + [Export] public Label DescriptionLabel { get; set; } + [Export] public TextureRect IconRect { get; set; } + [Export] public float DisplayDuration { get; set; } = 3.0f; + + private Control _container; + private Vector2 _startPosition; + private Vector2 _onScreenPosition; + + public override void _Ready() + { + _container = GetNode("Container"); + + _startPosition = new Vector2(_container.Position.X, -_container.Size.Y - 50); + _onScreenPosition = _container.Position; + _container.Position = _startPosition; + } + + public async Task ShowAchievement(AchievementResource achievement) + { + TitleLabel.Text = achievement.DisplayName; + DescriptionLabel.Text = achievement.Description; + IconRect.Texture = achievement.Icon; + + var tween = CreateTween(); + tween.TweenProperty(_container, "position", _onScreenPosition, 0.5f) + .SetTrans(Tween.TransitionType.Cubic) + .SetEase(Tween.EaseType.Out); + + await ToSignal(tween, Tween.SignalName.Finished); + + await ToSignal(GetTree().CreateTimer(DisplayDuration), Timer.SignalName.Timeout); + + tween = CreateTween(); + tween.TweenProperty(_container, "position", _startPosition, 0.5f) + .SetTrans(Tween.TransitionType.Cubic) + .SetEase(Tween.EaseType.In); + + await ToSignal(tween, Tween.SignalName.Finished); + + QueueFree(); + } +} \ No newline at end of file diff --git a/scripts/UI/AchievementPopup.cs.uid b/scripts/UI/AchievementPopup.cs.uid new file mode 100644 index 0000000..9031daa --- /dev/null +++ b/scripts/UI/AchievementPopup.cs.uid @@ -0,0 +1 @@ +uid://cejjan582nhfn diff --git a/scripts/components/ExitDoorComponent.cs b/scripts/components/ExitDoorComponent.cs index 1a03fb9..b040e11 100644 --- a/scripts/components/ExitDoorComponent.cs +++ b/scripts/components/ExitDoorComponent.cs @@ -4,29 +4,25 @@ using Mr.BrickAdventures.scripts.interfaces; namespace Mr.BrickAdventures.scripts.components; -public partial class ExitDoorComponent : Node, IUnlockable +public partial class ExitDoorComponent : Area2D, IUnlockable { [Export] public bool Locked { get; set; } = true; - [Export] public Area2D ExitArea { get; set; } [Export] public Sprite2D DoorSprite { get; set; } [Export] public AudioStreamPlayer2D OpenDoorSfx { get; set; } [Export] public int OpenedDoorFrame { get; set; } = 0; + [Export] public string AchievementId = "level_complete_1"; [Signal] public delegate void ExitTriggeredEventHandler(); private GameManager _gameManager; + private AchievementManager _achievementManager; public override void _Ready() { _gameManager = GetNode("/root/GameManager"); + _achievementManager = GetNode("/root/AchievementManager"); - if (ExitArea == null) - { - GD.PushError("ExitDoorComponent: ExitArea is not set."); - return; - } - - ExitArea.BodyEntered += OnExitAreaBodyEntered; + BodyEntered += OnExitAreaBodyEntered; } @@ -35,6 +31,7 @@ public partial class ExitDoorComponent : Node, IUnlockable if (Locked) return; EmitSignalExitTriggered(); + _achievementManager.UnlockAchievement(AchievementId); _gameManager.UnlockLevel((int)_gameManager.PlayerState["current_level"] + 1); CallDeferred(nameof(GoToNextLevel)); } diff --git a/sprites/achievement.png b/sprites/achievement.png new file mode 100644 index 0000000..25fb1c2 Binary files /dev/null and b/sprites/achievement.png differ diff --git a/sprites/achievement.png.import b/sprites/achievement.png.import new file mode 100644 index 0000000..e4de276 --- /dev/null +++ b/sprites/achievement.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cebeyr4wnibvk" +path="res://.godot/imported/achievement.png-6dc4e0e28c2cf29a2febc21fd42d98fb.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://sprites/achievement.png" +dest_files=["res://.godot/imported/achievement.png-6dc4e0e28c2cf29a2febc21fd42d98fb.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/sprites/achievement.psd b/sprites/achievement.psd new file mode 100644 index 0000000..fbfb888 Binary files /dev/null and b/sprites/achievement.psd differ diff --git a/sprites/locked_achievement.png b/sprites/locked_achievement.png new file mode 100644 index 0000000..4debd11 Binary files /dev/null and b/sprites/locked_achievement.png differ diff --git a/sprites/locked_achievement.png.import b/sprites/locked_achievement.png.import new file mode 100644 index 0000000..bc36c37 --- /dev/null +++ b/sprites/locked_achievement.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d1p2g3mv76ksv" +path="res://.godot/imported/locked_achievement.png-53164620812ca9339207b2e63190ee57.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://sprites/locked_achievement.png" +dest_files=["res://.godot/imported/locked_achievement.png-53164620812ca9339207b2e63190ee57.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1