60 lines
1.8 KiB
GDScript
60 lines
1.8 KiB
GDScript
extends CanvasLayer
|
|
|
|
const logitem2_proto := preload("./log_item.tscn")
|
|
|
|
const MAX_LOGS = 10
|
|
|
|
var prev_log = ""
|
|
|
|
@export var named_container:VBoxContainer
|
|
@export var unnamed_container:VBoxContainer
|
|
|
|
# logs whose id >= 0
|
|
var named_logs := {}
|
|
|
|
func _ready():
|
|
$ResidentLogs.size = get_viewport().size * 0.5
|
|
|
|
func add_log(bbcode:String, id:=-1):
|
|
# logs whose id>=0 will be fixed to the bottom of the log list
|
|
# useful for loop print
|
|
# you can use `get_instance_id()` as logs's unique id
|
|
if id >= 0:
|
|
if !named_logs.has(id):
|
|
var new_node = logitem2_proto.instantiate()
|
|
new_node.amount_panel.hide()
|
|
new_node.life = 1.0
|
|
new_node.get_node("ColorRect").color = Color("#23aaf277")
|
|
named_container.add_child(new_node)
|
|
named_container.move_child(new_node, 0)
|
|
named_logs[id] = new_node
|
|
new_node.tree_exiting.connect(
|
|
func():
|
|
named_logs.erase(id)
|
|
)
|
|
var log_node = named_logs[id]
|
|
named_logs[id].content_label.text = bbcode
|
|
log_node.play_lifespan_animation()
|
|
return
|
|
|
|
#see the new log if can be combined with previous one
|
|
if prev_log == bbcode and unnamed_container.get_child_count() > 0:
|
|
var prev_node = unnamed_container.get_child(unnamed_container.get_child_count() - 1)
|
|
prev_node.amount += 1
|
|
prev_node.amount_label.text = "x" + str(prev_node.amount)
|
|
prev_node.amount_panel.show()
|
|
prev_node.play_lifespan_animation()
|
|
#create new log node
|
|
else:
|
|
if unnamed_container.get_child_count() >= MAX_LOGS:
|
|
unnamed_container.get_child(0).fade_out()
|
|
if get_tree():
|
|
var new_node = logitem2_proto.instantiate()
|
|
new_node.content_label.text = bbcode
|
|
new_node.amount_panel.hide()
|
|
new_node.get_node("ColorRect").color = Color(0.0, 0.75, 0.0, 0.5)
|
|
await get_tree().process_frame
|
|
unnamed_container.add_child(new_node)
|
|
|
|
prev_log = bbcode
|