45 lines
1.4 KiB
Rust
45 lines
1.4 KiB
Rust
use std::{collections::BTreeMap, path::PathBuf};
|
|
|
|
use bevy::{ecs::world::CommandQueue, prelude::*, tasks::Task};
|
|
use multi_key_map::MultiKeyMap;
|
|
use occule::Codec;
|
|
|
|
use crate::payload::DirworldEntityPayload;
|
|
|
|
/// Root directory of the world
|
|
#[derive(Resource, Deref, DerefMut, Default)]
|
|
pub struct DirworldRootDir(pub Option<PathBuf>);
|
|
|
|
/// Current directory of the world
|
|
#[derive(Resource, Default)]
|
|
pub struct DirworldCurrentDir {
|
|
/// Path of current directory
|
|
pub path: PathBuf,
|
|
/// Payload (contents of .door file) in current directory, if present
|
|
pub payload: Option<DirworldEntityPayload>,
|
|
}
|
|
|
|
#[derive(Resource, Deref, DerefMut, Default, Debug)]
|
|
pub struct DirworldLastDir(pub PathBuf);
|
|
|
|
/// Running background tasks
|
|
#[derive(Default, Resource, Deref, DerefMut)]
|
|
pub struct DirworldTasks(pub BTreeMap<String, Option<Task<Option<CommandQueue>>>>);
|
|
|
|
/// A map between file types and their corresponding preload/spawn callback observers
|
|
#[derive(Debug, Default, Resource, Deref, DerefMut)]
|
|
pub struct DirworldObservers(pub MultiKeyMap<EntryType, Entity>);
|
|
|
|
/// A map between file extensions and their corresponding [`Codec`]s
|
|
#[derive(Default, Resource, Deref, DerefMut)]
|
|
pub struct DirworldCodecs(pub MultiKeyMap<String, Box<dyn Codec + Send + Sync>>);
|
|
|
|
/// Type of a filesystem entry
|
|
#[derive(Debug, PartialEq, Eq, Hash)]
|
|
pub enum EntryType {
|
|
/// A file with an optional extension
|
|
File(Option<String>),
|
|
/// A folder
|
|
Folder,
|
|
}
|