mirror of
https://github.com/Bragin-Stepan/project-entity.git
synced 2026-03-05 07:41:10 +00:00
update: add teleport systems for entity
This commit is contained in:
@@ -1,10 +1,12 @@
|
||||
using _Project.Develop.Runtime.Logic.Gameplay.Features.Attack.Systems;
|
||||
using _Project.Develop.Runtime.Logic.Gameplay.Features.Attack.Systems.Shoot;
|
||||
using _Project.Develop.Runtime.Logic.Gameplay.Features.Damage;
|
||||
using _Project.Develop.Runtime.Logic.Gameplay.Features.Energy.Systems;
|
||||
using _Project.Develop.Runtime.Logic.Gameplay.Features.Input;
|
||||
using _Project.Develop.Runtime.Logic.Gameplay.Features.Lifetime.Systems;
|
||||
using _Project.Develop.Runtime.Logic.Gameplay.Features.Movement;
|
||||
using _Project.Develop.Runtime.Logic.Gameplay.Features.Sensors.Systems;
|
||||
using _Project.Develop.Runtime.Logic.Gameplay.Features.Teleport.Systems;
|
||||
using _Project.Develop.Runtime.Utilities;
|
||||
using _Project.Develop.Runtime.Utilities.Conditions;
|
||||
using _Project.Develop.Runtime.Utils.InputManagement;
|
||||
@@ -205,6 +207,108 @@ namespace _Project.Develop.Runtime.Entities
|
||||
|
||||
return entity;
|
||||
}
|
||||
|
||||
public Entity CreateTeleportWizard(Vector3 position)
|
||||
{
|
||||
Entity entity = CreateEmpty();
|
||||
|
||||
_monoEntitiesFactory.Create(entity, position, PathToResources.Entity.Mage);
|
||||
|
||||
entity
|
||||
.AddContactsDetectingMask(Layers.CharactersMask)
|
||||
.AddContactCollidersBuffer(new Buffer<Collider>(32))
|
||||
.AddContactEntitiesBuffer(new Buffer<Entity>(32))
|
||||
|
||||
.AddMaxHealth(new ReactiveVariable<float>(150))
|
||||
.AddCurrentHealth(new ReactiveVariable<float>(150))
|
||||
|
||||
.AddTeleportTarget(entity.Transform)
|
||||
.AddTeleportToPoint(entity.Transform)
|
||||
.AddStartTeleportEvent()
|
||||
.AddStartTeleportRequest()
|
||||
.AddInTeleportProcess()
|
||||
.AddFindTeleportPointEvent()
|
||||
.AddFindTeleportPointRequest()
|
||||
.AddEndTeleportEvent()
|
||||
|
||||
.AddEnergyTeleportCost(new ReactiveVariable<int>(20))
|
||||
|
||||
.AddCurrentEnergy(new ReactiveVariable<int>(60))
|
||||
.AddMaxEnergy(new ReactiveVariable<int>(60))
|
||||
.AddUseEnergyEvent()
|
||||
.AddUseEnergyRequest()
|
||||
.AddRegenEnergyEvent()
|
||||
.AddRegenEnergyRequest()
|
||||
.AddAutoRegenEnergyAmount(new ReactiveVariable<int>(5))
|
||||
.AddIsAutoRegenEnergy()
|
||||
.AddEnergyAutoRegenCurrentTime()
|
||||
.AddEnergyAutoRegenInitialTime(new ReactiveVariable<float>(3))
|
||||
|
||||
.AddBodyContactDamage(new ReactiveVariable<float>(50))
|
||||
.AddTakeDamageRequest()
|
||||
.AddTakeDamageEvent()
|
||||
.AddIsDead()
|
||||
.AddInDeathProcess()
|
||||
.AddDeathProcessInitialTime(new ReactiveVariable<float>(2))
|
||||
.AddDeathProcessCurrentTime();
|
||||
|
||||
ICompositeCondition canRegenEnergy = new CompositeCondition()
|
||||
.Add(new FuncCondition(() => entity.IsDead.Value == false));
|
||||
|
||||
ICompositeCondition canUseEnergy = new CompositeCondition()
|
||||
.Add(new FuncCondition(() => entity.IsDead.Value == false));
|
||||
|
||||
ICompositeCondition canStartTeleport = new CompositeCondition()
|
||||
.Add(new FuncCondition(() => entity.IsDead.Value == false))
|
||||
.Add(new FuncCondition(() => entity.CurrentEnergy.Value >= entity.EnergyTeleportCost.Value));
|
||||
|
||||
ICompositeCondition mustDie = new CompositeCondition()
|
||||
.Add(new FuncCondition(() => entity.CurrentHealth.Value <= 0));
|
||||
|
||||
ICompositeCondition mustSelfRelease = new CompositeCondition()
|
||||
.Add(new FuncCondition(() => entity.IsDead.Value))
|
||||
.Add(new FuncCondition(() => entity.InDeathProcess.Value == false));
|
||||
|
||||
ICompositeCondition canApplyDamage = new CompositeCondition()
|
||||
.Add(new FuncCondition(() => entity.IsDead.Value == false));
|
||||
|
||||
entity
|
||||
.AddCanRegenEnergy(canRegenEnergy)
|
||||
.AddCanUseEnergy(canUseEnergy)
|
||||
.AddCanStartTeleport(canStartTeleport)
|
||||
.AddCanApplyDamage(canApplyDamage)
|
||||
.AddMustDie(mustDie)
|
||||
.AddMustSelfRelease(mustSelfRelease);
|
||||
|
||||
entity
|
||||
.AddSystem(new TeleportByInputSystem(_playerInput))
|
||||
|
||||
.AddSystem(new RegenEnergySystem())
|
||||
.AddSystem(new UseEnergySystem())
|
||||
.AddSystem(new AutoRegenEnergyTimerSystem())
|
||||
|
||||
.AddSystem(new TeleportStartByEnergySystem())
|
||||
.AddSystem(new TeleportProcessSystem())
|
||||
.AddSystem(new FindRandomPointForTeleportSystem())
|
||||
.AddSystem(new EndTeleportSystem())
|
||||
.AddSystem(new InstantTeleportSystem())
|
||||
|
||||
.AddSystem(new BodyContactsDetectingSystem())
|
||||
.AddSystem(new BodyContactsEntitiesFilterSystem(_collidersRegistryService))
|
||||
|
||||
.AddSystem(new DealDamageOnContactSystem())
|
||||
.AddSystem(new ApplyDamageSystem())
|
||||
|
||||
.AddSystem(new DeathSwitcherSystem())
|
||||
.AddSystem(new DeathProcessTimerSystem())
|
||||
|
||||
.AddSystem(new DisableCollidersOnDeathSystem())
|
||||
.AddSystem(new SelfReleaseSystem(_entitiesLifeContext));
|
||||
|
||||
_entitiesLifeContext.Add(entity);
|
||||
|
||||
return entity;
|
||||
}
|
||||
|
||||
public Entity CreateProjectile(Vector3 position, Vector3 direction, float damage)
|
||||
{
|
||||
@@ -233,7 +337,7 @@ namespace _Project.Develop.Runtime.Entities
|
||||
.Add(new FuncCondition(() => entity.IsDead.Value == false));
|
||||
|
||||
ICompositeCondition mustDie = new CompositeCondition()
|
||||
.Add(new FuncCondition(() => entity.IsTouchDeathMask.Value), 0);
|
||||
.Add(new FuncCondition(() => entity.IsTouchDeathMask.Value));
|
||||
|
||||
ICompositeCondition mustSelfRelease = new CompositeCondition()
|
||||
.Add(new FuncCondition(() => entity.IsDead.Value));
|
||||
|
||||
@@ -1059,13 +1059,13 @@ namespace _Project.Develop.Runtime.Entities
|
||||
return AddComponent(new _Project.Develop.Runtime.Logic.Gameplay.Features.Energy.AutoRegenEnergyAmount() {Value = value});
|
||||
}
|
||||
|
||||
public _Project.Develop.Runtime.Logic.Gameplay.Features.Energy.InAutoRegenEnergy InAutoRegenEnergyC => GetComponent<_Project.Develop.Runtime.Logic.Gameplay.Features.Energy.InAutoRegenEnergy>();
|
||||
public _Project.Develop.Runtime.Logic.Gameplay.Features.Energy.IsAutoRegenEnergy IsAutoRegenEnergyC => GetComponent<_Project.Develop.Runtime.Logic.Gameplay.Features.Energy.IsAutoRegenEnergy>();
|
||||
|
||||
public _Project.Develop.Runtime.Utils.ReactiveManagement.ReactiveVariable<System.Boolean> InAutoRegenEnergy => InAutoRegenEnergyC.Value;
|
||||
public _Project.Develop.Runtime.Utils.ReactiveManagement.ReactiveVariable<System.Boolean> IsAutoRegenEnergy => IsAutoRegenEnergyC.Value;
|
||||
|
||||
public bool TryGetInAutoRegenEnergy(out _Project.Develop.Runtime.Utils.ReactiveManagement.ReactiveVariable<System.Boolean> value)
|
||||
public bool TryGetIsAutoRegenEnergy(out _Project.Develop.Runtime.Utils.ReactiveManagement.ReactiveVariable<System.Boolean> value)
|
||||
{
|
||||
bool result = TryGetComponent(out _Project.Develop.Runtime.Logic.Gameplay.Features.Energy.InAutoRegenEnergy component);
|
||||
bool result = TryGetComponent(out _Project.Develop.Runtime.Logic.Gameplay.Features.Energy.IsAutoRegenEnergy component);
|
||||
if(result)
|
||||
value = component.Value;
|
||||
else
|
||||
@@ -1073,14 +1073,14 @@ namespace _Project.Develop.Runtime.Entities
|
||||
return result;
|
||||
}
|
||||
|
||||
public _Project.Develop.Runtime.Entities.Entity AddInAutoRegenEnergy()
|
||||
public _Project.Develop.Runtime.Entities.Entity AddIsAutoRegenEnergy()
|
||||
{
|
||||
return AddComponent(new _Project.Develop.Runtime.Logic.Gameplay.Features.Energy.InAutoRegenEnergy() { Value = new _Project.Develop.Runtime.Utils.ReactiveManagement.ReactiveVariable<System.Boolean>() });
|
||||
return AddComponent(new _Project.Develop.Runtime.Logic.Gameplay.Features.Energy.IsAutoRegenEnergy() { Value = new _Project.Develop.Runtime.Utils.ReactiveManagement.ReactiveVariable<System.Boolean>() });
|
||||
}
|
||||
|
||||
public _Project.Develop.Runtime.Entities.Entity AddInAutoRegenEnergy(_Project.Develop.Runtime.Utils.ReactiveManagement.ReactiveVariable<System.Boolean> value)
|
||||
public _Project.Develop.Runtime.Entities.Entity AddIsAutoRegenEnergy(_Project.Develop.Runtime.Utils.ReactiveManagement.ReactiveVariable<System.Boolean> value)
|
||||
{
|
||||
return AddComponent(new _Project.Develop.Runtime.Logic.Gameplay.Features.Energy.InAutoRegenEnergy() {Value = value});
|
||||
return AddComponent(new _Project.Develop.Runtime.Logic.Gameplay.Features.Energy.IsAutoRegenEnergy() {Value = value});
|
||||
}
|
||||
|
||||
public _Project.Develop.Runtime.Logic.Gameplay.Features.Energy.EnergyAutoRegenInitialTime EnergyAutoRegenInitialTimeC => GetComponent<_Project.Develop.Runtime.Logic.Gameplay.Features.Energy.EnergyAutoRegenInitialTime>();
|
||||
|
||||
Reference in New Issue
Block a user