diff --git a/lib/bsp_loader/src/bsp.rs b/lib/bsp_loader/src/bsp.rs index 2ec2cd6..00bc845 100644 --- a/lib/bsp_loader/src/bsp.rs +++ b/lib/bsp_loader/src/bsp.rs @@ -213,9 +213,23 @@ pub fn convert<'a>( const ENTITY_ATTRIBUTE:gameplay_attributes::CollisionAttributesId=ATTRIBUTE_DECORATION; const ENTITY_TRIGGER_ATTRIBUTE:gameplay_attributes::CollisionAttributesId=ATTRIBUTE_INTERSECT_DEFAULT; for raw_ent in &bsp.entities{ + macro_rules! ent_brush_default{ + ($entity:ident)=>{ + add_brush(mesh_deferred_loader,&mut world_models,&mut prop_models,$entity.model,$entity.origin,$entity.rendercolor,ENTITY_ATTRIBUTE) + }; + } macro_rules! ent_brush_prop{ + ($entity:ident)=>{ + add_brush(mesh_deferred_loader,&mut world_models,&mut prop_models,$entity.model,$entity.origin,WHITE,ENTITY_ATTRIBUTE) + }; + } + macro_rules! ent_brush_trigger{ + ($entity:ident)=>{ + add_brush(mesh_deferred_loader,&mut world_models,&mut prop_models,$entity.model,$entity.origin,WHITE,ENTITY_TRIGGER_ATTRIBUTE) + }; + } match raw_ent.parse(){ Ok(Entity::AmbientGeneric(_ambient_generic))=>(), - Ok(Entity::Cycler(brush))=>add_brush(mesh_deferred_loader,&mut world_models,&mut prop_models,brush.model,brush.origin,brush.rendercolor,ENTITY_ATTRIBUTE), + Ok(Entity::Cycler(brush))=>ent_brush_default!(brush), Ok(Entity::EnvBeam(_env_beam))=>(), Ok(Entity::EnvBubbles(_env_bubbles))=>(), Ok(Entity::EnvDetailController(_env_detail_controller))=>(), @@ -240,7 +254,7 @@ pub fn convert<'a>( Ok(Entity::EnvSoundscapeProxy(_env_soundscape_proxy))=>(), Ok(Entity::EnvSoundscapeTriggerable(_env_soundscape_triggerable))=>(), Ok(Entity::EnvSpark(_env_spark))=>(), - Ok(Entity::EnvSprite(brush))=>add_brush(mesh_deferred_loader,&mut world_models,&mut prop_models,brush.model,brush.origin,brush.rendercolor,ENTITY_ATTRIBUTE), + Ok(Entity::EnvSprite(brush))=>ent_brush_default!(brush), Ok(Entity::EnvSpritetrail(_env_spritetrail))=>(), Ok(Entity::EnvSteam(_env_steam))=>(), Ok(Entity::EnvSun(_env_sun))=>(), @@ -254,16 +268,16 @@ pub fn convert<'a>( Ok(Entity::FuncAreaportal(_func_areaportal))=>(), Ok(Entity::FuncAreaportalwindow(_func_areaportalwindow))=>(), Ok(Entity::FuncBombTarget(_func_bomb_target))=>(), - Ok(Entity::FuncBreakable(brush))=>add_brush(mesh_deferred_loader,&mut world_models,&mut prop_models,brush.model,brush.origin,brush.rendercolor,ENTITY_ATTRIBUTE), + Ok(Entity::FuncBreakable(brush))=>ent_brush_default!(brush), Ok(Entity::FuncBreakableSurf(_func_breakable_surf))=>(), - Ok(Entity::FuncBrush(brush))=>add_brush(mesh_deferred_loader,&mut world_models,&mut prop_models,brush.model,brush.origin,brush.rendercolor,ENTITY_ATTRIBUTE), - Ok(Entity::FuncButton(brush))=>add_brush(mesh_deferred_loader,&mut world_models,&mut prop_models,brush.model,brush.origin,brush.rendercolor,ENTITY_ATTRIBUTE), + Ok(Entity::FuncBrush(brush))=>ent_brush_default!(brush), + Ok(Entity::FuncButton(brush))=>ent_brush_default!(brush), Ok(Entity::FuncBuyzone(_func_buyzone))=>(), Ok(Entity::FuncClipVphysics(_func_clip_vphysics))=>(), Ok(Entity::FuncConveyor(_func_conveyor))=>(), // FuncDoor is Platform - Ok(Entity::FuncDoor(brush))=>add_brush(mesh_deferred_loader,&mut world_models,&mut prop_models,brush.model,brush.origin,brush.rendercolor,ENTITY_ATTRIBUTE), - Ok(Entity::FuncDoorRotating(brush))=>add_brush(mesh_deferred_loader,&mut world_models,&mut prop_models,brush.model,brush.origin,brush.rendercolor,ENTITY_ATTRIBUTE), + Ok(Entity::FuncDoor(brush))=>ent_brush_default!(brush), + Ok(Entity::FuncDoorRotating(brush))=>ent_brush_default!(brush), Ok(Entity::FuncDustcloud(_func_dustcloud))=>(), Ok(Entity::FuncDustmotes(_func_dustmotes))=>(), Ok(Entity::FuncFishPool(_func_fish_pool))=>(), @@ -271,17 +285,17 @@ pub fn convert<'a>( Ok(Entity::FuncHostageRescue(_func_hostage_rescue))=>(), Ok(Entity::FuncIllusionary(brush))=>add_brush(mesh_deferred_loader,&mut world_models,&mut prop_models,brush.model,brush.origin,brush.rendercolor,ATTRIBUTE_DECORATION), Ok(Entity::FuncLod(_func_lod))=>(), - Ok(Entity::FuncMonitor(brush))=>add_brush(mesh_deferred_loader,&mut world_models,&mut prop_models,brush.model,brush.origin,brush.rendercolor,ENTITY_ATTRIBUTE), - Ok(Entity::FuncMovelinear(brush))=>add_brush(mesh_deferred_loader,&mut world_models,&mut prop_models,brush.model,brush.origin,brush.rendercolor,ENTITY_ATTRIBUTE), + Ok(Entity::FuncMonitor(brush))=>ent_brush_default!(brush), + Ok(Entity::FuncMovelinear(brush))=>ent_brush_default!(brush), Ok(Entity::FuncOccluder(_func_occluder))=>(), - Ok(Entity::FuncPhysbox(brush))=>add_brush(mesh_deferred_loader,&mut world_models,&mut prop_models,brush.model,brush.origin,brush.rendercolor,ENTITY_ATTRIBUTE), - Ok(Entity::FuncPhysboxMultiplayer(brush))=>add_brush(mesh_deferred_loader,&mut world_models,&mut prop_models,brush.model,brush.origin,brush.rendercolor,ENTITY_ATTRIBUTE), + Ok(Entity::FuncPhysbox(brush))=>ent_brush_default!(brush), + Ok(Entity::FuncPhysboxMultiplayer(brush))=>ent_brush_default!(brush), Ok(Entity::FuncPrecipitation(_func_precipitation))=>(), - Ok(Entity::FuncRotButton(brush))=>add_brush(mesh_deferred_loader,&mut world_models,&mut prop_models,brush.model,brush.origin,WHITE,ENTITY_ATTRIBUTE), - Ok(Entity::FuncRotating(brush))=>add_brush(mesh_deferred_loader,&mut world_models,&mut prop_models,brush.model,brush.origin,brush.rendercolor,ENTITY_ATTRIBUTE), + Ok(Entity::FuncRotButton(brush))=>ent_brush_prop!(brush), + Ok(Entity::FuncRotating(brush))=>ent_brush_default!(brush), Ok(Entity::FuncSmokevolume(_func_smokevolume))=>(), - Ok(Entity::FuncTracktrain(brush))=>add_brush(mesh_deferred_loader,&mut world_models,&mut prop_models,brush.model,brush.origin,brush.rendercolor,ENTITY_ATTRIBUTE), - Ok(Entity::FuncTrain(brush))=>add_brush(mesh_deferred_loader,&mut world_models,&mut prop_models,brush.model,brush.origin,brush.rendercolor,ENTITY_ATTRIBUTE), + Ok(Entity::FuncTracktrain(brush))=>ent_brush_default!(brush), + Ok(Entity::FuncTrain(brush))=>ent_brush_default!(brush), Ok(Entity::FuncWall(brush))=>add_brush(mesh_deferred_loader,&mut world_models,&mut prop_models,brush.model,brush.origin.unwrap_or_default(),brush.rendercolor,ENTITY_ATTRIBUTE), Ok(Entity::FuncWallToggle(brush))=>add_brush(mesh_deferred_loader,&mut world_models,&mut prop_models,brush.model,brush.origin.unwrap_or_default(),brush.rendercolor,ENTITY_ATTRIBUTE), Ok(Entity::FuncWaterAnalog(brush))=>add_brush(mesh_deferred_loader,&mut world_models,&mut prop_models,brush.model,brush.origin,brush.rendercolor.unwrap_or(WHITE),ENTITY_ATTRIBUTE), @@ -345,28 +359,28 @@ pub fn convert<'a>( Ok(Entity::PointTemplate(_point_template))=>(), Ok(Entity::PointTesla(_point_tesla))=>(), Ok(Entity::PointViewcontrol(_point_viewcontrol))=>(), - Ok(Entity::PropDoorRotating(brush))=>add_brush(mesh_deferred_loader,&mut world_models,&mut prop_models,brush.model,brush.origin,WHITE,ENTITY_ATTRIBUTE), - Ok(Entity::PropDynamic(brush))=>add_brush(mesh_deferred_loader,&mut world_models,&mut prop_models,brush.model,brush.origin,WHITE,ENTITY_ATTRIBUTE), - Ok(Entity::PropDynamicOverride(brush))=>add_brush(mesh_deferred_loader,&mut world_models,&mut prop_models,brush.model,brush.origin,WHITE,ENTITY_ATTRIBUTE), - Ok(Entity::PropPhysics(brush))=>add_brush(mesh_deferred_loader,&mut world_models,&mut prop_models,brush.model,brush.origin,WHITE,ENTITY_ATTRIBUTE), - Ok(Entity::PropPhysicsMultiplayer(brush))=>add_brush(mesh_deferred_loader,&mut world_models,&mut prop_models,brush.model,brush.origin,WHITE,ENTITY_ATTRIBUTE), - Ok(Entity::PropPhysicsOverride(brush))=>add_brush(mesh_deferred_loader,&mut world_models,&mut prop_models,brush.model,brush.origin,WHITE,ENTITY_ATTRIBUTE), - Ok(Entity::PropRagdoll(brush))=>add_brush(mesh_deferred_loader,&mut world_models,&mut prop_models,brush.model,brush.origin,WHITE,ENTITY_ATTRIBUTE), + Ok(Entity::PropDoorRotating(brush))=>ent_brush_prop!(brush), + Ok(Entity::PropDynamic(brush))=>ent_brush_prop!(brush), + Ok(Entity::PropDynamicOverride(brush))=>ent_brush_prop!(brush), + Ok(Entity::PropPhysics(brush))=>ent_brush_prop!(brush), + Ok(Entity::PropPhysicsMultiplayer(brush))=>ent_brush_prop!(brush), + Ok(Entity::PropPhysicsOverride(brush))=>ent_brush_prop!(brush), + Ok(Entity::PropRagdoll(brush))=>ent_brush_prop!(brush), Ok(Entity::ShadowControl(_shadow_control))=>(), Ok(Entity::SkyCamera(_sky_camera))=>(), - Ok(Entity::TriggerGravity(brush))=>add_brush(mesh_deferred_loader,&mut world_models,&mut prop_models,brush.model,brush.origin,WHITE,ENTITY_TRIGGER_ATTRIBUTE), - Ok(Entity::TriggerHurt(brush))=>add_brush(mesh_deferred_loader,&mut world_models,&mut prop_models,brush.model,brush.origin,WHITE,ENTITY_TRIGGER_ATTRIBUTE), - Ok(Entity::TriggerLook(brush))=>add_brush(mesh_deferred_loader,&mut world_models,&mut prop_models,brush.model,brush.origin,WHITE,ENTITY_TRIGGER_ATTRIBUTE), + Ok(Entity::TriggerGravity(brush))=>ent_brush_trigger!(brush), + Ok(Entity::TriggerHurt(brush))=>ent_brush_trigger!(brush), + Ok(Entity::TriggerLook(brush))=>ent_brush_trigger!(brush), Ok(Entity::TriggerMultiple(brush))=>add_brush(mesh_deferred_loader,&mut world_models,&mut prop_models,brush.model.unwrap_or_default(),brush.origin,WHITE,ENTITY_TRIGGER_ATTRIBUTE), - Ok(Entity::TriggerOnce(brush))=>add_brush(mesh_deferred_loader,&mut world_models,&mut prop_models,brush.model,brush.origin,WHITE,ENTITY_TRIGGER_ATTRIBUTE), - Ok(Entity::TriggerProximity(brush))=>add_brush(mesh_deferred_loader,&mut world_models,&mut prop_models,brush.model,brush.origin,WHITE,ENTITY_TRIGGER_ATTRIBUTE), + Ok(Entity::TriggerOnce(brush))=>ent_brush_trigger!(brush), + Ok(Entity::TriggerProximity(brush))=>ent_brush_trigger!(brush), // TriggerPush is booster - Ok(Entity::TriggerPush(brush))=>add_brush(mesh_deferred_loader,&mut world_models,&mut prop_models,brush.model,brush.origin,WHITE,ENTITY_TRIGGER_ATTRIBUTE), - Ok(Entity::TriggerSoundscape(brush))=>add_brush(mesh_deferred_loader,&mut world_models,&mut prop_models,brush.model,brush.origin,WHITE,ENTITY_TRIGGER_ATTRIBUTE), + Ok(Entity::TriggerPush(brush))=>ent_brush_trigger!(brush), + Ok(Entity::TriggerSoundscape(brush))=>ent_brush_trigger!(brush), // TriggerTeleport is Trigger# Ok(Entity::TriggerTeleport(brush))=>add_brush(mesh_deferred_loader,&mut world_models,&mut prop_models,brush.model.unwrap_or_default(),brush.origin,WHITE,ENTITY_TRIGGER_ATTRIBUTE), - Ok(Entity::TriggerVphysicsMotion(brush))=>add_brush(mesh_deferred_loader,&mut world_models,&mut prop_models,brush.model,brush.origin,WHITE,ENTITY_TRIGGER_ATTRIBUTE), - Ok(Entity::TriggerWind(brush))=>add_brush(mesh_deferred_loader,&mut world_models,&mut prop_models,brush.model,brush.origin,WHITE,ENTITY_TRIGGER_ATTRIBUTE), + Ok(Entity::TriggerVphysicsMotion(brush))=>ent_brush_trigger!(brush), + Ok(Entity::TriggerWind(brush))=>ent_brush_trigger!(brush), Ok(Entity::WaterLodControl(_water_lod_control))=>(), Ok(Entity::WeaponAk47(_weapon_ak47))=>(), Ok(Entity::WeaponAwp(_weapon_awp))=>(),