cultivar/common/src/sim.rs

53 lines
1.2 KiB
Rust

use crate::std_bis::*;
use crate::{board, entities};
use parity_scale_codec::{Decode, Encode};
#[cfg(feature = "std")]
use std::collections::BTreeMap;
#[derive(Clone, Copy, Debug, Decode, Encode, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub struct SimId(pub [u8; 16]);
impl sp_runtime_interface::pass_by::PassBy for SimId {
type PassBy = sp_runtime_interface::pass_by::Codec<Self>;
}
#[derive(Clone, Copy, Debug, Decode, Encode, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub struct EntityId(pub u32);
impl sp_runtime_interface::pass_by::PassBy for EntityId {
type PassBy = sp_runtime_interface::pass_by::Codec<Self>;
}
#[derive(Clone, Debug, Decode, Encode, Eq, PartialEq)]
pub enum SimError {
EntityNotFound,
SimNotFound,
}
impl sp_runtime_interface::pass_by::PassBy for SimError {
type PassBy = sp_runtime_interface::pass_by::Codec<Self>;
}
#[cfg(feature = "std")]
pub use sim::*;
#[cfg(feature = "std")]
mod sim {
use super::*;
#[derive(Debug)]
pub struct Sim {
pub board: board::Board,
pub entities: BTreeMap<EntityId, entities::Entity>,
pub entity_counter: u32,
}
impl Sim {
pub fn add_entity(&mut self, entity: entities::Entity) {
self.entities.insert(EntityId(self.entity_counter), entity);
self.entity_counter += 1;
}
}
}