#pragma once #include #include #include #include "Item.h" #include "Rotation.h" // A single item on a belt-like lane: an item plus its fractional progress along // the lane's travel direction. Shared by BeltSystem's belt/tunnel tiles and by a // building's virtual output belt (REQ-MAT-OUTPUT-EMERGE) so the packing and // geometry live in exactly one place. struct BeltItemSlot { Item item; double progress; // [0.0, 1.0]: 0 = just entered, 1 = at output edge }; // Advances every slot in `slots` by `progressPerTick`, applying the standard belt // packing: the front (index 0) carries the highest progress; each following slot // stays at least 0.25 behind the slot ahead and is capped at 1.0 - i * 0.25. // `slots` must be ordered front (highest progress) first. This is the per-tile // advance shared by belts, tunnel entries, and tunnel exits. void advanceBeltSlots(std::vector& slots, double progressPerTick); // World-space centre (in tile units) of a slot at `progress` on a lane occupying // `tile` and flowing in `dir`. Progress 0 = entry edge, 1 = output edge. QPointF beltSlotWorldPos(QPoint tile, Rotation dir, double progress);