#3 - add small collisions handling
This commit is contained in:
parent
f39c3d1ff6
commit
a271baa8ee
2 changed files with 32 additions and 18 deletions
|
@ -10,11 +10,12 @@ const SPEED_WALK_STRAFE = 2.5
|
|||
const SPEED_WALK_DOWN_STRAFE = 0.6
|
||||
const SPEED_WALK_DOWN = 0.8
|
||||
|
||||
const SPEED_RUN_UP = SPEED_WALK_UP * 2.0
|
||||
const SPEED_RUN_UP_STRAFE = SPEED_WALK_UP_STRAFE * 2.0
|
||||
const SPEED_RUN_STRAFE = SPEED_WALK_STRAFE * 2.0
|
||||
const SPEED_RUN_DOWN_STRAFE = SPEED_WALK_DOWN_STRAFE * 2.0
|
||||
const SPEED_RUN_DOWN = SPEED_WALK_DOWN * 2.0
|
||||
const DIFF_RUN_WALK = 2.0
|
||||
const SPEED_RUN_UP = SPEED_WALK_UP * DIFF_RUN_WALK
|
||||
const SPEED_RUN_UP_STRAFE = SPEED_WALK_UP_STRAFE * DIFF_RUN_WALK
|
||||
const SPEED_RUN_STRAFE = SPEED_WALK_STRAFE * DIFF_RUN_WALK
|
||||
const SPEED_RUN_DOWN_STRAFE = SPEED_WALK_DOWN_STRAFE * DIFF_RUN_WALK
|
||||
const SPEED_RUN_DOWN = SPEED_WALK_DOWN * DIFF_RUN_WALK
|
||||
|
||||
const ZOOM_STEP_Y = 0.05
|
||||
const ZOOM_STEP_Z = 0.1
|
||||
|
@ -24,12 +25,13 @@ const ZOOM_MAX_Z = 3.0
|
|||
const SPEED_ROTATE = PI
|
||||
const PI_2 = PI / 2.0
|
||||
const JUMP_FORCE = 4.5
|
||||
const STEP_FORCE = 30.0
|
||||
const STEP_FORCE = 50.0
|
||||
|
||||
const MUL_SPEED_FLY = 2.0
|
||||
const MUL_SPEED_SWIM = 0.5
|
||||
const FACTOR_WALK_WATER = 0.3
|
||||
const MUL_SPEED_STEP = 0.4
|
||||
const MUL_SPEED_STEP = 0.2
|
||||
const SPEED_COLLIDED = 0.0001
|
||||
|
||||
# Get the gravity from the project settings to be synced with RigidDynamicBody nodes.
|
||||
var gravity = ProjectSettings.get_setting("physics/3d/default_gravity")
|
||||
|
@ -83,7 +85,9 @@ var state_player:StatePlayer = StatePlayer.WALK
|
|||
var level_water:float
|
||||
var heigh_underwater = 1.0
|
||||
var stop_move:bool = false
|
||||
var max_collided_speed = 0.0
|
||||
@onready var camera_fps:Camera3D = $camera_root/Camera3D_FPS_WALK
|
||||
@onready var height_step:Vector3 = $RayCastStep.get_position() - $RayCastGround.get_position()
|
||||
|
||||
|
||||
func switch_state(new_state):
|
||||
|
@ -294,7 +298,6 @@ func _physics_process_walk(delta):
|
|||
var move_up:bool = false
|
||||
var move_down:bool = false
|
||||
var move_strafe: bool = false
|
||||
#var step: bool = false
|
||||
var mulstep: float = 1.0
|
||||
|
||||
#print(get_position())
|
||||
|
@ -402,12 +405,6 @@ func _physics_process_walk(delta):
|
|||
switch_animation(anim_sitting_ground_idle)
|
||||
else:
|
||||
switch_animation(anim_idle)
|
||||
if is_on_floor() and (input_x != 0.0 or input_y != 0.0) and $RayCastGround.is_colliding() and !$RayCastStep.is_colliding():
|
||||
motion_velocity.y = STEP_FORCE
|
||||
move_and_slide()
|
||||
motion_velocity.y = -STEP_FORCE
|
||||
#step = true
|
||||
mulstep = MUL_SPEED_STEP
|
||||
|
||||
var direction = (transform.basis * Vector3(input_x, 0, input_y)).normalized()
|
||||
if direction:
|
||||
|
@ -417,10 +414,27 @@ func _physics_process_walk(delta):
|
|||
motion_velocity.x = move_toward(motion_velocity.x, 0, speed * mulstep)
|
||||
motion_velocity.z = move_toward(motion_velocity.z, 0, speed * mulstep)
|
||||
|
||||
#print(">>> motion_velocity:", motion_velocity, " position:", get_position())
|
||||
var save_motion_velocity:Vector3 = motion_velocity
|
||||
|
||||
var collided = move_and_slide()
|
||||
if collided:
|
||||
print("+++++++++++: ", get_last_slide_collision().get_position(), " <> ", get_position())
|
||||
|
||||
if collided and is_on_floor() and (input_x != 0.0 or input_y != 0.0) and $RayCastGround.is_colliding() and !$RayCastStep.is_colliding():
|
||||
var delta_1:Vector3 = get_position_delta()
|
||||
var areawalk = delta_1.x * delta_1.x + delta_1.z * delta_1.z
|
||||
if (areawalk * 10.0 < max_collided_speed) or (is_run and (areawalk * 10.0 < max_collided_speed * DIFF_RUN_WALK )):
|
||||
var jump_step:Vector3 = height_step
|
||||
translate(jump_step)
|
||||
motion_velocity = save_motion_velocity - delta_1 # (save_motion_velocity - delta_1) * MUL_SPEED_STEP
|
||||
move_and_slide()
|
||||
motion_velocity.x = 0.0
|
||||
motion_velocity.y = -STEP_FORCE
|
||||
motion_velocity.z = 0.0
|
||||
collided = move_and_slide()
|
||||
else:
|
||||
var delta_1:Vector3 = get_position_delta()
|
||||
var areawalk = (delta_1.x * delta_1.x + delta_1.z * delta_1.z) / speed
|
||||
if !is_run and max_collided_speed < areawalk:
|
||||
max_collided_speed = areawalk
|
||||
|
||||
|
||||
func _physics_process_walk_water(delta):
|
||||
|
|
|
@ -85,4 +85,4 @@ visible = false
|
|||
mesh = SubResource( "PlaneMesh_p36im" )
|
||||
|
||||
[node name="RayCastStep" type="RayCast3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 0, 1, 0, -0.3, 0, 0, 0.4, 0)
|
||||
transform = Transform3D(1, 0, 0, 0, 0, 1, 0, -0.4, 0, 0, 0.4, 0)
|
||||
|
|
Loading…
Reference in a new issue