50 lines
1.5 KiB
GDScript
50 lines
1.5 KiB
GDScript
extends RigidBody3D
|
|
|
|
@onready var mesh = $BallMesh
|
|
@onready var body = $BallBody
|
|
@onready var body_anchor = $AnchorBody
|
|
|
|
@export var speed : float
|
|
@export var gravity : Vector3
|
|
@export var stiffness : float
|
|
|
|
var previous_collision_normal_array = []
|
|
var normalize_velocity = true
|
|
var previous_travel : Vector3
|
|
|
|
func _ready():
|
|
body.add_collision_exception_with(body_anchor)
|
|
body_anchor.add_collision_exception_with(body)
|
|
linear_velocity = linear_velocity.normalized() * speed
|
|
# Engine.time_scale = 1
|
|
|
|
func _physics_process(delta):
|
|
if global_position.length() >= 100:
|
|
print("a")
|
|
queue_free()
|
|
var collision : KinematicCollision3D = body.move_and_collide(linear_velocity * delta, true)
|
|
if collision:
|
|
var collision_position = collision.get_position()
|
|
$TestMesh.global_position = collision_position
|
|
mesh.look_at($TestMesh.global_position, Vector3.UP)
|
|
if collision.get_collider().owner.is_in_group("balls"):
|
|
mesh.scale.z = (global_position - collision.get_collider().global_position).length()
|
|
else:
|
|
mesh.scale.z = (collision_position - global_position).length() * 2
|
|
mesh.scale.x = 1.5 - mesh.scale.z / 2
|
|
mesh.scale.y = 1.5 - mesh.scale.z / 2
|
|
# var current_travel = collision.get_travel().normalized()
|
|
# linear_velocity += current_travel * pow(speed, 2) * delta
|
|
# normalize_velocity = false
|
|
else:
|
|
mesh.scale = Vector3.ONE
|
|
linear_velocity = linear_velocity.normalized() * speed
|
|
constant_force = gravity + (body_anchor.global_position - global_position) * 10 * pow(speed, 2)
|
|
body_anchor.velocity = linear_velocity
|
|
body_anchor.move_and_slide()
|
|
|
|
|
|
|
|
|
|
|