mat_maker_gd/material_maker/widgets/render_counter/render_counter.gd

52 lines
1.8 KiB
GDScript

extends Control
var last_value : int = 0
var start_time : int = 0
var max_render_queue_size : int = 0
func _ready() -> void:
for i in range(8):
$PopupMenu.add_radio_check_item("%d renderer%s" % [ i+1, "s" if i > 0 else "" ], i)
$PopupMenu.set_item_checked(mm_renderer.max_renderers-1, true)
func on_counter_change(count : int, pending : int) -> void:
if count == 0 and pending == 0:
$ProgressBar.max_value = 1
$ProgressBar.value = 1
$ProgressBar/Label.text = ""
start_time = OS.get_ticks_msec()
else:
if count > last_value:
if $ProgressBar.value == $ProgressBar.max_value:
$ProgressBar.value = 0
max_render_queue_size = 1
else:
max_render_queue_size += 1
else:
$ProgressBar.value += 1
assert(max_render_queue_size-$ProgressBar.value == count)
$ProgressBar.max_value = max_render_queue_size + pending
if $ProgressBar.value > 0:
var remaining_time_msec = (OS.get_ticks_msec()-start_time)*(count+pending)/$ProgressBar.value
$ProgressBar/Label.text = "%d/%d - %d s" % [ $ProgressBar.value, $ProgressBar.max_value, remaining_time_msec/1000 ]
else:
$ProgressBar/Label.text = "%d/%d - ? s" % [ $ProgressBar.value, $ProgressBar.max_value ]
last_value = count
func _process(_delta):
$FpsCounter.text = "%.1f FPS " % Performance.get_monitor(Performance.TIME_FPS)
func _on_PopupMenu_id_pressed(id):
$PopupMenu.set_item_checked(mm_renderer.max_renderers-1, false)
mm_renderer.max_renderers = id+1
$PopupMenu.set_item_checked(mm_renderer.max_renderers-1, true)
func _on_RenderCounter_gui_input(event):
if event is InputEventMouseButton and event.button_index == BUTTON_RIGHT and event.pressed:
$PopupMenu.rect_global_position = get_global_mouse_position()
$PopupMenu.popup()
func _on_Render_toggled(button_pressed):
mm_renderer.enable_renderers(button_pressed)