mirror of
https://codeberg.org/icewind/vmdl.git
synced 2026-06-03 16:44:11 +02:00
add from_path to lib
This commit is contained in:
parent
44be60641b
commit
92449728fb
3 changed files with 22 additions and 31 deletions
|
|
@ -15,8 +15,8 @@ use gltf_json::Index;
|
|||
use std::borrow::Cow;
|
||||
use std::env::args_os;
|
||||
use std::io::Write;
|
||||
use std::path::{Path, PathBuf};
|
||||
use vmdl::{Mdl, Model, Vtx, Vvd};
|
||||
use std::path::PathBuf;
|
||||
use vmdl::Model;
|
||||
|
||||
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
|
||||
enum Output {
|
||||
|
|
@ -141,20 +141,9 @@ fn export(model: Model, output: Output) -> Result<(), Error> {
|
|||
Ok(())
|
||||
}
|
||||
|
||||
fn load(path: &Path) -> Result<Model, vmdl::ModelError> {
|
||||
let data = fs::read(path)?;
|
||||
let mdl = Mdl::read(&data)?;
|
||||
let data = fs::read(path.with_extension("dx90.vtx"))?;
|
||||
let vtx = Vtx::read(&data)?;
|
||||
let data = fs::read(path.with_extension("vvd"))?;
|
||||
let vvd = Vvd::read(&data)?;
|
||||
|
||||
Ok(Model::from_parts(mdl, vtx, vvd))
|
||||
}
|
||||
|
||||
fn main() -> Result<(), Error> {
|
||||
let path = PathBuf::from(args_os().nth(1).expect("No model file provided"));
|
||||
let source_model = load(&path)?;
|
||||
let source_model = Model::from_path(&path)?;
|
||||
|
||||
export(source_model, Output::Binary)?;
|
||||
Ok(())
|
||||
|
|
|
|||
|
|
@ -4,14 +4,10 @@ mod material;
|
|||
use crate::loader::{LoadError, Loader};
|
||||
use crate::material::load_material_fallback;
|
||||
use std::env::args_os;
|
||||
use std::fs;
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::path::PathBuf;
|
||||
use thiserror::Error;
|
||||
use three_d::*;
|
||||
use tracing::error;
|
||||
use vmdl::mdl::Mdl;
|
||||
use vmdl::vtx::Vtx;
|
||||
use vmdl::vvd::Vvd;
|
||||
use vmdl::{Model, Vector};
|
||||
|
||||
#[derive(Debug, Error)]
|
||||
|
|
@ -51,7 +47,7 @@ fn main() -> Result<(), Error> {
|
|||
let mut args = args_os();
|
||||
let _ = args.next();
|
||||
let path = PathBuf::from(args.next().expect("No demo file provided"));
|
||||
let source_model = load(&path).unwrap();
|
||||
let source_model = Model::from_path(&path)?;
|
||||
|
||||
let window = Window::new(WindowSettings {
|
||||
title: path.display().to_string(),
|
||||
|
|
@ -247,17 +243,6 @@ fn main() -> Result<(), Error> {
|
|||
Ok(())
|
||||
}
|
||||
|
||||
fn load(path: &Path) -> Result<Model, vmdl::ModelError> {
|
||||
let data = fs::read(path)?;
|
||||
let mdl = Mdl::read(&data)?;
|
||||
let data = fs::read(path.with_extension("dx90.vtx"))?;
|
||||
let vtx = Vtx::read(&data)?;
|
||||
let data = fs::read(path.with_extension("vvd"))?;
|
||||
let vvd = Vvd::read(&data)?;
|
||||
|
||||
Ok(Model::from_parts(mdl, vtx, vvd))
|
||||
}
|
||||
|
||||
// 1 hammer unit is ~1.905cm
|
||||
const UNIT_SCALE: f32 = 1.0 / (1.905 * 100.0);
|
||||
|
||||
|
|
|
|||
17
src/lib.rs
17
src/lib.rs
|
|
@ -15,7 +15,9 @@ pub use error::*;
|
|||
pub use handle::Handle;
|
||||
pub use shared::*;
|
||||
use std::any::type_name;
|
||||
use std::fs;
|
||||
use std::mem::size_of;
|
||||
use std::path::Path;
|
||||
|
||||
pub struct Model {
|
||||
#[allow(dead_code)]
|
||||
|
|
@ -29,6 +31,21 @@ impl Model {
|
|||
Model { mdl, vtx, vvd }
|
||||
}
|
||||
|
||||
/// Load the model from path
|
||||
///
|
||||
/// Requires a path to the `.mdl` file and the `.dx90.vtx` and `.vvd` files for the model to be in the same directory.
|
||||
pub fn from_path<P: AsRef<Path>>(path: P) -> Result<Self, ModelError> {
|
||||
let path = path.as_ref();
|
||||
let data = fs::read(path)?;
|
||||
let mdl = Mdl::read(&data)?;
|
||||
let data = fs::read(path.with_extension("dx90.vtx"))?;
|
||||
let vtx = Vtx::read(&data)?;
|
||||
let data = fs::read(path.with_extension("vvd"))?;
|
||||
let vvd = Vvd::read(&data)?;
|
||||
|
||||
Ok(Model::from_parts(mdl, vtx, vvd))
|
||||
}
|
||||
|
||||
pub fn vertices(&self) -> &[Vertex] {
|
||||
&self.vvd.vertices
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue