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:
2025-10-08 09:34:58 +00:00
parent 7b949c5cb8
commit 3807ac652c
19 changed files with 1128 additions and 461 deletions

View File

@@ -58,10 +58,10 @@ MonoBehaviour:
m_LocalSubgraphs: []
m_LastKnownBounds:
serializedVersion: 2
x: 115
y: 7
width: 3353
height: 399
x: -36
y: 12
width: 3787.2
height: 559.19995
m_GraphElementMetaData:
- m_Guid:
m_Value0: 15250916379536742066
@@ -237,7 +237,7 @@ MonoBehaviour:
serializedVersion: 2
Hash: b25679f5a423a6d30df98cd989cabcf0
m_Version: 2
m_Position: {x: 303.87872, y: 210.33638}
m_Position: {x: 152.62463, y: 208.7273}
m_Title:
m_Tooltip:
m_NodePreviewModel:
@@ -280,7 +280,7 @@ MonoBehaviour:
serializedVersion: 2
Hash: 4c15a501ab0b3876663348bd143a160c
m_Version: 2
m_Position: {x: 115.3345, y: 263.23343}
m_Position: {x: -35.919586, y: 261.62433}
m_Title: SpeakerName
m_Tooltip:
m_NodePreviewModel:
@@ -376,7 +376,7 @@ MonoBehaviour:
serializedVersion: 2
Hash: 63e5eb3c34667babc753a8b79a9a6d99
m_Version: 2
m_Position: {x: 513.6555, y: 168.80977}
m_Position: {x: 362.40143, y: 167.20068}
m_Title:
m_Tooltip:
m_NodePreviewModel:
@@ -386,13 +386,13 @@ MonoBehaviour:
m_KeyList:
- __option_DialogueLineType
- __option_NoLines
- DefaultDialogueLine
- LoopThroughDefaultLines
- DefaultDialogueContent
m_ValueList:
- rid: 1226592702090707077
- rid: 1226592702090707078
- rid: 1226592702090707079
- rid: 1226592702090707080
- rid: 7545629632211976303
m_InputPortInfos:
expandedPortsById:
m_KeyList: []
@@ -423,10 +423,6 @@ MonoBehaviour:
type: {class: 'Constant`1[[System.Int32, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: 1
- rid: 1226592702090707079
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: Psst boy... Why don't you pick up THAT ASS over there?
- rid: 1226592702090707080
type: {class: 'Constant`1[[System.Boolean, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
@@ -476,7 +472,7 @@ MonoBehaviour:
serializedVersion: 2
Hash: d897c8a6890a4ec4f5f614a0a23bfb0b
m_Version: 2
m_Position: {x: 906.1956, y: 144.21957}
m_Position: {x: 832.17773, y: 142.61052}
m_Title:
m_Tooltip:
m_NodePreviewModel:
@@ -487,18 +483,18 @@ MonoBehaviour:
- __option_DialogueLineType
- __option_NoLines
- RequiredPickup
- DefaultDialogueLine2
- LoopThroughDefaultLines
- DefaultDialogueLine1
- DefaultDialogueLine3
- DefaultDialogueContent1
- DefaultDialogueContent2
- DefaultDialogueContent3
m_ValueList:
- rid: 1226592702090707084
- rid: 1226592702090707085
- rid: 1226592702090707086
- rid: 1226592702090707092
- rid: 1226592702090707088
- rid: 1226592702090707091
- rid: 1226592702090707093
- rid: 7545629632211976304
- rid: 7545629632211976305
- rid: 7545629632211976306
m_InputPortInfos:
expandedPortsById:
m_KeyList: []
@@ -572,18 +568,6 @@ MonoBehaviour:
m_PortDirection: 1
m_PortOrientation: 0
m_Title: in
- rid: 1226592702090707091
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: I said pick it up!
- rid: 1226592702090707092
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: Cmon, don't be like this!
- rid: 1226592702090707093
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: The ass is waiting there for you!
- rid: 1226592702090707099
type: {class: UserNodeModelImp, ns: Unity.GraphToolkit.Editor.Implementation, asm: Unity.GraphToolkit.Editor}
data:
@@ -594,7 +578,7 @@ MonoBehaviour:
serializedVersion: 2
Hash: 3b750432bd23177050f4f1fac360a6c3
m_Version: 2
m_Position: {x: 1376.4679, y: 141.66953}
m_Position: {x: 1300.841, y: 142.06729}
m_Title: DialogueNode
m_Tooltip:
m_NodePreviewModel:
@@ -605,14 +589,14 @@ MonoBehaviour:
- __option_DialogueLineType
- __option_NoLines
- LoopThroughDefaultLines
- DefaultDialogueLine1
- DefaultDialogueLine2
- DefaultDialogueContent1
- DefaultDialogueContent2
m_ValueList:
- rid: 1226592702090707100
- rid: 1226592702090707101
- rid: 1226592702090707103
- rid: 1226592702090707106
- rid: 1226592702090707107
- rid: 7545629632211976307
- rid: 7545629632211976308
m_InputPortInfos:
expandedPortsById:
m_KeyList: []
@@ -682,14 +666,6 @@ MonoBehaviour:
m_PortDirection: 1
m_PortOrientation: 0
m_Title: in
- rid: 1226592702090707106
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: Ohhhh yeah, that's the stuff.
- rid: 1226592702090707107
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: Now, go on, chop it!
- rid: 1226592736610877523
type: {class: UserNodeModelImp, ns: Unity.GraphToolkit.Editor.Implementation, asm: Unity.GraphToolkit.Editor}
data:
@@ -700,7 +676,7 @@ MonoBehaviour:
serializedVersion: 2
Hash: f3e06bfaeec3029fe7bcecfcb7e96ae8
m_Version: 2
m_Position: {x: 1763.6455, y: 116.19321}
m_Position: {x: 1771.6909, y: 116.19321}
m_Title:
m_Tooltip:
m_NodePreviewModel:
@@ -711,14 +687,14 @@ MonoBehaviour:
- __option_DialogueLineType
- __option_NoLines
- RequiredResultItem
- DefaultDialogueLine
- LoopThroughDefaultLines
- DefaultDialogueContent
m_ValueList:
- rid: 1226592736610877524
- rid: 1226592736610877525
- rid: 1226592736610877526
- rid: 1226592736610877527
- rid: 1226592736610877528
- rid: 7545629632211976309
m_InputPortInfos:
expandedPortsById:
m_KeyList: []
@@ -753,14 +729,10 @@ MonoBehaviour:
type: {class: 'Constant`1[[PickupItemData, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: {fileID: 11400000, guid: ecae2d83a5ab2a047a2733ebff607380, type: 2}
- rid: 1226592736610877527
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: I need my meat :(
- rid: 1226592736610877528
type: {class: 'Constant`1[[System.Boolean, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: 1
m_Value: 0
- rid: 1226592736610877529
type: {class: WaitOnCombination, ns: Editor.Dialogue, asm: AppleHillsEditor}
data:
@@ -817,12 +789,12 @@ MonoBehaviour:
- __option_DialogueLineType
- __option_NoLines
- LoopThroughDefaultLines
- DefaultDialogueLine
- DefaultDialogueContent
m_ValueList:
- rid: 1226592736610877538
- rid: 1226592736610877539
- rid: 1226592736610877540
- rid: 1226592736610877545
- rid: 7545629632211976310
m_InputPortInfos:
expandedPortsById:
m_KeyList: []
@@ -892,10 +864,6 @@ MonoBehaviour:
m_PortDirection: 1
m_PortOrientation: 0
m_Title: in
- rid: 1226592736610877545
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: Nice, that's the stuff! Now go cook it for me!
- rid: 1226592736610877546
type: {class: UserNodeModelImp, ns: Unity.GraphToolkit.Editor.Implementation, asm: Unity.GraphToolkit.Editor}
data:
@@ -906,7 +874,7 @@ MonoBehaviour:
serializedVersion: 2
Hash: 69712d8f46502fa577433f59c2c1f85c
m_Version: 2
m_Position: {x: 2650.1987, y: 6.86882}
m_Position: {x: 2752.9822, y: 11.763229}
m_Title:
m_Tooltip:
m_NodePreviewModel:
@@ -921,12 +889,12 @@ MonoBehaviour:
- __option_ForbiddenItemDialogueLineType
- __option_ForbiddenItemNoLines
- RequiredSlot
- DefaultDialogueLine
- LoopThroughDefaultLines
- IncorrectItemDialogueLine
- LoopThroughIncorrectItemLines
- ForbiddenItemDialogueLine
- LoopThroughForbiddenItemLines
- DefaultDialogueContent
- IncorrectItemDialogueContent
- ForbiddenItemDialogueContent
m_ValueList:
- rid: 1226592736610877547
- rid: 1226592736610877548
@@ -935,12 +903,12 @@ MonoBehaviour:
- rid: 1226592736610877551
- rid: 1226592736610877552
- rid: 1226592736610877553
- rid: 1226592736610877554
- rid: 1226592736610877555
- rid: 1226592736610877556
- rid: 1226592736610877557
- rid: 1226592736610877558
- rid: 1226592736610877559
- rid: 7545629632211976311
- rid: 7545629632211976312
- rid: 7545629632211976313
m_InputPortInfos:
expandedPortsById:
m_KeyList: []
@@ -1005,30 +973,18 @@ MonoBehaviour:
type: {class: 'Constant`1[[PickupItemData, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: {fileID: 11400000, guid: e0fad48a84a6b6346ac17c84bc512500, type: 2}
- rid: 1226592736610877554
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: Cmon, it's not gonna cook itself!
- rid: 1226592736610877555
type: {class: 'Constant`1[[System.Boolean, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: 1
- rid: 1226592736610877556
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: What do you think you're cooking?!
- rid: 1226592736610877557
type: {class: 'Constant`1[[System.Boolean, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: 1
- rid: 1226592736610877558
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value:
- rid: 1226592736610877559
type: {class: 'Constant`1[[System.Boolean, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: 0
m_Value: 1
- rid: 1226592736610877560
type: {class: WaitOnSlot, ns: Editor.Dialogue, asm: AppleHillsEditor}
data:
@@ -1074,7 +1030,7 @@ MonoBehaviour:
serializedVersion: 2
Hash: 91bec6fb97b9d7d954d9847f1c7dfdce
m_Version: 2
m_Position: {x: 3164.9407, y: 88.21074}
m_Position: {x: 3317.6943, y: 96.60597}
m_Title: DialogueNode
m_Tooltip:
m_NodePreviewModel:
@@ -1085,12 +1041,12 @@ MonoBehaviour:
- __option_DialogueLineType
- __option_NoLines
- LoopThroughDefaultLines
- DefaultDialogueLine
- DefaultDialogueContent
m_ValueList:
- rid: 1226592736610877568
- rid: 1226592736610877569
- rid: 1226592736610877570
- rid: 1226592736610877571
- rid: 7545629632211976314
m_InputPortInfos:
expandedPortsById:
m_KeyList: []
@@ -1125,10 +1081,6 @@ MonoBehaviour:
type: {class: 'Constant`1[[System.Boolean, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: 0
- rid: 1226592736610877571
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: Sweat, delicions steak!
- rid: 1226592736610877572
type: {class: DialogueNode, ns: Editor.Dialogue, asm: AppleHillsEditor}
data:
@@ -1164,3 +1116,87 @@ MonoBehaviour:
m_PortDirection: 1
m_PortOrientation: 0
m_Title: in
- rid: 7545629632211976303
type: {class: 'Constant`1[[Dialogue.DialogueContent, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value:
_contentType: 0
_text: Hey boy, go on and pick up that ass over there!
_image: {fileID: 0}
- rid: 7545629632211976304
type: {class: 'Constant`1[[Dialogue.DialogueContent, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value:
_contentType: 0
_text: "Go on, it's right there!\t\t"
_image: {fileID: 0}
- rid: 7545629632211976305
type: {class: 'Constant`1[[Dialogue.DialogueContent, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value:
_contentType: 0
_text: I need ASS!
_image: {fileID: 0}
- rid: 7545629632211976306
type: {class: 'Constant`1[[Dialogue.DialogueContent, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value:
_contentType: 0
_text: C'mon, don't be like this!
_image: {fileID: 0}
- rid: 7545629632211976307
type: {class: 'Constant`1[[Dialogue.DialogueContent, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value:
_contentType: 0
_text: Yessss, that's the stuff, now chop it!
_image: {fileID: 0}
- rid: 7545629632211976308
type: {class: 'Constant`1[[Dialogue.DialogueContent, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value:
_contentType: 1
_text:
_image: {fileID: 6282751622250221668, guid: 204325ac88be74d4d882a078c64cf5e1, type: 3}
- rid: 7545629632211976309
type: {class: 'Constant`1[[Dialogue.DialogueContent, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value:
_contentType: 0
_text: Chop it!!
_image: {fileID: 0}
- rid: 7545629632211976310
type: {class: 'Constant`1[[Dialogue.DialogueContent, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value:
_contentType: 0
_text: Good, shit now cook!
_image: {fileID: 0}
- rid: 7545629632211976311
type: {class: 'Constant`1[[Dialogue.DialogueContent, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value:
_contentType: 1
_text:
_image: {fileID: 6282751622250221668, guid: 204325ac88be74d4d882a078c64cf5e1, type: 3}
- rid: 7545629632211976312
type: {class: 'Constant`1[[Dialogue.DialogueContent, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value:
_contentType: 0
_text: What exactly are you cooking?!
_image: {fileID: 0}
- rid: 7545629632211976313
type: {class: 'Constant`1[[Dialogue.DialogueContent, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value:
_contentType: 0
_text: What exactly are you cooking?!
_image: {fileID: 0}
- rid: 7545629632211976314
type: {class: 'Constant`1[[Dialogue.DialogueContent, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value:
_contentType: 0
_text: Yessssss, thanks!
_image: {fileID: 0}