* 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>
38 lines
1.2 KiB
Rust
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();
|
|
}
|
|
}
|