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 0000000..96bd65a Binary files /dev/null and b/assets/models/projectiles/handbag.glb differ diff --git a/assets/models/head_misc/molotov_cocktail.glb b/assets/models/projectiles/molotov.glb similarity index 100% rename from assets/models/head_misc/molotov_cocktail.glb rename to assets/models/projectiles/molotov.glb diff --git a/src/abilities/thrown.rs b/src/abilities/thrown.rs index 049b607..c7093dc 100644 --- a/src/abilities/thrown.rs +++ b/src/abilities/thrown.rs @@ -2,6 +2,7 @@ use super::TriggerThrow; use crate::{ GameState, billboards::Billboard, + heads_database::HeadsDatabase, hitpoints::Hit, loading_assets::GameAssets, physics_layers::GameLayer, @@ -88,6 +89,8 @@ fn on_trigger_thrown( mut commands: Commands, query_transform: Query<&Transform>, 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;