Skip to main content

EffectRootKind

Enum EffectRootKind 

Source
pub enum EffectRootKind {
    ObjectiveComplete,
    QuestComplete,
    Trigger,
    TrapPayload,
    DialogueRespawn,
    ShortcutUnlock,
    OnDeath,
    ShopOffer,
    OnKill,
    AssemblyLand,
    LoopCross,
}
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.

§

OnKill

A wave’s or an actor’s on_kill bundle (spec-0074) — what happens each time a player is credited with killing one of the fight’s bodies, run as that player. A root rather than sugar for the reason R8 is: it hangs off an object with runtime machinery of its own (the player_killed_entity advancement over the fight’s tag). Visited only where declared, so unbound_roots tells the truth about a campaign with none.

§

AssemblyLand

An assembly’s strikes.pattern[].on_land bundle (spec-0082) — what a blow does, run on the tick the strike clip’s last frame is applied. A root rather than sugar because it hangs off an object with runtime machinery of its own (the per-assembly strike state machine). Polled on the tick with no executor, like a trigger’s bundle. Visited only where a step declares one, so unbound_roots tells the truth about a campaign with none.

§

LoopCross

A loops[].on_cross bundle (spec-0086) — the dungeon’s answer to a body the loop just moved, run from the server source after the move and the count. A root rather than sugar because it hangs off an object with runtime machinery of its own (the loop’s tick poll and its move function). Visited only where declared.

Implementations§

Source§

impl EffectRootKind

Source

pub const ALL: [EffectRootKind; 11]

Every root, in enumeration order. Not the visit order — see for_each_effect_root, which interleaves R1/R2 per quest.

Source

pub const COUNT: usize

How many roots there are. The binding ledger reports coverage against this.

Source

pub fn stage(self) -> &'static str

The stage document this root lives in (quests or dialogue).

Source

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.

Source

pub fn label(self) -> &'static str

A short human label, used by the binding ledger and by diagnostics that report which roots a proof examined.

Trait Implementations§

Source§

impl Clone for EffectRootKind

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for EffectRootKind

Source§

impl Debug for EffectRootKind

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Eq for EffectRootKind

Source§

impl Hash for EffectRootKind

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl Ord for EffectRootKind

Source§

fn cmp(&self, other: &Self) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 (const: unstable) · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 (const: unstable) · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 (const: unstable) · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

fn clamp_to<R>(self, range: R) -> Self
where Self: Sized, R: ClampBounds<Self>,

🔬This is a nightly-only experimental API. (clamp_to)
Restrict a value to a certain range. Read more
Source§

impl PartialEq for EffectRootKind

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl PartialOrd for EffectRootKind

Source§

fn partial_cmp(&self, other: &Self) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 (const: unstable) · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 (const: unstable) · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 (const: unstable) · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 (const: unstable) · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl StructuralPartialEq for EffectRootKind

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.