pub enum EffectRootKind {
ObjectiveComplete,
QuestComplete,
Trigger,
TrapPayload,
DialogueRespawn,
ShortcutUnlock,
OnDeath,
ShopOffer,
}Expand description
Which of the campaign’s effect roots a bundle is.
ALL is the closed set. Adding a variant is a rustc error in
EffectRootOwner::kind and in every consumer that matches on an owner, and
makes ALL’s length wrong until it is listed — so a new root cannot be added
without visiting the walk.
Variants§
ObjectiveComplete
A quest’s on_objective_complete[<objective>] bundle.
QuestComplete
A quest’s on_complete bundle.
Trigger
An environment trigger’s effects bundle.
TrapPayload
A trap’s spec-0022 payload bundle.
DialogueRespawn
A dialogue option’s set-checkpoint on_respawn bundle — a plain
Vec<QuestEffect> hanging off the dialogue stage. DialogueEffect
carries no gate, movement or actor verb of its own, which is the reasoning
that made every older walk stop at the quests stage; the bundle nested
inside one is quest-effect vocabulary all the same, and it is lowered
(into cp_on_respawn_<i>).
ShortcutUnlock
A shortcuts[].on_unlock bundle (spec-0016 §2) — the beat that plays as
the bar lifts. Lowered by emit::emit_shortcut_functions into
shortcut_open_<id>, and unenumerated until spec-0031: the sixth blind
spot, structurally the same shape as R4.
OnDeath
The campaign’s on_death bundle (DSL v0.10, spec-0031) — the effects that
run at the moment a player dies, for that player. One per campaign, and
visited only when non-empty, so unbound_roots tells the truth about a
campaign that declares no death beat.
ShopOffer
A shops[].offers[].effects bundle (DSL v0.10, spec-0032) — what choosing
a shop button does, for the player who chose it.
It is a root rather than sugar for the reason spec-0031 states: add a root
when the bundle hangs off an object that has runtime machinery of its own.
An offer’s machinery is a player-interaction advancement, a
minecraft:multi_action dialog, a /trigger objective and a tick
dispatch — the same hardware a bonfire rest runs on. Desugaring it into a
use trigger would put two independent detectors on one right-click.
Implementations§
Source§impl EffectRootKind
impl EffectRootKind
Sourcepub const ALL: [EffectRootKind; 8]
pub const ALL: [EffectRootKind; 8]
Every root, in enumeration order. Not the visit order — see
for_each_effect_root, which interleaves R1/R2 per quest.
Sourcepub const COUNT: usize
pub const COUNT: usize
How many roots there are. The binding ledger reports coverage against this.
Sourcepub fn runs_with_acting_player(self) -> bool
pub fn runs_with_acting_player(self) -> bool
Whether emission runs this root’s bundle with an acting player
(@s), or from the server command source.
This is a fact about the ROOT, not about any verb inside it, and it is
stated here — on the object class — rather than in the one diagnostic that
first needed it. Four roots have a player: on_objective_complete and
on_complete are dispatched as @a from the tick
(Audience::Party), and on_death and a dialogue on_respawn are the
dying/respawning player’s own (Audience::Solo). Three do not: a
trigger’s effects, a trap’s payload and a shortcut’s on_unlock are all
polled on the tick with no executor (Audience::Scheduled) — their own
doc comments in emit say so.
This is the class default, and one root now overrides it per
declaration. A trigger declaring audience: presser (DSL v0.11) is
dispatched by a player_interacted_with_entity advancement and DOES run
as the clicking player; every other trigger is polled with no executor.
A consumer that must be right about a particular bundle therefore asks
EffectRootSite::runs_with_acting_player, which answers per site;
this stays the answer for the kind.
It is exhaustive, so an eighth root cannot be added without answering it,
and emit::root_audience is bound to it in both directions by
emit’s own test — the emitter and this answer cannot drift.
The consumer that needs it today is DW0503: a player-scoped runtime
datum (spec-0031) read or written inside a bundle with no acting player
would emit @s into a sourceless function, which fails silently at
runtime.
Trait Implementations§
Source§impl Clone for EffectRootKind
impl Clone for EffectRootKind
Source§fn clone(&self) -> EffectRootKind
fn clone(&self) -> EffectRootKind
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more