fix: bug with player Basis getting weird when stopping
+ some tweaks to the camera
This commit is contained in:
parent
39dfc96222
commit
4f525b2b16
|
@ -30,9 +30,10 @@ void StandingState::physics_process(double delta) {
|
||||||
}
|
}
|
||||||
|
|
||||||
PlayerState::StateID RunningState::get_next_state() const {
|
PlayerState::StateID RunningState::get_next_state() const {
|
||||||
|
Vector3 const velocity{this->get_body()->get_velocity()};
|
||||||
if(!this->get_body()->is_on_floor()) {
|
if(!this->get_body()->is_on_floor()) {
|
||||||
return FallingState::get_class_static();
|
return FallingState::get_class_static();
|
||||||
} else if(this->get_body()->get_velocity().is_zero_approx()) {
|
} else if(Vector2{velocity.x, velocity.z}.is_zero_approx()) {
|
||||||
return StandingState::get_class_static();
|
return StandingState::get_class_static();
|
||||||
} else if(Input::get_singleton()->is_action_just_pressed(PlayerBody::split_step_action) && this->get_body()->get_velocity().length() > this->get_body()->get_min_step_speed()) {
|
} else if(Input::get_singleton()->is_action_just_pressed(PlayerBody::split_step_action) && this->get_body()->get_velocity().length() > this->get_body()->get_min_step_speed()) {
|
||||||
return SplitStepState::get_class_static();
|
return SplitStepState::get_class_static();
|
||||||
|
@ -46,8 +47,8 @@ void RunningState::state_entered() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void RunningState::process(double delta) {
|
void RunningState::process(double delta) {
|
||||||
if(!this->get_body()->get_velocity().is_zero_approx()) {
|
Vector3 const current{this->get_body()->get_velocity()};
|
||||||
Vector3 const current{this->get_body()->get_velocity()};
|
if(!current.is_zero_approx()) {
|
||||||
Vector3 const cross{Vector3{0.f, 1.f, 0.f}.cross(current).normalized()};
|
Vector3 const cross{Vector3{0.f, 1.f, 0.f}.cross(current).normalized()};
|
||||||
Vector3 const desired_direction{this->get_body()->get_desired_direction()};
|
Vector3 const desired_direction{this->get_body()->get_desired_direction()};
|
||||||
this->lean_modifier = Math::move_toward(
|
this->lean_modifier = Math::move_toward(
|
||||||
|
@ -55,8 +56,11 @@ void RunningState::process(double delta) {
|
||||||
cross.dot(desired_direction) * this->get_body()->get_model_lean(),
|
cross.dot(desired_direction) * this->get_body()->get_model_lean(),
|
||||||
float(this->get_body()->get_model_lean_speed() * delta)
|
float(this->get_body()->get_model_lean_speed() * delta)
|
||||||
);
|
);
|
||||||
Vector3 up{Vector3{0.0, 1.0, 0.0} + cross * this->lean_modifier};
|
Vector3 const up{Vector3{0.0, 1.0, 0.0} + Vector3{cross.x, 0.f, cross.y} * this->lean_modifier};
|
||||||
this->get_body()->get_model()->look_at(this->get_body()->get_global_position() - current, up);
|
Vector3 const forward{current.x, 0.f, current.z};
|
||||||
|
if(!forward.is_zero_approx()) {
|
||||||
|
this->get_body()->get_model()->look_at(this->get_body()->get_global_position() - current, up);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -75,7 +79,11 @@ void RunningState::physics_process(double delta) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void RunningState::state_exited() {
|
void RunningState::state_exited() {
|
||||||
this->get_body()->get_model()->look_at(this->get_body()->get_global_position() - this->get_body()->get_velocity());
|
Vector3 const velocity{this->get_body()->get_velocity()};
|
||||||
|
Vector3 const velocity_flat{velocity.x, 0.f, velocity.z};
|
||||||
|
if(!velocity_flat.is_zero_approx()) {
|
||||||
|
this->get_body()->get_model()->look_at(this->get_body()->get_global_position() - velocity_flat);
|
||||||
|
}
|
||||||
this->lean_modifier = 0.f;
|
this->lean_modifier = 0.f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ height = 2.15448
|
||||||
[sub_resource type="GDScript" id="GDScript_eqqp1"]
|
[sub_resource type="GDScript" id="GDScript_eqqp1"]
|
||||||
script/source = "extends Camera3D
|
script/source = "extends Camera3D
|
||||||
@export var dist : float = 2.0
|
@export var dist : float = 2.0
|
||||||
@export var pivot_height : float = 3.0
|
@export var pivot_height : float = 1.0
|
||||||
@export var look_target_height : float = 1.0
|
@export var look_target_height : float = 1.0
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
|
@ -23,8 +23,7 @@ func _process(_delta):
|
||||||
|
|
||||||
[node name="Player" type="PlayerBody"]
|
[node name="Player" type="PlayerBody"]
|
||||||
wall_min_slide_angle = 0.785398
|
wall_min_slide_angle = 0.785398
|
||||||
floor_max_angle = 0.968658
|
floor_max_angle = 0.460767
|
||||||
floor_snap_length = 1.5
|
|
||||||
|
|
||||||
[node name="PlayerStateMachine" type="PlayerStateMachine" parent="."]
|
[node name="PlayerStateMachine" type="PlayerStateMachine" parent="."]
|
||||||
|
|
||||||
|
@ -36,8 +35,8 @@ shape = SubResource("CapsuleShape3D_bxedw")
|
||||||
transform = Transform3D(-1, -6.18173e-08, -6.18173e-08, -6.71313e-08, 0.99594, 0.0900246, 5.60012e-08, 0.0900246, -0.99594, 3.76484e-07, 1.43409, -2.96511)
|
transform = Transform3D(-1, -6.18173e-08, -6.18173e-08, -6.71313e-08, 0.99594, 0.0900246, 5.60012e-08, 0.0900246, -0.99594, 3.76484e-07, 1.43409, -2.96511)
|
||||||
fov = 100.0
|
fov = 100.0
|
||||||
script = SubResource("GDScript_eqqp1")
|
script = SubResource("GDScript_eqqp1")
|
||||||
dist = 1.5
|
dist = 1.75
|
||||||
pivot_height = 2.5
|
pivot_height = 2.0
|
||||||
look_target_height = 1.5
|
look_target_height = 1.5
|
||||||
|
|
||||||
[node name="character" parent="." instance=ExtResource("1_eqqp1")]
|
[node name="character" parent="." instance=ExtResource("1_eqqp1")]
|
||||||
|
|
Loading…
Reference in a new issue