diff options
| author | tpart <tpart120@proton.me> | 2025-06-03 22:25:32 +0200 |
|---|---|---|
| committer | tpart <tpart120@proton.me> | 2025-06-03 22:25:37 +0200 |
| commit | a2c2f9c84ba43c218556926b0f6650318e701d68 (patch) | |
| tree | 3251dd8004a83c6e3e219cc616a819eea64372f8 /client/player | |
| parent | 29772d6b2f244c6c172347c5e96530a16ca4517d (diff) | |
| download | hurrycurry-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.gd | 63 | ||||
| -rw-r--r-- | client/player/player.gd | 20 |
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) |