1.7 KiB
Event reasons (camera + orange dossier)
Contract
Registered events own the idle camera.
EventStrength / TotalScore ranks who wins.
Character fill runs only when the pending EventLed queue is empty, and uses an empty Label (task chip only).
Orange dossier reason = the owning event’s Label while the scene is active (InterestDirector.TryGetOwnedReasonCandidate).
Quiet grace / inactive dwell clears the reason even if focus has not switched yet.
EventReason
IdleSpectator/EventReason.cs is the sole Label factory for camera candidates.
Feeds call typed helpers (Fight, BuildingEat, SeekingLover, …) or Apply(template, a, b, id).
Rules:
- Sentence form with names:
{a} is fighting {b},{a} is eating a beehive,{a} is seeking a lover. - Set
RelatedUnitwhen the sentence names a second party. - Never invent stranger subjects for unit-led events.
- Never use engine jargon that misstates the action (
Consumes a building→ eating/foraging viaBehConsumeTargetBuilding).
Removed crumbs
Do not author these as orange reasons:
In action- bare
Duel/Fight (N)without a named sentence - identity titles (
King of X,Leader of X,Lone beetle) Consumes a building/Damages a building: {a}crumb form
Ownership enum
InterestOwnership (Signal/Ambient) is retained on catalogs for compatibility but ignored by EventFeedUtil.Register.
Every registration is EventLed and may own the camera.
Strength is the dial (war ~94 beats seek-lover ~45).
Dossier display
UnitDossier.EventLabelBeat keeps the authored sentence.
It only rejects identity/weak crumbs and scrubs living stranger names (ReasonNamesStranger / LeadsWithForeignName).