diff --git a/Demo/Assets/CrashKonijn/GOAP/Demos/Complex/Factories/Capabilities/HungerCapability.cs b/Demo/Assets/CrashKonijn/GOAP/Demos/Complex/Factories/Capabilities/HungerCapability.cs index 8deb46c7..b3436260 100644 --- a/Demo/Assets/CrashKonijn/GOAP/Demos/Complex/Factories/Capabilities/HungerCapability.cs +++ b/Demo/Assets/CrashKonijn/GOAP/Demos/Complex/Factories/Capabilities/HungerCapability.cs @@ -28,7 +28,7 @@ public override ICapabilityConfig Create() .SetTarget() .AddEffect(EffectType.Decrease) .AddCondition>(Comparison.GreaterThanOrEqual, 1) - .AddCondition(Comparison.GreaterThanOrEqual, 30) + .AddCondition(Comparison.GreaterThanOrEqual) .SetValidateConditions(false); // We don't need to validate conditions for this action, or it will stop when becoming below 80 hunger builder.AddAction>() @@ -50,6 +50,8 @@ public override ICapabilityConfig Create() builder.AddIsHoldingSensor(); builder.AddWorldSensor() .SetKey(); + builder.AddWorldSensor() + .SetKey(); // Multi sensor builder.AddMultiSensor>(); diff --git a/Demo/Assets/CrashKonijn/GOAP/Demos/Complex/Sensors/World/LowHungerSensor.cs b/Demo/Assets/CrashKonijn/GOAP/Demos/Complex/Sensors/World/LowHungerSensor.cs new file mode 100644 index 00000000..73535d28 --- /dev/null +++ b/Demo/Assets/CrashKonijn/GOAP/Demos/Complex/Sensors/World/LowHungerSensor.cs @@ -0,0 +1,24 @@ +using CrashKonijn.Agent.Core; +using CrashKonijn.Goap.Core; +using CrashKonijn.Goap.Runtime; + +namespace CrashKonijn.Goap.Demos.Complex.Sensors.World +{ + public class LowHungerSensor : LocalWorldSensorBase + { + public override ISensorTimer Timer { get; } = SensorTimer.Once; + + public override void Created() + { + } + + public override void Update() + { + } + + public override SenseValue Sense(IActionReceiver agent, IComponentReference references) + { + return 30; + } + } +} diff --git a/Demo/Assets/CrashKonijn/GOAP/Demos/Complex/Sensors/World/LowHungerSensor.cs.meta b/Demo/Assets/CrashKonijn/GOAP/Demos/Complex/Sensors/World/LowHungerSensor.cs.meta new file mode 100644 index 00000000..20be8d8f --- /dev/null +++ b/Demo/Assets/CrashKonijn/GOAP/Demos/Complex/Sensors/World/LowHungerSensor.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6955e021f58541a18f55e7d24cc63cc0 +timeCreated: 1747136561 \ No newline at end of file diff --git a/Demo/Assets/CrashKonijn/GOAP/Demos/Complex/WorldKeys/LowHunger.cs b/Demo/Assets/CrashKonijn/GOAP/Demos/Complex/WorldKeys/LowHunger.cs new file mode 100644 index 00000000..eab1598e --- /dev/null +++ b/Demo/Assets/CrashKonijn/GOAP/Demos/Complex/WorldKeys/LowHunger.cs @@ -0,0 +1,8 @@ +using CrashKonijn.Goap.Runtime; + +namespace CrashKonijn.Goap.Demos.Complex.WorldKeys +{ + public class LowHunger : WorldKeyBase + { + } +} diff --git a/Demo/Assets/CrashKonijn/GOAP/Demos/Complex/WorldKeys/LowHunger.cs.meta b/Demo/Assets/CrashKonijn/GOAP/Demos/Complex/WorldKeys/LowHunger.cs.meta new file mode 100644 index 00000000..2132f595 --- /dev/null +++ b/Demo/Assets/CrashKonijn/GOAP/Demos/Complex/WorldKeys/LowHunger.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 45b7deaea2294423bbcc67fe65669839 +timeCreated: 1747136505 \ No newline at end of file diff --git a/Package/Documentation/Config/Code.md b/Package/Documentation/Config/Code.md index 814e66d6..c6feeb83 100644 --- a/Package/Documentation/Config/Code.md +++ b/Package/Documentation/Config/Code.md @@ -76,6 +76,16 @@ namespace CrashKonijn.Docs.GettingStarted.Capabilities ``` {% endcode %} +### Dynamic Conditions +Since v3.1 you can now add dynamic conditions! + +{% code lineNumbers="true" %} +```csharp +builder.AddAction() + .AddCondition(Comparison.GreaterThanOrEqual); +``` +{% endcode %} + ### Callbacks In v3 you can add a callback to your builder methods, giving you access to the instance of each class. This allows you to set extra data. diff --git a/Package/Documentation/upgrade/upgrade-guide-3.0-3.1.md b/Package/Documentation/upgrade/upgrade-guide-3.0-3.1.md index 42232437..0e7d181e 100644 --- a/Package/Documentation/upgrade/upgrade-guide-3.0-3.1.md +++ b/Package/Documentation/upgrade/upgrade-guide-3.0-3.1.md @@ -30,6 +30,13 @@ public interface IGoapInjector ## New Features +### You can now make dynamic conditions (code only)! + +```csharp +builder.AddAction() + .AddCondition(Comparison.GreaterThanOrEqual); +``` + ### AgenTypeFactory and CapabilityFactory can now be injected You can now inject into `AgentTypeFactoryBase` and `CapabilityFactoryBase` classes, similar to other actions, goals and sensors. diff --git a/Package/Editor/CrashKonijn.Goap.Editor/Extensions.cs b/Package/Editor/CrashKonijn.Goap.Editor/Extensions.cs index 97e19d1b..1735bb49 100644 --- a/Package/Editor/CrashKonijn.Goap.Editor/Extensions.cs +++ b/Package/Editor/CrashKonijn.Goap.Editor/Extensions.cs @@ -33,5 +33,13 @@ public static float GetCost(this INode node, IGoapActionProvider provider) return 0; } + + public static int GetAmount(this ICondition condition) + { + if (condition is IValueCondition serializableCondition) + return serializableCondition.Amount; + + return 0; + } } } \ No newline at end of file diff --git a/Package/Editor/CrashKonijn.Goap.Editor/GraphViewer/ConditionElement.cs b/Package/Editor/CrashKonijn.Goap.Editor/GraphViewer/ConditionElement.cs index 0b695e38..3d76a515 100644 --- a/Package/Editor/CrashKonijn.Goap.Editor/GraphViewer/ConditionElement.cs +++ b/Package/Editor/CrashKonijn.Goap.Editor/GraphViewer/ConditionElement.cs @@ -62,7 +62,28 @@ private string GetText(ICondition condition) { var suffix = this.GetSuffix(condition); - return $"{condition.WorldKey.Name} {this.GetText(condition.Comparison)} {condition.Amount} {suffix}"; + return $"{condition.WorldKey.Name} {this.GetText(condition.Comparison)} {GetValueText(condition)} {suffix}"; + } + + private string GetValueText(ICondition condition) + { + if (condition is IValueCondition valueCondition) + return valueCondition.Amount.ToString(); + + if (condition is IReferenceCondition referenceCondition) + { + if (!Application.isPlaying) + return referenceCondition.ValueKey.Name; + + if (this.values.SelectedObject is not IMonoGoapActionProvider agent) + return referenceCondition.ValueKey.Name; + + var (exists, value) = agent.WorldData.GetWorldValue(referenceCondition.ValueKey); + + return $"{value} ({referenceCondition.ValueKey.Name})"; + } + + return ""; } private string GetSuffix(ICondition condition) diff --git a/Package/Editor/CrashKonijn.Goap.Editor/TypeDrawers/GoapSetConfigEditor.cs b/Package/Editor/CrashKonijn.Goap.Editor/TypeDrawers/GoapSetConfigEditor.cs index b71a64d5..771182cc 100644 --- a/Package/Editor/CrashKonijn.Goap.Editor/TypeDrawers/GoapSetConfigEditor.cs +++ b/Package/Editor/CrashKonijn.Goap.Editor/TypeDrawers/GoapSetConfigEditor.cs @@ -125,7 +125,7 @@ private void Upgrade(CapabilityConfigScriptable capabilityScriptable) Name = x.WorldKey.Name }, comparison = x.Comparison, - amount = x.Amount + amount = x.GetAmount() }).ToList() }); } @@ -152,7 +152,7 @@ private void Upgrade(CapabilityConfigScriptable capabilityScriptable) Name = x.WorldKey.Name }, comparison = x.Comparison, - amount = x.Amount + amount = x.GetAmount() }).ToList(), effects = actionConfig.Effects.Select(x => new CapabilityEffect { diff --git a/Package/Runtime/CrashKonijn.Goap.Core/Interfaces/IActionBuilder.cs b/Package/Runtime/CrashKonijn.Goap.Core/Interfaces/IActionBuilder.cs index 30612b79..05d7c018 100644 --- a/Package/Runtime/CrashKonijn.Goap.Core/Interfaces/IActionBuilder.cs +++ b/Package/Runtime/CrashKonijn.Goap.Core/Interfaces/IActionBuilder.cs @@ -1,8 +1,7 @@ using System; using CrashKonijn.Agent.Core; -using CrashKonijn.Goap.Core; -namespace CrashKonijn.Goap.Runtime +namespace CrashKonijn.Goap.Core { public interface IActionBuilder where T : IAction { @@ -69,6 +68,17 @@ IActionBuilder SetTarget() IActionBuilder AddCondition(Comparison comparison, int amount) where TWorldKey : IWorldKey; + /// + /// Adds a reference condition to the action. + /// + /// The type of the world key. + /// The type of the value world key reference. + /// The comparison type. + /// The current instance of . + IActionBuilder AddCondition(Comparison comparison) + where TWorldKey : IWorldKey + where TValueKey : IWorldKey; + IActionBuilder AddEffect(bool increase) where TWorldKey : IWorldKey; diff --git a/Package/Runtime/CrashKonijn.Goap.Core/Interfaces/ICondition.cs b/Package/Runtime/CrashKonijn.Goap.Core/Interfaces/ICondition.cs index 15581382..a053c407 100644 --- a/Package/Runtime/CrashKonijn.Goap.Core/Interfaces/ICondition.cs +++ b/Package/Runtime/CrashKonijn.Goap.Core/Interfaces/ICondition.cs @@ -4,6 +4,15 @@ public interface ICondition { public IWorldKey WorldKey { get; } public Comparison Comparison { get; } + } + + public interface IValueCondition : ICondition + { public int Amount { get; } } + + public interface IReferenceCondition : ICondition + { + public IWorldKey ValueKey { get; } + } } diff --git a/Package/Runtime/CrashKonijn.Goap.Core/Interfaces/IWorldData.cs b/Package/Runtime/CrashKonijn.Goap.Core/Interfaces/IWorldData.cs index 3a82fa6e..bed2d6a4 100644 --- a/Package/Runtime/CrashKonijn.Goap.Core/Interfaces/IWorldData.cs +++ b/Package/Runtime/CrashKonijn.Goap.Core/Interfaces/IWorldData.cs @@ -15,6 +15,7 @@ public interface IWorldData void SetTarget(ITarget target) where TKey : ITargetKey; bool IsTrue(Comparison comparison, int value); bool IsTrue(IWorldKey worldKey, Comparison comparison, int value); + bool IsTrue(IWorldKey worldKey, Comparison comparison, IWorldKey valueKey); (bool Exists, int Value) GetWorldValue(TKey worldKey) where TKey : IWorldKey; (bool Exists, int Value) GetWorldValue(Type worldKey); ITarget GetTargetValue(Type targetKey); diff --git a/Package/Runtime/CrashKonijn.Goap.Runtime/Classes/Builders/ActionBuilder.cs b/Package/Runtime/CrashKonijn.Goap.Runtime/Classes/Builders/ActionBuilder.cs index 907dcb0f..e76ac543 100644 --- a/Package/Runtime/CrashKonijn.Goap.Runtime/Classes/Builders/ActionBuilder.cs +++ b/Package/Runtime/CrashKonijn.Goap.Runtime/Classes/Builders/ActionBuilder.cs @@ -107,7 +107,7 @@ public IActionBuilder SetMoveMode(ActionMoveMode moveMode) public IActionBuilder AddCondition(Comparison comparison, int amount) where TWorldKey : IWorldKey { - this.conditions.Add(new Condition + this.conditions.Add(new ValueCondition { WorldKey = this.worldKeyBuilder.GetKey(), Comparison = comparison, @@ -116,6 +116,21 @@ public IActionBuilder AddCondition(Comparison comparison, int amou return this; } + + /// + /// Adds a reference condition to the action. + /// + /// The type of the world key. + /// The type of the value world key reference. + /// The comparison type. + /// The current instance of . + public IActionBuilder AddCondition(Comparison comparison) + where TWorldKey : IWorldKey + where TValueKey : IWorldKey + { + this.conditions.Add(new ReferenceCondition(this.worldKeyBuilder.GetKey(), comparison, this.worldKeyBuilder.GetKey())); + return this; + } [Obsolete("Use `AddEffect(EffectType type)` instead.")] public IActionBuilder AddEffect(bool increase) diff --git a/Package/Runtime/CrashKonijn.Goap.Runtime/Classes/Builders/GoalBuilder.cs b/Package/Runtime/CrashKonijn.Goap.Runtime/Classes/Builders/GoalBuilder.cs index 72595dc2..579fc186 100644 --- a/Package/Runtime/CrashKonijn.Goap.Runtime/Classes/Builders/GoalBuilder.cs +++ b/Package/Runtime/CrashKonijn.Goap.Runtime/Classes/Builders/GoalBuilder.cs @@ -22,7 +22,7 @@ public IGoalBuilder SetBaseCost(float baseCost) } /// - /// Adds a condition to the goal. + /// Adds a value condition to the goal. /// /// The type of the world key. /// The comparison type. @@ -31,7 +31,22 @@ public IGoalBuilder SetBaseCost(float baseCost) public IGoalBuilder AddCondition(Comparison comparison, int amount) where TWorldKey : IWorldKey { - this.conditions.Add(new Condition(this.worldKeyBuilder.GetKey(), comparison, amount)); + this.conditions.Add(new ValueCondition(this.worldKeyBuilder.GetKey(), comparison, amount)); + return this; + } + + /// + /// Adds a reference condition to the goal. + /// + /// The type of the world key. + /// The type of the value world key reference. + /// The comparison type. + /// The current instance of . + public GoalBuilder AddCondition(Comparison comparison) + where TWorldKey : IWorldKey + where TValueKey : IWorldKey + { + this.conditions.Add(new ReferenceCondition(this.worldKeyBuilder.GetKey(), comparison, this.worldKeyBuilder.GetKey())); return this; } diff --git a/Package/Runtime/CrashKonijn.Goap.Runtime/Classes/ReferenceCondition.cs b/Package/Runtime/CrashKonijn.Goap.Runtime/Classes/ReferenceCondition.cs new file mode 100644 index 00000000..9429397e --- /dev/null +++ b/Package/Runtime/CrashKonijn.Goap.Runtime/Classes/ReferenceCondition.cs @@ -0,0 +1,22 @@ +using CrashKonijn.Goap.Core; + +namespace CrashKonijn.Goap.Runtime +{ + public class ReferenceCondition : IReferenceCondition + { + public IWorldKey WorldKey { get; set; } + public Comparison Comparison { get; set; } + public IWorldKey ValueKey { get; set; } + + public ReferenceCondition() + { + } + + public ReferenceCondition(IWorldKey worldKey, Comparison comparison, IWorldKey valueKey) + { + this.WorldKey = worldKey; + this.Comparison = comparison; + this.ValueKey = valueKey; + } + } +} \ No newline at end of file diff --git a/Package/Runtime/CrashKonijn.Goap.Runtime/Classes/ReferenceCondition.cs.meta b/Package/Runtime/CrashKonijn.Goap.Runtime/Classes/ReferenceCondition.cs.meta new file mode 100644 index 00000000..8cc7642b --- /dev/null +++ b/Package/Runtime/CrashKonijn.Goap.Runtime/Classes/ReferenceCondition.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 53980adea6dd4248a4820f7d5d15dc4e +timeCreated: 1765300309 \ No newline at end of file diff --git a/Package/Runtime/CrashKonijn.Goap.Runtime/Classes/Runners/SensorRunner.cs b/Package/Runtime/CrashKonijn.Goap.Runtime/Classes/Runners/SensorRunner.cs index 769abadb..d4b1582b 100644 --- a/Package/Runtime/CrashKonijn.Goap.Runtime/Classes/Runners/SensorRunner.cs +++ b/Package/Runtime/CrashKonijn.Goap.Runtime/Classes/Runners/SensorRunner.cs @@ -192,6 +192,9 @@ private SensorSet CreateSet(IGoapAction action) foreach (var condition in action.Conditions) { set.Keys.Add(condition.WorldKey.GetType()); + + if (condition is IReferenceCondition referenceCondition) + set.Keys.Add(referenceCondition.ValueKey.GetType()); } foreach (var key in set.Keys) @@ -239,6 +242,17 @@ private SensorSet CreateSet(INode node) { set.AddSensor(sensor); } + + if (condition is IReferenceCondition referenceCondition) + { + var referenceKey = referenceCondition.ValueKey.GetType(); + set.Keys.Add(referenceKey); + + if (this.sensors.TryGetValue(referenceKey, out var referenceSensor)) + { + set.AddSensor(referenceSensor); + } + } } foreach (var action in actions.Distinct()) diff --git a/Package/Runtime/CrashKonijn.Goap.Runtime/Classes/Condition.cs b/Package/Runtime/CrashKonijn.Goap.Runtime/Classes/ValueCondition.cs similarity index 69% rename from Package/Runtime/CrashKonijn.Goap.Runtime/Classes/Condition.cs rename to Package/Runtime/CrashKonijn.Goap.Runtime/Classes/ValueCondition.cs index 94d11717..3e1c191e 100644 --- a/Package/Runtime/CrashKonijn.Goap.Runtime/Classes/Condition.cs +++ b/Package/Runtime/CrashKonijn.Goap.Runtime/Classes/ValueCondition.cs @@ -2,17 +2,17 @@ namespace CrashKonijn.Goap.Runtime { - public class Condition : ICondition + public class ValueCondition : IValueCondition { public IWorldKey WorldKey { get; set; } public Comparison Comparison { get; set; } public int Amount { get; set; } - public Condition() + public ValueCondition() { } - public Condition(IWorldKey worldKey, Comparison comparison, int amount) + public ValueCondition(IWorldKey worldKey, Comparison comparison, int amount) { this.WorldKey = worldKey; this.Comparison = comparison; diff --git a/Package/Runtime/CrashKonijn.Goap.Runtime/Classes/Condition.cs.meta b/Package/Runtime/CrashKonijn.Goap.Runtime/Classes/ValueCondition.cs.meta similarity index 100% rename from Package/Runtime/CrashKonijn.Goap.Runtime/Classes/Condition.cs.meta rename to Package/Runtime/CrashKonijn.Goap.Runtime/Classes/ValueCondition.cs.meta diff --git a/Package/Runtime/CrashKonijn.Goap.Runtime/Observers/ConditionObserver.cs b/Package/Runtime/CrashKonijn.Goap.Runtime/Observers/ConditionObserver.cs index 84974c4b..a072bf56 100644 --- a/Package/Runtime/CrashKonijn.Goap.Runtime/Observers/ConditionObserver.cs +++ b/Package/Runtime/CrashKonijn.Goap.Runtime/Observers/ConditionObserver.cs @@ -1,12 +1,29 @@ -using CrashKonijn.Goap.Core; +using System; +using CrashKonijn.Goap.Core; namespace CrashKonijn.Goap.Runtime { public class ConditionObserver : ConditionObserverBase { public override bool IsMet(ICondition condition) + { + if (condition is IValueCondition valueCondition) + return IsMet(valueCondition); + + if (condition is IReferenceCondition referenceCondition) + return IsMet(referenceCondition); + + throw new ArgumentException($"Unknown condition type: {condition.GetType()}"); + } + + private bool IsMet(IValueCondition condition) { return this.WorldData.IsTrue(condition.WorldKey, condition.Comparison, condition.Amount); } + + private bool IsMet(IReferenceCondition condition) + { + return this.WorldData.IsTrue(condition.WorldKey, condition.Comparison, condition.ValueKey); + } } } \ No newline at end of file diff --git a/Package/Runtime/CrashKonijn.Goap.Runtime/Scriptables/CapabilityConfigScriptable.cs b/Package/Runtime/CrashKonijn.Goap.Runtime/Scriptables/CapabilityConfigScriptable.cs index cb51aa1e..41f5694c 100644 --- a/Package/Runtime/CrashKonijn.Goap.Runtime/Scriptables/CapabilityConfigScriptable.cs +++ b/Package/Runtime/CrashKonijn.Goap.Runtime/Scriptables/CapabilityConfigScriptable.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using CrashKonijn.Goap.Core; using UnityEditor; using UnityEngine; @@ -49,7 +50,7 @@ public List GetActions(GeneratorScriptable generator) for (var i = 0; i < x.conditions.Count; i++) { var condition = x.conditions[i]; - conditions[i] = new Condition + conditions[i] = new ValueCondition { WorldKey = condition.worldKey.GetScript(worldKeys).GetInstance(), Comparison = condition.comparison, @@ -105,7 +106,7 @@ public List GetGoals(GeneratorScriptable generator) foreach (var condition in goal.conditions) { - conditions.Add(new Condition + conditions.Add(new ValueCondition { WorldKey = condition.worldKey.GetScript(worldKeys).GetInstance(), Comparison = condition.comparison, @@ -199,5 +200,33 @@ public GeneratorScriptable GetGenerator() #endif return this.generatorScriptable; } + + public void FixIssues() + { +#if UNITY_EDITOR + var validator = new ScriptReferenceValidator(); + + var issues = validator.CheckAll(this); + + if (issues.Length == 0) + { + Debug.Log("No issues found!"); + return; + } + + foreach (var issue in issues) + { + issue.Fix(this.GetGenerator()); + } + + EditorUtility.SetDirty(this); + AssetDatabase.SaveAssetIfDirty(this); +#endif + } + + private void OnValidate() + { + this.FixIssues(); + } } } diff --git a/Package/Runtime/CrashKonijn.Goap.Runtime/WorldDataBase.cs b/Package/Runtime/CrashKonijn.Goap.Runtime/WorldDataBase.cs index 5c668ee1..ec3f78a7 100644 --- a/Package/Runtime/CrashKonijn.Goap.Runtime/WorldDataBase.cs +++ b/Package/Runtime/CrashKonijn.Goap.Runtime/WorldDataBase.cs @@ -33,6 +33,21 @@ public bool IsTrue(IWorldKey worldKey, Comparison comparison, int value) return this.IsTrue(worldKey.GetType(), comparison, value); } + public bool IsTrue(IWorldKey worldKey, Comparison comparison, IWorldKey valueKey) + { + return this.IsTrue(worldKey.GetType(), comparison, valueKey.GetType()); + } + + public bool IsTrue(Type worldKey, Comparison comparison, Type valueKey) + { + var (exists, valueState) = this.GetWorldValue(valueKey); + + if (!exists) + return false; + + return this.IsTrue(worldKey, comparison, valueState); + } + public bool IsTrue(Type worldKey, Comparison comparison, int value) { var (exists, state) = this.GetWorldValue(worldKey); diff --git a/Package/Tests/CrashKonijn.Goap.Tests/UnitTests/ConditionObserverTests.cs b/Package/Tests/CrashKonijn.Goap.Tests/UnitTests/ConditionObserverTests.cs index 8ad6c67d..29ada5d7 100644 --- a/Package/Tests/CrashKonijn.Goap.Tests/UnitTests/ConditionObserverTests.cs +++ b/Package/Tests/CrashKonijn.Goap.Tests/UnitTests/ConditionObserverTests.cs @@ -27,7 +27,7 @@ public void IsMet_Positive_IsPresent() var observer = new ConditionObserver(); observer.SetWorldData(worldData); - var condition = new Condition + var condition = new ValueCondition { Comparison = Comparison.GreaterThanOrEqual, Amount = 1, @@ -50,7 +50,7 @@ public void IsMet_Positive_IsNotPresent() var observer = new ConditionObserver(); observer.SetWorldData(worldData); - var condition = new Condition + var condition = new ValueCondition { Comparison = Comparison.GreaterThanOrEqual, Amount = 1, @@ -75,7 +75,7 @@ public void IsMet_Negative_IsPresent() var observer = new ConditionObserver(); observer.SetWorldData(worldData); - var condition = new Condition + var condition = new ValueCondition { Comparison = Comparison.SmallerThan, Amount = 1, @@ -98,7 +98,7 @@ public void IsMet_Negative_IsNotPresent() var observer = new ConditionObserver(); observer.SetWorldData(worldData); - var condition = new Condition + var condition = new ValueCondition { Comparison = Comparison.SmallerThanOrEqual, Amount = 0, diff --git a/Package/Tests/CrashKonijn.Goap.Tests/UnitTests/GraphBuilderTests.cs b/Package/Tests/CrashKonijn.Goap.Tests/UnitTests/GraphBuilderTests.cs index f121b34c..4512c3ac 100644 --- a/Package/Tests/CrashKonijn.Goap.Tests/UnitTests/GraphBuilderTests.cs +++ b/Package/Tests/CrashKonijn.Goap.Tests/UnitTests/GraphBuilderTests.cs @@ -29,7 +29,7 @@ public void Build_GivenActions_ReturnsGraph() var goal = Substitute.For(); goal.Conditions.Returns(new ICondition[] { - new Condition + new ValueCondition { WorldKey = isHungryKey, Comparison = Comparison.SmallerThan, @@ -40,7 +40,7 @@ public void Build_GivenActions_ReturnsGraph() var eatAppleAction = Substitute.For(); eatAppleAction.Conditions.Returns(new ICondition[] { - new Condition + new ValueCondition { WorldKey = hasAppleKey, Comparison = Comparison.GreaterThan, @@ -59,7 +59,7 @@ public void Build_GivenActions_ReturnsGraph() var getAppleAction = Substitute.For(); getAppleAction.Conditions.Returns(new ICondition[] { - new Condition + new ValueCondition { WorldKey = hasAppleKey, Comparison = Comparison.SmallerThan, @@ -120,7 +120,7 @@ public void Build_GivenActionWithUnmatchedEffects_ShouldBeUnconnected() var goal = Substitute.For(); goal.Conditions.Returns(new ICondition[] { - new Condition + new ValueCondition { WorldKey = isHungryKey, Comparison = Comparison.SmallerThan, @@ -172,7 +172,7 @@ public void Build_GivenOppositeConditions_ShouldNotBeConnected() var goal = Substitute.For(); goal.Conditions.Returns(new ICondition[] { - new Condition + new ValueCondition { WorldKey = isHungryKey, Comparison = Comparison.SmallerThan, @@ -235,13 +235,13 @@ public void Build_GivenActionsWithConflictingConditions_ShouldNotConnect() var goal = Substitute.For(); goal.Conditions.Returns(new ICondition[] { - new Condition + new ValueCondition { WorldKey = lowOnMoneyKey, Comparison = Comparison.SmallerThanOrEqual, Amount = 0, }, - new Condition + new ValueCondition { WorldKey = crimeCommittedKey, Comparison = Comparison.SmallerThanOrEqual,