feat: add random auto teleport state

This commit is contained in:
Bragin Stepan
2026-03-03 19:28:16 +05:00
parent c04b0a259a
commit 11e28b1e09
20 changed files with 350 additions and 28 deletions

View File

@@ -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;
}
}
}

View File

@@ -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)

View File

@@ -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)
{ }
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 399ae3c830b94229a8b94350eca901d2
timeCreated: 1772543966