Removed animations

This commit is contained in:
Franklin 2023-11-19 15:33:00 -04:00
parent b3abd36eff
commit 1b83befaad
10 changed files with 64 additions and 40 deletions

View File

@ -9,3 +9,20 @@ Examples:
- Pistol grip should always be in the same position - Pistol grip should always be in the same position
- Foregrip should be in the same position for same gun types - Foregrip should be in the same position for same gun types
# UPDATE:
Bevy isn't really ready yet for IK, multi-body animations, etc...
Importing a character into bevy from blender is a nightmare. Hate to admit it but it's true. Maybe for 0.13 they work on it.
Still, I can do many things without that.
Mainly, Give love to the weapon system, movement, etc...
Modular weapons are not that crazy anymore, now that you have the blender->bevy workflow with custom properties, you can make it.
## Modular Weapons Design:
### Important: ZERO ANIMATIONS. ALL PROCEDURAL
Limit mods to attachments, for now, I don't want to change barrel lengths or foregrips.
Only do silencers/compensators, sights, Foregrips.
### Blender:
- Mark every weapon parent with a FirearmEnum custom property
- Mark Firing point

Binary file not shown.

View File

@ -1,15 +1,13 @@
use std::time::Duration;
use bevy::prelude::*; use bevy::prelude::*;
use bevy_rapier3d::dynamics::Velocity; use bevy_rapier3d::dynamics::Velocity;
use crate::{setup::{animations::AllAnimations, assets::GltfAssets}, comps::core::markers::{player::Player, proxy::character::player_character::PlayerCharacter}, ui::game::game_ui_state::GameUiState}; use crate::{setup::assets::GltfAssets, comps::core::markers::{player::Player, proxy::character::player_character::PlayerCharacter}, ui::game::game_ui_state::GameUiState};
use super::player_movement::{PlayerLinearYState, PlayerLinearXZState}; use super::player_movement::{PlayerLinearYState, PlayerLinearXZState};
#[allow(unused)] #[allow(unused)]
pub fn animate_player( pub fn animate_player(
all_animations: Res<AllAnimations>, //all_animations: Res<AllAnimations>,
assets_gltf: Res<GltfAssets>, assets_gltf: Res<GltfAssets>,
player_query: Query< player_query: Query<
( (
@ -30,19 +28,19 @@ pub fn animate_player(
for (player_velocity, player_linear_y_state, player_linear_xz_state) in player_query.iter() { for (player_velocity, player_linear_y_state, player_linear_xz_state) in player_query.iter() {
for mut animation_player in player_character_animation_player_query.iter_mut() { for mut animation_player in player_character_animation_player_query.iter_mut() {
if player_linear_xz_state.is_sprinting() { if player_linear_xz_state.is_sprinting() {
let clip_to_play = all_animations.character_animations.clone().expect("No Character animations in all_animations Resource").run_animation.clone_weak(); /*let clip_to_play = all_animations.character_animations.clone().expect("No Character animations in all_animations Resource").run_animation.clone_weak();
if !animation_player.is_playing_clip(&clip_to_play) { if !animation_player.is_playing_clip(&clip_to_play) {
animation_player.start_with_transition(clip_to_play, Duration::from_millis(100)); animation_player.start_with_transition(clip_to_play, Duration::from_millis(100));
animation_player.set_speed(1.8); animation_player.set_speed(1.5);
animation_player.repeat(); animation_player.repeat();
} }*/
} else { } else {
let clip_to_play = all_animations.character_animations.clone().expect("No Character animations in all_animations Resource").idle_animation.clone_weak(); //let clip_to_play = all_animations.character_animations.clone().expect("No Character animations in all_animations Resource").idle_animation.clone_weak();
if !animation_player.is_playing_clip(&clip_to_play) { //if !animation_player.is_playing_clip(&clip_to_play) {
animation_player.play(clip_to_play); /*animation_player.play(clip_to_play);
animation_player.set_speed(0.4); animation_player.set_speed(0.4);
animation_player.repeat(); animation_player.repeat();*/
} //}
} }
} }
} }

View File

@ -16,10 +16,10 @@ use crate::{
logic::core::guns::{player_firing::PlayerFiringInfo, shoot::shoot_bullet}, logic::core::guns::{player_firing::PlayerFiringInfo, shoot::shoot_bullet},
setup::{ setup::{
equipment::{Equipment, EquipmentChangeEvent}, equipment::{Equipment, EquipmentChangeEvent},
load_state::GameLoadState, assets::GltfAssets, animations::AllAnimations, load_state::GameLoadState, assets::GltfAssets, //animations::AllAnimations,
}, },
ui::game::{game_ui_state::GameUiState, hud::hud::HudState}, ui::game::{game_ui_state::GameUiState, hud::hud::HudState},
utils::{self, rad_deg::radians_from_degrees}, utils::rad_deg::radians_from_degrees,
}; };
#[derive(SystemParam)] #[derive(SystemParam)]
@ -30,8 +30,8 @@ pub struct CaptureHandUsageResourcesParams<'w> {
game_ui_state: Res<'w, GameUiState>, game_ui_state: Res<'w, GameUiState>,
meshes: ResMut<'w, Assets<Mesh>>, meshes: ResMut<'w, Assets<Mesh>>,
materials: ResMut<'w, Assets<StandardMaterial>>, materials: ResMut<'w, Assets<StandardMaterial>>,
animation_clips: Res<'w, Assets<AnimationClip>>, //animation_clips: Res<'w, Assets<AnimationClip>>,
all_animations: Res<'w, AllAnimations>, //all_animations: Res<'w, AllAnimations>,
time: Res<'w, Time>, time: Res<'w, Time>,
assets_gltf: Res<'w, GltfAssets>, assets_gltf: Res<'w, GltfAssets>,
loaded_gltf_assets: Res<'w, Assets<Gltf>>, loaded_gltf_assets: Res<'w, Assets<Gltf>>,
@ -53,9 +53,9 @@ pub fn capture_hand_usage(
(With<InPlayerHands>, Without<InPlayerHandsParent>), (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)>,
children: Query<&Children>, //children: Query<&Children>,
mut equipment_change_event_writer: EventWriter<EquipmentChangeEvent>, mut equipment_change_event_writer: EventWriter<EquipmentChangeEvent>,
mut inventory_changed_events: EventWriter<PlayerInventoryChangedEvent>, mut inventory_changed_events: EventWriter<PlayerInventoryChangedEvent>,
@ -115,16 +115,17 @@ pub fn capture_hand_usage(
} }
// Firearm stuff // Firearm stuff
if let Equipment::Firearm(player_firearm) = player.0.equipment.clone() { if let Equipment::Firearm(_f) = player.0.equipment.clone() {
player_firing_info player_firing_info
.full_auto_timer .full_auto_timer
.tick(resources.time.delta()); .tick(resources.time.delta());
for (firearm_entity, firearm_transform, firearm_data, mut magazine_data) in for (_f, firearm_transform, firearm_data, mut magazine_data) in
firearm_query.iter_mut() firearm_query.iter_mut()
{ {
for mut hand_transform in hand_query.iter_mut() { for mut hand_transform in hand_query.iter_mut() {
if player_firing_info.is_reloading { if player_firing_info.is_reloading {
/* TODO:
for (animation_player_entity, animation_player) in &mut animation_players { for (animation_player_entity, animation_player) in &mut animation_players {
//children.get_component(entity) //children.get_component(entity)
// Only reload if this animation_player_entity is a child of the firearm_entity // Only reload if this animation_player_entity is a child of the firearm_entity
@ -151,12 +152,13 @@ pub fn capture_hand_usage(
} }
} }
} }
} }*/
} else { } else {
// Player is not in a reload animation // Player is not in a reload animation
if resources.keyboard_input.just_pressed(KeyCode::R) if resources.keyboard_input.just_pressed(KeyCode::R)
&& !resources.game_ui_state.any_window() && !resources.game_ui_state.any_window()
{ {
/*
// Start reload animation // Start reload animation
for (animation_player_entity, mut animation_player) in for (animation_player_entity, mut animation_player) in
&mut animation_players &mut animation_players
@ -179,7 +181,7 @@ pub fn capture_hand_usage(
player_firing_info.is_reloading = true; player_firing_info.is_reloading = true;
} }
} }
} }*/
// Set is_reloading = true // Set is_reloading = true
// At the end of reload animation, set magazine data to capacity = 0 // At the end of reload animation, set magazine data to capacity = 0
} }

View File

@ -163,7 +163,9 @@ pub fn move_player(
if player_movement_input.back { if player_movement_input.back {
if crouch_multiplier == player_values_state.player_crouch_speed_multiplier { if crouch_multiplier == player_values_state.player_crouch_speed_multiplier {
} else { } else {
*player_linear_xz_state = PlayerLinearXZState::Walking; if !player_linear_xz_state.is_sprinting() && !player_linear_xz_state.is_crouched() {
*player_linear_xz_state = PlayerLinearXZState::Walking;
}
} }
player_velocity.linvel = apply_movement_acceleration_to_vec( player_velocity.linvel = apply_movement_acceleration_to_vec(
-forward, -forward,
@ -176,7 +178,9 @@ pub fn move_player(
if player_movement_input.right { if player_movement_input.right {
if crouch_multiplier == player_values_state.player_crouch_speed_multiplier { if crouch_multiplier == player_values_state.player_crouch_speed_multiplier {
} else { } else {
*player_linear_xz_state = PlayerLinearXZState::Walking; if !player_linear_xz_state.is_sprinting() && !player_linear_xz_state.is_crouched() {
*player_linear_xz_state = PlayerLinearXZState::Walking;
}
} }
player_velocity.linvel = apply_movement_acceleration_to_vec( player_velocity.linvel = apply_movement_acceleration_to_vec(
right, right,
@ -195,7 +199,9 @@ pub fn move_player(
if player_movement_input.left { if player_movement_input.left {
if crouch_multiplier == player_values_state.player_crouch_speed_multiplier { if crouch_multiplier == player_values_state.player_crouch_speed_multiplier {
} else { } else {
*player_linear_xz_state = PlayerLinearXZState::Walking; if !player_linear_xz_state.is_sprinting() && !player_linear_xz_state.is_crouched() {
*player_linear_xz_state = PlayerLinearXZState::Walking;
}
} }
player_velocity.linvel = apply_movement_acceleration_to_vec( player_velocity.linvel = apply_movement_acceleration_to_vec(
-right, -right,
@ -244,10 +250,10 @@ pub fn move_player(
let positive = player_velocity.linvel.z.is_sign_positive(); let positive = player_velocity.linvel.z.is_sign_positive();
if positive { if positive {
player_velocity.linvel.z = player_velocity.linvel.z =
player_values_state.max_linear_player_velocity * crouch_multiplier player_values_state.max_linear_player_velocity * crouch_multiplier * sprint_multiplier
} else { } else {
player_velocity.linvel.z = player_velocity.linvel.z =
player_values_state.max_linear_player_velocity * -1.0 * crouch_multiplier player_values_state.max_linear_player_velocity * -1.0 * crouch_multiplier * sprint_multiplier
} }
} }
if player_velocity.linvel.x > -1.0 if player_velocity.linvel.x > -1.0

View File

@ -52,7 +52,7 @@ impl Default for PlayerValuesState {
player_linear_damping_while_jumping: 0.8, player_linear_damping_while_jumping: 0.8,
player_lean_time: 0.3, player_lean_time: 0.3,
player_lean_angle: 30.0, player_lean_angle: 30.0,
player_lateral_acceleration_while_sprinting_multiplier: 0.2, player_lateral_acceleration_while_sprinting_multiplier: 0.8,
player_lateral_acceleration_multiplier: 1.0, player_lateral_acceleration_multiplier: 1.0,
player_linear_damping_time_offset_after_jump_in_s: 0.02, player_linear_damping_time_offset_after_jump_in_s: 0.02,
} }

View File

@ -14,11 +14,11 @@ use crate::{
}, },
hands::{capture_hand_usage, interact_action}, hands::{capture_hand_usage, interact_action},
player_values_state::PlayerValuesState, player_values_state::PlayerValuesState,
player_vertical_sync::sync_player_y_state, animate_player::animate_player, camera_switching::switch_camera, player_vertical_sync::sync_player_y_state, camera_switching::switch_camera,
}, },
}, },
setup::{ setup::{
animations::{load_animations, AllAnimations}, //animations::{load_animations, AllAnimations},
assets::load_all_assets, assets::load_all_assets,
equipment::{change_equipment, EquipmentChangeEvent}, equipment::{change_equipment, EquipmentChangeEvent},
load_state::GameLoadState, load_state::GameLoadState,
@ -33,7 +33,7 @@ use super::{
pub fn load_scene(application: &mut App) { pub fn load_scene(application: &mut App) {
application.insert_resource(GameLoadState::default()); application.insert_resource(GameLoadState::default());
application.insert_resource(MouseMovementSettings::default()); application.insert_resource(MouseMovementSettings::default());
application.insert_resource(AllAnimations::default()); //application.insert_resource(AllAnimations::default());
application.insert_resource(PlayerValuesState::default()); application.insert_resource(PlayerValuesState::default());
application.add_plugins(SpawnerPlugin); application.add_plugins(SpawnerPlugin);
@ -49,7 +49,7 @@ pub fn load_scene(application: &mut App) {
application.add_systems(Update, capture_input); application.add_systems(Update, capture_input);
application.add_systems(Update, sync_player_y_state); application.add_systems(Update, sync_player_y_state);
application.add_systems(Update, follow_cursor_with_camera); application.add_systems(Update, follow_cursor_with_camera);
application.add_systems(Update, load_animations); //application.add_systems(Update, load_animations);
application.add_systems(Update, set_skybox_if_loaded); application.add_systems(Update, set_skybox_if_loaded);
application.add_systems(Update, update_camera_vertical_position); application.add_systems(Update, update_camera_vertical_position);
@ -60,7 +60,7 @@ pub fn load_scene(application: &mut App) {
application.add_systems(Update, change_equipment.before(player_spawner)); application.add_systems(Update, change_equipment.before(player_spawner));
application.add_systems(Update, (despawn_muzzle_flashes, despawn_stray_bullets)); application.add_systems(Update, (despawn_muzzle_flashes, despawn_stray_bullets));
application.add_systems(Update, animate_player); //application.add_systems(Update, animate_player);
//application.add_systems(Update, register_bullet_hits); //application.add_systems(Update, register_bullet_hits);
application.add_event::<EquipmentChangeEvent>(); application.add_event::<EquipmentChangeEvent>();

View File

@ -1,4 +1,4 @@
use bevy::{gltf::Gltf, prelude::*}; /*use bevy::{gltf::Gltf, prelude::*};
use crate::logic::core::guns::firearm::Firearm; use crate::logic::core::guns::firearm::Firearm;
@ -55,9 +55,9 @@ pub fn load_animations(
if let Some(loaded_gltf) = loaded_gltf_assets.get(&gltf_asset.asset) { if let Some(loaded_gltf) = loaded_gltf_assets.get(&gltf_asset.asset) {
// Needs to have all player_animations // Needs to have all player_animations
let initial_pose = &loaded_gltf.animations[0]; let initial_pose = &loaded_gltf.animations[0];
let player_idle = &loaded_gltf.animations[1]; //let player_idle = &loaded_gltf.animations[0];
let player_run = &loaded_gltf.animations[2]; //let player_run = &loaded_gltf.animations[1];
character_animations = Some(CharacterAnimations { run_animation: player_run.clone(), idle_animation: player_idle.clone(), initial_pose: initial_pose.clone() }); //character_animations = Some(CharacterAnimations { run_animation: player_run.clone(), idle_animation: player_idle.clone(), initial_pose: initial_pose.clone() });
} }
} }
} }
@ -68,3 +68,4 @@ pub fn load_animations(
commands.insert_resource(all_animations); commands.insert_resource(all_animations);
game_load_state.animations_loaded = true; game_load_state.animations_loaded = true;
} }
*/

View File

@ -21,7 +21,7 @@ use crate::{
}, },
scenes::scene1::skybox::Cubemap, scenes::scene1::skybox::Cubemap,
setup::{ setup::{
animations::{FirearmAnimations, AllAnimations}, //animations::{FirearmAnimations, AllAnimations},
assets::{GltfAssetType, GltfAssets}, assets::{GltfAssetType, GltfAssets},
equipment::Equipment, equipment::Equipment,
load_state::GameLoadState, load_state::GameLoadState,
@ -55,8 +55,8 @@ impl Plugin for MainEditorUiPlugin {
.register_type::<PlayerLinearXZState>() .register_type::<PlayerLinearXZState>()
.register_type::<PlayerMovementInput>() .register_type::<PlayerMovementInput>()
.register_type::<Cubemap>() .register_type::<Cubemap>()
.register_type::<AllAnimations>() //.register_type::<AllAnimations>()
.register_type::<FirearmAnimations>() //.register_type::<FirearmAnimations>()
.register_type::<GltfAssetType>() .register_type::<GltfAssetType>()
.register_type::<GltfAssets>() .register_type::<GltfAssets>()
.register_type::<Equipment>() .register_type::<Equipment>()