oxide_engine_api/
lib.rs

1use std::path::PathBuf;
2use slotmap::DefaultKey;
3
4// === ФУНКЦИИ СКРИПТА ===
5pub trait Script: Send {
6	/// Выполняется один раз во время загрузки файла библиотеки
7	fn init(&mut self, ctx: &dyn Context);
8	/// Выполняется каждый main loop
9	fn update(&mut self, ctx: &dyn Context, delta: f32);
10}
11
12// === МЕТОДЫ КОНТЕКСТА ===
13pub trait Context {
14	/// Доступ к подсистеме объектов
15	fn objects(&self) -> &dyn ObjectServer;
16	
17	/// Логирование (можно вынести в отдельную подсистему позже)
18	fn log(&self, msg: &str);
19}
20
21// === ПОДСИСТЕМА ОБЪЕКТОВ ===
22pub trait ObjectServer {
23	/// Создаёт корневой объект (без родителя)
24	/// Возвращает `None`, если родитель не существует
25	fn create_root(&self, object_name: String, script_path: Option<PathBuf>) -> Option<DefaultKey>;
26
27	/// Создаёт дочерний объект
28	/// Возвращает `None`, если родитель не существует
29	fn create_child(&self, object_name: String, script_path: Option<PathBuf>, parent_object: DefaultKey) -> Option<DefaultKey>;
30
31	/// Удаляет объект и всё его поддерево
32	fn remove(&self, object_id: DefaultKey) -> bool;
33
34	///
35	fn set_script(&self, object_id: DefaultKey, script_path: PathBuf) -> bool;
36
37	///
38	fn remove_script(&self, object_id: DefaultKey) -> bool;
39
40	///
41	fn move_to_parent(&self, child_object_id: DefaultKey, new_parent_id: DefaultKey) -> bool;
42
43	fn get_by_id(&self, object_id: DefaultKey) -> Option<DefaultKey>;
44
45	fn get_by_name(&self, object_name: PathBuf) -> Option<DefaultKey>;
46}