Initial Android commit
This commit is contained in:
commit
1e2b80c13d
8521 changed files with 231475 additions and 0 deletions
378
addons/dialogic/Nodes/History.gd
Normal file
378
addons/dialogic/Nodes/History.gd
Normal file
|
@ -0,0 +1,378 @@
|
|||
tool
|
||||
extends Control
|
||||
|
||||
|
||||
export (PackedScene) var HistoryRow = load("res://addons/dialogic/Example Assets/History/HistoryRow.tscn")
|
||||
export (PackedScene) var HistoryDefaultBackground = load("res://addons/dialogic/Example Assets/History/HistoryBackground.tscn")
|
||||
export (PackedScene) var HistoryOpenButton = load("res://addons/dialogic/Example Assets/History/HistoryButton.tscn")
|
||||
export (PackedScene) var HistoryCloseButton = load("res://addons/dialogic/Example Assets/History/HistoryButton.tscn")
|
||||
export (int) var Vertical_Separation = 16
|
||||
|
||||
onready var HistoryTimeline = $HistoryPopup / ScrollHistoryContainer / MarginContainer / HistoryTimeline
|
||||
onready var scrollbar = $HistoryPopup / ScrollHistoryContainer.get_v_scrollbar()
|
||||
onready var ScrollHistoryContainer = $HistoryPopup / ScrollHistoryContainer
|
||||
onready var HistoryPopup = $HistoryPopup
|
||||
onready var HistoryAudio = $HistoryPopup / HistoryAudio
|
||||
|
||||
var HistoryButton
|
||||
var CloseButton
|
||||
var HistoryBackground
|
||||
|
||||
var is_history_open = false
|
||||
var is_mouse_on_button = false
|
||||
var block_dialog_advance = false setget , history_advance_block
|
||||
|
||||
var lastQuestionNode = null
|
||||
var curTheme = null
|
||||
var prevState
|
||||
|
||||
var eventsToLog = ["dialogic_001", "dialogic_010"]
|
||||
var logArrivals = false
|
||||
var logExits = false
|
||||
|
||||
var scrollToBottom = true
|
||||
var reverseTimeline = false
|
||||
var characterNameColorOn = true
|
||||
var lineBreakAfterName = true
|
||||
|
||||
var scrollToggle = false
|
||||
|
||||
func _ready():
|
||||
var testHistoryRow = HistoryRow.instance()
|
||||
assert (testHistoryRow.has_method("add_history"), "HistoryRow Scene must implement add_history(string, string) method.")
|
||||
testHistoryRow.queue_free()
|
||||
|
||||
HistoryBackground = HistoryDefaultBackground.instance()
|
||||
HistoryPopup.add_child(HistoryBackground)
|
||||
HistoryPopup.move_child(HistoryBackground, 0)
|
||||
|
||||
|
||||
if scrollbar.is_connected("changed", self, "handle_scrollbar_changed"):
|
||||
scrollbar.connect("changed", self, "handle_scrollbar_changed")
|
||||
|
||||
func handle_scrollbar_changed():
|
||||
|
||||
if (scrollToggle):
|
||||
scrollToggle = false
|
||||
if (scrollToBottom):
|
||||
ScrollHistoryContainer.scroll_vertical = scrollbar.max_value
|
||||
else :
|
||||
ScrollHistoryContainer.scroll_vertical = 0
|
||||
|
||||
|
||||
func initalize_history():
|
||||
if get_parent().settings.get_value("history", "enable_open_button", true):
|
||||
HistoryButton = HistoryOpenButton.instance()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if get_parent().settings.get_value("history", "enable_close_button", true):
|
||||
CloseButton = HistoryCloseButton.instance()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
logArrivals = get_parent().settings.get_value("history", "log_arrivals", true)
|
||||
logExits = get_parent().settings.get_value("history", "log_exits", true)
|
||||
if logExits or logArrivals:
|
||||
eventsToLog.push_back("dialogic_002")
|
||||
|
||||
|
||||
scrollToBottom = get_parent().settings.get_value("history", "history_scroll_to_bottom", true)
|
||||
reverseTimeline = get_parent().settings.get_value("history", "history_reverse_timeline", false)
|
||||
characterNameColorOn = get_parent().settings.get_value("history", "history_name_color_on", true)
|
||||
lineBreakAfterName = get_parent().settings.get_value("history", "history_break_after_name", false)
|
||||
|
||||
|
||||
|
||||
var button_anchor = int(get_parent().settings.get_value("history", "history_button_position", 2))
|
||||
var screen_margin_x = get_parent().settings.get_value("history", "history_screen_margin_x", 0)
|
||||
var screen_margin_y = get_parent().settings.get_value("history", "history_screen_margin_y", 0)
|
||||
var container_margin_X = get_parent().settings.get_value("history", "history_container_margin_x", 0)
|
||||
var container_margin_y = get_parent().settings.get_value("history", "history_container_margin_y", 0)
|
||||
|
||||
HistoryPopup.margin_left = screen_margin_x
|
||||
HistoryPopup.margin_right = - screen_margin_x
|
||||
HistoryPopup.margin_top = screen_margin_y
|
||||
HistoryPopup.margin_bottom = - screen_margin_y - 50
|
||||
|
||||
ScrollHistoryContainer.margin_left = container_margin_X
|
||||
ScrollHistoryContainer.margin_right = - container_margin_X
|
||||
ScrollHistoryContainer.margin_top = container_margin_y
|
||||
ScrollHistoryContainer.margin_bottom = - container_margin_y
|
||||
|
||||
for button in [HistoryButton, CloseButton]:
|
||||
if button == null:
|
||||
continue
|
||||
continue;
|
||||
var reference = button.get_parent().rect_size
|
||||
|
||||
|
||||
button.connect("focus_entered", get_parent(), "_on_option_hovered", [button])
|
||||
button.connect("mouse_entered", get_parent(), "_on_option_focused")
|
||||
|
||||
|
||||
var anchor_values = [0, 0, 1, 1]
|
||||
var position_offset = Vector2(0, 0)
|
||||
|
||||
|
||||
if button_anchor == 0:
|
||||
anchor_values = [0, 0, 0, 0]
|
||||
position_offset.x = 0
|
||||
position_offset.y = 0
|
||||
|
||||
elif button_anchor == 1:
|
||||
anchor_values = [0.5, 0, 0.5, 0]
|
||||
position_offset.x = reference.x / 2 - button.rect_size.x
|
||||
position_offset.y = 0
|
||||
|
||||
elif button_anchor == 2:
|
||||
anchor_values = [1, 0, 1, 0]
|
||||
position_offset.x = reference.x - button.rect_size.x
|
||||
position_offset.y = 0
|
||||
|
||||
|
||||
elif button_anchor == 4:
|
||||
anchor_values = [0, 0.5, 0, 0.5]
|
||||
position_offset.x = 0
|
||||
position_offset.y = reference.y / 2 - button.rect_size.y
|
||||
|
||||
elif button_anchor == 5:
|
||||
anchor_values = [0.5, 0.5, 0.5, 0.5]
|
||||
position_offset.x = reference.x / 2 - button.rect_size.x
|
||||
position_offset.y = reference.y / 2 - button.rect_size.y
|
||||
|
||||
elif button_anchor == 6:
|
||||
anchor_values = [1, 0.5, 1, 0.5]
|
||||
position_offset.x = reference.x - button.rect_size.x
|
||||
position_offset.y = reference.y / 2 - button.rect_size.y
|
||||
|
||||
elif button_anchor == 8:
|
||||
anchor_values = [0, 1, 0, 1]
|
||||
position_offset.x = 0
|
||||
position_offset.y = reference.y - button.rect_size.y
|
||||
elif button_anchor == 9:
|
||||
anchor_values = [0.5, 1, 0.5, 1]
|
||||
position_offset.x = reference.x / 2 - button.rect_size.x
|
||||
position_offset.y = reference.y - button.rect_size.y
|
||||
elif button_anchor == 10:
|
||||
anchor_values = [1, 1, 1, 1]
|
||||
position_offset.x = reference.x - button.rect_size.x
|
||||
position_offset.y = reference.y - button.rect_size.y
|
||||
|
||||
button.anchor_left = anchor_values[0]
|
||||
button.anchor_top = anchor_values[1]
|
||||
button.anchor_right = anchor_values[2]
|
||||
button.anchor_bottom = anchor_values[3]
|
||||
|
||||
button.rect_global_position = button.get_parent().rect_global_position + position_offset
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
func add_history_row_event(eventData, DialogNode, historyContainer):
|
||||
|
||||
if not eventsToLog.has(eventData.event_id) or (eventData.event_id == "dialogic_002" and eventData.get("type") == 2):
|
||||
return
|
||||
|
||||
if eventData.event_id == "dialogic_002":
|
||||
return
|
||||
|
||||
var newHistoryRow = HistoryRow.instance()
|
||||
HistoryTimeline.add_child(newHistoryRow)
|
||||
if (reverseTimeline):
|
||||
HistoryTimeline.move_child(newHistoryRow, 0)
|
||||
if newHistoryRow.has_method("load_theme") and get_parent().settings.get_value("history", "enable_dynamic_theme", false) == true:
|
||||
newHistoryRow.load_theme(curTheme)
|
||||
|
||||
if not SettingsSingleton.GetDefaultTheme():
|
||||
var textColor = Color(SettingsSingleton.GetTextColor());
|
||||
newHistoryRow.get_node("HBoxContainer/RichTextLabel").set("custom_colors/default_color", textColor);
|
||||
|
||||
var characterPrefix = ""
|
||||
if eventData.has("character") and eventData.character != "":
|
||||
var characterData = DialogicUtil.get_character(eventData.character)
|
||||
var characterName = characterData.get("name", "")
|
||||
if eventData.has("character") and eventData.character == "[All]":
|
||||
characterPrefix = str("Everyone")
|
||||
elif characterData.data.get("display_name_bool", false) == true:
|
||||
characterName = characterData.data.get("display_name", "")
|
||||
|
||||
if characterName != "":
|
||||
var charDelimiter = get_parent().settings.get_value("history", "history_character_delimiter", "")
|
||||
var parsed_name = DialogicParser.parse_definitions(get_parent(), characterName, true, false)
|
||||
|
||||
var charNameTr = LanguageLocalization.GetDialogicNames();
|
||||
parsed_name = tr(charNameTr[parsed_name]);
|
||||
|
||||
var characterColor = characterData.data.get("color", Color.white)
|
||||
if ( not characterNameColorOn):
|
||||
characterColor = Color.white
|
||||
|
||||
|
||||
if characterColor == "#ff0f0a0a":
|
||||
characterColor = "#ff8f8f8f"
|
||||
|
||||
var lineBreak = ""
|
||||
if (lineBreakAfterName):
|
||||
lineBreak = "\n"
|
||||
|
||||
characterPrefix = str("[color=", characterColor, "]", parsed_name, "[/color]", charDelimiter, " ", lineBreak)
|
||||
|
||||
var audioData = ""
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if eventData.event_id == "dialogic_001":
|
||||
var parsedDefinitions = DialogicParser._insert_variable_definitions(DialogNode, eventData.text)
|
||||
if parsedDefinitions != "":
|
||||
if not AlreadyInHistory(parsedDefinitions, historyContainer):
|
||||
newHistoryRow.add_history(str(characterPrefix, parsedDefinitions), audioData)
|
||||
else :
|
||||
HistoryTimeline.remove_child(newHistoryRow);
|
||||
|
||||
elif eventData.event_id == "dialogic_002":
|
||||
return ;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
elif eventData.event_id == "dialogic_010":
|
||||
|
||||
var choiceString = ""
|
||||
if eventData.question != "":
|
||||
eventData.question = tr(eventData.question);
|
||||
newHistoryRow.add_history(str(characterPrefix, eventData.question), audioData)
|
||||
choiceString += "\n";
|
||||
|
||||
if eventData.has("options") and get_parent().settings.get_value("history", "log_choices", true):
|
||||
choiceString += " "
|
||||
for choice in eventData["options"]:
|
||||
if ShouldAddChoice(choice, DialogNode):
|
||||
choiceString = str(choiceString, "[", choice.label, "] ")
|
||||
newHistoryRow.add_history(choiceString, audioData)
|
||||
lastQuestionNode = newHistoryRow
|
||||
|
||||
func ShouldAddChoice(option:Dictionary, DialogNode):
|
||||
if not option["definition"].empty():
|
||||
var def_value = null
|
||||
for d in DialogNode.definitions["variables"]:
|
||||
if d["id"] == option["definition"]:
|
||||
def_value = d["value"]
|
||||
return def_value != null and DialogicUtil.compare_definitions(def_value, option["value"], option["condition"]);
|
||||
else :
|
||||
return true
|
||||
|
||||
func AlreadyInHistory(text:String, historyContainer):
|
||||
for i in historyContainer.get_children():
|
||||
var lol = i.get_node("HBoxContainer/RichTextLabel").text;
|
||||
if lol == text:
|
||||
return true;
|
||||
return false;
|
||||
|
||||
|
||||
func add_answer_to_question(stringData):
|
||||
if lastQuestionNode != null:
|
||||
lastQuestionNode.add_history(str("\n ", stringData), lastQuestionNode.audioPath)
|
||||
lastQuestionNode = null
|
||||
|
||||
|
||||
func change_theme(newTheme:ConfigFile):
|
||||
if get_parent().settings.get_value("history", "enable_dynamic_theme", false):
|
||||
curTheme = newTheme
|
||||
|
||||
|
||||
func load_theme(theme:ConfigFile):
|
||||
curTheme = theme
|
||||
|
||||
|
||||
func _on_audio_trigger(audioFilepath):
|
||||
HistoryAudio.stream = load(audioFilepath)
|
||||
HistoryAudio.play()
|
||||
|
||||
|
||||
func _on_HistoryPopup_popup_hide():
|
||||
HistoryAudio.stop()
|
||||
|
||||
|
||||
func _on_HistoryPopup_about_to_show():
|
||||
if HistoryButton != null:
|
||||
scrollToggle = true
|
||||
|
||||
HistoryButton.hide()
|
||||
|
||||
|
||||
|
||||
func _on_HistoryButton_mouse_entered():
|
||||
is_mouse_on_button = true
|
||||
|
||||
|
||||
func _on_HistoryButton_mouse_exited():
|
||||
is_mouse_on_button = false
|
||||
|
||||
|
||||
func history_advance_block()->bool:
|
||||
return is_mouse_on_button or is_history_open
|
||||
|
||||
|
||||
|
||||
func _on_toggle_history():
|
||||
var textColor = Color.white
|
||||
var backColor = Color.black
|
||||
var backNode = get_node("HistoryPopup/ScrollHistoryContainer/MarginContainer/HistoryTimeline")
|
||||
if SettingsSingleton.GetDefaultTheme():
|
||||
for i in backNode.get_children():
|
||||
i.get_child(1).texture = load("res://addons/dialogic/Example Assets/backgrounds/background-2.png")
|
||||
i.get_child(1).modulate = Color.white
|
||||
else :
|
||||
textColor = SettingsSingleton.GetTextColor()
|
||||
backColor = SettingsSingleton.GetBackgroundColor()
|
||||
|
||||
for i in backNode.get_children():
|
||||
i.get_child(1).texture = load("res://addons/dialogic/Example Assets/backgrounds/background-white.png")
|
||||
i.get_child(1).modulate = backColor
|
||||
|
||||
if HistoryPopup.visible == false:
|
||||
_on_HistoryPopup_about_to_show()
|
||||
HistoryPopup.show()
|
||||
$HistoryButton.show();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
is_history_open = true
|
||||
is_mouse_on_button = false
|
||||
else :
|
||||
_on_HistoryPopup_popup_hide()
|
||||
HistoryPopup.hide()
|
||||
$HistoryButton.hide();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
is_history_open = false
|
||||
is_mouse_on_button = false
|
||||
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue