Add basic extension architecture

This commit is contained in:
illegitimate-egg 2025-03-02 15:09:53 +00:00
parent d98e56d413
commit 7ab11f7f54
3 changed files with 9 additions and 14 deletions

View File

@ -123,7 +123,7 @@ struct RhaiPlayer {
}
#[derive(Debug, Clone, CustomType)]
#[rhai_type(name = "PlayersWrapper")]
#[rhai_type(name = "PlayersWrapper", extra=Self::build_extra)]
pub struct PlayersWrapper(Arc<Mutex<[Player; 255]>>);
impl PlayersWrapper {
@ -131,15 +131,19 @@ impl PlayersWrapper {
Self(players)
}
pub fn send_message(&self, player: RhaiPlayer, message: String) -> Result<(), Box<EvalAltResult>> {
fn send_message(self, player: u8, message: String) -> Result<(), Box<EvalAltResult>> {
let mut players = self.0.lock().unwrap();
players[player.id as usize]
players[player as usize]
.outgoing_data
.extend_from_slice(&send_chat_message(255, "".to_string(), message));
Ok(())
}
fn build_extra(builder: &mut TypeBuilder<Self>) {
builder.with_fn("send_message", Self::send_message);
}
}
#[derive(Debug, Clone, CustomType)]
@ -169,6 +173,7 @@ impl Context {
fn build_extra(builder: &mut TypeBuilder<Self>) {
builder.with_fn("Context", Self::new);
builder.with_fn("players", Self::players);
builder.with_fn("register_command", Self::register_command);
}
}

View File

@ -5,7 +5,7 @@ fn metadata() {
fn init(players) {
let ctx = Context(players);
ctx.register_command("jimmy", |player| {
players.send_message("He's dead")
players.send_message(player, "He's dead")
});
ctx
}

View File

@ -1,10 +0,0 @@
fn metadata() {
Metadata("ping pong", Version("1.0.0"))
}
fn init() {
let ctx = Context();
ctx.register_command("ping", |player| player.sendMessage("Pong! (you smell)"));
ctx.register_command("test", |player| player.sendMessage("test"));
ctx
}