- Carryable: generic pickup/carry component, cosmetic per-peer follow of
the carrier's HandSocket instead of NGO reparenting (camera pitch isn't
networked, so root-level reparenting wouldn't tilt with the view)
- PlayerCarry: mutual exclusion with PlayerHands, server-timed hold-to-pour
tick (client only signals start/stop, never per-unit requests)
- IPourSource/IPourTarget: decouple PlayerInteractor from concrete Shop
types, same pattern as IInteractable
- Lieferkarton: gains product data (productId/quantity), two-stage
Interact() (open, then pick up), IPourSource
- ShelfSlot: implements IPourTarget, fills the previous RefreshVisuals TODO
- PackageDisplay: renders quantity as a proper column x row grid that
stacks into further layers as space runs out, reused by both containers
- FlyingPackage: small non-networked cosmetic visual that arcs a package
from the carried box to its exact landing slot in the shelf grid on
every successful pour tick, broadcast via Rpc(SendTo.Everyone)
- StorageCrate: rejects pickup while the player is carrying a box
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- SupplierService: Bestellungen mit Lieferzeit-Berechnung
- OrderTerminal: Spieler-Interaktion zum Aufgeben von Bestellungen
- StorageCrateRegistry + StorageCrate.Restock: Server registriert Kisten
und füllt sie bei Lieferung wieder auf
- GameClock.TotalHours: durchgehende Spielzeit für Lieferzeit-Berechnung
- ROADMAP: Bestellsystem-Punkt als erledigt markiert
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>