guest review process
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user