diff --git a/Cargo.toml b/Cargo.toml index b7aba75..772de66 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,6 +27,7 @@ happy_feet = { git = "https://github.com/atornity/happy_feet.git", rev = "1b24ed "serde", ] } lightyear = { version = "0.22.4", default-features = false, features = [ + "input_native", "interpolation", "netcode", "prediction", diff --git a/crates/client/src/client.rs b/crates/client/src/client.rs index b55a43f..25afb8f 100644 --- a/crates/client/src/client.rs +++ b/crates/client/src/client.rs @@ -2,9 +2,12 @@ use bevy::prelude::*; use lightyear::{ connection::client::ClientState, netcode::Key, - prelude::{client::NetcodeConfig, *}, + prelude::{client::NetcodeConfig, input::native::InputMarker, *}, +}; +use shared::{ + GameState, control::ControlState, global_observer, heads_database::HeadsDatabase, + player::Player, tb_entities::SpawnPoint, }; -use shared::{GameState, heads_database::HeadsDatabase, tb_entities::SpawnPoint}; use std::net::{IpAddr, Ipv4Addr, SocketAddr}; pub fn plugin(app: &mut App) { @@ -13,6 +16,8 @@ pub fn plugin(app: &mut App) { FixedUpdate, spawn_disconnected_player.run_if(in_state(GameState::Playing)), ); + + global_observer!(app, temp_give_player_marker); } fn temp_connect_on_startup(mut commands: Commands) -> Result { @@ -68,3 +73,9 @@ fn spawn_disconnected_player( shared::player::spawn(commands, Entity::PLACEHOLDER, query, asset_server, heads_db) } } + +fn temp_give_player_marker(trigger: Trigger, mut commands: Commands) { + commands + .entity(trigger.target()) + .insert(InputMarker::::default()); +} diff --git a/crates/client/src/main.rs b/crates/client/src/main.rs index e9395da..67d4a47 100644 --- a/crates/client/src/main.rs +++ b/crates/client/src/main.rs @@ -47,7 +47,7 @@ fn main() { ..default() }) .set(bevy::log::LogPlugin { - filter: "info,lightyear_replication=warn".into(), + filter: "info,lightyear_replication=off".into(), level: bevy::log::Level::INFO, // provide custom log layer to receive logging events custom_layer: bevy_debug_log::log_capture_layer, diff --git a/crates/shared/src/abilities/mod.rs b/crates/shared/src/abilities/mod.rs index 50f851f..3f913c0 100644 --- a/crates/shared/src/abilities/mod.rs +++ b/crates/shared/src/abilities/mod.rs @@ -9,6 +9,7 @@ use crate::{ GameState, aim::AimTarget, character::CharacterHierarchy, + control::ControlState, global_observer, head::ActiveHead, heads::ActiveHeads, @@ -17,23 +18,18 @@ use crate::{ physics_layers::GameLayer, player::{Player, PlayerBodyMesh}, sounds::PlaySound, - utils::{billboards::Billboard, sprite_3d_animation::AnimationTimer}, + utils::{billboards::Billboard, commands::IsServer, sprite_3d_animation::AnimationTimer}, }; use bevy::{pbr::NotShadowCaster, prelude::*}; use bevy_sprite3d::{Sprite3dBuilder, Sprite3dParams}; pub use healing::Healing; use healing::HealingStateChanged; +use lightyear::{ + connection::client::ClientState, + prelude::{Client, input::native::ActionState}, +}; use serde::{Deserialize, Serialize}; -#[derive(Event, Reflect)] -pub enum TriggerState { - Active, - Inactive, -} - -#[derive(Event, Reflect)] -pub struct TriggerCashHeal; - #[derive(Debug, Copy, Clone, PartialEq, Reflect, Default, Serialize, Deserialize)] pub enum HeadAbility { #[default] @@ -117,22 +113,34 @@ pub fn plugin(app: &mut App) { Update, (update, update_heal_ability).run_if(in_state(GameState::Playing)), ); + app.add_systems( + FixedUpdate, + on_trigger_state.run_if(in_state(GameState::Playing)), + ); - global_observer!(app, on_trigger_state); global_observer!(app, build_explosion_sprite); } fn on_trigger_state( - trigger: Trigger, mut res: ResMut, - player_head: Single<&ActiveHead, With>, + player: Query<(&ActiveHead, &ActionState), With>, headdb: Res, time: Res