oxide_engine_api/
lib.rs

1use std::path::PathBuf;
2
3/// Уникальный идентификатор объекта в сцене.
4pub type EntityId = u64;
5
6// === Подсистема объектов ===
7pub trait ObjectSystem {
8	/// Создаёт корневой объект (без родителя).
9	fn create_root(&self, name: String, script_path: Option<PathBuf>) -> EntityId;
10
11	/// Создаёт дочерний объект.
12	/// Возвращает `None`, если родитель не существует.
13	fn create_child(&self, name: String, script_path: Option<PathBuf>, parent: EntityId) -> Option<EntityId>;
14
15	/// Удаляет объект и всё его поддерево.
16	fn remove(&self, id: EntityId);
17}
18
19// === Основной контекст движка ===
20pub trait WorldContext {
21	/// Доступ к системе объектов.
22	fn objects(&self) -> &dyn ObjectSystem;
23	
24	/// Логирование (можно вынести в отдельную подсистему позже)
25	fn log(&self, msg: &str);
26}
27
28pub trait Script: Send {
29	fn init(&mut self, ctx: &dyn WorldContext);
30	fn update(&mut self, ctx: &dyn WorldContext, delta: f32);
31}