mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
3fa21b3dc7
Is also able to refactor some of the uglier code and introduces a framework that (suitably extended) could be useful in removing boilerplate elsewhere.
67 lines
1.7 KiB
Rust
67 lines
1.7 KiB
Rust
use rand::{seq::SliceRandom, thread_rng};
|
|
|
|
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
|
|
pub struct Body {
|
|
pub head: Head,
|
|
pub torso: Torso,
|
|
pub rear: Rear,
|
|
pub tail: Tail,
|
|
pub fin_l: FinL,
|
|
pub fin_r: FinR,
|
|
}
|
|
impl Body {
|
|
pub fn random() -> Self {
|
|
let mut rng = thread_rng();
|
|
Self {
|
|
head: *(&ALL_HEADS).choose(&mut rng).unwrap(),
|
|
torso: *(&ALL_TORSOS).choose(&mut rng).unwrap(),
|
|
rear: *(&ALL_REARS).choose(&mut rng).unwrap(),
|
|
tail: *(&ALL_TAILS).choose(&mut rng).unwrap(),
|
|
fin_l: *(&ALL_FIN_LS).choose(&mut rng).unwrap(),
|
|
fin_r: *(&ALL_FIN_RS).choose(&mut rng).unwrap(),
|
|
}
|
|
}
|
|
}
|
|
|
|
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
|
|
#[repr(u32)]
|
|
pub enum Head {
|
|
Default,
|
|
}
|
|
const ALL_HEADS: [Head; 1] = [Head::Default];
|
|
|
|
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
|
|
#[repr(u32)]
|
|
pub enum Torso {
|
|
Default,
|
|
}
|
|
const ALL_TORSOS: [Torso; 1] = [Torso::Default];
|
|
|
|
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
|
|
#[repr(u32)]
|
|
pub enum Rear {
|
|
Default,
|
|
}
|
|
const ALL_REARS: [Rear; 1] = [Rear::Default];
|
|
|
|
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
|
|
#[repr(u32)]
|
|
pub enum Tail {
|
|
Default,
|
|
}
|
|
const ALL_TAILS: [Tail; 1] = [Tail::Default];
|
|
|
|
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
|
|
#[repr(u32)]
|
|
pub enum FinL {
|
|
Default,
|
|
}
|
|
const ALL_FIN_LS: [FinL; 1] = [FinL::Default];
|
|
|
|
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
|
|
#[repr(u32)]
|
|
pub enum FinR {
|
|
Default,
|
|
}
|
|
const ALL_FIN_RS: [FinR; 1] = [FinR::Default];
|