game loop improvement
This commit is contained in:
@@ -39,6 +39,11 @@ enum Levels {
|
||||
var current_game_state = GameState.READY
|
||||
var current_level = Levels.LVL1
|
||||
var first_guest = true
|
||||
var current_guest: MaskedChara
|
||||
var selected_seat: Seat
|
||||
|
||||
@onready var camera_2d: Camera2D = $"../Camera2D"
|
||||
|
||||
|
||||
func create_new_roster() -> void:
|
||||
print("Create new roster")
|
||||
@@ -61,30 +66,12 @@ func create_new_roster() -> void:
|
||||
|
||||
# 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)
|
||||
var face_mask = mask if mask.region == MaskResource.Region.EYES else null
|
||||
var mouth_mask = mask if mask.region == MaskResource.Region.MOUTH else null
|
||||
var masked_chara = MaskedChara.new(chara, face_mask, mouth_mask)
|
||||
|
||||
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
|
||||
@@ -94,22 +81,17 @@ func review_next_guest():
|
||||
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_guest = current_chara_roster.pop_front()
|
||||
if current_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]
|
||||
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
|
||||
|
||||
first_guest = false
|
||||
character.come_in()
|
||||
@@ -133,3 +115,38 @@ func _on_ready_bell_input_event(viewport: Node, event: InputEvent, shape_idx: in
|
||||
on_ready_bell_pressed()
|
||||
else: # debug
|
||||
review_next_guest()
|
||||
|
||||
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 on_seat_clicked(seat: Seat) -> void:
|
||||
if current_guest == null and not current_game_state == GameState.GUEST_REVIEW:
|
||||
return
|
||||
|
||||
selected_seat = seat
|
||||
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.ZERO, 1.0)
|
||||
camera_tween.tween_callback(camera_tween_cb)
|
||||
|
||||
func camera_tween_cb() -> void:
|
||||
selected_seat.set_guest(current_guest)
|
||||
review_next_guest()
|
||||
|
||||
@@ -2,12 +2,17 @@ extends Resource
|
||||
class_name MaskedChara
|
||||
|
||||
@export var character: CharacterResource
|
||||
@export var masks: Array[MaskResource]
|
||||
@export var face_mask: MaskResource
|
||||
@export var mouth_mask: MaskResource
|
||||
|
||||
|
||||
# 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: Array[MaskResource] = []):
|
||||
func _init(
|
||||
p_character: CharacterResource = CharacterResource.new(),
|
||||
p_mask_face: MaskResource = MaskResource.new(),
|
||||
p_mask_mouth: MaskResource = MaskResource.new()):
|
||||
character = p_character
|
||||
masks = p_mask
|
||||
face_mask = p_mask_face
|
||||
mouth_mask = p_mask_mouth
|
||||
|
||||
Reference in New Issue
Block a user