feat: character actor velocity is now applied only when on the floor
This commit is contained in:
parent
d3b9e54b0b
commit
56f0e3bc87
|
@ -34,9 +34,9 @@ void CharacterActor::_process(double delta_time) { GDGAMEONLY();
|
||||||
void CharacterActor::_physics_process(double delta_time) { GDGAMEONLY();
|
void CharacterActor::_physics_process(double delta_time) { GDGAMEONLY();
|
||||||
// accelerate towards velocity target
|
// accelerate towards velocity target
|
||||||
Vector3 const new_velocity = this->get_velocity().move_toward(this->velocity_target, delta_time * CharacterActor::ACCELERATION);
|
Vector3 const new_velocity = this->get_velocity().move_toward(this->velocity_target, delta_time * CharacterActor::ACCELERATION);
|
||||||
// only apply velocity if not grounded
|
Vector3 const gravity{Vector3{0.f, this->get_velocity().y - 9.8f, 0.f}};
|
||||||
Vector3 const gravity{this->is_on_floor() ? Vector3() : Vector3{0.f, this->get_velocity().y - 9.8f, 0.f}};
|
// apply either gravity or walking velocity depending on results
|
||||||
this->set_velocity(new_velocity + gravity);
|
this->set_velocity(this->is_on_floor() ? new_velocity : this->get_velocity() + gravity);
|
||||||
// update position
|
// update position
|
||||||
this->move_and_slide();
|
this->move_and_slide();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue