What FTE's two pushes share (QuakeServer.Physics.Push and
QuakeServer.Physics.PushTurn): which entities a pusher's move reaches, the pusher's
blocked call, and putting moved entities back.
An entity is a candidate when it is not freed, its move type lets it be pushed, and it either stands on the pusher or overlaps the pusher's new box and is stuck there.
Summary
Functions
Run pusher's blocked with other as other, keeping self and other as they were.
The entities pusher's move may reach, by number, whose move type is not in skip:
those standing on it, and those overlapping box {mins, maxs} (the pusher's new box)
that are stuck there. {old_min, old_max} is the pusher's box before it moved.
Whether entity is a box with no width, which a pusher never blocks on.
Flatten entity to a point at its feet and relink it.
Whether pusher is a liquid brush (negative skin), which moves things but never blocks.
Whether entity stands somewhere.
Whether entity stands on pusher.
Whether entity is not solid or a box trigger: flattened rather than blocking.
Clear entity's on-ground flag.
Functions
@spec blocked(QuakeServer.Server.t(), non_neg_integer(), non_neg_integer()) :: QuakeServer.Server.t()
Run pusher's blocked with other as other, keeping self and other as they were.
@spec candidates( QuakeServer.Server.t(), non_neg_integer(), {tuple(), tuple()}, {tuple(), tuple()}, [ integer() ] ) :: [non_neg_integer()]
The entities pusher's move may reach, by number, whose move type is not in skip:
those standing on it, and those overlapping box {mins, maxs} (the pusher's new box)
that are stuck there. {old_min, old_max} is the pusher's box before it moved.
@spec flat?(QuakeServer.Server.t(), non_neg_integer()) :: boolean()
Whether entity is a box with no width, which a pusher never blocks on.
@spec flatten(QuakeServer.Server.t(), non_neg_integer()) :: QuakeServer.Server.t()
Flatten entity to a point at its feet and relink it.
@spec liquid?(QuakeServer.Server.t(), non_neg_integer()) :: boolean()
Whether pusher is a liquid brush (negative skin), which moves things but never blocks.
@spec on_ground?(QuakeServer.Server.t(), non_neg_integer()) :: boolean()
Whether entity stands somewhere.
@spec rider?(QuakeServer.Server.t(), non_neg_integer(), non_neg_integer()) :: boolean()
Whether entity stands on pusher.
@spec soft?(QuakeServer.Server.t(), non_neg_integer()) :: boolean()
Whether entity is not solid or a box trigger: flattened rather than blocking.
@spec unground(QuakeServer.Server.t(), non_neg_integer()) :: QuakeServer.Server.t()
Clear entity's on-ground flag.