refactor(render): move look-in dynamics onto walk turns
This commit is contained in:
parent
966836895f
commit
f9a80fbc44
9 changed files with 190 additions and 113 deletions
|
|
@ -204,9 +204,6 @@ internal sealed class WalkProductionLeafRenderer : IWalkFrameLeafRenderer
|
|||
private readonly Action _drawExitSeals;
|
||||
private readonly HashSet<uint> _singleCellScratch = new();
|
||||
private readonly List<uint> _singleCellListScratch = new();
|
||||
private readonly HashSet<uint> _lookInParticleOwnerScratch = new();
|
||||
private RenderFrameView _entityFrame;
|
||||
private bool _entityFrameBound;
|
||||
|
||||
internal WalkProductionLeafRenderer(
|
||||
RetailPViewPassExecutor passes,
|
||||
|
|
@ -248,53 +245,11 @@ internal sealed class WalkProductionLeafRenderer : IWalkFrameLeafRenderer
|
|||
_passes.DrawLandscapeStaticParticles(
|
||||
_frame, new RetailPViewLandscapeStaticParticleContext(ownerIds));
|
||||
|
||||
/// <summary>Binds the packed frame product built after the walk's Collect
|
||||
/// pass and before Replay. The walk records route indices during Collect;
|
||||
/// Replay consumes the matching product ranges through this exact view.</summary>
|
||||
internal void BindEntityFrame(in RenderFrameView view)
|
||||
public void DrawCellParticles(uint cellId, IReadOnlySet<uint> ownerIds)
|
||||
{
|
||||
_entityFrame = view;
|
||||
_entityFrameBound = true;
|
||||
}
|
||||
|
||||
public void DrawLookInDynamics(
|
||||
uint cellId,
|
||||
int routeIndex,
|
||||
IReadOnlySet<uint> staticParticleOwnerIds)
|
||||
{
|
||||
if (!_entityFrameBound)
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
"Walk look-in dynamics replayed before the packed entity frame was bound.");
|
||||
}
|
||||
|
||||
_passes.UseIndoorMembershipOnlyRouting();
|
||||
_passes.DrawEntityRoute(
|
||||
_frame.Camera,
|
||||
in _entityFrame,
|
||||
RenderFrameCandidateRoute.LookInObject,
|
||||
routeIndex,
|
||||
cellId,
|
||||
_frame.PlayerLandblockId ?? 0u);
|
||||
|
||||
_lookInParticleOwnerScratch.Clear();
|
||||
_lookInParticleOwnerScratch.UnionWith(staticParticleOwnerIds);
|
||||
RenderFrameRouteOwnerSelector.Union(
|
||||
_lookInParticleOwnerScratch,
|
||||
in _entityFrame,
|
||||
RenderFrameCandidateRoute.LookInObject,
|
||||
routeIndex,
|
||||
cellId);
|
||||
if (_lookInParticleOwnerScratch.Count > 0)
|
||||
{
|
||||
_passes.DrawCellParticles(
|
||||
_frame,
|
||||
new RetailPViewCellSliceContext(
|
||||
cellId,
|
||||
default,
|
||||
_lookInParticleOwnerScratch));
|
||||
}
|
||||
|
||||
_passes.DrawCellParticles(
|
||||
_frame,
|
||||
new RetailPViewCellSliceContext(cellId, default, ownerIds));
|
||||
}
|
||||
|
||||
public void DrawExitSeals() => _drawExitSeals();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue