Files
HEDZReloaded/crates/shared/src/platforms.rs
PROMETHIA-27 b83e506a4d Bevy 0.17 Migration Final PR (#76)
* Get bevy 0.17 compiling and running (#72)

* get bevy 0.17 compiling and running

* try to fix CI breaking from const assertion for client/server features

* fix `bin` -> `lib` for `shared` in CI

* typo

* fix some collider issues (#73)

* Physics/controller improvements (#74)

* trying to fix physics prediction

* fixed prediction desync

* substantial controller improvements

* Finish off main bevy 0.17 migration (#75)

* fix lookdir issues
- airplane moving backwards
- player model facing backwards
- camera was technically backwards the whole time, and player models were facing the right way; camera is now facing forwards
- firing without a target now respects lookdir

* fix aim targeting

* migrate to bevy_trenchbroom 0.10 crates release

* fixed colliders not being adjusted out of worldspace

* predict platforms to stop constant rollbacks while riding them

* fix key/head drop visuals not working

* Fix key/head drop random initial force

* fixed static head drops duplicating

* fix platform velocity inheritance

* fix thrown projectiles not autorotating

* fix inconsistent explosion animations

* update avian3d to 0.4.1

* fix controller snapping to fixed angle upon switching heads

* clean up commented code

* fix broken physics positions

* Clean comments, fix warnings (#77)

* clean comments, fix warnings

* fix missing import

* steamworks 162 libs

* fix mouselook

---------

Co-authored-by: extrawurst <mail@rusticorn.com>
2025-11-15 09:16:38 -05:00

38 lines
1.2 KiB
Rust

use crate::GameState;
use avian3d::prelude::{LinearVelocity, Position};
use bevy::{math::ops::sin, prelude::*};
use lightyear::prelude::LocalTimeline;
use serde::{Deserialize, Serialize};
#[derive(Component, Reflect, Default, Debug, Serialize, Deserialize, PartialEq)]
#[reflect(Component)]
pub struct ActivePlatform {
pub start: Vec3,
pub target: Vec3,
}
pub fn plugin(app: &mut App) {
app.register_type::<ActivePlatform>();
app.add_systems(
FixedUpdate,
move_active.run_if(in_state(GameState::Playing)),
);
}
fn move_active(
#[cfg(not(feature = "server"))] time: Single<&LocalTimeline>,
#[cfg(feature = "server")] time: Single<&LocalTimeline, With<lightyear::prelude::Server>>,
bevy_time: Res<Time<Fixed>>,
mut platforms: Query<(&Position, &ActivePlatform, &mut LinearVelocity)>,
) {
for (position, active, mut velocity) in platforms.iter_mut() {
let now = time.now.as_duration(bevy_time.delta()).as_secs_f32();
let t = (sin(now * 0.4) + 1.) / 2.;
let target = active.start.lerp(active.target, t);
let prev = position.0;
velocity.0 = (target - prev) / bevy_time.delta_secs();
}
}