Add support for images in dialogue windows (#19)
- Extend editor nodes with custom DialogueContent data type that holds either image or text - Extend the dialogue importer to correctly process the new content into updated RuntimeDialogue content - Update SpeechBubble to be able to display either text or image - Add a custom property drawer for the DialogueContent to allow easy switching in graph authoring Co-authored-by: Michal Pikulski <michal@foolhardyhorizons.com> Reviewed-on: #19
This commit is contained in:
@@ -111,24 +111,42 @@ namespace Editor.Dialogue
|
||||
var lineCountOption = node.GetNodeOptionByName("NoLines");
|
||||
lineCountOption.TryGetValue<int>(out var lineCount);
|
||||
|
||||
// Process dialogue lines based on line type
|
||||
// Process dialogue content
|
||||
if (lineType == DialogueType.SayMultipleLines)
|
||||
{
|
||||
for (var i = 0; i < lineCount; i++)
|
||||
{
|
||||
var lineValue = GetPortValue<string>(node.GetInputPortByName($"DefaultDialogueLine{i + 1}"));
|
||||
if (!string.IsNullOrEmpty(lineValue))
|
||||
var contentPort = node.GetInputPortByName($"DefaultDialogueContent{i + 1}");
|
||||
var contentValue = GetPortValue<DialogueContent>(contentPort);
|
||||
|
||||
if (contentValue != null)
|
||||
{
|
||||
runtimeNode.dialogueLines.Add(lineValue);
|
||||
// Add to dialogueContent list
|
||||
runtimeNode.dialogueContent.Add(contentValue);
|
||||
|
||||
// Also add to legacy dialogueLines list for backward compatibility
|
||||
if (contentValue.ContentType == DialogueContentType.Text && !string.IsNullOrEmpty(contentValue.Text))
|
||||
{
|
||||
runtimeNode.dialogueLines.Add(contentValue.Text);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var lineValue = GetPortValue<string>(node.GetInputPortByName("DefaultDialogueLine"));
|
||||
if (!string.IsNullOrEmpty(lineValue))
|
||||
var contentPort = node.GetInputPortByName("DefaultDialogueContent");
|
||||
var contentValue = GetPortValue<DialogueContent>(contentPort);
|
||||
|
||||
if (contentValue != null)
|
||||
{
|
||||
runtimeNode.dialogueLines.Add(lineValue);
|
||||
// Add to dialogueContent list
|
||||
runtimeNode.dialogueContent.Add(contentValue);
|
||||
|
||||
// Also add to legacy dialogueLines list for backward compatibility
|
||||
if (contentValue.ContentType == DialogueContentType.Text && !string.IsNullOrEmpty(contentValue.Text))
|
||||
{
|
||||
runtimeNode.dialogueLines.Add(contentValue.Text);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -169,60 +187,98 @@ namespace Editor.Dialogue
|
||||
runtimeNode.slotItemID = slot.itemId;
|
||||
}
|
||||
|
||||
// Process incorrect item lines
|
||||
// Get line type and count options for incorrect items
|
||||
var incorrectItemLineTypeOption = node.GetNodeOptionByName("IncorrectItemDialogueLineType");
|
||||
incorrectItemLineTypeOption.TryGetValue<DialogueType>(out var incorrectItemLineType);
|
||||
|
||||
var incorrectItemLineCountOption = node.GetNodeOptionByName("IncorrectItemNoLines");
|
||||
incorrectItemLineCountOption.TryGetValue<int>(out var incorrectItemLineCount);
|
||||
|
||||
// Process incorrect item content
|
||||
if (incorrectItemLineType == DialogueType.SayMultipleLines)
|
||||
{
|
||||
for (var i = 0; i < incorrectItemLineCount; i++)
|
||||
{
|
||||
var lineValue = GetPortValue<string>(node.GetInputPortByName($"IncorrectItemDialogueLine{i + 1}"));
|
||||
if (!string.IsNullOrEmpty(lineValue))
|
||||
var contentPort = node.GetInputPortByName($"IncorrectItemDialogueContent{i + 1}");
|
||||
var contentValue = GetPortValue<DialogueContent>(contentPort);
|
||||
|
||||
if (contentValue != null)
|
||||
{
|
||||
runtimeNode.incorrectItemLines.Add(lineValue);
|
||||
// Add to incorrectItemContent list
|
||||
runtimeNode.incorrectItemContent.Add(contentValue);
|
||||
|
||||
// Also add to legacy incorrectItemLines list for backward compatibility
|
||||
if (contentValue.ContentType == DialogueContentType.Text && !string.IsNullOrEmpty(contentValue.Text))
|
||||
{
|
||||
runtimeNode.incorrectItemLines.Add(contentValue.Text);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var lineValue = GetPortValue<string>(node.GetInputPortByName("IncorrectItemDialogueLine"));
|
||||
if (!string.IsNullOrEmpty(lineValue))
|
||||
var contentPort = node.GetInputPortByName("IncorrectItemDialogueContent");
|
||||
var contentValue = GetPortValue<DialogueContent>(contentPort);
|
||||
|
||||
if (contentValue != null)
|
||||
{
|
||||
runtimeNode.incorrectItemLines.Add(lineValue);
|
||||
// Add to incorrectItemContent list
|
||||
runtimeNode.incorrectItemContent.Add(contentValue);
|
||||
|
||||
// Also add to legacy incorrectItemLines list for backward compatibility
|
||||
if (contentValue.ContentType == DialogueContentType.Text && !string.IsNullOrEmpty(contentValue.Text))
|
||||
{
|
||||
runtimeNode.incorrectItemLines.Add(contentValue.Text);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
runtimeNode.loopThroughIncorrectLines =
|
||||
GetPortValue<bool>(node.GetInputPortByName("LoopThroughIncorrectItemLines"));
|
||||
|
||||
// Process forbidden item lines
|
||||
// Get line type and count options for forbidden items
|
||||
var forbiddenItemLineTypeOption = node.GetNodeOptionByName("ForbiddenItemDialogueLineType");
|
||||
forbiddenItemLineTypeOption.TryGetValue<DialogueType>(out var forbiddenItemLineType);
|
||||
|
||||
var forbiddenItemLineCountOption = node.GetNodeOptionByName("ForbiddenItemNoLines");
|
||||
forbiddenItemLineCountOption.TryGetValue<int>(out var forbiddenItemLineCount);
|
||||
|
||||
// Process forbidden item content
|
||||
if (forbiddenItemLineType == DialogueType.SayMultipleLines)
|
||||
{
|
||||
for (var i = 0; i < forbiddenItemLineCount; i++)
|
||||
{
|
||||
var lineValue = GetPortValue<string>(node.GetInputPortByName($"ForbiddenItemDialogueLine{i + 1}"));
|
||||
if (!string.IsNullOrEmpty(lineValue))
|
||||
var contentPort = node.GetInputPortByName($"ForbiddenItemDialogueContent{i + 1}");
|
||||
var contentValue = GetPortValue<DialogueContent>(contentPort);
|
||||
|
||||
if (contentValue != null)
|
||||
{
|
||||
runtimeNode.forbiddenItemLines.Add(lineValue);
|
||||
// Add to forbiddenItemContent list
|
||||
runtimeNode.forbiddenItemContent.Add(contentValue);
|
||||
|
||||
// Also add to legacy forbiddenItemLines list for backward compatibility
|
||||
if (contentValue.ContentType == DialogueContentType.Text && !string.IsNullOrEmpty(contentValue.Text))
|
||||
{
|
||||
runtimeNode.forbiddenItemLines.Add(contentValue.Text);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var lineValue = GetPortValue<string>(node.GetInputPortByName("ForbiddenItemDialogueLine"));
|
||||
if (!string.IsNullOrEmpty(lineValue))
|
||||
var contentPort = node.GetInputPortByName("ForbiddenItemDialogueContent");
|
||||
var contentValue = GetPortValue<DialogueContent>(contentPort);
|
||||
|
||||
if (contentValue != null)
|
||||
{
|
||||
runtimeNode.forbiddenItemLines.Add(lineValue);
|
||||
// Add to forbiddenItemContent list
|
||||
runtimeNode.forbiddenItemContent.Add(contentValue);
|
||||
|
||||
// Also add to legacy forbiddenItemLines list for backward compatibility
|
||||
if (contentValue.ContentType == DialogueContentType.Text && !string.IsNullOrEmpty(contentValue.Text))
|
||||
{
|
||||
runtimeNode.forbiddenItemLines.Add(contentValue.Text);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -259,4 +315,4 @@ namespace Editor.Dialogue
|
||||
return fallbackValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user