Fix stray line in IsRevealed's comment; drop the seen-destroyed record of a departed subject with no book
The previous commit does not build (a leftover line in FireControl.cs). EndReveals only runs for subjects the book holds, so a record of a quiet departed ship was held for the sitting; Sense's prune now ends it too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
f6c0d24dba
commit
a554d5ed08
3 changed files with 27 additions and 1 deletions
|
|
@ -1244,6 +1244,9 @@ public abstract class Entity
|
|||
foreach (var reveal in pair.Value.Values) freshest = Math.Max(freshest, reveal.Time);
|
||||
if (Zone.Time - freshest >= memory) _agedSubjects.Add(pair.Key);
|
||||
}
|
||||
// A record of a subject that left and holds no book (a quiet ship, never seen to act) has no entry to age: it goes now.
|
||||
foreach (var subject in _seenDestroyed.Keys)
|
||||
if (!entities.Contains(subject) && !_reveals.ContainsKey(subject)) _agedSubjects.Add(subject);
|
||||
for (var i = 0; i < _agedSubjects.Count; i++) EndReveals(_agedSubjects[i], null);
|
||||
_agedSubjects.Clear();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -157,7 +157,8 @@ public static class FireControl
|
|||
// book holds a reveal of it (Entity.HasReveal: it saw the item act) and the item is still fitted to its ship and
|
||||
// not destroyed. The book says what was seen; the live item says whether it can still be aimed at. Derived on
|
||||
// every read, never cached; watching a ship reveals no gear. Any aiming choice that reads an item's class or
|
||||
XX
|
||||
// stats (Combat's target-item choice, its dps) asks this; it is the item gate of Entity's aim slot (TrySelectTargetItem,
|
||||
// ResolvedAim). A mount is aimed by TrySelectMount, which reads no item at all.
|
||||
public static bool IsRevealed(Entity observer, EquippedItem item) =>
|
||||
!item.EquippableItem.IsDestroyed && item.Entity.Equipment.Contains(item) && observer.HasReveal(item.Entity, item);
|
||||
|
||||
|
|
|
|||
|
|
@ -153,6 +153,28 @@ public sealed partial class ContactRevealTests
|
|||
Assert.False(observer.TrySelectMount(reactor.Hardpoint));
|
||||
}
|
||||
|
||||
// ---- TheSeenDestroyedRecordGoesWithTheSubject ----
|
||||
|
||||
// The record is the observer's memory of one subject: when that subject has left the zone and the observer holds no book
|
||||
// of it (a quiet ship, never seen to act), the record is dropped at the observer's next Sense, not held for the sitting.
|
||||
[Theory]
|
||||
[InlineData("remove")]
|
||||
[InlineData("warp")]
|
||||
public void TheSeenDestroyedRecordGoesWithTheSubject(string how)
|
||||
{
|
||||
var (bay, observer, reactor) = Identified();
|
||||
var sense = SenseOf(observer);
|
||||
reactor.EquippableItem.Durability = 0f;
|
||||
sense();
|
||||
Assert.False(MountsOf(observer.AimCycle(bay)).Any(m => ReferenceEquals(m, reactor.Hardpoint)), "fixture: recorded while the ship is here");
|
||||
Assert.Empty(observer.RevealsOf(bay));
|
||||
|
||||
Leave(_zone, bay, how);
|
||||
sense();
|
||||
observer.EntityInfoGathered[bay] = 1f;
|
||||
Assert.True(MountsOf(observer.AimCycle(bay)).Any(m => ReferenceEquals(m, reactor.Hardpoint)), "the record went with the ship");
|
||||
}
|
||||
|
||||
// ---- ADestroyedClaimedMountIsNotSkippedUnderALie ----
|
||||
|
||||
// The known gap (follow-up perceived-destruction-under-hull-lie): perceiving a destruction reads the true item, and the
|
||||
|
|
|
|||
Loading…
Reference in a new issue