aboutsummaryrefslogtreecommitdiff
path: root/client/player/player.gd
diff options
context:
space:
mode:
Diffstat (limited to 'client/player/player.gd')
-rw-r--r--client/player/player.gd66
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()