feat(battle-engine): re-establish dropped base clauses for net-new stubs (2704->2202 true)
The stub generator emits net-new types as base-LESS partials, so generated Vfx/View types weren't actually VfxBase/etc. -> hundreds of CS1503/CS0029 'cannot convert to VfxBase' at every polymorphic call site. m1_baseclauses.py recovers each generated type's decomp base CLASS (interfaces dropped to avoid CS0535) into _BaseClauses.g.cs, cross-namespace bases fully qualified. Generated the intermediate Vfx/processing base types (SpreadOutVfx/OpenCardVfx/ProcessingBase/DamageVfxBase/ForecastIconVfxBase/...). DefaultOpeningVfx regenerated WITH override (its base OpeningVfx is copied+abstract). Clearing the polymorphism cascade + the masking base-type CS0246s unmasked the true member-level frontier: 2202 (CS1501/CS1061/CS1503), 0 structural errors. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
using UnityEngine;
|
||||
using Wizard.Battle.View.Vfx;
|
||||
|
||||
namespace Wizard.Battle.Player.ClassCharacter;
|
||||
|
||||
public class Enemy3dClassCharacter : Class3dCharacterBase
|
||||
{
|
||||
private readonly Vector3 PP_PANEL_POSITION = new Vector3(0f, -34.22f, -29.25f);
|
||||
|
||||
private readonly Vector3 WIDGET_POSITION = new Vector3(0f, 490f, 30f);
|
||||
|
||||
private readonly int WIDGET_OFFSET_TOP = -1162;
|
||||
|
||||
private readonly int WIDGET_OFFSET_BOTTOM = 195;
|
||||
|
||||
protected override Vector3 MessagePosition => _initPosition + new Vector3(0f, -0.3f, 0f);
|
||||
|
||||
public Enemy3dClassCharacter(int classId)
|
||||
{
|
||||
_classCharacterId = classId;
|
||||
IsPlayer = false;
|
||||
}
|
||||
|
||||
public override VfxBase CreateLoadResouceVfx()
|
||||
{
|
||||
SequentialVfxPlayer sequentialVfxPlayer = SequentialVfxPlayer.Create();
|
||||
sequentialVfxPlayer.Register(base.CreateLoadResouceVfx());
|
||||
sequentialVfxPlayer.Register(InstantVfx.Create(delegate
|
||||
{
|
||||
_root.transform.localPosition = Vector3.left * 10f;
|
||||
base.GameObject.transform.Find("Collider").gameObject.GetComponent<BoxCollider>().size = new Vector3(3.8f, 3.9f, 0.2f);
|
||||
}));
|
||||
return sequentialVfxPlayer;
|
||||
}
|
||||
|
||||
protected override string GetTagName()
|
||||
{
|
||||
return "Enemy";
|
||||
}
|
||||
|
||||
protected override Quaternion ConvertBackPanelRotation(Quaternion originalRotation)
|
||||
{
|
||||
return Quaternion.Euler(0f, -180f, 180f);
|
||||
}
|
||||
|
||||
protected override Vector3 GetPosition()
|
||||
{
|
||||
return Global.CLASS_BATTLE_POSITION_ENEMY;
|
||||
}
|
||||
|
||||
protected override void SetUpAnchor(GameObject o)
|
||||
{
|
||||
o.transform.localPosition = WIDGET_POSITION;
|
||||
UIWidget uIWidget = o.AddComponent<UIWidget>();
|
||||
uIWidget.topAnchor.relative = 1f;
|
||||
uIWidget.topAnchor.absolute = WIDGET_OFFSET_TOP;
|
||||
Transform target = BattleManagerBase.GetIns().Battle3DContainer.transform.Find("Camera");
|
||||
uIWidget.topAnchor.target = target;
|
||||
uIWidget.bottomAnchor.target = target;
|
||||
uIWidget.bottomAnchor.relative = 0.5f;
|
||||
uIWidget.bottomAnchor.absolute = WIDGET_OFFSET_BOTTOM;
|
||||
}
|
||||
|
||||
protected override void AttachOtherUI(GameObject o)
|
||||
{
|
||||
BattleManagerBase.GetIns().BattleEnemy.BattleView.EpPanel.transform.parent = o.transform;
|
||||
EnemyStatusPanelControl enemyStatusPanelControl = BattleManagerBase.GetIns().BattleEnemy.StatusPanelControl as EnemyStatusPanelControl;
|
||||
if ((bool)enemyStatusPanelControl)
|
||||
{
|
||||
enemyStatusPanelControl.ChangePPPanelParent(o.transform, PP_PANEL_POSITION);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,143 @@
|
||||
using UnityEngine;
|
||||
using Wizard.Battle.View.Vfx;
|
||||
|
||||
namespace Wizard.Battle.Player.ClassCharacter;
|
||||
|
||||
internal class EnemyHighRankSpineClassCharacter : HighRankSpineClassCharacter
|
||||
{
|
||||
protected readonly Vector3 WIDGET_POSITION = new Vector3(0f, 490f, 30f);
|
||||
|
||||
protected readonly int WIDGET_OFFSET_BOTTOM = 195;
|
||||
|
||||
protected readonly int WIDGET_OFFSET_TOP = -1162;
|
||||
|
||||
protected readonly Vector3 PP_PANEL_POSITION = new Vector3(0f, -34.22f, -29.25f);
|
||||
|
||||
protected override Vector3 MessagePosition => _initPosition + new Vector3(0f, -0.3f, 0f);
|
||||
|
||||
public override VfxBase CreateLoadResouceVfx()
|
||||
{
|
||||
SequentialVfxPlayer sequentialVfxPlayer = SequentialVfxPlayer.Create();
|
||||
sequentialVfxPlayer.Register(base.CreateLoadResouceVfx());
|
||||
sequentialVfxPlayer.Register(InstantVfx.Create(delegate
|
||||
{
|
||||
base.GameObject.transform.Find("Collider").gameObject.GetComponent<BoxCollider>().size = new Vector3(3.8f, 3.9f, 0.2f);
|
||||
}));
|
||||
return sequentialVfxPlayer;
|
||||
}
|
||||
|
||||
protected override string GetTagName()
|
||||
{
|
||||
return "Enemy";
|
||||
}
|
||||
|
||||
protected override void SetUpAnchor(GameObject o)
|
||||
{
|
||||
o.transform.localPosition = WIDGET_POSITION;
|
||||
UIWidget uIWidget = o.AddComponent<UIWidget>();
|
||||
uIWidget.topAnchor.relative = 1f;
|
||||
uIWidget.topAnchor.absolute = WIDGET_OFFSET_TOP;
|
||||
Transform target = BattleManagerBase.GetIns().Battle3DContainer.transform.Find("Camera");
|
||||
uIWidget.topAnchor.target = target;
|
||||
uIWidget.bottomAnchor.target = target;
|
||||
uIWidget.bottomAnchor.relative = 0.5f;
|
||||
uIWidget.bottomAnchor.absolute = WIDGET_OFFSET_BOTTOM;
|
||||
}
|
||||
|
||||
protected override void AttachOtherUI(GameObject o)
|
||||
{
|
||||
BattleManagerBase.GetIns().BattleEnemy.BattleView.EpPanel.transform.parent = o.transform;
|
||||
EnemyStatusPanelControl enemyStatusPanelControl = BattleManagerBase.GetIns().BattleEnemy.StatusPanelControl as EnemyStatusPanelControl;
|
||||
if ((bool)enemyStatusPanelControl)
|
||||
{
|
||||
enemyStatusPanelControl.ChangePPPanelParent(o.transform, PP_PANEL_POSITION);
|
||||
}
|
||||
}
|
||||
|
||||
public override Vector3 GetSpinePosition()
|
||||
{
|
||||
return new Vector3(0f, -0.36f, -0.27f);
|
||||
}
|
||||
|
||||
protected override string GetTextureName()
|
||||
{
|
||||
return "mt_Encampment_Chara_1_Rev";
|
||||
}
|
||||
|
||||
public override Vector3 GetMaskImagePosition()
|
||||
{
|
||||
return new Vector3(0f, 0.04f, 0f);
|
||||
}
|
||||
|
||||
protected override Vector3 GetShieldPosition()
|
||||
{
|
||||
return new Vector3(1.86f, 0.4f, 0f);
|
||||
}
|
||||
|
||||
protected override Vector3 GetLifeIconPosition()
|
||||
{
|
||||
return new Vector3(0f, 0f, 0.1f);
|
||||
}
|
||||
|
||||
public override Quaternion GetMaskImageRotation()
|
||||
{
|
||||
return Quaternion.Euler(new Vector3(0f, 0f, 180f));
|
||||
}
|
||||
|
||||
public override Vector3 ConvertSpineScale(Vector3 originalScale)
|
||||
{
|
||||
if (GameMgr.GetIns().GetDataMgr().GetEnemyBattleSkillReverse() == 1)
|
||||
{
|
||||
return new Vector3((0f - originalScale.x) * 0.934f, originalScale.y, originalScale.z) * 1.003125f;
|
||||
}
|
||||
return new Vector3(originalScale.x * 0.934f, originalScale.y, originalScale.z);
|
||||
}
|
||||
|
||||
public override int GetSpineSortingOrder(bool isBack = false)
|
||||
{
|
||||
if (!isBack)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
return -9;
|
||||
}
|
||||
|
||||
public override int GetMaskSortingOrder(bool isBack = false)
|
||||
{
|
||||
if (!isBack)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
return -9;
|
||||
}
|
||||
|
||||
protected override int GetEmoteLabelDepth()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
protected override int GetCharaId()
|
||||
{
|
||||
return GameMgr.GetIns().GetDataMgr().GetEnemyCharaId();
|
||||
}
|
||||
|
||||
public override int GetSkinId()
|
||||
{
|
||||
return GameMgr.GetIns().GetDataMgr().GetEnemySkinId();
|
||||
}
|
||||
|
||||
public override int GetStencil()
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
||||
protected override Vector3 GetPosition()
|
||||
{
|
||||
return Global.CLASS_BATTLE_POSITION_ENEMY;
|
||||
}
|
||||
|
||||
protected override Quaternion ConvertBackPanelRotation(Quaternion originalRotation)
|
||||
{
|
||||
return Quaternion.Euler(0f, -180f, 180f);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,135 @@
|
||||
using UnityEngine;
|
||||
using Wizard.Battle.View.Vfx;
|
||||
|
||||
namespace Wizard.Battle.Player.ClassCharacter;
|
||||
|
||||
internal class EnemySpineClassCharacter : SpineClassCharacter
|
||||
{
|
||||
protected readonly Vector3 WIDGET_POSITION = new Vector3(0f, 490f, 30f);
|
||||
|
||||
protected readonly int WIDGET_OFFSET_BOTTOM = 195;
|
||||
|
||||
protected readonly int WIDGET_OFFSET_TOP = -1162;
|
||||
|
||||
protected readonly Vector3 PP_PANEL_POSITION = new Vector3(0f, -34.22f, -29.25f);
|
||||
|
||||
protected override Vector3 MessagePosition => _initPosition + new Vector3(0f, -0.3f, 0f);
|
||||
|
||||
public override VfxBase CreateLoadResouceVfx()
|
||||
{
|
||||
SequentialVfxPlayer sequentialVfxPlayer = SequentialVfxPlayer.Create();
|
||||
sequentialVfxPlayer.Register(base.CreateLoadResouceVfx());
|
||||
sequentialVfxPlayer.Register(InstantVfx.Create(delegate
|
||||
{
|
||||
base.GameObject.transform.Find("Collider").gameObject.GetComponent<BoxCollider>().size = new Vector3(3.8f, 3.9f, 0.2f);
|
||||
}));
|
||||
return sequentialVfxPlayer;
|
||||
}
|
||||
|
||||
protected override string GetTagName()
|
||||
{
|
||||
return "Enemy";
|
||||
}
|
||||
|
||||
protected override void SetUpAnchor(GameObject o)
|
||||
{
|
||||
o.transform.localPosition = WIDGET_POSITION;
|
||||
UIWidget uIWidget = o.AddComponent<UIWidget>();
|
||||
uIWidget.topAnchor.relative = 1f;
|
||||
uIWidget.topAnchor.absolute = WIDGET_OFFSET_TOP;
|
||||
Transform target = BattleManagerBase.GetIns().Battle3DContainer.transform.Find("Camera");
|
||||
uIWidget.topAnchor.target = target;
|
||||
uIWidget.bottomAnchor.target = target;
|
||||
uIWidget.bottomAnchor.relative = 0.5f;
|
||||
uIWidget.bottomAnchor.absolute = WIDGET_OFFSET_BOTTOM;
|
||||
}
|
||||
|
||||
protected override void AttachOtherUI(GameObject o)
|
||||
{
|
||||
BattleManagerBase.GetIns().BattleEnemy.BattleView.EpPanel.transform.parent = o.transform;
|
||||
EnemyStatusPanelControl enemyStatusPanelControl = BattleManagerBase.GetIns().BattleEnemy.StatusPanelControl as EnemyStatusPanelControl;
|
||||
if ((bool)enemyStatusPanelControl)
|
||||
{
|
||||
enemyStatusPanelControl.ChangePPPanelParent(o.transform, PP_PANEL_POSITION);
|
||||
}
|
||||
}
|
||||
|
||||
public override Vector3 GetSpinePosition()
|
||||
{
|
||||
return new Vector3(0f, -0.36f, -0.17f);
|
||||
}
|
||||
|
||||
protected override string GetTextureName()
|
||||
{
|
||||
return "mt_Encampment_Chara_1_Rev";
|
||||
}
|
||||
|
||||
public override Vector3 GetMaskImagePosition()
|
||||
{
|
||||
return new Vector3(0f, 0.04f, 0f);
|
||||
}
|
||||
|
||||
protected override Vector3 GetShieldPosition()
|
||||
{
|
||||
return new Vector3(1.86f, 0.4f, 0f);
|
||||
}
|
||||
|
||||
protected override Vector3 GetLifeIconPosition()
|
||||
{
|
||||
return new Vector3(0f, 0f, 0.1f);
|
||||
}
|
||||
|
||||
public override Quaternion GetMaskImageRotation()
|
||||
{
|
||||
return Quaternion.Euler(new Vector3(0f, 0f, 180f));
|
||||
}
|
||||
|
||||
public override Vector3 ConvertSpineScale(Vector3 originalScale)
|
||||
{
|
||||
if (GameMgr.GetIns().GetDataMgr().GetEnemyBattleSkillReverse() == 1)
|
||||
{
|
||||
return new Vector3((0f - originalScale.x) * 0.934f, originalScale.y, originalScale.z) * 1.003125f;
|
||||
}
|
||||
return new Vector3(originalScale.x * 0.934f, originalScale.y, originalScale.z);
|
||||
}
|
||||
|
||||
public override int GetSpineSortingOrder(bool isBack = false)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
public override int GetMaskSortingOrder(bool isBack = false)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
protected override int GetEmoteLabelDepth()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
protected override int GetCharaId()
|
||||
{
|
||||
return GameMgr.GetIns().GetDataMgr().GetEnemyCharaId();
|
||||
}
|
||||
|
||||
public override int GetSkinId()
|
||||
{
|
||||
return GameMgr.GetIns().GetDataMgr().GetEnemySkinId();
|
||||
}
|
||||
|
||||
public override int GetStencil()
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
||||
protected override Vector3 GetPosition()
|
||||
{
|
||||
return Global.CLASS_BATTLE_POSITION_ENEMY;
|
||||
}
|
||||
|
||||
protected override Quaternion ConvertBackPanelRotation(Quaternion originalRotation)
|
||||
{
|
||||
return Quaternion.Euler(0f, -180f, 180f);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace Wizard.Battle.Player.ClassCharacter;
|
||||
|
||||
public class Player3dClassCharacter : Class3dCharacterBase
|
||||
{
|
||||
private readonly float ScreenWidthFraction = 0.5f;
|
||||
|
||||
private readonly float ScreenHeightFraction = 0.05f;
|
||||
|
||||
private readonly Vector3 WIDGET_POSITION = new Vector3(0f, -460f, 30f);
|
||||
|
||||
private readonly int WIDGET_OFFSET_BOTTOM = 71;
|
||||
|
||||
private readonly int WIDGET_OFFSET_TOP = 171;
|
||||
|
||||
protected override Vector3 MessagePosition => UIManager.GetInstance().getCamera().ScreenToWorldPoint(new Vector3((float)Screen.width * ScreenWidthFraction, (float)Screen.height * ScreenHeightFraction, 0f));
|
||||
|
||||
public Player3dClassCharacter(int classId)
|
||||
{
|
||||
_classCharacterId = classId;
|
||||
IsPlayer = true;
|
||||
}
|
||||
|
||||
public void SetClassId(int id)
|
||||
{
|
||||
_classCharacterId = id;
|
||||
}
|
||||
|
||||
protected override string GetTagName()
|
||||
{
|
||||
return "Player";
|
||||
}
|
||||
|
||||
protected override Quaternion ConvertBackPanelRotation(Quaternion originalRotation)
|
||||
{
|
||||
return originalRotation;
|
||||
}
|
||||
|
||||
protected override Vector3 GetPosition()
|
||||
{
|
||||
return Global.CLASS_BATTLE_POSITION_PLAYER;
|
||||
}
|
||||
|
||||
protected override void SetUpAnchor(GameObject o)
|
||||
{
|
||||
o.transform.localPosition = WIDGET_POSITION;
|
||||
UIWidget uIWidget = o.AddComponent<UIWidget>();
|
||||
uIWidget.bottomAnchor.relative = 0f;
|
||||
uIWidget.bottomAnchor.absolute = WIDGET_OFFSET_BOTTOM;
|
||||
Transform transform = BattleManagerBase.GetIns().Battle3DContainer.transform;
|
||||
uIWidget.bottomAnchor.target = transform;
|
||||
uIWidget.topAnchor.target = transform;
|
||||
uIWidget.topAnchor.relative = 0f;
|
||||
uIWidget.topAnchor.absolute = WIDGET_OFFSET_TOP;
|
||||
}
|
||||
|
||||
protected override void AttachOtherUI(GameObject o)
|
||||
{
|
||||
BattleManagerBase.GetIns().BattlePlayer.BattleView.EpPanel.transform.parent = o.transform;
|
||||
}
|
||||
|
||||
public override Vector3 GetMaskImagePosition()
|
||||
{
|
||||
return new Vector3(0f, 0.12f, 0f);
|
||||
}
|
||||
|
||||
protected override Vector3 GetShieldPosition()
|
||||
{
|
||||
return new Vector3(2f, 1.7f, 0f);
|
||||
}
|
||||
|
||||
protected override Vector3 GetLifeIconPosition()
|
||||
{
|
||||
return new Vector3(0f, 0f, 0.1f);
|
||||
}
|
||||
|
||||
public override Quaternion GetMaskImageRotation()
|
||||
{
|
||||
return Quaternion.identity;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,123 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace Wizard.Battle.Player.ClassCharacter;
|
||||
|
||||
internal class PlayerSpineClassCharacter : SpineClassCharacter
|
||||
{
|
||||
protected readonly Vector3 WIDGET_POSITION = new Vector3(0f, -460f, 30f);
|
||||
|
||||
protected readonly int WIDGET_OFFSET_BOTTOM = 71;
|
||||
|
||||
protected readonly int WIDGET_OFFSET_TOP = 171;
|
||||
|
||||
protected readonly Vector3 PP_PANEL_POSITION = new Vector3(0f, -34.22f, -29.25f);
|
||||
|
||||
protected override Vector3 MessagePosition => UIManager.GetInstance().getCamera().ScreenToWorldPoint(new Vector3((float)Screen.width * ScreenWidthFraction, (float)Screen.height * ScreenHeightFraction, 0f));
|
||||
|
||||
protected override string GetTagName()
|
||||
{
|
||||
return "Player";
|
||||
}
|
||||
|
||||
protected override void SetUpAnchor(GameObject o)
|
||||
{
|
||||
o.transform.localPosition = WIDGET_POSITION;
|
||||
UIWidget uIWidget = o.AddComponent<UIWidget>();
|
||||
uIWidget.bottomAnchor.relative = 0f;
|
||||
uIWidget.bottomAnchor.absolute = WIDGET_OFFSET_BOTTOM;
|
||||
Transform transform = BattleManagerBase.GetIns().Battle3DContainer.transform;
|
||||
uIWidget.bottomAnchor.target = transform;
|
||||
uIWidget.topAnchor.target = transform;
|
||||
uIWidget.topAnchor.relative = 0f;
|
||||
uIWidget.topAnchor.absolute = WIDGET_OFFSET_TOP;
|
||||
}
|
||||
|
||||
protected override void AttachOtherUI(GameObject o)
|
||||
{
|
||||
BattleManagerBase.GetIns().BattlePlayer.BattleView.EpPanel.transform.parent = o.transform;
|
||||
}
|
||||
|
||||
public override void PlayMotion(ClassCharaPrm.MotionType motionType)
|
||||
{
|
||||
base.PlayMotion(motionType);
|
||||
if (_isNoEvolveShift && motionType == ClassCharaPrm.MotionType.extra)
|
||||
{
|
||||
BattleCoroutine.GetInstance().StartCoroutine(WaitReturnOnAnimation());
|
||||
}
|
||||
}
|
||||
|
||||
public override Vector3 GetSpinePosition()
|
||||
{
|
||||
return new Vector3(0f, -0.02f, -0.17f);
|
||||
}
|
||||
|
||||
protected override string GetTextureName()
|
||||
{
|
||||
return "mt_Encampment_Chara_1";
|
||||
}
|
||||
|
||||
public override Vector3 GetMaskImagePosition()
|
||||
{
|
||||
return new Vector3(0f, 0.12f, 0f);
|
||||
}
|
||||
|
||||
protected override Vector3 GetShieldPosition()
|
||||
{
|
||||
return new Vector3(2f, 1.7f, 0f);
|
||||
}
|
||||
|
||||
protected override Vector3 GetLifeIconPosition()
|
||||
{
|
||||
return new Vector3(0f, 0f, 0.1f);
|
||||
}
|
||||
|
||||
public override Quaternion GetMaskImageRotation()
|
||||
{
|
||||
return Quaternion.identity;
|
||||
}
|
||||
|
||||
public override Vector3 ConvertSpineScale(Vector3 originalScale)
|
||||
{
|
||||
return originalScale * 1.003125f;
|
||||
}
|
||||
|
||||
public override int GetSpineSortingOrder(bool isBack = false)
|
||||
{
|
||||
return -2;
|
||||
}
|
||||
|
||||
public override int GetMaskSortingOrder(bool isBack = false)
|
||||
{
|
||||
return -2;
|
||||
}
|
||||
|
||||
protected override int GetEmoteLabelDepth()
|
||||
{
|
||||
return 42;
|
||||
}
|
||||
|
||||
protected override int GetCharaId()
|
||||
{
|
||||
return GameMgr.GetIns().GetDataMgr().GetPlayerCharaId();
|
||||
}
|
||||
|
||||
public override int GetSkinId()
|
||||
{
|
||||
return GameMgr.GetIns().GetDataMgr().GetPlayerSkinId();
|
||||
}
|
||||
|
||||
public override int GetStencil()
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
|
||||
protected override Vector3 GetPosition()
|
||||
{
|
||||
return Global.CLASS_BATTLE_POSITION_PLAYER;
|
||||
}
|
||||
|
||||
protected override Quaternion ConvertBackPanelRotation(Quaternion originalRotation)
|
||||
{
|
||||
return originalRotation;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,145 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using Wizard.Battle.View.Vfx;
|
||||
|
||||
namespace Wizard.Battle.Player.ClassCharacter;
|
||||
|
||||
public class SkinEffectVfx : VfxBase, IEffectVfx
|
||||
{
|
||||
private Func<EffectBattle> _getLoadedEffectObject;
|
||||
|
||||
protected EffectBattle _effectObject;
|
||||
|
||||
private Transform _targetTransform;
|
||||
|
||||
private int _order = -1;
|
||||
|
||||
private bool _isEvolve = true;
|
||||
|
||||
public bool IsEffectEnd { get; private set; }
|
||||
|
||||
public SkinEffectVfx(Func<EffectBattle> getLoadedEffectObject, Transform baseTransform, int order = -1, bool isEvolve = true)
|
||||
{
|
||||
if (BattleManagerBase.GetIns() == null || !BattleManagerBase.GetIns().IsRecovery)
|
||||
{
|
||||
_targetTransform = baseTransform;
|
||||
_getLoadedEffectObject = getLoadedEffectObject;
|
||||
_order = order;
|
||||
_isEvolve = isEvolve;
|
||||
}
|
||||
}
|
||||
|
||||
public static void SetLayerAndOrder(GameObject gameObject, int layerNo, int order, bool needSetChildren = true)
|
||||
{
|
||||
if (gameObject == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
gameObject.layer = layerNo;
|
||||
ParticleSystemRenderer component = gameObject.GetComponent<ParticleSystemRenderer>();
|
||||
if (component != null)
|
||||
{
|
||||
component.sortingOrder = order;
|
||||
}
|
||||
if (!needSetChildren)
|
||||
{
|
||||
return;
|
||||
}
|
||||
foreach (Transform item in gameObject.transform)
|
||||
{
|
||||
SetLayerAndOrder(item.gameObject, layerNo, order, needSetChildren);
|
||||
}
|
||||
}
|
||||
|
||||
public override void Play()
|
||||
{
|
||||
if (BattleManagerBase.GetIns() != null && BattleManagerBase.GetIns().IsRecovery)
|
||||
{
|
||||
return;
|
||||
}
|
||||
base.Play();
|
||||
_effectObject = _getLoadedEffectObject();
|
||||
if (!(_effectObject == null))
|
||||
{
|
||||
_effectObject.GetComponent<ParticleSystemRenderer>();
|
||||
SetLayerAndOrder(_effectObject.gameObject, _isEvolve ? 13 : 15, _order);
|
||||
if (!_isEvolve)
|
||||
{
|
||||
SetMaskSetting(_effectObject.transform);
|
||||
}
|
||||
_effectObject.gameObject.SetActive(value: true);
|
||||
IsEffectEnd = false;
|
||||
IsEnd = true;
|
||||
}
|
||||
}
|
||||
|
||||
private void SetMaskSetting(Transform effectObject)
|
||||
{
|
||||
foreach (Transform item in effectObject)
|
||||
{
|
||||
ParticleSystemRenderer component = item.GetComponent<ParticleSystemRenderer>();
|
||||
if (component != null)
|
||||
{
|
||||
component.maskInteraction = SpriteMaskInteraction.VisibleInsideMask;
|
||||
}
|
||||
SetMaskSetting(item);
|
||||
}
|
||||
}
|
||||
|
||||
public void UpdateEffect()
|
||||
{
|
||||
if (_effectObject == null)
|
||||
{
|
||||
IsEffectEnd = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
RemoveCheck();
|
||||
}
|
||||
}
|
||||
|
||||
public void RemoveCheck()
|
||||
{
|
||||
if (CheckEffectEnd(_effectObject))
|
||||
{
|
||||
DestroyEffect();
|
||||
}
|
||||
}
|
||||
|
||||
public void DestroyEffect()
|
||||
{
|
||||
UnityEngine.Object.Destroy(_effectObject.gameObject);
|
||||
IsEffectEnd = true;
|
||||
}
|
||||
|
||||
public override void Update(float dt, List<IEffectVfx> effectVfxList)
|
||||
{
|
||||
base.Update(dt, effectVfxList);
|
||||
if (IsEnd)
|
||||
{
|
||||
VfxMgr.CheckAndAddEffectVfxList(this, effectVfxList);
|
||||
}
|
||||
}
|
||||
|
||||
private bool CheckEffectEnd(EffectBattle effect)
|
||||
{
|
||||
if (effect.AnimationObj != null)
|
||||
{
|
||||
if (effect.AnimationObj.isPlaying)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
effect.AnimationObj.gameObject.SetActive(value: false);
|
||||
}
|
||||
foreach (Transform item in effect.transform)
|
||||
{
|
||||
ParticleSystem component = item.GetComponent<ParticleSystem>();
|
||||
if (component != null && component.IsAlive())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,234 @@
|
||||
using System.Collections;
|
||||
using Cute;
|
||||
using UnityEngine;
|
||||
using Wizard.Battle.View.Vfx;
|
||||
|
||||
namespace Wizard.Battle.Player.ClassCharacter;
|
||||
|
||||
public abstract class SpineClassCharacter : ClassCharacterBase
|
||||
{
|
||||
protected readonly float ScreenWidthFraction = 0.5f;
|
||||
|
||||
protected readonly float ScreenHeightFraction = 0.05f;
|
||||
|
||||
protected bool _isNoEvolveShift;
|
||||
|
||||
protected bool _isOpponentReverse;
|
||||
|
||||
private SpineObject _spine;
|
||||
|
||||
private ClassCharaPrm.MotionType _currentMotion = ClassCharaPrm.MotionType.idle;
|
||||
|
||||
private bool IsSnCollabSkin => Global.IsSnCollabSkin(GetCharaId());
|
||||
|
||||
public SpineClassCharacter()
|
||||
{
|
||||
}
|
||||
|
||||
public override VfxBase CreateLoadResouceVfx()
|
||||
{
|
||||
return InstantVfx.Create(delegate
|
||||
{
|
||||
ClassCharacterMasterData charaPrmByCharaId = GameMgr.GetIns().GetDataMgr().GetCharaPrmByCharaId(GetCharaId());
|
||||
GameObject gobj = new ClassCardCreator(Toolbox.ResourcesManager.LoadObject<GameObject>(Toolbox.ResourcesManager.GetAssetTypePath(charaPrmByCharaId.path, ResourcesManager.AssetLoadPathType.ClassCharaMesh, isfetch: true))).LoadRootObject();
|
||||
_isNoEvolveShift = charaPrmByCharaId.IsNoEvolveShift;
|
||||
_isOpponentReverse = this is EnemySpineClassCharacter && charaPrmByCharaId.IsOpponentReverse;
|
||||
GameObject gameObject = NGUITools.AddChild(BattleManagerBase.GetIns().Battle3DContainer);
|
||||
gameObject.name = "ClassCharacterRoot";
|
||||
GameObject gameObject2 = GameMgr.GetIns().GetPrefabMgr().CloneObjectToParent(gobj, gameObject);
|
||||
SetUpAnchor(gameObject);
|
||||
AttachOtherUI(gameObject);
|
||||
GameObject gameObject3 = gameObject2.transform.Find("ClassObj").gameObject;
|
||||
GameObject gameObject4 = gameObject2.transform.Find("Collider").gameObject;
|
||||
base.GameObject = gameObject2;
|
||||
base.GameObject.tag = GetTagName();
|
||||
base.GameObject.transform.localPosition = GetPosition();
|
||||
_initPosition = base.GameObject.transform.position;
|
||||
gameObject3.transform.localScale = Global.CLASS_BATTLE_SCALE;
|
||||
gameObject3.tag = GetTagName();
|
||||
gameObject4.tag = GetTagName();
|
||||
Transform transform = gameObject3.transform.Find("Class");
|
||||
string path = (IsSnCollabSkin ? "md_Encampment_sn_Base" : "md_Encampment_Base");
|
||||
transform.GetComponent<MeshFilter>().sharedMesh = Toolbox.ResourcesManager.LoadObject<Mesh>(Toolbox.ResourcesManager.GetAssetTypePath(path, ResourcesManager.AssetLoadPathType.ClassCharaMesh, isfetch: true));
|
||||
MotionUtils.SetLayerAll(transform.gameObject, 15);
|
||||
Transform child = transform.transform.GetChild(0);
|
||||
string path2 = (IsSnCollabSkin ? "md_Encampment_sn_Outside" : "md_Encampment_outside");
|
||||
child.GetComponent<MeshFilter>().sharedMesh = Toolbox.ResourcesManager.LoadObject<Mesh>(Toolbox.ResourcesManager.GetAssetTypePath(path2, ResourcesManager.AssetLoadPathType.ClassCharaMesh, isfetch: true));
|
||||
MotionUtils.SetLayerAll(child.gameObject, 10);
|
||||
CardTemplate cardTemplate = gameObject2.AddComponent<CardTemplate>();
|
||||
cardTemplate.CardWrapObjTemp = gameObject3;
|
||||
cardTemplate.Collider = gameObject4.GetComponent<BoxCollider>();
|
||||
Transform transform2 = transform.transform;
|
||||
transform2.localRotation = ConvertBackPanelRotation(transform2.localRotation);
|
||||
GameObject gameObject5 = gameObject3.transform.Find("Shield").gameObject;
|
||||
gameObject5.GetComponent<MeshFilter>().sharedMesh = Toolbox.ResourcesManager.LoadObject<Mesh>(Toolbox.ResourcesManager.GetAssetTypePath("md_Encampment_Shield", ResourcesManager.AssetLoadPathType.ClassCharaMesh, isfetch: true));
|
||||
gameObject5.GetComponent<MeshRenderer>().sharedMaterial = Toolbox.ResourcesManager.LoadObject<Material>(Toolbox.ResourcesManager.GetAssetTypePath("mt_Encampment_Shield", ResourcesManager.AssetLoadPathType.ClassCharaMaterial, isfetch: true));
|
||||
gameObject5.GetComponent<MeshRenderer>().sharedMaterial.mainTexture = Toolbox.ResourcesManager.LoadObject<Texture>(Toolbox.ResourcesManager.GetAssetTypePath("tx_Encampment_Shield", ResourcesManager.AssetLoadPathType.ClassCharaTexture, isfetch: true));
|
||||
gameObject5.transform.localPosition = GetShieldPosition();
|
||||
gameObject5.transform.localScale = new Vector3(1.5f, 1.5f, 1f);
|
||||
GameMgr.GetIns().GetEffectMgr().SetParticleShader(gameObject5);
|
||||
MeshRenderer component = transform.GetComponent<MeshRenderer>();
|
||||
MeshRenderer component2 = child.GetComponent<MeshRenderer>();
|
||||
string path3 = (IsSnCollabSkin ? "mt_Encampment_sn_Frame" : "mt_Encampment_Frame");
|
||||
Material material = Toolbox.ResourcesManager.LoadObject(Toolbox.ResourcesManager.GetAssetTypePath(path3, ResourcesManager.AssetLoadPathType.ClassCharaMaterial, isfetch: true)) as Material;
|
||||
if (material != null)
|
||||
{
|
||||
string path4 = (IsSnCollabSkin ? "tx_Encampment_sn_Frame" : "tx_Encampment_Frame");
|
||||
material.mainTexture = Toolbox.ResourcesManager.LoadObject<Texture>(Toolbox.ResourcesManager.GetAssetTypePath(path4, ResourcesManager.AssetLoadPathType.ClassCharaFrameTexture, isfetch: true));
|
||||
}
|
||||
Material material2 = Toolbox.ResourcesManager.LoadObject<Material>(Toolbox.ResourcesManager.GetAssetTypePath(GetTextureName(), ResourcesManager.AssetLoadPathType.ClassCharaMaterial, isfetch: true));
|
||||
material2.mainTexture = Toolbox.ResourcesManager.LoadObject<Texture>(Toolbox.ResourcesManager.GetAssetTypePath(((int)charaPrmByCharaId.ClassColorId).ToString("00"), ResourcesManager.AssetLoadPathType.ClassCharaEncampment, isfetch: true));
|
||||
CardCreatorBase.SetupClassMaterialToCenterCharacterMesh(component, component2, material2, material);
|
||||
gameObject5.SetActive(value: true);
|
||||
SBattleLoad sBattleLoad = BattleManagerBase.GetIns().SBattleLoad;
|
||||
GameObject gameObject6 = GameMgr.GetIns().GetPrefabMgr().CloneObjectToParent(Toolbox.ResourcesManager.LoadObject<GameObject>(Toolbox.ResourcesManager.GetAssetTypePath("cmn_frame_class_1", ResourcesManager.AssetLoadPathType.Effect2D, isfetch: true)), BattleManagerBase.GetIns().Battle3DContainer);
|
||||
GameMgr.GetIns().GetEffectMgr().SetUIParticleShader(gameObject6, null, isBattle: true, isField: true);
|
||||
gameObject6.transform.parent = gameObject3.transform;
|
||||
gameObject6.transform.localPosition = new Vector3(0f, 0.1f, 0.15f);
|
||||
gameObject6.transform.localRotation = GetMaskImageRotation();
|
||||
gameObject6.transform.localScale = new Vector3(6.4f, 6.4f, 20.48f);
|
||||
gameObject6.SetActive(value: false);
|
||||
cardTemplate.FrameEffectNormal = gameObject6;
|
||||
GameObject gameObject7 = GameMgr.GetIns().GetPrefabMgr().CloneObjectToParent(sBattleLoad.LifePoolIcon, BattleManagerBase.GetIns().Battle3DContainer);
|
||||
gameObject7.transform.localScale = new Vector3(0.5f, 0.5f, 0.5f);
|
||||
gameObject7.transform.parent = gameObject5.transform;
|
||||
gameObject7.transform.localPosition = GetLifeIconPosition();
|
||||
gameObject3.transform.localScale = new Vector3(80f, 80f, 25f);
|
||||
gameObject4.transform.localScale = new Vector3(80f, 80f, 25f);
|
||||
CardParameter cardParameterFromId = CardMaster.GetInstanceForBattle().GetCardParameterFromId(0);
|
||||
(cardTemplate.LifeLabelTemp = gameObject7.transform.Find("LifeLabel").GetComponent<UILabel>()).text = cardParameterFromId.Life.ToString();
|
||||
_spine = new SpineObject();
|
||||
_spine.LoadAndSet(GetSkinId().ToString(), this, gameObject3.transform);
|
||||
GameMgr.GetIns().GetPrefabMgr().Load("UI/Battle/EmotionMessage");
|
||||
_emotionLabel = NGUITools.AddChild(BattleManagerBase.GetIns().BtlUIContainer, GameMgr.GetIns().GetPrefabMgr().Get("UI/Battle/EmotionMessage"));
|
||||
_emotionLabel.transform.Find("Scale").GetComponent<UIPanel>().depth = GetEmoteLabelDepth();
|
||||
_emotionLabel.SetActive(value: false);
|
||||
GameMgr.GetIns().GetPrefabMgr().Load("UI/Battle/EnvironmentMessage");
|
||||
_enviromentLabel = NGUITools.AddChild(BattleManagerBase.GetIns().BtlUIContainer, GameMgr.GetIns().GetPrefabMgr().Get("UI/Battle/EnvironmentMessage"));
|
||||
_enviromentLabel.SetActive(value: false);
|
||||
base.GameObject.SetActive(value: false);
|
||||
});
|
||||
}
|
||||
|
||||
public override void ClearResourceObject()
|
||||
{
|
||||
if (_spine != null)
|
||||
{
|
||||
_spine.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
public override void PlayMotion(ClassCharaPrm.MotionType motionType)
|
||||
{
|
||||
if (!BattleManagerBase.GetIns().IsRecovery)
|
||||
{
|
||||
_currentMotion = motionType;
|
||||
if (_isAnimation && !(_spine._animator == null))
|
||||
{
|
||||
_spine._animator.SetTrigger(motionType.ToString());
|
||||
BattleCoroutine.GetInstance().StartCoroutine(WaitMotionEnd());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void ResetMotion()
|
||||
{
|
||||
_currentMotion = ClassCharaPrm.MotionType.idle;
|
||||
_spine._animator.Play(ClassCharaPrm.MotionType.idle.ToString(), 0, 0f);
|
||||
_spine.WaitChangeFace(ClassCharaPrm.FaceType.skin_01.ToString());
|
||||
}
|
||||
|
||||
public override void SetTrigger(string str)
|
||||
{
|
||||
_spine._animator.SetTrigger(str);
|
||||
}
|
||||
|
||||
public override ClassCharaPrm.MotionType GetMotion()
|
||||
{
|
||||
return _currentMotion;
|
||||
}
|
||||
|
||||
public override void OutFrame()
|
||||
{
|
||||
if (_isAnimation)
|
||||
{
|
||||
_spine.OutFrame(isHighRank: false);
|
||||
}
|
||||
}
|
||||
|
||||
public override void ChangeFace(ClassCharaPrm.FaceType faceType)
|
||||
{
|
||||
if (BattleManagerBase.GetIns() != null && !BattleManagerBase.GetIns().IsRecovery && _isAnimation && !(_spine._skeletonMecanim == null))
|
||||
{
|
||||
BattleCoroutine.GetInstance().StartCoroutine(WaitChangeFace(faceType));
|
||||
}
|
||||
}
|
||||
|
||||
public override IEnumerator WaitChangeFace(ClassCharaPrm.FaceType faceType)
|
||||
{
|
||||
yield return null;
|
||||
string faceStr = faceType.ToString();
|
||||
_spine.WaitChangeFace(faceStr);
|
||||
}
|
||||
|
||||
public override void SetAnimationEnable(bool enable)
|
||||
{
|
||||
bool isAnimation = _isAnimation;
|
||||
_isAnimation = enable;
|
||||
_spine.SetAnimationEnable(_isAnimation, isAnimation);
|
||||
}
|
||||
|
||||
public override bool IsAnimationEnable()
|
||||
{
|
||||
return _isAnimation;
|
||||
}
|
||||
|
||||
public override IEnumerator WaitMotionEnd()
|
||||
{
|
||||
yield return null;
|
||||
float num = ((!GetCurrentClipIsName(ClassCharaPrm.MotionType.idle)) ? _spine._animator.GetCurrentAnimatorStateInfo(0).length : (_spine._animator.GetCurrentAnimatorStateInfo(0).length * 0.5f));
|
||||
num -= Time.deltaTime * 2f;
|
||||
yield return new WaitForSeconds(num);
|
||||
ChangeFace(ClassCharaPrm.FaceType.skin_01);
|
||||
}
|
||||
|
||||
public IEnumerator WaitReturnOnAnimation()
|
||||
{
|
||||
float seconds = (float)((Toolbox.QualityManager.GetFrameRate() == 60) ? 85 : 86) / 30f;
|
||||
yield return new WaitForSeconds(seconds);
|
||||
_spine.SetDefaultLayer(isHighRank: false);
|
||||
}
|
||||
|
||||
protected override IEnumerator WaitReturnFrame()
|
||||
{
|
||||
yield return _spine.WaitReturnFrame(GetSpinePosition(), isHighRank: false);
|
||||
}
|
||||
|
||||
public override float GetCurrentClipTime()
|
||||
{
|
||||
if (_spine._animator == null)
|
||||
{
|
||||
return 0f;
|
||||
}
|
||||
return _spine._animator.GetCurrentAnimatorStateInfo(0).length;
|
||||
}
|
||||
|
||||
public override bool GetCurrentClipIsName(ClassCharaPrm.MotionType motionType)
|
||||
{
|
||||
if (_spine._animator == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return _spine._animator.GetCurrentAnimatorStateInfo(0).IsName(motionType.ToString());
|
||||
}
|
||||
|
||||
public override bool IsNoEvolveShift()
|
||||
{
|
||||
return _isNoEvolveShift;
|
||||
}
|
||||
|
||||
public override bool IsOpponentReverse()
|
||||
{
|
||||
return _isOpponentReverse;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user