blob: 31d5230ee1985700f52cd6343ef837c7adcd37f6 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
# Hurry Curry! - a game about cooking
# Copyright 2024 tpart
# Copyright 2024 nokoe
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, version 3 of the License only.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
extends Node3D
class_name Character
const DEFAULT_MAIN_MESH = preload("res://player/character/default/main.res")
const CUSTOMER_MAIN_MESH = preload("res://player/character/customer_body.res")
const ROBOT_MAIN_MESH = preload("res://player/character/robot/body.res")
const WALK_ANIM_STRENGTH := 0.05
const WALK_ANIM_SPEED:= 15.0
var walking := false
var holding := false
var boosting := false
var was_boosting := boosting
var current_animation := "idle"
@onready var hand_animations = $HandAnimations
@onready var main = $Main
@onready var default_height = main.position.y
@onready var main_height_target = default_height
@onready var walking_particles = $Walking
@onready var boosting_particles = $Boosting
@onready var username_tag = $Username
@onready var tie = $Main/Tie
@onready var hairstyles := {
"Brown": $Main/HeadDefault/Hair,
"Blond": $Main/HeadDefault/Hair2,
"E. Parsley": $Main/HeadDefault/Hair3
}
@onready var head_default: MeshInstance3D = $Main/HeadDefault
@onready var head_robot: MeshInstance3D = $Main/HeadRobot
@onready var step_sounds: PlayRandom = $Steps
@onready var boost_sounds: PlayRandom = $Boosts
func _ready():
play_animation("idle")
var t := 0.0
func _process(delta):
if walking:
t += delta
main_height_target = default_height + sin(t * WALK_ANIM_SPEED) * WALK_ANIM_STRENGTH
else:
t = 0
main.position.y = main_height_target
# Update animation:
var next_animation: String
if holding:
next_animation = "hold"
elif walking:
next_animation = "walk"
else:
next_animation = "idle"
walking_particles.emitting = walking
if boosting and walking and not was_boosting:
boosting_particles.emitting = true
boost_sounds.play_random()
else:
boosting_particles.emitting = false
was_boosting = boosting and walking
if current_animation != next_animation:
play_animation(next_animation)
func select_hairstyle(id: int):
if id == 51:
toggle_robot(true)
return
if id < 0:
to_customer()
id *= -1
var hairstyle_count = hairstyles.keys().size()
id = id % hairstyle_count
var target = hairstyles.keys()[id]
for k in hairstyles.keys():
if k == target:
hairstyles[k].show()
else:
hairstyles[k].hide()
func to_customer():
main.mesh = CUSTOMER_MAIN_MESH
tie.queue_free()
func toggle_robot(b: bool):
if b:
head_robot.show()
head_default.hide()
main.mesh = ROBOT_MAIN_MESH
else:
head_robot.hide()
head_default.show()
main.mesh = DEFAULT_MAIN_MESH
func play_animation(name_: String):
current_animation = name_
hand_animations.play(name_)
if name_ == "walk":
step_sounds.start_autoplay()
else:
step_sounds.stop_autoplay()
func _on_hand_animations_animation_finished(_name):
hand_animations.play(current_animation)
|