basic score computing

This commit is contained in:
2026-01-31 21:11:40 +01:00
parent 76234147a2
commit c82c768ca8
6 changed files with 157 additions and 12 deletions

View File

@@ -6,6 +6,7 @@ class_name CharacterResource
enum Preference {
LOVE,
APPROVE,
DONT_CARE,
DISAPPROVE,
HATE
}

View File

@@ -38,6 +38,7 @@
[ext_resource type="PackedScene" uid="uid://cayrxqnypoytu" path="res://scenes/table/table.tscn" id="35_r1bmu"]
[ext_resource type="Texture2D" uid="uid://cl1a50j64nnlh" path="res://assets/decor/guest_page_held.png" id="36_62f45"]
[ext_resource type="Texture2D" uid="uid://coahojeky8ul7" path="res://assets/decor/bell.png" id="37_6g32y"]
[ext_resource type="Texture2D" uid="uid://cgl8g5eqy8xm0" path="res://assets/decor/hand_bell.png" id="39_62f45"]
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_gkmcc"]
random_pitch = 1.122462
@@ -311,6 +312,44 @@ _data = {
[sub_resource type="CircleShape2D" id="CircleShape2D_62atk"]
radius = 150.0
[sub_resource type="Animation" id="Animation_6g32y"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:position")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(131, 317.00003)]
}
[sub_resource type="Animation" id="Animation_62f45"]
resource_name = "idle"
length = 0.3
loop_mode = 1
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:position")
tracks/0/interp = 2
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.16666667),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector2(131, 317.00003), Vector2(131, 478)]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_6g32y"]
_data = {
&"RESET": SubResource("Animation_6g32y"),
&"idle": SubResource("Animation_62f45")
}
[node name="Main" type="Node2D" unique_id=875553242]
script = ExtResource("1_7smn1")
@@ -331,13 +370,14 @@ texture = ExtResource("15_1k3ck")
[node name="Character" parent="." unique_id=138741531 instance=ExtResource("2_raeie")]
[node name="GameManager" type="Node" parent="." unique_id=528989100 node_paths=PackedStringArray("character", "guest_list", "mask_list")]
[node name="GameManager" type="Node" parent="." unique_id=528989100 node_paths=PackedStringArray("character", "guest_list", "mask_list", "tables")]
script = ExtResource("3_hxu8e")
character_roster = Array[ExtResource("4_nvumn")]([ExtResource("5_ou6is"), ExtResource("6_necax"), ExtResource("7_r4lks"), ExtResource("8_pg34l")])
mask_roster = Array[ExtResource("9_m4h2d")]([ExtResource("10_p8abn"), ExtResource("11_s17dp"), ExtResource("12_37hlw")])
character = NodePath("../Character")
guest_list = NodePath("../GuestList")
mask_list = NodePath("../MaskList")
tables = [NodePath("../Table"), NodePath("../Table2"), NodePath("../Table3")]
lvl1_guest_1 = ExtResource("26_rofvo")
lvl1_guest_2 = ExtResource("27_6w6mm")
lvl2_guest_1 = ExtResource("28_r1bmu")
@@ -369,13 +409,13 @@ shape = SubResource("RectangleShape2D_ya4ey")
libraries/ = SubResource("AnimationLibrary_hxu8e")
[node name="Table" parent="." unique_id=1315188460 instance=ExtResource("35_r1bmu")]
position = Vector2(2589, 56)
position = Vector2(2711, 22)
[node name="Table2" parent="." unique_id=141765359 instance=ExtResource("35_r1bmu")]
position = Vector2(2272, 285)
position = Vector2(2029, 236)
[node name="Table3" parent="." unique_id=569701756 instance=ExtResource("35_r1bmu")]
position = Vector2(3014, 285)
position = Vector2(3430, 217)
[node name="Reception" type="Sprite2D" parent="." unique_id=96935292]
position = Vector2(95, 156)
@@ -383,6 +423,7 @@ scale = Vector2(0.5, 0.5)
texture = ExtResource("35_62f45")
[node name="MaskList" parent="." unique_id=437192154 instance=ExtResource("25_6llfj")]
visible = false
position = Vector2(409, 523)
rotation = 0.1675516
scale = Vector2(0.99999994, 0.99999994)
@@ -413,6 +454,15 @@ shape = SubResource("CircleShape2D_62atk")
scale = Vector2(0.3, 0.3)
texture = ExtResource("37_6g32y")
[node name="RingBell" type="Sprite2D" parent="." unique_id=1001478580]
position = Vector2(131, 317.00003)
scale = Vector2(0.3, 0.3)
texture = ExtResource("39_62f45")
[node name="AnimationPlayer" type="AnimationPlayer" parent="RingBell" unique_id=1180701987]
libraries/ = SubResource("AnimationLibrary_6g32y")
autoplay = &"idle"
[connection signal="mouse_entered" from="Camera2D/PanRight" to="Camera2D" method="_on_pan_right_mouse_entered"]
[connection signal="mouse_exited" from="Camera2D/PanRight" to="Camera2D" method="_on_pan_right_mouse_exited"]
[connection signal="mouse_entered" from="Camera2D/PanLeft" to="Camera2D" method="_on_pan_left_mouse_entered"]

