Files
SVSimServer/SVSim.BattleEngine/Engine/Wizard/RankMatchEnemyAI.cs
gamer147 824309ec44 feat(battle-engine): close the AI-simulation subsystem (verbatim)
Copied the 89 uncopied AI*SimulationUtility/extension files defining the
AIVirtualCard/AIVirtualField extension methods; the compile loop then auto-closed
the revealed type deps (~3049 files total, drift-clean). 10.0k -> 62 errors.
2026-06-05 20:30:59 -04:00

162 lines
4.0 KiB
C#

using System;
using System.Collections;
using System.Diagnostics;
using UnityEngine;
using Wizard.Battle.View.Vfx;
namespace Wizard;
public class RankMatchEnemyAI : EnemyAI
{
private Stopwatch _turnTimeStopWatch = new Stopwatch();
public override bool IsStackAction => _isStackAction;
public override bool IsConnectNetwork => _isConnectNetwork;
public RankMatchEnemyAI()
{
base.IsRankMatchAI = true;
}
public override VfxBase GetEmote(AIEmoteCmdType cmdType, AISituationInfo situation = null, ClassCharaPrm.EmotionType receivedEmoteType = ClassCharaPrm.EmotionType.NULL, int emoteInput = -1)
{
return NullVfx.GetInstance();
}
protected override IEnumerator WeakLogicTimerCoroutine()
{
float currentMilliSec = 0f;
float currentTimeOverLogicSec = 0f;
_elapsedThinkingTime = 0f;
_currentThinkingIntervalTime = 0f;
_isRunTurnEndLimitTimer = false;
_turnStartVfxFinishTime = 0f;
_elapsedTurnTimeAfterTurnStartVfx = 0f;
_turnTimeStopWatch.Reset();
_turnTimeStopWatch.Start();
while (true)
{
yield return null;
if (base.IsBattleEnd)
{
break;
}
float num = (float)(_turnTimeStopWatch.Elapsed.TotalMilliseconds - (double)currentMilliSec) / 1000f;
currentMilliSec = (float)_turnTimeStopWatch.Elapsed.TotalMilliseconds;
float num2 = currentMilliSec / 1000f;
if (_isRunTurnEndLimitTimer)
{
_elapsedTurnTimeAfterTurnStartVfx = num2 - _turnStartVfxFinishTime;
}
if (battleMgr.VfxMgr.IsEnd)
{
if (_enabledThinkingCounter)
{
_elapsedThinkingTime += num;
}
if (base.IsThinkingInterval)
{
_currentThinkingIntervalTime -= num;
}
if (!_isRunTurnEndLimitTimer)
{
_turnStartVfxFinishTime = num2;
_isRunTurnEndLimitTimer = true;
}
}
if (!base.IsRunWeakLogic)
{
currentTimeOverLogicSec += num;
_timeOverLogicSec = (int)currentTimeOverLogicSec;
if (_timeOverLogicSec > 7 && battleMgr.VfxMgr.IsEnd && AIOperationQueue.Count <= 0)
{
ChangeWeakLogic();
currentTimeOverLogicSec = 0f;
}
}
}
}
public override void Retire()
{
EnemyAICoroutine.GetInstance().StopAllCoroutines();
BattleCoroutine instance = BattleCoroutine.GetInstance();
if (weakLogicCoroutine != null)
{
instance.StopCoroutine(weakLogicCoroutine);
weakLogicCoroutine = null;
}
battleMgr.VfxMgr.RegisterImmediateVfx(new CanNotTouchCardVfx());
if (!battleMgr.GetBattlePlayer(isPlayer: true).Class.IsDead)
{
battleMgr.VfxMgr.RegisterSequentialVfx(battleMgr.DeadClass(PlayerDead: false, BattleManagerBase.FINISH_TYPE.RETIRE));
battleMgr.VfxMgr.RegisterSequentialVfx(InstantVfx.Create(delegate
{
battleMgr.InitiateGameEndSequence(hasWon: true);
}));
}
}
public override void Disconnect()
{
_isConnectNetwork = false;
}
public override void Reconnect()
{
_isConnectNetwork = true;
}
public override void CleanupStackedAction()
{
base.IsStopThinkingLogic = true;
ExecuteActionOperationQueue();
}
public override void RegistActionOperationQueue(Action action)
{
base.RegistActionOperationQueue(action);
CheckIsStackAction();
}
public override void ExecuteActionOperationQueue()
{
base.ExecuteActionOperationQueue();
CheckIsStackAction();
}
protected override void OnBeforeTurnEnd()
{
if (weakLogicCoroutine != null)
{
BattleCoroutine.GetInstance().StopCoroutine(weakLogicCoroutine);
weakLogicCoroutine = null;
}
}
protected override void OnFinishOprAttack()
{
CheckIsStackAction();
}
protected override void OnFinishOprTargetSelect()
{
SetupThinkingInterval();
CheckIsStackAction();
}
protected override void CheckIsStackAction()
{
_isStackAction = AIOperationQueue.Count > 0;
}
protected override void SetupThinkingInterval()
{
_enabledThinkingCounter = false;
float num = UnityEngine.Random.Range(0f, 3f);
num = ((num <= _elapsedThinkingTime) ? 0f : num);
_currentThinkingIntervalTime = num;
}
}