load plane mode

reset orientation if no plane head
This commit is contained in:
2025-04-12 17:45:39 +02:00
parent 8bcc688fbb
commit d59cf762ee
3 changed files with 20 additions and 2 deletions

View File

@@ -4,6 +4,7 @@ use crate::{
GameState, GameState,
head::ActiveHead, head::ActiveHead,
heads_database::{HeadControls, HeadsDatabase}, heads_database::{HeadControls, HeadsDatabase},
player::PlayerBodyMesh,
}; };
mod collisions; mod collisions;
@@ -74,6 +75,7 @@ fn head_change(
query: Query<&ActiveHead, Changed<ActiveHead>>, query: Query<&ActiveHead, Changed<ActiveHead>>,
heads_db: Res<HeadsDatabase>, heads_db: Res<HeadsDatabase>,
mut selected_controller: ResMut<SelectedController>, mut selected_controller: ResMut<SelectedController>,
mut rig_transform_q: Option<Single<&mut Transform, With<PlayerBodyMesh>>>,
) { ) {
for head in query.iter() { for head in query.iter() {
let stats = heads_db.head_stats(head.0); let stats = heads_db.head_stats(head.0);
@@ -83,6 +85,12 @@ fn head_change(
}; };
if selected_controller.0 != controller { 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; selected_controller.0 = controller;
} }
} }

View File

@@ -2,7 +2,7 @@ use crate::abilities::HeadAbility;
use bevy::prelude::*; use bevy::prelude::*;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
#[derive(Debug, Default, Reflect, Serialize, Deserialize)] #[derive(Debug, Default, Reflect, Serialize, Deserialize, PartialEq, Eq)]
pub enum HeadControls { pub enum HeadControls {
#[default] #[default]
Walk, Walk,

View File

@@ -7,7 +7,7 @@ use crate::{
global_observer, global_observer,
head::ActiveHead, head::ActiveHead,
heads::HeadChanged, heads::HeadChanged,
heads_database::HeadsDatabase, heads_database::{HeadControls, HeadsDatabase},
hitpoints::Hitpoints, hitpoints::Hitpoints,
loading_assets::GameAssets, loading_assets::GameAssets,
physics_layers::GameLayer, physics_layers::GameLayer,
@@ -221,5 +221,15 @@ fn on_update_head(
let mesh = asset_server let mesh = asset_server
.load(GltfAssetLabel::Scene(0).from_asset(format!("models/heads/{}.glb", head_str))); .load(GltfAssetLabel::Scene(0).from_asset(format!("models/heads/{}.glb", head_str)));
commands.entity(head).despawn_descendants();
commands.entity(head).insert(SceneRoot(mesh)); 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)));
}
} }