View File

@@ -11,6 +11,9 @@ class_name GameManager
@export var guest_list: List
@export var mask_list: List
@export_category("Tables")
@export var tables: Array[Table]
@export_category("Predetermined levels")
@export_group("Level 1")
@export var lvl1_guest_1: MaskedChara
@@ -43,6 +46,7 @@ var current_guest: MaskedChara
var selected_seat: Seat
@onready var camera_2d: Camera2D = $"../Camera2D"
@onready var ring_bell: Sprite2D = $"../RingBell"
func create_new_roster() -> void:
@@ -97,7 +101,28 @@ func review_next_guest():
character.come_in()
func compute_ending():
print("to ending")
var camera_tween = get_tree().create_tween()
camera_tween.set_ease(Tween.EASE_IN_OUT)
camera_tween.set_trans(Tween.TRANS_CUBIC)
camera_tween.tween_property(camera_2d, "position", Vector2(2720.0, 0), 1.0)
camera_tween.tween_callback(ending_tween_cb)
func ending_tween_cb():
var final_score = 0.0
for table in tables:
final_score += table.compute_score()
print("Final score: %s" % final_score)
# Progress levels
current_game_state = GameState.READY
ring_bell.visible = true
mask_list.visible = false
if current_level == Levels.LVL1:
current_level = Levels.LVL2
else:
current_level = Levels.RANDOM
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
@@ -118,18 +143,16 @@ func on_ready_bell_pressed() -> void:
if(current_game_state != GameState.READY):
return
print("ready bell pressed")
if current_level == Levels.LVL1:
print("prepare_level_one")
current_chara_roster = [lvl1_guest_1, lvl1_guest_2]
elif current_level == Levels.LVL2:
print("prepare_level_two")
current_chara_roster = [lvl2_guest_1, lvl2_guest_2]
else:
create_new_roster()
current_game_state = GameState.GUEST_REVIEW
ring_bell.visible = false
mask_list.visible = true
first_guest = true
review_next_guest()

View File

