|
@@ -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)
|