diff --git a/Cargo.lock b/Cargo.lock index 6f76c91..2085fdd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -679,6 +679,19 @@ dependencies = [ "wgpu-types", ] +[[package]] +name = "bevy_common_assets" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3521990269672c442f2bf0fbed0fce9db719e3dd136dd4012a97809464a4389d" +dependencies = [ + "anyhow", + "bevy", + "ron", + "serde", + "thiserror 1.0.69", +] + [[package]] name = "bevy_core" version = "0.15.3" @@ -2971,12 +2984,15 @@ dependencies = [ "bevy-ui-gradients", "bevy_asset_loader", "bevy_ballistic", + "bevy_common_assets", "bevy_debug_log", "bevy_polyline", "bevy_sprite3d", "bevy_trenchbroom", "nil", "rand", + "ron", + "serde", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 6a09206..1fd450f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -36,6 +36,9 @@ bevy-steamworks = "0.13.0" bevy_ballistic = "0.1.0" bevy-ui-gradients = "0.2.0" bevy_debug_log = "0.5.0" +bevy_common_assets = { version = "0.12.0", features = ["ron"] } +serde = { version = "1.0.219", features = ["derive"] } +ron = "0.8" [lints.clippy] too_many_arguments = "allow" diff --git a/assets/all.headsdb.ron b/assets/all.headsdb.ron new file mode 100644 index 0000000..39fc457 --- /dev/null +++ b/assets/all.headsdb.ron @@ -0,0 +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), + (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), +]) diff --git a/src/abilities/mod.rs b/src/abilities/mod.rs index e155bd0..e2f44dc 100644 --- a/src/abilities/mod.rs +++ b/src/abilities/mod.rs @@ -5,6 +5,7 @@ use crate::{ GameState, aim::AimTarget, global_observer, + head_asset::HeadsDatabase, heads::ActiveHeads, hitpoints::Hit, physics_layers::GameLayer, @@ -14,6 +15,7 @@ use crate::{ }; use avian3d::prelude::*; use bevy::prelude::*; +use serde::{Deserialize, Serialize}; #[derive(Component)] pub struct Projectile { @@ -29,8 +31,9 @@ pub enum TriggerState { #[derive(Event, Reflect)] pub struct TriggerCashHeal; -#[derive(Debug, Copy, Clone, PartialEq, Reflect)] +#[derive(Debug, Copy, Clone, PartialEq, Reflect, Default, Serialize, Deserialize)] pub enum HeadAbility { + #[default] None, Arrow, Thrown, @@ -112,6 +115,7 @@ fn on_trigger_state( player_rot: Query<&Transform, With>, player_query: Query<(&Transform, &AimTarget), With>, mut active_heads: ResMut, + heads_db: Res, time: Res