From c82c768ca8178edea9761dce72dc60b405a5ba32 Mon Sep 17 00:00:00 2001 From: minimata Date: Sat, 31 Jan 2026 21:11:40 +0100 Subject: [PATCH] basic score computing --- scenes/character/chara_resource.gd | 1 + scenes/main/main.tscn | 58 +++++++++++++++++++++++++++--- scenes/managers/game_manager.gd | 33 ++++++++++++++--- scenes/managers/masked_chara.gd | 42 ++++++++++++++++++++-- scenes/table/table.gd | 12 +++++++ scenes/table/table.tscn | 23 ++++++++++++ 6 files changed, 157 insertions(+), 12 deletions(-) diff --git a/scenes/character/chara_resource.gd b/scenes/character/chara_resource.gd index 54c176f..6ae000d 100644 --- a/scenes/character/chara_resource.gd +++ b/scenes/character/chara_resource.gd @@ -6,6 +6,7 @@ class_name CharacterResource enum Preference { LOVE, APPROVE, + DONT_CARE, DISAPPROVE, HATE } diff --git a/scenes/main/main.tscn b/scenes/main/main.tscn index 04d9e21..ae20e42 100644 --- a/scenes/main/main.tscn +++ b/scenes/main/main.tscn @@ -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"] diff --git a/scenes/managers/game_manager.gd b/scenes/managers/game_manager.gd index 28822d5..a9f41a3 100644 --- a/scenes/managers/game_manager.gd +++ b/scenes/managers/game_manager.gd @@ -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() diff --git a/scenes/managers/masked_chara.gd b/scenes/managers/masked_chara.gd index 5505396..df69247 100644 --- a/scenes/managers/masked_chara.gd +++ b/scenes/managers/masked_chara.gd @@ -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 diff --git a/scenes/table/table.gd b/scenes/table/table.gd index 8abe271..42b801f 100644 --- a/scenes/table/table.gd +++ b/scenes/table/table.gd @@ -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 + diff --git a/scenes/table/table.tscn b/scenes/table/table.tscn index 091dfc4..58dbb94 100644 --- a/scenes/table/table.tscn +++ b/scenes/table/table.tscn @@ -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"]