35 lines
1.3 KiB
Rust
35 lines
1.3 KiB
Rust
use std::sync::Arc;
|
|
|
|
use crate::dynamic_data::script_handling::script::{Script, ScriptContainer};
|
|
use crate::dynamic_data::script_handling::script_set::ScriptSet;
|
|
use crate::{PkmnResult, StringKey};
|
|
|
|
/// This trait adds a bunch of helper functions to deal with volatile scripts on a struct.
|
|
pub trait VolatileScriptsOwner {
|
|
/// Return the [`ScriptSet`] that are our volatile scripts.
|
|
fn volatile_scripts(&self) -> &Arc<ScriptSet>;
|
|
/// Loads a volatile script by name.
|
|
fn load_volatile_script(&self, key: &StringKey) -> PkmnResult<Option<Arc<dyn Script>>>;
|
|
|
|
/// Check if a volatile script with given name exists.
|
|
fn has_volatile_script(&self, key: &StringKey) -> bool {
|
|
self.volatile_scripts().has(key)
|
|
}
|
|
|
|
/// Gets a volatile script by name.
|
|
fn get_volatile_script(&self, key: &StringKey) -> Option<ScriptContainer> {
|
|
self.volatile_scripts().get(key)
|
|
}
|
|
|
|
/// Adds a volatile script by name.
|
|
fn add_volatile_script(&mut self, key: &StringKey) -> PkmnResult<Option<ScriptContainer>> {
|
|
self.volatile_scripts()
|
|
.stack_or_add(key, &|| self.load_volatile_script(key))
|
|
}
|
|
|
|
/// Removes a volatile script by name.
|
|
fn remove_volatile_script(&mut self, key: &StringKey) {
|
|
self.volatile_scripts().remove(key)
|
|
}
|
|
}
|