crabs-game/scripts/scenes/IntroScript.gd

69 lines
1.9 KiB
GDScript

extends Node
class_name IntroScript
signal end_step
export (NodePath) var dialogue_box_path
onready var dialogue_box = get_node(dialogue_box_path)
export (NodePath) var herbert_sprite_path
onready var herbert_sprite = get_node(herbert_sprite_path)
export (String, FILE, '*.json') var intro_dialogue_1 : String
export (String, FILE, '*.json') var intro_dialogue_2 : String
func _ready():
assert(dialogue_box != null)
assert(herbert_sprite != null)
dialogue_box.connect('update', self, 'update_camera')
yield(get_tree().create_timer(2.0), 'timeout')
yield(start_dialogue(intro_dialogue_1), 'end')
yield(get_tree().create_timer(2.0), 'timeout')
do_crab_step()
yield(self, 'end_step')
yield(start_dialogue(intro_dialogue_2), 'end')
func update_camera():
var line = dialogue_box._dialogue[dialogue_box._index]
if line.name == 'Crab' || line.name == 'Herbert':
herbert_sprite.show()
else:
herbert_sprite.hide()
func start_dialogue(dialog_path : String) -> DialogueAction:
var dialogue = DialogueAction.new()
dialogue.dialogue_file_path = dialog_path
dialogue.dialogue_box = dialogue_box
dialogue.start()
return dialogue
var crab_finished = false
var crab_step = 0
func do_crab_step():
crab_finished = false
herbert_sprite.frame = 0
if crab_step == 0:
herbert_sprite.connect('animation_finished', self, 'crab_animation_finished')
herbert_sprite.play('eyes')
herbert_sprite.show()
elif crab_step == 1:
herbert_sprite.play('first_step')
elif crab_step == 2:
herbert_sprite.play('second_step')
elif crab_step == 3:
herbert_sprite.disconnect('animation_finished', self, 'crab_animation_finished')
herbert_sprite.play('third_step')
yield(herbert_sprite, 'animation_finished')
herbert_sprite.play('idle')
emit_signal("end_step")
crab_step += 1
func crab_animation_finished():
crab_finished = true
func _input(event):
if crab_finished && event.is_action_pressed('ui_accept'):
do_crab_step()