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.init_resource::<CameraState>();
|
||||||
app.add_systems(OnEnter(GameState::Playing), startup);
|
app.add_systems(OnEnter(GameState::Playing), startup);
|
||||||
app.add_systems(
|
app.add_systems(
|
||||||
PreUpdate,
|
RunFixedMainLoop,
|
||||||
(update, update_ui, update_look_around, rotate_view).run_if(in_state(GameState::Playing)),
|
(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,
|
movement_factor: MovementSpeedFactor,
|
||||||
collision_events: CollisionEventsEnabled,
|
collision_events: CollisionEventsEnabled,
|
||||||
movement_config: MovementConfig,
|
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)]
|
#[derive(Bundle)]
|
||||||
@@ -183,25 +207,3 @@ const FLYING_MOVEMENT_CONFIG: MovementConfig = MovementConfig {
|
|||||||
deceleration_factor: 0.0,
|
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