cape item

This commit is contained in:
Pfauenauge90 2020-04-06 02:25:52 +02:00
parent 1f31b7f123
commit 771baaaae5
5 changed files with 87 additions and 0 deletions

View File

@ -0,0 +1,8 @@
Item(
name: "Short leather Cape",
description: "WIP",
kind: Armor(
kind: Back(Short0),
stats: (20),
),
)

View File

@ -0,0 +1,12 @@
((
default: (
vox_spec: ("armor.empty", (0.0, 0.0, 0.0)),
color: None
),
map: {
Short0: (
vox_spec: ("armor.back.short-0", (0.0, 0.0, 0.0)),
color: None
),
},
))

View File

@ -163,6 +163,12 @@ pub const ALL_SHOULDERS: [Shoulder; 9] = [
Shoulder::ClothBlue0,
Shoulder::ClothGreen0,
];
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[repr(u32)]
pub enum Back {
Short0 = 1,
}
pub const ALL_BACKS: [Back; 1] = [Back::Short0];
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum Armor {
@ -172,6 +178,7 @@ pub enum Armor {
Hand(Hand),
Pants(Pants),
Foot(Foot),
Back(Back),
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]

View File

@ -138,6 +138,7 @@ pub fn handle_inventory(server: &mut Server, entity: EcsEntity, manip: comp::Inv
Hand(_) => &mut loadout.hand,
Pants(_) => &mut loadout.pants,
Foot(_) => &mut loadout.foot,
Back(_) => &mut loadout.back,
};
// Insert old item into inventory

View File

@ -255,6 +255,8 @@ pub struct HumArmorPantsSpec(ArmorVoxSpecMap<Pants, ArmorVoxSpec>);
#[derive(Serialize, Deserialize)]
pub struct HumArmorFootSpec(ArmorVoxSpecMap<Foot, ArmorVoxSpec>);
#[derive(Serialize, Deserialize)]
pub struct HumArmorBackSpec(ArmorVoxSpecMap<Foot, ArmorVoxSpec>);
#[derive(Serialize, Deserialize)]
pub struct HumMainWeaponSpec(HashMap<ToolKind, ArmorVoxSpec>);
impl Asset for HumArmorShoulderSpec {
@ -299,6 +301,13 @@ impl Asset for HumArmorFootSpec {
ron::de::from_reader(buf_reader).map_err(assets::Error::parse_error)
}
}
impl Asset for HumArmorBackSpec {
const ENDINGS: &'static [&'static str] = &["ron"];
fn parse(buf_reader: BufReader<File>) -> Result<Self, assets::Error> {
ron::de::from_reader(buf_reader).map_err(assets::Error::parse_error)
}
}
impl Asset for HumMainWeaponSpec {
const ENDINGS: &'static [&'static str] = &["ron"];
@ -597,6 +606,56 @@ impl HumArmorFootSpec {
self.mesh_foot(body, loadout, false)
}
}
impl HumArmorBackSpec {
pub fn load_watched(indicator: &mut ReloadIndicator) -> Arc<Self> {
assets::load_watched::<Self>("voxygen.voxel.humanoid_armor_back_manifest", indicator)
.unwrap()
}
pub fn mesh_back(&self, body: &Body, loadout: &Loadout) -> Mesh<FigurePipeline> {
let spec = if let Some(ItemKind::Armor {
kind: Armor::Back(back),
..
}) = loadout.back.as_ref().map(|i| &i.kind)
{
match self.0.map.get(&back) {
Some(spec) => spec,
None => {
error!("No back-armor specification exists for {:?}", back);
return load_mesh("not_found", Vec3::new(-5.0, -3.5, 1.0));
},
}
} else {
&self.0.default
};
let color = |mat_segment| {
color_segment(
mat_segment,
body.race.skin_color(body.skin),
body.race.hair_color(body.hair_color),
body.race.eye_color(body.eye_color),
)
};
let bare_back = graceful_load_mat_segment("armor.empty");
let mut back_armor = graceful_load_mat_segment(&spec.vox_spec.0);
if let Some(color) = spec.color {
let back_color = Vec3::from(color);
back_armor = back_armor.map_rgb(|rgb| recolor_grey(rgb, Rgb::from(back_color)));
}
let back = DynaUnionizer::new()
.add(color(bare_back), Vec3::new(0, 0, 0))
.add(color(back_armor), Vec3::new(0, 0, 0))
.unify()
.0;
generate_mesh(&back, Vec3::from(spec.vox_spec.1))
}
}
impl HumMainWeaponSpec {
pub fn load_watched(indicator: &mut ReloadIndicator) -> Arc<Self> {