Mostly working, double invocation of dialogue progression

This commit is contained in:
Michal Pikulski
2025-09-29 00:15:58 +02:00
parent 02031335e3
commit e6cb55975c
9 changed files with 717 additions and 16 deletions

View File

@@ -35,11 +35,19 @@ MonoBehaviour:
- rid: 1226592702090707076
- rid: 1226592702090707083
- rid: 1226592702090707099
- rid: 1226592736610877523
- rid: 1226592736610877537
- rid: 1226592736610877546
- rid: 1226592736610877567
m_GraphWireModels:
- rid: 1226592702090707073
- rid: 1226592702090707082
- rid: 1226592702090707090
- rid: 1226592702090707105
- rid: 1226592736610877530
- rid: 1226592736610877544
- rid: 1226592736610877561
- rid: 1226592736610877573
m_GraphStickyNoteModels: []
m_GraphPlacematModels: []
m_GraphVariableModels:
@@ -51,9 +59,9 @@ MonoBehaviour:
m_LastKnownBounds:
serializedVersion: 2
x: 114
y: 142
width: 1607
height: 264
y: 7
width: 3396
height: 399
m_GraphElementMetaData:
- m_Guid:
m_Value0: 15250916379536742066
@@ -135,6 +143,70 @@ MonoBehaviour:
Hash: 9add04e2cf7a6fe9863821265f060194
m_Category: 2
m_Index: 3
- m_Guid:
m_Value0: 11457935833154969843
m_Value1: 16747455140762270951
m_HashGuid:
serializedVersion: 2
Hash: f3e06bfaeec3029fe7bcecfcb7e96ae8
m_Category: 0
m_Index: 5
- m_Guid:
m_Value0: 501849774702942952
m_Value1: 8676393820580818817
m_HashGuid:
serializedVersion: 2
Hash: e85ac70fb6edf606812f1dd735be6878
m_Category: 2
m_Index: 4
- m_Guid:
m_Value0: 17256973715067882500
m_Value1: 10728149715493522551
m_HashGuid:
serializedVersion: 2
Hash: 04ccdf9829167def770c3379530be294
m_Category: 0
m_Index: 6
- m_Guid:
m_Value0: 3030296286289964743
m_Value1: 18075108795397583455
m_HashGuid:
serializedVersion: 2
Hash: c7ae7fcc6ac60d2a5f3236f2aeafd7fa
m_Category: 2
m_Index: 5
- m_Guid:
m_Value0: 11902820604143563113
m_Value1: 6699317486178747255
m_HashGuid:
serializedVersion: 2
Hash: 69712d8f46502fa577433f59c2c1f85c
m_Category: 0
m_Index: 7
- m_Guid:
m_Value0: 17109984303824179380
m_Value1: 18426165488533823493
m_HashGuid:
serializedVersion: 2
Hash: b410f35d12e072ed05e09ec4e2e3b6ff
m_Category: 2
m_Index: 6
- m_Guid:
m_Value0: 15697219088638459537
m_Value1: 14915215102272919892
m_HashGuid:
serializedVersion: 2
Hash: 91bec6fb97b9d7d954d9847f1c7dfdce
m_Category: 0
m_Index: 8
- m_Guid:
m_Value0: 15649196733664619169
m_Value1: 156168040659544779
m_HashGuid:
serializedVersion: 2
Hash: a16a482a841d2dd9cbeac76c01d22a02
m_Category: 2
m_Index: 7
m_EntryPoint:
rid: 1226592702090707069
m_Graph:
@@ -618,3 +690,477 @@ MonoBehaviour:
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:
m_Guid:
m_Value0: 11457935833154969843
m_Value1: 16747455140762270951
m_HashGuid:
serializedVersion: 2
Hash: f3e06bfaeec3029fe7bcecfcb7e96ae8
m_Version: 2
m_Position: {x: 1763.6455, y: 116.19321}
m_Title:
m_Tooltip:
m_NodePreviewModel:
rid: -2
m_State: 0
m_InputConstantsById:
m_KeyList:
- __option_DialogueLineType
- __option_NoLines
- RequiredResultItem
- DefaultDialogueLine
- LoopThroughDefaultLines
m_ValueList:
- rid: 1226592736610877524
- rid: 1226592736610877525
- rid: 1226592736610877526
- rid: 1226592736610877527
- rid: 1226592736610877528
m_InputPortInfos:
expandedPortsById:
m_KeyList: []
m_ValueList:
m_OutputPortInfos:
expandedPortsById:
m_KeyList: []
m_ValueList:
m_Collapsed: 0
m_CurrentModeIndex: 0
m_ElementColor:
m_Color: {r: 0, g: 0, b: 0, a: 0}
m_HasUserColor: 0
m_Node:
rid: 1226592736610877529
- rid: 1226592736610877524
type: {class: EnumConstant, ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value:
m_EnumType:
m_Identification: Editor.Dialogue.DialogueType, AppleHillsEditor, Version=0.0.0.0,
Culture=neutral, PublicKeyToken=null
m_Value: 0
m_EnumType:
m_Identification: Editor.Dialogue.DialogueType, AppleHillsEditor, Version=0.0.0.0,
Culture=neutral, PublicKeyToken=null
- rid: 1226592736610877525
type: {class: 'Constant`1[[System.Int32, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: 1
- rid: 1226592736610877526
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
- rid: 1226592736610877529
type: {class: WaitOnCombination, ns: Editor.Dialogue, asm: AppleHillsEditor}
data:
- rid: 1226592736610877530
type: {class: WireModel, ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Guid:
m_Value0: 501849774702942952
m_Value1: 8676393820580818817
m_HashGuid:
serializedVersion: 2
Hash: e85ac70fb6edf606812f1dd735be6878
m_Version: 2
m_FromPortReference:
m_NodeModelGuid:
m_Value0: 8076963752207217979
m_Value1: 14098062078374966352
m_NodeModelHashGuid:
serializedVersion: 2
Hash: 3b750432bd23177050f4f1fac360a6c3
m_UniqueId: out
m_PortDirection: 2
m_PortOrientation: 0
m_Title: out
m_ToPortReference:
m_NodeModelGuid:
m_Value0: 11457935833154969843
m_Value1: 16747455140762270951
m_NodeModelHashGuid:
serializedVersion: 2
Hash: f3e06bfaeec3029fe7bcecfcb7e96ae8
m_UniqueId: in
m_PortDirection: 1
m_PortOrientation: 0
m_Title: in
- rid: 1226592736610877537
type: {class: UserNodeModelImp, ns: Unity.GraphToolkit.Editor.Implementation, asm: Unity.GraphToolkit.Editor}
data:
m_Guid:
m_Value0: 17256973715067882500
m_Value1: 10728149715493522551
m_HashGuid:
serializedVersion: 2
Hash: 04ccdf9829167def770c3379530be294
m_Version: 2
m_Position: {x: 2258.8298, y: 115.05748}
m_Title: DialogueNode
m_Tooltip:
m_NodePreviewModel:
rid: -2
m_State: 0
m_InputConstantsById:
m_KeyList:
- __option_DialogueLineType
- __option_NoLines
- LoopThroughDefaultLines
- DefaultDialogueLine
m_ValueList:
- rid: 1226592736610877538
- rid: 1226592736610877539
- rid: 1226592736610877540
- rid: 1226592736610877545
m_InputPortInfos:
expandedPortsById:
m_KeyList: []
m_ValueList:
m_OutputPortInfos:
expandedPortsById:
m_KeyList: []
m_ValueList:
m_Collapsed: 0
m_CurrentModeIndex: 0
m_ElementColor:
m_Color: {r: 0, g: 0, b: 0, a: 0}
m_HasUserColor: 0
m_Node:
rid: 1226592736610877543
- rid: 1226592736610877538
type: {class: EnumConstant, ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value:
m_EnumType:
m_Identification: Editor.Dialogue.DialogueType, AppleHillsEditor, Version=0.0.0.0,
Culture=neutral, PublicKeyToken=null
m_Value: 0
m_EnumType:
m_Identification: Editor.Dialogue.DialogueType, AppleHillsEditor, Version=0.0.0.0,
Culture=neutral, PublicKeyToken=null
- rid: 1226592736610877539
type: {class: 'Constant`1[[System.Int32, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: 1
- rid: 1226592736610877540
type: {class: 'Constant`1[[System.Boolean, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: 0
- rid: 1226592736610877543
type: {class: DialogueNode, ns: Editor.Dialogue, asm: AppleHillsEditor}
data:
- rid: 1226592736610877544
type: {class: WireModel, ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Guid:
m_Value0: 3030296286289964743
m_Value1: 18075108795397583455
m_HashGuid:
serializedVersion: 2
Hash: c7ae7fcc6ac60d2a5f3236f2aeafd7fa
m_Version: 2
m_FromPortReference:
m_NodeModelGuid:
m_Value0: 11457935833154969843
m_Value1: 16747455140762270951
m_NodeModelHashGuid:
serializedVersion: 2
Hash: f3e06bfaeec3029fe7bcecfcb7e96ae8
m_UniqueId: out
m_PortDirection: 2
m_PortOrientation: 0
m_Title: out
m_ToPortReference:
m_NodeModelGuid:
m_Value0: 17256973715067882500
m_Value1: 10728149715493522551
m_NodeModelHashGuid:
serializedVersion: 2
Hash: 04ccdf9829167def770c3379530be294
m_UniqueId: in
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:
m_Guid:
m_Value0: 11902820604143563113
m_Value1: 6699317486178747255
m_HashGuid:
serializedVersion: 2
Hash: 69712d8f46502fa577433f59c2c1f85c
m_Version: 2
m_Position: {x: 2650.1987, y: 6.86882}
m_Title:
m_Tooltip:
m_NodePreviewModel:
rid: -2
m_State: 0
m_InputConstantsById:
m_KeyList:
- __option_DialogueLineType
- __option_NoLines
- __option_IncorrectItemDialogueLineType
- __option_IncorrectItemNoLines
- __option_ForbiddenItemDialogueLineType
- __option_ForbiddenItemNoLines
- RequiredSlot
- DefaultDialogueLine
- LoopThroughDefaultLines
- IncorrectItemDialogueLine
- LoopThroughIncorrectItemLines
- ForbiddenItemDialogueLine
- LoopThroughForbiddenItemLines
m_ValueList:
- rid: 1226592736610877547
- rid: 1226592736610877548
- rid: 1226592736610877549
- rid: 1226592736610877550
- rid: 1226592736610877551
- rid: 1226592736610877552
- rid: 1226592736610877553
- rid: 1226592736610877554
- rid: 1226592736610877555
- rid: 1226592736610877556
- rid: 1226592736610877557
- rid: 1226592736610877558
- rid: 1226592736610877559
m_InputPortInfos:
expandedPortsById:
m_KeyList: []
m_ValueList:
m_OutputPortInfos:
expandedPortsById:
m_KeyList: []
m_ValueList:
m_Collapsed: 0
m_CurrentModeIndex: 0
m_ElementColor:
m_Color: {r: 0, g: 0, b: 0, a: 0}
m_HasUserColor: 0
m_Node:
rid: 1226592736610877560
- rid: 1226592736610877547
type: {class: EnumConstant, ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value:
m_EnumType:
m_Identification: Editor.Dialogue.DialogueType, AppleHillsEditor, Version=0.0.0.0,
Culture=neutral, PublicKeyToken=null
m_Value: 0
m_EnumType:
m_Identification: Editor.Dialogue.DialogueType, AppleHillsEditor, Version=0.0.0.0,
Culture=neutral, PublicKeyToken=null
- rid: 1226592736610877548
type: {class: 'Constant`1[[System.Int32, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: 1
- rid: 1226592736610877549
type: {class: EnumConstant, ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value:
m_EnumType:
m_Identification: Editor.Dialogue.DialogueType, AppleHillsEditor, Version=0.0.0.0,
Culture=neutral, PublicKeyToken=null
m_Value: 0
m_EnumType:
m_Identification: Editor.Dialogue.DialogueType, AppleHillsEditor, Version=0.0.0.0,
Culture=neutral, PublicKeyToken=null
- rid: 1226592736610877550
type: {class: 'Constant`1[[System.Int32, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: 1
- rid: 1226592736610877551
type: {class: EnumConstant, ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value:
m_EnumType:
m_Identification: Editor.Dialogue.DialogueType, AppleHillsEditor, Version=0.0.0.0,
Culture=neutral, PublicKeyToken=null
m_Value: 0
m_EnumType:
m_Identification: Editor.Dialogue.DialogueType, AppleHillsEditor, Version=0.0.0.0,
Culture=neutral, PublicKeyToken=null
- rid: 1226592736610877552
type: {class: 'Constant`1[[System.Int32, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: 1
- rid: 1226592736610877553
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
- rid: 1226592736610877560
type: {class: WaitOnSlot, ns: Editor.Dialogue, asm: AppleHillsEditor}
data:
- rid: 1226592736610877561
type: {class: WireModel, ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Guid:
m_Value0: 17109984303824179380
m_Value1: 18426165488533823493
m_HashGuid:
serializedVersion: 2
Hash: b410f35d12e072ed05e09ec4e2e3b6ff
m_Version: 2
m_FromPortReference:
m_NodeModelGuid:
m_Value0: 17256973715067882500
m_Value1: 10728149715493522551
m_NodeModelHashGuid:
serializedVersion: 2
Hash: 04ccdf9829167def770c3379530be294
m_UniqueId: out
m_PortDirection: 2
m_PortOrientation: 0
m_Title: out
m_ToPortReference:
m_NodeModelGuid:
m_Value0: 11902820604143563113
m_Value1: 6699317486178747255
m_NodeModelHashGuid:
serializedVersion: 2
Hash: 69712d8f46502fa577433f59c2c1f85c
m_UniqueId: in
m_PortDirection: 1
m_PortOrientation: 0
m_Title: in
- rid: 1226592736610877567
type: {class: UserNodeModelImp, ns: Unity.GraphToolkit.Editor.Implementation, asm: Unity.GraphToolkit.Editor}
data:
m_Guid:
m_Value0: 15697219088638459537
m_Value1: 14915215102272919892
m_HashGuid:
serializedVersion: 2
Hash: 91bec6fb97b9d7d954d9847f1c7dfdce
m_Version: 2
m_Position: {x: 3164.9407, y: 88.21074}
m_Title: DialogueNode
m_Tooltip:
m_NodePreviewModel:
rid: -2
m_State: 0
m_InputConstantsById:
m_KeyList:
- __option_DialogueLineType
- __option_NoLines
- LoopThroughDefaultLines
- DefaultDialogueLine
m_ValueList:
- rid: 1226592736610877568
- rid: 1226592736610877569
- rid: 1226592736610877570
- rid: 1226592736610877571
m_InputPortInfos:
expandedPortsById:
m_KeyList: []
m_ValueList:
m_OutputPortInfos:
expandedPortsById:
m_KeyList: []
m_ValueList:
m_Collapsed: 0
m_CurrentModeIndex: 0
m_ElementColor:
m_Color: {r: 0, g: 0, b: 0, a: 0}
m_HasUserColor: 0
m_Node:
rid: 1226592736610877572
- rid: 1226592736610877568
type: {class: EnumConstant, ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value:
m_EnumType:
m_Identification: Editor.Dialogue.DialogueType, AppleHillsEditor, Version=0.0.0.0,
Culture=neutral, PublicKeyToken=null
m_Value: 0
m_EnumType:
m_Identification: Editor.Dialogue.DialogueType, AppleHillsEditor, Version=0.0.0.0,
Culture=neutral, PublicKeyToken=null
- rid: 1226592736610877569
type: {class: 'Constant`1[[System.Int32, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: 1
- rid: 1226592736610877570
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:
- rid: 1226592736610877573
type: {class: WireModel, ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Guid:
m_Value0: 15649196733664619169
m_Value1: 156168040659544779
m_HashGuid:
serializedVersion: 2
Hash: a16a482a841d2dd9cbeac76c01d22a02
m_Version: 2
m_FromPortReference:
m_NodeModelGuid:
m_Value0: 11902820604143563113
m_Value1: 6699317486178747255
m_NodeModelHashGuid:
serializedVersion: 2
Hash: 69712d8f46502fa577433f59c2c1f85c
m_UniqueId: out
m_PortDirection: 2
m_PortOrientation: 0
m_Title: out
m_ToPortReference:
m_NodeModelGuid:
m_Value0: 15697219088638459537
m_Value1: 14915215102272919892
m_NodeModelHashGuid:
serializedVersion: 2
Hash: 91bec6fb97b9d7d954d9847f1c7dfdce
m_UniqueId: in
m_PortDirection: 1
m_PortOrientation: 0
m_Title: in

View File

@@ -63,6 +63,10 @@ namespace Editor.Dialogue
{
ProcessSlotNode(slotNode, runtimeNode);
}
else if (iNode is WaitOnCombination combinationNode)
{
ProcessCombinationNode(combinationNode, runtimeNode);
}
}
else if (iNode is EndNode)
{
@@ -226,6 +230,18 @@ namespace Editor.Dialogue
GetPortValue<bool>(node.GetInputPortByName("LoopThroughForbiddenItemLines"));
}
// Add new method to process combination nodes
private void ProcessCombinationNode(WaitOnCombination node, RuntimeDialogueNode runtimeNode)
{
runtimeNode.nodeType = RuntimeDialogueNodeType.WaitOnCombination;
var resultItem = GetPortValue<PickupItemData>(node.GetInputPortByName("RequiredResultItem"));
if (resultItem != null)
{
runtimeNode.combinationResultItemID = resultItem.itemId;
}
}
private T GetPortValue<T>(IPort port)
{
if (port == null) return default(T);

View File

@@ -193,4 +193,17 @@ namespace Editor.Dialogue
context.AddInputPort<bool>($"{LoopThroughForbiddenItemLinesOptionName}").WithDisplayName("Loop Through Forbidden Item Lines?").Build();
}
}
[Serializable]
public class WaitOnCombination : DialogueNode
{
const string RequiredResultItemOptionName = "RequiredResultItem";
protected override void OnDefinePorts(IPortDefinitionContext context)
{
context.AddInputPort<PickupItemData>(RequiredResultItemOptionName).WithDisplayName("Required Result Item").Build();
base.OnDefinePorts(context);
}
}
}

View File

@@ -977,6 +977,8 @@ MonoBehaviour:
typingSoundSource: {fileID: 0}
typingSoundFrequency: 3
useRichText: 1
dialogueDisplayTime: 1.5
dialoguePromptText: . . .
--- !u!4 &754397347 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 2844046668579196942, guid: b5fc01af35233eb4cbeede05e50a7c34, type: 3}
@@ -1739,6 +1741,8 @@ MonoBehaviour:
typingSoundSource: {fileID: 0}
typingSoundFrequency: 3
useRichText: 1
dialogueDisplayTime: 1.5
dialoguePromptText: . . .
--- !u!4 &1309036670 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 3823830588451517910, guid: 301b4e0735896334f8f6fb9a68a7e419, type: 3}

View File

@@ -34,6 +34,7 @@ namespace Core
private readonly HashSet<Pickup> _pickups = new HashSet<Pickup>();
private readonly HashSet<ItemSlot> _itemSlots = new HashSet<ItemSlot>();
private readonly HashSet<string> _itemsCreatedThroughCombination = new HashSet<string>();
// Central events forwarded from registered pickups/slots
// Broadcasts when any registered pickup was picked up (passes the picked item data)
@@ -43,6 +44,10 @@ namespace Core
// Args: slot's itemData (the slot definition), then the slotted item data
public event Action<PickupItemData, PickupItemData> OnCorrectItemSlotted;
// Broadcasts when any two items are successfully combined
// Args: first item data, second item data, result item data
public event Action<PickupItemData, PickupItemData, PickupItemData> OnItemsCombined;
void Awake()
{
_instance = this;
@@ -86,7 +91,10 @@ namespace Core
foreach (var p in pickupsCopy)
{
if (p != null)
{
p.OnItemPickedUp -= Pickup_OnItemPickedUp;
p.OnItemsCombined -= Pickup_OnItemsCombined;
}
}
_pickups.Clear();
@@ -99,9 +107,13 @@ namespace Core
}
_itemSlots.Clear();
// Clear item tracking
_itemsCreatedThroughCombination.Clear();
// Clear manager-level event subscribers
OnItemPickedUp = null;
OnCorrectItemSlotted = null;
OnItemsCombined = null;
}
public void RegisterPickup(Pickup pickup)
@@ -111,6 +123,7 @@ namespace Core
if (_pickups.Add(pickup))
{
pickup.OnItemPickedUp += Pickup_OnItemPickedUp;
pickup.OnItemsCombined += Pickup_OnItemsCombined;
}
}
@@ -120,6 +133,7 @@ namespace Core
if (_pickups.Remove(pickup))
{
pickup.OnItemPickedUp -= Pickup_OnItemPickedUp;
pickup.OnItemsCombined -= Pickup_OnItemsCombined;
}
}
@@ -153,6 +167,28 @@ namespace Core
OnCorrectItemSlotted?.Invoke(slotData, slottedItem);
}
// Handler that forwards item combination events
private void Pickup_OnItemsCombined(PickupItemData itemA, PickupItemData itemB, PickupItemData resultItem)
{
// Track the created item
if (resultItem != null)
{
_itemsCreatedThroughCombination.Add(resultItem.itemId);
}
OnItemsCombined?.Invoke(itemA, itemB, resultItem);
}
/// <summary>
/// Checks if a specific item has been created through item combination.
/// </summary>
/// <param name="itemId">The ID of the item to check.</param>
/// <returns>True if the item has been created through combination, false otherwise.</returns>
public bool WasItemCreatedThroughCombination(string itemId)
{
return !string.IsNullOrEmpty(itemId) && _itemsCreatedThroughCombination.Contains(itemId);
}
/// <summary>
/// Returns the current slot state for the given item data by searching registered slots.
/// If the item is currently slotted in a slot, returns that slot's state; otherwise returns ItemSlotState.None.

View File

@@ -36,6 +36,7 @@ namespace Dialogue
{
ItemManager.Instance.OnItemPickedUp += OnAnyItemPickedUp;
ItemManager.Instance.OnCorrectItemSlotted += OnAnyItemSlotted;
ItemManager.Instance.OnItemsCombined += OnAnyItemsCombined;
}
speechBubble = GetComponentInChildren<SpeechBubble>();
@@ -86,6 +87,7 @@ namespace Dialogue
{
ItemManager.Instance.OnItemPickedUp -= OnAnyItemPickedUp;
ItemManager.Instance.OnCorrectItemSlotted -= OnAnyItemSlotted;
ItemManager.Instance.OnItemsCombined -= OnAnyItemsCombined;
}
}
@@ -140,7 +142,7 @@ namespace Dialogue
{
currentLine = currentNode.dialogueLines[currentLineIndex];
}
Debug.Log("Returning line: " + currentLine);
// Return the current line
return currentLine;
}
@@ -242,6 +244,15 @@ namespace Dialogue
}
break;
case RuntimeDialogueNodeType.WaitOnCombination:
// Check if the result item is already created through combination
if (IsResultItemCreated(currentNode.combinationResultItemID))
{
// If it's already created, move past this node automatically
MoveToNextNode();
}
break;
case RuntimeDialogueNodeType.End:
// End node, complete the dialogue
IsActive = false;
@@ -269,8 +280,8 @@ namespace Dialogue
MoveToNextNode();
// Notify any listeners about the dialogue change
string line = GetCurrentDialogueLine();
OnDialogueChanged?.Invoke(line);
// string line = GetCurrentDialogueLine();
// OnDialogueChanged?.Invoke(line);
// Update bubble visibility after state change
if (speechBubble != null)
@@ -294,8 +305,8 @@ namespace Dialogue
MoveToNextNode();
// Notify any listeners about the dialogue change
string line = GetCurrentDialogueLine();
OnDialogueChanged?.Invoke(line);
// string line = GetCurrentDialogueLine();
// OnDialogueChanged?.Invoke(line);
// Update bubble visibility after state change
if (speechBubble != null)
@@ -305,14 +316,16 @@ namespace Dialogue
}
// Always check if any dialogue was unblocked by this pickup
if (speechBubble != null)
{
speechBubble.UpdatePromptVisibility(HasAnyLines());
}
// if (speechBubble != null)
// {
// speechBubble.UpdatePromptVisibility(HasAnyLines());
// }
}
private void OnAnyItemSlotted(PickupItemData slotDefinition, PickupItemData slottedItem)
{
Debug.Log("[DialogueComponent] OnAnyItemSlotted");
// Only react if we're active and waiting on a slot
if (!IsActive || IsCompleted || currentNode == null ||
currentNode.nodeType != RuntimeDialogueNodeType.WaitOnSlot)
@@ -325,8 +338,8 @@ namespace Dialogue
MoveToNextNode();
// Notify any listeners about the dialogue change
string line = GetCurrentDialogueLine();
OnDialogueChanged?.Invoke(line);
// string line = GetCurrentDialogueLine();
// OnDialogueChanged?.Invoke(line);
// Update bubble visibility after state change
if (speechBubble != null)
@@ -336,10 +349,41 @@ namespace Dialogue
}
// Always check if any dialogue was unblocked by this slotting
if (speechBubble != null)
// if (speechBubble != null)
// {
// speechBubble.UpdatePromptVisibility(HasAnyLines());
// }
}
private void OnAnyItemsCombined(PickupItemData itemA, PickupItemData itemB, PickupItemData resultItem)
{
// Only react if we're active and waiting on a combination
if (!IsActive || IsCompleted || currentNode == null ||
currentNode.nodeType != RuntimeDialogueNodeType.WaitOnCombination)
return;
// Check if this is the result item we're waiting for
if (resultItem.itemId == currentNode.combinationResultItemID)
{
speechBubble.UpdatePromptVisibility(HasAnyLines());
// Move to next node automatically when condition is met
MoveToNextNode();
// Notify any listeners about the dialogue change
// string line = GetCurrentDialogueLine();
// OnDialogueChanged?.Invoke(line);
// Update bubble visibility after state change
if (speechBubble != null)
{
speechBubble.UpdatePromptVisibility(HasAnyLines());
}
}
// Always check if any dialogue was unblocked by this combination
// if (speechBubble != null)
// {
// speechBubble.UpdatePromptVisibility(HasAnyLines());
// }
}
// Helper methods
@@ -355,6 +399,8 @@ namespace Dialogue
return !IsItemPickedUp(currentNode.pickupItemID);
case RuntimeDialogueNodeType.WaitOnSlot:
return !IsItemSlotted(currentNode.slotItemID);
case RuntimeDialogueNodeType.WaitOnCombination:
return !IsResultItemCreated(currentNode.combinationResultItemID);
default:
return false;
}
@@ -398,6 +444,14 @@ namespace Dialogue
return false;
}
private bool IsResultItemCreated(string resultItemId)
{
if (ItemManager.Instance == null) return false;
// Use the ItemManager's tracking of items created through combination
return ItemManager.Instance.WasItemCreatedThroughCombination(resultItemId);
}
/// <summary>
/// Checks if the dialogue component has any lines available to serve
/// </summary>

