From ded4c5084cc9e612de4cdd674d8597c79b64dab6 Mon Sep 17 00:00:00 2001 From: extrawurst Date: Tue, 4 Mar 2025 00:10:57 +0100 Subject: [PATCH] cash and enemy spawnpoints --- assets/maps/map1.map | 16 +++++++ assets/models/cash.glb | Bin 0 -> 2820 bytes src/alien.rs | 19 ++------ src/cash.rs | 16 +++++++ src/main.rs | 51 ++++---------------- src/tb_entities.rs | 97 ++++++++++++++++++++++++++++++++++++++ trenchbroom/hedz/hedz.fgd | 8 ++++ 7 files changed, 148 insertions(+), 59 deletions(-) create mode 100644 assets/models/cash.glb create mode 100644 src/cash.rs create mode 100644 src/tb_entities.rs diff --git a/assets/maps/map1.map b/assets/maps/map1.map index 4c912c1..056edbb 100644 --- a/assets/maps/map1.map +++ b/assets/maps/map1.map @@ -844,3 +844,19 @@ ( 768 1008 -224 ) ( 768 1008 -223 ) ( 768 1009 -224 ) crate [ 0 1 0 16 ] [ 0 0 -1 0 ] 90 1 1 } } +// entity 3 +{ +"classname" "enemy_spawn" +"origin" "648 -680 -248" +"angles" "0 -75 0" +} +// entity 4 +{ +"classname" "cash_spawn" +"origin" "696 1192 8" +} +// entity 5 +{ +"classname" "enemy_spawn" +"origin" "3256 248 -248" +} diff --git a/assets/models/cash.glb b/assets/models/cash.glb new file mode 100644 index 0000000000000000000000000000000000000000..a0c99c46e75efb2c56a45216f0bd3107794d34ef GIT binary patch literal 2820 zcmeHHOK%%h6h4lVG>@hUp*++gWZf02jO&@PJ+>v9w~0$)M~PJxMTK13*Um`e8Ea;o zrm|95sGDy12?+iGOT?~0EC3-`AcPQ5wGu)?2!vQ5SVSu4%pW~;t!2pgl@tjuk(VCtq-61z^z!gkwCL%eqJJcvrekIC_h3oXK91>uLf zSaOf>AQW794sr8wXj)oBbF>}b$Q{Sh$}NY)Hd`xhOyyiVTY~E<<0_TA4(rj53x>jmXYw)_?L%CI} z3G0d`uCr_c6KV}ny3wS&cAYLZjXHwn!&u>Xy_A4gumjt)ygJ=EuvEotG)+Soj+ZDY z$thB{3>;6HYH-AqW+5sOSQ^gW=F3vl{h`9~%3oPpP;eaaV!Ap+I8MrbT)6yi!sSP* zBjAr#ca`qh6g;M1ePdy6Wp3St>S6ocV7YfvzTt=!VbmRbGjci|Wuz$9YVJcuARTVi z=}jw%ObTy4fa2s>H`$X$OBsZvyK+*cgFInvwJ#XoZ*Q=2Oyem7xbx``t_K*- zYEIMfowIC4l{4x_ypAV?eXc0 z5Aq%9b6lQ2ThL!mp1`M%_V~dh+kggkS=mh7hh(Fbcykjr%k_1JA)( zID`8ccnYRq5XNvHgJ)p~24DpD5g3O_IE@J>afRXbTH)1+v2$Z6Oyrjr*O7K;jSS=d z@g@E_l9afbudS}a1>~O}yv%=w$@$rU!a(R8<^}8pU?g<@ke@;szF0n}A{jMvIh$nn z`|iRAUm`QwTz(yu, mut query: Query<&mut Transform, With>) { + for mut transform in query.iter_mut() { + transform.rotate(Quat::from_rotation_y(time.delta_secs())); + } +} diff --git a/src/main.rs b/src/main.rs index f157b07..f9b9a9a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,28 +1,15 @@ +mod alien; +mod cash; +mod tb_entities; + use avian3d::PhysicsPlugins; use avian3d::prelude::*; use bevy::core_pipeline::tonemapping::Tonemapping; -use bevy::ecs::component::ComponentId; -use bevy::ecs::world::DeferredWorld; -use bevy::math::*; use bevy::prelude::*; use bevy::render::view::ColorGrading; use bevy_flycam::prelude::*; use bevy_trenchbroom::prelude::*; -mod alien; - -#[derive(SolidClass, Component, Reflect)] -#[reflect(Component)] -#[geometry(GeometryProvider::new().convex_collider().smooth_by_default_angle().render())] -pub struct Worldspawn; - -#[derive(SolidClass, Component, Reflect, Default)] -#[reflect(Component)] -#[geometry(GeometryProvider::new().convex_collider().smooth_by_default_angle().render())] -pub struct NamedEntity { - pub name: String, -} - #[derive(Resource, Reflect, Debug)] #[reflect(Resource)] struct DebugVisuals { @@ -32,30 +19,6 @@ struct DebugVisuals { pub shadows: bool, } -#[derive(PointClass, Component, Reflect, Default)] -#[reflect(Component)] -#[require(Transform)] -#[component(on_add = Self::on_add)] -#[model({ "path": "models/spawn.glb" })] -pub struct SpawnPoint {} - -impl SpawnPoint { - fn on_add(mut world: DeferredWorld, entity: Entity, _id: ComponentId) { - let Some(asset_server) = world.get_resource::() else { - return; - }; - - let mesh = asset_server.load(GltfAssetLabel::Scene(0).from_asset("models/spawn.glb")); - - world.commands().entity(entity).insert(( - Name::new("spawn"), - SceneRoot(mesh), - RigidBody::Static, - ColliderConstructorHierarchy::new(ColliderConstructor::TrimeshFromMesh), - )); - } -} - fn main() { let mut app = App::new(); @@ -72,12 +35,13 @@ fn main() { })); app.add_plugins(PhysicsPlugins::default()); - app.add_plugins(PhysicsDebugPlugin::default()); + // app.add_plugins(PhysicsDebugPlugin::default()); // bevy_flycam setup so we can get a closer look at the scene, mainly for debugging app.add_plugins(PlayerPlugin); app.add_plugins(alien::plugin); + app.add_plugins(cash::plugin); app.insert_resource(MovementSettings { sensitivity: 0.00005, @@ -119,7 +83,8 @@ fn setup_scene(mut commands: Commands, asset_server: Res) { commands.spawn(( SceneRoot( - asset_server.load(GltfAssetLabel::Scene(0).from_asset("models/angry_demonstrator.glb")), + asset_server + .load(GltfAssetLabel::Scene(0).from_asset("models/heads/angry_demonstrator.glb")), ), Transform::from_xyz(0.0, 5.0, 0.0), )); diff --git a/src/tb_entities.rs b/src/tb_entities.rs new file mode 100644 index 0000000..837de3f --- /dev/null +++ b/src/tb_entities.rs @@ -0,0 +1,97 @@ +use avian3d::prelude::*; +use bevy::ecs::{component::ComponentId, world::DeferredWorld}; +use bevy::math::*; +use bevy::prelude::*; +use bevy_trenchbroom::prelude::*; + +use crate::cash::Cash; + +#[derive(PointClass, Component, Reflect, Default)] +#[reflect(Component)] +#[require(Transform)] +#[component(on_add = Self::on_add)] +#[model({ "path": "models/spawn.glb" })] +pub struct SpawnPoint {} + +impl SpawnPoint { + fn on_add(mut world: DeferredWorld, entity: Entity, _id: ComponentId) { + let Some(asset_server) = world.get_resource::() else { + return; + }; + + let mesh = asset_server.load(GltfAssetLabel::Scene(0).from_asset("models/spawn.glb")); + + world.commands().entity(entity).insert(( + Name::new("spawn"), + SceneRoot(mesh), + RigidBody::Static, + ColliderConstructorHierarchy::new(ColliderConstructor::TrimeshFromMesh), + )); + } +} + +#[derive(SolidClass, Component, Reflect)] +#[reflect(Component)] +#[geometry(GeometryProvider::new().convex_collider().smooth_by_default_angle().render())] +pub struct Worldspawn; + +#[derive(SolidClass, Component, Reflect, Default)] +#[reflect(Component)] +#[geometry(GeometryProvider::new().convex_collider().smooth_by_default_angle().render())] +pub struct NamedEntity { + pub name: String, +} + +#[derive(PointClass, Component, Reflect, Default)] +#[reflect(Component)] +#[require(Transform)] +#[component(on_add = Self::on_add)] +#[model({ "path": "models/alien_naked.glb" })] +pub struct EnemySpawn {} + +impl EnemySpawn { + fn on_add(mut world: DeferredWorld, entity: Entity, _id: ComponentId) { + let Some(asset_server) = world.get_resource::() else { + return; + }; + + let mesh = asset_server.load(GltfAssetLabel::Scene(0).from_asset("models/alien_naked.glb")); + + world + .commands() + .entity(entity) + .insert(( + Visibility::default(), + RigidBody::Dynamic, + Collider::capsule(0.2, 1.), + LockedAxes::new().lock_rotation_z().lock_rotation_x(), + Name::from("Enemy"), + )) + .with_child(( + Transform::from_translation(Vec3::new(0., -0.6, 0.)), + SceneRoot(mesh), + )); + } +} + +#[derive(PointClass, Component, Reflect, Default)] +#[reflect(Component)] +#[require(Transform)] +#[component(on_add = Self::on_add)] +#[model({ "path": "models/cash.glb" })] +pub struct CashSpawn {} + +impl CashSpawn { + fn on_add(mut world: DeferredWorld, entity: Entity, _id: ComponentId) { + let Some(asset_server) = world.get_resource::() else { + return; + }; + + let mesh = asset_server.load(GltfAssetLabel::Scene(0).from_asset("models/cash.glb")); + + world + .commands() + .entity(entity) + .insert((Name::new("cash"), SceneRoot(mesh), Cash)); + } +} diff --git a/trenchbroom/hedz/hedz.fgd b/trenchbroom/hedz/hedz.fgd index fa30070..75dd88b 100644 --- a/trenchbroom/hedz/hedz.fgd +++ b/trenchbroom/hedz/hedz.fgd @@ -56,6 +56,14 @@ NOTE: Changing to 2, for example, will cause the bmodel to initially be solid black. You’ll need to add minlight or lights with _light_channel_mask 2." ] +@PointClass base(transform) model({ "path": "models/cash.glb" }) = cash_spawn +[ +] + +@PointClass base(transform) model({ "path": "models/alien_naked.glb" }) = enemy_spawn +[ +] + @SolidClass = named_entity [ name(string) : "name" : "" : ""