Sensor: the pinger's swept set decides each crossing once; allies credit a published ping return inside the bistatic oval
Deletes the stateless interval crossing (_previousRadius, PreviousRadius, Crossing) and the allied-pinger scan over other ships' Sensors. The pinging Sensor remembers the subjects its wavefront has reached (_reached), in the beam or not, and a subject's first sweeping tick inside the radius is its one crossing. On it the pinger paints, credits itself and posts a PingReturn to each ally; Entity publishes returns with paints (PublishPaints is now PublishInbox) and the ally's own sensors credit them for one tick at the geometric mean range, inside Rt x Rr < PingRange^2, through the geometric mean of both legs' obscuration (ruling ally-echo-bistatic-oval). This commit builds and replaces the sensor the previous commit's tests were written against. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
e1827c9db0
commit
dd896528cc
4 changed files with 71 additions and 36 deletions
|
|
@ -40,6 +40,24 @@ public enum PaintMode
|
|||
Track
|
||||
}
|
||||
|
||||
// An ally's ping crossed `Subject` at `IlluminatedRange` through `IlluminatedObscuration`; `MaxRange` is that
|
||||
// sensor's PingRange. Posted on the crossing tick and read for one tick by the receiving ship's own sensors.
|
||||
public readonly struct PingReturn
|
||||
{
|
||||
public readonly Entity Subject;
|
||||
public readonly float IlluminatedRange;
|
||||
public readonly float IlluminatedObscuration;
|
||||
public readonly float MaxRange;
|
||||
|
||||
public PingReturn(Entity subject, float illuminatedRange, float illuminatedObscuration, float maxRange)
|
||||
{
|
||||
Subject = subject;
|
||||
IlluminatedRange = illuminatedRange;
|
||||
IlluminatedObscuration = illuminatedObscuration;
|
||||
MaxRange = maxRange;
|
||||
}
|
||||
}
|
||||
|
||||
public readonly struct PaintWarning
|
||||
{
|
||||
public readonly float2 Bearing;
|
||||
|
|
|
|||
Loading…
Reference in a new issue