2019-10-25 01:26:32 +00:00
|
|
|
pub mod biped_large;
|
2019-10-23 02:56:45 +00:00
|
|
|
pub mod bird_medium;
|
2019-10-24 23:42:33 +00:00
|
|
|
pub mod bird_small;
|
2019-10-25 01:26:32 +00:00
|
|
|
pub mod dragon;
|
|
|
|
pub mod fish_medium;
|
2019-10-24 23:42:33 +00:00
|
|
|
pub mod fish_small;
|
2019-10-25 01:26:32 +00:00
|
|
|
pub mod humanoid;
|
|
|
|
pub mod object;
|
|
|
|
pub mod quadruped_medium;
|
|
|
|
pub mod quadruped_small;
|
2019-06-28 23:42:51 +00:00
|
|
|
|
2019-07-29 19:54:48 +00:00
|
|
|
use specs::{Component, FlaggedStorage};
|
|
|
|
use specs_idvs::IDVStorage;
|
2019-06-28 23:42:51 +00:00
|
|
|
|
|
|
|
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
|
2020-01-20 14:21:06 +00:00
|
|
|
#[repr(u32)]
|
2019-06-28 23:42:51 +00:00
|
|
|
pub enum Body {
|
2020-01-20 14:21:06 +00:00
|
|
|
Humanoid(humanoid::Body) = 0,
|
|
|
|
QuadrupedSmall(quadruped_small::Body) = 1,
|
|
|
|
QuadrupedMedium(quadruped_medium::Body) = 2,
|
|
|
|
BirdMedium(bird_medium::Body) = 3,
|
|
|
|
FishMedium(fish_medium::Body) = 4,
|
|
|
|
Dragon(dragon::Body) = 5,
|
|
|
|
BirdSmall(bird_small::Body) = 6,
|
|
|
|
FishSmall(fish_small::Body) = 7,
|
|
|
|
BipedLarge(biped_large::Body) = 8,
|
|
|
|
Object(object::Body) = 9,
|
2019-06-28 23:42:51 +00:00
|
|
|
}
|
2019-06-30 11:48:28 +00:00
|
|
|
|
2019-08-04 08:21:29 +00:00
|
|
|
impl Body {
|
|
|
|
pub fn is_humanoid(&self) -> bool {
|
|
|
|
match self {
|
|
|
|
Body::Humanoid(_) => true,
|
|
|
|
_ => false,
|
|
|
|
}
|
|
|
|
}
|
2019-12-20 03:31:41 +00:00
|
|
|
// Note: this might need to be refined to something more complex for realistic
|
|
|
|
// behavior with less cylindrical bodies (e.g. wolfs)
|
|
|
|
pub fn radius(&self) -> f32 {
|
|
|
|
// TODO: Improve these values (some might be reliant on more info in inner type)
|
|
|
|
match self {
|
|
|
|
Body::Humanoid(_) => 0.5,
|
|
|
|
Body::QuadrupedSmall(_) => 0.6,
|
|
|
|
Body::QuadrupedMedium(_) => 0.9,
|
|
|
|
Body::BirdMedium(_) => 0.5,
|
|
|
|
Body::FishMedium(_) => 0.5,
|
|
|
|
Body::Dragon(_) => 2.5,
|
|
|
|
Body::BirdSmall(_) => 0.2,
|
|
|
|
Body::FishSmall(_) => 0.2,
|
|
|
|
Body::BipedLarge(_) => 1.0,
|
|
|
|
Body::Object(_) => 0.3,
|
|
|
|
}
|
|
|
|
}
|
2019-08-04 08:21:29 +00:00
|
|
|
}
|
|
|
|
|
2019-06-30 11:48:28 +00:00
|
|
|
impl Component for Body {
|
2019-07-29 19:54:48 +00:00
|
|
|
type Storage = FlaggedStorage<Self, IDVStorage<Self>>;
|
2019-06-30 11:48:28 +00:00
|
|
|
}
|