@@ -5,10 +5,14 @@ class_name MaskedChara
@export var face_mask: MaskResource
@export var mouth_mask: MaskResource
@export var pref_score_map: Dictionary[CharacterResource.Preference, float] = {
CharacterResource.Preference.LOVE: 2.0,
CharacterResource.Preference.APPROVE: 1.0,
CharacterResource.Preference.DONT_CARE: 0.0,
CharacterResource.Preference.DISAPPROVE: -1.0,
CharacterResource.Preference.HATE: -2.0,
}
# Make sure that every parameter has a default value.
# Otherwise, there will be problems with creating and editing
# your resource via the inspector.
func _init(
p_character: CharacterResource = CharacterResource.new(),
p_mask_face: MaskResource = MaskResource.new(),
@@ -16,3 +20,35 @@ func _init(
character = p_character
face_mask = p_mask_face
mouth_mask = p_mask_mouth
func compute_score(other_guests: Array[MaskedChara]) -> float:
var overall_score = 0.0
var preferences = character.preferences
for guest in other_guests:
if guest == null:
continue
var guest_mouth_mask = guest.mouth_mask
var guest_traits = guest.character.traits
var guest_appreciation = 0.0
for guest_trait in guest_traits:
var trait_strength = 0.0
for stimuli in guest_trait.stimulis:
var strength = stimuli
if stimuli == guest_mouth_mask.stimuli:
strength *= guest_mouth_mask.stimuli_multiplier
if stimuli == face_mask.stimuli:
strength *= face_mask.stimuli_multiplier
trait_strength += strength
var preference = character.preferences.get(guest_trait.tag) if guest_trait.tag in character.preferences else CharacterResource.Preference.APPROVE
var score_multiplier = pref_score_map.get(preference) if preference in pref_score_map else 1.0
guest_appreciation += trait_strength*score_multiplier
overall_score += guest_appreciation
print("%s score: %s" % [character.name, overall_score])
return overall_score

View File

@@ -15,3 +15,15 @@ func _ready() -> void:
func on_seat_clicked(seat: Seat) -> void:
seat_clicked.emit(seat)
func compute_score() -> float:
var score_guest1 = seat_1.guest.compute_score([seat_2.guest, seat_3.guest]) if seat_1.guest != null else 0.0
var score_guest2 = seat_2.guest.compute_score([seat_1.guest, seat_3.guest]) if seat_2.guest != null else 0.0
var score_guest3 = seat_3.guest.compute_score([seat_1.guest, seat_2.guest]) if seat_3.guest != null else 0.0
var table_score = score_guest1 + score_guest2 + score_guest3
print("%s score: %s" % [name, table_score])
return table_score

View File

@@ -2,18 +2,41 @@
[ext_resource type="Script" uid="uid://r542aaur4vsc" path="res://scenes/table/table.gd" id="1_ov72x"]
[ext_resource type="PackedScene" uid="uid://l0hl170iqkgx" path="res://scenes/seat/seat.tscn" id="1_qavd0"]
[ext_resource type="Texture2D" uid="uid://bd86sgiucdbx7" path="res://assets/decor/table.png" id="3_qxbf1"]
[ext_resource type="Texture2D" uid="uid://dov4apmrl77jl" path="res://assets/decor/table_defeat.png" id="4_wpgb8"]
[ext_resource type="Texture2D" uid="uid://bp3nbt23n348t" path="res://assets/decor/table_success.png" id="5_0y6hh"]
[node name="Table" type="Node2D" unique_id=1315188460]
script = ExtResource("1_ov72x")
[node name="Seat1" parent="." unique_id=1604639021 instance=ExtResource("1_qavd0")]
position = Vector2(-204, -87)
guest = null
[node name="Seat2" parent="." unique_id=848918585 instance=ExtResource("1_qavd0")]
position = Vector2(-14, -117)
guest = null
[node name="Seat3" parent="." unique_id=150555678 instance=ExtResource("1_qavd0")]
position = Vector2(173, -98)
guest = null
[node name="Table" type="Sprite2D" parent="." unique_id=466061690]
position = Vector2(0, 100)
scale = Vector2(0.5, 0.5)
texture = ExtResource("3_qxbf1")
[node name="TableDefeat" type="Sprite2D" parent="." unique_id=1228068963]
visible = false
position = Vector2(0, 100)
scale = Vector2(0.5, 0.5)
texture = ExtResource("4_wpgb8")
[node name="TableVictory" type="Sprite2D" parent="." unique_id=136666064]
visible = false
position = Vector2(0, 100)
scale = Vector2(0.5, 0.5)
texture = ExtResource("5_0y6hh")
[connection signal="seat_clicked" from="Seat1" to="." method="on_seat_clicked"]
[connection signal="seat_clicked" from="Seat2" to="." method="on_seat_clicked"]