Fix character controller jitter (#43)
* fix jitter while moving character controller * added transform interpolation to character controller
This commit is contained in:
@@ -48,8 +48,10 @@ pub fn plugin(app: &mut App) {
|
||||
app.init_resource::<CameraState>();
|
||||
app.add_systems(OnEnter(GameState::Playing), startup);
|
||||
app.add_systems(
|
||||
PreUpdate,
|
||||
(update, update_ui, update_look_around, rotate_view).run_if(in_state(GameState::Playing)),
|
||||
RunFixedMainLoop,
|
||||
(update, update_ui, update_look_around, rotate_view)
|
||||
.after(RunFixedMainLoopSystem::AfterFixedMainLoop)
|
||||
.run_if(in_state(GameState::Playing)),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -125,6 +125,30 @@ pub struct CharacterControllerBundle {
|
||||
movement_factor: MovementSpeedFactor,
|
||||
collision_events: CollisionEventsEnabled,
|
||||
movement_config: MovementConfig,
|
||||
interpolation: TransformInterpolation,
|
||||
}
|
||||
|
||||
impl CharacterControllerBundle {
|
||||
pub fn new(collider: Collider, controls: HeadControls) -> Self {
|
||||
// Create shape caster as a slightly smaller version of collider
|
||||
let mut caster_shape = collider.clone();
|
||||
caster_shape.set_scale(Vector::ONE * 0.98, 10);
|
||||
|
||||
let config = match controls {
|
||||
HeadControls::Plane => FLYING_MOVEMENT_CONFIG,
|
||||
HeadControls::Walk => RUNNING_MOVEMENT_CONFIG,
|
||||
};
|
||||
|
||||
Self {
|
||||
character_controller: Character { up: Dir3::Y },
|
||||
collider,
|
||||
move_input: MoveInput::default(),
|
||||
movement_factor: MovementSpeedFactor(1.0),
|
||||
collision_events: CollisionEventsEnabled,
|
||||
movement_config: config,
|
||||
interpolation: TransformInterpolation,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Bundle)]
|
||||
@@ -183,25 +207,3 @@ const FLYING_MOVEMENT_CONFIG: MovementConfig = MovementConfig {
|
||||
deceleration_factor: 0.0,
|
||||
},
|
||||
};
|
||||
|
||||
impl CharacterControllerBundle {
|
||||
pub fn new(collider: Collider, controls: HeadControls) -> Self {
|
||||
// Create shape caster as a slightly smaller version of collider
|
||||
let mut caster_shape = collider.clone();
|
||||
caster_shape.set_scale(Vector::ONE * 0.98, 10);
|
||||
|
||||
let config = match controls {
|
||||
HeadControls::Plane => FLYING_MOVEMENT_CONFIG,
|
||||
HeadControls::Walk => RUNNING_MOVEMENT_CONFIG,
|
||||
};
|
||||
|
||||
Self {
|
||||
character_controller: Character { up: Dir3::Y },
|
||||
collider,
|
||||
move_input: MoveInput::default(),
|
||||
movement_factor: MovementSpeedFactor(1.0),
|
||||
collision_events: CollisionEventsEnabled,
|
||||
movement_config: config,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user