Player now inside playerEye and has collider
This commit is contained in:
parent
3b3346ff3e
commit
7569b40fd7
Binary file not shown.
|
@ -1,8 +1,9 @@
|
||||||
use bevy::prelude::*;
|
use bevy::prelude::*;
|
||||||
use bevy_rapier3d::dynamics::RigidBody as RapierRigidBody;
|
use bevy_rapier3d::dynamics::RigidBody as RapierRigidBody;
|
||||||
// use bevy::render::primitives::Aabb;
|
|
||||||
use bevy_rapier3d::geometry::Collider as RapierCollider;
|
use bevy_rapier3d::geometry::Collider as RapierCollider;
|
||||||
use bevy_rapier3d::prelude::{ActiveEvents, ComputedColliderShape};
|
use bevy_rapier3d::prelude::ComputedColliderShape;
|
||||||
|
|
||||||
|
use crate::comps::core::markers::player::Player;
|
||||||
|
|
||||||
use super::utils::*;
|
use super::utils::*;
|
||||||
|
|
||||||
|
@ -33,86 +34,96 @@ pub enum AutoAABBCollider {
|
||||||
Capsule,
|
Capsule,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Component, Reflect, Default, Debug)]
|
||||||
|
#[reflect(Component)]
|
||||||
|
pub struct LinkToPlayer;
|
||||||
|
|
||||||
// replaces all physics stand-ins with the actual rapier types
|
// replaces all physics stand-ins with the actual rapier types
|
||||||
pub fn physics_replace_proxies(
|
pub fn physics_replace_proxies(
|
||||||
meshes: Res<Assets<Mesh>>,
|
meshes: Res<Assets<Mesh>>,
|
||||||
mesh_handles: Query<&Handle<Mesh>>,
|
mesh_handles: Query<&Handle<Mesh>>,
|
||||||
mut proxy_colliders: Query<
|
mut proxy_colliders: Query<
|
||||||
(Entity, &Collider, &Name, &mut Visibility),
|
(Entity, &Collider, &Name, &mut Visibility, Option<&LinkToPlayer>, &Parent),
|
||||||
(Without<RapierCollider>, Added<Collider>),
|
(Without<RapierCollider>, Added<Collider>),
|
||||||
>,
|
>,
|
||||||
proxy_rigidbodies: Query<
|
proxy_rigidbodies: Query<
|
||||||
(Entity, &RigidBodyBlender),
|
(Entity, &RigidBodyBlender, Option<&LinkToPlayer>, &Parent),
|
||||||
(Without<RapierRigidBody>, Added<RigidBodyBlender>),
|
(Without<RapierRigidBody>, Added<RigidBodyBlender>),
|
||||||
>,
|
>,
|
||||||
|
player_query: Query<(Entity, &Player)>,
|
||||||
// needed for tri meshes
|
// needed for tri meshes
|
||||||
children: Query<&Children>,
|
children: Query<&Children>,
|
||||||
|
|
||||||
mut commands: Commands,
|
mut commands: Commands,
|
||||||
) {
|
) {
|
||||||
for proxy_colider in proxy_colliders.iter_mut() {
|
for (player_entity, _) in player_query.iter() {
|
||||||
let (entity, collider_proxy, name, mut visibility) = proxy_colider;
|
for proxy_colider in proxy_colliders.iter_mut() {
|
||||||
// we hide the collider meshes: perhaps they should be removed altogether once processed ?
|
let (entity, collider_proxy, name, mut visibility, link_to_player_opt, _) = proxy_colider;
|
||||||
if name.ends_with("_collider") || name.ends_with("_sensor") {
|
// we hide the collider meshes: perhaps they should be removed altogether once processed ?
|
||||||
*visibility = Visibility::Hidden;
|
if name.ends_with("_collider") || name.ends_with("_sensor") {
|
||||||
}
|
*visibility = Visibility::Hidden;
|
||||||
|
|
||||||
let mut rapier_collider: RapierCollider;
|
|
||||||
match collider_proxy {
|
|
||||||
Collider::Ball(radius) => {
|
|
||||||
println!("proxy: ball");
|
|
||||||
rapier_collider = RapierCollider::ball(*radius);
|
|
||||||
commands.entity(entity)
|
|
||||||
.insert(rapier_collider)
|
|
||||||
.insert(ActiveEvents::COLLISION_EVENTS) // FIXME: this is just for demo purposes !!!
|
|
||||||
;
|
|
||||||
}
|
}
|
||||||
Collider::Cuboid(size) => {
|
|
||||||
println!("proxy: cuboid");
|
|
||||||
rapier_collider = RapierCollider::cuboid(size.x, size.y, size.z);
|
|
||||||
commands.entity(entity)
|
|
||||||
.insert(rapier_collider)
|
|
||||||
.insert(ActiveEvents::COLLISION_EVENTS) // FIXME: this is just for demo purposes !!!
|
|
||||||
;
|
|
||||||
}
|
|
||||||
Collider::Capsule(a, b, radius) => {
|
|
||||||
println!("proxy: capsule");
|
|
||||||
rapier_collider = RapierCollider::capsule(*a, *b, *radius);
|
|
||||||
commands.entity(entity)
|
|
||||||
.insert(rapier_collider)
|
|
||||||
.insert(ActiveEvents::COLLISION_EVENTS) // FIXME: this is just for demo purposes !!!
|
|
||||||
;
|
|
||||||
}
|
|
||||||
Collider::Mesh => {
|
|
||||||
|
|
||||||
for (_, collider_mesh) in
|
let entity_to_insert_collider_on = if link_to_player_opt.is_some() { player_entity } else { entity };
|
||||||
Mesh::search_in_children(entity, &children, &meshes, &mesh_handles)
|
|
||||||
{
|
|
||||||
println!("Mesh");
|
|
||||||
rapier_collider = RapierCollider::from_bevy_mesh(
|
|
||||||
collider_mesh,
|
|
||||||
&ComputedColliderShape::ConvexHull,
|
|
||||||
)
|
|
||||||
.unwrap();
|
|
||||||
commands
|
|
||||||
.entity(entity)
|
|
||||||
.insert(rapier_collider);
|
|
||||||
// .insert(ActiveEvents::COLLISION_EVENTS)
|
|
||||||
// break;
|
|
||||||
|
|
||||||
|
let mut rapier_collider: RapierCollider;
|
||||||
|
match collider_proxy {
|
||||||
|
Collider::Ball(radius) => {
|
||||||
|
println!("proxy: ball");
|
||||||
|
rapier_collider = RapierCollider::ball(*radius);
|
||||||
|
commands.entity(entity_to_insert_collider_on)
|
||||||
|
.insert(rapier_collider)
|
||||||
|
;
|
||||||
|
}
|
||||||
|
Collider::Cuboid(size) => {
|
||||||
|
println!("proxy: cuboid");
|
||||||
|
rapier_collider = RapierCollider::cuboid(size.x, size.y, size.z);
|
||||||
|
commands.entity(entity_to_insert_collider_on)
|
||||||
|
.insert(rapier_collider)
|
||||||
|
;
|
||||||
|
}
|
||||||
|
Collider::Capsule(a, b, radius) => {
|
||||||
|
println!("proxy: capsule");
|
||||||
|
rapier_collider = RapierCollider::capsule(*a, *b, *radius);
|
||||||
|
commands.entity(entity_to_insert_collider_on)
|
||||||
|
.insert(rapier_collider)
|
||||||
|
;
|
||||||
|
}
|
||||||
|
Collider::Mesh => {
|
||||||
|
for (_, collider_mesh) in
|
||||||
|
Mesh::search_in_children(entity, &children, &meshes, &mesh_handles)
|
||||||
|
{
|
||||||
|
println!("Mesh");
|
||||||
|
rapier_collider = RapierCollider::from_bevy_mesh(
|
||||||
|
collider_mesh,
|
||||||
|
&ComputedColliderShape::ConvexHull,
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
//rapier_collider.set_scale(Vec3 { x: 3.0, y: 3.0, z: 3.0 }, 1);
|
||||||
|
commands
|
||||||
|
.entity(entity)
|
||||||
|
.insert(rapier_collider)
|
||||||
|
;
|
||||||
|
// .insert(ActiveEvents::COLLISION_EVENTS)
|
||||||
|
// break;
|
||||||
|
commands.entity(entity).remove::<Collider>();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
for (entity, proxy_rigidbody, link_to_player_opt, _) in proxy_rigidbodies.iter() {
|
||||||
for (entity, proxy_rigidbody) in proxy_rigidbodies.iter() {
|
let rapier_rigidbody: RapierRigidBody;
|
||||||
println!("A");
|
match proxy_rigidbody {
|
||||||
let rapier_rigidbody: RapierRigidBody;
|
RigidBodyBlender::Fixed => rapier_rigidbody = RapierRigidBody::Fixed,
|
||||||
match proxy_rigidbody {
|
RigidBodyBlender::Dynamic => rapier_rigidbody = RapierRigidBody::Dynamic,
|
||||||
RigidBodyBlender::Fixed => rapier_rigidbody = RapierRigidBody::Fixed,
|
}
|
||||||
RigidBodyBlender::Dynamic => rapier_rigidbody = RapierRigidBody::Dynamic,
|
commands
|
||||||
|
.entity(
|
||||||
|
if link_to_player_opt.is_some() { player_entity } else { entity }
|
||||||
|
)
|
||||||
|
.insert(rapier_rigidbody)
|
||||||
|
;
|
||||||
|
commands.entity(entity).remove::<RigidBodyBlender>();
|
||||||
}
|
}
|
||||||
commands
|
|
||||||
.entity(entity)
|
|
||||||
.insert(rapier_rigidbody);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -23,6 +23,7 @@ impl Plugin for ProxyComponentsPlugin {
|
||||||
app.register_type::<AutoAABBCollider>();
|
app.register_type::<AutoAABBCollider>();
|
||||||
app.register_type::<physics::rapier::Collider>();
|
app.register_type::<physics::rapier::Collider>();
|
||||||
app.register_type::<physics::rapier::RigidBodyBlender>();
|
app.register_type::<physics::rapier::RigidBodyBlender>();
|
||||||
|
app.register_type::<physics::rapier::LinkToPlayer>();
|
||||||
app.add_systems(Update, (physics_replace_proxies, update_game_load_state));
|
app.add_systems(Update, (physics_replace_proxies, update_game_load_state));
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -6,7 +6,7 @@ use crate::{
|
||||||
inventory::player_inventory::PlayerInventory,
|
inventory::player_inventory::PlayerInventory,
|
||||||
markers::{
|
markers::{
|
||||||
camera::MainCamera,
|
camera::MainCamera,
|
||||||
player::{Player, PlayerData, PlayerHand},
|
player::{Player, PlayerData}, proxy::{character::player_eye::PlayerEye, physics::rapier::{LinkToPlayer, self}},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
logic::core::{
|
logic::core::{
|
||||||
|
@ -49,21 +49,21 @@ pub fn player_spawner(
|
||||||
}
|
}
|
||||||
|
|
||||||
for (player_spawn_point_entity, player_spawn_point) in player_sp_query.iter() {
|
for (player_spawn_point_entity, player_spawn_point) in player_sp_query.iter() {
|
||||||
let plyer_transform = Transform::from_xyz(25.0, 0.0, 25.0).with_scale(Vec3 { x: 3.0, y: 3.0, z: 3.0 });
|
//let plyer_transform = Transform::from_xyz(25.0, 0.0, 25.0).with_scale(Vec3 { x: 3.0, y: 3.0, z: 3.0 });
|
||||||
commands.spawn(
|
let player_scene = commands.spawn(
|
||||||
(
|
(
|
||||||
SceneBundle {
|
SceneBundle {
|
||||||
scene: loaded_gltf_assets.get(assets.assets[2].asset.clone()).unwrap().scenes[0].clone(),
|
scene: loaded_gltf_assets.get(assets.assets[2].asset.clone()).unwrap().scenes[0].clone(),
|
||||||
transform: plyer_transform,
|
transform: Transform::from_translation(Vec3::ZERO).with_scale(Vec3 { x: 3.0, y: 3.0, z: 3.0 }),
|
||||||
visibility: Visibility::Visible,
|
visibility: Visibility::Inherited,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
Name::new("Player component")
|
Name::new("Player Scene Bundle")
|
||||||
)
|
)
|
||||||
);
|
).id();
|
||||||
|
|
||||||
// Spawn hand
|
// Spawn hand
|
||||||
let player_hand = commands
|
/*let player_hand = commands
|
||||||
.spawn((PlayerHand, Name::new("Player Hand")))
|
.spawn((PlayerHand, Name::new("Player Hand")))
|
||||||
.insert(TransformBundle::from(Transform::from_xyz(0.6, -0.45, 0.0)))
|
.insert(TransformBundle::from(Transform::from_xyz(0.6, -0.45, 0.0)))
|
||||||
.insert(VisibilityBundle {
|
.insert(VisibilityBundle {
|
||||||
|
@ -71,34 +71,15 @@ pub fn player_spawner(
|
||||||
..Default::default()
|
..Default::default()
|
||||||
})
|
})
|
||||||
.id();
|
.id();
|
||||||
|
*/
|
||||||
// Spawn camera
|
|
||||||
let camera = commands
|
|
||||||
.spawn(MainCamera)
|
|
||||||
.insert(Camera3dBundle {
|
|
||||||
transform: Transform::from_xyz(0.0, 0.0, 0.0).looking_at(Vec3::ZERO, Vec3::Y),
|
|
||||||
..Default::default()
|
|
||||||
})
|
|
||||||
//s.insert(Skybox(skybox_handle.clone()))
|
|
||||||
.insert(VisibilityBundle {
|
|
||||||
visibility: Visibility::Inherited,
|
|
||||||
..Default::default()
|
|
||||||
})
|
|
||||||
.push_children(&[player_hand])
|
|
||||||
.id();
|
|
||||||
|
|
||||||
// Spawn player
|
// Spawn player
|
||||||
commands
|
commands
|
||||||
.spawn((Player(PlayerData::default()), Name::new("Player")))
|
.spawn((Player(PlayerData::default()), Name::new("Player")))
|
||||||
// Physics
|
// Physics
|
||||||
.insert(RigidBody::Dynamic)
|
//.insert(RigidBody::Dynamic)
|
||||||
.insert(GravityScale(player_values_state.player_gravity_scale))
|
.insert(GravityScale(player_values_state.player_gravity_scale))
|
||||||
.insert(Collider::capsule_y(player_values_state.player_height, 2.0))
|
//.insert(Collider::capsule_y(player_values_state.player_height, 2.0))
|
||||||
.insert(Restitution::coefficient(0.0))
|
|
||||||
.insert(Friction {
|
|
||||||
coefficient: 0.0,
|
|
||||||
combine_rule: CoefficientCombineRule::Multiply,
|
|
||||||
})
|
|
||||||
.insert(TransformBundle {
|
.insert(TransformBundle {
|
||||||
local: player_spawn_point.get_transform(),
|
local: player_spawn_point.get_transform(),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
|
@ -113,9 +94,6 @@ pub fn player_spawner(
|
||||||
| LockedAxes::ROTATION_LOCKED_X
|
| LockedAxes::ROTATION_LOCKED_X
|
||||||
| LockedAxes::ROTATION_LOCKED_Y,
|
| LockedAxes::ROTATION_LOCKED_Y,
|
||||||
)
|
)
|
||||||
.insert(ColliderMassProperties::Mass(
|
|
||||||
player_values_state.player_initial_weight,
|
|
||||||
))
|
|
||||||
.insert(ExternalImpulse {
|
.insert(ExternalImpulse {
|
||||||
impulse: Vec3::ZERO,
|
impulse: Vec3::ZERO,
|
||||||
torque_impulse: Vec3::ZERO,
|
torque_impulse: Vec3::ZERO,
|
||||||
|
@ -131,7 +109,7 @@ pub fn player_spawner(
|
||||||
// Data
|
// Data
|
||||||
.insert(PlayerFiringInfo::default())
|
.insert(PlayerFiringInfo::default())
|
||||||
.insert(PlayerInventory::default())
|
.insert(PlayerInventory::default())
|
||||||
.push_children(&[camera]);
|
.add_child(player_scene);
|
||||||
|
|
||||||
game_load_state.player_loaded = true;
|
game_load_state.player_loaded = true;
|
||||||
equipment_change_event_writer.send(EquipmentChangeEvent(
|
equipment_change_event_writer.send(EquipmentChangeEvent(
|
||||||
|
@ -140,3 +118,42 @@ pub fn player_spawner(
|
||||||
commands.entity(player_spawn_point_entity).despawn();
|
commands.entity(player_spawn_point_entity).despawn();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Camera
|
||||||
|
pub fn insert_components_into_spawned_player(
|
||||||
|
mut commands: Commands,
|
||||||
|
eye_query: Query<Entity, Added<PlayerEye>>,
|
||||||
|
player_collider_query: Query<Entity, (With<LinkToPlayer>, With<Collider>, Added<Collider>)>,
|
||||||
|
player_values_state: Res<PlayerValuesState>,
|
||||||
|
) {
|
||||||
|
for eye in eye_query.iter() {
|
||||||
|
// Spawn camera
|
||||||
|
let camera = commands
|
||||||
|
.spawn(MainCamera)
|
||||||
|
.insert(Camera3dBundle {
|
||||||
|
transform: Transform::from_xyz(0.0, 0.0, 0.0).looking_at(Vec3::ZERO, Vec3::Y),
|
||||||
|
..Default::default()
|
||||||
|
})
|
||||||
|
//s.insert(Skybox(skybox_handle.clone()))
|
||||||
|
.insert(VisibilityBundle {
|
||||||
|
visibility: Visibility::Inherited,
|
||||||
|
..Default::default()
|
||||||
|
})
|
||||||
|
//.push_children(&[player_hand])
|
||||||
|
.id();
|
||||||
|
commands.entity(eye).add_child(camera);
|
||||||
|
}
|
||||||
|
for entity in player_collider_query.iter() {
|
||||||
|
commands.entity(entity)
|
||||||
|
.insert(Restitution::coefficient(0.0))
|
||||||
|
.insert(Friction {
|
||||||
|
coefficient: 0.0,
|
||||||
|
combine_rule: CoefficientCombineRule::Multiply,
|
||||||
|
})
|
||||||
|
.insert(ColliderMassProperties::Mass(
|
||||||
|
player_values_state.player_initial_weight,
|
||||||
|
))
|
||||||
|
;
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,7 +2,7 @@ use bevy::prelude::*;
|
||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
item::{item_spawner, ItemSpawnPointPlugin},
|
item::{item_spawner, ItemSpawnPointPlugin},
|
||||||
player::player_spawner,
|
player::{player_spawner, insert_components_into_spawned_player},
|
||||||
spawn_point::SpawnPointPlugin,
|
spawn_point::SpawnPointPlugin,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -10,6 +10,6 @@ pub struct SpawnerPlugin;
|
||||||
impl Plugin for SpawnerPlugin {
|
impl Plugin for SpawnerPlugin {
|
||||||
fn build(&self, app: &mut App) {
|
fn build(&self, app: &mut App) {
|
||||||
app.add_plugins((SpawnPointPlugin, ItemSpawnPointPlugin));
|
app.add_plugins((SpawnPointPlugin, ItemSpawnPointPlugin));
|
||||||
app.add_systems(Update, (player_spawner, item_spawner));
|
app.add_systems(Update, (player_spawner, item_spawner, insert_components_into_spawned_player.after(player_spawner)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,14 +55,14 @@ pub fn update_camera_vertical_position(
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
// TODO: Add elapsed time to standup so that crouch time and standup time is the same.
|
// TODO: Add elapsed time to standup so that crouch time and standup time is the same.
|
||||||
camera_transform.translation = camera_transform.translation.lerp(
|
/*camera_transform.translation = camera_transform.translation.lerp(
|
||||||
Vec3 {
|
Vec3 {
|
||||||
x: camera_transform.translation.x,
|
x: camera_transform.translation.x,
|
||||||
y: player_values_state.player_camera_height,
|
y: player_values_state.player_camera_height,
|
||||||
z: camera_transform.translation.z,
|
z: camera_transform.translation.z,
|
||||||
},
|
},
|
||||||
time.delta_seconds().clamp(0.0, 1.0),
|
time.delta_seconds().clamp(0.0, 1.0),
|
||||||
);
|
);*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -149,7 +149,7 @@ pub fn follow_cursor_with_camera(
|
||||||
pitch = pitch.clamp(-1.54, 1.54);
|
pitch = pitch.clamp(-1.54, 1.54);
|
||||||
|
|
||||||
let desired_rotation_quat =
|
let desired_rotation_quat =
|
||||||
Quat::from_axis_angle(Vec3::Y, yaw) * Quat::from_axis_angle(Vec3::X, pitch);
|
(Quat::from_axis_angle(Vec3::Y, yaw) * -1. )* Quat::from_axis_angle(Vec3::X, pitch);
|
||||||
|
|
||||||
for mut camera_transform in camera_query.iter_mut() {
|
for mut camera_transform in camera_query.iter_mut() {
|
||||||
let local_z = camera_transform.local_z();
|
let local_z = camera_transform.local_z();
|
||||||
|
|
|
@ -10,7 +10,7 @@ use crate::{
|
||||||
firearm::{FirearmData, MagazineData},
|
firearm::{FirearmData, MagazineData},
|
||||||
holdable::InPlayerHands,
|
holdable::InPlayerHands,
|
||||||
interactable::Interactable,
|
interactable::Interactable,
|
||||||
player::{Player, PlayerHand},
|
player::Player, proxy::character::in_player_hands_parent::InPlayerHandsParent,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
logic::core::guns::{player_firing::PlayerFiringInfo, shoot::shoot_bullet},
|
logic::core::guns::{player_firing::PlayerFiringInfo, shoot::shoot_bullet},
|
||||||
|
@ -43,7 +43,7 @@ pub fn capture_hand_usage(
|
||||||
mut resources: CaptureHandUsageResourcesParams,
|
mut resources: CaptureHandUsageResourcesParams,
|
||||||
mut commands: Commands,
|
mut commands: Commands,
|
||||||
|
|
||||||
mut hand_query: Query<&mut Transform, (With<PlayerHand>, Without<Player>)>,
|
mut hand_query: Query<&mut Transform, (With<InPlayerHandsParent>, Without<Player>)>,
|
||||||
mut firearm_query: Query<
|
mut firearm_query: Query<
|
||||||
(
|
(
|
||||||
Entity,
|
Entity,
|
||||||
|
@ -51,7 +51,7 @@ pub fn capture_hand_usage(
|
||||||
&'static FirearmData,
|
&'static FirearmData,
|
||||||
&mut MagazineData,
|
&mut MagazineData,
|
||||||
),
|
),
|
||||||
(With<InPlayerHands>, Without<PlayerHand>),
|
(With<InPlayerHands>, Without<InPlayerHandsParent>),
|
||||||
>,
|
>,
|
||||||
mut player_query: Query<(&Player, &mut PlayerInventory, Entity, &Transform, &mut PlayerFiringInfo)>,
|
mut player_query: Query<(&Player, &mut PlayerInventory, Entity, &Transform, &mut PlayerFiringInfo)>,
|
||||||
mut animation_players: Query<(Entity, &mut AnimationPlayer)>,
|
mut animation_players: Query<(Entity, &mut AnimationPlayer)>,
|
||||||
|
|
|
@ -6,7 +6,7 @@ use crate::{
|
||||||
comps::core::markers::{
|
comps::core::markers::{
|
||||||
firearm::{FirearmData, MagazineData},
|
firearm::{FirearmData, MagazineData},
|
||||||
holdable::InPlayerHands,
|
holdable::InPlayerHands,
|
||||||
player::{Player, PlayerHand},
|
player::Player, proxy::character::in_player_hands_parent::InPlayerHandsParent,
|
||||||
},
|
},
|
||||||
logic::core::guns::{firearm::Firearm, player_firing::PlayerFiringInfo},
|
logic::core::guns::{firearm::Firearm, player_firing::PlayerFiringInfo},
|
||||||
utils,
|
utils,
|
||||||
|
@ -29,7 +29,7 @@ pub fn change_equipment(
|
||||||
mut commands: Commands,
|
mut commands: Commands,
|
||||||
mut equipment_change_event_reader: EventReader<EquipmentChangeEvent>,
|
mut equipment_change_event_reader: EventReader<EquipmentChangeEvent>,
|
||||||
mut player_query: Query<(&mut Player, &mut PlayerFiringInfo)>,
|
mut player_query: Query<(&mut Player, &mut PlayerFiringInfo)>,
|
||||||
mut player_hands_query: Query<Entity, With<PlayerHand>>,
|
mut player_hands_query: Query<Entity, With<InPlayerHandsParent>>,
|
||||||
|
|
||||||
assets_gltf: Res<GltfAssets>,
|
assets_gltf: Res<GltfAssets>,
|
||||||
loaded_gltf_assets: Res<Assets<Gltf>>,
|
loaded_gltf_assets: Res<Assets<Gltf>>,
|
||||||
|
|
Loading…
Reference in New Issue