diff options
Diffstat (limited to 'client/player/player.gd')
-rw-r--r-- | client/player/player.gd | 66 |
1 files changed, 46 insertions, 20 deletions
diff --git a/client/player/player.gd b/client/player/player.gd index 1b17191b..624400db 100644 --- a/client/player/player.gd +++ b/client/player/player.gd @@ -16,6 +16,10 @@ class_name Player extends Node3D +const CHAT_BUBBLE: PackedScene = preload("res://player/chat_bubble.tscn") +const ITEM_BUBBLE: PackedScene = preload("res://player/item_bubble.tscn") +const EFFECT: PackedScene = preload("res://player/particles/effect.tscn") + const PLAYER_SIZE: float = 0.4 const SPEED: float = 25. @@ -32,12 +36,14 @@ var username: String var movement_base: Node3D = Node3D.new() var character: Character = preload("res://player/character/character.tscn").instantiate() -var chat_bubble: ChatBubble = preload("res://player/chat_bubble.tscn").instantiate() -var item_bubble: ItemBubble = preload("res://player/item_bubble.tscn").instantiate() -var effect: Effect = preload("res://player/particles/effect.tscn").instantiate() +var chat_bubble: ChatBubble = null +var item_bubble: ItemBubble = null +var effect: Effect = null var marker: Marker = preload("res://player/marker/marker.tscn").instantiate() -var clear_timer: Timer = Timer.new() +var clear_chat_timer: Timer = Timer.new() +var clear_item_timer: Timer = Timer.new() +var clear_effect_timer: Timer = Timer.new() var is_despawning: bool = false @@ -87,12 +93,13 @@ func _init(_id: int, name_: String, pos: Vector2, character_style_: Dictionary, for h in hand_base: movement_base.add_child(h) - movement_base.add_child(chat_bubble) - movement_base.add_child(item_bubble) - movement_base.add_child(effect) - - clear_timer.one_shot = true - add_child(clear_timer) + clear_chat_timer.one_shot = true + clear_item_timer.one_shot = true + clear_effect_timer.one_shot = true + add_child(clear_chat_timer) + add_child(clear_item_timer) + add_child(clear_effect_timer) + marker.visible = false add_child(marker) @@ -103,7 +110,10 @@ func _init(_id: int, name_: String, pos: Vector2, character_style_: Dictionary, func _ready(): character.set_style(character_style, player_class) - clear_timer.timeout.connect(clear_message) + + clear_chat_timer.timeout.connect(clear_text_message) + clear_item_timer.timeout.connect(clear_item_message) + clear_effect_timer.timeout.connect(clear_effect) Settings.hook_changed_init("gameplay.usernames", "main", update_username_tag) @@ -176,21 +186,37 @@ func _process(delta): else: movement_base.scale = Vector3.ONE * G.interpolate(movement_base.scale.x, 1, delta * 8) -func clear_message(): - item_bubble.remove_item() - chat_bubble.remove_text() - effect.clear_effect() - current_item_message = null - func item_message(item_name: String, timeout_initial: float, timeout_remaining: float): + if item_bubble != null: + item_bubble.queue_free() + item_bubble = ITEM_BUBBLE.instantiate() + movement_base.add_child(item_bubble) item_bubble.set_item(item_name, timeout_initial, timeout_remaining) - clear_timer.start(timeout_remaining) + clear_item_timer.start(timeout_remaining) current_item_message = item_name +func clear_item_message(): + current_item_message = null + item_bubble.queue_free() + func text_message(message: Game.TextMessage): + if chat_bubble != null: + chat_bubble.queue_free() + chat_bubble = CHAT_BUBBLE.instantiate() + movement_base.add_child(chat_bubble) chat_bubble.set_text(message.text) - clear_timer.start(message.timeout_remaining) + clear_chat_timer.start(message.timeout_remaining) + +func clear_text_message(): + chat_bubble.queue_free() func effect_message(effect_name: String): + if effect != null: + effect.queue_free() + effect = EFFECT.instantiate() + movement_base.add_child(effect) effect.set_effect(effect_name) - clear_timer.start(5) + clear_effect_timer.start(5) + +func clear_effect(): + effect.queue_free() |