|
@@ -236,25 +236,25 @@ With this code, if no collisions occurred on a given frame, the loop won't run.
|
|
.. code-tab:: gdscript GDScript
|
|
.. code-tab:: gdscript GDScript
|
|
|
|
|
|
func _physics_process(delta):
|
|
func _physics_process(delta):
|
|
- #...
|
|
|
|
-
|
|
|
|
- # Iterate through all collisions that occurred this frame
|
|
|
|
- for index in range(get_slide_collision_count()):
|
|
|
|
- # We get one of the collisions with the player
|
|
|
|
- var collision = get_slide_collision(index)
|
|
|
|
-
|
|
|
|
- # If the collision is with ground
|
|
|
|
- if collision.get_collider() == null:
|
|
|
|
- continue
|
|
|
|
-
|
|
|
|
- # If the collider is with a mob
|
|
|
|
- if collision.get_collider().is_in_group("mob"):
|
|
|
|
- var mob = collision.get_collider()
|
|
|
|
- # we check that we are hitting it from above.
|
|
|
|
- if Vector3.UP.dot(collision.get_normal()) > 0.1:
|
|
|
|
- # If so, we squash it and bounce.
|
|
|
|
- mob.squash()
|
|
|
|
- target_velocity.y = bounce_impulse
|
|
|
|
|
|
+ #...
|
|
|
|
+
|
|
|
|
+ # Iterate through all collisions that occurred this frame
|
|
|
|
+ for index in range(get_slide_collision_count()):
|
|
|
|
+ # We get one of the collisions with the player
|
|
|
|
+ var collision = get_slide_collision(index)
|
|
|
|
+
|
|
|
|
+ # If the collision is with ground
|
|
|
|
+ if collision.get_collider() == null:
|
|
|
|
+ continue
|
|
|
|
+
|
|
|
|
+ # If the collider is with a mob
|
|
|
|
+ if collision.get_collider().is_in_group("mob"):
|
|
|
|
+ var mob = collision.get_collider()
|
|
|
|
+ # we check that we are hitting it from above.
|
|
|
|
+ if Vector3.UP.dot(collision.get_normal()) > 0.1:
|
|
|
|
+ # If so, we squash it and bounce.
|
|
|
|
+ mob.squash()
|
|
|
|
+ target_velocity.y = bounce_impulse
|
|
|
|
|
|
.. code-tab:: csharp
|
|
.. code-tab:: csharp
|
|
|
|
|