From d59cf762ee435c797163cf83125b10846593cc15 Mon Sep 17 00:00:00 2001 From: extrawurst Date: Sat, 12 Apr 2025 17:45:39 +0200 Subject: [PATCH] load plane mode reset orientation if no plane head --- src/control/mod.rs | 8 ++++++++ src/heads_database.rs | 2 +- src/player.rs | 12 +++++++++++- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/control/mod.rs b/src/control/mod.rs index 052427f..70ec44e 100644 --- a/src/control/mod.rs +++ b/src/control/mod.rs @@ -4,6 +4,7 @@ use crate::{ GameState, head::ActiveHead, heads_database::{HeadControls, HeadsDatabase}, + player::PlayerBodyMesh, }; mod collisions; @@ -74,6 +75,7 @@ fn head_change( query: Query<&ActiveHead, Changed>, heads_db: Res, mut selected_controller: ResMut, + mut rig_transform_q: Option>>, ) { for head in query.iter() { let stats = heads_db.head_stats(head.0); @@ -83,6 +85,12 @@ fn head_change( }; if selected_controller.0 != controller { + if controller == ControllerSet::ApplyControlsRun { + if let Some(mut transform) = rig_transform_q.take() { + transform.rotation = Quat::IDENTITY; + } + } + selected_controller.0 = controller; } } diff --git a/src/heads_database.rs b/src/heads_database.rs index 9f50fc0..18ec6ed 100644 --- a/src/heads_database.rs +++ b/src/heads_database.rs @@ -2,7 +2,7 @@ use crate::abilities::HeadAbility; use bevy::prelude::*; use serde::{Deserialize, Serialize}; -#[derive(Debug, Default, Reflect, Serialize, Deserialize)] +#[derive(Debug, Default, Reflect, Serialize, Deserialize, PartialEq, Eq)] pub enum HeadControls { #[default] Walk, diff --git a/src/player.rs b/src/player.rs index 1f25909..6de5f9d 100644 --- a/src/player.rs +++ b/src/player.rs @@ -7,7 +7,7 @@ use crate::{ global_observer, head::ActiveHead, heads::HeadChanged, - heads_database::HeadsDatabase, + heads_database::{HeadControls, HeadsDatabase}, hitpoints::Hitpoints, loading_assets::GameAssets, physics_layers::GameLayer, @@ -221,5 +221,15 @@ fn on_update_head( let mesh = asset_server .load(GltfAssetLabel::Scene(0).from_asset(format!("models/heads/{}.glb", head_str))); + commands.entity(head).despawn_descendants(); commands.entity(head).insert(SceneRoot(mesh)); + + //TODO: make part of full character mesh later + if head_db.head_stats(trigger.0).controls == HeadControls::Plane { + let mesh = asset_server.load(GltfAssetLabel::Scene(0).from_asset("models/mig.glb")); + + commands + .entity(head) + .with_child((Transform::from_xyz(0., -1., 0.), SceneRoot(mesh))); + } }