aboutsummaryrefslogtreecommitdiff
path: root/client/player
diff options
context:
space:
mode:
authortpart <tpart120@proton.me>2025-06-03 22:25:32 +0200
committertpart <tpart120@proton.me>2025-06-03 22:25:37 +0200
commita2c2f9c84ba43c218556926b0f6650318e701d68 (patch)
tree3251dd8004a83c6e3e219cc616a819eea64372f8 /client/player
parent29772d6b2f244c6c172347c5e96530a16ca4517d (diff)
downloadhurrycurry-a2c2f9c84ba43c218556926b0f6650318e701d68.tar
hurrycurry-a2c2f9c84ba43c218556926b0f6650318e701d68.tar.bz2
hurrycurry-a2c2f9c84ba43c218556926b0f6650318e701d68.tar.zst
Support new character style system
Diffstat (limited to 'client/player')
-rw-r--r--client/player/character/character.gd63
-rw-r--r--client/player/player.gd20
2 files changed, 31 insertions, 52 deletions
diff --git a/client/player/character/character.gd b/client/player/character/character.gd
index 938c7c45..8479af2c 100644
--- a/client/player/character/character.gd
+++ b/client/player/character/character.gd
@@ -23,12 +23,6 @@ const CUSTOMER_MAIN_MESH = preload("res://player/character/customer_body.res")
const WALK_ANIM_STRENGTH := 0.05
const WALK_ANIM_SPEED:= 15.0
-enum CharacterKind {
- PERSON,
- BOT,
- TRAM
-}
-
var walking := false
var holding := false
var boosting := false
@@ -39,6 +33,7 @@ var current_animation := "idle"
@onready var hand_animations = $HandAnimations
@onready var main = $Main
+@onready var tram = $Tram
@onready var default_height = main.position.y
@onready var main_height_target = default_height
@onready var walking_particles = $Walking
@@ -48,8 +43,9 @@ var current_animation := "idle"
@onready var knife = $Main/HandRight/Knife
@onready var cat_ears: CatEars = $Main/HeadDefault/CatEars
-const NUM_COLORS = 5;
-const NUM_HAIRS = 3;
+const NUM_COLORS = 5
+const NUM_HAIRS = 3
+const NUM_HEADWEARS = 2
@onready var hairstyles := [$Main/HeadDefault/Hair, $Main/HeadDefault/Hair2, $Main/HeadDefault/Hair3]
const COLORS: Array[Color] = [
Color(0.204, 0.361, 0.624),
@@ -65,26 +61,6 @@ const COLORS: Array[Color] = [
@onready var step_sounds: PlayRandom = $Steps
@onready var boost_sounds: PlayRandom = $Boosts
-class ParsedStyle:
- var color: int
- var hair: int
- var kind: CharacterKind = CharacterKind.PERSON
- var customer: bool
- var cat_ears: bool
- func _init(n: int) -> void:
- customer = n < 0
- if customer: n *= -1
- if n == 51: kind = CharacterKind.BOT
- elif n == 52: kind = CharacterKind.TRAM
- else:
- hair = n % NUM_HAIRS
- color = n / NUM_HAIRS % NUM_COLORS
- cat_ears = floor(n / 4) % 2 == 0
- func pack() -> int:
- if CharacterKind.BOT: return 51
- elif CharacterKind.TRAM: return 52
- return (hair + color * NUM_HAIRS) * (-1 if customer else 1)
-
func _ready():
play_animation("idle")
@@ -117,22 +93,23 @@ func _process(delta):
boosting_particles.emitting = false
was_boosting = boosting and walking
-func set_style(id: int):
- var p := ParsedStyle.new(id)
- main.mesh = CUSTOMER_MAIN_MESH if p.customer else DEFAULT_MAIN_MESH
- if p.customer:
- tie.queue_free()
- head_robot.visible = p.kind == CharacterKind.BOT
- head_default.visible = p.kind == CharacterKind.PERSON
- $Main.visible = not p.kind == CharacterKind.TRAM
- $Tram.visible = p.kind == CharacterKind.TRAM
- cat_ears.visible = p.cat_ears
+func set_style(style: Dictionary, character_class: String):
+ var is_human := character_class == "customer" || character_class == "chef"
+
+ main.mesh = CUSTOMER_MAIN_MESH if character_class == "customer" else DEFAULT_MAIN_MESH
+ tie.visible = character_class != "customer"
+ head_robot.visible = character_class == "bot"
+ head_default.visible = is_human
+ main.visible = character_class != "tram"
+ tram.visible = character_class == "tram"
+ cat_ears.visible = style.headwear == 1
for h in hairstyles: h.hide()
- hairstyles[p.hair].show()
- $Main.get_active_material(0).albedo_color = Color(0.349, 0.349, 0.349) if p.kind == CharacterKind.BOT else COLORS[p.color]
- if p.cat_ears:
- cat_ears.set_inner_mat($Main.get_active_material(0))
- cat_ears.set_outer_mat(hairstyles[p.hair].get_active_material(0))
+ var my_hairstyle = hairstyles[G.rem_euclid(style.hairstyle, NUM_HAIRS)]
+ 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))
func play_animation(name_: String):
current_animation = name_
diff --git a/client/player/player.gd b/client/player/player.gd
index 031cba29..b483c31d 100644
--- a/client/player/player.gd
+++ b/client/player/player.gd
@@ -43,7 +43,8 @@ var clear_timer: Timer = Timer.new()
var hand = [null, null]
var hand_base
-var character_idx: int
+var character_style: Dictionary
+var player_class: String
var is_customer: bool
var current_item_message = null
@@ -53,15 +54,15 @@ const DEFAULT_HAND_BASE_POSITION_CENTER: Vector3 = Vector3(0, .425, .4)
const DEFAULT_HAND_BASE_POSITION_LEFT: Vector3 = Vector3(.3, .425, .4)
const DEFAULT_HAND_BASE_POSITION_RIGHT: Vector3 = Vector3(-.3, .425, .4)
-func _init(_id: int, new_name: String, pos: Vector2, new_character_idx: int, new_game: Game):
+func _init(_id: int, name_: String, pos: Vector2, character_style: Dictionary, player_class: String, game: Game):
add_child(movement_base)
movement_base.add_child(character)
position_ = pos
position_anim = pos
- if new_name != "":
- name = new_name
- game = new_game
- username = new_name
+ if name_ != "":
+ name = name_
+ self.game = game
+ username = name_
if game.hand_count == 1:
var center = Node3D.new()
@@ -89,13 +90,14 @@ func _init(_id: int, new_name: String, pos: Vector2, new_character_idx: int, new
marker.visible = false
add_child(marker)
- character_idx = new_character_idx
- is_customer = character_idx < 0
+ self.character_style = character_style
+ self.player_class = player_class
+ is_customer = player_class == "customer"
movement_base.scale = Vector3.ONE * 0.0001
func _ready():
- character.set_style(character_idx)
+ character.set_style(character_style, player_class)
clear_timer.timeout.connect(clear_message)
Settings.hook_changed_init("gameplay.usernames", false, update_username_tag)