Skip to content

Commit ac36fec

Browse files
committed
Cat minigame progress
1 parent da497a4 commit ac36fec

File tree

2 files changed

+136
-65
lines changed

2 files changed

+136
-65
lines changed

scenes/catsim/cat_sim.tscn

Lines changed: 41 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
[gd_scene load_steps=13 format=3 uid="uid://coy8ycn8wwfvl"]
1+
[gd_scene load_steps=16 format=3 uid="uid://coy8ycn8wwfvl"]
22

33
[ext_resource type="Script" path="res://scripts/Cat.gd" id="1_jus8a"]
44
[ext_resource type="TileSet" uid="uid://jidy50o2532o" path="res://resources/room.tres" id="2_yp0iu"]
5+
[ext_resource type="Texture2D" uid="uid://vc5s7247a5rc" path="res://assets/textures/catsim/empty_bowl.png" id="4_718wf"]
56
[ext_resource type="PackedScene" uid="uid://cndlh00l1npxt" path="res://scenes/catsim/statbar.tscn" id="4_kofum"]
67
[ext_resource type="PackedScene" uid="uid://bbu3xsdp51vud" path="res://scenes/catsim/catobject.tscn" id="4_t11mk"]
7-
[ext_resource type="Texture2D" uid="uid://b6whkt023c6jq" path="res://assets/textures/catsim/food_bowl.png" id="4_t35jr"]
88
[ext_resource type="Shader" path="res://resources/hue.gdshader" id="5_8pllu"]
9-
[ext_resource type="Texture2D" uid="uid://pwvsa7d527sd" path="res://assets/textures/catsim/water_bowl.png" id="5_tvfgl"]
10-
11-
[sub_resource type="LabelSettings" id="LabelSettings_y1wrj"]
12-
font_size = 32
9+
[ext_resource type="AudioStream" uid="uid://duiwnw1md8b2p" path="res://assets/sounds/meow1.wav" id="7_10b03"]
10+
[ext_resource type="AudioStream" uid="uid://bw25r5o33y8ol" path="res://assets/sounds/meow2.wav" id="8_0r8g4"]
11+
[ext_resource type="AudioStream" uid="uid://c5bmkp0gf01bh" path="res://assets/sounds/meow3.wav" id="9_yl3ha"]
12+
[ext_resource type="LabelSettings" uid="uid://dguaiif1dpkwk" path="res://resources/5px.tres" id="10_qs8rk"]
1313

1414
[sub_resource type="ShaderMaterial" id="ShaderMaterial_8seon"]
1515
shader = ExtResource("5_8pllu")
@@ -29,6 +29,16 @@ font_size = 48
2929
shadow_color = Color(0, 0, 0, 0.498039)
3030
shadow_offset = Vector2(8, 8)
3131

32+
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_xqdvd"]
33+
streams_count = 3
34+
random_pitch = 1.2
35+
stream_0/stream = ExtResource("7_10b03")
36+
stream_0/weight = 1.0
37+
stream_1/stream = ExtResource("8_0r8g4")
38+
stream_1/weight = 1.0
39+
stream_2/stream = ExtResource("9_yl3ha")
40+
stream_2/weight = 1.0
41+
3242
[node name="CatSim" type="Node2D"]
3343
script = ExtResource("1_jus8a")
3444

@@ -44,28 +54,13 @@ modulate = Color(1, 1, 0.498039, 1)
4454
[node name="Camera2D" type="Camera2D" parent="."]
4555
zoom = Vector2(8, 8)
4656

47-
[node name="CanvasLayer" type="CanvasLayer" parent="."]
48-
49-
[node name="Label" type="Label" parent="CanvasLayer"]
50-
offset_left = 1434.0
51-
offset_top = 573.0
52-
offset_right = 1912.0
53-
offset_bottom = 1632.0
54-
text = "Hunger
55-
Thirst
56-
Fun
57-
Human Tolerance
58-
Awakeness
59-
Cleanliness"
60-
label_settings = SubResource("LabelSettings_y1wrj")
61-
6257
[node name="Food" parent="." instance=ExtResource("4_t11mk")]
6358
position = Vector2(-100, 56)
64-
texture = ExtResource("4_t35jr")
59+
texture = ExtResource("4_718wf")
6560

6661
[node name="Water" parent="." instance=ExtResource("4_t11mk")]
6762
position = Vector2(-80, 56)
68-
texture = ExtResource("5_tvfgl")
63+
texture = ExtResource("4_718wf")
6964

7065
[node name="StatTick" type="Timer" parent="."]
7166
autostart = true
@@ -74,6 +69,13 @@ autostart = true
7469
one_shot = true
7570
autostart = true
7671

72+
[node name="MeowTimer" type="Timer" parent="."]
73+
one_shot = true
74+
autostart = true
75+
76+
[node name="ObjectUseTimer" type="Timer" parent="."]
77+
one_shot = true
78+
7779
[node name="Hunger" parent="." instance=ExtResource("4_kofum")]
7880
material = SubResource("ShaderMaterial_8seon")
7981
offset_left = 54.0
@@ -115,7 +117,23 @@ position = Vector2(-88, -32)
115117
[node name="MaxIdleRange" type="Marker2D" parent="."]
116118
position = Vector2(24, 24)
117119

120+
[node name="Meow" type="AudioStreamPlayer2D" parent="."]
121+
stream = SubResource("AudioStreamRandomizer_xqdvd")
122+
max_distance = 1000.0
123+
max_polyphony = 2
124+
bus = &"Ambient"
125+
126+
[node name="Label" type="Label" parent="."]
127+
offset_left = 56.0
128+
offset_top = 2.0
129+
offset_right = 110.0
130+
offset_bottom = 25.0
131+
text = "IDLE"
132+
label_settings = ExtResource("10_qs8rk")
133+
118134
[connection signal="timeout" from="StatTick" to="." method="_on_stat_tick_timeout"]
119135
[connection signal="timeout" from="CatIdleWalk" to="." method="_on_cat_idle_walk_timeout"]
136+
[connection signal="timeout" from="MeowTimer" to="." method="_on_meow_timer_timeout"]
137+
[connection signal="timeout" from="ObjectUseTimer" to="." method="_on_object_use_timer_timeout"]
120138

121139
[editable path="Human Tolerance"]

scripts/Cat.gd

Lines changed: 95 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
extends Node2D
22

3-
@onready var labelnode = $CanvasLayer/Label
43
@onready var catnode = $Cat
54

65
@onready var hunger_bar_node = $Hunger
@@ -10,6 +9,21 @@ extends Node2D
109

1110
@onready var cat_node = $Cat
1211

12+
@onready var min_idle_range = $MinIdleRange.position
13+
@onready var max_idle_range = $MaxIdleRange.position
14+
@onready var cat_idle_walk_node = $CatIdleWalk
15+
16+
@onready var meow_node = $Meow
17+
@onready var meow_timer_node = $MeowTimer
18+
19+
@onready var object_use_timer_node = $ObjectUseTimer
20+
21+
var target = null # used for State.WALKING and State.USING
22+
var current_state = State.IDLE
23+
24+
var idle_goal = Vector2.ZERO
25+
@export var speed = 1.5 # Pixels
26+
1327
signal cat_obliteration # emmited when game lost
1428

