Add tiger mob

This commit is contained in:
Snowram 2020-06-11 00:29:16 +02:00 committed by jshipsey
parent 5e2aa81aba
commit 12ca502a1d
37 changed files with 289 additions and 86 deletions

@ -262,6 +262,10 @@
"tarasque": {
"keyword": "tarasque",
"generic": "Tarasque"
},
"tiger": {
"keyword": "tiger",
"generic": "Tiger"
}
}
},

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -300,4 +300,64 @@
central: ("npc.tarasque.male.tail"),
),
),
(Tiger, Male): (
upper: (
offset: (-4.0, -5.5, -6.5),
central: ("npc.tiger.male.head_upper"),
),
lower: (
offset: (-4.0, -5.5, -4.0),
central: ("npc.tiger.male.head_lower"),
),
jaw: (
offset: (-2.0, -2.5, -1.0),
central: ("npc.tiger.male.jaw"),
),
torso_f: (
offset: (-6.0, -6.0, -5.5),
central: ("npc.tiger.male.torso_front"),
),
torso_b: (
offset: (-6.0, -6.0, -5.0),
central: ("npc.tiger.male.torso_back"),
),
ears: (
offset: (-5.0, -0.5, -1.5),
central: ("npc.tiger.male.ears"),
),
tail: (
offset: (-1.0, -3.0, -4.0),
central: ("npc.tiger.male.tail"),
),
),
(Tiger, Female): (
upper: (
offset: (-4.0, -5.5, -6.5),
central: ("npc.tiger.female.head_upper"),
),
lower: (
offset: (-4.0, -5.5, -4.0),
central: ("npc.tiger.female.head_lower"),
),
jaw: (
offset: (-2.0, -2.5, -1.0),
central: ("npc.tiger.female.jaw"),
),
torso_f: (
offset: (-6.0, -6.0, -5.5),
central: ("npc.tiger.female.torso_front"),
),
torso_b: (
offset: (-6.0, -6.0, -5.0),
central: ("npc.tiger.female.torso_back"),
),
ears: (
offset: (-5.0, -0.5, -1.5),
central: ("npc.tiger.female.ears"),
),
tail: (
offset: (-1.0, -3.0, -4.0),
central: ("npc.tiger.female.tail"),
),
),
})

@ -339,4 +339,72 @@
lateral: ("npc.tarasque.female.foot_rb"),
),
),
(Tiger, Male): (
leg_lf: (
offset: (-1.5, -1.5, -2.5),
lateral: ("npc.tiger.male.leg_lf"),
),
leg_rf: (
offset: (-1.5, -1.5, -2.5),
lateral: ("npc.tiger.male.leg_rf"),
),
leg_lb: (
offset: (-1.5, -4.0, -3.5),
lateral: ("npc.tiger.male.leg_lb"),
),
leg_rb: (
offset: (-1.5, -4.0, -3.5),
lateral: ("npc.tiger.male.leg_rb"),
),
foot_lf: (
offset: (-1.5, -1.5, -2.5),
lateral: ("npc.tiger.male.foot_lf"),
),
foot_rf: (
offset: (-1.5, -1.5, -2.5),
lateral: ("npc.tiger.male.foot_rf"),
),
foot_lb: (
offset: (-1.5, -4.0, -3.5),
lateral: ("npc.tiger.male.foot_lb"),
),
foot_rb: (
offset: (-1.5, -4.0, -3.5),
lateral: ("npc.tiger.male.foot_rb"),
),
),
(Tiger, Female): (
leg_lf: (
offset: (-1.5, -1.5, -2.5),
lateral: ("npc.tiger.female.leg_lf"),
),
leg_rf: (
offset: (-1.5, -1.5, -2.5),
lateral: ("npc.tiger.female.leg_rf"),
),
leg_lb: (
offset: (-1.5, -4.0, -3.5),
lateral: ("npc.tiger.female.leg_lb"),
),
leg_rb: (
offset: (-1.5, -2.0, -3.5),
lateral: ("npc.tiger.female.leg_rb"),
),
foot_lf: (
offset: (-1.5, -1.5, -2.5),
lateral: ("npc.tiger.female.foot_lf"),
),
foot_rf: (
offset: (-1.5, -1.5, -2.5),
lateral: ("npc.tiger.female.foot_rf"),
),
foot_lb: (
offset: (-1.5, -4.0, -3.5),
lateral: ("npc.tiger.female.foot_lb"),
),
foot_rb: (
offset: (-1.5, -2.0, -3.5),
lateral: ("npc.tiger.female.foot_rb"),
),
),
})

