mirror of
https://github.com/Bragin-Stepan/project-entity.git
synced 2026-03-05 15:51:10 +00:00
feat: add random auto teleport state
This commit is contained in:
@@ -13,8 +13,6 @@ namespace _Project.Develop.Runtime.Logic.Gameplay.Features.AI
|
||||
{
|
||||
public class BrainsFactory
|
||||
{
|
||||
private readonly DIContainer _container;
|
||||
|
||||
private readonly EntitiesLifeContext _entitiesLifeContext;
|
||||
private readonly AIBrainsContext _aiBrainsContext;
|
||||
private readonly TimerServiceFactory _timerServiceFactory;
|
||||
@@ -22,12 +20,10 @@ namespace _Project.Develop.Runtime.Logic.Gameplay.Features.AI
|
||||
|
||||
public BrainsFactory(DIContainer container)
|
||||
{
|
||||
_container = container;
|
||||
|
||||
_playerInput = _container.Resolve<IPlayerInput>();
|
||||
_aiBrainsContext = _container.Resolve<AIBrainsContext>();
|
||||
_timerServiceFactory = _container.Resolve<TimerServiceFactory>();
|
||||
_entitiesLifeContext = _container.Resolve<EntitiesLifeContext>();
|
||||
_playerInput = container.Resolve<IPlayerInput>();
|
||||
_aiBrainsContext = container.Resolve<AIBrainsContext>();
|
||||
_timerServiceFactory = container.Resolve<TimerServiceFactory>();
|
||||
_entitiesLifeContext = container.Resolve<EntitiesLifeContext>();
|
||||
}
|
||||
|
||||
public StateMachineBrain CreateGhostBrain(Entity entity)
|
||||
@@ -39,7 +35,22 @@ namespace _Project.Develop.Runtime.Logic.Gameplay.Features.AI
|
||||
|
||||
return brain;
|
||||
}
|
||||
|
||||
public StateMachineBrain CreateWizardBrain(Entity entity)
|
||||
{
|
||||
AIStateMachine stateMachine = CreateRandomTeleportStateMachine(entity);
|
||||
StateMachineBrain brain = new (stateMachine);
|
||||
|
||||
_aiBrainsContext.SetFor(entity, brain);
|
||||
|
||||
return brain;
|
||||
}
|
||||
|
||||
public StateMachineBrain CreateDangerWizardBrain(Entity entity)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public StateMachineBrain CreateMainHeroBrain(Entity entity, ITargetSelector targetSelector)
|
||||
{
|
||||
AIStateMachine combatState = CreateAutoAttackStateMachine(entity);
|
||||
@@ -146,5 +157,34 @@ namespace _Project.Develop.Runtime.Logic.Gameplay.Features.AI
|
||||
|
||||
return stateMachine;
|
||||
}
|
||||
|
||||
private AIStateMachine CreateRandomTeleportStateMachine(Entity entity)
|
||||
{
|
||||
TeleportTriggerState teleportTriggerState = new (entity);
|
||||
EmptyState emptyState = new ();
|
||||
|
||||
ICompositeCondition fromIdleToTeleportCondition = new CompositeCondition()
|
||||
.Add(entity.CanStartTeleport);
|
||||
|
||||
ICompositeCondition fromTeleportToIdleCondition = new CompositeCondition()
|
||||
.Add(new FuncCondition(() => entity.InTeleportProcess.Value == false));
|
||||
|
||||
AIStateMachine stateMachine = new ();
|
||||
|
||||
stateMachine.AddState(teleportTriggerState);
|
||||
stateMachine.AddState(emptyState);
|
||||
|
||||
stateMachine.AddTransition(emptyState, teleportTriggerState, fromIdleToTeleportCondition);
|
||||
stateMachine.AddTransition(teleportTriggerState, emptyState, fromTeleportToIdleCondition);
|
||||
|
||||
return stateMachine;
|
||||
}
|
||||
|
||||
private AIStateMachine CreateToTargetTeleportStateMachine(Entity entity)
|
||||
{
|
||||
TeleportTriggerState teleportTriggerState = new (entity);
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6,17 +6,17 @@ namespace _Project.Develop.Runtime.Logic.Gameplay.Features.AI.States
|
||||
{
|
||||
public class AttackTriggerState : State, IUpdatableState
|
||||
{
|
||||
private ReactiveEvent _attackRequest;
|
||||
private ReactiveEvent _request;
|
||||
|
||||
public AttackTriggerState(Entity entity)
|
||||
{
|
||||
_attackRequest = entity.StartAttackRequest;
|
||||
_request = entity.StartAttackRequest;
|
||||
}
|
||||
|
||||
public override void Enter()
|
||||
{
|
||||
base.Enter();
|
||||
_attackRequest.Invoke();
|
||||
_request.Invoke();
|
||||
}
|
||||
|
||||
public void Update(float deltaTime)
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
using _Project.Develop.Runtime.Entities;
|
||||
using _Project.Develop.Runtime.Utils.ReactiveManagement.Event;
|
||||
using Assets._Project.Develop.Runtime.Utilities.StateMachineCore;
|
||||
|
||||
namespace _Project.Develop.Runtime.Logic.Gameplay.Features.AI.States
|
||||
{
|
||||
public class TeleportTriggerState : State, IUpdatableState
|
||||
{
|
||||
private ReactiveEvent _request;
|
||||
|
||||
public TeleportTriggerState(Entity entity)
|
||||
{
|
||||
_request = entity.StartTeleportRequest;
|
||||
}
|
||||
|
||||
public override void Enter()
|
||||
{
|
||||
base.Enter();
|
||||
_request.Invoke();
|
||||
}
|
||||
|
||||
public void Update(float deltaTime)
|
||||
{ }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 399ae3c830b94229a8b94350eca901d2
|
||||
timeCreated: 1772543966
|
||||
Reference in New Issue
Block a user