View File

@@ -11,6 +11,7 @@ namespace Dialogue
WaitOnPuzzleStep,
WaitOnPickup,
WaitOnSlot,
WaitOnCombination,
End
}
@@ -43,6 +44,7 @@ namespace Dialogue
public string puzzleStepID; // For WaitOnPuzzleStep
public string pickupItemID; // For WaitOnPickup
public string slotItemID; // For WaitOnSlot
public string combinationResultItemID; // For WaitOnCombination
// For WaitOnSlot - different responses
public List<string> incorrectItemLines = new List<string>();

View File

@@ -56,6 +56,8 @@ namespace Interactions
protected override void OnCharacterArrived()
{
Debug.Log("[ItemSlot] OnCharacterArrived");
var heldItemData = FollowerController.CurrentlyHeldItemData;
var heldItemObj = FollowerController.GetHeldPickupObject();
var config = GameManager.Instance.GetSlotItemConfig(itemData);

View File

@@ -20,6 +20,9 @@ namespace Interactions
// Event: invoked when the item was picked up successfully
public event Action<PickupItemData> OnItemPickedUp;
// Event: invoked when this item is successfully combined with another
public event Action<PickupItemData, PickupItemData, PickupItemData> OnItemsCombined;
/// <summary>
/// Unity Awake callback. Sets up icon, interactable, and event handlers.
/// </summary>
@@ -100,10 +103,35 @@ namespace Interactions
protected virtual void OnCharacterArrived()
{
Debug.Log("[Pickup] OnCharacterArrived");
var combinationResult = FollowerController.TryCombineItems(this, out var combinationResultItem);
if (combinationResultItem != null)
{
Interactable.BroadcastInteractionComplete(true);
// Fire the combination event when items are successfully combined
if (combinationResult == FollowerController.CombinationResult.Successful)
{
var resultPickup = combinationResultItem.GetComponent<Pickup>();
if (resultPickup != null && resultPickup.itemData != null)
{
// Get the combined item data
var resultItemData = resultPickup.itemData;
var heldItem = FollowerController.GetHeldPickupObject();
if (heldItem != null)
{
var heldPickup = heldItem.GetComponent<Pickup>();
if (heldPickup != null && heldPickup.itemData != null)
{
// Trigger the combination event
OnItemsCombined?.Invoke(itemData, heldPickup.itemData, resultItemData);
}
}
}
}
return;
}