use std::any::Any;
use crate::{
high::{
engine::{EngineData, EngineToken},
northstar::PluginInfo,
squirrel::CSquirrelVMHandle,
},
mid::{engine::DLLPointer, reloading},
};
pub trait Plugin: Any + Sync {
const PLUGIN_INFO: PluginInfo;
fn new(reloaded: bool) -> Self;
fn on_dll_load(
&self,
_engine_data: Option<&EngineData>,
_dll_ptr: &DLLPointer,
_engine_token: EngineToken,
) {
}
fn on_sqvm_created(&self, _sqvm_handle: &CSquirrelVMHandle, _engine_token: EngineToken) {}
fn on_sqvm_destroyed(&self, _sqvm_handle: &CSquirrelVMHandle, _engine_token: EngineToken) {}
fn on_module_load() {}
fn plugins_loaded(&self, _engine_token: EngineToken) {}
fn runframe(&self, _engine_token: EngineToken) {}
fn on_reload_request(&self) -> reloading::ReloadResponse {
reloading::ReloadResponse::deny_reload()
}
}