Files
SVSimServer/SVSim.BattleEngine/Engine/Wizard/MyPageCustomBGControl.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

521 lines
16 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using Cute;
using UnityEngine;
namespace Wizard;
public class MyPageCustomBGControl : MonoBehaviour
{
private const string PARTICLE_SORT_LAYER = "Default";
private const int CHARACTER_BACK_EFFECT_SORT_ORDER = 15;
private const int RENDER_TEXTURE_DEPTH_BIT = 16;
private const float FADE_TIME = 0.3f;
private readonly Vector3 FADE_DESTROY_OFFSET = new Vector3(6000f, 0f, 0f);
private const float RENDER_TEXTURE_BASE_SIZE = 2048f;
private const float ASPECT_RATIO = 0.5625f;
private const float ASPECT_RATIO_2 = 0.46153846f;
private const float ASPECT_RATIO_REVERSE = 1.7777778f;
[SerializeField]
private UITexture _bg;
[SerializeField]
private UITexture _character;
[SerializeField]
private GameObject _effectRoot;
[SerializeField]
private GameObject _effectRootBG;
[SerializeField]
private GameObject _root;
[SerializeField]
private UITexture _customBGTexture;
[SerializeField]
private Camera _customBGCamera;
[SerializeField]
private GameObject _spineRoot;
[SerializeField]
private GameObject _spineCameraPrefab;
[SerializeField]
private GameObject _spineCameraParent;
[SerializeField]
private SpineDisplay _spineDiaplay;
[SerializeField]
private UITexture _spineTexture;
[SerializeField]
private Camera _myPageParticleCamera;
[SerializeField]
private GameObject _effectPositionDecideObject;
[SerializeField]
private UIPanel _panel;
private List<string> _loadFileList = new List<string>();
private GameObject _frontEffect;
private List<GameObject> _frontEffectChild = new List<GameObject>();
private List<Vector3> _frontEffectLocalPosition = new List<Vector3>();
private GameObject _backEffect;
private RenderTexture _renderTexture;
private Camera _spineCamera;
private float _characterAspectFixRate = 1f;
private Vector3 _characterAspectOffset = Vector3.zero;
private float _fadeOutTimer;
private bool _isFadeOut = true;
private bool _isFadeOutDestroy;
private int _saveScreenWidth;
private int _saveScreenHeight;
private bool _isFadeOutStandbyCalled;
private Shader _fadeoutShader;
private Shader _normalShader;
private Action _onFadeFinish;
private float _startShowTime;
public bool IsLoading { get; private set; }
public string Id { get; private set; } = string.Empty;
public bool IsLoadRequestEnd => Id != string.Empty;
private string GetBackGroundTexturePath(string id, bool isFetch)
{
return Toolbox.ResourcesManager.GetAssetTypePath(id, ResourcesManager.AssetLoadPathType.MyPageBackGround, isFetch);
}
private string GetBackGroundMaterialPath(string id, bool isFetch)
{
return Toolbox.ResourcesManager.GetAssetTypePath(id + "_M", ResourcesManager.AssetLoadPathType.MyPageBackGround, isFetch);
}
private string GetBackGroundMaskPath(string id, bool isFetch)
{
return Toolbox.ResourcesManager.GetAssetTypePath(id + "_mask", ResourcesManager.AssetLoadPathType.MyPageBackGround, isFetch);
}
private string GetCharacterPath(string id, bool isFetch)
{
return Toolbox.ResourcesManager.GetAssetTypePath(id, ResourcesManager.AssetLoadPathType.MyPageCharacter, isFetch);
}
private string GetCharacterMaskPath(string id, bool isFetch)
{
return Toolbox.ResourcesManager.GetAssetTypePath(id, ResourcesManager.AssetLoadPathType.MyPageCharacterMask, isFetch);
}
private string GetEffectPath(string id, string footer, bool isFetch)
{
return Toolbox.ResourcesManager.GetAssetTypePath("scn_bg_mypage_" + id + "_" + footer, ResourcesManager.AssetLoadPathType.Effect2D, isFetch);
}
private string GetSpineFileName(string id)
{
return "spine_mypage_" + id + "_body";
}
public void Load(string id, bool isDisplaySoon, Action onLoadFinish)
{
IsLoading = true;
Id = id;
_fadeoutShader = Shader.Find("Unlit/Transparent Colored MyPageFinal");
_normalShader = Shader.Find("Unlit/Texture");
_spineCamera = NGUITools.AddChild(_spineCameraParent, _spineCameraPrefab).GetComponent<Camera>();
_spineCamera.enabled = false;
_myPageParticleCamera.enabled = false;
_customBGTexture.alpha = 0f;
StartCoroutine(LoadResources(id, isDisplaySoon, onLoadFinish));
}
public void SetEnable(bool enable)
{
_root.SetActive(enable);
}
private IEnumerator LoadResources(string id, bool isDisplaySoon, Action onLoadFinish)
{
_loadFileList.Add(GetBackGroundTexturePath(id, isFetch: false));
_loadFileList.Add(GetCharacterPath(id, isFetch: false));
_loadFileList.Add(GetCharacterMaskPath(id, isFetch: false));
_loadFileList.Add(GetEffectPath(id, "1", isFetch: false));
_loadFileList.Add(GetEffectPath(id, "2", isFetch: false));
_loadFileList.AddRange(_spineDiaplay.GetLoadPath(GetSpineFileName(id), fetch: false));
if (Data.Master.MyPageCustomBGMaster[id].IsBGCardShader)
{
_loadFileList.Add(GetBackGroundMaterialPath(id, isFetch: false));
_loadFileList.Add(GetBackGroundMaskPath(id, isFetch: false));
}
yield return StartCoroutine(Toolbox.ResourcesManager.LoadAssetGroupAsync(_loadFileList, null));
InitializeBG(id);
_character.material = Toolbox.ResourcesManager.LoadObject(GetCharacterPath(id, isFetch: true)) as Material;
_character.onRender = SetCharacterMaterial;
_spineDiaplay.Initialize(GetSpineFileName(id), _spineTexture, _spineCamera);
_spineTexture.enabled = false;
_spineDiaplay.gameObject.SetActive(value: false);
_spineDiaplay.gameObject.SetActive(value: true);
_character.material.mainTexture = _spineTexture.mainTexture;
_character.material.SetTexture("_MaskTex", Toolbox.ResourcesManager.LoadObject(GetCharacterMaskPath(id, isFetch: true)) as Texture);
yield return InitializeEffect(id);
CreateRenderTexture();
SetMasterData(id);
if (isDisplaySoon)
{
Show();
}
else
{
SetEnable(enable: false);
}
_spineCamera.enabled = true;
_myPageParticleCamera.enabled = true;
_customBGTexture.onRender = SetRenderFinalTexture;
onLoadFinish.Call();
IsLoading = false;
}
private void InitializeBG(string id)
{
MyPageCustomBGMasterData myPageCustomBGMasterData = Data.Master.MyPageCustomBGMaster[id];
Texture mainTexture = Toolbox.ResourcesManager.LoadObject(GetBackGroundTexturePath(id, isFetch: true)) as Texture;
_bg.mainTexture = mainTexture;
if (myPageCustomBGMasterData.IsBGCardShader)
{
Material material = Toolbox.ResourcesManager.LoadObject(GetBackGroundMaterialPath(id, isFetch: true)) as Material;
Texture value = Toolbox.ResourcesManager.LoadObject(GetBackGroundMaskPath(id, isFetch: true)) as Texture;
material.SetTexture("_MainTex", _bg.mainTexture);
material.SetTexture("_MaskTex", value);
_bg.material = material;
}
}
private void CreateRenderTexture()
{
if (!(_renderTexture != null))
{
_renderTexture = new RenderTexture(2048, 1152, 16, RenderTextureFormat.ARGB32);
_renderTexture.name = "bgControl";
_customBGCamera.targetTexture = _renderTexture;
_customBGTexture.mainTexture = _renderTexture;
UpdateUITextureSize();
}
}
private void UpdateUITextureSize()
{
Camera frontCamera = UIManager.GetInstance().FrontCamera;
_saveScreenWidth = frontCamera.pixelWidth;
_saveScreenHeight = frontCamera.pixelHeight;
Vector3 position = new Vector3(0f, 1f, 0f);
Vector3 position2 = new Vector3(1f, 0f, 0f);
Vector3 position3 = frontCamera.ViewportToWorldPoint(position);
Vector3 position4 = frontCamera.ViewportToWorldPoint(position2);
Vector3 vector = _customBGTexture.transform.InverseTransformPoint(position3);
Vector3 vector2 = _customBGTexture.transform.InverseTransformPoint(position4);
float num = frontCamera.pixelHeight;
float num2 = frontCamera.pixelWidth;
float num3 = num / num2;
if (num3 < 0.5625f)
{
float num4 = vector2.x - vector.x;
float num5 = num4 * 0.5625f;
_customBGTexture.width = (int)Math.Ceiling(num4);
_customBGTexture.height = (int)Math.Ceiling(num5);
}
else
{
float num6 = vector.y - vector2.y;
float num7 = num6 * 1.7777778f;
_customBGTexture.width = (int)Math.Ceiling(num7);
_customBGTexture.height = (int)Math.Ceiling(num6);
}
if (!string.IsNullOrEmpty(Id))
{
MyPageCustomBGMasterData myPageCustomBGMasterData = Data.Master.MyPageCustomBGMaster[Id];
_characterAspectFixRate = myPageCustomBGMasterData.Scale;
_characterAspectOffset = myPageCustomBGMasterData.Position;
if (num3 < 0.5625f)
{
float num8 = (0.5625f - num3) / 0.100961536f;
float num9 = myPageCustomBGMasterData.Scale2 - myPageCustomBGMasterData.Scale;
_characterAspectFixRate = num9 * num8 + myPageCustomBGMasterData.Scale;
_characterAspectOffset = (myPageCustomBGMasterData.Position2 - myPageCustomBGMasterData.Position) * num8 + myPageCustomBGMasterData.Position;
}
if (myPageCustomBGMasterData.IsFrontEffectAttachCharacter)
{
FixEffectPosition();
}
}
if (!string.IsNullOrEmpty(Id))
{
SetMasterData(Id);
}
}
private void FixEffectPosition()
{
if (string.IsNullOrEmpty(Id))
{
return;
}
MyPageCustomBGMasterData myPageCustomBGMasterData = Data.Master.MyPageCustomBGMaster[Id];
float num = 1f + (_characterAspectFixRate - myPageCustomBGMasterData.Scale);
_effectRoot.transform.localScale = new Vector3(num, num, 1f);
if (myPageCustomBGMasterData.IsFrontEffectAttachCharacter)
{
for (int i = 0; i < _frontEffectChild.Count; i++)
{
_effectPositionDecideObject.transform.localPosition = _frontEffectLocalPosition[i];
_frontEffectChild[i].transform.localPosition = _frontEffect.transform.InverseTransformPoint(_effectPositionDecideObject.transform.position);
}
}
}
private IEnumerator InitializeEffect(string id)
{
MyPageCustomBGMasterData myPageCustomBGMasterData = Data.Master.MyPageCustomBGMaster[id];
GameObject effectCharacterFront = (_frontEffect = UnityEngine.Object.Instantiate(Toolbox.ResourcesManager.LoadObject(GetEffectPath(id, "1", isFetch: true))) as GameObject);
effectCharacterFront.transform.parent = (myPageCustomBGMasterData.IsFrontEffectAttachCharacter ? _effectRoot.transform : _effectRootBG.transform);
effectCharacterFront.SetLayer(28, isSetChildren: true);
effectCharacterFront.transform.localPosition = new Vector3(0f, 0f, -6f);
effectCharacterFront.transform.localScale = Vector3.one * 320f;
if (myPageCustomBGMasterData.IsFrontEffectAttachCharacter)
{
Vector3 localPosition = _character.transform.localPosition;
Vector3 localScale = _character.transform.localScale;
_character.transform.localPosition = myPageCustomBGMasterData.Position;
_character.transform.localScale = new Vector3(myPageCustomBGMasterData.Scale, myPageCustomBGMasterData.Scale, 1f);
for (int i = 0; i < effectCharacterFront.transform.childCount; i++)
{
Transform child = effectCharacterFront.transform.GetChild(i);
_effectPositionDecideObject.transform.position = child.position;
_frontEffectChild.Add(child.gameObject);
_frontEffectLocalPosition.Add(_effectPositionDecideObject.transform.localPosition);
}
_character.transform.localPosition = localPosition;
_character.transform.localScale = localScale;
}
GameObject effectCharacterBack = (_backEffect = UnityEngine.Object.Instantiate(Toolbox.ResourcesManager.LoadObject(GetEffectPath(id, "2", isFetch: true))) as GameObject);
effectCharacterBack.transform.parent = (myPageCustomBGMasterData.IsBackEffectAttachCharacter ? _effectRoot.transform : _effectRootBG.transform);
effectCharacterBack.SetLayer(28, isSetChildren: true);
effectCharacterBack.transform.localPosition = new Vector3(0f, 0f, 7f);
effectCharacterBack.transform.localScale = Vector3.one * 320f;
Renderer[] componentsInChildren = effectCharacterBack.GetComponentsInChildren<Renderer>();
foreach (Renderer obj in componentsInChildren)
{
obj.sortingLayerName = "Default";
obj.sortingOrder = 15;
}
bool isLoading = true;
bool isLoading2 = true;
_loadFileList.AddRange(GameMgr.GetIns().GetEffectMgr().SetUIParticleShader(effectCharacterBack, delegate
{
isLoading = false;
}));
_loadFileList.AddRange(GameMgr.GetIns().GetEffectMgr().SetUIParticleShader(effectCharacterFront, delegate
{
isLoading2 = false;
}));
while (isLoading || isLoading2)
{
yield return null;
}
effectCharacterFront.SetActive(value: true);
effectCharacterBack.SetActive(value: true);
}
private void OnDestroy()
{
Toolbox.ResourcesManager.RemoveAssetGroup(_loadFileList);
_loadFileList.Clear();
if (_renderTexture != null)
{
_renderTexture.Release();
UnityEngine.Object.Destroy(_renderTexture);
_renderTexture = null;
}
}
public void FadeOut()
{
_fadeOutTimer = 0.3f;
_isFadeOut = true;
}
public void FadeoutStandby()
{
_spineRoot.transform.localPosition += FADE_DESTROY_OFFSET;
_root.transform.localPosition += FADE_DESTROY_OFFSET;
_isFadeOutStandbyCalled = true;
_panel.Refresh();
}
public void FadeOutDestroy()
{
if (!_isFadeOutStandbyCalled)
{
FadeoutStandby();
}
_fadeOutTimer = 0.3f;
_isFadeOut = true;
_isFadeOutDestroy = true;
}
public void Show(Action onFadeFinish = null)
{
SetEnable(enable: true);
_fadeOutTimer = 0.3f;
_customBGTexture.alpha = 0f;
_isFadeOut = false;
_character.gameObject.SetActive(value: true);
_onFadeFinish = onFadeFinish;
ShowSpecialResetShader();
}
public void ShowSpecialResetShader()
{
if (IsSpecialMypageShader(_character.material))
{
_startShowTime = Time.time;
SetSpecialResetShaderParameter();
ResetEffect(_frontEffect);
ResetEffect(_backEffect);
}
}
public void SetSpecialResetShaderParameter()
{
if (IsSpecialMypageShader(_character.material))
{
_character.material.SetFloat("_SceneTime", Time.time - _startShowTime);
_character.gameObject.SetActive(value: false);
_character.gameObject.SetActive(value: true);
}
}
private void ResetEffect(GameObject effect)
{
if (!(effect == null))
{
effect.SetActive(value: false);
ParticleSystem component = effect.GetComponent<ParticleSystem>();
component.Stop(withChildren: true);
component.Play(withChildren: true);
effect.SetActive(value: true);
}
}
private bool IsSpecialMypageShader(Material material)
{
return material.shader.name.Contains("VariantMypage");
}
private void SetMasterData(string id)
{
MyPageCustomBGMasterData myPageCustomBGMasterData = Data.Master.MyPageCustomBGMaster[id];
_character.transform.localPosition = _characterAspectOffset;
Vector3 localScale = new Vector3(_characterAspectFixRate, _characterAspectFixRate, 1f);
_character.transform.localScale = localScale;
_spineTexture.transform.localPosition = myPageCustomBGMasterData.Position;
_spineTexture.transform.localScale = new Vector3(myPageCustomBGMasterData.Scale, myPageCustomBGMasterData.Scale, 1f);
_spineCamera.orthographicSize = myPageCustomBGMasterData.SpineCameraSize;
FixEffectPosition();
}
private void SetCharacterMaterial(Material material)
{
material.SetFloat("_SleeveSrcFactor", 5f);
material.SetFloat("_SleeveDstFactor", 10f);
if (!string.IsNullOrEmpty(Id))
{
MyPageCustomBGMasterData myPageCustomBGMasterData = Data.Master.MyPageCustomBGMaster[Id];
material.SetFloat("_MypageBoundaryAlpha", myPageCustomBGMasterData.ShaderAlphaBorder);
material.SetFloat("_MypageDivisionValue", myPageCustomBGMasterData.ShaderAlphaDevide);
}
}
private void SetRenderFinalTexture(Material material)
{
material.shader = ((_fadeOutTimer > 0f) ? _fadeoutShader : _normalShader);
}
private void CheckScreenSizeChange()
{
if (UIManager.GetInstance().FrontCameraPixelWidth != _saveScreenWidth || UIManager.GetInstance().FrontCameraPixelHeight != _saveScreenHeight)
{
UpdateUITextureSize();
}
}
private void Update()
{
CheckScreenSizeChange();
if (_customBGTexture.alpha > 0.01f)
{
SetSpecialResetShaderParameter();
}
if (_fadeOutTimer <= 0f || IsLoading)
{
return;
}
_fadeOutTimer -= Time.deltaTime;
if (_fadeOutTimer <= 0f)
{
_fadeOutTimer = 0f;
_onFadeFinish.Call();
_onFadeFinish = null;
if (_isFadeOutDestroy)
{
UnityEngine.Object.Destroy(base.gameObject);
return;
}
}
float num = _fadeOutTimer / 0.3f;
float num2 = num;
if (!_isFadeOut)
{
num2 = 1f - num;
}
_customBGTexture.alpha = num2;
if ((num2 < 0.01f) & _isFadeOut)
{
_character.gameObject.SetActive(value: false);
}
}
}