using System; namespace Jovian.EncounterSystem { /// /// Marker interface for the polymorphic payload of a . /// Each concrete kind carries its own designer-facing data. Behaviour lives in a reward-applying /// handler registered on for — /// kinds are pure data. Add a new reward type by creating a new /// implementation; the SubclassSelector drawer will surface it automatically. /// public interface IRewardKind { } /// Grants an amount of a named currency (gold, silver, faction-specific scrip, ...). [Serializable] public class CurrencyRewardKind : IRewardKind { public string currencyId; public int amount; } /// Grants one or more copies of an item identified by id. [Serializable] public class ItemRewardKind : IRewardKind { public string itemId; public int quantity; } /// Grants experience points to the party or a specific recipient. [Serializable] public class ExperienceRewardKind : IRewardKind { public int amount; } /// Unlocks something identified by id (recipe, area, journal entry, achievement, ...). /// What is actually unlocked is decided by the game-side handler. [Serializable] public class UnlockableRewardKind : IRewardKind { public string unlockableId; } /// Catch-all with no kind-specific data — useful for prototyping or one-off rewards /// whose semantics are carried by the alone. [Serializable] public class OtherRewardKind : IRewardKind { } }