Animate items emerging from building output ports
This commit is contained in:
30
src/lib/sim/BeltSlot.h
Normal file
30
src/lib/sim/BeltSlot.h
Normal file
@@ -0,0 +1,30 @@
|
||||
#pragma once
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include <QPoint>
|
||||
#include <QPointF>
|
||||
|
||||
#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<BeltItemSlot>& 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);
|
||||
Reference in New Issue
Block a user