35 lines
891 B
GDScript
35 lines
891 B
GDScript
extends Control
|
|
|
|
var bus
|
|
|
|
func assign_bus(_bus):
|
|
self.bus = _bus
|
|
|
|
func _process(_delta):
|
|
queue_redraw()
|
|
|
|
func _draw():
|
|
if bus == null:
|
|
return
|
|
|
|
var meter_ui = bus.ui.get_node("VBox/HBox/Meter/HBox")
|
|
var pos = meter_ui.global_position - global_position
|
|
var _size = meter_ui.size
|
|
|
|
# Draw db-markings
|
|
var db_mark_color = Color(1.0, 1.0, 1.0, 0.03)
|
|
for i in 12:
|
|
draw_db_mark(pos, _size, i * -6, db_mark_color)
|
|
|
|
# Draw max-peak line
|
|
draw_db_mark(pos, _size, bus.max_peak, Color(0.1, 0.8, 0.1, normalize_peak(bus.max_peak)))
|
|
|
|
func draw_db_mark(pos, _size, db, color):
|
|
var db_norm = 1 - normalize_peak(db)
|
|
var y_offset = Vector2(0, db_norm * _size.y)
|
|
draw_line(pos + y_offset, pos + y_offset + Vector2(_size.x, 0), color)
|
|
|
|
# Takes a peak in db, and spits out a normalized 0 to 1 value
|
|
func normalize_peak(peak_db):
|
|
var p = (peak_db + 200) / 200.0
|
|
return p * p * p * p * p * p
|