mirror of
https://github.com/Bragin-Stepan/project-entity.git
synced 2026-03-05 07:41:10 +00:00
feat: add conditions
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a03759ea3f034fa6a538e0a167d7c72a
|
||||
timeCreated: 1771515376
|
||||
@@ -0,0 +1,56 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace _Project.Develop.Runtime.Utilities.Conditions
|
||||
{
|
||||
public class CompositeCondition : ICompositeCondition
|
||||
{
|
||||
private List<(ICondition, Func<bool, bool, bool>, int)> _conditions = new();
|
||||
private Func<bool, bool, bool> _standardLogicOperation;
|
||||
|
||||
public CompositeCondition(Func<bool, bool, bool> standardLogicOperation)
|
||||
{
|
||||
_standardLogicOperation = standardLogicOperation;
|
||||
}
|
||||
|
||||
public CompositeCondition() : this(LogicOperationsUtils.And)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public ICompositeCondition Add(ICondition condition, int order = 0, Func<bool, bool, bool> logicOperation = null)
|
||||
{
|
||||
_conditions.Add((condition, logicOperation, order));
|
||||
_conditions = _conditions.OrderBy(cond => cond.Item3).ToList();
|
||||
return this;
|
||||
}
|
||||
|
||||
public bool Evaluate()
|
||||
{
|
||||
if (_conditions.Count == 0)
|
||||
return false;
|
||||
|
||||
bool result = _conditions[0].Item1.Evaluate();
|
||||
|
||||
for (int i = 1; i < _conditions.Count; i++)
|
||||
{
|
||||
(ICondition, Func<bool, bool, bool>, int) currentCondition = _conditions[i];
|
||||
|
||||
if (currentCondition.Item2 != null)
|
||||
result = currentCondition.Item2.Invoke(result, currentCondition.Item1.Evaluate());
|
||||
else
|
||||
result = _standardLogicOperation.Invoke(result, currentCondition.Item1.Evaluate());
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public ICompositeCondition Remove(ICondition condition)
|
||||
{
|
||||
(ICondition, Func<bool, bool, bool>, int) conditionPair = _conditions.First(condPair => condPair.Item1 == condition);
|
||||
_conditions.Remove(conditionPair);
|
||||
return this;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f44783069f2d1fb42bdd6608da2e604a
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,16 @@
|
||||
using System;
|
||||
|
||||
namespace _Project.Develop.Runtime.Utilities.Conditions
|
||||
{
|
||||
public class FuncCondition : ICondition
|
||||
{
|
||||
private Func<bool> _condition;
|
||||
|
||||
public FuncCondition(Func<bool> condition)
|
||||
{
|
||||
_condition = condition;
|
||||
}
|
||||
|
||||
public bool Evaluate() => _condition.Invoke();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d62e21bbc0d33c7408a9cd905463b830
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,11 @@
|
||||
using System;
|
||||
|
||||
namespace _Project.Develop.Runtime.Utilities.Conditions
|
||||
{
|
||||
public interface ICompositeCondition : ICondition
|
||||
{
|
||||
ICompositeCondition Add(ICondition condition, int order = 0, Func<bool, bool, bool> logicOperation = null);
|
||||
|
||||
ICompositeCondition Remove(ICondition condition);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b3bfaadc771fd854f9d27882b2212136
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,12 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace _Project.Develop.Runtime.Utilities.Conditions
|
||||
{
|
||||
public interface ICondition
|
||||
{
|
||||
bool Evaluate();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 36fcc8f7fc765414388895dc842fe0f1
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
namespace _Project.Develop.Runtime.Utilities.Conditions
|
||||
{
|
||||
public class LogicOperationsUtils
|
||||
{
|
||||
public static bool And(bool a, bool b) => a && b;
|
||||
public static bool Or(bool a, bool b) => a || b;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 44cb53d5052ea6244b01f10d6f37b4a8
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user