feat(battle-engine): M1 auto-copy closure (782 battle-logic files)
Compile-driven bulk-copy loop (tools/engine-port/m1_copy_loop.py) pulled the precise reference closure of the battle-core roots, stopping at the classify god-object/View-VFX-UI boundary. 782 files; no re-explosion (M0 had estimated ~order 1000). Residual frontier = 52 shim-classified + 80 external (Unity/BCL) types to author next.
This commit is contained in:
208
SVSim.BattleEngine/Engine/Wizard/AIRealActionInformation.cs
Normal file
208
SVSim.BattleEngine/Engine/Wizard/AIRealActionInformation.cs
Normal file
@@ -0,0 +1,208 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Wizard.Battle.View.Vfx;
|
||||
|
||||
namespace Wizard;
|
||||
|
||||
public class AIRealActionInformation
|
||||
{
|
||||
public BattleCardBase OriginalActor;
|
||||
|
||||
public BattleCardBase Actor;
|
||||
|
||||
public List<BattleCardBase> SelectedTargetCardSet;
|
||||
|
||||
public List<BattleCardRealTargetInformation> RealTargetInformationList;
|
||||
|
||||
public AIOperationType OperationType;
|
||||
|
||||
private AIVirtualField.AIVirtualFieldSearchCardOption _searchTargetOption;
|
||||
|
||||
public AIRealActionInformation(AIOperationType type, BattleCardBase actCard, BattleCardBase originalCard, IEnumerable<BattleCardBase> targetCards)
|
||||
{
|
||||
OperationType = type;
|
||||
OriginalActor = originalCard;
|
||||
if (actCard == null)
|
||||
{
|
||||
Actor = OriginalActor;
|
||||
}
|
||||
else
|
||||
{
|
||||
Actor = actCard;
|
||||
}
|
||||
SelectedTargetCardSet = targetCards?.ToList();
|
||||
_searchTargetOption = new AIVirtualField.AIVirtualFieldSearchCardOption
|
||||
{
|
||||
IsSearchFromDeck = false,
|
||||
IsOutputCannotFindError = false
|
||||
};
|
||||
RealTargetInformationList = null;
|
||||
}
|
||||
|
||||
public AISituationInfo CreateSituationInfo(AIVirtualField field)
|
||||
{
|
||||
AIVirtualCard aIVirtualCard = field.SearchVirtualCard(OriginalActor);
|
||||
if (aIVirtualCard == null)
|
||||
{
|
||||
AIConsoleUtility.LogError("AIRealActionInformation.CreateSituationInfo() error!! virtualActor is not found");
|
||||
return null;
|
||||
}
|
||||
if (!aIVirtualCard.IsAlly && aIVirtualCard is EnemyHandVirtualCard)
|
||||
{
|
||||
aIVirtualCard = new AIVirtualCard(aIVirtualCard, field);
|
||||
}
|
||||
AIVirtualCard aIVirtualCard2 = aIVirtualCard;
|
||||
if (OriginalActor != Actor)
|
||||
{
|
||||
aIVirtualCard2 = new AIVirtualCard(Actor, field);
|
||||
aIVirtualCard2.InitializeTags(field.ParamQuery, null, null);
|
||||
}
|
||||
AISituationInfo aISituationInfo;
|
||||
switch (OperationType)
|
||||
{
|
||||
case AIOperationType.TURNEND:
|
||||
aISituationInfo = new AIVirtualTurnEndInfo(aIVirtualCard);
|
||||
break;
|
||||
case AIOperationType.ATTACK:
|
||||
aISituationInfo = GetTargetRegisteredAttackSituation(aIVirtualCard, field);
|
||||
break;
|
||||
case AIOperationType.EVOLVE:
|
||||
case AIOperationType.PLAY:
|
||||
case AIOperationType.FUSION:
|
||||
aISituationInfo = GetTargetRegisteredTargetSelectSituation(aIVirtualCard2, aIVirtualCard, field);
|
||||
break;
|
||||
default:
|
||||
AIConsoleUtility.LogError("AIRealActionInformation.CreateSituationInfo() error!! OperationType " + OperationType.ToString() + " is illegal");
|
||||
return null;
|
||||
}
|
||||
if (aISituationInfo != null && RealTargetInformationList != null)
|
||||
{
|
||||
aISituationInfo.RegisterRealTargetInfo(RealTargetInformationList);
|
||||
}
|
||||
return aISituationInfo;
|
||||
}
|
||||
|
||||
private AIVirtualAttackInfo GetTargetRegisteredAttackSituation(AIVirtualCard attacker, AIVirtualField field)
|
||||
{
|
||||
if (SelectedTargetCardSet == null || SelectedTargetCardSet.Count <= 0)
|
||||
{
|
||||
AIConsoleUtility.LogError("AIRealActionInformation.GetTargetRegisteredAttackSituation error!! Attack situation cannot find target!!!!!");
|
||||
return null;
|
||||
}
|
||||
AIVirtualCard target = field.SearchVirtualCard(SelectedTargetCardSet.First());
|
||||
return new AIVirtualAttackInfo(attacker, target);
|
||||
}
|
||||
|
||||
private AIVirtualTargetSelectAction GetTargetRegisteredTargetSelectSituation(AIVirtualCard playActor, AIVirtualCard originalCard, AIVirtualField field)
|
||||
{
|
||||
AIVirtualTargetSelectAction aIVirtualTargetSelectAction = new AIVirtualTargetSelectAction(playActor, originalCard, OperationType, (AISelectedTargetInfoSet)null);
|
||||
if (SelectedTargetCardSet == null || SelectedTargetCardSet.Count <= 0)
|
||||
{
|
||||
return aIVirtualTargetSelectAction;
|
||||
}
|
||||
AIVirtualCard owner = playActor;
|
||||
if (!playActor.IsSameCard(originalCard) && aIVirtualTargetSelectAction.IsChoiceAndChangeActor(field))
|
||||
{
|
||||
owner = originalCard;
|
||||
}
|
||||
List<AIVirtualTargetSelectInfo> list = owner.CreateAIVirtualSelectInfo(field, aIVirtualTargetSelectAction);
|
||||
if (list == null || list.Count <= 0)
|
||||
{
|
||||
AIConsoleUtility.LogError("AIRealActionInformation.CreateSituationInfo error!! Target selection is required while TargetCardSet is empty!!!!! Card ID == " + originalCard.BaseId);
|
||||
return aIVirtualTargetSelectAction;
|
||||
}
|
||||
int num = 0;
|
||||
int num2 = 0;
|
||||
for (int i = 0; i < list.Count; i++)
|
||||
{
|
||||
AIVirtualTargetSelectInfo aIVirtualTargetSelectInfo = list[i];
|
||||
int num3;
|
||||
if (aIVirtualTargetSelectAction.ActionType == AIOperationType.FUSION)
|
||||
{
|
||||
num3 = SelectedTargetCardSet.Count;
|
||||
}
|
||||
else
|
||||
{
|
||||
AIPlayTag selectRule = aIVirtualTargetSelectInfo.SelectRule;
|
||||
num3 = ((selectRule != null && selectRule.Type == AIPlayTagType.ChoiceBrave) ? 1 : Math.Min(aIVirtualTargetSelectInfo.Candidates.Count, aIVirtualTargetSelectInfo.Count));
|
||||
}
|
||||
List<AIVirtualCard> list2 = new List<AIVirtualCard>();
|
||||
if (SelectedTargetCardSet.Count - num < num3)
|
||||
{
|
||||
AIConsoleUtility.LogError("AIRealActionInformation.CreateSituationInfo error!! Targets are not enough!!!!!");
|
||||
break;
|
||||
}
|
||||
for (int j = 0; j < num3; j++)
|
||||
{
|
||||
BattleCardBase battleCardBase = SelectedTargetCardSet[num];
|
||||
AIVirtualCard aIVirtualCard = field.SearchVirtualCard(battleCardBase, _searchTargetOption);
|
||||
if (aIVirtualCard == null)
|
||||
{
|
||||
aIVirtualCard = new AIVirtualCard(battleCardBase, field);
|
||||
aIVirtualCard.InitializeTags(field.ParamQuery, null, null);
|
||||
}
|
||||
list2.Add(aIVirtualCard);
|
||||
num++;
|
||||
}
|
||||
if (aIVirtualTargetSelectInfo.Type == TargetSelectType.Choice)
|
||||
{
|
||||
aIVirtualTargetSelectAction.SetChoicedMultipleTargetInInfo(list2);
|
||||
continue;
|
||||
}
|
||||
AIScriptTokenArgType whichTarget = ((num2 != 0) ? AIScriptTokenArgType.SECOND_TARGET_SELECT : AIScriptTokenArgType.TARGET_SELECT);
|
||||
aIVirtualTargetSelectAction.SetMultipleTargetsInInfo(list2, aIVirtualTargetSelectInfo.Type, aIVirtualTargetSelectInfo.RemovalType, whichTarget);
|
||||
num2++;
|
||||
}
|
||||
return aIVirtualTargetSelectAction;
|
||||
}
|
||||
|
||||
public void CreateRandomTargetInformation(BattleCardBase actor, Func<SkillBase, bool> skillCheckFunc, bool forceCheckEvolveSkills = false)
|
||||
{
|
||||
BattleCardRealTargetInformation information = GetRealRandomTargetInformation(actor);
|
||||
SkillCollectionBase skillCollectionBase = (forceCheckEvolveSkills ? actor.EvolutionSkills : actor.Skills);
|
||||
int num = skillCollectionBase.Count();
|
||||
for (int i = 0; i < num; i++)
|
||||
{
|
||||
SkillBase skillBase = skillCollectionBase.Get(i);
|
||||
if (skillCheckFunc(skillBase))
|
||||
{
|
||||
skillBase.OnSkillEnd += OnSkillEndRegistTargets;
|
||||
}
|
||||
}
|
||||
VfxBase OnSkillEndRegistTargets(SkillBase currentSkill, List<BattleCardBase> skillTargets, SkillConditionCheckerOption option, SkillProcessor skillProcessor)
|
||||
{
|
||||
if (skillTargets != null && skillTargets.Count > 0)
|
||||
{
|
||||
information.AddTargetList(skillTargets, currentSkill.ApplyingTargetFilter);
|
||||
}
|
||||
currentSkill.OnSkillEnd -= OnSkillEndRegistTargets;
|
||||
return NullVfx.GetInstance();
|
||||
}
|
||||
}
|
||||
|
||||
private BattleCardRealTargetInformation GetRealRandomTargetInformation(BattleCardBase skillOwner)
|
||||
{
|
||||
if (RealTargetInformationList == null)
|
||||
{
|
||||
RealTargetInformationList = new List<BattleCardRealTargetInformation>();
|
||||
}
|
||||
BattleCardRealTargetInformation battleCardRealTargetInformation = null;
|
||||
for (int i = 0; i < RealTargetInformationList.Count; i++)
|
||||
{
|
||||
BattleCardRealTargetInformation battleCardRealTargetInformation2 = RealTargetInformationList[i];
|
||||
BattleCardBase skillOwner2 = battleCardRealTargetInformation2.SkillOwner;
|
||||
if (skillOwner.IsPlayer == skillOwner2.IsPlayer && skillOwner.Index == skillOwner2.Index && skillOwner.BaseParameter.BaseCardId == skillOwner2.BaseParameter.BaseCardId)
|
||||
{
|
||||
battleCardRealTargetInformation = battleCardRealTargetInformation2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (battleCardRealTargetInformation == null)
|
||||
{
|
||||
battleCardRealTargetInformation = new BattleCardRealTargetInformation(skillOwner);
|
||||
RealTargetInformationList.Add(battleCardRealTargetInformation);
|
||||
}
|
||||
return battleCardRealTargetInformation;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user