pub name: Arc<InstanceName>,
pub gs: GameState,
pub ipieces: IPieces,
+ pub pcaliases: PieceAliases,
pub ioccults: IOccults,
pub clients: DenseSlotMap<ClientId, Client>,
pub iplayers: SecondarySlotMap<PlayerId, PlayerRecord>,
pub tz: Timezone,
}
+pub type PieceAliases = BTreeMap<String, Box<dyn PieceSpec>>;
+
#[derive(Debug,Serialize,Deserialize)]
pub struct IPiece {
pub p: IPieceTraitObj,
}
#[derive(Debug,Default,Serialize,Deserialize)]
-struct InstanceSaveAccesses<RawTokenStr, PiecesLoadedRef, OccultIlksRef> {
+struct InstanceSaveAccesses<RawTokenStr, PiecesLoadedRef, OccultIlksRef,
+ PieceAliasesRef> {
ipieces: PiecesLoadedRef,
ioccults: OccultIlksRef,
+ pcaliases: PieceAliasesRef,
tokens_players: Vec<(RawTokenStr, PlayerId)>,
aplayers: SecondarySlotMap<PlayerId, IPlayer>,
acl: Acl<TablePermission>,
name: name.clone(),
gs, acl,
ipieces: IPieces(default()),
+ pcaliases: default(),
ioccults: default(),
clients: default(),
iplayers: default(),
self.save_something("a-", |s, w| {
let ipieces = &s.c.g.ipieces;
let ioccults = &s.c.g.ioccults;
+ let pcaliases = &s.c.g.pcaliases;
let tokens_players: Vec<(&str, PlayerId)> = {
let global_players = GLOBAL.players.read().unwrap();
s.c.g.tokens_players.tr
let links = s.c.g.links.clone();
let isa = InstanceSaveAccesses {
ipieces, ioccults, tokens_players, aplayers, acl, links,
+ pcaliases,
};
rmp_serde::encode::write_named(w, &isa)
})?;
fn load_game(accounts: &AccountsGuard,
games: &mut GamesGuard,
name: InstanceName) -> Option<InstanceRef> {
- let InstanceSaveAccesses::<String,ActualIPieces,IOccults> {
+ let InstanceSaveAccesses::<String,ActualIPieces,IOccults,PieceAliases> {
tokens_players, mut ipieces, ioccults, mut aplayers, acl, links,
+ pcaliases,
} = match Self::load_something(&name, "a-") {
Ok(data) => data,
Err(e) => if (||{
gs, iplayers, links,
acl: acl.into(),
ipieces: IPieces(ipieces),
+ pcaliases,
ioccults,
name: name.clone(),
clients: default(),
pub use std::borrow::Cow;
pub use std::cmp::{self, max, min, Ordering};
pub use std::collections::VecDeque;
+pub use std::collections::{btree_map, BTreeMap};
pub use std::collections::{btree_set, BTreeSet};
pub use std::collections::{hash_map, HashMap, HashSet};
pub use std::convert::{Infallible, TryFrom, TryInto};