add both demo and map view mode

This commit is contained in:
Robin Appelman 2022-04-03 14:51:50 +02:00
commit 067e1f99df
2 changed files with 24 additions and 7 deletions

View file

@ -4,10 +4,12 @@ mod demo;
mod loader; mod loader;
mod renderer; mod renderer;
mod ui; mod ui;
use clap::Parser; use clap::Parser;
use std::fs;
use crate::bsp::load_map; use crate::bsp::load_map;
use crate::control::DemoCamera; use crate::control::{Control, DemoCamera};
use crate::demo::DemoInfo; use crate::demo::DemoInfo;
use crate::renderer::Renderer; use crate::renderer::Renderer;
use crate::ui::DebugUI; use crate::ui::DebugUI;
@ -76,13 +78,28 @@ fn main() -> Result<(), Error> {
..Default::default() ..Default::default()
})?; })?;
let demo = DemoInfo::new(args.path, &args.player)?; if args.path.ends_with(".dem") {
let mut loader = Loader::new()?; let demo = DemoInfo::new(args.path, &args.player)?;
let map = loader.load(&format!("maps/{}.bsp", demo.map))?; let mut loader = Loader::new()?;
let map = loader.load(&format!("maps/{}.bsp", demo.map))?;
let mut renderer = Renderer::new(&window, DemoCamera::new(demo))?; let meshes = load_map(&map, &mut loader)?;
play(window, DemoCamera::new(demo), meshes)
} else {
let mut loader = Loader::new()?;
let map = fs::read(args.path)?;
let meshes = load_map(&map, &mut loader)?; let meshes = load_map(&map, &mut loader)?;
play(window, FirstPerson::new(0.1), meshes)
}
}
fn play<C: Control + 'static>(
window: Window,
control: C,
meshes: Vec<CPUMesh>,
) -> Result<(), Error> {
let mut renderer = Renderer::new(&window, control)?;
let material = PhysicalMaterial { let material = PhysicalMaterial {
albedo: Color { albedo: Color {
r: 128, r: 128,

View file

@ -1,5 +1,5 @@
use crate::control::{Control, DebugToggle}; use crate::control::{Control, DebugToggle};
use crate::{DebugUI, FirstPerson}; use crate::DebugUI;
use three_d::*; use three_d::*;
pub struct Renderer<C: Control> { pub struct Renderer<C: Control> {