hurrmmm/godot/physics/billiard.gd

36 lines
910 B
GDScript

extends RigidBody3D
class_name Billiard
@export var power_min := 0.01
@export var power_max := 5.0
var can_hit = true
var can_hit_history := Dictionary()
func _ready():
can_hit_history[0] = can_hit
TAS_System.FrameIncremented.connect(frame_inc)
TAS_System.FramesAdvanced.connect(frames_change)
TAS_System.FramesRegressed.connect(frames_change)
TAS_System.FramesReset.connect(frames_reset)
func frame_inc(frame: int):
can_hit_history[frame] = can_hit
func frames_change(_start: int, end: int):
can_hit = can_hit_history[end]
func frames_reset():
can_hit_history = Dictionary()
can_hit_history[0] = can_hit
func hit(impulse: Vector3, power: float):
apply_central_impulse(impulse * lerp(power_min, power_max, power))
func _on_body_shape_entered(_body_rid, body, _body_shape_index, _local_shape_index):
if body is Billiard:
ControllerEventBus.billiard_touched_billiard.emit(self, body)