Files
SVSimServer/SVSim.BattleEngine/Engine/CardCreatorBase.cs
gamer147 957af3d1ec feat(battle-engine): full Unity/VFX/god-object shims + expanded copy closure (2570 files)
Authored Unity primitive/object-model shim, VFX layer (control-flow-preserving, InstantVfx never invokes its action -- headless suppression), god-object stubs (GameMgr/EffectMgr/UIManager with faithfully-extracted nested enums), View/UI/Touch tree, LitJson+BetterList+Tuple copied, third-party stubs. Discovered Roslyn header-error masking: fixing class-header type errors unmasks body references, so the true copy closure is ~2570 files (was 782 under masking). Errors: masked-25720 -> 268; our shim files compile clean. Remaining: ~50 residual shim/external types, 24 NGUI UI-base overrides, static-type fixes, plus likely 1-2 more unmask waves.
2026-06-05 17:22:20 -04:00

405 lines
18 KiB
C#

using System.Collections.Generic;
using Cute;
using UnityEngine;
using Wizard;
using Wizard.Battle;
using Wizard.Battle.Card;
using Wizard.Battle.Resource;
public class CardCreatorBase
{
private class CardTypeBuildInfo
{
public bool isActive;
public Vector3 localPosition;
public Vector3 localScale;
public Quaternion localRotation;
public Transform parent;
}
private readonly GameObject _cardRootObject;
protected static Dictionary<CardBasePrm.ClanType, Material> _classIconCache = new Dictionary<CardBasePrm.ClanType, Material>();
private static BattleCardBase _dummyCardInstance;
public static Material GetSharedClassIconMaterial(CardBasePrm.ClanType clanType)
{
Material material;
if (_classIconCache.ContainsKey(clanType))
{
material = _classIconCache[clanType];
if (material == null || material.mainTexture == null)
{
if (material != null)
{
Object.Destroy(material);
}
_classIconCache.Remove(clanType);
}
material = null;
}
if (_classIconCache.ContainsKey(clanType))
{
material = _classIconCache[clanType];
}
else
{
material = Object.Instantiate(Toolbox.ResourcesManager.LoadObject(Toolbox.ResourcesManager.GetAssetTypePath("CardFrameClassIcon", ResourcesManager.AssetLoadPathType.CardFrameMaterialPlus, isfetch: true)) as Material);
material.mainTexture = ClassCharaPrm.GetClassIconTexture((int)clanType);
_classIconCache[clanType] = material;
}
return material;
}
public CardCreatorBase(GameObject cardRootObject)
{
_cardRootObject = cardRootObject;
}
public GameObject LoadRootObject()
{
return _cardRootObject;
}
public static BattleCardBase CreateCard(int cardId, bool isPlayer, int index, SBattleLoad sBattleLoad, BattleManagerBase battleMgr, IBattleResourceMgr resourceMgr, IInnerOptionsBuilder innerOptionsBuilder, bool isChoiceBrave = false)
{
bool flag = !isPlayer;
CardParameter cardParameterFromId = CardMaster.GetInstanceForBattle().GetCardParameterFromId(cardId);
CardBasePrm.CharaType charType = cardParameterFromId.CharType;
CardCreatorBase cardCreatorBase = null;
switch (charType)
{
case CardBasePrm.CharaType.NORMAL:
cardCreatorBase = new UnitCardCreator(sBattleLoad.UnitCardTemplate.gameObject);
break;
case CardBasePrm.CharaType.FIELD:
case CardBasePrm.CharaType.CHANT_FIELD:
cardCreatorBase = new FieldCardCreator(sBattleLoad.FieldCardTemplate.gameObject);
break;
case CardBasePrm.CharaType.SPELL:
cardCreatorBase = new SpellCardCreator(sBattleLoad.SpellCardTemplate.gameObject);
break;
default:
return null;
}
GameObject gobj = cardCreatorBase.LoadRootObject();
GameObject gameObject = GameMgr.GetIns().GetPrefabMgr().CloneObjectToParent(gobj, BattleManagerBase.GetIns().Battle3DContainer);
CardTemplate component = gameObject.GetComponent<CardTemplate>();
if (flag && !GameMgr.GetIns().IsWatchBattle && !sBattleLoad.isDbgEnableEnemyHandView && !GameMgr.GetIns().IsAdmin)
{
gameObject.GetComponent<CardTemplate>().CardNormalLodGroup.enabled = false;
}
GameObject gameObject2 = component.CardNormalTemp.gameObject;
if (charType == CardBasePrm.CharaType.NORMAL)
{
gameObject2.SetActive(value: false);
}
component.NormalCardBaseMeshTemp.sharedMaterial = resourceMgr.GetSleeveMaterial(isPlayer);
if (charType == CardBasePrm.CharaType.NORMAL)
{
component.EvolCardBaseMeshTemp.sharedMaterial = resourceMgr.GetSleeveMaterial(isPlayer);
}
Transform transform = gameObject.transform.Find("CardObj");
Transform transform2 = gameObject.transform.Find("Collider");
string tag = (transform.tag = (gameObject2.tag = (flag ? "Enemy" : "Player")));
transform2.tag = tag;
GameObject gameObject3 = null;
if (component.LifeLabelTemp != null)
{
gameObject3 = component.LifeLabelTemp.transform.parent.gameObject;
}
UILabel lifeLabelTemp = component.LifeLabelTemp;
if (lifeLabelTemp != null)
{
lifeLabelTemp.text = cardParameterFromId.Life.ToString();
}
if (gameObject3 != null)
{
gameObject3.SetActive(value: false);
}
if (isChoiceBrave)
{
component.SetEffectColor(Global.CARD_HBP_LABEL_COST_COLOR);
}
if (cardParameterFromId.IsVariableCost)
{
component.NormalSignLabelTemp.text = "-";
component.NormalSignedCostLabelTemp.text = "X";
component.ShowSignedCostLabel();
component.NormalChoiceBraveNameLabelTemp.text = cardParameterFromId.CardName;
component.ShowChoiceBraveNameLabel();
}
else if (isChoiceBrave)
{
if (cardParameterFromId.Cost != 0)
{
component.NormalSignLabelTemp.text = ((cardParameterFromId.Cost > 0) ? "-" : "+");
component.NormalSignedCostLabelTemp.text = Mathf.Abs(cardParameterFromId.Cost).ToString();
component.ShowSignedCostLabel();
}
else
{
component.NormalZeroCostLabelTemp.text = "0";
component.ShowZeroCostLabel();
}
component.NormalChoiceBraveNameLabelTemp.text = cardParameterFromId.CardName;
component.ShowChoiceBraveNameLabel();
}
else
{
component.NormalCostLabelTemp.text = cardParameterFromId.Cost.ToString();
component.NormalNameLabelTemp.text = cardParameterFromId.CardName;
}
component.SetNumberLabelStyle(cardParameterFromId.IsFoil);
component.SetNameLabelStyle(cardParameterFromId.IsFoil, isChoiceBrave);
component.SetRepositionNameLabel(cardParameterFromId.CardName, isChoiceBrave);
if (charType == CardBasePrm.CharaType.NORMAL)
{
component.NormalLifeLabelTemp.text = lifeLabelTemp.text;
GameObject gameObject4 = component.AtkLabelTemp.transform.parent.gameObject;
UILabel atkLabelTemp = component.AtkLabelTemp;
atkLabelTemp.text = cardParameterFromId.Atk.ToString();
gameObject4.SetActive(value: false);
component.NormalAtkLabelTemp.text = atkLabelTemp.text;
}
UILabel component2 = gameObject2.transform.Find("Cost(Clone)").Find("CostLabel").GetComponent<UILabel>();
if (charType == CardBasePrm.CharaType.NORMAL)
{
UILabel component3 = gameObject2.transform.Find("Life(Clone)").Find("LifeLabel").GetComponent<UILabel>();
UILabel component4 = gameObject2.transform.Find("Atk(Clone)").Find("AtkLabel").GetComponent<UILabel>();
GameObject gameObject5 = component2.gameObject;
GameObject gameObject6 = component3.gameObject;
int num = (component4.gameObject.layer = 12);
int layer = (gameObject6.layer = num);
gameObject5.layer = layer;
UIManager.GetInstance().getUIBase_CardManager().SetNumberLabelStyle(component.NormalAtkLabelTemp, cardParameterFromId.IsFoil);
UIManager.GetInstance().getUIBase_CardManager().SetNumberLabelStyle(component.NormalLifeLabelTemp, cardParameterFromId.IsFoil);
}
return CreateCard(cardId, gameObject, index, isPlayer, battleMgr, component, transform, innerOptionsBuilder, isChoiceBrave);
}
public static BattleCardBase CreateSpecialSkillCard(int cardId, bool isPlayer, int index, SBattleLoad sBattleLoad, BattleManagerBase battleMgr, IBattleResourceMgr resourceMgr, IInnerOptionsBuilder innerOptionsBuilder, BossRushSpecialSkill skill)
{
bool flag = !isPlayer;
CardParameter cardParameterFromId = CardMaster.GetInstanceForBattle().GetCardParameterFromId(cardId);
_ = cardParameterFromId.CharType;
GameObject gobj = new SpecialSkillCardCreator(sBattleLoad.SpellCardTemplate.gameObject).LoadRootObject();
GameObject gameObject = GameMgr.GetIns().GetPrefabMgr().CloneObjectToParent(gobj, BattleManagerBase.GetIns().Battle3DContainer);
CardTemplate component = gameObject.GetComponent<CardTemplate>();
if (flag && !GameMgr.GetIns().IsWatchBattle && !sBattleLoad.isDbgEnableEnemyHandView && !GameMgr.GetIns().IsAdmin)
{
gameObject.GetComponent<CardTemplate>().CardNormalLodGroup.enabled = false;
}
GameObject gameObject2 = component.CardNormalTemp.gameObject;
component.NormalCardBaseMeshTemp.sharedMaterial = resourceMgr.GetSleeveMaterial(isPlayer);
Transform transform = gameObject.transform.Find("CardObj");
Transform transform2 = gameObject.transform.Find("Collider");
string tag = (transform.tag = (gameObject2.tag = (flag ? "Enemy" : "Player")));
transform2.tag = tag;
GameObject gameObject3 = null;
if (component.LifeLabelTemp != null)
{
gameObject3 = component.LifeLabelTemp.transform.parent.gameObject;
}
UILabel lifeLabelTemp = component.LifeLabelTemp;
if (lifeLabelTemp != null)
{
lifeLabelTemp.text = cardParameterFromId.Life.ToString();
}
if (gameObject3 != null)
{
gameObject3.SetActive(value: false);
}
component.NormalCostLabelTemp.text = cardParameterFromId.Cost.ToString();
component.NormalNameLabelTemp.text = skill.Name;
UIManager.GetInstance().getUIBase_CardManager().SetNumberLabelStyle(component.NormalCostLabelTemp, cardParameterFromId.IsFoil);
UIManager.GetInstance().getUIBase_CardManager().SetNameLabelStyle(component.NormalNameLabelTemp, cardParameterFromId.IsFoil);
Global.SetRepositionNameLabel(component.NormalNameLabelTemp, skill.Name, is2D: false);
string tag2;
if (isPlayer)
{
tag2 = "Player";
gameObject.name = "P0";
}
else
{
tag2 = "Enemy";
gameObject.name = "E0";
}
CardTypeBuildInfo cardTypeBuildInfo = CreateCardTypeBuildInfo(cardParameterFromId.CharType, isPlayer);
gameObject.SetActive(cardTypeBuildInfo.isActive);
gameObject.transform.localPosition = cardTypeBuildInfo.localPosition;
gameObject.transform.localScale = cardTypeBuildInfo.localScale;
gameObject.transform.localRotation = cardTypeBuildInfo.localRotation;
gameObject.transform.parent = cardTypeBuildInfo.parent;
gameObject.tag = tag2;
transform.tag = tag2;
transform.transform.Find("NormalField").tag = tag2;
transform.transform.Find("EvolField").tag = tag2;
SkillCreator.CardSkillsBuildInfo cardSkillsBuildInfo = SkillCreator.CreateBuildInfo(cardParameterFromId);
BattleCardBase.BuildInfo buildInfo = new BattleCardBase.BuildInfo(gameObject, cardId, battleMgr.GetBattlePlayer(isPlayer), battleMgr.GetBattlePlayer(!isPlayer), battleMgr.GetBattlePlayer(isPlayer), cardSkillsBuildInfo.normalSkillBuildInfos, cardSkillsBuildInfo.evolveSkillBuildInfos, isPlayer, 0, innerOptionsBuilder.CreateCardOptions(), battleMgr, battleMgr.BattleResourceMgr);
SpecialSkillBattleCard specialSkillBattleCard = new SpecialSkillBattleCard(skill, buildInfo);
specialSkillBattleCard.Setup(createNullView: true);
return specialSkillBattleCard;
}
public static BattleCardBase CreateCard(int cardId, GameObject gameObject, int battleCardIndex, bool isPlayer, BattleManagerBase battleMgr, CardTemplate CardTemplateIns, Transform parentObject, IInnerOptionsBuilder innerOptionsBuilder, bool isChoiceBrave)
{
CardParameter cardParameterFromId = CardMaster.GetInstanceForBattle().GetCardParameterFromId(cardId);
string tag;
if (isPlayer)
{
tag = "Player";
gameObject.name = "P" + battleCardIndex;
}
else
{
tag = "Enemy";
gameObject.name = "E" + battleCardIndex;
}
CardTypeBuildInfo cardTypeBuildInfo = CreateCardTypeBuildInfo(cardParameterFromId.CharType, isPlayer);
gameObject.SetActive(cardTypeBuildInfo.isActive);
gameObject.transform.localPosition = cardTypeBuildInfo.localPosition;
gameObject.transform.localScale = cardTypeBuildInfo.localScale;
gameObject.transform.localRotation = cardTypeBuildInfo.localRotation;
gameObject.transform.parent = cardTypeBuildInfo.parent;
gameObject.tag = tag;
parentObject.tag = tag;
if (cardParameterFromId.CharType == CardBasePrm.CharaType.NORMAL)
{
CardTemplateIns.CardNormalTemp.tag = tag;
CardTemplateIns.CardNormalTemp.gameObject.SetActive(value: true);
}
parentObject.transform.Find("NormalField").tag = tag;
parentObject.transform.Find("EvolField").tag = tag;
SkillCreator.CardSkillsBuildInfo cardSkillsBuildInfo = SkillCreator.CreateBuildInfo(cardParameterFromId);
return CreateBase(new BattleCardBase.BuildInfo(gameObject, cardId, battleMgr.GetBattlePlayer(isPlayer), battleMgr.GetBattlePlayer(!isPlayer), battleMgr.GetBattlePlayer(isPlayer), cardSkillsBuildInfo.normalSkillBuildInfos, cardSkillsBuildInfo.evolveSkillBuildInfos, isPlayer, battleCardIndex, innerOptionsBuilder.CreateCardOptions(), battleMgr, battleMgr.BattleResourceMgr), createNullView: false, isChoiceBrave);
}
private static BattleCardBase CreateCardWithoutResources(int cardId, int battleCardIndex, bool isPlayer, BattleManagerBase battleMgr, IInnerOptionsBuilder innerOptionsBuilder)
{
SkillCreator.CardSkillsBuildInfo cardSkillsBuildInfo = SkillCreator.CreateBuildInfo(CardMaster.GetInstanceForBattle().GetCardParameterFromId(cardId));
return CreateBase(new BattleCardBase.BuildInfo(null, cardId, battleMgr.GetBattlePlayer(isPlayer), battleMgr.GetBattlePlayer(!isPlayer), battleMgr.GetBattlePlayer(isPlayer), cardSkillsBuildInfo.normalSkillBuildInfos, cardSkillsBuildInfo.evolveSkillBuildInfos, isPlayer, battleCardIndex, innerOptionsBuilder.CreateCardOptions(), battleMgr, battleMgr.BattleResourceMgr), createNullView: true);
}
public static BattleCardBase CreateVirtualClass(bool isPlayer, BattleManagerBase battleMgr, IInnerOptionsBuilder innerOptionsBuilder)
{
return new VirtualClassBattleCard(new ClassBattleCardBase.ClassBuildInfo(isPlayer, 20, battleMgr.GetBattlePlayer(isPlayer), battleMgr.GetBattlePlayer(!isPlayer), battleMgr, NullBattleResourceMgr.GetInstance()));
}
public static BattleCardBase CreateVirtualCard(int cardId, int index, bool isPlayer, BattleManagerBase battleMgr, BattlePlayerBase selfBattlePlayer, BattlePlayerBase opponentBattlePlayer, IInnerOptionsBuilder innerOptionsBuilder)
{
CardParameter cardParameterFromId = CardMaster.GetInstanceForBattle().GetCardParameterFromId(cardId);
SkillCreator.CardSkillsBuildInfo cardSkillsBuildInfo = SkillCreator.CreateBuildInfo(cardParameterFromId);
BattleCardBase.BuildInfo buildInfo = new BattleCardBase.BuildInfo(null, cardId, selfBattlePlayer, opponentBattlePlayer, selfBattlePlayer, cardSkillsBuildInfo.normalSkillBuildInfos, cardSkillsBuildInfo.evolveSkillBuildInfos, isPlayer, index, innerOptionsBuilder.CreateCardOptions(), battleMgr, NullBattleResourceMgr.GetInstance());
BattleCardBase battleCardBase;
switch (cardParameterFromId.CharType)
{
case CardBasePrm.CharaType.NORMAL:
case CardBasePrm.CharaType.EVOLUTION:
battleCardBase = new VirtualUnitBattleCard(buildInfo);
break;
case CardBasePrm.CharaType.FIELD:
battleCardBase = new VirtualFieldBattleCard(buildInfo);
break;
case CardBasePrm.CharaType.CHANT_FIELD:
battleCardBase = new VirtualChantFieldBattleCard(buildInfo);
break;
case CardBasePrm.CharaType.SPELL:
battleCardBase = new VirtualSpellBattleCard(buildInfo, isChoiceBrave: false);
break;
default:
battleCardBase = NullBattleCard.Create();
break;
}
battleCardBase.Setup();
return battleCardBase;
}
public static BattleCardBase CreateToken(BattleCardBase.BuildInfo buildInfo, bool createNullView = false)
{
return CreateBase(buildInfo, createNullView);
}
private static BattleCardBase CreateBase(BattleCardBase.BuildInfo buildInfo, bool createNullView = false, bool isChoiceBrave = false)
{
BattleCardBase battleCardBase;
switch (CardMaster.GetInstanceForBattle().GetCardParameterFromId(buildInfo.CardId).CharType)
{
case CardBasePrm.CharaType.NORMAL:
case CardBasePrm.CharaType.EVOLUTION:
battleCardBase = new UnitBattleCard(buildInfo);
break;
case CardBasePrm.CharaType.FIELD:
battleCardBase = new FieldBattleCard(buildInfo);
break;
case CardBasePrm.CharaType.CHANT_FIELD:
battleCardBase = new ChantFieldBattleCard(buildInfo);
break;
case CardBasePrm.CharaType.SPELL:
battleCardBase = new SpellBattleCard(buildInfo, isChoiceBrave);
battleCardBase.IsChoiceBraveSkillCard = isChoiceBrave;
break;
default:
battleCardBase = NullBattleCard.Create();
break;
}
battleCardBase.Setup(createNullView);
return battleCardBase;
}
public static BattleCardBase CreateDummyInstance()
{
return NullBattleCard.Create();
}
public static BattleCardBase GetDummyInstance()
{
if (_dummyCardInstance == null)
{
_dummyCardInstance = NullBattleCard.Create();
}
return _dummyCardInstance;
}
private static CardTypeBuildInfo CreateCardTypeBuildInfo(CardBasePrm.CharaType type, bool isPlayer)
{
BattleManagerBase ins = BattleManagerBase.GetIns();
CardTypeBuildInfo cardTypeBuildInfo = new CardTypeBuildInfo();
if (type == CardBasePrm.CharaType.CLASS)
{
cardTypeBuildInfo.isActive = true;
cardTypeBuildInfo.localPosition = (isPlayer ? new Vector3(0f, -400f, 30f) : new Vector3(0f, 420f, 30f));
cardTypeBuildInfo.localScale = Global.CLASS_BATTLE_SCALE;
cardTypeBuildInfo.localRotation = Quaternion.identity;
cardTypeBuildInfo.parent = ins.Battle3DContainer.transform;
}
else
{
cardTypeBuildInfo.isActive = false;
cardTypeBuildInfo.localPosition = (isPlayer ? ins.CardHolder.transform.localPosition : ins.ECardHolder.transform.localPosition);
cardTypeBuildInfo.localScale = Global.CARD_BATTLE_SCALE;
cardTypeBuildInfo.localRotation = Quaternion.Euler(0f, -90f, 90f);
cardTypeBuildInfo.parent = ins.PCardPlace.transform;
}
return cardTypeBuildInfo;
}
public static void SetupClassMaterialToCenterCharacterMesh(MeshRenderer insideMesh, MeshRenderer outsideMesh, Material cardArtMaterial, Material cardFrameMaterial)
{
Material[] materials = insideMesh.materials;
Material[] materials2 = outsideMesh.materials;
cardFrameMaterial.shader = Shader.Find(cardFrameMaterial.shader.name);
cardArtMaterial.shader = Shader.Find(cardArtMaterial.shader.name);
materials2[0] = cardFrameMaterial;
materials[0] = cardArtMaterial;
insideMesh.materials = materials;
outsideMesh.materials = materials2;
}
}