mirror of
https://github.com/godotengine/godot-demo-projects.git
synced 2026-01-04 15:00:09 +01:00
Additional 3D physics tests - RigidBody impact and ground check (#619)
Co-authored-by: Camille Mohr-Daurat <pouleyKetchoup@gmail.com>
This commit is contained in:
committed by
GitHub
parent
4ef90a836a
commit
08be1b7f03
47
3d/physics_tests/utils/rigidbody_ground_check.gd
Normal file
47
3d/physics_tests/utils/rigidbody_ground_check.gd
Normal file
@@ -0,0 +1,47 @@
|
||||
extends RigidBody
|
||||
|
||||
|
||||
onready var _forward = - transform.basis.z
|
||||
onready var _collision_shape = $CollisionShape
|
||||
onready var _material = $CollisionShape/MeshInstance.get_surface_material(0)
|
||||
|
||||
var _dir = 1.0
|
||||
var _distance = 10.0
|
||||
var _walk_spd = 100.0
|
||||
var _acceleration = 22.0
|
||||
var _gravity_impulse = 30.0
|
||||
var _is_on_floor = false
|
||||
|
||||
|
||||
func _process(_delta):
|
||||
if _is_on_floor:
|
||||
_material.albedo_color = Color.white
|
||||
else:
|
||||
_material.albedo_color = Color.red
|
||||
|
||||
|
||||
func _integrate_forces(state):
|
||||
var delta = state.step
|
||||
var velocity = (_forward * _dir * _walk_spd * delta) + (state.linear_velocity * Vector3.UP)
|
||||
state.linear_velocity = state.linear_velocity.move_toward(velocity, _acceleration * delta)
|
||||
|
||||
if state.transform.origin.z < -_distance:
|
||||
_dir = -1
|
||||
if state.transform.origin.z > _distance:
|
||||
_dir = 1
|
||||
|
||||
ground_check()
|
||||
|
||||
|
||||
func ground_check():
|
||||
var space_state = get_world().direct_space_state
|
||||
var shape = PhysicsShapeQueryParameters.new()
|
||||
shape.transform = _collision_shape.global_transform
|
||||
shape.shape_rid = _collision_shape.shape.get_rid()
|
||||
shape.collision_mask = 2
|
||||
var result = space_state.get_rest_info(shape)
|
||||
if result:
|
||||
_is_on_floor = true
|
||||
else:
|
||||
_is_on_floor = false
|
||||
|
||||
@@ -47,7 +47,8 @@ func _physics_process(delta):
|
||||
world_delta = camera_basis * world_delta
|
||||
|
||||
var camera_dist = camera.global_transform.origin.distance_to(global_transform.origin)
|
||||
world_delta *= CAMERA_DISTANCE_COEFFICIENT * camera_dist
|
||||
var fov_coefficient = camera.fov / 70.0
|
||||
world_delta *= CAMERA_DISTANCE_COEFFICIENT * camera_dist * fov_coefficient
|
||||
|
||||
if mode == MODE_STATIC:
|
||||
global_transform.origin += world_delta
|
||||
|
||||
Reference in New Issue
Block a user