use bevy::prelude::*;
use std::path::PathBuf;
#[derive(Resource, Reflect, Debug, Clone)]
#[reflect(Resource)]
pub struct ModdingConfig {
pub mods_directory: PathBuf,
}
impl Default for ModdingConfig {
fn default() -> Self {
Self {
mods_directory: PathBuf::from("mods"),
}
}
}
impl ModdingConfig {
pub fn with_directory(path: impl Into<PathBuf>) -> Self {
Self {
mods_directory: path.into(),
}
}
}
#[derive(Resource, Reflect, Debug, Default)]
#[reflect(Resource)]
pub struct DiscoveredMods {
pub ron_files: Vec<PathBuf>,
}
impl DiscoveredMods {
pub fn new() -> Self {
Self {
ron_files: Vec::new(),
}
}
pub fn add_ron_file(&mut self, path: PathBuf) {
self.ron_files.push(path);
}
pub fn clear(&mut self) {
self.ron_files.clear();
}
}
#[derive(Resource, Reflect, Default)]
#[reflect(Resource)]
pub struct LoadedModScenes {
#[reflect(ignore)]
pub scenes: Vec<(PathBuf, Handle<DynamicScene>)>,
pub applied: Vec<PathBuf>,
}
impl LoadedModScenes {
pub fn new() -> Self {
Self {
scenes: Vec::new(),
applied: Vec::new(),
}
}
pub fn add_scene(&mut self, path: PathBuf, handle: Handle<DynamicScene>) {
self.scenes.push((path, handle));
}
pub fn mark_applied(&mut self, path: &PathBuf) {
if !self.applied.contains(path) {
self.applied.push(path.clone());
}
}
pub fn is_applied(&self, path: &PathBuf) -> bool {
self.applied.contains(path)
}
}