42 lines
1.2 KiB
GDScript
42 lines
1.2 KiB
GDScript
class_name BallsBase extends Node3D
|
|
|
|
|
|
@onready var bodies: Node3D = $bodies
|
|
|
|
@onready var ball_sounds: AudioStreamPlayer = $ball_sounds
|
|
@onready var white_ball_marker: Marker3D = $white_ball_marker
|
|
@onready var white_ball: RigidBody3D = $bodies/white_ball
|
|
|
|
@export var ball_mass: float = 0.17
|
|
|
|
@export var min_speed: float = 0.0008
|
|
@export var max_speed: float = 0.5
|
|
|
|
@export var min_pitch: float = 0.6 # slower = deeper
|
|
@export var max_pitch: float = 1.6 # faster = higher
|
|
|
|
@export var min_volume_db: float = -30.0 # slower = quiet
|
|
@export var max_volume_db: float = 0.0 # faster = loud
|
|
|
|
var balls_moving: bool = false
|
|
|
|
func _set_ball_physics(ball: RigidBody3D) -> void:
|
|
var phy_mat = PhysicsMaterial.new()
|
|
|
|
phy_mat.set_bounce(0.90)
|
|
phy_mat.set_friction(0.12)
|
|
phy_mat.set_rough(false)
|
|
|
|
ball.set_physics_material_override(phy_mat)
|
|
|
|
ball.axis_lock_linear_y = true
|
|
ball.set_mass(ball_mass)
|
|
ball.set_linear_damp(2.04)
|
|
ball.set_angular_damp(1.44)
|
|
ball.set_use_continuous_collision_detection(true)
|
|
|
|
ball.body_entered.connect(_on__ball_body_entered)
|
|
|
|
func _on__ball_body_entered(_ball: Node) -> void:
|
|
assert(false, "This method needs to be overridden...")
|