Skip to content

Commit 4d28165

Browse files
committed
dynamic achievements
1 parent 568e599 commit 4d28165

File tree

7 files changed

+69
-72
lines changed

7 files changed

+69
-72
lines changed

Assets/Scripts/AchievementSystem/AchievementData.cs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public class AchievementData
1515
private readonly List<string> categories;
1616
private readonly string imageName;
1717
private readonly Sprite image;
18-
private readonly int amountRequired;
18+
private int amountRequired;
1919
private int progress;
2020
private bool completed;
2121
private bool updated;
@@ -183,4 +183,19 @@ public bool isUpdated()
183183
return interactedObjects;
184184
}
185185
#endregion
186+
187+
public void SetCompleted(bool isCompleted)
188+
{
189+
completed = isCompleted;
190+
}
191+
192+
public void SetProgress(int newProgress)
193+
{
194+
progress = newProgress;
195+
}
196+
197+
public void SetAmountRequired(int newAmountRequired)
198+
{
199+
amountRequired = newAmountRequired;
200+
}
186201
}

Assets/Scripts/AchievementSystem/AchievementManager.cs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,39 @@ public class AchievementManager : MonoBehaviour
1616
private string status;
1717
private string filterText;
1818
private bool filterActive;
19+
bool completed;
1920
private List<AchievementData> achievements;
2021

22+
public void ValidateAllAchievements()
23+
{
24+
foreach (var achievement in achievements)
25+
{
26+
ValidateCompletionStatus(achievement);
27+
}
28+
}
29+
30+
/// <summary>
31+
/// Validates the completion status of the achievement based on current progress and requirements.
32+
/// </summary>
33+
public void ValidateCompletionStatus(AchievementData achievementData)
34+
{
35+
int currentAmountRequired = achievementData.GetAmountRequired();
36+
int progress = achievementData.GetProgress();
37+
completed = achievementData.IsCompleted();
38+
39+
if (progress >= currentAmountRequired && !completed)
40+
{
41+
completed = true;
42+
}
43+
44+
if (completed) {
45+
completed = true;
46+
achievementData.SetAmountRequired(progress);
47+
}
48+
49+
achievementData.SetCompleted(completed);
50+
}
51+
2152
/// <summary>
2253
/// This function is called by the categoryDropdown and updates the selected category filter
2354
/// </summary>
@@ -62,6 +93,7 @@ public void ResetFilter()
6293
private void Start()
6394
{
6495
achievements = DataManager.Instance.GetAchievements();
96+
ValidateAllAchievements();
6597
Setup();
6698
UpdateUI();
6799
}

Assets/Scripts/AchievementSystem/AchievementTitle.cs

