different head different range

This commit is contained in:
2025-04-11 11:33:48 +03:00
parent 98839ae221
commit 806d10e1bd
7 changed files with 42 additions and 27 deletions

View File

@@ -8,6 +8,7 @@ use crate::{
controller::{CharacterControllerBundle, MovementBundle, PlayerMovement},
},
global_observer,
head::ActiveHead,
heads::HeadChanged,
hitpoints::Hitpoints,
loading_assets::GameAssets,
@@ -28,16 +29,16 @@ use bevy::{
use std::time::Duration;
#[derive(Component, Default)]
pub struct Player(pub usize);
pub struct Player;
#[derive(Component, Default)]
struct PlayerAnimations;
#[derive(Component, Default)]
struct PlayerHead;
struct PlayerHeadMesh;
#[derive(Component, Default)]
pub struct PlayerRig;
pub struct PlayerBodyMesh;
pub fn plugin(app: &mut App) {
app.add_systems(Startup, (toggle_cursor_system, cursor_recenter));
@@ -85,7 +86,8 @@ fn spawn(
commands
.spawn((
Name::from("player"),
Player(0),
Player,
ActiveHead(0),
Hitpoints::new(100),
CameraTarget,
transform,
@@ -102,7 +104,7 @@ fn spawn(
parent
.spawn((
Name::from("body rig"),
PlayerRig,
PlayerBodyMesh,
CameraArmRotation,
Transform::from_translation(Vec3::new(0., -1.45, 0.))
.with_rotation(Quat::from_rotation_y(std::f32::consts::PI))
@@ -111,7 +113,7 @@ fn spawn(
))
.with_child((
Name::from("head"),
PlayerHead,
PlayerHeadMesh,
Transform::from_translation(Vec3::new(0., 1.6, 0.))
.with_scale(Vec3::splat(0.7)),
SceneRoot(mesh),
@@ -126,7 +128,7 @@ fn spawn(
fn rotate_view_gamepad(
controls: Res<Controls>,
mut player: Query<&mut Transform, With<PlayerRig>>,
mut player: Query<&mut Transform, With<PlayerBodyMesh>>,
) {
let Some(gamepad) = controls.gamepad_state else {
return;
@@ -143,7 +145,7 @@ fn rotate_view_gamepad(
fn rotate_view_keyboard(
mut controls: ResMut<Controls>,
mut player: Query<&mut Transform, With<PlayerRig>>,
mut player: Query<&mut Transform, With<PlayerBodyMesh>>,
) {
if controls.keyboard_state.view_mode {
return;
@@ -209,7 +211,7 @@ fn setup_animations_marker_for_player(
mut commands: Commands,
animation_handles: Query<Entity, Added<AnimationGraphHandle>>,
parent_query: Query<&Parent>,
player: Query<&PlayerRig>,
player: Query<&PlayerBodyMesh>,
) {
for entity in animation_handles.iter() {
for ancestor in parent_query.iter_ancestors(entity) {
@@ -247,14 +249,14 @@ fn on_update_head(
trigger: Trigger<HeadChanged>,
mut commands: Commands,
asset_server: Res<AssetServer>,
head: Query<Entity, With<PlayerHead>>,
mut player: Query<&mut Player>,
head: Query<Entity, With<PlayerHeadMesh>>,
mut player_head: Query<&mut ActiveHead, With<Player>>,
) {
let Ok(head) = head.get_single() else {
return;
};
let Ok(mut player) = player.get_single_mut() else {
let Ok(mut player) = player_head.get_single_mut() else {
return;
};