Pickups Integrations¶
This folder contains optional integration bridges for the Pickups system.
These integrations allow Pickups to interact with other RevFramework systems without the Pickups runtime assembly depending on any of them. Each bridge is a separate, define-gated assembly that references the other system directly — so removing the folder removes the dependency, and keeping it keeps the contract compile-checked.
These integrations are built and supported for RevFramework systems only. They are not intended as a general integration layer for third-party solutions.
What This Folder Is¶
Each subfolder represents a specific system integration, for example:
CurrencyIntegration/→ currency adjustments via pickupsHealthIntegration/→ healing, regen, and health-based gatingInventoryIntegration/→ item grants via inventory services
👉 These are extensions, not part of the core Pickups runtime.
How Integrations Work¶
All integrations follow the same principles:
Soft Dependencies¶
- No direct assembly references from the Pickups runtime to other systems
- Each integration lives in its own assembly, gated on both systems'
REV_*_PRESENTdefines, and references the other system directly and by type - Services are located through that system's own typed resolver —
CurrencyResolve.ServiceFrom(...),InventoryResolve.ServiceFrom(...)— or through a typed component lookup such asGetComponentInParent<IHealthReadonly>()
👉 This keeps Pickups fully modular and removable: delete the folder and the Pickups runtime is untouched. It is the assembly boundary doing that work, not indirection at the call site.
No reflection
There is none anywhere under Integrations/Pickups. An earlier GiveCurrencyEffect did reflect over type names and method verbs, and it failed silently on every path — the effect had always done nothing. Direct typed calls turn that class of failure into a compile error.
Explicit Opt-In¶
- Integrations do not activate automatically
-
You must:
-
include the integration folder
- use the provided definitions/effects
- or call integration-specific factory entrypoints
👉 Nothing is injected or globally overridden.
Resolution Failure Is Reported, Not Swallowed¶
Integrations resolve the target system's service at runtime, per apply.
If resolution fails, or the service refuses:
- The effect applies nothing and returns
false - An Editor warning is logged naming the reason and the fix
- No runtime exceptions are thrown
GiveCurrencyEffect and GiveItemEffect both implement IPickupEffectReportsDelivery, so that false reaches the caller. A TriggerPickup reading it leaves itself in the world instead of destroying itself — which is what stops a payload being consumed without ever being received.
Important¶
These are optional¶
- Pickups works without any integrations
- You only need these if you want cross-system behaviour
No lock-in¶
- You are not required to use these integrations
-
You can:
-
replace them
- extend them
- or build your own
👉 These are examples of how to integrate RevFramework systems, not required dependencies.
Behaviour depends on target systems¶
Each integration calls a real contract on the other system:
- Currency →
ICurrencyService.Credit/Debit(GameObject, CurrencyId, Money) - Inventory →
IInventoryService.GiveExact(GameObject, ItemStack, string) - Health →
IHealthWriter,IHealthReadonlyon the actor's damageable
These are compile-time references, so a contract that moves breaks the build rather than the game. What can still fail at runtime is resolution: if no service is present in the scene, the effect reports a refusal instead of applying.
Third-Party / Custom System Use¶
These integrations are built for RevFramework systems only.
If you are integrating Pickups with non-RevFramework systems:
- Treat these integrations as reference examples
- Implement your own bridge or adapter
- Use the public APIs of each system
👉 Custom or third-party integrations are not supported by this layer.
Intended Usage¶
Use these integrations when you want to:
- Connect Pickups to other RevFramework systems
- Prototype cross-system behaviour quickly
- Understand how systems interact without coupling
👉 Then adapt or replace them for your own project.
Safe to Remove¶
This entire folder is optional.
Removing it will:
- Not affect the Pickups runtime system
- Only remove cross-system behaviour
Summary¶
This folder answers:
“How do I connect Pickups to other RevFramework systems without coupling them together?”
It provides:
- Optional integration bridges
- Soft-linked system interaction
- Clear extension patterns
Use them as reference implementations — not as required dependencies.