@ -29,6 +29,7 @@ impl From<Body> for super::Body {
pub enum Species {
Grolgar = 0,
Saber = 1,
Tiger = 2,
Tuskram = 3,
Lion = 6,
Tarasque = 7,
@ -41,6 +42,7 @@ pub enum Species {
pub struct AllSpecies<SpeciesMeta> {
pub grolgar: SpeciesMeta,
pub saber: SpeciesMeta,
pub tiger: SpeciesMeta,
pub tuskram: SpeciesMeta,
pub lion: SpeciesMeta,
pub tarasque: SpeciesMeta,
@ -54,6 +56,7 @@ impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies<SpeciesMeta>
match index {
Species::Grolgar => &self.grolgar,
Species::Saber => &self.saber,
Species::Tiger => &self.tiger,
Species::Tuskram => &self.tuskram,
Species::Lion => &self.lion,
Species::Tarasque => &self.tarasque,
@ -61,9 +64,10 @@ impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies<SpeciesMeta>
}
}
pub const ALL_SPECIES: [Species; 5] = [
pub const ALL_SPECIES: [Species; 6] = [
Species::Grolgar,
Species::Saber,
Species::Tiger,
Species::Tuskram,
Species::Lion,
Species::Tarasque,

@ -28,6 +28,60 @@ pub struct QuadrupedMediumSkeleton {
foot_rb: Bone,
}
#[const_tweaker::tweak(min = -20.0, max = 20.0, step = 0.5)]
const HEAD_UPPER_X: f32 = 0.0;
#[const_tweaker::tweak(min = -20.0, max = 20.0, step = 0.5)]
const HEAD_UPPER_Z: f32 = 0.0;
#[const_tweaker::tweak(min = -20.0, max = 20.0, step = 0.5)]
const HEAD_LOWER_X: f32 = 0.0;
#[const_tweaker::tweak(min = -20.0, max = 20.0, step = 0.5)]
const HEAD_LOWER_Z: f32 = 0.0;
#[const_tweaker::tweak(min = -20.0, max = 20.0, step = 0.5)]
const JAW_X: f32 = 0.0;
#[const_tweaker::tweak(min = -20.0, max = 20.0, step = 0.5)]
const JAW_Z: f32 = 0.0;
#[const_tweaker::tweak(min = -20.0, max = 20.0, step = 0.5)]
const TAIL_X: f32 = 0.0;
#[const_tweaker::tweak(min = -20.0, max = 20.0, step = 0.5)]
const TAIL_Z: f32 = 0.0;
#[const_tweaker::tweak(min = -20.0, max = 20.0, step = 0.5)]
const TORSO_BACK_X: f32 = 0.0;
#[const_tweaker::tweak(min = -20.0, max = 20.0, step = 0.5)]
const TORSO_BACK_Z: f32 = 0.0;
#[const_tweaker::tweak(min = -20.0, max = 20.0, step = 0.5)]
const TORSO_MID_X: f32 = 0.0;
#[const_tweaker::tweak(min = -20.0, max = 20.0, step = 0.5)]
const TORSO_MID_Z: f32 = 0.0;
#[const_tweaker::tweak(min = -20.0, max = 20.0, step = 0.5)]
const EARS_X: f32 = 0.0;
#[const_tweaker::tweak(min = -20.0, max = 20.0, step = 0.5)]
const EARS_Z: f32 = 0.0;
#[const_tweaker::tweak(min = -20.0, max = 20.0, step = 0.5)]
const LEG_FRONT_X: f32 = 0.0;
#[const_tweaker::tweak(min = -20.0, max = 20.0, step = 0.5)]
const LEG_FRONT_Y: f32 = 0.0;
#[const_tweaker::tweak(min = -20.0, max = 20.0, step = 0.5)]
const LEG_FRONT_Z: f32 = 0.0;
#[const_tweaker::tweak(min = -20.0, max = 20.0, step = 0.5)]
const LEG_BACK_X: f32 = 0.0;
#[const_tweaker::tweak(min = -20.0, max = 20.0, step = 0.5)]
const LEG_BACK_Y: f32 = 0.0;
#[const_tweaker::tweak(min = -20.0, max = 20.0, step = 0.5)]
const LEG_BACK_Z: f32 = 0.0;
#[const_tweaker::tweak(min = -20.0, max = 20.0, step = 0.5)]
const FEET_FRONT_X: f32 = 0.0;
#[const_tweaker::tweak(min = -20.0, max = 20.0, step = 0.5)]
const FEET_FRONT_Y: f32 = 0.0;
#[const_tweaker::tweak(min = -20.0, max = 20.0, step = 0.5)]
const FEET_FRONT_Z: f32 = 0.0;
#[const_tweaker::tweak(min = -20.0, max = 20.0, step = 0.5)]
const FEET_BACK_X: f32 = 0.0;
#[const_tweaker::tweak(min = -20.0, max = 20.0, step = 0.5)]
const FEET_BACK_Y: f32 = 0.0;
#[const_tweaker::tweak(min = -20.0, max = 20.0, step = 0.5)]
const FEET_BACK_Z: f32 = 0.0;
impl QuadrupedMediumSkeleton {
pub fn new() -> Self { Self::default() }
}
@ -140,6 +194,7 @@ impl<'a> From<&'a comp::quadruped_medium::Body> for SkeletonAttr {
(Tuskram, _) => (9.0, 12.0),
(Lion, _) => (12.5, 14.0),
(Tarasque, _) => (12.0, 19.0),
(Tiger, _) => (*HEAD_UPPER_X, *HEAD_UPPER_Z),
},
head_lower: match (body.species, body.body_type) {
(Grolgar, _) => (-4.0, -7.0),
@ -147,6 +202,7 @@ impl<'a> From<&'a comp::quadruped_medium::Body> for SkeletonAttr {
(Tuskram, _) => (-3.0, -1.0),
(Lion, _) => (-5.0, -1.0),
(Tarasque, _) => (-5.0, -6.0),
(Tiger, _) => (*HEAD_LOWER_X, *HEAD_LOWER_Z),
},
jaw: match (body.species, body.body_type) {
(Grolgar, _) => (3.0, -5.0),
@ -154,6 +210,7 @@ impl<'a> From<&'a comp::quadruped_medium::Body> for SkeletonAttr {
(Tuskram, _) => (2.0, -2.0),
(Lion, _) => (2.0, -3.0),
(Tarasque, _) => (4.0, -9.0),
(Tiger, _) => (*JAW_X, *JAW_Z),
},
tail: match (body.species, body.body_type) {
(Grolgar, _) => (-6.0, -2.0),
@ -161,6 +218,7 @@ impl<'a> From<&'a comp::quadruped_medium::Body> for SkeletonAttr {
(Tuskram, _) => (-6.0, -2.0),
(Lion, _) => (-8.0, -6.0),
(Tarasque, _) => (-7.0, -2.0),
(Tiger, _) => (*TAIL_X, *TAIL_Z),
},
torso_back: match (body.species, body.body_type) {
(Grolgar, _) => (4.0, 11.0),
@ -168,6 +226,7 @@ impl<'a> From<&'a comp::quadruped_medium::Body> for SkeletonAttr {
(Tuskram, _) => (4.0, 9.0),
(Lion, _) => (4.0, 10.0),
(Tarasque, _) => (4.0, 9.0),
(Tiger, _) => (*TORSO_BACK_X, *TORSO_BACK_Z),
},
torso_mid: match (body.species, body.body_type) {
(Grolgar, _) => (-7.0, 10.5),
@ -175,6 +234,7 @@ impl<'a> From<&'a comp::quadruped_medium::Body> for SkeletonAttr {
(Tuskram, _) => (-7.0, 9.0),
(Lion, _) => (-9.0, 9.0),
(Tarasque, _) => (-7.0, 8.0),
(Tiger, _) => (*TORSO_MID_X, *TORSO_MID_Z),
},
ears: match (body.species, body.body_type) {
(Grolgar, _) => (-1.0, 5.0),
@ -182,6 +242,7 @@ impl<'a> From<&'a comp::quadruped_medium::Body> for SkeletonAttr {
(Tuskram, _) => (10.0, 2.0),
(Lion, _) => (-2.0, 4.0),
(Tarasque, _) => (1.5, -2.0),
(Tiger, _) => (*EARS_X, *EARS_Z),
},
leg_f: match (body.species, body.body_type) {
(Grolgar, _) => (5.0, 6.0, 2.0),
@ -189,6 +250,7 @@ impl<'a> From<&'a comp::quadruped_medium::Body> for SkeletonAttr {
(Tuskram, _) => (4.0, 6.0, 4.5),
(Lion, _) => (5.0, 6.0, 3.0),
(Tarasque, _) => (4.0, 6.0, 3.0),
(Tiger, _) => (*LEG_FRONT_X, *LEG_FRONT_Y, *LEG_FRONT_Z),
},
leg_b: match (body.species, body.body_type) {
(Grolgar, _) => (5.0, -4.0, 3.0),
@ -196,6 +258,7 @@ impl<'a> From<&'a comp::quadruped_medium::Body> for SkeletonAttr {
(Tuskram, _) => (4.0, -8.0, 5.5),
(Lion, _) => (5.5, -8.0, 3.5),
(Tarasque, _) => (4.0, -8.0, 3.5),
(Tiger, _) => (*LEG_BACK_X, *LEG_BACK_Y, *LEG_BACK_Z),
},
feet_f: match (body.species, body.body_type) {
(Grolgar, _) => (5.0, 6.0, 2.0),
@ -203,6 +266,7 @@ impl<'a> From<&'a comp::quadruped_medium::Body> for SkeletonAttr {
(Tuskram, _) => (4.0, 6.0, 4.5),
(Lion, _) => (5.0, 6.0, 3.0),
(Tarasque, _) => (4.0, 6.0, 3.0),
(Tiger, _) => (*FEET_FRONT_X, *FEET_FRONT_Y, *FEET_FRONT_Z),
},
feet_b: match (body.species, body.body_type) {
(Grolgar, _) => (5.0, -4.0, 3.0),
@ -210,6 +274,7 @@ impl<'a> From<&'a comp::quadruped_medium::Body> for SkeletonAttr {
(Tuskram, _) => (4.0, -8.0, 5.5),
(Lion, _) => (5.5, -8.0, 3.5),
(Tarasque, _) => (4.0, -8.0, 3.5),
(Tiger, _) => (*FEET_BACK_X, *FEET_BACK_Y, *FEET_BACK_Z),
},
height: match (body.species, body.body_type) {
(Grolgar, _) => (1.2),
@ -217,6 +282,7 @@ impl<'a> From<&'a comp::quadruped_medium::Body> for SkeletonAttr {
(Tuskram, _) => (1.0),
(Lion, _) => (1.4),
(Tarasque, _) => (1.1),
(Tiger, _) => (1.0),
},
}
}

@ -1422,90 +1422,6 @@ impl QuadrupedMediumLateralSpec {
.unwrap()
}
pub fn mesh_foot_lf(
&self,
species: QMSpecies,
body_type: QMBodyType,
generate_mesh: impl FnOnce(&Segment, Vec3<f32>) -> Mesh<FigurePipeline>,
) -> Mesh<FigurePipeline> {
let spec = match self.0.get(&(species, body_type)) {
Some(spec) => spec,
None => {
error!(
"No foot specification exists for the combination of {:?} and {:?}",
species, body_type
);
return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5), generate_mesh);
},
};
let lateral = graceful_load_segment(&spec.foot_lf.lateral.0);
generate_mesh(&lateral, Vec3::from(spec.foot_lf.offset))
}
pub fn mesh_foot_rf(
&self,
species: QMSpecies,
body_type: QMBodyType,
generate_mesh: impl FnOnce(&Segment, Vec3<f32>) -> Mesh<FigurePipeline>,
) -> Mesh<FigurePipeline> {
let spec = match self.0.get(&(species, body_type)) {
Some(spec) => spec,
None => {
error!(
"No foot specification exists for the combination of {:?} and {:?}",
species, body_type
);
return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5), generate_mesh);
},
};
let lateral = graceful_load_segment(&spec.foot_rf.lateral.0);
generate_mesh(&lateral, Vec3::from(spec.foot_rf.offset))
}
pub fn mesh_foot_lb(
&self,
species: QMSpecies,
body_type: QMBodyType,
generate_mesh: impl FnOnce(&Segment, Vec3<f32>) -> Mesh<FigurePipeline>,
) -> Mesh<FigurePipeline> {
let spec = match self.0.get(&(species, body_type)) {
Some(spec) => spec,
None => {
error!(
"No foot specification exists for the combination of {:?} and {:?}",
species, body_type
);
return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5), generate_mesh);
},
};
let lateral = graceful_load_segment(&spec.foot_lb.lateral.0);
generate_mesh(&lateral, Vec3::from(spec.foot_lb.offset))
}
pub fn mesh_foot_rb(
&self,
species: QMSpecies,
body_type: QMBodyType,
generate_mesh: impl FnOnce(&Segment, Vec3<f32>) -> Mesh<FigurePipeline>,
) -> Mesh<FigurePipeline> {
let spec = match self.0.get(&(species, body_type)) {
Some(spec) => spec,
None => {
error!(
"No foot specification exists for the combination of {:?} and {:?}",
species, body_type
);
return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5), generate_mesh);
},
};
let lateral = graceful_load_segment(&spec.foot_rb.lateral.0);
generate_mesh(&lateral, Vec3::from(spec.foot_rb.offset))
}
pub fn mesh_leg_lf(
&self,
species: QMSpecies,
@ -1589,6 +1505,90 @@ impl QuadrupedMediumLateralSpec {
generate_mesh(&lateral, Vec3::from(spec.leg_rb.offset))
}
pub fn mesh_foot_lf(
&self,
species: QMSpecies,
body_type: QMBodyType,
generate_mesh: impl FnOnce(&Segment, Vec3<f32>) -> Mesh<FigurePipeline>,
) -> Mesh<FigurePipeline> {
let spec = match self.0.get(&(species, body_type)) {
Some(spec) => spec,
None => {
error!(
"No foot specification exists for the combination of {:?} and {:?}",
species, body_type
);
return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5), generate_mesh);
},
};
let lateral = graceful_load_segment(&spec.foot_lf.lateral.0);
generate_mesh(&lateral, Vec3::from(spec.foot_lf.offset))
}
pub fn mesh_foot_rf(
&self,
species: QMSpecies,
body_type: QMBodyType,
generate_mesh: impl FnOnce(&Segment, Vec3<f32>) -> Mesh<FigurePipeline>,
) -> Mesh<FigurePipeline> {
let spec = match self.0.get(&(species, body_type)) {
Some(spec) => spec,
None => {
error!(
"No foot specification exists for the combination of {:?} and {:?}",
species, body_type
);
return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5), generate_mesh);
},
};
let lateral = graceful_load_segment(&spec.foot_rf.lateral.0);
generate_mesh(&lateral, Vec3::from(spec.foot_rf.offset))
}
pub fn mesh_foot_lb(
&self,
species: QMSpecies,
body_type: QMBodyType,
generate_mesh: impl FnOnce(&Segment, Vec3<f32>) -> Mesh<FigurePipeline>,
) -> Mesh<FigurePipeline> {
let spec = match self.0.get(&(species, body_type)) {
Some(spec) => spec,
None => {
error!(
"No foot specification exists for the combination of {:?} and {:?}",
species, body_type
);
return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5), generate_mesh);
},
};
let lateral = graceful_load_segment(&spec.foot_lb.lateral.0);
generate_mesh(&lateral, Vec3::from(spec.foot_lb.offset))
}
pub fn mesh_foot_rb(
&self,
species: QMSpecies,
body_type: QMBodyType,
generate_mesh: impl FnOnce(&Segment, Vec3<f32>) -> Mesh<FigurePipeline>,
) -> Mesh<FigurePipeline> {
let spec = match self.0.get(&(species, body_type)) {
Some(spec) => spec,
None => {
error!(
"No foot specification exists for the combination of {:?} and {:?}",
species, body_type
);
return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5), generate_mesh);
},
};
let lateral = graceful_load_segment(&spec.foot_rb.lateral.0);
generate_mesh(&lateral, Vec3::from(spec.foot_rb.offset))
}
}
////

@ -936,7 +936,7 @@ impl FigureMgr {
is_player,
);
},
Body::QuadrupedMedium(_) => {
Body::QuadrupedMedium(quadruped_body) => {
let skeleton_attr = &self
.quadruped_medium_model_cache
.get_or_create_model(
@ -948,6 +948,7 @@ impl FigureMgr {
None,
)
.1;
let ref skeleton_attr = quadruped_body.into();
let state = self
.quadruped_medium_states