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

@@ -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