prop skin index

This commit is contained in:
Robin Appelman 2023-12-10 19:02:21 +01:00
commit d2a54cec8b

View file

@ -5,6 +5,7 @@ use three_d::{
Color, CpuMaterial, CpuMesh, CpuModel, CpuTexture, Indices, Mat4, Positions, TextureData, Vec2, Color, CpuMaterial, CpuMesh, CpuModel, CpuTexture, Indices, Mat4, Positions, TextureData, Vec2,
Vec3, Vec3,
}; };
use tracing::error;
use vbsp::{Bsp, Face, Handle, StaticPropLump}; use vbsp::{Bsp, Face, Handle, StaticPropLump};
use vmdl::mdl::Mdl; use vmdl::mdl::Mdl;
use vmdl::vtx::Vtx; use vmdl::vtx::Vtx;
@ -132,7 +133,11 @@ fn load_props<'a, I: Iterator<Item = Handle<'a, StaticPropLump>>>(
let model = load_prop(loader, prop.model())?; let model = load_prop(loader, prop.model())?;
let transform = let transform =
Mat4::from_translation(map_coords(prop.origin)) * Mat4::from(prop.rotation()); Mat4::from_translation(map_coords(prop.origin)) * Mat4::from(prop.rotation());
Ok(ModelData { model, transform }) Ok(ModelData {
model,
transform,
skin: prop.skin,
})
}); });
props props
@ -152,6 +157,7 @@ fn load_prop(loader: &Loader, name: &str) -> Result<vmdl::Model, Error> {
struct ModelData { struct ModelData {
model: vmdl::Model, model: vmdl::Model,
transform: Mat4, transform: Mat4,
skin: i32,
} }
fn prop_to_model(prop: ModelData, loader: &Loader) -> CpuModel { fn prop_to_model(prop: ModelData, loader: &Loader) -> CpuModel {
@ -159,7 +165,13 @@ fn prop_to_model(prop: ModelData, loader: &Loader) -> CpuModel {
let normal_transform = transform.invert().unwrap().transpose() * -1.0; let normal_transform = transform.invert().unwrap().transpose() * -1.0;
let model = prop.model; let model = prop.model;
let skin = model.skin_tables().next().unwrap(); let skin = match model.skin_tables().nth(prop.skin as usize) {
Some(skin) => skin,
None => {
error!(index = prop.skin, "invalid skin index");
model.skin_tables().next().unwrap()
}
};
let geometries = model let geometries = model
.meshes() .meshes()