Intial commit

This commit is contained in:
2020-05-15 20:02:56 -04:00
commit ad966789c5
284 changed files with 6546 additions and 0 deletions

View File

@ -0,0 +1,67 @@
extends Node
signal updated_text
signal finished_text
signal message_list_empty
func speak(message):
spoken_text = ""
for character in message:
soundQueue.append(character)
play_audio()
var message_list = []
func speak_lines(list_of_messages : Array = []):
message_list = message_list + list_of_messages
if len(message_list) > 0:
speak(message_list.pop_front())
else:
emit_signal("message_list_empty")
var audio_player : AudioStreamPlayer
var speaking_timer : Timer
var speaker = "default"
var soundQueue = []
var spoken_text = ""
var playing_speech = false
export var voice_pitch : float = 1
func play_audio():
playing_speech = true
if not audio_player:
audio_player = AudioStreamPlayer.new()
add_child(audio_player)
if not speaking_timer:
speaking_timer = Timer.new()
speaking_timer.connect("timeout", self, "play_audio")
add_child(speaking_timer)
audio_player.pitch_scale = voice_pitch
if len(soundQueue) > 0:
var letter = soundQueue.pop_front()
var audio_file = "res://Assets/Sfx/Speakers/" + speaker + ".wav"
var track : AudioStream
spoken_text = spoken_text + letter
emit_signal("updated_text")
if letter in " ,-'\"\n":
speaking_timer.start(0.05)
return
elif letter in ".!":
speaking_timer.start(0.15)
return
elif File.new().file_exists(audio_file):
track = load(audio_file)
audio_player.stream = track
audio_player.play()
speaking_timer.start(track.get_length())
else:
print("No sound for: " + str(speaker))
else:
playing_speech = false
emit_signal("finished_text")
func del_obj(obj):
obj.queue_free()

View File

@ -0,0 +1,76 @@
extends "res://Scripts/Component/Speaker.gd"
const Story_Reader_Class = preload("res://addons/EXP-System-Dialog/Reference_StoryReader/EXP_StoryReader.gd")
const story_file = preload("res://Assets/Stories/english_story.tres")
var story_reader = Story_Reader_Class.new()
var gui
var nid : int = 1
var did : int
var choices : int = 1
var selected_choice : int = -1
export var speaker_name = ""
func _ready():
story_reader.read(story_file)
connect("updated_text", self, "_on_text_update")
connect("finished_text", self, "_on_finish_text")
func _on_finish_text():
gui.show_choices()
func _on_text_update():
gui.set_dialog(spoken_text, speaker_name)
func start_dialog(record : String):
start_dialog_did(story_reader.get_did_via_record_name(record))
func start_dialog_did(dialog_id : int):
gui = get_node("/root/World/GUI")
nid = 1
did = dialog_id
process_message(story_reader.get_text(did, nid))
func has_next_node():
return story_reader.has_slot(did, nid, 0)
func process_message(message):
gui.clear_choices()
selected_choice = -1
choices = message.count("<choice>")
if choices > 0:
var i = 0
var last = ""
while i < choices:
var start = message.find("<choice>")
var end = message.find("</choice>")
if start != -1 and end != -1:
var choice_text = message.substr( start+len("<choice>"), end-start-len("</choice>")+1 )
if choice_text == last:
printerr("Choice in did " + str(did) + ", nid " + str(nid) + " not closed!")
break
else:
gui.add_choice(self, i, choice_text)
message = message.replace("<choice>"+choice_text+"</choice>", "")
i = i + 1
speak(message)
func _on_choice(decision):
move_dialog_forward(decision)
func move_dialog_forward(decision = 0):
if has_next_node():
nid = story_reader.get_nid_from_slot(did, nid, decision)
process_message(story_reader.get_text(did, nid))
else:
gui.finish_dialog()
func _process(delta):
if(Input.is_action_just_pressed("ui_accept") and choices == 0 and playing_speech == false):
move_dialog_forward(0)