moduforge_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// 实现Send和Sync trait,表明GlobalResourceManager可以在线程间安全传递和共享
16unsafe impl Send for GlobalResourceManager {}
17unsafe impl Sync for GlobalResourceManager {}
18
19impl GlobalResourceManager {
20    /// 创建新的全局资源管理器实例
21    pub fn new() -> Self {
22        Self {
23            resource_table: ResourceTable::default(),
24            gotham_state: GothamState::default(),
25        }
26    }
27
28    /// 清理所有资源
29    /// 使用std::mem::take来安全地获取并重置内部状态
30    pub fn clear(&mut self) {
31        std::mem::take(&mut self.gotham_state);
32        std::mem::take(&mut self.resource_table);
33    }
34}
35impl Deref for GlobalResourceManager {
36    type Target = GothamState;
37
38    fn deref(&self) -> &Self::Target {
39        &self.gotham_state
40    }
41}
42
43impl DerefMut for GlobalResourceManager {
44    fn deref_mut(&mut self) -> &mut Self::Target {
45        &mut self.gotham_state
46    }
47}