cleaned up rhai manager

This commit is contained in:
michael-bailey 2022-09-15 08:18:30 +01:00
parent cf29c2c50d
commit 1226fafe2c
2 changed files with 44 additions and 35 deletions

View File

@ -1,10 +1,10 @@
use actix::{Actor, Addr};
use mlua::Lua;
use rhai::{Engine, RegisterNativeFunction, Scope};
use crate::client_management::ClientManager;
use crate::rhai::rhai_manager::RhaiManager;
use crate::network::NetworkManager;
use crate::rhai::rhai_manager::RhaiManager;
use crate::Server;
use rhai::{Engine, Scope};
pub struct Builder {
engine: Engine,
@ -25,34 +25,36 @@ impl Builder {
server,
network_manager,
client_manager,
scope: Default::default()
scope: Default::default(),
}
}
pub fn scope_object<T: 'static>(mut self, name: &str, obj: T) -> Self
where
T: Clone {
where
T: Clone,
{
self.engine.register_type::<T>();
self.scope.set_value(name, obj);
self
}
pub fn scope_fn<F, A>(mut self, name: &str, func: F ) -> Self
where
F: RegisterNativeFunction<A, ()>
{
self.engine.register_fn(name, func);
self
}
// not sure what this is for?
// pub fn scope_fn<F, A>(mut self, name: &str, func: F) -> Self
// where
// F: RegisterNativeFunction<A, ()>,
// {
// self.engine.register_fn(name, func);
// self
// }
pub(crate) fn build(self) -> Addr<RhaiManager> {
RhaiManager {
engine: self.engine,
scope: self.scope,
server: self.server,
network_manager: self.network_manager,
client_manager: self.client_manager
}.start()
_scope: self.scope,
_server: self.server,
_network_manager: self.network_manager,
_client_manager: self.client_manager,
}
.start()
}
}
}

View File

@ -1,37 +1,44 @@
use actix::{Actor, Addr, ArbiterHandle, AsyncContext, Context, Running};
use actix::fut::wrap_future;
use rhai::{Engine, Func, Scope};
use crate::client_management::ClientManager;
use crate::rhai::builder::Builder;
use crate::network::NetworkManager;
use crate::rhai::builder::Builder;
use crate::Server;
use actix::{Actor, Addr, Context};
use rhai::{Engine, Scope};
pub struct RhaiManager {
pub(super) engine: Engine,
pub(super) scope: Scope<'static>,
pub(super) server: Addr<Server>,
pub(super) network_manager: Addr<NetworkManager>,
pub(super) client_manager: Addr<ClientManager>,
pub(super) _scope: Scope<'static>,
pub(super) _server: Addr<Server>,
pub(super) _network_manager: Addr<NetworkManager>,
pub(super) _client_manager: Addr<ClientManager>,
}
impl RhaiManager {
pub fn create(
server: Addr<Server>,
network_manager: Addr<NetworkManager>,
client_manager: Addr<ClientManager>
client_manager: Addr<ClientManager>,
) -> Builder {
Builder::new(server.clone(), network_manager.clone(), client_manager.clone())
.scope_object("server", server)
Builder::new(
server.clone(),
network_manager.clone(),
client_manager.clone(),
)
.scope_object("server", server)
}
}
impl Actor for RhaiManager {
type Context = Context<Self>;
fn started(&mut self, ctx: &mut Self::Context) {
self.engine.run(r#"
fn started(&mut self, _ctx: &mut Self::Context) {
self.engine
.run(
r#"
print("hello rhai")
"#).unwrap();
"#,
)
.unwrap();
}
}