From 7ab11f7f54f5098e22df56a1cd4d5f1d61aa4a41 Mon Sep 17 00:00:00 2001 From: illegitimate-egg Date: Sun, 2 Mar 2025 15:09:53 +0000 Subject: [PATCH] Add basic extension architecture --- src/extensions.rs | 11 ++++++++--- src/extensions/jimmy.rhai | 2 +- src/extensions/ping-pong.rhai | 10 ---------- 3 files changed, 9 insertions(+), 14 deletions(-) delete mode 100644 src/extensions/ping-pong.rhai diff --git a/src/extensions.rs b/src/extensions.rs index 1c7a795..f84f8b5 100644 --- a/src/extensions.rs +++ b/src/extensions.rs @@ -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>); impl PlayersWrapper { @@ -131,15 +131,19 @@ impl PlayersWrapper { Self(players) } - pub fn send_message(&self, player: RhaiPlayer, message: String) -> Result<(), Box> { + fn send_message(self, player: u8, message: String) -> Result<(), Box> { 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) { + builder.with_fn("send_message", Self::send_message); + } } #[derive(Debug, Clone, CustomType)] @@ -169,6 +173,7 @@ impl Context { fn build_extra(builder: &mut TypeBuilder) { builder.with_fn("Context", Self::new); + builder.with_fn("players", Self::players); builder.with_fn("register_command", Self::register_command); } } diff --git a/src/extensions/jimmy.rhai b/src/extensions/jimmy.rhai index 383ae86..3a7635d 100644 --- a/src/extensions/jimmy.rhai +++ b/src/extensions/jimmy.rhai @@ -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 } diff --git a/src/extensions/ping-pong.rhai b/src/extensions/ping-pong.rhai deleted file mode 100644 index 6c8a1c1..0000000 --- a/src/extensions/ping-pong.rhai +++ /dev/null @@ -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 -}