feat: add battlepass slider and quest list tabs to lobby HUD
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
extends Panel
|
||||
|
||||
const DIP_DURATION := 0.36
|
||||
|
||||
@onready var _tickets: Array = get_children().filter(func(c): return c is TextureRect)
|
||||
|
||||
var _current_index := 0
|
||||
var _tween: Tween
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
for i in _tickets.size():
|
||||
_tickets[i].visible = (i == 0)
|
||||
_tickets[i].modulate.a = 1.0
|
||||
|
||||
|
||||
func show_index(index: int, animate: bool = true) -> void:
|
||||
if index < 0 or index >= _tickets.size() or index == _current_index:
|
||||
return
|
||||
|
||||
var from_ticket: TextureRect = _tickets[_current_index]
|
||||
var to_ticket: TextureRect = _tickets[index]
|
||||
|
||||
if not animate:
|
||||
from_ticket.visible = false
|
||||
to_ticket.visible = true
|
||||
to_ticket.modulate.a = 1.0
|
||||
_current_index = index
|
||||
return
|
||||
|
||||
if _tween:
|
||||
_tween.kill()
|
||||
|
||||
var from_mat: ShaderMaterial = from_ticket.material
|
||||
var to_mat: ShaderMaterial = to_ticket.material
|
||||
|
||||
_tween = create_tween()
|
||||
_tween.set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN)
|
||||
if from_mat:
|
||||
_tween.tween_method(func(v): from_mat.set_shader_parameter("blur_amount", v), 0.0, 1.0, DIP_DURATION * 0.5)
|
||||
_tween.parallel().tween_property(from_ticket, "modulate:a", 0.0, DIP_DURATION * 0.5)
|
||||
|
||||
_tween.tween_callback(func():
|
||||
from_ticket.visible = false
|
||||
to_ticket.modulate.a = 0.0
|
||||
to_ticket.visible = true
|
||||
_current_index = index
|
||||
)
|
||||
|
||||
_tween.set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_OUT)
|
||||
if to_mat:
|
||||
_tween.tween_method(func(v): to_mat.set_shader_parameter("blur_amount", v), 1.0, 0.0, DIP_DURATION * 0.5)
|
||||
_tween.parallel().tween_property(to_ticket, "modulate:a", 1.0, DIP_DURATION * 0.5)
|
||||
Reference in New Issue
Block a user