35 lines
1.1 KiB
GDScript
35 lines
1.1 KiB
GDScript
extends Area2D
|
|
class_name DatawhaleHonorBoard
|
|
|
|
const RANKING_PANEL_SCENE: PackedScene = preload("res://scenes/ui/datawhale_honor_ranking_panel.tscn")
|
|
const RANKING_PANEL_NAME: String = "DatawhaleHonorRankingPanel"
|
|
const INTERACTION_COLLISION_LAYER: int = 2
|
|
const InteractionAnchorUtil = preload("res://_Core/utils/InteractionAnchor.gd")
|
|
|
|
func _ready() -> void:
|
|
collision_layer = INTERACTION_COLLISION_LAYER
|
|
collision_mask = 0
|
|
add_to_group("whaletown_interactable")
|
|
|
|
func get_interaction_actions(player: Node2D) -> Array[Dictionary]:
|
|
var anchor_position: Vector2 = InteractionAnchorUtil.get_position(self)
|
|
var distance: float = anchor_position.distance_to(player.global_position)
|
|
if distance > 150.0:
|
|
return []
|
|
return [{
|
|
"id": "honor_board:%s" % get_instance_id(),
|
|
"title": "查看荣誉榜",
|
|
"distance": distance,
|
|
"priority": 35,
|
|
"callback": Callable(self, "interact"),
|
|
}]
|
|
|
|
func interact() -> void:
|
|
var root: Window = get_tree().root
|
|
if root.has_node(RANKING_PANEL_NAME):
|
|
return
|
|
|
|
var panel := RANKING_PANEL_SCENE.instantiate()
|
|
panel.name = RANKING_PANEL_NAME
|
|
root.add_child(panel)
|