feat(battle-engine): full-surface app-type god-object/manager stubs (1692->1586 true)
Make the minimal hand shims partial + generate full member surface for the manager/ task/controller god-objects (LoadingViewManager/DeckUpdateTask/MyPageTask/ReplayController/ PlayerControllerForWatching/WatchDataHandler/EvolutionTouchProcessor/StoryChapterSelection Utility/NonDialogPopup). NonDialogPopup given MonoBehaviour base + hand Close() removed (superseded by full surface). LoadTask dup deleted (already copied verbatim). RoomMatch watch/replay closure types stubbed. Copied 8 more closure files. CS0246-in-generated-signature masking note: 4 such errors were hiding ~1582 — generated CS0246 masks as hard as header CS0246; the real frontier is 1586 (CS7036 base-ctor + member-level), 0 structural. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
447
SVSim.BattleEngine/Engine/LoadingDownLoadCardView.cs
Normal file
447
SVSim.BattleEngine/Engine/LoadingDownLoadCardView.cs
Normal file
@@ -0,0 +1,447 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Cute;
|
||||
using UnityEngine;
|
||||
using Wizard;
|
||||
|
||||
public class LoadingDownLoadCardView : MonoBehaviour
|
||||
{
|
||||
private class LoadSceneCardDataAccessor
|
||||
{
|
||||
public readonly int CardNum;
|
||||
|
||||
private List<LoadSceneCardData> _loadSceneCardDataList;
|
||||
|
||||
public int CurrentIndex { get; private set; }
|
||||
|
||||
public LoadSceneCardData CurrentCardData => _loadSceneCardDataList[CurrentIndex];
|
||||
|
||||
public LoadSceneCardDataAccessor(List<int> cardIdList)
|
||||
{
|
||||
CardNum = cardIdList.Count;
|
||||
_loadSceneCardDataList = new List<LoadSceneCardData>();
|
||||
for (int i = 0; i < CardNum; i++)
|
||||
{
|
||||
_loadSceneCardDataList.Add(new LoadSceneCardData(i, cardIdList[i]));
|
||||
}
|
||||
}
|
||||
|
||||
public void UpdateIndexToNext()
|
||||
{
|
||||
if (CurrentIndex < CardNum - 1)
|
||||
{
|
||||
CurrentIndex++;
|
||||
}
|
||||
else
|
||||
{
|
||||
CurrentIndex = 0;
|
||||
}
|
||||
}
|
||||
|
||||
public void UpdateIndexToPrev()
|
||||
{
|
||||
if (CurrentIndex > 0)
|
||||
{
|
||||
CurrentIndex--;
|
||||
}
|
||||
else
|
||||
{
|
||||
CurrentIndex = CardNum - 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class LoadSceneCardData
|
||||
{
|
||||
private static readonly Color DEFAULT_EFFECT_COLOR = Color.white;
|
||||
|
||||
public const string FORMAT_DESC_NORMAL = "CardDescN_{0}";
|
||||
|
||||
public const string FORMAT_DESC_EVO = "CardDescE_{0}";
|
||||
|
||||
private const string FORMAT_EFFECT_COLOR = "CardColor_{0}";
|
||||
|
||||
private Color _cardEffectColor;
|
||||
|
||||
public CardParameter CardParam { get; private set; }
|
||||
|
||||
public string CardName { get; private set; }
|
||||
|
||||
public string CardNormalDesc { get; private set; }
|
||||
|
||||
public string CardEvolDesc { get; private set; }
|
||||
|
||||
public Color CardEffectColor => _cardEffectColor;
|
||||
|
||||
public LoadSceneCardData(int index, int cardId)
|
||||
{
|
||||
SystemText systemText = Data.SystemText;
|
||||
_ = Data.Load.data.ResourceDlViewID;
|
||||
CardParam = CardMaster.GetInstance(CardMaster.CardMasterId.Default).GetCardParameterFromId(cardId);
|
||||
bool num = CardParam.CharType == CardBasePrm.CharaType.NORMAL;
|
||||
CardName = systemText.Get($"LoadCard_{cardId}");
|
||||
CardNormalDesc = systemText.Get($"CardDescN_{cardId}");
|
||||
if (num)
|
||||
{
|
||||
CardEvolDesc = systemText.Get($"CardDescE_{cardId}");
|
||||
}
|
||||
else
|
||||
{
|
||||
CardEvolDesc = "";
|
||||
}
|
||||
if (!ColorUtility.TryParseHtmlString(systemText.Get($"CardColor_{(int)CardParam.Clan}"), out _cardEffectColor))
|
||||
{
|
||||
_cardEffectColor = DEFAULT_EFFECT_COLOR;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static readonly Vector3 CARD_SCALE = new Vector3(0.022f, 0.017f, 1f);
|
||||
|
||||
[SerializeField]
|
||||
private Transform CardObjectTransform;
|
||||
|
||||
[SerializeField]
|
||||
private ParticleSystem[] LoadingEffects;
|
||||
|
||||
[SerializeField]
|
||||
private UIScrollView _cardDetailScrollView;
|
||||
|
||||
[SerializeField]
|
||||
private UILabel _cardNameLabel;
|
||||
|
||||
[SerializeField]
|
||||
private GameObject _followerDetailObjctRoot;
|
||||
|
||||
[SerializeField]
|
||||
private GameObject _spellOrAmuletDetailObjctRoot;
|
||||
|
||||
[SerializeField]
|
||||
private UILabel _followerNormalSkillLabel;
|
||||
|
||||
[SerializeField]
|
||||
private UILabel _followerNormalAtkLabel;
|
||||
|
||||
[SerializeField]
|
||||
private UILabel _followerNormalLifeLabel;
|
||||
|
||||
[SerializeField]
|
||||
private UILabel _followerEvoSkillLabel;
|
||||
|
||||
[SerializeField]
|
||||
private UILabel _followerEvoAtkLabel;
|
||||
|
||||
[SerializeField]
|
||||
private UILabel _followerEvoLifeLabel;
|
||||
|
||||
[SerializeField]
|
||||
private GameObject _followerEvoTopRootObj;
|
||||
|
||||
[SerializeField]
|
||||
private UILabel _spellOrAmuletSkillLabel;
|
||||
|
||||
[SerializeField]
|
||||
private UILabel _cardTypeLabel;
|
||||
|
||||
[SerializeField]
|
||||
private ResourceDownloadCardFactory _cardFactory;
|
||||
|
||||
[SerializeField]
|
||||
private UIPanel _cardPanel;
|
||||
|
||||
[SerializeField]
|
||||
private TextLineCreater _normalTextLineCreater;
|
||||
|
||||
[SerializeField]
|
||||
private TextLineCreater _evoTextLineCreater;
|
||||
|
||||
[SerializeField]
|
||||
private TextLineCreater _spellOrAmuletSkillTextLineCreater;
|
||||
|
||||
[SerializeField]
|
||||
private UIToggle indicatorBase;
|
||||
|
||||
[SerializeField]
|
||||
private GameObject _blackPanel;
|
||||
|
||||
private Vector3 _defaultPosCardSprite = Vector3.zero;
|
||||
|
||||
private Quaternion _defaultRotCardSprite = Quaternion.identity;
|
||||
|
||||
private List<UIToggle> _indicatorList = new List<UIToggle>();
|
||||
|
||||
private LoadSceneCardDataAccessor _cardDataAccessor;
|
||||
|
||||
private List<int> _cardIdList;
|
||||
|
||||
private List<CardListTemplate> _cardList;
|
||||
|
||||
public const string FORMAT_CARD_NAME = "LoadCard_{0}";
|
||||
|
||||
public bool IsAnimatingNow { get; private set; }
|
||||
|
||||
public void Initialize(Action onReady)
|
||||
{
|
||||
LoadingEffects[2].gameObject.SetActive(value: false);
|
||||
LoadingEffects[3].gameObject.SetActive(value: false);
|
||||
LoadingEffects[4].gameObject.SetActive(value: false);
|
||||
LoadingEffects[0].gameObject.SetActive(value: false);
|
||||
LoadCardResource(delegate
|
||||
{
|
||||
_blackPanel.SetActive(value: false);
|
||||
LoadingEffects[0].gameObject.SetActive(value: true);
|
||||
TweenAlpha.Begin(CardObjectTransform.gameObject, 0f, 1f);
|
||||
_cardDataAccessor = new LoadSceneCardDataAccessor(GetCardIdList());
|
||||
ChangeLoadCardInfo(_cardDataAccessor.CurrentCardData, _cardDataAccessor.CurrentIndex);
|
||||
GameObject gameObject = indicatorBase.transform.parent.gameObject;
|
||||
_indicatorList.Add(indicatorBase);
|
||||
for (int i = 1; i < _cardDataAccessor.CardNum; i++)
|
||||
{
|
||||
_indicatorList.Add(NGUITools.AddChild(gameObject, indicatorBase.gameObject).GetComponent<UIToggle>());
|
||||
}
|
||||
gameObject.GetComponent<UIGrid>().Reposition();
|
||||
UpdateIndicator(_cardDataAccessor.CurrentIndex);
|
||||
onReady.Call();
|
||||
});
|
||||
}
|
||||
|
||||
private List<int> CreateCardIdList()
|
||||
{
|
||||
Dictionary<int, List<int>> dictionary = LoadCardIdList();
|
||||
if (dictionary.TryGetValue(Data.Load.data.RotationLatestCardPackId, out var value))
|
||||
{
|
||||
return value;
|
||||
}
|
||||
Debug.LogError($"カードパックID[{Data.Load.data.RotationLatestCardPackId}]が見つかりません");
|
||||
return dictionary.FirstOrDefault().Value;
|
||||
}
|
||||
|
||||
private Dictionary<int, List<int>> LoadCardIdList()
|
||||
{
|
||||
List<string[]> list = Utility.ConvertCSV_Array((Resources.Load("CSV/load_card") as TextAsset).ToString());
|
||||
Dictionary<int, List<int>> dictionary = new Dictionary<int, List<int>>();
|
||||
foreach (string[] item in list)
|
||||
{
|
||||
if (!int.TryParse(item[0], out var result))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
List<int> list2 = new List<int>(list.Count);
|
||||
for (int i = 1; i < item.Length; i++)
|
||||
{
|
||||
if (int.TryParse(item[i], out var result2))
|
||||
{
|
||||
list2.Add(result2);
|
||||
}
|
||||
}
|
||||
dictionary[result] = list2;
|
||||
}
|
||||
return dictionary;
|
||||
}
|
||||
|
||||
private List<int> GetCardIdList()
|
||||
{
|
||||
if (_cardIdList == null)
|
||||
{
|
||||
_cardIdList = CreateCardIdList();
|
||||
}
|
||||
return _cardIdList;
|
||||
}
|
||||
|
||||
public bool CanView()
|
||||
{
|
||||
return _cardFactory.CanView(GetCardIdList());
|
||||
}
|
||||
|
||||
private void LoadCardResource(Action onFinish)
|
||||
{
|
||||
_cardFactory.Load(GetCardIdList(), _cardPanel.gameObject, delegate(List<CardListTemplate> cardList)
|
||||
{
|
||||
OnFinishCardLoad(cardList);
|
||||
onFinish();
|
||||
});
|
||||
}
|
||||
|
||||
private void OnFinishCardLoad(List<CardListTemplate> cardList)
|
||||
{
|
||||
for (int i = 0; i < cardList.Count; i++)
|
||||
{
|
||||
CardListTemplate cardListTemplate = cardList[i];
|
||||
cardListTemplate.gameObject.SetActive(i == 0);
|
||||
cardListTemplate.HideNum();
|
||||
cardListTemplate.transform.localScale = CARD_SCALE;
|
||||
}
|
||||
_cardList = cardList;
|
||||
}
|
||||
|
||||
public void FadeOutLoading()
|
||||
{
|
||||
TweenAlpha.Begin(CardObjectTransform.gameObject, 1f, 0f);
|
||||
for (int i = 0; i < LoadingEffects.Length; i++)
|
||||
{
|
||||
LoadingEffects[i].Stop();
|
||||
LoadingEffects[i].Clear();
|
||||
}
|
||||
}
|
||||
|
||||
public void Next()
|
||||
{
|
||||
StartCoroutine(ChangeCardAnm(isRight: true));
|
||||
}
|
||||
|
||||
public void Prev()
|
||||
{
|
||||
StartCoroutine(ChangeCardAnm(isRight: false));
|
||||
}
|
||||
|
||||
private void ChangeLoadCardInfo(LoadSceneCardData cardData, int index)
|
||||
{
|
||||
foreach (CardListTemplate card in _cardList)
|
||||
{
|
||||
card.gameObject.SetActive(value: false);
|
||||
}
|
||||
_cardList[index].gameObject.SetActive(value: true);
|
||||
SetCardDetailLabels(cardData, index);
|
||||
ParticleSystem[] componentsInChildren = LoadingEffects[0].gameObject.GetComponentsInChildren<ParticleSystem>();
|
||||
foreach (ParticleSystem obj in componentsInChildren)
|
||||
{
|
||||
ParticleSystem.MainModule main = obj.main;
|
||||
main.startColor = cardData.CardEffectColor;
|
||||
obj.Stop();
|
||||
obj.Play();
|
||||
}
|
||||
componentsInChildren = LoadingEffects[1].gameObject.GetComponentsInChildren<ParticleSystem>();
|
||||
foreach (ParticleSystem obj2 in componentsInChildren)
|
||||
{
|
||||
ParticleSystem.MainModule main2 = obj2.main;
|
||||
main2.startColor = cardData.CardEffectColor;
|
||||
obj2.Stop();
|
||||
obj2.Play();
|
||||
}
|
||||
UpdateIndicator(_cardDataAccessor.CurrentIndex);
|
||||
}
|
||||
|
||||
private void SetCardDetailLabels(LoadSceneCardData cardData, int index)
|
||||
{
|
||||
_cardNameLabel.text = cardData.CardName;
|
||||
_cardTypeLabel.text = GetCardTypeText(cardData);
|
||||
SetCardSkillText(cardData, index);
|
||||
_cardDetailScrollView.ResetPosition();
|
||||
_cardDetailScrollView.UpdateScrollbars(recalculateBounds: true);
|
||||
}
|
||||
|
||||
private string GetCardTypeText(LoadSceneCardData cardData)
|
||||
{
|
||||
return cardData.CardParam.CharType switch
|
||||
{
|
||||
CardBasePrm.CharaType.FIELD => Data.SystemText.Get("Card_0046"),
|
||||
CardBasePrm.CharaType.SPELL => Data.SystemText.Get("Card_0045"),
|
||||
_ => string.Empty,
|
||||
};
|
||||
}
|
||||
|
||||
private void SetCardSkillText(LoadSceneCardData cardData, int index)
|
||||
{
|
||||
int cardId = GetCardIdList()[index];
|
||||
CardParameter cardParameterFromId = CardMaster.GetInstance(CardMaster.CardMasterId.Default).GetCardParameterFromId(cardId);
|
||||
if (cardParameterFromId.CharType == CardBasePrm.CharaType.NORMAL)
|
||||
{
|
||||
_followerDetailObjctRoot.SetActive(value: true);
|
||||
_spellOrAmuletDetailObjctRoot.SetActive(value: false);
|
||||
_followerNormalAtkLabel.text = cardParameterFromId.Atk.ToString();
|
||||
_followerNormalLifeLabel.text = cardParameterFromId.Life.ToString();
|
||||
_followerEvoAtkLabel.text = cardParameterFromId.EvoAtk.ToString();
|
||||
_followerEvoLifeLabel.text = cardParameterFromId.EvoLife.ToString();
|
||||
SetFollowerText(_cardDataAccessor.CurrentCardData, index);
|
||||
}
|
||||
else
|
||||
{
|
||||
_followerDetailObjctRoot.SetActive(value: false);
|
||||
_spellOrAmuletDetailObjctRoot.SetActive(value: true);
|
||||
SetViewCardText(cardData.CardNormalDesc, _spellOrAmuletSkillLabel, _spellOrAmuletSkillTextLineCreater);
|
||||
}
|
||||
}
|
||||
|
||||
private void SetFollowerText(LoadSceneCardData cardData, int index)
|
||||
{
|
||||
if (_cardList != null)
|
||||
{
|
||||
SetViewCardText(cardData.CardNormalDesc, _followerNormalSkillLabel, _normalTextLineCreater);
|
||||
SetViewCardText(cardData.CardEvolDesc, _followerEvoSkillLabel, _evoTextLineCreater);
|
||||
float y = _followerNormalSkillLabel.transform.localPosition.y - (float)_followerNormalSkillLabel.height - 44f;
|
||||
_followerEvoTopRootObj.transform.localPosition = new Vector3(_followerEvoTopRootObj.transform.localPosition.x, y);
|
||||
}
|
||||
}
|
||||
|
||||
private void SetViewCardText(string cardText, UILabel textLabel, TextLineCreater lineCreater)
|
||||
{
|
||||
textLabel.overflowMethod = UILabel.Overflow.ResizeHeight;
|
||||
textLabel.ProcessText();
|
||||
int textLineCount = Global.GetTextLineCount(Global.GetConvertWrapText(textLabel, cardText));
|
||||
lineCreater.ShowLines(textLineCount);
|
||||
textLabel.SetWrapText(cardText);
|
||||
}
|
||||
|
||||
private IEnumerator ChangeCardAnm(bool isRight)
|
||||
{
|
||||
IsAnimatingNow = true;
|
||||
CardListTemplate currentCard = _cardList[_cardDataAccessor.CurrentIndex];
|
||||
if (!isRight)
|
||||
{
|
||||
_cardDataAccessor.UpdateIndexToPrev();
|
||||
}
|
||||
else
|
||||
{
|
||||
_cardDataAccessor.UpdateIndexToNext();
|
||||
}
|
||||
GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SYS_SLIDE_BTN);
|
||||
TweenPosition tp = CardObjectTransform.GetComponent<TweenPosition>();
|
||||
TweenRotation tr = CardObjectTransform.GetComponent<TweenRotation>();
|
||||
_defaultPosCardSprite = CardObjectTransform.transform.localPosition;
|
||||
_defaultRotCardSprite = CardObjectTransform.transform.localRotation;
|
||||
tp.enabled = false;
|
||||
tr.enabled = false;
|
||||
LoadingEffects[1].gameObject.SetActive(value: false);
|
||||
LoadingEffects[2].gameObject.SetActive(value: false);
|
||||
LoadingEffects[2].gameObject.SetActive(value: true);
|
||||
TweenAlpha.Begin(CardObjectTransform.gameObject, 0.2f, 0f);
|
||||
TweenAlpha.Begin(currentCard._nameLabel.gameObject, 0.2f, 0f);
|
||||
if (isRight)
|
||||
{
|
||||
iTween.MoveTo(CardObjectTransform.gameObject, iTween.Hash("position", _defaultPosCardSprite + Vector3.left * 50f, "time", 0.2f, "islocal", true, "easetype", iTween.EaseType.easeOutQuad));
|
||||
}
|
||||
else
|
||||
{
|
||||
iTween.MoveTo(CardObjectTransform.gameObject, iTween.Hash("position", _defaultPosCardSprite + Vector3.right * 50f, "time", 0.2f, "islocal", true, "easetype", iTween.EaseType.easeOutQuad));
|
||||
}
|
||||
yield return new WaitForSeconds(0.2f);
|
||||
GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SYS_DL_CARD_APPEAR);
|
||||
LoadingEffects[1].gameObject.SetActive(value: true);
|
||||
ChangeLoadCardInfo(_cardDataAccessor.CurrentCardData, _cardDataAccessor.CurrentIndex);
|
||||
LoadingEffects[3].gameObject.SetActive(value: false);
|
||||
LoadingEffects[3].gameObject.SetActive(value: true);
|
||||
LoadingEffects[4].gameObject.SetActive(value: false);
|
||||
LoadingEffects[4].gameObject.SetActive(value: true);
|
||||
TweenAlpha.Begin(CardObjectTransform.gameObject, 0.2f, 1f);
|
||||
TweenAlpha.Begin(currentCard._nameLabel.gameObject, 0.2f, 1f);
|
||||
CardObjectTransform.transform.localPosition = _defaultPosCardSprite + Vector3.down * 20f;
|
||||
CardObjectTransform.transform.localRotation = Quaternion.Euler(new Vector3(0f, 90f, 10f));
|
||||
iTween.MoveTo(CardObjectTransform.gameObject, iTween.Hash("position", _defaultPosCardSprite, "time", 0.2f, "islocal", true, "easetype", iTween.EaseType.easeOutQuad));
|
||||
iTween.RotateTo(CardObjectTransform.gameObject, iTween.Hash("rotation", _defaultRotCardSprite.eulerAngles, "time", 0.2f, "easetype", iTween.EaseType.easeOutQuad));
|
||||
yield return new WaitForSeconds(0.2f);
|
||||
CardObjectTransform.transform.localPosition = _defaultPosCardSprite;
|
||||
tp.enabled = true;
|
||||
tr.enabled = true;
|
||||
IsAnimatingNow = false;
|
||||
}
|
||||
|
||||
private void UpdateIndicator(int index)
|
||||
{
|
||||
if (_indicatorList.Count > 1)
|
||||
{
|
||||
_indicatorList[index].value = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user