Simple ai shooting PoC (#23)

This commit is contained in:
extrawurst
2025-04-04 23:00:15 +02:00
committed by GitHub
parent 145c30663e
commit e49373061e
11 changed files with 258 additions and 120 deletions

View File

@@ -3,8 +3,10 @@ mod thrown;
use crate::{
GameState,
aim::AimTarget,
heads::ActiveHeads,
hitpoints::Hit,
physics_layers::GameLayer,
player::{Player, PlayerRig},
sounds::PlaySound,
tb_entities::EnemySpawn,
@@ -35,16 +37,36 @@ pub enum HeadAbility {
}
#[derive(Debug, Reflect, Clone, Copy)]
pub struct PlayerTriggerState {
pub struct TriggerData {
target: Option<Entity>,
dir: Dir3,
rot: Quat,
pos: Vec3,
target_layer: GameLayer,
}
impl TriggerData {
pub fn new(
target: Option<Entity>,
dir: Dir3,
rot: Quat,
pos: Vec3,
target_layer: GameLayer,
) -> Self {
Self {
target,
dir,
rot,
pos,
target_layer,
}
}
}
#[derive(Event, Reflect)]
pub struct TriggerGun(pub PlayerTriggerState);
pub struct TriggerGun(pub TriggerData);
#[derive(Event, Reflect)]
pub struct TriggerThrow(pub PlayerTriggerState);
pub struct TriggerThrow(pub TriggerData);
pub fn plugin(app: &mut App) {
app.add_plugins(gun::plugin);
@@ -84,7 +106,7 @@ fn on_trigger_state(
trigger: Trigger<TriggerState>,
mut commands: Commands,
player_rot: Query<&Transform, With<PlayerRig>>,
player_transform: Query<&Transform, With<Player>>,
player_query: Query<(&Transform, &AimTarget), With<Player>>,
mut active_heads: ResMut<ActiveHeads>,
time: Res<Time>,
) {
@@ -98,7 +120,7 @@ fn on_trigger_state(
return;
}
let Some(transform) = player_transform.iter().next().copied() else {
let Some((transform, target)) = player_query.iter().next() else {
return;
};
@@ -106,10 +128,12 @@ fn on_trigger_state(
return;
};
let trigger_state = PlayerTriggerState {
let trigger_state = TriggerData {
dir,
rot,
pos: transform.translation,
target: target.0,
target_layer: GameLayer::Npc,
};
active_heads.use_ammo(time.elapsed_secs());