diff --git a/Cargo.lock b/Cargo.lock index 72ae44bc6..1c93dbce3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2048,6 +2048,7 @@ dependencies = [ "thiserror 2.0.11", "tokio", "vbsp", + "vbsp-entities", "vmdl", "vmt-parser", "vpk", diff --git a/map-tool/Cargo.toml b/map-tool/Cargo.toml index 73f74751f..427806b7f 100644 --- a/map-tool/Cargo.toml +++ b/map-tool/Cargo.toml @@ -25,7 +25,8 @@ strafesnet_rbx_loader = { version = "0.6.0", path = "../lib/rbx_loader", registr strafesnet_snf = { version = "0.3.0", path = "../lib/snf", registry = "strafesnet" } thiserror = "2.0.11" tokio = { version = "1.43.0", features = ["macros", "rt-multi-thread", "fs"] } -vbsp = "0.6.0" +vbsp = { version = "0.7.0-codegen5", registry = "strafesnet", default-features = false } +vbsp-entities = { version = "0.1.0", registry = "strafesnet", default-features = false, features = ["css"]} vmdl = "0.2.0" vmt-parser = "0.2.0" vpk = "0.2.0" diff --git a/map-tool/src/source.rs b/map-tool/src/source.rs index fae6b5631..d65692e19 100644 --- a/map-tool/src/source.rs +++ b/map-tool/src/source.rs @@ -6,6 +6,7 @@ use futures::StreamExt; use strafesnet_bsp_loader::loader::BspFinder; use strafesnet_deferred_loader::loader::Loader; use strafesnet_deferred_loader::deferred_loader::{LoadFailureMode,MeshDeferredLoader,RenderConfigDeferredLoader}; +use vbsp_entities::css::Entity; #[derive(Subcommand)] pub enum Commands{ @@ -248,6 +249,55 @@ async fn gimme_them_textures(path:&Path,vpk_list:&[strafesnet_bsp_loader::Vpk],s mesh_deferred_loader.acquire_mesh_id(prop.model()); } + for raw_ent in &bsp.entities{ + let model=match raw_ent.parse(){ + Ok(Entity::Cycler(brush))=>brush.model, + Ok(Entity::EnvSprite(brush))=>brush.model, + Ok(Entity::FuncBreakable(brush))=>brush.model, + Ok(Entity::FuncBrush(brush))=>brush.model, + Ok(Entity::FuncButton(brush))=>brush.model, + Ok(Entity::FuncDoor(brush))=>brush.model, + Ok(Entity::FuncDoorRotating(brush))=>brush.model, + Ok(Entity::FuncIllusionary(brush))=>brush.model, + Ok(Entity::FuncMonitor(brush))=>brush.model, + Ok(Entity::FuncMovelinear(brush))=>brush.model, + Ok(Entity::FuncPhysbox(brush))=>brush.model, + Ok(Entity::FuncPhysboxMultiplayer(brush))=>brush.model, + Ok(Entity::FuncRotButton(brush))=>brush.model, + Ok(Entity::FuncRotating(brush))=>brush.model, + Ok(Entity::FuncTracktrain(brush))=>brush.model, + Ok(Entity::FuncTrain(brush))=>brush.model, + Ok(Entity::FuncWall(brush))=>brush.model, + Ok(Entity::FuncWallToggle(brush))=>brush.model, + Ok(Entity::FuncWaterAnalog(brush))=>brush.model, + Ok(Entity::PropDoorRotating(brush))=>brush.model, + Ok(Entity::PropDynamic(brush))=>brush.model, + Ok(Entity::PropDynamicOverride(brush))=>brush.model, + Ok(Entity::PropPhysics(brush))=>brush.model, + Ok(Entity::PropPhysicsMultiplayer(brush))=>brush.model, + Ok(Entity::PropPhysicsOverride(brush))=>brush.model, + Ok(Entity::PropRagdoll(brush))=>brush.model, + Ok(Entity::TriggerGravity(brush))=>brush.model, + Ok(Entity::TriggerHurt(brush))=>brush.model, + Ok(Entity::TriggerLook(brush))=>brush.model, + Ok(Entity::TriggerMultiple(brush))=>brush.model.unwrap_or_default(), + Ok(Entity::TriggerOnce(brush))=>brush.model, + Ok(Entity::TriggerProximity(brush))=>brush.model, + Ok(Entity::TriggerPush(brush))=>brush.model, + Ok(Entity::TriggerSoundscape(brush))=>brush.model, + Ok(Entity::TriggerTeleport(brush))=>brush.model.unwrap_or_default(), + Ok(Entity::TriggerVphysicsMotion(brush))=>brush.model, + Ok(Entity::TriggerWind(brush))=>brush.model, + _=>continue, + }; + match model.chars().next(){ + Some('*')=>(), + _=>{ + mesh_deferred_loader.acquire_mesh_id(model); + }, + } + } + let finder=BspFinder{ bsp:&loader_bsp, vpks:vpk_list