com.cupkekgames.resources — global / save-data-scoped player resources. Currencies (wallet pattern) and Experiences (XP tracker with curve-driven leveling) as two independent sub-asmdefs inside one package. Built on the Data package; consumers cherry-pick which sub-asmdef they reference.
The two halves are intentionally decoupled: a card-battler with no leveling references only CupkekGames.Resources.Currencies; a roguelite with XP but no shop references only CupkekGames.Resources.Experiences.
| Sub-asmdef | Purpose | Lead types |
|---|---|---|
Resources.Currencies | Player-scoped numeric balances with spend / earn semantics. | Wallet, CurrencyDefinitionSO, CurrencyCatalog |
Resources.Experiences | XP totals with curve-driven level computation and level-up events. | ExperienceTracker, ExperienceDefinitionSO, ExperienceCatalog, ExperienceCurveSO |
Each sub-asmdef follows the same shape — an IData runtime store, a per-id ScriptableObject definition, and an AssetCatalog<T> registered under a stable id string.
A Wallet and an ExperienceTracker share a surface pattern but diverge in semantics:
Wallet is transactional — Spend(id, amount) returns true / false, CanAfford is the primary queryExperienceTracker is monotonic — AddExp(id, amount) accumulates and fires OnLevelUp when a threshold crossesA shared abstract base would be three methods wide and immediately leak through. Keeping them as siblings inside one repo gives:
Both sub-asmdefs depend on:
com.cupkekgames.data — CatalogKey, IData, AssetCatalog<T>com.cupkekgames.services — ServiceLocator for catalog resolutionNeither sub-asmdef depends on the other.
Wallet.Add / Wallet.Spend. Wired to UI via Wallet.OnChanged.ExperienceTracker.AddExp. Wired to UI via ExperienceTracker.OnExperienceChanged and OnLevelUp.ExperienceCurveSO asset registered in ExperienceCurveCatalog. Multiple experience tracks can reference the same curve.The "id-keyed numeric bag + per-id ScriptableObject definition + registered catalog" skeleton is already used three places in the ecosystem:
AttributeSet — per-unit float values (Health, Attack, Crit%) in com.cupkekgames.rpgstatsItemStatData — per-item float bonuses in com.cupkekgames.inventoryWallet / ExperienceTracker — global long values, hereThe shapes parallel but the semantics diverge (float vs long, per-unit vs global, modifiable vs spendable). A future shared IdValueBag<T> primitive may extract the common skeleton; for now each domain owns its specialized type.
Worth knowing about even though they don't ship today:
| Bridge | Purpose | Likely home |
|---|---|---|
| Currency chip / wallet panel UI | Animated chips, count-up tweens | com.cupkekgames.resources.luna |
| XP bar / level-up burst UI | Progress bar binding, level-up flair | same Luna bridge |
| Quest currency reward | CurrencyReward : IQuestRewardFeature | com.cupkekgames.quests.resources |
| Item-as-currency on pickup | "Gold Coin" item adds to Wallet | com.cupkekgames.inventory.resources |
| Per-Unit XP feature | ExperienceFeature : IUnitFeature with curve from SO | com.cupkekgames.resources.units |
Currency/<id> or Experience/<id> route to Wallet / ExperienceTracker via your consumer codeSettings
Theme
Light
Contrast
Material
Dark
Dim
Material Dark
System
Sidebar(Light & Contrast only)
Font Family
DM Sans
Wix
Inclusive Sans
AR One Sans
Direction