Skip to content

Commit

Permalink
fix: Use FixedRotation to spawn reflection projectiles
Browse files Browse the repository at this point in the history
This fixes the issue of wrong reflection projectile rotations when
striking and reflecting projectiles while dashing.
  • Loading branch information
PraxTube committed Jan 3, 2024
1 parent 07ff572 commit 7d42ce6
Showing 1 changed file with 14 additions and 9 deletions.
23 changes: 14 additions & 9 deletions src/enemy/collision.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
use bevy::prelude::*;
use bevy_rapier2d::prelude::*;

use crate::player::{
dash::DashLanding,
reflection_projectile::{ReflectionProjectile, SpawnReflectionProjectile},
spawn::PlayerDashColliderContainer,
strike::Strike,
use crate::{
player::{
dash::DashLanding,
reflection_projectile::{ReflectionProjectile, SpawnReflectionProjectile},
spawn::PlayerDashColliderContainer,
strike::Strike,
},
utils::FixedRotation,
};

use super::{Enemy, EnemyProjectile};
Expand Down Expand Up @@ -52,8 +55,8 @@ fn player_strike_collisions(
}

fn projectile_strike_collisions(
q_strikes: Query<(&Transform, &Strike)>,
mut q_enemy_projectiles: Query<(&Transform, &mut EnemyProjectile), Without<Strike>>,
q_strikes: Query<(&FixedRotation, &Strike)>,
mut q_enemy_projectiles: Query<(&Transform, &mut EnemyProjectile)>,
q_colliders: Query<&Parent, (With<Collider>, Without<EnemyProjectile>, Without<Strike>)>,
mut ev_collision_events: EventReader<CollisionEvent>,
mut ev_spawn_reflection_projectile: EventWriter<SpawnReflectionProjectile>,
Expand Down Expand Up @@ -82,18 +85,20 @@ fn projectile_strike_collisions(
continue;
};

let (strike_transform, _) = if let Ok(r) = q_strikes.get(source_parent) {
let (strike_fixed_rotation, _) = if let Ok(r) = q_strikes.get(source_parent) {
r
} else if let Ok(r) = q_strikes.get(target_parent) {
r
} else {
continue;
};

let dir = strike_fixed_rotation.rot.mul_vec3(Vec3::X).truncate();

enemy_projectile.disabled = true;
ev_spawn_reflection_projectile.send(SpawnReflectionProjectile {
pos: projectile_transform.translation.truncate(),
dir: strike_transform.local_x().truncate(),
dir,
})
}
}
Expand Down

0 comments on commit 7d42ce6

Please sign in to comment.