Simple ai shooting PoC (#23)
This commit is contained in:
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user