RevFramework – Pickups System¶
🧭 Overview¶
The Pickups module is a modular, netcode-agnostic pickup and effect pipeline for Unity. It lets you create collectibles and trigger effects — from simple interactions to fully decorated, authority-aware pickups — all using a unified system.
🎯 Key Design Goals¶
- Unified pipeline: World pickups and interactables all execute through the same
PickupEffectmodel. - Extensible by design: Add decorators, feedback, or authority rules without modifying core logic.
- Deterministic behaviour: Consistent execution through effect chains, cooldowns, and optional authority checks.
- Zero lock-in: Works standalone or alongside systems like Inventory, Currency, or Health.
📦 What’s Included¶
| Category | Purpose |
|---|---|
| PickupEffect | Base class for all runtime effects. |
| PickupEffectFactory | Builds decorated effect chains from definitions. |
| PickupEffectDecorator | Wraps effects with additional behaviour (VFX, SFX, conditions). |
| TriggerPickup | Trigger-based world pickup component. |
| InteractablePickupBase | Interactable pickup component (Auto / Press / Hold). |
| PickupAuthority | Authority resolver for validating pickup consumption. |
| Feedback Components | Play sounds, VFX, or visual feedback on success/failure. |
| ShieldSystem | Runtime helper used by shield-based pickups. |
| Teaching Panels | Runtime panels for testing and learning the system. |
| Demo Scenes | Example scenes demonstrating pickups, decorators, and interaction flows. |
⚙️ Hook-Up Summary¶
1️⃣ Create a Definition¶
Project ▸ Create ▸ RevFramework ▸ Pickups ▸ Definitions
Configure behaviour and optional decorator settings.
2️⃣ Create a Pickup Prefab¶
Add one of:
TriggerPickup— world trigger (auto-consume)InteractablePickupBase— interactable (Press, Hold, Auto)
Assign a PickupEffect (often built via a Definition).
3️⃣ Test It¶
Press Play and interact with the pickup.
The system will:
- validate the actor
- apply the effect
- execute decorators
- trigger feedback
- destroy or respawn the pickup
🔗 Integration with Other Modules¶
Pickups does not depend on other systems directly.
Instead, integrations are implemented through:
- custom
PickupEffectlogic - decorators that wrap behaviour
- optional bridges or adapters
Examples include:
- granting items
- awarding currency
- applying health changes
- triggering gameplay systems
🧩 Multiplayer Note¶
Pickups is netcode-agnostic.
It provides:
- authority checks (
IPickupAuthority) - resolution logic (
PickupAuthority)
It does not provide:
- replication
- RPC handling
- spawning/despawning
Your networking solution is responsible for those concerns.
🗝️ Pickups decides “can this be consumed?” — your netcode decides “who owns the world.”
🧠 Extension Points¶
- Subclass
PickupEffectto create new gameplay behaviour. - Use
PickupEffectDecoratorto wrap behaviour around effects. - Implement
IPickupDecoratorCreatorto extend the decorator pipeline. - Extend
InteractablePickupBasefor custom interaction logic. - Implement
IPickupAuthorityfor custom permission rules. - Implement
IPickupFeedback/IPickupFailFeedbackfor UX behaviour.
💡 Typical Usage¶
PickupEffectRunner.Apply(effect, damageable, actor);
This handles:
- standard vs context-aware dispatch
- decorator execution
- cooldown enforcement
- null-damageable handling
Authority and trigger logic are handled by the runtime pickup components.
🧪 Learning Resources¶
-
Demo Scenes Example pickup setups and interaction flows
-
Teaching Panels Runtime panels for inspecting behaviour
-
MkDocs Site
/pickups/ -
Videos Quickstart, decorators, and authority breakdowns
🧠 Summary¶
Pickups is a modular effect-delivery pipeline.
It separates:
- when something is consumed (runtime components)
- what happens (effects)
- how it is wrapped (decorators)
- who is allowed (authority)
That separation is what makes the system:
- extensible
- testable
- integration-friendly