Browse Source

tutorials/physics/ray-casting: Update missing v4 fixes (#6439)

Amaral Krichman 2 years ago
parent
commit
0ac2031972
1 changed files with 25 additions and 18 deletions
  1. 25 18
      tutorials/physics/ray-casting.rst

+ 25 - 18
tutorials/physics/ray-casting.rst

@@ -87,13 +87,13 @@ And in 3D:
  .. code-tab:: gdscript GDScript
 
     func _physics_process(delta):
-        var space_state = get_world().direct_space_state
+        var space_state = get_world_3d().direct_space_state
 
  .. code-tab:: csharp
 
     public override void _PhysicsProcess(float delta)
     {
-        var spaceState = GetWorld().DirectSpaceState;
+        var spaceState = GetWorld3d().DirectSpaceState;
     }
 
 Raycast query
@@ -109,7 +109,8 @@ may be used. For example:
     func _physics_process(delta):
         var space_state = get_world_2d().direct_space_state
         # use global coordinates, not local to node
-        var result = space_state.intersect_ray(Vector2(0, 0), Vector2(50, 100))
+        var query = PhysicsRayQueryParameters2D.create(Vector2(0, 0), Vector2(50, 100))
+        var result = space_state.intersect_ray(query)
 
  .. code-tab:: csharp
 
@@ -117,7 +118,8 @@ may be used. For example:
     {
         var spaceState = GetWorld2d().DirectSpaceState;
         // use global coordinates, not local to node
-        var result = spaceState.IntersectRay(new Vector2(), new Vector2(50, 100));
+        var query = PhysicsRayQueryParameters2D.create(new Vector2(), new Vector2(50, 100));
+        var result = spaceState.IntersectRay(query);
     }
 
 The result is a dictionary. If the ray didn't hit anything, the dictionary will
@@ -161,10 +163,9 @@ as shown in the following image:
 
 .. image:: img/raycast_falsepositive.png
 
-To avoid self-intersection, the ``intersect_ray()`` function can take an
-optional third parameter which is an array of exceptions. This is an
-example of how to use it from a CharacterBody2D or any other
-collision object node:
+To avoid self-intersection, the ``intersect_ray()`` parameters object can take an
+array of exceptions via its ``exclude`` property. This is an example of how to use it 
+from a CharacterBody2D or any other collision object node:
 
 .. tabs::
  .. code-tab:: gdscript GDScript
@@ -173,7 +174,9 @@ collision object node:
 
     func _physics_process(delta):
         var space_state = get_world_2d().direct_space_state
-        var result = space_state.intersect_ray(global_position, enemy_position, [self])
+        var query = PhysicsRayQueryParameters2D.create(global_position, enemy_position)
+        query.exclude = [self]
+        var result = space_state.intersect_ray(query)
 
  .. code-tab:: csharp
 
@@ -182,7 +185,9 @@ collision object node:
         public override void _PhysicsProcess(float delta)
         {
             var spaceState = GetWorld2d().DirectSpaceState;
-            var result = spaceState.IntersectRay(globalPosition, enemyPosition, new Godot.Collections.Array { this });
+            var query = PhysicsRayQueryParameters2D.create(globalPosition, enemyPosition);
+            query.Exclude = new Godot.Collections.Array { this };
+            var result = spaceState.IntersectRay(query);
         }
     }
 
@@ -195,9 +200,9 @@ While the exceptions method works fine for excluding the parent body, it becomes
 very inconvenient if you need a large and/or dynamic list of exceptions. In
 this case, it is much more efficient to use the collision layer/mask system.
 
-The optional fourth argument for ``intersect_ray()`` is a collision mask. For
-example, to use the same mask as the parent body, use the ``collision_mask``
-member variable:
+The ``intersect_ray()`` parameters object can also be supplied a collision mask.
+For example, to use the same mask as the parent body, use the ``collision_mask``
+member variable. The array of exceptions can be supplied as the last argument as well:
 
 .. tabs::
  .. code-tab:: gdscript GDScript
@@ -205,9 +210,10 @@ member variable:
     extends CharacterBody2D
 
     func _physics_process(delta):
-        var space_state = get_world().direct_space_state
-        var result = space_state.intersect_ray(global_position, enemy_position,
-                                [self], collision_mask)
+        var space_state = get_world_2d().direct_space_state
+        var query = PhysicsRayQueryParameters2D.create(global_position, enemy_position, 
+            collision_mask, [self]) 
+        var result = space_state.intersect_ray(query)
 
  .. code-tab:: csharp
 
@@ -216,8 +222,9 @@ member variable:
         public override void _PhysicsProcess(float delta)
         {
             var spaceState = GetWorld2d().DirectSpaceState;
-            var result = spaceState.IntersectRay(globalPosition, enemyPosition,
-                            new Godot.Collections.Array { this }, CollisionMask);
+            var query = PhysicsRayQueryParameters2D.create(globalPosition, enemyPosition,
+                CollisionMask, new Godot.Collections.Array { this });
+            var result = spaceState.IntersectRay(query);
         }
     }