Files
Billiards/scenes/individual_parts/balls/balls_base.gd

48 lines
1.4 KiB
GDScript3
Raw Permalink Normal View History

2026-08-07 02:50:54 -05:00
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
2026-08-07 02:50:54 -05:00
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
2026-08-07 02:50:54 -05:00
ball.set_mass(ball_mass)
ball.set_linear_damp(2.04)
ball.set_angular_damp(1.44)
2026-08-07 02:50:54 -05:00
ball.set_use_continuous_collision_detection(true)
ball.contact_monitor = true
# NOTE: How many balls can surround a single ball,
# therefor worst case is 6 collisions. (think start of game)
ball.max_contacts_reported = 6
2026-08-07 02:50:54 -05:00
ball.body_entered.connect(_on__ball_body_entered)
func _on__ball_body_entered(_ball: Node) -> void:
assert(false, "This method needs to be overridden...")