IAchievementController - jimdroberts/FishMMO GitHub Wiki
Interface for a character's achievement controller, handling achievement progress, queries, and related events. Defines the contract for achievement management and event notification in the FishMMO character system.
-
static Action<ICharacter, AchievementTemplate, AchievementTier> OnCompleteAchievement
Static event triggered when an achievement is completed (all tiers for a template are reached).
-
static Action<ICharacter, Achievement> OnUpdateAchievement
Static event triggered when an achievement is updated (progress or tier changes).
-
Dictionary<int, Achievement> Achievements { get; }
Dictionary of all achievements for the character, indexed by template ID.
-
void SetAchievement(int templateID, byte tier, uint value, bool skipEvent = false)
Sets the achievement progress for a given template ID, tier, and value. templateID (int): The template ID of the achievement. tier (byte): The tier to set. value (uint): The value to set. skipEvent (bool): If true, does not trigger the update event.
-
bool TryGetAchievement(int templateID, out Achievement achievement)
Attempts to get an achievement by template ID. templateID (int): The template ID to look up. achievement (Achievement): The resulting achievement if found. Returns true if the achievement exists, false otherwise (bool).
-
void Increment(AchievementTemplate template, uint amount)
Increments the progress of an achievement by a specified amount, handling tier advancement and rewards. template (AchievementTemplate): The achievement template to increment. amount (uint): The amount to increment the achievement's value by.
- Implement the IAchievementController interface in your character controller class.
- Ensure event handlers for OnCompleteAchievement and OnUpdateAchievement are registered as needed.
- Integrate achievement template and tier definitions in your system.
// Example 1: Implementing IAchievementController
// class MyAchievementController : IAchievementController { ... }
// Example 2: Subscribing to Achievement Events
IAchievementController.OnCompleteAchievement += (character, template, tier) => {
// Handle achievement completion
};
- Always implement all interface methods and properties.
- Use event hooks to update UI or trigger rewards on achievement changes.
- Ensure thread safety if accessing achievements from multiple threads.
- Keep achievement data synchronized between client and server as needed.