Lines changed: 10 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ public enum AchievementTitle
88
GO_FOR_A_LONGER_WALK,
99
SELECT_CHARACTER,
1010
MINIGAME_ACHIEVER,
11-
MINIGAME_PROFESSIONAL,
1211
BEGINNER,
1312
EXPERIENCED_PLAYER,
1413
SPEEDRUNNER,
@@ -20,52 +19,18 @@ public enum AchievementTitle
2019
OPENER_WORLD_3,
2120
OPENER_WORLD_4,
2221
MINIGAME_SPOTS_FINDER,
23-
MINIGAME_SPOTS_MASTER,
24-
READER_LEVEL_1_WORLD_1,
25-
READER_LEVEL_2_WORLD_1,
26-
READER_LEVEL_3_WORLD_1,
27-
READER_LEVEL_1_WORLD_2,
28-
READER_LEVEL_2_WORLD_2,
29-
READER_LEVEL_3_WORLD_2,
30-
READER_LEVEL_1_WORLD_3,
31-
READER_LEVEL_2_WORLD_3,
32-
READER_LEVEL_3_WORLD_3,
33-
READER_LEVEL_1_WORLD_4,
34-
READER_LEVEL_2_WORLD_4,
35-
READER_LEVEL_3_WORLD_4,
36-
READER_LEVEL_1,
37-
READER_LEVEL_2,
38-
READER_LEVEL_3,
39-
TELEPORTER_BEGINNER_WORLD_1,
40-
TELEPORTER_PROFESSIONAL_WORLD_1,
41-
TELEPORTER_MASTER_WORLD_1,
42-
TELEPORTER_BEGINNER_WORLD_2,
43-
TELEPORTER_PROFESSIONAL_WORLD_2,
44-
TELEPORTER_MASTER_WORLD_2,
45-
TELEPORTER_BEGINNER_WORLD_3,
46-
TELEPORTER_PROFESSIONAL_WORLD_3,
47-
TELEPORTER_MASTER_WORLD_3,
48-
TELEPORTER_BEGINNER_WORLD_4,
49-
TELEPORTER_PROFESSIONAL_WORLD_4,
50-
TELEPORTER_MASTER_WORLD_4,
22+
READER_WORLD_1,
23+
READER_WORLD_2,
24+
READER_WORLD_3,
25+
READER_WORLD_4,
26+
READER,
5127
TELEPORTER_BEGINNER,
5228
TELEPORTER_PROFESSIONAL,
53-
TELEPORTER_MASTER,
54-
COMMUNICATOR_LEVEL_1_WORLD_1,
55-
COMMUNICATOR_LEVEL_2_WORLD_1,
56-
COMMUNICATOR_LEVEL_3_WORLD_1,
57-
COMMUNICATOR_LEVEL_1_WORLD_2,
58-
COMMUNICATOR_LEVEL_2_WORLD_2,
59-
COMMUNICATOR_LEVEL_3_WORLD_2,
60-
COMMUNICATOR_LEVEL_1_WORLD_3,
61-
COMMUNICATOR_LEVEL_2_WORLD_3,
62-
COMMUNICATOR_LEVEL_3_WORLD_3,
63-
COMMUNICATOR_LEVEL_1_WORLD_4,
64-
COMMUNICATOR_LEVEL_2_WORLD_4,
65-
COMMUNICATOR_LEVEL_3_WORLD_4,
66-
COMMUNICATOR_LEVEL_1,
67-
COMMUNICATOR_LEVEL_2,
68-
COMMUNICATOR_LEVEL_3,
29+
COMMUNICATOR_WORLD_1,
30+
COMMUNICATOR_WORLD_2,
31+
COMMUNICATOR_WORLD_3,
32+
COMMUNICATOR_WORLD_4,
33+
COMMUNICATOR,
6934
CHICKENSHOCK_MASTER,
7035
MEMORY_MASTER,
7136
FINITEQUIZ_MASTER,

Assets/Scripts/Interactable/Book.cs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ private void Awake()
3737

3838
if (GameSettings.GetGamemode() != Gamemode.TUTORIAL)
3939
{
40-
readBooks = DataManager.Instance.GetAchievements().Find(achievement => achievement.GetTitle() == "READER_LEVEL_3").GetInteractedObjects();
40+
readBooks = DataManager.Instance.GetAchievements().Find(achievement => achievement.GetTitle() == "READER").GetInteractedObjects();
4141
}
4242
}
4343

@@ -187,13 +187,9 @@ private void UpdateListOfBooks()
187187
/// <param name="worldNumber">The number of the world in which is the interacted book</param>
188188
private void UpdateAchievements(int worldNumber)
189189
{
190-
GameManager.Instance.IncreaseAchievementProgress(AchievementTitle.READER_LEVEL_1, 1, readBooks);
191-
GameManager.Instance.IncreaseAchievementProgress(AchievementTitle.READER_LEVEL_2, 1, readBooks);
192-
GameManager.Instance.IncreaseAchievementProgress(AchievementTitle.READER_LEVEL_3, 1, readBooks);
190+
GameManager.Instance.IncreaseAchievementProgress(AchievementTitle.READER, 1, readBooks);
193191

194-
GameManager.Instance.IncreaseAchievementProgress((AchievementTitle)Enum.Parse(typeof(AchievementTitle), $"READER_LEVEL_1_WORLD_{worldNumber}"), 1, readBooks);
195-
GameManager.Instance.IncreaseAchievementProgress((AchievementTitle)Enum.Parse(typeof(AchievementTitle), $"READER_LEVEL_2_WORLD_{worldNumber}"), 1, readBooks);
196-
GameManager.Instance.IncreaseAchievementProgress((AchievementTitle)Enum.Parse(typeof(AchievementTitle), $"READER_LEVEL_3_WORLD_{worldNumber}"), 1, readBooks);
192+
GameManager.Instance.IncreaseAchievementProgress((AchievementTitle)Enum.Parse(typeof(AchievementTitle), $"READER_WORLD_{worldNumber}"), 1, readBooks);
197193
}
198194

199195
/// <summary>

Assets/Scripts/Interactable/NPC.cs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ private void Awake()
4646

4747
if (GameSettings.GetGamemode() != Gamemode.TUTORIAL)
4848
{
49-
alreadyTalkedNPC = DataManager.Instance.GetAchievements().Find(achievement => achievement.GetTitle() == "COMMUNICATOR_LEVEL_3").GetInteractedObjects();
49+
alreadyTalkedNPC = DataManager.Instance.GetAchievements().Find(achievement => achievement.GetTitle() == "COMMUNICATOR").GetInteractedObjects();
5050
}
5151

5252
InitNewStuffSprite();
@@ -291,13 +291,9 @@ private void UpdateListOfNPC()
291291
/// <param name="worldNumber">The number of the world where the NPC the player spoke to is located</param>
292292
private void UpdateAchievements(int worldNumber)
293293
{
294-
GameManager.Instance.IncreaseAchievementProgress(AchievementTitle.COMMUNICATOR_LEVEL_1, 1, alreadyTalkedNPC);
295-
GameManager.Instance.IncreaseAchievementProgress(AchievementTitle.COMMUNICATOR_LEVEL_2, 1, alreadyTalkedNPC);
296-
GameManager.Instance.IncreaseAchievementProgress(AchievementTitle.COMMUNICATOR_LEVEL_3, 1, alreadyTalkedNPC);
297-
298-
GameManager.Instance.IncreaseAchievementProgress((AchievementTitle)Enum.Parse(typeof(AchievementTitle), $"COMMUNICATOR_LEVEL_1_WORLD_{worldNumber}"), 1, alreadyTalkedNPC);
299-
GameManager.Instance.IncreaseAchievementProgress((AchievementTitle)Enum.Parse(typeof(AchievementTitle), $"COMMUNICATOR_LEVEL_2_WORLD_{worldNumber}"), 1, alreadyTalkedNPC);
300-
GameManager.Instance.IncreaseAchievementProgress((AchievementTitle)Enum.Parse(typeof(AchievementTitle), $"COMMUNICATOR_LEVEL_3_WORLD_{worldNumber}"), 1, alreadyTalkedNPC);
294+
GameManager.Instance.IncreaseAchievementProgress(AchievementTitle.COMMUNICATOR, 1, alreadyTalkedNPC);
295+
296+
GameManager.Instance.IncreaseAchievementProgress((AchievementTitle)Enum.Parse(typeof(AchievementTitle), $"COMMUNICATOR_WORLD_{worldNumber}"), 1, alreadyTalkedNPC);
301297
}
302298

303299
/// <summary>

