alone management

This commit is contained in:
2026-02-01 11:12:46 +01:00
parent de0c6a959d
commit 6c50970d7e
14 changed files with 153 additions and 31 deletions

View File

@@ -26,6 +26,7 @@ class_name GameManager
@export_group("Level 3")
@export var lvl3_guest_1: MaskedChara
@export var lvl3_guest_2: MaskedChara
@export var lvl3_guest_3: MaskedChara
@export_category("Random levels")
@export var current_level: Levels = Levels.LVL1
@@ -52,12 +53,11 @@ var roster_size: int = 2
@onready var camera_2d: Camera2D = $"../Camera2D"
@onready var ring_bell: Sprite2D = $"../RingBell"
@onready var bell_anim_player: AnimationPlayer = $"../RingBell/AnimationPlayer"
func create_new_roster() -> void:
print("Create new roster")
current_chara_roster = []
print(character_roster.size())
var roster_for_this_round = character_roster.duplicate()
var max_number_of_people = min(roster_size, character_roster.size())
for i in range(max_number_of_people):
@@ -72,8 +72,6 @@ func create_new_roster() -> void:
var masked_chara = MaskedChara.new(chara, face_mask, mouth_mask)
current_chara_roster.append(masked_chara)
print("Added %s to roster" % chara.name)
print(character_roster.size())
func review_next_guest():
# See previous guest out
@@ -90,7 +88,6 @@ func review_next_guest():
return
# Process next guest
print("Guest is %s" % current_guest.character.name)
character.chara_resource = current_guest.character
character.mask_eyes.mask_resource = current_guest.face_mask
character.mask_mouth.mask_resource = current_guest.mouth_mask
@@ -115,7 +112,7 @@ func ending_tween_cb():
# Progress levels
current_game_state = GameState.READY
ring_bell.visible = true
mask_list.visible = false
bell_anim_player.play("idle")
if current_level == Levels.LVL1:
current_level = Levels.LVL2
elif current_level == Levels.LVL2:
@@ -144,18 +141,21 @@ func on_ready_bell_pressed() -> void:
if(current_game_state != GameState.READY):
return
for table in tables:
table.initialize()
if current_level == Levels.LVL1:
current_chara_roster = [lvl1_guest_1, lvl1_guest_2]
elif current_level == Levels.LVL2:
current_chara_roster = [lvl2_guest_1, lvl2_guest_2]
elif current_level == Levels.LVL3:
current_chara_roster = [lvl3_guest_1, lvl3_guest_2]
current_chara_roster = [lvl3_guest_1, lvl3_guest_2, lvl3_guest_3]
else:
create_new_roster()
current_game_state = GameState.GUEST_REVIEW
bell_anim_player.stop()
ring_bell.visible = false
mask_list.visible = true
first_guest = true
review_next_guest()

View File

@@ -5,6 +5,8 @@ class_name MaskedChara
@export var face_mask: MaskResource
@export var mouth_mask: MaskResource
const ALONE_TRAIT = preload("uid://c4kpcm4tplsgg")
var pref_score_map: Dictionary[CharacterResource.Preference, float] = {
CharacterResource.Preference.LOVE: 2.0,
CharacterResource.Preference.APPROVE: 1.0,
@@ -26,10 +28,12 @@ func compute_score(other_guests: Array[MaskedChara]) -> float:
var overall_score = 0.0
var preferences = character.preferences
var is_alone = true
for guest in other_guests:
if guest == null:
continue
is_alone = false
var guest_mouth_mask = guest.mouth_mask
var guest_traits = guest.character.traits
@@ -47,10 +51,18 @@ func compute_score(other_guests: Array[MaskedChara]) -> float:
var preference = character.preferences.get(guest_trait) if guest_trait in character.preferences else CharacterResource.Preference.DONT_CARE
var score_multiplier = pref_score_map.get(preference) if preference in pref_score_map else 0.0
guest_appreciation += trait_strength*score_multiplier
print("%s guest appreciation %s" % [character.name, guest_appreciation])
overall_score += guest_appreciation
print("%s score: %s" % [character.name, overall_score])
if is_alone:
var alone_pref = character.preferences.get(ALONE_TRAIT) if ALONE_TRAIT in character.preferences else CharacterResource.Preference.DONT_CARE
var alone_score = pref_score_map.get(alone_pref) if alone_pref in pref_score_map else 0.0
var alone_strength = 0.0
for stimuli in ALONE_TRAIT.stimulis:
var strength = stimuli
if face_mask != null and stimuli == face_mask.stimuli:
strength *= face_mask.stimuli_multiplier
alone_strength += strength
overall_score = alone_score*alone_strength
return overall_score