diff options
Diffstat (limited to 'demos/3d')
-rw-r--r-- | demos/3d/kinematic_char/follow_camera.gd | 25 | ||||
-rw-r--r-- | demos/3d/platformer/follow_camera.gd | 5 |
2 files changed, 5 insertions, 25 deletions
diff --git a/demos/3d/kinematic_char/follow_camera.gd b/demos/3d/kinematic_char/follow_camera.gd index 60eef5787a..cf7172d7bb 100644 --- a/demos/3d/kinematic_char/follow_camera.gd +++ b/demos/3d/kinematic_char/follow_camera.gd @@ -24,7 +24,7 @@ func _fixed_process(dt): #regular delta follow #check ranges - + if (delta.length() < min_distance): delta = delta.normalized() * min_distance elif (delta.length() > max_distance): @@ -36,29 +36,6 @@ func _fixed_process(dt): if ( delta.y < min_height): delta.y = min_height - #check autoturn - - var ds = PhysicsServer.space_get_direct_state( get_world().get_space() ) - - - var col_left = ds.intersect_ray(target,target+Matrix3(up,deg2rad(autoturn_ray_aperture)).xform(delta),collision_exception) - var col = ds.intersect_ray(target,target,collision_exception) - var col_right = ds.intersect_ray(target,target+Matrix3(up,deg2rad(-autoturn_ray_aperture)).xform(delta),collision_exception) - - if (!col.empty()): - #if main ray was occluded, get camera closer, this is the worst case scenario - delta = col.position - target - elif (!col_left.empty() and col_right.empty()): - #if only left ray is occluded, turn the camera around to the right - delta = Matrix3(up,deg2rad(-dt*autoturn_speed)).xform(delta) - elif (col_left.empty() and !col_right.empty()): - #if only right ray is occluded, turn the camera around to the left - delta = Matrix3(up,deg2rad(dt*autoturn_speed)).xform(delta) - else: - #do nothing otherwise, left and right are occluded but center is not, so do not autoturn - pass - - #apply lookat pos = target + delta look_at_from_pos(pos,target,up) diff --git a/demos/3d/platformer/follow_camera.gd b/demos/3d/platformer/follow_camera.gd index 60eef5787a..3d18327df0 100644 --- a/demos/3d/platformer/follow_camera.gd +++ b/demos/3d/platformer/follow_camera.gd @@ -42,7 +42,7 @@ func _fixed_process(dt): var col_left = ds.intersect_ray(target,target+Matrix3(up,deg2rad(autoturn_ray_aperture)).xform(delta),collision_exception) - var col = ds.intersect_ray(target,target,collision_exception) + var col = ds.intersect_ray(target,target+delta,collision_exception) var col_right = ds.intersect_ray(target,target+Matrix3(up,deg2rad(-autoturn_ray_aperture)).xform(delta),collision_exception) if (!col.empty()): @@ -59,6 +59,9 @@ func _fixed_process(dt): pass #apply lookat + if (delta==Vector3()): + delta = (pos - target).normalized() * 0.0001 + pos = target + delta look_at_from_pos(pos,target,up) |