From b5ac2a98755481b5e92f9caffe528751025a3d24 Mon Sep 17 00:00:00 2001 From: extrawurst Date: Sun, 13 Apr 2025 16:33:10 +0200 Subject: [PATCH] improve projectiles asset loading and defining projectile in heads-db --- assets/all.headsdb.ron | 36 +++++++++--------- .../{head_misc => projectiles}/hammer.glb | Bin assets/models/projectiles/handbag.glb | Bin 0 -> 13344 bytes .../molotov.glb} | Bin src/abilities/thrown.rs | 15 +++++--- src/heads_database.rs | 2 + src/loading_assets.rs | 9 ++--- 7 files changed, 33 insertions(+), 29 deletions(-) rename assets/models/{head_misc => projectiles}/hammer.glb (100%) create mode 100644 assets/models/projectiles/handbag.glb rename assets/models/{head_misc/molotov_cocktail.glb => projectiles/molotov.glb} (100%) diff --git a/assets/all.headsdb.ron b/assets/all.headsdb.ron index b7d946f..772454d 100644 --- a/assets/all.headsdb.ron +++ b/assets/all.headsdb.ron @@ -1,20 +1,20 @@ ([ - (key:"angry demonstrator", ability:Thrown, range:80), - (key:"carnival knife thrower", range:60), - (key:"chicago gangster", ability:Gun, range:60), - (key:"commando", ability:Gun, range:60), - (key:"field medic"), - (key:"geisha"), - (key:"goblin", ability:Arrow, range:60), - (key:"green grocer", range:60), - (key:"highland hammer thrower", ability:Thrown, range:80), - (key:"legionnaire", ability:Gun, range:60), - (key:"mig pilot", ability:Gun, range:60, controls:Plane), - (key:"nanny", ability:Thrown, range:60), - (key:"panic attack"), - (key:"salty sea dog"), - (key:"snow plough operator"), - (key:"soldier ant"), - (key:"super market shopper", ability:Thrown, range:80), - (key:"troll", ability:Thrown, range:80), + (key:"angry demonstrator", ability:Thrown, range:80, projectile:"molotov"),//0 + (key:"carnival knife thrower", range:60),//1 + (key:"chicago gangster", ability:Gun, range:60),//2 + (key:"commando", ability:Gun, range:60),//3 + (key:"field medic"),//4 + (key:"geisha"),//5 + (key:"goblin", ability:Arrow, range:60),//6 + (key:"green grocer", range:60),//7 + (key:"highland hammer thrower", ability:Thrown, range:80, projectile:"hammer"),//8 + (key:"legionnaire", ability:Gun, range:60),//9 + (key:"mig pilot", ability:Gun, range:60, controls:Plane),//10 + (key:"nanny", ability:Thrown, range:60),//11 + (key:"panic attack"),//12 + (key:"salty sea dog"),//13 + (key:"snow plough operator"),//14 + (key:"soldier ant"),//15 + (key:"super market shopper", ability:Thrown, range:80, projectile:"handbag"),//16 + (key:"troll", ability:Thrown, range:80),//17 ]) diff --git a/assets/models/head_misc/hammer.glb b/assets/models/projectiles/hammer.glb similarity index 100% rename from assets/models/head_misc/hammer.glb rename to assets/models/projectiles/hammer.glb diff --git a/assets/models/projectiles/handbag.glb b/assets/models/projectiles/handbag.glb new file mode 100644 index 0000000000000000000000000000000000000000..96bd65a9086dbebbc19e50b53650ef8804386c9f GIT binary patch literal 13344 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, assets: Res, + gltf_assets: Res>, + heads_db: Res, ) { let state = trigger.event().0; @@ -110,10 +113,12 @@ fn on_trigger_thrown( * (Vec3::new(2., 1., 0.).normalize() * SPEED) }; - let (mesh, explosion_animation) = match state.head { - 8 => (assets.hammer.clone(), false), - _ => (assets.molotov.clone(), true), - }; + let head = heads_db.head_stats(state.head); + let mesh = assets.projectiles[format!("{}.glb", head.projectile).as_str()].clone(); + let asset = gltf_assets.get(&mesh).unwrap(); + + //TODO: projectile db? + let explosion_animation = !matches!(state.head, 8 | 16); commands .spawn(( @@ -134,7 +139,7 @@ fn on_trigger_thrown( )) .with_child(( AutoRotation(Quat::from_rotation_x(0.4) * Quat::from_rotation_z(0.3)), - SceneRoot(mesh), + SceneRoot(asset.scenes[0].clone()), )); } diff --git a/src/heads_database.rs b/src/heads_database.rs index 18ec6ed..7feb43e 100644 --- a/src/heads_database.rs +++ b/src/heads_database.rs @@ -18,6 +18,8 @@ pub struct HeadStats { pub range: f32, #[serde(default)] pub controls: HeadControls, + #[serde(default)] + pub projectile: String, } #[derive(Debug, Asset, Reflect, Serialize, Deserialize)] diff --git a/src/loading_assets.rs b/src/loading_assets.rs index f61d3a3..fac35aa 100644 --- a/src/loading_assets.rs +++ b/src/loading_assets.rs @@ -84,12 +84,6 @@ pub struct GameAssets { #[asset(path = "models/cash.glb#Scene0")] pub mesh_cash: Handle, - #[asset(path = "models/head_misc/molotov_cocktail.glb#Scene0")] - pub molotov: Handle, - - #[asset(path = "models/head_misc/hammer.glb#Scene0")] - pub hammer: Handle, - #[asset(path = "models/alien_naked.glb#Scene0")] pub mesh_alien: Handle, @@ -102,6 +96,9 @@ pub struct GameAssets { collection(mapped, typed) )] pub animations_alien: HashMap>, + + #[asset(path = "models/projectiles", collection(mapped, typed))] + pub projectiles: HashMap>, } pub struct LoadingPlugin;