diff --git a/Core/AchievementSystem/AchievementSystem.cs b/Core/AchievementSystem/AchievementSystem.cs index efd4fc5..fc9576a 100644 --- a/Core/AchievementSystem/AchievementSystem.cs +++ b/Core/AchievementSystem/AchievementSystem.cs @@ -13,10 +13,17 @@ public partial class AchievementSystem : Node private GameSaveData saveData; + private AudioStreamPlayer _achievementSound; + public override void _Ready() { saveData = SaveController.GameData; + _achievementSound = new AudioStreamPlayer(); + _achievementSound.Stream = ResourceLoader.Load("res://sounds/unlock_achievement.mp3"); + + AddChild(_achievementSound); + foreach (var achievement in AllAchievements) { achievement.IsUnlocked = @@ -59,6 +66,12 @@ private void UnlockAchievement(AchievementData achievement) achievement.IsUnlocked = true; + if (_achievementSound != null) + { + _achievementSound.Play(); + GD.Print(achievement.AchievementName); + } + if (saveData != null && !saveData.Achievements.Contains(achievement.Id)) { saveData.Achievements.Add(achievement.Id); @@ -73,7 +86,7 @@ private void UnlockAchievement(AchievementData achievement) } } - private void CheckAchievements(AchievementType type, int value = 1) + public void CheckAchievements(AchievementType type, int value = 1) { foreach (var achievement in AllAchievements) { diff --git a/Core/AchievementSystem/Achievements.tscn b/Core/AchievementSystem/Achievements.tscn index c9cb23c..19377a8 100644 --- a/Core/AchievementSystem/Achievements.tscn +++ b/Core/AchievementSystem/Achievements.tscn @@ -5,8 +5,22 @@ [ext_resource type="Resource" uid="uid://w8ijl5xmjo8y" path="res://resources/achievements/FirstSet.tres" id="3_qtoig"] [ext_resource type="Resource" uid="uid://bwfcy42k2nmt8" path="res://resources/achievements/FirstGame.tres" id="4_qtoig"] [ext_resource type="Resource" uid="uid://df185apnjqyui" path="res://resources/achievements/Points_1000.tres" id="5_l8182"] +[ext_resource type="Resource" uid="uid://dsmnkn5rtudbs" path="res://resources/achievements/NoMistakes.tres" id="6_bjm61"] +[ext_resource type="Resource" uid="uid://c0khsml6efaq" path="res://resources/achievements/TotalSets_10.tres" id="7_g78ka"] +[ext_resource type="Resource" uid="uid://35cjnbw2xnvw" path="res://resources/achievements/TotalSets_50.tres" id="8_y5vsq"] +[ext_resource type="Resource" uid="uid://bbetvxo00tbv2" path="res://resources/achievements/TotalSets_100.tres" id="9_y5vsq"] +[ext_resource type="Resource" uid="uid://6nu02w1jojm6" path="res://resources/achievements/TotalSets_500.tres" id="10_ls5uk"] +[ext_resource type="Resource" uid="uid://b47joqpxeutb4" path="res://resources/achievements/Sets25_NoMistakes.tres" id="11_ls5uk"] +[ext_resource type="Resource" uid="uid://ci0gh7m10e81h" path="res://resources/achievements/Set_sec_5.tres" id="12_6dm4i"] +[ext_resource type="Resource" uid="uid://dx6j4hc5a4x6s" path="res://resources/achievements/Series_5.tres" id="12_slb81"] +[ext_resource type="Resource" uid="uid://bjowubeeylxw6" path="res://resources/achievements/Series_10.tres" id="13_hlqj6"] +[ext_resource type="Resource" uid="uid://c4okwdq8fvn6o" path="res://resources/achievements/Series_20.tres" id="14_fffem"] +[ext_resource type="Resource" uid="uid://dqnoxgli30dom" path="res://resources/achievements/Set_10_per_minute.tres" id="16_8vpy1"] +[ext_resource type="Resource" uid="uid://la6qbi3b3qnr" path="res://resources/achievements/Sets_3_per_15_sec.tres" id="17_qqku5"] +[ext_resource type="Resource" uid="uid://dhppdc71vdtci" path="res://resources/achievements/Mode_on_time.tres" id="18_gddjv"] +[ext_resource type="Resource" uid="uid://beq8k6w0saixe" path="res://resources/achievements/All_achievements.tres" id="19_v8q2g"] [node name="AchievementSystem" type="Node" unique_id=1380662846] script = ExtResource("1_cke4p") -AllAchievements = Array[ExtResource("2_8ygst")]([ExtResource("3_qtoig"), ExtResource("4_qtoig"), ExtResource("5_l8182")]) +AllAchievements = Array[ExtResource("2_8ygst")]([ExtResource("3_qtoig"), ExtResource("4_qtoig"), ExtResource("6_bjm61"), ExtResource("12_6dm4i"), ExtResource("5_l8182"), ExtResource("7_g78ka"), ExtResource("8_y5vsq"), ExtResource("9_y5vsq"), ExtResource("10_ls5uk"), ExtResource("12_slb81"), ExtResource("13_hlqj6"), ExtResource("14_fffem"), ExtResource("11_ls5uk"), ExtResource("16_8vpy1"), ExtResource("17_qqku5"), ExtResource("18_gddjv"), ExtResource("19_v8q2g")]) metadata/_custom_type_script = "uid://c047evqheeiiv" diff --git a/Core/Controllers/GameController/GameController.cs b/Core/Controllers/GameController/GameController.cs index 6fc41b5..6dc2a30 100644 --- a/Core/Controllers/GameController/GameController.cs +++ b/Core/Controllers/GameController/GameController.cs @@ -7,11 +7,22 @@ public partial class GameController : Node { [Signal] public delegate void SetCheckSuccessEventHandler(Godot.Collections.Array checkedCards); [Signal] public delegate void SetCheckFailedEventHandler(); + [Signal] public delegate void TimeChangedEventHandler(int remainingTime); + [Signal] public delegate void GameFinishedEventHandler(); [Export] public int ScoreForOneSet { get; set; } = 0; + [Export] public int GameDuration { get; set; } = 300; + + public int RemainingTime { get; private set; } + + private bool _isTimerPaused = false; [Export] public Score GameScore { get; set; } [Export] public Streak GameStreak { get; set; } + [Export] public Timer GameTimer { get; set; } + + public int SetsThisGame { get; private set; } = 0; + public int MistakesThisGame { get; private set; } = 0; [Export] public BaseCardValidator CardValidator { get; set; } [Export] public BaseStreakStrategy StreakStrategy { get; set; } @@ -30,13 +41,17 @@ public override void _Ready() gameAchievementSystem = GetNode("/root/Achievements"); gameAchievementSystem.Initialize(GameScore, GameStreak); + + GameTimer.Timeout += OnTimerTimeout; + + StartGameTimer(); } public void ProcessSelectedSet(List cards) { if (cards == null || cards.Count != 3) { - GD.PrintErr($"[GameController]: Ошибка! Проверяясь должно быть 3 карты, получено: {(cards?.Count ?? 0)}"); + GD.PrintErr($"[GameController]: The number of cards is insufficient to check for a set. Cards transferred: {(cards?.Count ?? 0)}"); return; } @@ -58,18 +73,26 @@ private void HandleSuccessfulSet(List cards) int streakBonus = StreakStrategy.CalculateScore(GameScore, GameStreak); GameScore.Modify(ScoreForOneSet + streakBonus); + SetsThisGame++; SaveData.TotalSets++; gameAchievementSystem.CheckTotalSets(SaveData.TotalSets); + gameAchievementSystem.CheckScore(GameScore.CurrentValue); + gameAchievementSystem.CheckStreak(GameStreak.CurrentValue); if (SaveData.TotalSets == 1) { gameAchievementSystem.UnlockByType(AchievementType.FirstSet); } - SaveData.BestScore = Math.Max(SaveData.BestScore, GameScore.HighScore); - SaveData.BestStreak = Math.Max(SaveData.BestStreak, GameStreak.MaxStreak); - SaveController.SaveGameData(SaveData); + if (RemainingTime >= (GameDuration - 5)) + { + gameAchievementSystem.CheckAchievements(AchievementType.FastSet); + } + if (RemainingTime >= (GameDuration - 15)) + { + gameAchievementSystem.CheckAchievements(AchievementType.FastSet, SetsThisGame); + } var cardArray = new Godot.Collections.Array(cards); EmitSignal(SignalName.SetCheckSuccess, cardArray); @@ -81,39 +104,99 @@ private void HandleFailedSet() GameScore.Modify(-penalty); GameStreak.ResetCurrentValue(); + MistakesThisGame++; SaveData.TotalMistakes++; SaveController.SaveGameData(SaveData); EmitSignal(SignalName.SetCheckFailed); } - public (bool scoreRecord, bool streakRecord) FinishGame() + public (bool scoreRecord, bool streakRecord, bool PatternsRecord) FinishGame() { bool scoreRecord = GameScore.CurrentValue > SaveData.BestScore; bool streakRecord = GameStreak.MaxStreak > SaveData.BestStreak; + bool patternsRecord = SetsThisGame > SaveData.BestPatterns; SaveData.TotalGames++; SaveData.TotalScore += GameScore.CurrentValue; + if (scoreRecord) + SaveData.BestScore = GameScore.CurrentValue; + + if (streakRecord) + SaveData.BestStreak = GameStreak.MaxStreak; + + if (patternsRecord) + SaveData.BestPatterns = SetsThisGame; + SaveData.BestScore = Math.Max(SaveData.BestScore, GameScore.CurrentValue); SaveData.BestStreak = Math.Max(SaveData.BestStreak, GameStreak.MaxStreak); + SaveData.BestPatterns = Math.Max(SaveData.BestPatterns, SetsThisGame); if (SaveData.TotalGames >= 1) { gameAchievementSystem.UnlockByType(AchievementType.FirstGame); - GD.Print($"[GameController] unlock first game achievement"); + } + + if (MistakesThisGame == 0) + { + gameAchievementSystem.UnlockByType(AchievementType.NoMistakes); } SaveController.SaveGameData(SaveData); - return (scoreRecord, streakRecord); + return (scoreRecord, streakRecord, patternsRecord); } private void ValidateDependencies() { - if (GameScore == null) GD.PrintErr($"[GameController] Ошибка: Р В РЎСљР В Р’Вµ прикреплен узел Score Р Р† инспекторе {Name}"); - if (GameStreak == null) GD.PrintErr($"[GameController] Ошибка: Р В РЎСљР В Р’Вµ прикреплен узел Streak Р Р† инспекторе {Name}"); - if (CardValidator == null) GD.PrintErr($"[GameController] Ошибка: Р В РЎСљР В Р’Вµ прикреплен узел CardValidator Р Р† инспекторе {Name}"); - if (StreakStrategy == null) GD.PrintErr($"[GameController] Ошибка: Р В РЎСљР В Р’Вµ прикреплен узел StreakStrategy Р Р† инспекторе {Name}"); - if (PenaltyStrategy == null) GD.PrintErr($"[GameController] Ошибка: Р СљР Вµ прикреплен узел PenaltyStrategy Р Р† инспекторе {Name}"); + if (GameScore == null) GD.PrintErr($"[GameController] Error: Score node not connected in the Inspector {Name}"); + if (GameStreak == null) GD.PrintErr($"[GameController] Error: Streak node not connected in the Inspector {Name}"); + if (CardValidator == null) GD.PrintErr($"[GameController] Error: CardValidator node not connected in the Inspector {Name}"); + if (StreakStrategy == null) GD.PrintErr($"[GameController] Error: StreakStrategy node not connected in the Inspector {Name}"); + if (PenaltyStrategy == null) GD.PrintErr($"[GameController] Error: PenaltyStrategy node not connected in the Inspector {Name}"); + } + public void StartGameTimer() + { + RemainingTime = GameDuration; + + GameTimer.Start(); + + EmitSignal( SignalName.TimeChanged, RemainingTime); + } + + private void OnTimerTimeout() + { + RemainingTime--; + + if (RemainingTime <= 0) + { + RemainingTime = 0; + GameTimer.Stop(); + + EmitSignal(SignalName.TimeChanged, RemainingTime); + + EmitSignal(SignalName.GameFinished); + return; + } + + EmitSignal(SignalName.TimeChanged, RemainingTime); + } + + public void PauseGameTimer() + { + if (GameTimer == null || GameTimer.IsStopped()) + return; + + _isTimerPaused = true; + GameTimer.Paused = true; + } + + public void ResumeGameTimer() + { + if (GameTimer == null) + return; + + _isTimerPaused = false; + GameTimer.Paused = false; } } \ No newline at end of file diff --git a/Core/Controllers/SaveController/GameSaveData.cs b/Core/Controllers/SaveController/GameSaveData.cs index b546bb7..31e6c4e 100644 --- a/Core/Controllers/SaveController/GameSaveData.cs +++ b/Core/Controllers/SaveController/GameSaveData.cs @@ -6,6 +6,7 @@ public partial class GameSaveData : Resource { [Export] public int BestScore { get; set; } = 0; [Export] public int BestStreak { get; set; } = 0; + [Export] public int BestPatterns { get; set; } = 0; [Export] public int TotalScore { get; set; } = 0; diff --git a/Core/StreakStrategy/LinearStreakStrategy.cs b/Core/StreakStrategy/LinearStreakStrategy.cs index 5c681f5..0d1060b 100644 --- a/Core/StreakStrategy/LinearStreakStrategy.cs +++ b/Core/StreakStrategy/LinearStreakStrategy.cs @@ -4,15 +4,15 @@ [GlobalClass] public partial class LinearStreakStrategy : BaseStreakStrategy { - [Export] public int PointsPerStreakStep { get; set; } = 5; - [Export] public int MaxMultiplier { get; set; } = 5; + [Export] public int PointsPerStreakStep { get; set; } = 5; + [Export] public int MaxMultiplier { get; set; } = 5; - public override int CalculateScore(Score score, Streak streak) - { - if(streak.CurrentValue < 1) return score.CurrentValue; + public override int CalculateScore(Score score, Streak streak) + { + if(streak.CurrentValue <= 1) return score.CurrentValue; - int resultMultiplier = Mathf.Clamp(streak.CurrentValue, 1, MaxMultiplier); + int resultMultiplier = Mathf.Clamp(streak.CurrentValue, 1, MaxMultiplier); - return score.CurrentValue + (PointsPerStreakStep * resultMultiplier); - } -} \ No newline at end of file + return PointsPerStreakStep * resultMultiplier; + } +} diff --git a/PatternShift.csproj b/PatternShift.csproj index 19b3a42..ccbc2bc 100644 --- a/PatternShift.csproj +++ b/PatternShift.csproj @@ -1,4 +1,4 @@ - + net8.0 net9.0 diff --git a/PatternShift.csproj.old.1 b/PatternShift.csproj.old.1 new file mode 100644 index 0000000..19b3a42 --- /dev/null +++ b/PatternShift.csproj.old.1 @@ -0,0 +1,7 @@ + + + net8.0 + net9.0 + true + + \ No newline at end of file diff --git a/resources/achievements/All_achievements.tres b/resources/achievements/All_achievements.tres new file mode 100644 index 0000000..335edc7 --- /dev/null +++ b/resources/achievements/All_achievements.tres @@ -0,0 +1,14 @@ +[gd_resource type="Resource" script_class="AchievementData" format=3 uid="uid://beq8k6w0saixe"] + +[ext_resource type="Script" uid="uid://dlp73yl0k544o" path="res://Core/AchievementSystem/AchievementData.cs" id="1_3pplh"] +[ext_resource type="Texture2D" uid="uid://byfxnc1xfv5pi" path="res://assets/images/achievements/legend.png" id="1_vya30"] + +[resource] +script = ExtResource("1_3pplh") +Id = "all_achievements" +AchievementName = "Легенда" +AchievementDescription = "Открыть все дизайны карточек и получить все остальные достижения" +Type = 12 +TargetValue = 1 +Icon = ExtResource("1_vya30") +metadata/_custom_type_script = "uid://dlp73yl0k544o" diff --git a/resources/achievements/First_skin.tres b/resources/achievements/First_skin.tres new file mode 100644 index 0000000..a7c2674 --- /dev/null +++ b/resources/achievements/First_skin.tres @@ -0,0 +1,14 @@ +[gd_resource type="Resource" script_class="AchievementData" format=3 uid="uid://bm3dsp7iq4ng3"] + +[ext_resource type="Script" uid="uid://dlp73yl0k544o" path="res://Core/AchievementSystem/AchievementData.cs" id="1_aycrh"] +[ext_resource type="Texture2D" uid="uid://c7fi1oxpfclbc" path="res://assets/images/achievements/collector.png" id="1_cygcu"] + +[resource] +script = ExtResource("1_aycrh") +Id = "first_skin" +AchievementName = "Коллекционер" +AchievementDescription = "Открыть первый дизайн карточек" +Type = 6 +TargetValue = 1 +Icon = ExtResource("1_cygcu") +metadata/_custom_type_script = "uid://dlp73yl0k544o" diff --git a/resources/achievements/Mode_on_time.tres b/resources/achievements/Mode_on_time.tres new file mode 100644 index 0000000..67669cc --- /dev/null +++ b/resources/achievements/Mode_on_time.tres @@ -0,0 +1,14 @@ +[gd_resource type="Resource" script_class="AchievementData" format=3 uid="uid://dhppdc71vdtci"] + +[ext_resource type="Texture2D" uid="uid://bucojbroaxmt2" path="res://assets/images/achievements/against_time.png" id="1_duiko"] +[ext_resource type="Script" uid="uid://dlp73yl0k544o" path="res://Core/AchievementSystem/AchievementData.cs" id="1_pgknf"] + +[resource] +script = ExtResource("1_pgknf") +Id = "mode_on_time" +AchievementName = "Время" +AchievementDescription = "Выиграть режим \"На время\"" +Type = 11 +TargetValue = 1 +Icon = ExtResource("1_duiko") +metadata/_custom_type_script = "uid://dlp73yl0k544o" diff --git a/resources/achievements/NoMistakes.tres b/resources/achievements/NoMistakes.tres new file mode 100644 index 0000000..83dedf1 --- /dev/null +++ b/resources/achievements/NoMistakes.tres @@ -0,0 +1,13 @@ +[gd_resource type="Resource" script_class="AchievementData" format=3 uid="uid://dsmnkn5rtudbs"] + +[ext_resource type="Script" uid="uid://dlp73yl0k544o" path="res://Core/AchievementSystem/AchievementData.cs" id="1_d7sre"] +[ext_resource type="Texture2D" uid="uid://su540gappm7v" path="res://assets/images/achievements/flawless.png" id="1_v6jhb"] + +[resource] +script = ExtResource("1_d7sre") +Id = "no_mistakes" +AchievementName = "Без ошибок" +AchievementDescription = "Закончить игру без единой ошибки" +Type = 2 +Icon = ExtResource("1_v6jhb") +metadata/_custom_type_script = "uid://dlp73yl0k544o" diff --git a/resources/achievements/Series_10.tres b/resources/achievements/Series_10.tres new file mode 100644 index 0000000..5b0ccd1 --- /dev/null +++ b/resources/achievements/Series_10.tres @@ -0,0 +1,14 @@ +[gd_resource type="Resource" script_class="AchievementData" format=3 uid="uid://bjowubeeylxw6"] + +[ext_resource type="Script" uid="uid://dlp73yl0k544o" path="res://Core/AchievementSystem/AchievementData.cs" id="1_8jng8"] +[ext_resource type="Texture2D" uid="uid://bxij4eev2d8lq" path="res://assets/images/achievements/streak_x10.png" id="1_vrsk4"] + +[resource] +script = ExtResource("1_8jng8") +Id = "series_10" +AchievementName = "Серия ×10" +AchievementDescription = "Сделать серию из 10 правильных ответов" +Type = 7 +TargetValue = 10 +Icon = ExtResource("1_vrsk4") +metadata/_custom_type_script = "uid://dlp73yl0k544o" diff --git a/resources/achievements/Series_20.tres b/resources/achievements/Series_20.tres new file mode 100644 index 0000000..138d23f --- /dev/null +++ b/resources/achievements/Series_20.tres @@ -0,0 +1,14 @@ +[gd_resource type="Resource" script_class="AchievementData" format=3 uid="uid://c4okwdq8fvn6o"] + +[ext_resource type="Texture2D" uid="uid://ifxglfh6dkdq" path="res://assets/images/achievements/streak_x20.png" id="1_4qy0a"] +[ext_resource type="Script" uid="uid://dlp73yl0k544o" path="res://Core/AchievementSystem/AchievementData.cs" id="1_u8umm"] + +[resource] +script = ExtResource("1_u8umm") +Id = "series_20" +AchievementName = "Серия ×20" +AchievementDescription = "Cделать серию из 20 правильных ответов" +Type = 7 +TargetValue = 20 +Icon = ExtResource("1_4qy0a") +metadata/_custom_type_script = "uid://dlp73yl0k544o" diff --git a/resources/achievements/Series_5.tres b/resources/achievements/Series_5.tres new file mode 100644 index 0000000..0c4f8c2 --- /dev/null +++ b/resources/achievements/Series_5.tres @@ -0,0 +1,14 @@ +[gd_resource type="Resource" script_class="AchievementData" format=3 uid="uid://dx6j4hc5a4x6s"] + +[ext_resource type="Texture2D" uid="uid://c358drlsquy3k" path="res://assets/images/achievements/streak_x5.png" id="1_gop6l"] +[ext_resource type="Script" uid="uid://dlp73yl0k544o" path="res://Core/AchievementSystem/AchievementData.cs" id="1_w5a7x"] + +[resource] +script = ExtResource("1_w5a7x") +Id = "Series_5" +AchievementName = "Серия ×5" +AchievementDescription = "Cделать серию из 5 правильных ответов" +Type = 7 +TargetValue = 5 +Icon = ExtResource("1_gop6l") +metadata/_custom_type_script = "uid://dlp73yl0k544o" diff --git a/resources/achievements/Set_10_per_minute.tres b/resources/achievements/Set_10_per_minute.tres new file mode 100644 index 0000000..27448ae --- /dev/null +++ b/resources/achievements/Set_10_per_minute.tres @@ -0,0 +1,14 @@ +[gd_resource type="Resource" script_class="AchievementData" format=3 uid="uid://dqnoxgli30dom"] + +[ext_resource type="Texture2D" uid="uid://bhscf7ntsltnv" path="res://assets/images/achievements/speedrunner.png" id="1_aqpsq"] +[ext_resource type="Script" uid="uid://dlp73yl0k544o" path="res://Core/AchievementSystem/AchievementData.cs" id="1_xfj6h"] + +[resource] +script = ExtResource("1_xfj6h") +Id = "Set_10_per_minute" +AchievementName = "Спидраннер" +AchievementDescription = "Найти 10 комбинаций менее чем за минуту" +Type = 9 +TargetValue = 10 +Icon = ExtResource("1_aqpsq") +metadata/_custom_type_script = "uid://dlp73yl0k544o" diff --git a/resources/achievements/Set_sec_5.tres b/resources/achievements/Set_sec_5.tres new file mode 100644 index 0000000..9645dbe --- /dev/null +++ b/resources/achievements/Set_sec_5.tres @@ -0,0 +1,14 @@ +[gd_resource type="Resource" script_class="AchievementData" format=3 uid="uid://ci0gh7m10e81h"] + +[ext_resource type="Script" uid="uid://dlp73yl0k544o" path="res://Core/AchievementSystem/AchievementData.cs" id="1_m0pky"] +[ext_resource type="Texture2D" uid="uid://dn5swbwsiij01" path="res://assets/images/achievements/quick_hands.png" id="1_qwp6j"] + +[resource] +script = ExtResource("1_m0pky") +Id = "set_sec_5" +AchievementName = "Быстрые руки" +AchievementDescription = "Найти комбинацию за 5 секунд" +Type = 3 +TargetValue = 1 +Icon = ExtResource("1_qwp6j") +metadata/_custom_type_script = "uid://dlp73yl0k544o" diff --git a/resources/achievements/Sets25_NoMistakes.tres b/resources/achievements/Sets25_NoMistakes.tres new file mode 100644 index 0000000..99b8bc1 --- /dev/null +++ b/resources/achievements/Sets25_NoMistakes.tres @@ -0,0 +1,14 @@ +[gd_resource type="Resource" script_class="AchievementData" format=3 uid="uid://b47joqpxeutb4"] + +[ext_resource type="Texture2D" uid="uid://muacqjn047gh" path="res://assets/images/achievements/unstoppable.png" id="1_3ua8n"] +[ext_resource type="Script" uid="uid://dlp73yl0k544o" path="res://Core/AchievementSystem/AchievementData.cs" id="2_lilv8"] + +[resource] +script = ExtResource("2_lilv8") +Id = "Sets_25_without_mistakes" +AchievementName = "Без промаха" +AchievementDescription = "Найти 25 комбинаций подряд без ошибок" +Type = 8 +TargetValue = 25 +Icon = ExtResource("1_3ua8n") +metadata/_custom_type_script = "uid://dlp73yl0k544o" diff --git a/resources/achievements/Sets_3_per_15_sec.tres b/resources/achievements/Sets_3_per_15_sec.tres new file mode 100644 index 0000000..e29bb11 --- /dev/null +++ b/resources/achievements/Sets_3_per_15_sec.tres @@ -0,0 +1,14 @@ +[gd_resource type="Resource" script_class="AchievementData" format=3 uid="uid://la6qbi3b3qnr"] + +[ext_resource type="Texture2D" uid="uid://dkod2v2n1c01a" path="res://assets/images/achievements/lightning.png" id="1_0kq8x"] +[ext_resource type="Script" uid="uid://dlp73yl0k544o" path="res://Core/AchievementSystem/AchievementData.cs" id="1_vahwl"] + +[resource] +script = ExtResource("1_vahwl") +Id = "Sets_3_per_15_sec" +AchievementName = "Молния" +AchievementDescription = "Найти 3 комбинации подряд быстрее чем за 15 секунд" +Type = 10 +TargetValue = 3 +Icon = ExtResource("1_0kq8x") +metadata/_custom_type_script = "uid://dlp73yl0k544o" diff --git a/resources/achievements/TotalSets_10.tres b/resources/achievements/TotalSets_10.tres new file mode 100644 index 0000000..f533ca8 --- /dev/null +++ b/resources/achievements/TotalSets_10.tres @@ -0,0 +1,14 @@ +[gd_resource type="Resource" script_class="AchievementData" format=3 uid="uid://c0khsml6efaq"] + +[ext_resource type="Texture2D" uid="uid://qolle4ecu4o2" path="res://assets/images/achievements/explorer.png" id="1_7xif6"] +[ext_resource type="Script" uid="uid://dlp73yl0k544o" path="res://Core/AchievementSystem/AchievementData.cs" id="2_66fdo"] + +[resource] +script = ExtResource("2_66fdo") +Id = "totalSets_10" +AchievementName = "Исследователь " +AchievementDescription = "Найти 10 комбинаций" +Type = 5 +TargetValue = 10 +Icon = ExtResource("1_7xif6") +metadata/_custom_type_script = "uid://dlp73yl0k544o" diff --git a/resources/achievements/TotalSets_100.tres b/resources/achievements/TotalSets_100.tres new file mode 100644 index 0000000..8029124 --- /dev/null +++ b/resources/achievements/TotalSets_100.tres @@ -0,0 +1,14 @@ +[gd_resource type="Resource" script_class="AchievementData" format=3 uid="uid://bbetvxo00tbv2"] + +[ext_resource type="Texture2D" uid="uid://xfjycp061qup" path="res://assets/images/achievements/logic_master.png" id="1_3dn3s"] +[ext_resource type="Script" uid="uid://dlp73yl0k544o" path="res://Core/AchievementSystem/AchievementData.cs" id="1_p5kjl"] + +[resource] +script = ExtResource("1_p5kjl") +Id = "totalSets_100" +AchievementName = "Мастер логики" +AchievementDescription = "Найти 100 комбинаций" +Type = 5 +TargetValue = 100 +Icon = ExtResource("1_3dn3s") +metadata/_custom_type_script = "uid://dlp73yl0k544o" diff --git a/resources/achievements/TotalSets_50.tres b/resources/achievements/TotalSets_50.tres new file mode 100644 index 0000000..31a60de --- /dev/null +++ b/resources/achievements/TotalSets_50.tres @@ -0,0 +1,14 @@ +[gd_resource type="Resource" script_class="AchievementData" format=3 uid="uid://35cjnbw2xnvw"] + +[ext_resource type="Texture2D" uid="uid://bdofd68t12sb" path="res://assets/images/achievements/analyst.png" id="1_dqbtw"] +[ext_resource type="Script" uid="uid://dlp73yl0k544o" path="res://Core/AchievementSystem/AchievementData.cs" id="1_li4cs"] + +[resource] +script = ExtResource("1_li4cs") +Id = "totalSets_50" +AchievementName = "Аналитик " +AchievementDescription = "Найти 50 комбинаций" +Type = 5 +TargetValue = 50 +Icon = ExtResource("1_dqbtw") +metadata/_custom_type_script = "uid://dlp73yl0k544o" diff --git a/resources/achievements/TotalSets_500.tres b/resources/achievements/TotalSets_500.tres new file mode 100644 index 0000000..e05809e --- /dev/null +++ b/resources/achievements/TotalSets_500.tres @@ -0,0 +1,14 @@ +[gd_resource type="Resource" script_class="AchievementData" format=3 uid="uid://6nu02w1jojm6"] + +[ext_resource type="Script" uid="uid://dlp73yl0k544o" path="res://Core/AchievementSystem/AchievementData.cs" id="1_j83c4"] +[ext_resource type="Texture2D" uid="uid://dqrcr6vpa7yyw" path="res://assets/images/achievements/genius.png" id="1_mll0k"] + +[resource] +script = ExtResource("1_j83c4") +Id = "totalSets_500" +AchievementName = "Гений" +AchievementDescription = "Найти 500 комбинаций" +Type = 5 +TargetValue = 500 +Icon = ExtResource("1_mll0k") +metadata/_custom_type_script = "uid://dlp73yl0k544o" diff --git a/scenes/game/cards/Card.cs b/scenes/game/cards/Card.cs index 6a9a3f6..7c708e7 100644 --- a/scenes/game/cards/Card.cs +++ b/scenes/game/cards/Card.cs @@ -103,9 +103,9 @@ public override void _Ready() _clickArea = GetNode