AUtoprogress dialogue

This commit is contained in:
Michal Pikulski
2025-10-27 16:06:47 +01:00
parent dad1f6498d
commit 2aad46be98
10 changed files with 149 additions and 53 deletions

View File

@@ -307,6 +307,7 @@ MonoBehaviour:
- LoopThroughIncorrectItemLines - LoopThroughIncorrectItemLines
- ForbiddenItemDialogueContent - ForbiddenItemDialogueContent
- LoopThroughForbiddenItemLines - LoopThroughForbiddenItemLines
- ShouldAutoPlay
m_ValueList: m_ValueList:
- rid: 4008004961314799713 - rid: 4008004961314799713
- rid: 4008004961314799714 - rid: 4008004961314799714
@@ -321,6 +322,7 @@ MonoBehaviour:
- rid: 4008004961314799723 - rid: 4008004961314799723
- rid: 4008004961314799724 - rid: 4008004961314799724
- rid: 4008004961314799725 - rid: 4008004961314799725
- rid: 7545630068434796544
m_InputPortInfos: m_InputPortInfos:
expandedPortsById: expandedPortsById:
m_KeyList: [] m_KeyList: []
@@ -525,3 +527,7 @@ MonoBehaviour:
- rid: 4008004961314799729 - rid: 4008004961314799729
type: {class: EndNode, ns: Editor.Dialogue, asm: AppleHillsEditor} type: {class: EndNode, ns: Editor.Dialogue, asm: AppleHillsEditor}
data: data:
- rid: 7545630068434796544
type: {class: 'Constant`1[[System.Boolean, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: 1

View File

@@ -168,6 +168,7 @@ MonoBehaviour:
- LoopThroughIncorrectItemLines - LoopThroughIncorrectItemLines
- ForbiddenItemDialogueContent - ForbiddenItemDialogueContent
- LoopThroughForbiddenItemLines - LoopThroughForbiddenItemLines
- ShouldAutoPlay
m_ValueList: m_ValueList:
- rid: 4008004961314799803 - rid: 4008004961314799803
- rid: 4008004961314799804 - rid: 4008004961314799804
@@ -182,6 +183,7 @@ MonoBehaviour:
- rid: 4008004961314799813 - rid: 4008004961314799813
- rid: 4008004961314799814 - rid: 4008004961314799814
- rid: 4008004961314799815 - rid: 4008004961314799815
- rid: 7545630068434796549
m_InputPortInfos: m_InputPortInfos:
expandedPortsById: expandedPortsById:
m_KeyList: [] m_KeyList: []
@@ -525,3 +527,7 @@ MonoBehaviour:
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor} type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data: data:
m_Value: AnneLise m_Value: AnneLise
- rid: 7545630068434796549
type: {class: 'Constant`1[[System.Boolean, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: 0

View File

@@ -168,6 +168,7 @@ MonoBehaviour:
- LoopThroughIncorrectItemLines - LoopThroughIncorrectItemLines
- ForbiddenItemDialogueContent - ForbiddenItemDialogueContent
- LoopThroughForbiddenItemLines - LoopThroughForbiddenItemLines
- ShouldAutoPlay
m_ValueList: m_ValueList:
- rid: 4008004961314799847 - rid: 4008004961314799847
- rid: 4008004961314799848 - rid: 4008004961314799848
@@ -182,6 +183,7 @@ MonoBehaviour:
- rid: 4008004961314799857 - rid: 4008004961314799857
- rid: 4008004961314799858 - rid: 4008004961314799858
- rid: 4008004961314799859 - rid: 4008004961314799859
- rid: 7545630068434796550
m_InputPortInfos: m_InputPortInfos:
expandedPortsById: expandedPortsById:
m_KeyList: [] m_KeyList: []
@@ -525,3 +527,7 @@ MonoBehaviour:
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor} type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data: data:
m_Value: AnneLise m_Value: AnneLise
- rid: 7545630068434796550
type: {class: 'Constant`1[[System.Boolean, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: 0

View File

@@ -168,6 +168,7 @@ MonoBehaviour:
- LoopThroughIncorrectItemLines - LoopThroughIncorrectItemLines
- ForbiddenItemDialogueContent - ForbiddenItemDialogueContent
- LoopThroughForbiddenItemLines - LoopThroughForbiddenItemLines
- ShouldAutoPlay
m_ValueList: m_ValueList:
- rid: 4008004961314799891 - rid: 4008004961314799891
- rid: 4008004961314799892 - rid: 4008004961314799892
@@ -182,6 +183,7 @@ MonoBehaviour:
- rid: 4008004961314799901 - rid: 4008004961314799901
- rid: 4008004961314799902 - rid: 4008004961314799902
- rid: 4008004961314799903 - rid: 4008004961314799903
- rid: 7545630068434796545
m_InputPortInfos: m_InputPortInfos:
expandedPortsById: expandedPortsById:
m_KeyList: [] m_KeyList: []
@@ -525,3 +527,7 @@ MonoBehaviour:
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor} type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data: data:
m_Value: AnneLise m_Value: AnneLise
- rid: 7545630068434796545
type: {class: 'Constant`1[[System.Boolean, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: 0

View File

@@ -42,12 +42,14 @@ MonoBehaviour:
- RequiredPuzzleStep - RequiredPuzzleStep
- DefaultDialogueContent - DefaultDialogueContent
- LoopThroughDefaultLines - LoopThroughDefaultLines
- ShouldAutoPlay
m_ValueList: m_ValueList:
- rid: 4008004961314799759 - rid: 4008004961314799759
- rid: 4008004961314799760 - rid: 4008004961314799760
- rid: 4008004961314799761 - rid: 4008004961314799761
- rid: 4008004961314799762 - rid: 4008004961314799762
- rid: 4008004961314799763 - rid: 4008004961314799763
- rid: 7545630068434796551
m_InputPortInfos: m_InputPortInfos:
expandedPortsById: expandedPortsById:
m_KeyList: [] m_KeyList: []
@@ -169,6 +171,10 @@ MonoBehaviour:
_text: _text:
_image: {fileID: 1487011052474782424, guid: f489e2c9ce64ff34aa3c7a91a4edbd77, type: 3} _image: {fileID: 1487011052474782424, guid: f489e2c9ce64ff34aa3c7a91a4edbd77, type: 3}
_audio: {fileID: 8300000, guid: b4ba973891dad4749b465e9a07987e1a, type: 3} _audio: {fileID: 8300000, guid: b4ba973891dad4749b465e9a07987e1a, type: 3}
- rid: 7545630068434796551
type: {class: 'Constant`1[[System.Boolean, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: 0
- rid: 7772910664224079994 - rid: 7772910664224079994
type: {class: GraphModelImp, ns: Unity.GraphToolkit.Editor.Implementation, asm: Unity.GraphToolkit.Editor} type: {class: GraphModelImp, ns: Unity.GraphToolkit.Editor.Implementation, asm: Unity.GraphToolkit.Editor}
data: data:

View File

@@ -487,6 +487,7 @@ MonoBehaviour:
- DefaultDialogueContent1 - DefaultDialogueContent1
- DefaultDialogueContent2 - DefaultDialogueContent2
- DefaultDialogueContent3 - DefaultDialogueContent3
- ShouldAutoPlay
m_ValueList: m_ValueList:
- rid: 1226592702090707084 - rid: 1226592702090707084
- rid: 1226592702090707085 - rid: 1226592702090707085
@@ -495,6 +496,7 @@ MonoBehaviour:
- rid: 7545629632211976304 - rid: 7545629632211976304
- rid: 7545629632211976305 - rid: 7545629632211976305
- rid: 7545629632211976306 - rid: 7545629632211976306
- rid: 7545630068434796546
m_InputPortInfos: m_InputPortInfos:
expandedPortsById: expandedPortsById:
m_KeyList: [] m_KeyList: []
@@ -689,12 +691,14 @@ MonoBehaviour:
- RequiredResultItem - RequiredResultItem
- LoopThroughDefaultLines - LoopThroughDefaultLines
- DefaultDialogueContent - DefaultDialogueContent
- ShouldAutoPlay
m_ValueList: m_ValueList:
- rid: 1226592736610877524 - rid: 1226592736610877524
- rid: 1226592736610877525 - rid: 1226592736610877525
- rid: 1226592736610877526 - rid: 1226592736610877526
- rid: 1226592736610877528 - rid: 1226592736610877528
- rid: 7545629632211976309 - rid: 7545629632211976309
- rid: 7545630068434796547
m_InputPortInfos: m_InputPortInfos:
expandedPortsById: expandedPortsById:
m_KeyList: [] m_KeyList: []
@@ -895,6 +899,7 @@ MonoBehaviour:
- DefaultDialogueContent - DefaultDialogueContent
- IncorrectItemDialogueContent - IncorrectItemDialogueContent
- ForbiddenItemDialogueContent - ForbiddenItemDialogueContent
- ShouldAutoPlay
m_ValueList: m_ValueList:
- rid: 1226592736610877547 - rid: 1226592736610877547
- rid: 1226592736610877548 - rid: 1226592736610877548
@@ -909,6 +914,7 @@ MonoBehaviour:
- rid: 7545629632211976311 - rid: 7545629632211976311
- rid: 7545629632211976312 - rid: 7545629632211976312
- rid: 7545629632211976313 - rid: 7545629632211976313
- rid: 7545630068434796548
m_InputPortInfos: m_InputPortInfos:
expandedPortsById: expandedPortsById:
m_KeyList: [] m_KeyList: []
@@ -1212,3 +1218,15 @@ MonoBehaviour:
_text: Yessssss, thanks! _text: Yessssss, thanks!
_image: {fileID: 0} _image: {fileID: 0}
_audio: {fileID: 0} _audio: {fileID: 0}
- rid: 7545630068434796546
type: {class: 'Constant`1[[System.Boolean, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: 0
- rid: 7545630068434796547
type: {class: 'Constant`1[[System.Boolean, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: 0
- rid: 7545630068434796548
type: {class: 'Constant`1[[System.Boolean, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: 0

View File

@@ -164,6 +164,8 @@ namespace Editor.Dialogue
{ {
runtimeNode.puzzleStepID = puzzleStep.stepId; runtimeNode.puzzleStepID = puzzleStep.stepId;
} }
runtimeNode.shouldAutoPlay = GetPortValue<bool>(node.GetInputPortByName("ShouldAutoPlay"));
} }
private void ProcessPickupNode(WaitOnPickup node, RuntimeDialogueNode runtimeNode) private void ProcessPickupNode(WaitOnPickup node, RuntimeDialogueNode runtimeNode)
@@ -175,6 +177,8 @@ namespace Editor.Dialogue
{ {
runtimeNode.pickupItemID = pickup.itemId; runtimeNode.pickupItemID = pickup.itemId;
} }
runtimeNode.shouldAutoPlay = GetPortValue<bool>(node.GetInputPortByName("ShouldAutoPlay"));
} }
private void ProcessSlotNode(WaitOnSlot node, RuntimeDialogueNode runtimeNode) private void ProcessSlotNode(WaitOnSlot node, RuntimeDialogueNode runtimeNode)
@@ -187,6 +191,8 @@ namespace Editor.Dialogue
runtimeNode.slotItemID = slot.itemId; runtimeNode.slotItemID = slot.itemId;
} }
runtimeNode.shouldAutoPlay = GetPortValue<bool>(node.GetInputPortByName("ShouldAutoPlay"));
// Get line type and count options for incorrect items // Get line type and count options for incorrect items
var incorrectItemLineTypeOption = node.GetNodeOptionByName("IncorrectItemDialogueLineType"); var incorrectItemLineTypeOption = node.GetNodeOptionByName("IncorrectItemDialogueLineType");
incorrectItemLineTypeOption.TryGetValue<DialogueType>(out var incorrectItemLineType); incorrectItemLineTypeOption.TryGetValue<DialogueType>(out var incorrectItemLineType);
@@ -296,6 +302,8 @@ namespace Editor.Dialogue
{ {
runtimeNode.combinationResultItemID = resultItem.itemId; runtimeNode.combinationResultItemID = resultItem.itemId;
} }
runtimeNode.shouldAutoPlay = GetPortValue<bool>(node.GetInputPortByName("ShouldAutoPlay"));
} }
private T GetPortValue<T>(IPort port) private T GetPortValue<T>(IPort port)

