mf_state/
ops.rs

1use std::ops::{Deref, DerefMut};
2
3use crate::{gotham_state::GothamState, resource_table::ResourceTable};
4
5/// 全局资源管理器
6/// 用于管理编辑器运行时的全局资源和状态
7/// - resource_table: 资源表,管理所有注册的资源
8/// - gotham_state: Gotham状态,管理特定于Gotham框架的状态
9#[derive(Default, Debug)]
10pub struct GlobalResourceManager {
11    pub resource_table: ResourceTable,
12    pub gotham_state: GothamState,
13}
14
15// GlobalResourceManager 由内部并发结构保证并发访问安全,无需不安全声明
16
17impl GlobalResourceManager {
18    /// 创建新的全局资源管理器实例
19    pub fn new() -> Self {
20        Self {
21            resource_table: ResourceTable::default(),
22            gotham_state: GothamState::default(),
23        }
24    }
25
26    /// 清理所有资源
27    /// 使用std::mem::take来安全地获取并重置内部状态
28    pub fn clear(&mut self) {
29        std::mem::take(&mut self.gotham_state);
30        std::mem::take(&mut self.resource_table);
31    }
32}
33impl Deref for GlobalResourceManager {
34    type Target = GothamState;
35
36    fn deref(&self) -> &Self::Target {
37        &self.gotham_state
38    }
39}
40
41impl DerefMut for GlobalResourceManager {
42    fn deref_mut(&mut self) -> &mut Self::Target {
43        &mut self.gotham_state
44    }
45}