1529
enum StatType {
@@ -31,17 +45,40 @@ var stats = {
3145
StatType.CLEANLINESS: 64,
3246
}
3347

48+
@onready var stat_nodes = {
49+
StatType.HUNGER: $Food,
50+
StatType.THIRST: $Water,
51+
StatType.FUN: null,
52+
StatType.HUMAN_TOLERANCE: null,
53+
StatType.AWAKENESS: null,
54+
StatType.CLEANLINESS: null,
55+
}
56+
57+
var stat_use_times = {
58+
StatType.HUNGER: 1.5,
59+
StatType.THIRST: 1,
60+
StatType.FUN: 1,
61+
StatType.HUMAN_TOLERANCE: 1,
62+
StatType.AWAKENESS: 1,
63+
StatType.CLEANLINESS: 1,
64+
}
65+
3466
enum State {
3567
IDLE, # Cat will stay still
3668
IDLE_MOVE, # Cat is moving to a random position
3769
WALKING, # Cat will move towards object
3870
USING, # Cat will be at object
3971
}
4072

41-
var target = null # used for State.WALKING and State.USING
42-
var current_state = State.IDLE
4373

44-
const labeltext = "Hunger: %s\nThirst: %s\nFun: %s\nHuman Tolerance: %s\nAwakeness: %s\nCleanliness: %s"
74+
func _on_cat_idle_walk_timeout():
75+
idle_goal.x = randi_range(min_idle_range.x, max_idle_range.x)
76+
idle_goal.y = randi_range(min_idle_range.y, max_idle_range.y)
77+
change_state(State.IDLE_MOVE)
78+
79+
func change_state(state):
80+
current_state = state
81+
$Label.text = State.keys()[state]
4582

4683
func _ready():
4784
# set random initial seed for random functions
@@ -54,35 +91,66 @@ func _ready():
5491

5592
update_ui()
5693

57-
var idle_goal = Vector2.ZERO
58-
var speed = 1.5 # Pixels
94+
95+
func update_ui():
96+
hunger_bar_node.value = stats[StatType.HUNGER]
97+
thirst_bar_node.value = stats[StatType.THIRST]
98+
fun_bar_node.value = stats[StatType.FUN]
99+
human_tolerance_bar_node.value = stats[StatType.HUMAN_TOLERANCE]
100+
101+
var lowest_object_stat
59102

60103
func _process(delta):
61104
match current_state:
62105
State.WALKING:
63106
if target:
64107
catnode.position = catnode.position.move_toward(target.position, speed*16*delta)
108+
if catnode.position == target.position:
109+
change_state(State.USING)
110+
object_use_timer_node.start()
111+
else: change_state(State.IDLE_MOVE)
65112
State.IDLE_MOVE:
66113
catnode.position = catnode.position.move_toward(idle_goal, speed*16*delta)
67114
if catnode.position == idle_goal:
68115
change_state(State.IDLE)
69116
cat_idle_walk_node.start(randf_range(0.5, 4))
70-
71-
72-
func update_ui():
73-
labelnode.text = labeltext % [
74-
stats[StatType.HUNGER],
75-
stats[StatType.THIRST],
76-
stats[StatType.FUN],
77-
stats[StatType.HUMAN_TOLERANCE],
78-
stats[StatType.AWAKENESS],
79-
stats[StatType.CLEANLINESS]
80-
]
81117

82-
hunger_bar_node.value = stats[StatType.HUNGER]
83-
thirst_bar_node.value = stats[StatType.THIRST]
84-
fun_bar_node.value = stats[StatType.FUN]
85-
human_tolerance_bar_node.value = stats[StatType.HUMAN_TOLERANCE]
118+
if not State.USING:
119+
lowest_object_stat = get_lowest_object_stat()
120+
var urgent = stats[lowest_object_stat] <= 32
121+
if urgent:
122+
target = stat_nodes[lowest_object_stat]
123+
change_state(State.WALKING)
124+
125+
func _on_object_use_timer_timeout():
126+
_on_cat_idle_walk_timeout()
127+
match lowest_object_stat:
128+
StatType.HUNGER: food()
129+
StatType.THIRST: water()
130+
131+
func _on_meow_timer_timeout():
132+
meow_node.play()
133+
meow_timer_node.start(randf_range(3,9))
134+
135+
# returns the stat with the lowest number
136+
func get_lowest_stat():
137+
var lowest_stat
138+
var lowest_stat_num = 64
139+
for stat in stats.keys():
140+
if stats[stat] < lowest_stat_num:
141+
lowest_stat = stat
142+
lowest_stat_num = stats[stat]
143+
return lowest_stat
144+
145+
# returns the stat with the lowest number out of the stats that have an accompying object
146+
func get_lowest_object_stat():
147+
var lowest_stat
148+
var lowest_stat_num = 65
149+
for stat in stats.keys():
150+
if stats[stat] < lowest_stat_num and stat_nodes[stat]:
151+
lowest_stat = stat
152+
lowest_stat_num = stats[stat]
153+
return lowest_stat
86154

87155
# adds a number to the stat while still respecting the maximum and minimum values
88156
func capadd(stat, add): stats[stat] = max(min(stats[stat]+add, 64),0)
@@ -100,42 +168,27 @@ func _on_stat_tick_timeout():
100168
update_ui()
101169

102170

103-
104-
105-
106-
# WHAT HAPPENS WHEN OBJECT CLICKED
171+
# WHAT HAPPENS WHEN OBJECT USED
107172

108173
func food():
109-
capadd(StatType.HUNGER, 8)
110-
capadd(StatType.THIRST, -4)
174+
capadd(StatType.HUNGER, 16)
175+
capadd(StatType.THIRST, -8)
111176
update_ui()
112177

113178
func water():
114-
capadd(StatType.THIRST, 8)
179+
capadd(StatType.THIRST, 16)
115180
update_ui()
116181

182+
117183
# As chaotic as possible while still being fair if you know what you're doing
118184
func pet():
185+
meow_node.play()
119186
if stats[StatType.HUMAN_TOLERANCE] >= 32:
120187
capadd(StatType.FUN, 8)
121188
elif stats[StatType.HUMAN_TOLERANCE] < 48:
122189
capadd(StatType.FUN, -8)
123190

124-
125191
var rand = 1 + randi() % 8
126192
if rand >= 7: rand *= 3
127193
capadd(StatType.HUMAN_TOLERANCE, -rand)
128194
update_ui()
129-
130-
@onready var min_idle_range = $MinIdleRange.position
131-
@onready var max_idle_range = $MaxIdleRange.position
132-
@onready var cat_idle_walk_node = $CatIdleWalk
133-
134-
func _on_cat_idle_walk_timeout():
135-
idle_goal.x = randi_range(min_idle_range.x, max_idle_range.x)
136-
idle_goal.y = randi_range(min_idle_range.y, max_idle_range.y)
137-
change_state(State.IDLE_MOVE)
138-
139-
func change_state(state):
140-
current_state = state
141-
print("STATE CHANGED TO:" + str(state))

0 commit comments

Comments
 (0)