diff --git a/.idea/.idea.project-entity/.idea/vcs.xml b/.idea/.idea.project-entity/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/.idea.project-entity/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Assets/_Project/Develop/Runtime/Constants/PathToResources.cs b/Assets/_Project/Develop/Runtime/Constants/PathToResources.cs
index 54a1139..85298d3 100644
--- a/Assets/_Project/Develop/Runtime/Constants/PathToResources.cs
+++ b/Assets/_Project/Develop/Runtime/Constants/PathToResources.cs
@@ -35,6 +35,7 @@ namespace Assets._Project.Develop.Runtime.Utilities.SceneManagement
public static class Entity
{
public const string TestEntity = "Entities/TestEntity";
+ public const string Ghost = "Entities/TestEntity";
}
private static readonly Dictionary _scriptableObject = new()
diff --git a/Assets/_Project/Develop/Runtime/Logic/Gameplay/Entities/EntitiesFactory.cs b/Assets/_Project/Develop/Runtime/Logic/Gameplay/Entities/EntitiesFactory.cs
index 78b1393..eb4e830 100644
--- a/Assets/_Project/Develop/Runtime/Logic/Gameplay/Entities/EntitiesFactory.cs
+++ b/Assets/_Project/Develop/Runtime/Logic/Gameplay/Entities/EntitiesFactory.cs
@@ -19,12 +19,12 @@ namespace _Project.Develop.Runtime.Entities
_monoEntitiesFactory = container.Resolve();
_playerInput = container.Resolve();
}
-
- public Entity CreateTestEntity(Vector3 position)
+
+ public Entity CreateGhostEntity(Vector3 position)
{
Entity entity = CreateEmpty();
- _monoEntitiesFactory.Create(entity, position, PathToResources.Entity.TestEntity);
+ _monoEntitiesFactory.Create(entity, position, PathToResources.Entity.Ghost);
entity
.AddMoveDirection()
@@ -33,10 +33,8 @@ namespace _Project.Develop.Runtime.Entities
.AddRotationSpeed(new ReactiveVariable(800));
entity
- .AddSystem(new CharacterControllerMovementSystem())
- .AddSystem(new TransformRotationSystem())
- // .AddSystem(new RigidbodyMovementSystem())
- // .AddSystem(new RigidbodyRotationSystem())
+ .AddSystem(new RigidbodyMovementSystem())
+ .AddSystem(new RigidbodyRotationSystem())
.AddSystem(new MoveDirectionByInputSystem(_playerInput))
.AddSystem(new RotateDirectionByInputSystem(_playerInput));
diff --git a/Assets/_Project/Develop/Runtime/Logic/Gameplay/Entities/Generated/EntityAPI.cs b/Assets/_Project/Develop/Runtime/Logic/Gameplay/Entities/Generated/EntityAPI.cs
index 716e668..e2900fe 100644
--- a/Assets/_Project/Develop/Runtime/Logic/Gameplay/Entities/Generated/EntityAPI.cs
+++ b/Assets/_Project/Develop/Runtime/Logic/Gameplay/Entities/Generated/EntityAPI.cs
@@ -126,6 +126,49 @@ namespace _Project.Develop.Runtime.Entities
return AddComponent(new _Project.Develop.Runtime.Logic.Gameplay.Features.Movement.MoveSpeed() {Value = value});
}
+ public _Project.Develop.Runtime.Logic.Gameplay.Features.Movement.IsMoving IsMovingC => GetComponent<_Project.Develop.Runtime.Logic.Gameplay.Features.Movement.IsMoving>();
+
+ public _Project.Develop.Runtime.Utils.ReactiveManagement.ReactiveVariable IsMoving => IsMovingC.Value;
+
+ public bool TryGetIsMoving(out _Project.Develop.Runtime.Utils.ReactiveManagement.ReactiveVariable value)
+ {
+ bool result = TryGetComponent(out _Project.Develop.Runtime.Logic.Gameplay.Features.Movement.IsMoving component);
+ if(result)
+ value = component.Value;
+ else
+ value = default(_Project.Develop.Runtime.Utils.ReactiveManagement.ReactiveVariable);
+ return result;
+ }
+
+ public _Project.Develop.Runtime.Entities.Entity AddIsMoving()
+ {
+ return AddComponent(new _Project.Develop.Runtime.Logic.Gameplay.Features.Movement.IsMoving() { Value = new _Project.Develop.Runtime.Utils.ReactiveManagement.ReactiveVariable() });
+ }
+
+ public _Project.Develop.Runtime.Entities.Entity AddIsMoving(_Project.Develop.Runtime.Utils.ReactiveManagement.ReactiveVariable value)
+ {
+ return AddComponent(new _Project.Develop.Runtime.Logic.Gameplay.Features.Movement.IsMoving() {Value = value});
+ }
+
+ public _Project.Develop.Runtime.Logic.Gameplay.Features.Movement.CanMove CanMoveC => GetComponent<_Project.Develop.Runtime.Logic.Gameplay.Features.Movement.CanMove>();
+
+ public _Project.Develop.Runtime.Utilities.Conditions.ICompositeCondition CanMove => CanMoveC.Value;
+
+ public bool TryGetCanMove(out _Project.Develop.Runtime.Utilities.Conditions.ICompositeCondition value)
+ {
+ bool result = TryGetComponent(out _Project.Develop.Runtime.Logic.Gameplay.Features.Movement.CanMove component);
+ if(result)
+ value = component.Value;
+ else
+ value = default(_Project.Develop.Runtime.Utilities.Conditions.ICompositeCondition);
+ return result;
+ }
+
+ public _Project.Develop.Runtime.Entities.Entity AddCanMove(_Project.Develop.Runtime.Utilities.Conditions.ICompositeCondition value)
+ {
+ return AddComponent(new _Project.Develop.Runtime.Logic.Gameplay.Features.Movement.CanMove() {Value = value});
+ }
+
public _Project.Develop.Runtime.Logic.Gameplay.Features.Movement.RotateDirection RotateDirectionC => GetComponent<_Project.Develop.Runtime.Logic.Gameplay.Features.Movement.RotateDirection>();
public _Project.Develop.Runtime.Utils.ReactiveManagement.ReactiveVariable RotateDirection => RotateDirectionC.Value;
@@ -174,6 +217,25 @@ namespace _Project.Develop.Runtime.Entities
return AddComponent(new _Project.Develop.Runtime.Logic.Gameplay.Features.Movement.RotationSpeed() {Value = value});
}
+ public _Project.Develop.Runtime.Logic.Gameplay.Features.Movement.CanRotate CanRotateC => GetComponent<_Project.Develop.Runtime.Logic.Gameplay.Features.Movement.CanRotate>();
+
+ public _Project.Develop.Runtime.Utilities.Conditions.ICompositeCondition CanRotate => CanRotateC.Value;
+
+ public bool TryGetCanRotate(out _Project.Develop.Runtime.Utilities.Conditions.ICompositeCondition value)
+ {
+ bool result = TryGetComponent(out _Project.Develop.Runtime.Logic.Gameplay.Features.Movement.CanRotate component);
+ if(result)
+ value = component.Value;
+ else
+ value = default(_Project.Develop.Runtime.Utilities.Conditions.ICompositeCondition);
+ return result;
+ }
+
+ public _Project.Develop.Runtime.Entities.Entity AddCanRotate(_Project.Develop.Runtime.Utilities.Conditions.ICompositeCondition value)
+ {
+ return AddComponent(new _Project.Develop.Runtime.Logic.Gameplay.Features.Movement.CanRotate() {Value = value});
+ }
+
public _Project.Develop.Runtime.Logic.Gameplay.Features.Movement.JumpForce JumpForceC => GetComponent<_Project.Develop.Runtime.Logic.Gameplay.Features.Movement.JumpForce>();
public _Project.Develop.Runtime.Utils.ReactiveManagement.ReactiveVariable JumpForce => JumpForceC.Value;
diff --git a/Assets/_Project/Develop/Runtime/Logic/Gameplay/Features/Movement/MovementComponents.cs b/Assets/_Project/Develop/Runtime/Logic/Gameplay/Features/Movement/MovementComponents.cs
index 1cd3284..a2ac811 100644
--- a/Assets/_Project/Develop/Runtime/Logic/Gameplay/Features/Movement/MovementComponents.cs
+++ b/Assets/_Project/Develop/Runtime/Logic/Gameplay/Features/Movement/MovementComponents.cs
@@ -1,4 +1,5 @@
using _Project.Develop.Runtime.Entities;
+using _Project.Develop.Runtime.Utilities.Conditions;
using _Project.Develop.Runtime.Utils.ReactiveManagement;
using UnityEngine;
@@ -6,9 +7,13 @@ namespace _Project.Develop.Runtime.Logic.Gameplay.Features.Movement
{
public class MoveDirection : IEntityComponent { public ReactiveVariable Value; }
public class MoveSpeed : IEntityComponent { public ReactiveVariable Value; }
-
+ public class IsMoving : IEntityComponent { public ReactiveVariable Value; }
+ public class CanMove : IEntityComponent { public ICompositeCondition Value; }
+
public class RotateDirection : IEntityComponent { public ReactiveVariable Value; }
public class RotationSpeed : IEntityComponent { public ReactiveVariable Value; }
+ public class CanRotate : IEntityComponent { public ICompositeCondition Value; }
public class JumpForce : IEntityComponent { public ReactiveVariable Value; }
+
}
\ No newline at end of file
diff --git a/Assets/_Project/Develop/Runtime/Logic/Gameplay/Infrastructure/TestGameplay.cs b/Assets/_Project/Develop/Runtime/Logic/Gameplay/Infrastructure/TestGameplay.cs
index ffe86a6..b070cec 100644
--- a/Assets/_Project/Develop/Runtime/Logic/Gameplay/Infrastructure/TestGameplay.cs
+++ b/Assets/_Project/Develop/Runtime/Logic/Gameplay/Infrastructure/TestGameplay.cs
@@ -23,7 +23,7 @@ namespace _Project.Develop.Runtime.Logic.Gameplay.Features
public void Run()
{
- _entity = _entitiesFactory.CreateTestEntity(Vector3.zero);
+ _entity = _entitiesFactory.CreateGhostEntity(Vector3.zero);
_isRunning = true;
}
diff --git a/Assets/_Project/Develop/Runtime/Utilities/Conditions.meta b/Assets/_Project/Develop/Runtime/Utilities/Conditions.meta
new file mode 100644
index 0000000..c723b77
--- /dev/null
+++ b/Assets/_Project/Develop/Runtime/Utilities/Conditions.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: a03759ea3f034fa6a538e0a167d7c72a
+timeCreated: 1771515376
\ No newline at end of file
diff --git a/Assets/_Project/Develop/Runtime/Utilities/Conditions/CompositeCondition.cs b/Assets/_Project/Develop/Runtime/Utilities/Conditions/CompositeCondition.cs
new file mode 100644
index 0000000..ac0d842
--- /dev/null
+++ b/Assets/_Project/Develop/Runtime/Utilities/Conditions/CompositeCondition.cs
@@ -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, int)> _conditions = new();
+ private Func _standardLogicOperation;
+
+ public CompositeCondition(Func standardLogicOperation)
+ {
+ _standardLogicOperation = standardLogicOperation;
+ }
+
+ public CompositeCondition() : this(LogicOperationsUtils.And)
+ {
+
+ }
+
+ public ICompositeCondition Add(ICondition condition, int order = 0, Func 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, 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, int) conditionPair = _conditions.First(condPair => condPair.Item1 == condition);
+ _conditions.Remove(conditionPair);
+ return this;
+ }
+ }
+}
diff --git a/Assets/_Project/Develop/Runtime/Utilities/Conditions/CompositeCondition.cs.meta b/Assets/_Project/Develop/Runtime/Utilities/Conditions/CompositeCondition.cs.meta
new file mode 100644
index 0000000..0ed9ec4
--- /dev/null
+++ b/Assets/_Project/Develop/Runtime/Utilities/Conditions/CompositeCondition.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f44783069f2d1fb42bdd6608da2e604a
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/_Project/Develop/Runtime/Utilities/Conditions/FuncCondition.cs b/Assets/_Project/Develop/Runtime/Utilities/Conditions/FuncCondition.cs
new file mode 100644
index 0000000..d6f7c8c
--- /dev/null
+++ b/Assets/_Project/Develop/Runtime/Utilities/Conditions/FuncCondition.cs
@@ -0,0 +1,16 @@
+using System;
+
+namespace _Project.Develop.Runtime.Utilities.Conditions
+{
+ public class FuncCondition : ICondition
+ {
+ private Func _condition;
+
+ public FuncCondition(Func condition)
+ {
+ _condition = condition;
+ }
+
+ public bool Evaluate() => _condition.Invoke();
+ }
+}
diff --git a/Assets/_Project/Develop/Runtime/Utilities/Conditions/FuncCondition.cs.meta b/Assets/_Project/Develop/Runtime/Utilities/Conditions/FuncCondition.cs.meta
new file mode 100644
index 0000000..9f03a96
--- /dev/null
+++ b/Assets/_Project/Develop/Runtime/Utilities/Conditions/FuncCondition.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d62e21bbc0d33c7408a9cd905463b830
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/_Project/Develop/Runtime/Utilities/Conditions/ICompositeCondition.cs b/Assets/_Project/Develop/Runtime/Utilities/Conditions/ICompositeCondition.cs
new file mode 100644
index 0000000..74f1e88
--- /dev/null
+++ b/Assets/_Project/Develop/Runtime/Utilities/Conditions/ICompositeCondition.cs
@@ -0,0 +1,11 @@
+using System;
+
+namespace _Project.Develop.Runtime.Utilities.Conditions
+{
+ public interface ICompositeCondition : ICondition
+ {
+ ICompositeCondition Add(ICondition condition, int order = 0, Func logicOperation = null);
+
+ ICompositeCondition Remove(ICondition condition);
+ }
+}
diff --git a/Assets/_Project/Develop/Runtime/Utilities/Conditions/ICompositeCondition.cs.meta b/Assets/_Project/Develop/Runtime/Utilities/Conditions/ICompositeCondition.cs.meta
new file mode 100644
index 0000000..9a816c9
--- /dev/null
+++ b/Assets/_Project/Develop/Runtime/Utilities/Conditions/ICompositeCondition.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b3bfaadc771fd854f9d27882b2212136
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/_Project/Develop/Runtime/Utilities/Conditions/ICondition.cs b/Assets/_Project/Develop/Runtime/Utilities/Conditions/ICondition.cs
new file mode 100644
index 0000000..920568e
--- /dev/null
+++ b/Assets/_Project/Develop/Runtime/Utilities/Conditions/ICondition.cs
@@ -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();
+ }
+}
diff --git a/Assets/_Project/Develop/Runtime/Utilities/Conditions/ICondition.cs.meta b/Assets/_Project/Develop/Runtime/Utilities/Conditions/ICondition.cs.meta
new file mode 100644
index 0000000..b185787
--- /dev/null
+++ b/Assets/_Project/Develop/Runtime/Utilities/Conditions/ICondition.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 36fcc8f7fc765414388895dc842fe0f1
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/_Project/Develop/Runtime/Utilities/Conditions/LogicOperations.cs b/Assets/_Project/Develop/Runtime/Utilities/Conditions/LogicOperations.cs
new file mode 100644
index 0000000..1e01da6
--- /dev/null
+++ b/Assets/_Project/Develop/Runtime/Utilities/Conditions/LogicOperations.cs
@@ -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;
+ }
+}
diff --git a/Assets/_Project/Develop/Runtime/Utilities/Conditions/LogicOperations.cs.meta b/Assets/_Project/Develop/Runtime/Utilities/Conditions/LogicOperations.cs.meta
new file mode 100644
index 0000000..9a44c40
--- /dev/null
+++ b/Assets/_Project/Develop/Runtime/Utilities/Conditions/LogicOperations.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 44cb53d5052ea6244b01f10d6f37b4a8
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant: