using UnityEngine; using System.Collections; using System.Collections.Generic; namespace MoreMountains.Tools { /// <summary> /// That class is meant to be extended to implement the achievement rules specific to your game. /// </summary> public abstract class MMAchievementRules : MonoBehaviour, MMEventListener<MMGameEvent> { public MMAchievementList AchievementList; [MMInspectorButton("PrintCurrentStatus")] public bool PrintCurrentStatusBtn; public virtual void PrintCurrentStatus() { foreach (MMAchievement achievement in MMAchievementManager.AchievementsList) { string status = achievement.UnlockedStatus ? "unlocked" : "locked"; Debug.Log("["+achievement.AchievementID + "] "+achievement.Title+", status : "+status+", progress : "+achievement.ProgressCurrent+"/"+achievement.ProgressTarget); } } /// <summary> /// On Awake, loads the achievement list and the saved file /// </summary> protected virtual void Awake() { // we load the list of achievements, stored in a ScriptableObject in our Resources folder. MMAchievementManager.LoadAchievementList (AchievementList); // we load our saved file, to update that list with the saved values. MMAchievementManager.LoadSavedAchievements (); } /// <summary> /// On enable, we start listening for MMGameEvents. You may want to extend that to listen to other types of events. /// </summary> protected virtual void OnEnable() { this.MMEventStartListening<MMGameEvent>(); } /// <summary> /// On disable, we stop listening for MMGameEvents. You may want to extend that to stop listening to other types of events. /// </summary> protected virtual void OnDisable() { this.MMEventStopListening<MMGameEvent>(); } /// <summary> /// When we catch an MMGameEvent, we do stuff based on its name /// </summary> /// <param name="gameEvent">Game event.</param> public virtual void OnMMEvent(MMGameEvent gameEvent) { switch (gameEvent.EventName) { case "Save": MMAchievementManager.SaveAchievements (); break; /* // These are just examples of how you could catch a GameStart MMGameEvent and trigger the potential unlock of a corresponding achievement case "GameStart": MMAchievementManager.UnlockAchievement("theFirestarter"); break; case "LifeLost": MMAchievementManager.UnlockAchievement("theEndOfEverything"); break; case "Pause": MMAchievementManager.UnlockAchievement("timeStop"); break; case "Jump": MMAchievementManager.UnlockAchievement ("aSmallStepForMan"); MMAchievementManager.AddProgress ("toInfinityAndBeyond", 1); break;*/ } } } }