funnymemellama/Commentary.gd

84 lines
1.8 KiB
GDScript3
Raw Permalink Normal View History

2023-09-29 17:10:29 -04:00
extends StaticBody3D
@onready
var _audio = $AudioStreamPlayer
@onready
var _koob = $Koob
2023-09-29 17:10:29 -04:00
# Exports
@export_category('Commentary')
@export_subgroup('Sound')
@export
2023-09-29 17:10:29 -04:00
var sound: AudioStream = null :
get:
return $AudioStreamPlayer.stream
2023-09-29 17:10:29 -04:00
set(value):
$AudioStreamPlayer.stream = value
2023-09-29 17:10:29 -04:00
@export_range(-80, 80, 1, "suffix:dB")
var volume = 0.0 :
get:
return $AudioStreamPlayer.volume_db
2023-09-29 17:10:29 -04:00
set(value):
$AudioStreamPlayer.volume_db = value
2023-09-29 17:10:29 -04:00
@export_subgroup('Range')
@export_range(0, 100, 1, "suffix:m")
var capture_radius = 10.0
@export_range(0, 100, 1, "suffix:rad/s")
var low_speed = 1.0
2023-09-29 17:10:29 -04:00
@export_range(0, 100, 1, "suffix:rad/s")
var high_speed = 10.0
@export
var pre = 1.0
@export
var post = 1.0
2023-09-29 17:10:29 -04:00
# Member variables
var _original_color = null
func _ready():
_audio.stream = sound
_audio.volume_db = volume
_audio.finished.connect(_on_finished_playing)
2023-09-29 17:10:29 -04:00
# Make sure we have a unique material
# TODO: Why the fuck do I have to do this!?
# Isn't that the whole point of the "Make Unique"
_koob.material = _koob.material.duplicate()
func _process(delta):
var players = get_tree().get_nodes_in_group("Players")
var shortest_distance = capture_radius
for player in players:
var player_dist = self.position.distance_to(player.position)
shortest_distance = min(shortest_distance, player_dist)
var weight = (capture_radius - shortest_distance) / capture_radius
var spin_speed = cubic_interpolate(low_speed, high_speed, pre, post, weight)
self.rotate_y(spin_speed * delta)
2023-09-29 17:10:29 -04:00
func interact(other):
if _audio.playing:
2023-09-29 17:10:29 -04:00
return
_original_color = _koob.material.albedo_color
2023-09-29 17:10:29 -04:00
var random_color = Color(randf(), randf(), randf())
_koob.material.albedo_color = random_color
2023-09-29 17:10:29 -04:00
_audio.play()
2023-09-29 17:10:29 -04:00
func _on_finished_playing():
if _original_color:
_koob.material.albedo_color = _original_color