pass velocity to server move evt

This commit is contained in:
griffi-gh 2024-02-17 14:45:30 +01:00
parent f3a844bf55
commit 14e9cb32f7
2 changed files with 140 additions and 136 deletions

View file

@ -2,8 +2,7 @@ use shipyard::{Component, View, ViewMut, EntitiesViewMut, IntoIter, track};
use glam::{IVec3, Quat, Vec3}; use glam::{IVec3, Quat, Vec3};
use kubi_shared::block::Block; use kubi_shared::block::Block;
use crate::{ use crate::{
player::MainPlayer, client_physics::ClPhysicsActor, player::MainPlayer, transform::Transform
transform::Transform
}; };
use super::EventComponent; use super::EventComponent;
@ -11,6 +10,8 @@ use super::EventComponent;
pub enum PlayerActionEvent { pub enum PlayerActionEvent {
PositionChanged { PositionChanged {
position: Vec3, position: Vec3,
//XXX: should this even be here?
velocity: Vec3,
direction: Quat direction: Quat
}, },
UpdatedBlock { UpdatedBlock {
@ -22,14 +23,17 @@ pub enum PlayerActionEvent {
pub fn generate_move_events( pub fn generate_move_events(
transforms: View<Transform, track::All>, transforms: View<Transform, track::All>,
player: View<MainPlayer>, player: View<MainPlayer>,
actors: View<ClPhysicsActor>,
mut entities: EntitiesViewMut, mut entities: EntitiesViewMut,
mut events: ViewMut<EventComponent>, mut events: ViewMut<EventComponent>,
mut actions: ViewMut<PlayerActionEvent>, mut actions: ViewMut<PlayerActionEvent>,
) { ) {
let Some((_, transform)) = (&player, transforms.inserted_or_modified()).iter().next() else { return }; let Some((_, transform, actor)) = (&player, transforms.inserted_or_modified(), &actors).iter().next() else { return };
let (_, direction, position) = transform.0.to_scale_rotation_translation(); let (_, direction, position) = transform.0.to_scale_rotation_translation();
//HACK: if the actor is disabled, the velocity is irrelevant, so we just set it to zero.
let velocity = if actor.disable { Vec3::ZERO } else { actor.velocity };
entities.add_entity( entities.add_entity(
(&mut events, &mut actions), (&mut events, &mut actions),
(EventComponent, PlayerActionEvent::PositionChanged { position, direction }) (EventComponent, PlayerActionEvent::PositionChanged { position, velocity, direction })
); );
} }

View file

@ -26,13 +26,13 @@ pub fn send_player_movement_events(
mut client: UniqueViewMut<UdpClient>, mut client: UniqueViewMut<UdpClient>,
) { ) {
for event in actions.iter() { for event in actions.iter() {
let PlayerActionEvent::PositionChanged { position, direction } = event else { let PlayerActionEvent::PositionChanged { position, velocity, direction } = event else {
continue continue
}; };
client.0.send( client.0.send(
postcard::to_allocvec(&ClientToServerMessage::PositionChanged { postcard::to_allocvec(&ClientToServerMessage::PositionChanged {
position: *position, position: *position,
velocity: Vec3::ZERO, velocity: *velocity,
direction: *direction direction: *direction
}).unwrap().into_boxed_slice(), }).unwrap().into_boxed_slice(),
Channel::Move as usize, Channel::Move as usize,