pub enum Effect {
Show 25 variants
Yes,
Boolean,
Integer,
ScriptValue,
NonNegativeValue,
Date,
Scope(Scopes),
ScopeOkThis(Scopes),
Item(Item),
ScopeOrItem(Scopes, Item),
Target(&'static str, Scopes),
TargetValue(&'static str, Scopes, &'static str),
ItemTarget(&'static str, Item, &'static str, Scopes),
ItemValue(&'static str, Item),
Desc,
Timespan,
Control,
ControlOrLabel,
Unchecked,
UncheckedTodo,
Choice(&'static [&'static str]),
Removed(&'static str, &'static str),
Vb(fn(_: &Token, _: &Block, _: &Everything, _: &mut ScopeContext, _: Validator<'_>, _: Tooltipped)),
Vbv(fn(_: &Token, _: &BV, _: &Everything, _: &mut ScopeContext, _: Tooltipped)),
Vv(fn(_: &Token, _: ValueValidator<'_>, _: &mut ScopeContext, _: Tooltipped)),
}
Expand description
This enum
describes what arguments an effect takes, so that they can be validated.
Since effects are so varied, many of them end up as special cases described by the VB
, VBv
,
and VV
variants. Common patterns can be captured here though.
TODO: adding a “Block” syntax similar to that in triggers may be helpful. It could remove some of the variants that currently have very few users, and it could remove some of the special cases.
Variants§
Yes
No special value, just effect = yes
.
Boolean
Yes and no are both meaningful. The difference between this and Effect::Yes
can be hard
to distinguish.
TODO: needs testing.
Integer
The effect takes a literal integer. It’s not clear whether effects of this type actually
exist or if they’re all secrectly Effect::ScriptValue
.
TODO: needs testing.
ScriptValue
The effect takes a script value, which can be a literal number or a named script value or an inline script value block.
NonNegativeValue
Just like Effect::ScriptValue
, but warns if the argument is a negative literal number.
Date
The effect takes a literal date.
Scope(Scopes)
The effect takes a target value that must evaluate to a scope type in the given Scopes
value.
- Example:
set_county_culture = root.culture
ScopeOkThis(Scopes)
Just like Effect::Scope
but it doesn’t warn if the target is a literal this
. The
default behavior for targets is to warn about that, because it’s usually a mistake.
- Example:
destroy_artifact = this
Item(Item)
The effect takes a literal string that must exist in the item database for the given Item
type.
- Example:
add_perk = iron_constitution_perk
ScopeOrItem(Scopes, Item)
A combination of Effect::Scope
and Effect::Item
. The argument is first checked to see
if it’s a literal Item
, and if not, it’s evaluated as a target. This can sometimes
cause strange error messages if the argument was intended to be an item but just doesn’t exist.
- Example:
add_trait = cannibal
- Example:
add_trait = scope:learned_trait
Target(&'static str, Scopes)
The effect takes a block that contains a single field, named here, which is a target that
must evaluate to a scope type in the given Scopes
value.
- Only example:
becomes_independent = { change = scope:change }
TargetValue(&'static str, Scopes, &'static str)
The effect takes a block with two fields, both named here, where one specifies a target of
the given Scopes
type and the other specifies a script value.
- Example:
change_de_jure_drift_progress = { target = root.primary_title value = 5 }
ItemTarget(&'static str, Item, &'static str, Scopes)
The effect takes a block with two fields, both named here, where one specifies a key for
the given Item
type and the other specifies a target of the given Scopes
type.
- Example:
remove_hook = { type = indebted_hook target = scope:old_caliph }
ItemValue(&'static str, Item)
The effect takes a block with two fields, both named here, where one specifies a key for
the given Item
type and the other specifies a script value.
- Example:
set_amenity_level = { type = court_food_quality value = 3 }
Desc
The effect takes either a localization key or a description block with first_valid
etc.
- Example:
set_artifact_name = relic_weapon_name
Timespan
The effect takes a duration, with a days
, weeks
, months
, or years
script value.
- Example:
add_destination_progress = { days = 5 }
Control
The effect takes a block that contains other effects.
- Examples:
if
,while
,custom_description
ControlOrLabel
The effect takes either a localization key, or a block that contains other effects.
This variant is used by custom_tooltip
.
Unchecked
This variant is for effects that can take any argument and it’s not validated. The effect is too unusual, or not worth checking, or really any argument is fine.
- Examples:
assert_if
,debug_log
,remove_variable
UncheckedTodo
This variant is for effects that we haven’t gotten around to validating yet.
Choice(&'static [&'static str])
The effect takes a literal string that is one of the options given here.
- Example:
end_war = white_peace
Removed(&'static str, &'static str)
The effect is no longer valid; warn if it’s still being used. The first string is the game version number where it was removed and the second string is an explanation that suggests a different effect to try. The second string may be empty.
Vb(fn(_: &Token, _: &Block, _: &Everything, _: &mut ScopeContext, _: Validator<'_>, _: Tooltipped))
The effect takes a block that will be validated by this function
Vbv(fn(_: &Token, _: &BV, _: &Everything, _: &mut ScopeContext, _: Tooltipped))
The effect takes a block or value that will be validated by this function
Vv(fn(_: &Token, _: ValueValidator<'_>, _: &mut ScopeContext, _: Tooltipped))
The effect takes a value that will be validated by this function
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Effect
impl RefUnwindSafe for Effect
impl Send for Effect
impl Sync for Effect
impl Unpin for Effect
impl UnwindSafe for Effect
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> Downcast for Twhere
T: AsAny + ?Sized,
impl<T> Downcast for Twhere
T: AsAny + ?Sized,
§fn downcast_ref<T>(&self) -> Option<&T>where
T: AsAny,
fn downcast_ref<T>(&self) -> Option<&T>where
T: AsAny,
Any
.§fn downcast_mut<T>(&mut self) -> Option<&mut T>where
T: AsAny,
fn downcast_mut<T>(&mut self) -> Option<&mut T>where
T: AsAny,
Any
.§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.