aboutsummaryrefslogtreecommitdiff
path: root/client/player/character/character.gd
diff options
context:
space:
mode:
Diffstat (limited to 'client/player/character/character.gd')
-rw-r--r--client/player/character/character.gd76
1 files changed, 42 insertions, 34 deletions
diff --git a/client/player/character/character.gd b/client/player/character/character.gd
index ca8954c1..9cf63d33 100644
--- a/client/player/character/character.gd
+++ b/client/player/character/character.gd
@@ -23,6 +23,15 @@ const CUSTOMER_MAIN_MESH = preload("res://player/character/customer_body.res")
const WALK_ANIM_STRENGTH := 0.05
const WALK_ANIM_SPEED:= 15.0
+const BOT_COLOR := Color(0.349, 0.349, 0.349)
+const COLORS: Array[Color] = [
+ Color(0.204, 0.361, 0.624),
+ Color(0.568, 0.256, 0.602),
+ Color(0.575, 0.341, 0.117),
+ Color(0.3, 0.455, 0.221),
+ Color(0.101, 0.452, 0.521)
+]
+
var walking := false
var holding := false
var boosting := false
@@ -31,6 +40,22 @@ var was_boosting := boosting
var current_animation := "idle"
+var hairstyles: Array[Mesh]= [
+ preload("res://player/character/hairstyles/hair_1.res"),
+ preload("res://player/character/hairstyles/hair_2.res"),
+ preload("res://player/character/hairstyles/hair_3.res"),
+ ]
+
+var headwears: Array[PackedScene]= [
+ null,
+ preload("res://player/character/headwear/cat_ears.tscn"),
+ preload("res://player/character/headwear/propeller_hat.tscn"),
+ preload("res://player/character/headwear/devil_horns.tscn"),
+ ]
+
+@onready var headwear_parent: Node3D = $Main/HeadDefault/Headwear
+@onready var hair_mesh: MeshInstance3D = $Main/HeadDefault/HairMesh
+
@onready var hand_animations = $HandAnimations
@onready var main = $Main
@onready var tram = $Tram
@@ -41,21 +66,6 @@ var current_animation := "idle"
@onready var username_tag = $Username
@onready var tie = $Main/Tie
@onready var knife = $Main/HandRight/Knife
-@onready var cat_ears: CatEars = $Main/HeadDefault/CatEars
-@onready var propeller_hat = $Main/HeadDefault/PropellerHat
-@onready var devil_horns = $Main/HeadDefault/DevilHorns
-
-const NUM_COLORS = 5
-const NUM_HAIRS = 3
-const NUM_HEADWEARS = 4
-@onready var hairstyles := [$Main/HeadDefault/Hair, $Main/HeadDefault/Hair2, $Main/HeadDefault/Hair3]
-const COLORS: Array[Color] = [
- Color(0.204, 0.361, 0.624),
- Color(0.568, 0.256, 0.602),
- Color(0.575, 0.341, 0.117),
- Color(0.3, 0.455, 0.221),
- Color(0.101, 0.452, 0.521)
-]
@onready var head_default: MeshInstance3D = $Main/HeadDefault
@onready var head_robot: MeshInstance3D = $Main/HeadRobot
@@ -66,15 +76,7 @@ const COLORS: Array[Color] = [
func _ready():
play_animation("idle")
-var t := 0.0
func _process(delta):
- t += delta
- if walking:
- main_height_target = default_height + sin(t * WALK_ANIM_SPEED) * WALK_ANIM_STRENGTH
- cat_ears.ear_target = sin(t * WALK_ANIM_SPEED) * 0.075
- else:
- t = 0
- cat_ears.ear_target = 0.
main.position.y = G.interpolate(main.position.y, main_height_target, delta * 10.)
# Update animation:
@@ -96,6 +98,9 @@ func _process(delta):
was_boosting = boosting and walking
func set_style(style: Dictionary, character_class: String):
+ var hairstyle_idx := G.rem_euclid(style.hairstyle, hairstyles.size())
+ var headwear_idx := G.rem_euclid(style.headwear, headwears.size())
+
var is_human := character_class == "customer" || character_class == "chef"
main.mesh = CUSTOMER_MAIN_MESH if character_class == "customer" else DEFAULT_MAIN_MESH
@@ -104,17 +109,20 @@ func set_style(style: Dictionary, character_class: String):
head_default.visible = is_human
main.visible = character_class != "tram"
tram.visible = character_class == "tram"
- propeller_hat.visible = style.headwear == 1
- cat_ears.visible = style.headwear == 2
- devil_horns.visible = style.headwear == 3
- for h in hairstyles: h.hide()
- var my_hairstyle = hairstyles[G.rem_euclid(style.hairstyle, NUM_HAIRS)]
- if style.headwear != 1: # Propeller hat has no hair
- my_hairstyle.show()
- main.get_active_material(0).albedo_color = Color(0.349, 0.349, 0.349) if character_class == "bot" else COLORS[G.rem_euclid(style.color, NUM_COLORS)]
- if cat_ears.visible:
- cat_ears.set_inner_mat(main.get_active_material(0))
- cat_ears.set_outer_mat(my_hairstyle.get_active_material(0))
+
+ # Hairstyle
+ hair_mesh.mesh = hairstyles[hairstyle_idx]
+ hair_mesh.visible = headwear_idx != 2
+
+ # Headwear
+ for n in headwear_parent.get_children():
+ n.queue_free() # Remove previous headwear
+ var headwear := headwears[headwear_idx]
+ if headwear != null:
+ headwear_parent.add_child(headwear.instantiate())
+
+ # Torso color
+ main.get_active_material(0).albedo_color = BOT_COLOR if character_class == "bot" else COLORS[G.rem_euclid(style.color, COLORS.size())]
func play_animation(name_: String):
current_animation = name_