guest review process
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 7s
Create tag and build when new code gets to main / Export (push) Successful in 1m19s

This commit is contained in:
2026-01-31 15:10:06 +01:00
parent 02dc155183
commit 59b63b0945
15 changed files with 392 additions and 10 deletions

View File

@@ -6,6 +6,11 @@ class_name GameManager
@export var character_roster: Array[CharacterResource]
@export var mask_roster: Array[MaskResource]
@export_category("References")
@export var character: Character
@export var guest_list: List
@export var mask_list: List
@export_category("Predetermined levels")
@export_group("Level 1")
@export var lvl1_guest_1: MaskedChara
@@ -33,23 +38,98 @@ enum Levels {
}
var current_game_state = GameState.READY
var current_level = Levels.LVL1
var first_guest = true
func create_new_roster() -> void:
print("Create new roster")
current_chara_roster = []
var already_picked_charas: Array[String] = []
for i in range(max_roster_size):
var chara: CharacterResource = character_roster.pick_random()
# Make sure we don't plan on more people than available
if already_picked_charas.size() >= character_roster.size():
break
# Pick unique characters for the roster
var chara: CharacterResource
var is_chara_already_in_roster = true
while is_chara_already_in_roster:
chara = character_roster.pick_random()
for already_there in already_picked_charas:
if already_there != chara.name:
already_picked_charas.append(chara.name)
is_chara_already_in_roster = false
# Associate a single mask (for now) to the character
var mask: MaskResource = mask_roster.pick_random()
var all_masks: Array[MaskResource] = [mask]
var masked_chara = MaskedChara.new(chara, all_masks)
current_chara_roster.append(masked_chara)
print("Added %s to roster" % chara.name)
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
first_guest = true
review_next_guest()
func review_next_guest():
# See previous guest out
if not first_guest:
character.go_out()
var timer = get_tree().create_timer(2)
await timer.timeout
# Check if we have more guests, if not we go to the ending
print(current_chara_roster)
var guest: MaskedChara = current_chara_roster.pop_front()
if guest == null:
current_game_state = GameState.FINISHED
compute_ending()
return
# Process next guest
print("Guest is %s" % guest.character.name)
character.chara_resource = guest.character
var eyes_mask_index = guest.masks.find_custom(func(mask: MaskResource): return mask.region == MaskResource.Region.EYES)
var mouth_mask_index = guest.masks.find_custom(func(mask: MaskResource): return mask.region == MaskResource.Region.MOUTH)
if eyes_mask_index != -1:
character.mask_eyes.mask_resource = guest.masks[eyes_mask_index]
if mouth_mask_index != -1:
character.mask_mouth.mask_resource = guest.masks[mouth_mask_index]
first_guest = false
character.come_in()
func compute_ending():
print("to ending")
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
pass # Replace with function body.
character.visible = false
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
pass
func _on_ready_bell_input_event(viewport: Node, event: InputEvent, shape_idx: int) -> void:
if event is InputEventMouseButton and event.is_pressed():
if current_game_state == GameState.READY:
on_ready_bell_pressed()
else: # debug
review_next_guest()