diff --git a/assets/all.headsdb.ron b/assets/all.headsdb.ron index e10ff10..0ac7730 100644 --- a/assets/all.headsdb.ron +++ b/assets/all.headsdb.ron @@ -1,20 +1,20 @@ ([ - (key:"angry demonstrator", ability:Thrown, ammo: 10, range:90, projectile:"molotov"),//0 - (key:"carnival knife thrower", range:60, ammo: 5, ),//1 - (key:"chicago gangster", ability:Gun, ammo: 25, range:60),//2 - (key:"commando", ability:Gun, ammo: 26, range:60),//3 - (key:"field medic"),//4 - (key:"geisha"),//5 - (key:"goblin", ability:Arrow, ammo: 5, range:90),//6 - (key:"green grocer", range:60, ammo: 10, ),//7 - (key:"highland hammer thrower", ability:Thrown, ammo: 10, range:80, projectile:"hammer"),//8 - (key:"legionnaire", ability:Gun, ammo: 25, range:60),//9 - (key:"mig pilot", ability:Gun, ammo: 5, 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, ammo: 10, range:80, projectile:"handbag"),//16 - (key:"troll", ability:Thrown, ammo: 10, range:80),//17 + /*00*/(key:"angry demonstrator", ability:Thrown, ammo: 10, range:90, damage:25, projectile:"molotov"), + /*01*/(key:"carnival knife thrower", range:60, ammo: 5 ), + /*02*/(key:"chicago gangster", ability:Gun, ammo: 25, range:60), + /*03*/(key:"commando", ability:Gun, ammo: 26, range:60, damage:12), + /*04*/(key:"field medic"), + /*05*/(key:"geisha"), + /*06*/(key:"goblin", ability:Arrow, ammo: 5, range:90, damage:50), + /*07*/(key:"green grocer", range:60, ammo: 10, damage: 25), + /*08*/(key:"highland hammer thrower", ability:Thrown, ammo: 10, damage: 25, range:80, projectile:"hammer"), + /*09*/(key:"legionnaire", ability:Gun, ammo: 25, range:60, damage: 13), + /*10*/(key:"mig pilot", ability:Gun, ammo: 5, range:60, damage:100, controls:Plane), + /*11*/(key:"nanny", ability:Thrown, range:60), + /*12*/(key:"panic attack"), + /*13*/(key:"salty sea dog"), + /*14*/(key:"snow plough operator"), + /*15*/(key:"soldier ant"), + /*16*/(key:"super market shopper", ability:Thrown, ammo: 10, range:80, damage: 17, projectile:"handbag"), + /*17*/(key:"troll", ability:Thrown, ammo: 10, range:80, damage: 17), ]) diff --git a/build/macos/justfile b/build/macos/justfile new file mode 100644 index 0000000..bf9a51b --- /dev/null +++ b/build/macos/justfile @@ -0,0 +1,19 @@ +[working-directory: "../../"] +build-lipo: + cargo build --release --target=x86_64-apple-darwin + cargo build --release --target=aarch64-apple-darwin + lipo -create -output target/release/hedz_reloaded target/aarch64-apple-darwin/release/hedz_reloaded target/x86_64-apple-darwin/release/hedz_reloaded + +[working-directory: "../../"] +build-app: build-lipo + rm -rf build/macos/src/HEDZReloaded.app/Contents/MacOS/* | true + mkdir -p build/macos/src/HEDZReloaded.app/Contents/MacOS/assets + cp -r assets/ build/macos/src/HEDZReloaded.app/Contents/MacOS/assets + cp target/release/hedz_reloaded build/macos/src/HEDZReloaded.app/Contents/MacOS/ + cp build/macos/libsteam_api.dylib build/macos/src/HEDZReloaded.app/Contents/MacOS/ + +[working-directory: "../../"] +build-dmg: build-app + rm build/macos/src/Applications | true + ln -s /Applications build/macos/src/ + hdiutil create -fs HFS+ -volname "HEDZReloaded" -srcfolder build/macos/src HEDZReloaded.dmg diff --git a/build/steamos/justfile b/build/steamos/justfile index 0eda50a..e8c2f46 100644 --- a/build/steamos/justfile +++ b/build/steamos/justfile @@ -18,5 +18,6 @@ login: build: ./builder_osx/steamcmd +login $STEAM_USR +run_app_build ../scripts/hedz.vdf +quit -steam_build_macos: +steam_macos: + cd ../macos && just build-app ./builder_osx/steamcmd +login $STEAM_USR +run_app_build ../scripts/hz_macos.vdf +quit diff --git a/justfile b/justfile index 77697c2..3c2b5a1 100644 --- a/justfile +++ b/justfile @@ -13,20 +13,3 @@ check: cargo b cargo test cargo clippy - -build-lipo: - cargo build --release --target=x86_64-apple-darwin - cargo build --release --target=aarch64-apple-darwin - lipo -create -output target/release/hedz_reloaded target/aarch64-apple-darwin/release/hedz_reloaded target/x86_64-apple-darwin/release/hedz_reloaded - -build-app: build-lipo - rm -rf build/macos/src/HEDZReloaded.app/Contents/MacOS/* | true - mkdir -p build/macos/src/HEDZReloaded.app/Contents/MacOS/assets - cp -r assets/ build/macos/src/HEDZReloaded.app/Contents/MacOS/assets - cp target/release/hedz_reloaded build/macos/src/HEDZReloaded.app/Contents/MacOS/ - cp build/macos/libsteam_api.dylib build/macos/src/HEDZReloaded.app/Contents/MacOS/ - -build-dmg: build-app - rm build/macos/src/Applications | true - ln -s /Applications build/macos/src/ - hdiutil create -fs HFS+ -volname "HEDZReloaded" -srcfolder build/macos/src HEDZReloaded.dmg diff --git a/src/abilities/arrow.rs b/src/abilities/arrow.rs index 9883380..beb72bf 100644 --- a/src/abilities/arrow.rs +++ b/src/abilities/arrow.rs @@ -1,7 +1,8 @@ use super::TriggerArrow; use crate::{ - GameState, billboards::Billboard, global_observer, hitpoints::Hit, loading_assets::GameAssets, - physics_layers::GameLayer, sounds::PlaySound, utils::sprite_3d_animation::AnimationTimer, + GameState, billboards::Billboard, global_observer, heads_database::HeadsDatabase, + hitpoints::Hit, loading_assets::GameAssets, physics_layers::GameLayer, sounds::PlaySound, + utils::sprite_3d_animation::AnimationTimer, }; use avian3d::prelude::*; use bevy::{pbr::NotShadowCaster, prelude::*}; @@ -9,7 +10,9 @@ use bevy_sprite3d::{Sprite3dBuilder, Sprite3dParams}; use std::f32::consts::PI; #[derive(Component)] -struct ArrowProjectile; +struct ArrowProjectile { + damage: u32, +} #[derive(Resource)] struct ShotAssets { @@ -38,6 +41,7 @@ fn on_trigger_arrow( trigger: Trigger, mut commands: Commands, query_transform: Query<&Transform>, + heads_db: Res, ) { let state = trigger.0; @@ -57,17 +61,18 @@ fn on_trigger_arrow( let mut t = Transform::from_translation(state.pos).with_rotation(rotation); t.translation += (t.forward().as_vec3() * 2.) + (Vec3::Y * 0.6); - commands.spawn((Name::new("projectile-arrow"), ArrowProjectile, t)); + let damage = heads_db.head_stats(state.head).damage; + commands.spawn((Name::new("projectile-arrow"), ArrowProjectile { damage }, t)); } fn update( mut cmds: Commands, - query: Query<(Entity, &Transform), With>, + query: Query<(Entity, &Transform, &ArrowProjectile)>, spatial_query: SpatialQuery, assets: Res, mut sprite_params: Sprite3dParams, ) { - for (e, t) in query.iter() { + for (e, t, arrow) in query.iter() { let filter = SpatialQueryFilter::from_mask(LayerMask( GameLayer::Level.to_bits() | GameLayer::Npc.to_bits(), )); @@ -80,7 +85,9 @@ fn update( &ShapeCastConfig::from_max_distance(150.), &filter, ) { - cmds.entity(first_hit.entity).trigger(Hit { damage: 50 }); + cmds.entity(first_hit.entity).trigger(Hit { + damage: arrow.damage, + }); cmds.spawn( Sprite3dBuilder { diff --git a/src/abilities/gun.rs b/src/abilities/gun.rs index 1f4b285..8f4cd74 100644 --- a/src/abilities/gun.rs +++ b/src/abilities/gun.rs @@ -76,7 +76,9 @@ fn on_trigger_gun( GunProjectile { time: time.elapsed_secs(), }, - Projectile { damage: 10 }, + Projectile { + owner_head: state.head, + }, Collider::capsule_endpoints(0.5, Vec3::new(0., 0., 0.), Vec3::new(0., 0., -3.)), CollisionLayers::new( LayerMask(GameLayer::Projectile.to_bits()), diff --git a/src/abilities/mod.rs b/src/abilities/mod.rs index 44107dc..e22eab4 100644 --- a/src/abilities/mod.rs +++ b/src/abilities/mod.rs @@ -20,7 +20,7 @@ use serde::{Deserialize, Serialize}; #[derive(Component)] pub struct Projectile { - pub damage: u32, + pub owner_head: usize, } #[derive(Event, Reflect)] @@ -93,6 +93,7 @@ fn enemy_hit( mut collision_event_reader: EventReader, query_shot: Query<&Projectile>, query_npc: Query<&EnemySpawn>, + heads_db: Res, ) { for CollisionStarted(e1, e2) in collision_event_reader.read() { if !query_shot.contains(*e1) && !query_shot.contains(*e2) { @@ -108,8 +109,10 @@ fn enemy_hit( (*e2, query_shot.get(*e1)) }; - let damage = projectile.map(|p| p.damage).unwrap_or_default(); - commands.entity(enemy_entity).trigger(Hit { damage }); + if let Ok(head) = projectile.map(|p| p.owner_head) { + let damage = heads_db.head_stats(head).damage; + commands.entity(enemy_entity).trigger(Hit { damage }); + } } } diff --git a/src/abilities/thrown.rs b/src/abilities/thrown.rs index c7093dc..aebaba4 100644 --- a/src/abilities/thrown.rs +++ b/src/abilities/thrown.rs @@ -18,6 +18,7 @@ use std::f32::consts::PI; #[derive(Component)] struct ThrownProjectile { impact_animation: bool, + damage: u32, } #[derive(Component, Reflect)] @@ -126,6 +127,7 @@ fn on_trigger_thrown( Name::new("projectile-thrown"), ThrownProjectile { impact_animation: explosion_animation, + damage: head.damage, }, Collider::sphere(0.5), CollisionLayers::new( @@ -157,9 +159,14 @@ fn shot_collision( let shot_entity = if query_shot.contains(*e1) { *e1 } else { *e2 }; - let Ok((shot_pos, animation)) = query_shot - .get(shot_entity) - .map(|(projectile, t)| (t.translation, projectile.impact_animation)) + let Ok((shot_pos, animation, damage)) = + query_shot.get(shot_entity).map(|(projectile, t)| { + ( + t.translation, + projectile.impact_animation, + projectile.damage, + ) + }) else { continue; }; @@ -169,7 +176,7 @@ fn shot_collision( commands.trigger(PlaySound::ThrowHit); commands.trigger(Explosion { - damage: 20, + damage, position: shot_pos, //TODO: should be around 1 grid in distance radius: 5., diff --git a/src/heads_database.rs b/src/heads_database.rs index 0f6b2d6..ad34a28 100644 --- a/src/heads_database.rs +++ b/src/heads_database.rs @@ -22,6 +22,8 @@ pub struct HeadStats { pub projectile: String, #[serde(default = "default_ammo")] pub ammo: u32, + #[serde(default)] + pub damage: u32, } fn default_ammo() -> u32 {