View File

@@ -90,10 +90,12 @@ namespace Editor.Dialogue
public class WaitOnPuzzleStep : DialogueNode public class WaitOnPuzzleStep : DialogueNode
{ {
const string RequiredPuzzleStep = "RequiredPuzzleStep"; const string RequiredPuzzleStep = "RequiredPuzzleStep";
const string ShouldAutoPlayOptionName = "ShouldAutoPlay";
protected override void OnDefinePorts(IPortDefinitionContext context) protected override void OnDefinePorts(IPortDefinitionContext context)
{ {
context.AddInputPort<PuzzleStepSO>(RequiredPuzzleStep).WithDisplayName("Required Puzzle Step").Build(); context.AddInputPort<PuzzleStepSO>(RequiredPuzzleStep).WithDisplayName("Required Puzzle Step").Build();
context.AddInputPort<bool>(ShouldAutoPlayOptionName).WithDisplayName("Should Auto-Play?").Build();
base.OnDefinePorts(context); base.OnDefinePorts(context);
} }
@@ -103,10 +105,12 @@ namespace Editor.Dialogue
public class WaitOnPickup : DialogueNode public class WaitOnPickup : DialogueNode
{ {
const string RequiredPickupsOptionName = "RequiredPickup"; const string RequiredPickupsOptionName = "RequiredPickup";
const string ShouldAutoPlayOptionName = "ShouldAutoPlay";
protected override void OnDefinePorts(IPortDefinitionContext context) protected override void OnDefinePorts(IPortDefinitionContext context)
{ {
context.AddInputPort<PickupItemData>(RequiredPickupsOptionName).WithDisplayName("Required Pickup").Build(); context.AddInputPort<PickupItemData>(RequiredPickupsOptionName).WithDisplayName("Required Pickup").Build();
context.AddInputPort<bool>(ShouldAutoPlayOptionName).WithDisplayName("Should Auto-Play?").Build();
base.OnDefinePorts(context); base.OnDefinePorts(context);
} }
@@ -116,6 +120,7 @@ namespace Editor.Dialogue
public class WaitOnSlot : DialogueNode public class WaitOnSlot : DialogueNode
{ {
const string RequiredSlotOptionName = "RequiredSlot"; const string RequiredSlotOptionName = "RequiredSlot";
const string ShouldAutoPlayOptionName = "ShouldAutoPlay";
const string IncorrectItemLineTypeOptionName = "IncorrectItemDialogueLineType"; const string IncorrectItemLineTypeOptionName = "IncorrectItemDialogueLineType";
const string IncorrectItemNoLinesOptionName = "IncorrectItemNoLines"; const string IncorrectItemNoLinesOptionName = "IncorrectItemNoLines";
const string LoopThroughIncorrectItemLinesOptionName = "LoopThroughIncorrectItemLines"; const string LoopThroughIncorrectItemLinesOptionName = "LoopThroughIncorrectItemLines";
@@ -156,6 +161,7 @@ namespace Editor.Dialogue
protected override void OnDefinePorts(IPortDefinitionContext context) protected override void OnDefinePorts(IPortDefinitionContext context)
{ {
context.AddInputPort<PickupItemData>(RequiredSlotOptionName).WithDisplayName("Required Slot").Build(); context.AddInputPort<PickupItemData>(RequiredSlotOptionName).WithDisplayName("Required Slot").Build();
context.AddInputPort<bool>(ShouldAutoPlayOptionName).WithDisplayName("Should Auto-Play?").Build();
base.OnDefinePorts(context); base.OnDefinePorts(context);
@@ -219,10 +225,12 @@ namespace Editor.Dialogue
public class WaitOnCombination : DialogueNode public class WaitOnCombination : DialogueNode
{ {
const string RequiredResultItemOptionName = "RequiredResultItem"; const string RequiredResultItemOptionName = "RequiredResultItem";
const string ShouldAutoPlayOptionName = "ShouldAutoPlay";
protected override void OnDefinePorts(IPortDefinitionContext context) protected override void OnDefinePorts(IPortDefinitionContext context)
{ {
context.AddInputPort<PickupItemData>(RequiredResultItemOptionName).WithDisplayName("Required Result Item").Build(); context.AddInputPort<PickupItemData>(RequiredResultItemOptionName).WithDisplayName("Required Result Item").Build();
context.AddInputPort<bool>(ShouldAutoPlayOptionName).WithDisplayName("Should Auto-Play?").Build();
base.OnDefinePorts(context); base.OnDefinePorts(context);
} }

View File

@@ -1,6 +1,7 @@
using System; using System;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using Bootstrap;
using Core; using Core;
using Interactions; using Interactions;
using UnityEngine; using UnityEngine;
@@ -46,23 +47,6 @@ namespace Dialogue
Debug.LogError("SpeechBubble component is missing on Dialogue Component"); Debug.LogError("SpeechBubble component is missing on Dialogue Component");
} }
// Register for global events
if (PuzzleManager.Instance != null)
PuzzleManager.Instance.OnStepCompleted += OnAnyPuzzleStepCompleted;
if (ItemManager.Instance != null)
{
ItemManager.Instance.OnItemPickedUp += OnAnyItemPickedUp;
ItemManager.Instance.OnCorrectItemSlotted += OnAnyItemSlotted;
ItemManager.Instance.OnIncorrectItemSlotted += OnAnyIncorrectItemSlotted;
ItemManager.Instance.OnForbiddenItemSlotted += OnAnyForbiddenItemSlotted;
ItemManager.Instance.OnItemSlotCleared += OnAnyItemSlotCleared;
ItemManager.Instance.OnItemsCombined += OnAnyItemsCombined;
}
// Auto-start the dialogue
// StartDialogue();
var interactable = GetComponent<Interactable>(); var interactable = GetComponent<Interactable>();
if (interactable != null) if (interactable != null)
{ {
@@ -74,6 +58,20 @@ namespace Dialogue
{ {
speechBubble.UpdatePromptVisibility(HasAnyLines()); speechBubble.UpdatePromptVisibility(HasAnyLines());
} }
BootCompletionService.RegisterInitAction(InitializePostBoot);
}
private void InitializePostBoot()
{
// Register for global events
PuzzleManager.Instance.OnStepCompleted += OnAnyPuzzleStepCompleted;
ItemManager.Instance.OnItemPickedUp += OnAnyItemPickedUp;
ItemManager.Instance.OnCorrectItemSlotted += OnAnyItemSlotted;
ItemManager.Instance.OnIncorrectItemSlotted += OnAnyIncorrectItemSlotted;
ItemManager.Instance.OnForbiddenItemSlotted += OnAnyForbiddenItemSlotted;
ItemManager.Instance.OnItemSlotCleared += OnAnyItemSlotCleared;
ItemManager.Instance.OnItemsCombined += OnAnyItemsCombined;
} }
private void OnCharacterArrived() private void OnCharacterArrived()
@@ -457,6 +455,12 @@ namespace Dialogue
// Global event handlers // Global event handlers
private void OnAnyPuzzleStepCompleted(PuzzleStepSO step) private void OnAnyPuzzleStepCompleted(PuzzleStepSO step)
{ {
// Initialize if needed
if (!initialized)
{
StartDialogue();
}
// Only react if we're active and waiting on a puzzle step // Only react if we're active and waiting on a puzzle step
if (!IsActive || IsCompleted || currentNode == null || if (!IsActive || IsCompleted || currentNode == null ||
currentNode.nodeType != RuntimeDialogueNodeType.WaitOnPuzzleStep) currentNode.nodeType != RuntimeDialogueNodeType.WaitOnPuzzleStep)
@@ -465,19 +469,21 @@ namespace Dialogue
// Check if this is the step we're waiting for // Check if this is the step we're waiting for
if (step.stepId == currentNode.puzzleStepID) if (step.stepId == currentNode.puzzleStepID)
{ {
// Instead of immediately moving to the next node, set the flag // Set the flag that condition is satisfied
_conditionSatisfiedPendingAdvance = true; _conditionSatisfiedPendingAdvance = true;
// Update bubble visibility after state change to show interaction prompt UpdateDialogueVisibilityOnItemEvent();
if (speechBubble != null)
{
speechBubble.UpdatePromptVisibility(HasAnyLines());
}
} }
} }
private void OnAnyItemPickedUp(PickupItemData item) private void OnAnyItemPickedUp(PickupItemData item)
{ {
// Initialize if needed
if (!initialized)
{
StartDialogue();
}
// Only react if we're active and waiting on an item pickup // Only react if we're active and waiting on an item pickup
if (!IsActive || IsCompleted || currentNode == null || if (!IsActive || IsCompleted || currentNode == null ||
currentNode.nodeType != RuntimeDialogueNodeType.WaitOnPickup) currentNode.nodeType != RuntimeDialogueNodeType.WaitOnPickup)
@@ -486,14 +492,10 @@ namespace Dialogue
// Check if this is the item we're waiting for // Check if this is the item we're waiting for
if (item.itemId == currentNode.pickupItemID) if (item.itemId == currentNode.pickupItemID)
{ {
// Instead of immediately moving to the next node, set the flag // Set the flag that condition is satisfied
_conditionSatisfiedPendingAdvance = true; _conditionSatisfiedPendingAdvance = true;
// Update bubble visibility after state change to show interaction prompt UpdateDialogueVisibilityOnItemEvent();
if (speechBubble != null)
{
speechBubble.UpdatePromptVisibility(HasAnyLines());
}
} }
} }
@@ -501,6 +503,12 @@ namespace Dialogue
{ {
Logging.Debug("[DialogueComponent] OnAnyItemSlotted"); Logging.Debug("[DialogueComponent] OnAnyItemSlotted");
// Initialize if needed
if (!initialized)
{
StartDialogue();
}
// Only react if we're active and waiting on a slot // Only react if we're active and waiting on a slot
if (!IsActive || IsCompleted || currentNode == null || if (!IsActive || IsCompleted || currentNode == null ||
currentNode.nodeType != RuntimeDialogueNodeType.WaitOnSlot) currentNode.nodeType != RuntimeDialogueNodeType.WaitOnSlot)
@@ -509,19 +517,21 @@ namespace Dialogue
// Check if this is the slot we're waiting for // Check if this is the slot we're waiting for
if (slotDefinition.itemId == currentNode.slotItemID) if (slotDefinition.itemId == currentNode.slotItemID)
{ {
// Instead of immediately moving to the next node, set the flag // Set the flag that condition is satisfied
_conditionSatisfiedPendingAdvance = true; _conditionSatisfiedPendingAdvance = true;
// Update bubble visibility after state change to show interaction prompt UpdateDialogueVisibilityOnItemEvent();
if (speechBubble != null)
{
speechBubble.UpdatePromptVisibility(HasAnyLines());
}
} }
} }
private void OnAnyItemsCombined(PickupItemData itemA, PickupItemData itemB, PickupItemData resultItem) private void OnAnyItemsCombined(PickupItemData itemA, PickupItemData itemB, PickupItemData resultItem)
{ {
// Initialize if needed
if (!initialized)
{
StartDialogue();
}
// Only react if we're active and waiting on a combination // Only react if we're active and waiting on a combination
if (!IsActive || IsCompleted || currentNode == null || if (!IsActive || IsCompleted || currentNode == null ||
currentNode.nodeType != RuntimeDialogueNodeType.WaitOnCombination) currentNode.nodeType != RuntimeDialogueNodeType.WaitOnCombination)
@@ -530,19 +540,21 @@ namespace Dialogue
// Check if this is the result item we're waiting for // Check if this is the result item we're waiting for
if (resultItem.itemId == currentNode.combinationResultItemID) if (resultItem.itemId == currentNode.combinationResultItemID)
{ {
// Instead of immediately moving to the next node, set the flag // Set the flag that condition is satisfied
_conditionSatisfiedPendingAdvance = true; _conditionSatisfiedPendingAdvance = true;
// Update bubble visibility after state change to show interaction prompt UpdateDialogueVisibilityOnItemEvent();
if (speechBubble != null)
{
speechBubble.UpdatePromptVisibility(HasAnyLines());
}
} }
} }
private void OnAnyIncorrectItemSlotted(PickupItemData slotDefinition, PickupItemData slottedItem) private void OnAnyIncorrectItemSlotted(PickupItemData slotDefinition, PickupItemData slottedItem)
{ {
// Initialize if needed
if (!initialized)
{
StartDialogue();
}
// Update the slot state for displaying the correct dialogue lines // Update the slot state for displaying the correct dialogue lines
if (!IsActive || IsCompleted || currentNode == null) if (!IsActive || IsCompleted || currentNode == null)
return; return;
@@ -554,16 +566,18 @@ namespace Dialogue
_currentSlotState = ItemSlotState.Incorrect; _currentSlotState = ItemSlotState.Incorrect;
_lastSlottedItem = slottedItem; _lastSlottedItem = slottedItem;
// Trigger dialogue update UpdateDialogueVisibilityOnItemEvent();
if (speechBubble != null)
{
speechBubble.UpdatePromptVisibility(HasAnyLines());
}
} }
} }
private void OnAnyForbiddenItemSlotted(PickupItemData slotDefinition, PickupItemData slottedItem) private void OnAnyForbiddenItemSlotted(PickupItemData slotDefinition, PickupItemData slottedItem)
{ {
// Initialize if needed
if (!initialized)
{
StartDialogue();
}
// Update the slot state for displaying the correct dialogue lines // Update the slot state for displaying the correct dialogue lines
if (!IsActive || IsCompleted || currentNode == null) if (!IsActive || IsCompleted || currentNode == null)
return; return;
@@ -575,16 +589,18 @@ namespace Dialogue
_currentSlotState = ItemSlotState.Forbidden; _currentSlotState = ItemSlotState.Forbidden;
_lastSlottedItem = slottedItem; _lastSlottedItem = slottedItem;
// Trigger dialogue update UpdateDialogueVisibilityOnItemEvent();
if (speechBubble != null)
{
speechBubble.UpdatePromptVisibility(HasAnyLines());
}
} }
} }
private void OnAnyItemSlotCleared(PickupItemData removedItem) private void OnAnyItemSlotCleared(PickupItemData removedItem)
{ {
// Initialize if needed
if (!initialized)
{
StartDialogue();
}
// Update the slot state when an item is removed // Update the slot state when an item is removed
if (!IsActive || IsCompleted || currentNode == null) if (!IsActive || IsCompleted || currentNode == null)
return; return;
@@ -595,7 +611,20 @@ namespace Dialogue
_currentSlotState = ItemSlotState.None; _currentSlotState = ItemSlotState.None;
_lastSlottedItem = null; _lastSlottedItem = null;
// Trigger dialogue update UpdateDialogueVisibilityOnItemEvent();
}
}
private void UpdateDialogueVisibilityOnItemEvent()
{
// If auto-play is enabled, immediately display dialogue
if (currentNode.shouldAutoPlay)
{
OnCharacterArrived();
}
else
{
// Manual mode: just update bubble visibility to show interaction prompt
if (speechBubble != null) if (speechBubble != null)
{ {
speechBubble.UpdatePromptVisibility(HasAnyLines()); speechBubble.UpdatePromptVisibility(HasAnyLines());

View File

@@ -50,6 +50,9 @@ namespace Dialogue
public string slotItemID; // For WaitOnSlot public string slotItemID; // For WaitOnSlot
public string combinationResultItemID; // For WaitOnCombination public string combinationResultItemID; // For WaitOnCombination
// Auto-play dialogue when condition is met (for item-related nodes)
public bool shouldAutoPlay;
// For WaitOnSlot - different responses // For WaitOnSlot - different responses
[HideInInspector] [HideInInspector]
public List<string> incorrectItemLines = new List<string>(); public List<string> incorrectItemLines = new List<string>();