no need for scriptstate any more
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
pub mod state;
|
||||
pub mod player;
|
||||
pub mod board;
|
||||
pub mod object_info;
|
||||
|
||||
+11
-10
@@ -1,21 +1,22 @@
|
||||
use rhai::Engine;
|
||||
use crate::player::Player;
|
||||
use crate::api::board::BoardRef;
|
||||
use crate::player::PlayerRef;
|
||||
use crate::script::Registerable;
|
||||
use crate::utils::{ErrorSink, PlayerPos};
|
||||
use crate::utils::ErrorSink;
|
||||
|
||||
/// GameState stores player state but Board stores its position, and we want one
|
||||
/// object to register with Rhai
|
||||
#[derive(Copy, Clone)]
|
||||
pub struct PlayerWithPos(pub Player, pub PlayerPos);
|
||||
#[derive(Clone)]
|
||||
pub struct PlayerWithPos(pub PlayerRef, pub BoardRef);
|
||||
|
||||
impl Registerable for PlayerWithPos {
|
||||
fn register(engine: &mut Engine, _error_sink: ErrorSink) {
|
||||
engine.register_type_with_name::<PlayerWithPos>("Player")
|
||||
.register_get("gems", |player: &mut PlayerWithPos| player.0.gems)
|
||||
.register_get("health", |player: &mut PlayerWithPos| player.0.health)
|
||||
.register_get("max_health", |player: &mut PlayerWithPos| player.0.max_health)
|
||||
.register_get("keys", |player: &mut PlayerWithPos| player.0.keys)
|
||||
.register_get("x", |player: &mut PlayerWithPos| player.1.x)
|
||||
.register_get("y", |player: &mut PlayerWithPos| player.1.y);
|
||||
.register_get("gems", |player: &mut PlayerWithPos| player.0.borrow().gems)
|
||||
.register_get("health", |player: &mut PlayerWithPos| player.0.borrow().health)
|
||||
.register_get("max_health", |player: &mut PlayerWithPos| player.0.borrow().max_health)
|
||||
.register_get("keys", |player: &mut PlayerWithPos| player.0.borrow().keys)
|
||||
.register_get("x", |player: &mut PlayerWithPos| player.1.borrow().player.x)
|
||||
.register_get("y", |player: &mut PlayerWithPos| player.1.borrow().player.y);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ use crate::utils::{ErrorSink, RegistryValue};
|
||||
pub struct Registry(pub BoardRef);
|
||||
|
||||
impl Registerable for Registry {
|
||||
fn register(engine: &mut Engine, error_sink: ErrorSink) {
|
||||
fn register(engine: &mut Engine, _error_sink: ErrorSink) {
|
||||
engine.register_type_with_name::<Registry>("Registry");
|
||||
|
||||
// Registry.get(key) -> Dynamic — returns () if the key is absent.
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
use rhai::Engine;
|
||||
use crate::api::board::BoardRef;
|
||||
use crate::api::player::PlayerWithPos;
|
||||
use crate::game::GameState;
|
||||
use crate::script::Registerable;
|
||||
use crate::utils::ErrorSink;
|
||||
|
||||
/// The host-provided context handed to every script hook for the duration of one
|
||||
/// call. Currently just the player snapshot, but it exists so more host state can
|
||||
/// be threaded through the `run_*` methods without changing each signature again.
|
||||
#[derive(Clone)]
|
||||
pub struct ScriptState {
|
||||
pub player: PlayerWithPos,
|
||||
pub board: BoardRef,
|
||||
}
|
||||
|
||||
impl ScriptState {
|
||||
pub fn from_game_state(game_state: &GameState) -> Self {
|
||||
Self {
|
||||
player: PlayerWithPos(game_state.player, game_state.board().player),
|
||||
board: game_state.board_rc(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Registerable for ScriptState {
|
||||
fn register(engine: &mut Engine, _error_sink: ErrorSink) {
|
||||
engine.register_type_with_name::<ScriptState>("State")
|
||||
.register_get("player", |state: &mut ScriptState| state.player)
|
||||
.register_get("board", |state: &mut ScriptState| state.board.clone());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user