diff options
Diffstat (limited to 'client/player/character/character.gd')
| -rw-r--r-- | client/player/character/character.gd | 76 |
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_ |