Godot_Bouncy_Ball_Prototype/Ball/ball_test.gd

50 lines
1.5 KiB
GDScript3
Raw Normal View History

2023-09-05 00:28:09 +00:00
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()