Assets/Scripts/Interactable/Teleporter.cs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ private void Awake()
6464
#if !UNITY_EDITOR
6565
if (GameSettings.GetGamemode() != Gamemode.TUTORIAL)
6666
{
67-
unlockedTeleporters = DataManager.Instance.GetAchievements().Find(achievement => achievement.GetTitle() == "TELEPORTER_MASTER").GetInteractedObjects();
67+
unlockedTeleporters = DataManager.Instance.GetAchievements().Find(achievement => achievement.GetTitle() == "TELEPORTER_PROFESSIONAL").GetInteractedObjects();
6868
}
6969
#endif
7070
}
@@ -263,11 +263,7 @@ private void UpdateAchievements(int worldNumber)
263263
{
264264
GameManager.Instance.IncreaseAchievementProgress(AchievementTitle.TELEPORTER_BEGINNER, 1, unlockedTeleporters);
265265
GameManager.Instance.IncreaseAchievementProgress(AchievementTitle.TELEPORTER_PROFESSIONAL, 1, unlockedTeleporters);
266-
GameManager.Instance.IncreaseAchievementProgress(AchievementTitle.TELEPORTER_MASTER, 1, unlockedTeleporters);
267-
268-
GameManager.Instance.IncreaseAchievementProgress((AchievementTitle)Enum.Parse(typeof(AchievementTitle), $"TELEPORTER_BEGINNER_WORLD_{worldNumber}"), 1, unlockedTeleporters);
269-
GameManager.Instance.IncreaseAchievementProgress((AchievementTitle)Enum.Parse(typeof(AchievementTitle), $"TELEPORTER_PROFESSIONAL_WORLD_{worldNumber}"), 1, unlockedTeleporters);
270-
GameManager.Instance.IncreaseAchievementProgress((AchievementTitle)Enum.Parse(typeof(AchievementTitle), $"TELEPORTER_MASTER_WORLD_{worldNumber}"), 1, unlockedTeleporters);
266+
271267
}
272268

273269

Assets/Scripts/Minigame Loading/Minigame.cs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,7 @@ private void Awake()
5757

5858
if (GameSettings.GetGamemode() != Gamemode.TUTORIAL)
5959
{
60-
unlockedMinigames = DataManager.Instance.GetAchievements().Find(achievement => achievement.GetTitle() == "MINIGAME_SPOTS_MASTER").GetInteractedObjects();
61-
successfullyCompletedMinigames = DataManager.Instance.GetAchievements().Find(achievement => achievement.GetTitle() == "MINIGAME_PROFESSIONAL").GetInteractedObjects();
60+
unlockedMinigames = DataManager.Instance.GetAchievements().Find(achievement => achievement.GetTitle() == "MINIGAME_SPOTS_FINDER").GetInteractedObjects();
6261
}
6362

6463
audioSource = gameObject.AddComponent<AudioSource>();
@@ -146,7 +145,6 @@ public void OnTriggerEnter2D(Collider2D collision)
146145
{
147146
unlockedMinigames.Add(key);
148147
GameManager.Instance.IncreaseAchievementProgress(AchievementTitle.MINIGAME_SPOTS_FINDER, 1, unlockedMinigames);
149-
GameManager.Instance.IncreaseAchievementProgress(AchievementTitle.MINIGAME_SPOTS_MASTER, 1, unlockedMinigames);
150148
}
151149
}
152150
}
@@ -199,13 +197,12 @@ private void UpdateStatus()
199197
/// </summary>
200198
private void UpdateAchievements()
201199
{
202-
successfullyCompletedMinigames = DataManager.Instance.GetAchievements().Find(achievement => achievement.GetTitle() == "MINIGAME_PROFESSIONAL").GetInteractedObjects();
200+
successfullyCompletedMinigames = DataManager.Instance.GetAchievements().Find(achievement => achievement.GetTitle() == "MINIGAME_ACHIEVER").GetInteractedObjects();
203201
var key = (world,dungeon,number);
204202
if(!successfullyCompletedMinigames.Contains(key))
205203
{
206204
successfullyCompletedMinigames.Add(key);
207205
GameManager.Instance.IncreaseAchievementProgress(AchievementTitle.MINIGAME_ACHIEVER, 1, successfullyCompletedMinigames);
208-
GameManager.Instance.IncreaseAchievementProgress(AchievementTitle.MINIGAME_PROFESSIONAL, 1, successfullyCompletedMinigames);
209206

210207
GameManager.Instance.IncreaseAchievementProgress((AchievementTitle)Enum.Parse(typeof(AchievementTitle), $"{game}_MASTER"), 1, successfullyCompletedMinigames);
211208
}

0 commit comments

Comments
 (0)