mirror of
https://git.ngram.ca/OpenJam/rc-servers
synced 2026-08-23 23:08:52 +00:00
33 lines
1.3 KiB
Rust
33 lines
1.3 KiB
Rust
use polariton::operation::{Typed, Arr};
|
|
|
|
pub struct TechTreeNode {
|
|
pub main_cube_id: i32, // hex
|
|
pub position_x: i32,
|
|
pub position_y: i32,
|
|
pub is_unlocked: bool,
|
|
pub is_unlockable: bool,
|
|
pub tech_points: u32,
|
|
pub neighbours: Vec<i32>, // cube IDs, hex
|
|
}
|
|
|
|
impl TechTreeNode {
|
|
pub fn as_transmissible(&self) -> Typed {
|
|
Typed::HashMap(vec![
|
|
(Typed::Str("mainCubeId".into()), Typed::Str(hex::encode(self.main_cube_id.to_be_bytes()).into())),
|
|
(Typed::Str("positionX".into()), Typed::Int(self.position_x)),
|
|
(Typed::Str("positionY".into()), Typed::Int(self.position_y)),
|
|
(Typed::Str("isUnlocked".into()), Typed::Bool(self.is_unlocked.into())),
|
|
(Typed::Str("isUnlockable".into()), Typed::Bool(self.is_unlockable.into())),
|
|
(Typed::Str("tp".into()), Typed::Int(self.tech_points as i32)),
|
|
(Typed::Str("neighbours".into()), Typed::Arr(Arr {
|
|
ty: 115, // str
|
|
items: self.neighbours.iter().map(|cube_id| Typed::Str(hex::encode(cube_id.to_be_bytes()).into())).collect(),
|
|
})),
|
|
].into())
|
|
}
|
|
|
|
pub fn as_transmissible_key_val(&self) -> (Typed, Typed) {
|
|
(Typed::Str(hex::encode(self.main_cube_id.to_be_bytes()).into()), self.as_transmissible())
|
|
}
|
|
}
|