diff --git a/Assets/Examples/BasicConversation/ExampleConversation.asset b/Assets/Examples/BasicConversation/ExampleConversation.asset index a07fb5e..57d9611 100644 --- a/Assets/Examples/BasicConversation/ExampleConversation.asset +++ b/Assets/Examples/BasicConversation/ExampleConversation.asset @@ -28,6 +28,21 @@ MonoBehaviour: choices: [] actor: {fileID: 11400000, guid: aebb863e25cae0a4495c09b6a617ecf6, type: 2} dialogue: That sounds like best course of action. Is there anything else? +--- !u!114 &-8371811054073610404 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6a5190ddeaf44213841a394ed935ab6b, type: 3} + m_Name: ExampleCondition + m_EditorClassIdentifier: + _title: ExampleCondition + _uniqueId: 75fb9c16-572f-4435-83b9-ba08de0cd682 + _isValid: 1 --- !u!114 &-8341703056822817610 MonoBehaviour: m_ObjectHideFlags: 0 @@ -204,6 +219,33 @@ MonoBehaviour: choices: [] actor: {fileID: 11400000, guid: aebb863e25cae0a4495c09b6a617ecf6, type: 2} dialogue: We won't last more than a few days if we're lucky. +--- !u!114 &-5749017562080709619 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9f157564dbc846468ec0ac2b6f7d545e, type: 3} + m_Name: Dialogue + m_EditorClassIdentifier: + _uniqueId: 00d2804b-622a-4c1e-a2f9-13124afa8815 + rect: + serializedVersion: 2 + x: 50215 + y: 50345 + width: 200 + height: 133 + nodeTitle: + children: [] + conditions: [] + enterActions: [] + exitActions: [] + choices: [] + actor: {fileID: 11400000, guid: aebb863e25cae0a4495c09b6a617ecf6, type: 2} + dialogue: Conversation deviated as expected. --- !u!114 &-5697671711981343180 MonoBehaviour: m_ObjectHideFlags: 1 @@ -424,8 +466,9 @@ MonoBehaviour: - {fileID: -3436942782412272395} - {fileID: -1807495471838374980} - {fileID: -7347677369531188231} + - {fileID: -5749017562080709619} root: {fileID: 426936237664981933} - scrollPosition: {x: 51095.676, y: 50006} + scrollPosition: {x: 49917.676, y: 50013} --- !u!114 &373158185418196577 MonoBehaviour: m_ObjectHideFlags: 0 @@ -476,6 +519,7 @@ MonoBehaviour: nodeTitle: children: - {fileID: 8793565678756733940} + - {fileID: -5749017562080709619} conditions: [] enterActions: [] exitActions: [] @@ -664,7 +708,8 @@ MonoBehaviour: nodeTitle: children: - {fileID: 373158185418196577} - conditions: [] + conditions: + - {fileID: -8371811054073610404} enterActions: - {fileID: -7811679642350466681} exitActions: [] diff --git a/Assets/Examples/ExampleAction.cs b/Assets/Examples/ExampleAction.cs index e056aba..0fc8ae4 100644 --- a/Assets/Examples/ExampleAction.cs +++ b/Assets/Examples/ExampleAction.cs @@ -4,7 +4,8 @@ namespace CleverCrow.Fluid.Dialogues.Examples { [CreateMenu("Example/Action")] public class ExampleAction : ActionDataBase { - [SerializeField] private string _text; + [SerializeField] + private string _text = null; public override void OnStart () { Debug.Log(_text); diff --git a/Assets/Examples/ExampleCondition.cs b/Assets/Examples/ExampleCondition.cs new file mode 100644 index 0000000..16af3e3 --- /dev/null +++ b/Assets/Examples/ExampleCondition.cs @@ -0,0 +1,16 @@ +using CleverCrow.Fluid.Dialogues.Conditions; +using CleverCrow.Fluid.Dialogues.Nodes; +using UnityEngine; + +namespace CleverCrow.Fluid.Dialogues.Examples { + [CreateMenu("Example/Condition")] + public class ExampleCondition : ConditionDataBase { + [SerializeField] + private bool _isValid; + + public override bool OnGetIsValid (INode parent) { + Debug.Log($"Example Condition: Returned {_isValid} for node {parent.UniqueId}"); + return _isValid; + } + } +} diff --git a/Assets/Examples/ExampleCondition.cs.meta b/Assets/Examples/ExampleCondition.cs.meta new file mode 100644 index 0000000..e02cf9f --- /dev/null +++ b/Assets/Examples/ExampleCondition.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6a5190ddeaf44213841a394ed935ab6b +timeCreated: 1577905000 \ No newline at end of file diff --git a/Assets/com.fluid.dialogue/Runtime/Actions/Libraries/Databases/Locals/Conditions/IsLocalBool.cs b/Assets/com.fluid.dialogue/Runtime/Actions/Libraries/Databases/Locals/Conditions/IsLocalBool.cs index f009aca..4fbc9e2 100644 --- a/Assets/com.fluid.dialogue/Runtime/Actions/Libraries/Databases/Locals/Conditions/IsLocalBool.cs +++ b/Assets/com.fluid.dialogue/Runtime/Actions/Libraries/Databases/Locals/Conditions/IsLocalBool.cs @@ -1,6 +1,7 @@ using System; using CleverCrow.Fluid.Databases; using CleverCrow.Fluid.Dialogues.Conditions; +using CleverCrow.Fluid.Dialogues.Nodes; using UnityEngine; namespace CleverCrow.Fluid.Dialogues.Actions.Databases { @@ -26,7 +27,7 @@ public override void OnInit (IDialogueController dialogue) { _condition = new ConditionLocalBoolInternal(dialogue.LocalDatabase.Bools); } - public override bool OnGetIsValid () { + public override bool OnGetIsValid (INode parent) { switch (_comparison) { case Comparison.Equal: return _condition.AreValuesEqual(_variable, _value); diff --git a/Assets/com.fluid.dialogue/Runtime/Actions/Libraries/Databases/Locals/Conditions/IsLocalFloat.cs b/Assets/com.fluid.dialogue/Runtime/Actions/Libraries/Databases/Locals/Conditions/IsLocalFloat.cs index 15ae85d..63a6374 100644 --- a/Assets/com.fluid.dialogue/Runtime/Actions/Libraries/Databases/Locals/Conditions/IsLocalFloat.cs +++ b/Assets/com.fluid.dialogue/Runtime/Actions/Libraries/Databases/Locals/Conditions/IsLocalFloat.cs @@ -1,6 +1,7 @@ using System; using CleverCrow.Fluid.Databases; using CleverCrow.Fluid.Dialogues.Conditions; +using CleverCrow.Fluid.Dialogues.Nodes; using UnityEngine; namespace CleverCrow.Fluid.Dialogues.Actions.Databases { @@ -21,7 +22,7 @@ public override void OnInit (IDialogueController dialogue) { _condition = new ConditionLocalFloatInternal(dialogue.LocalDatabase.Floats); } - public override bool OnGetIsValid () { + public override bool OnGetIsValid (INode parent) { return _condition.IsComparisonValid(_variable, _value, _comparison); } } diff --git a/Assets/com.fluid.dialogue/Runtime/Actions/Libraries/Databases/Locals/Conditions/IsLocalInt.cs b/Assets/com.fluid.dialogue/Runtime/Actions/Libraries/Databases/Locals/Conditions/IsLocalInt.cs index 6e8bb4f..4814eb4 100644 --- a/Assets/com.fluid.dialogue/Runtime/Actions/Libraries/Databases/Locals/Conditions/IsLocalInt.cs +++ b/Assets/com.fluid.dialogue/Runtime/Actions/Libraries/Databases/Locals/Conditions/IsLocalInt.cs @@ -1,6 +1,7 @@ using System; using CleverCrow.Fluid.Databases; using CleverCrow.Fluid.Dialogues.Conditions; +using CleverCrow.Fluid.Dialogues.Nodes; using UnityEngine; namespace CleverCrow.Fluid.Dialogues.Actions.Databases { @@ -21,7 +22,7 @@ public override void OnInit (IDialogueController dialogue) { _condition = new ConditionLocalIntInternal(dialogue.LocalDatabase.Ints); } - public override bool OnGetIsValid () { + public override bool OnGetIsValid (INode parent) { return _condition.IsComparisonValid(_variable, _value, _comparison); } } diff --git a/Assets/com.fluid.dialogue/Runtime/Actions/Libraries/Databases/Locals/Conditions/IsLocalString.cs b/Assets/com.fluid.dialogue/Runtime/Actions/Libraries/Databases/Locals/Conditions/IsLocalString.cs index 9a1ddb8..9a58ae8 100644 --- a/Assets/com.fluid.dialogue/Runtime/Actions/Libraries/Databases/Locals/Conditions/IsLocalString.cs +++ b/Assets/com.fluid.dialogue/Runtime/Actions/Libraries/Databases/Locals/Conditions/IsLocalString.cs @@ -1,6 +1,7 @@ using System; using CleverCrow.Fluid.Databases; using CleverCrow.Fluid.Dialogues.Conditions; +using CleverCrow.Fluid.Dialogues.Nodes; using UnityEngine; namespace CleverCrow.Fluid.Dialogues.Actions.Databases { @@ -26,7 +27,7 @@ public override void OnInit (IDialogueController dialogue) { _condition = new ConditionLocalStringInternal(dialogue.LocalDatabase.Strings); } - public override bool OnGetIsValid () { + public override bool OnGetIsValid (INode parent) { switch (_comparison) { case Comparison.Equal: return _condition.AreValuesEqual(_variable, _value); diff --git a/Assets/com.fluid.dialogue/Runtime/Conditions/ConditionDataBase.cs b/Assets/com.fluid.dialogue/Runtime/Conditions/ConditionDataBase.cs index ac2c70b..6b07b6c 100644 --- a/Assets/com.fluid.dialogue/Runtime/Conditions/ConditionDataBase.cs +++ b/Assets/com.fluid.dialogue/Runtime/Conditions/ConditionDataBase.cs @@ -4,7 +4,7 @@ namespace CleverCrow.Fluid.Dialogues.Conditions { public abstract class ConditionDataBase : NodeNestedDataBase, IConditionData { public virtual void OnInit (IDialogueController dialogue) {} - public abstract bool OnGetIsValid (); + public abstract bool OnGetIsValid (INode parent); public override ICondition GetRuntime (IGraph graphRuntime, IDialogueController dialogue) { return new ConditionRuntime(dialogue, _uniqueId, Instantiate(this)); diff --git a/Assets/com.fluid.dialogue/Runtime/Conditions/ConditionRuntime.cs b/Assets/com.fluid.dialogue/Runtime/Conditions/ConditionRuntime.cs index b1b9daa..5ca44cb 100644 --- a/Assets/com.fluid.dialogue/Runtime/Conditions/ConditionRuntime.cs +++ b/Assets/com.fluid.dialogue/Runtime/Conditions/ConditionRuntime.cs @@ -1,7 +1,9 @@ +using CleverCrow.Fluid.Dialogues.Nodes; + namespace CleverCrow.Fluid.Dialogues.Conditions { public interface IConditionData { void OnInit (IDialogueController dialogue); - bool OnGetIsValid (); + bool OnGetIsValid (INode parent); } public class ConditionRuntime : ICondition { @@ -18,13 +20,13 @@ public ConditionRuntime (IDialogueController dialogueController, string uniqueId UniqueId = uniqueId; } - public bool GetIsValid () { + public bool GetIsValid (INode parent) { if (!_initTriggered) { _data.OnInit(_dialogueController); _initTriggered = true; } - return _data.OnGetIsValid(); + return _data.OnGetIsValid(parent); } } } diff --git a/Assets/com.fluid.dialogue/Runtime/Conditions/ICondition.cs b/Assets/com.fluid.dialogue/Runtime/Conditions/ICondition.cs index 0af2c80..23b8b27 100644 --- a/Assets/com.fluid.dialogue/Runtime/Conditions/ICondition.cs +++ b/Assets/com.fluid.dialogue/Runtime/Conditions/ICondition.cs @@ -1,5 +1,7 @@ +using CleverCrow.Fluid.Dialogues.Nodes; + namespace CleverCrow.Fluid.Dialogues.Conditions { public interface ICondition : IUniqueId { - bool GetIsValid (); + bool GetIsValid (INode parent); } } diff --git a/Assets/com.fluid.dialogue/Runtime/Nodes/ChoiceHub/NodeChoiceHub.cs b/Assets/com.fluid.dialogue/Runtime/Nodes/ChoiceHub/NodeChoiceHub.cs index af300b9..d106a33 100644 --- a/Assets/com.fluid.dialogue/Runtime/Nodes/ChoiceHub/NodeChoiceHub.cs +++ b/Assets/com.fluid.dialogue/Runtime/Nodes/ChoiceHub/NodeChoiceHub.cs @@ -14,7 +14,7 @@ public class NodeChoiceHub : INode { public List ExitActions { get; } public virtual bool IsValid => - _conditions.Find(c => !c.GetIsValid()) == null; + _conditions.Find(c => !c.GetIsValid(this)) == null; public List HubChoices => _choiceList.Where(c => c.IsValid).ToList(); diff --git a/Assets/com.fluid.dialogue/Runtime/Nodes/NodeBase.cs b/Assets/com.fluid.dialogue/Runtime/Nodes/NodeBase.cs index 503f7a3..8378acf 100644 --- a/Assets/com.fluid.dialogue/Runtime/Nodes/NodeBase.cs +++ b/Assets/com.fluid.dialogue/Runtime/Nodes/NodeBase.cs @@ -15,7 +15,7 @@ public abstract class NodeBase : INode { public List EnterActions { get; } public List ExitActions { get; } public virtual bool IsValid => - _conditions.Find(c => !c.GetIsValid()) == null; + _conditions.Find(c => !c.GetIsValid(this)) == null; public List HubChoices { get; } public string UniqueId { get; } diff --git a/Assets/com.fluid.dialogue/Runtime/Nodes/NodeDataBase.cs b/Assets/com.fluid.dialogue/Runtime/Nodes/NodeDataBase.cs index 29240a5..6f98793 100644 --- a/Assets/com.fluid.dialogue/Runtime/Nodes/NodeDataBase.cs +++ b/Assets/com.fluid.dialogue/Runtime/Nodes/NodeDataBase.cs @@ -20,7 +20,7 @@ public interface IConnectionChildCollection { } public abstract class NodeDataBase : ScriptableObject, INodeData { - // [HideInInspector] + [HideInInspector] [SerializeField] private string _uniqueId; diff --git a/Assets/com.fluid.dialogue/Tests/Editor/ConditionRuntimeTest.cs b/Assets/com.fluid.dialogue/Tests/Editor/ConditionRuntimeTest.cs index e8cd72c..86dec30 100644 --- a/Assets/com.fluid.dialogue/Tests/Editor/ConditionRuntimeTest.cs +++ b/Assets/com.fluid.dialogue/Tests/Editor/ConditionRuntimeTest.cs @@ -15,10 +15,10 @@ public class GetIsValidMethod { public class OnGetIsValidTriggering : ConditionRuntimeTest { [Test] public void It_should_return_the_OnGetIsValid_value () { - _data.OnGetIsValid().Returns(true); + _data.OnGetIsValid(null).Returns(true); var condition = new ConditionRuntime(null, null, _data); - var result = condition.GetIsValid(); + var result = condition.GetIsValid(null); Assert.IsTrue(result); } @@ -29,7 +29,7 @@ public class OnInitTriggering : ConditionRuntimeTest { public void It_should_trigger_OnInit_with_a_dialogue_controller () { var condition = new ConditionRuntime(null, null, _data); - condition.GetIsValid(); + condition.GetIsValid(null); _data.Received(1).OnInit(null); } @@ -38,8 +38,8 @@ public void It_should_trigger_OnInit_with_a_dialogue_controller () { public void It_should_trigger_OnInit_only_once () { var condition = new ConditionRuntime(null, null, _data); - condition.GetIsValid(); - condition.GetIsValid(); + condition.GetIsValid(null); + condition.GetIsValid(null); _data.Received(1).OnInit(null); } diff --git a/Assets/com.fluid.dialogue/Tests/Editor/Nodes/NodeChoiceHubTest.cs b/Assets/com.fluid.dialogue/Tests/Editor/Nodes/NodeChoiceHubTest.cs index 4a9c63f..7a0f412 100644 --- a/Assets/com.fluid.dialogue/Tests/Editor/Nodes/NodeChoiceHubTest.cs +++ b/Assets/com.fluid.dialogue/Tests/Editor/Nodes/NodeChoiceHubTest.cs @@ -27,7 +27,7 @@ public void It_should_return_true () { [Test] public void It_should_return_true_if_all_conditions_are_true () { var condition = Substitute.For(); - condition.GetIsValid().Returns(true); + condition.GetIsValid(Arg.Any()).Returns(true); _conditions.Add(condition); Assert.IsTrue(_choiceHub.IsValid); @@ -36,7 +36,7 @@ public void It_should_return_true_if_all_conditions_are_true () { [Test] public void It_should_return_false_if_any_conditions_are_false () { var condition = Substitute.For(); - condition.GetIsValid().Returns(false); + condition.GetIsValid(Arg.Any()).Returns(false); _conditions.Add(condition); Assert.IsFalse(_choiceHub.IsValid); diff --git a/Assets/com.fluid.dialogue/Tests/Editor/Nodes/NodeDialogueTest.cs b/Assets/com.fluid.dialogue/Tests/Editor/Nodes/NodeDialogueTest.cs index de429b6..aae40e9 100644 --- a/Assets/com.fluid.dialogue/Tests/Editor/Nodes/NodeDialogueTest.cs +++ b/Assets/com.fluid.dialogue/Tests/Editor/Nodes/NodeDialogueTest.cs @@ -240,7 +240,7 @@ public class IsValid : NodeDialogueTest { [Test] public void It_should_return_true_if_all_conditions_are_true () { var condition = Substitute.For(); - condition.GetIsValid().Returns(true); + condition.GetIsValid(Arg.Any()).Returns(true); _conditions.Add(condition); var node = CreateNodeDialogue(); @@ -250,7 +250,7 @@ public void It_should_return_true_if_all_conditions_are_true () { [Test] public void It_should_return_false_if_any_conditions_are_false () { var condition = Substitute.For(); - condition.GetIsValid().Returns(false); + condition.GetIsValid(Arg.Any()).Returns(false); _conditions.Add(condition); var node = CreateNodeDialogue(); diff --git a/Assets/com.fluid.dialogue/Tests/Editor/Nodes/NodeHubTest.cs b/Assets/com.fluid.dialogue/Tests/Editor/Nodes/NodeHubTest.cs index 70f0b90..c390e81 100644 --- a/Assets/com.fluid.dialogue/Tests/Editor/Nodes/NodeHubTest.cs +++ b/Assets/com.fluid.dialogue/Tests/Editor/Nodes/NodeHubTest.cs @@ -68,7 +68,7 @@ public class IsValidProperty : NodeHubTest { [Test] public void It_should_return_true_if_all_conditions_are_true () { var condition = Substitute.For(); - condition.GetIsValid().Returns(true); + condition.GetIsValid(Arg.Any()).Returns(true); _conditions.Add(condition); var hub = CreateNodeHub(); @@ -78,7 +78,7 @@ public void It_should_return_true_if_all_conditions_are_true () { [Test] public void It_should_return_false_if_all_conditions_are_false () { var condition = Substitute.For(); - condition.GetIsValid().Returns(false); + condition.GetIsValid(Arg.Any()).Returns(false); _conditions.Add(condition); var hub = CreateNodeHub(); diff --git a/CHANGELOG.md b/CHANGELOG.md index dd504e3..0f9bdda 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,16 @@ +# [2.0.0](https://github.com/ashblue/fluid-dialogue/compare/v1.2.0...v2.0.0) (2020-01-01) + + +### Features + +* **conditions:** added ability to access the parent node ([d4e7461](https://github.com/ashblue/fluid-dialogue/commit/d4e7461)) + + +### BREAKING CHANGES + +* **conditions:** Any existing custom conditions will need to convert `OnGetIsValid()` to +`OnGetIsValid(INode parent)` + # [1.2.0](https://github.com/ashblue/fluid-dialogue/compare/v1.1.1...v1.2.0) (2020-01-01)