Commit f71e0957 authored by SherryChaos's avatar SherryChaos

update SpriteScaler.cs

parent e6fe0e0d
...@@ -4,6 +4,7 @@ using MDPro3.UI; ...@@ -4,6 +4,7 @@ using MDPro3.UI;
using System.Collections; using System.Collections;
using System.IO; using System.IO;
using static UnityEngine.UI.Image; using static UnityEngine.UI.Image;
using YgomSystem.Effect;
namespace MDPro3 namespace MDPro3
{ {
...@@ -79,7 +80,11 @@ namespace MDPro3 ...@@ -79,7 +80,11 @@ namespace MDPro3
var endString = id.ToString("D4"); var endString = id.ToString("D4");
back = ABLoader.LoadFromFolder("MasterDuel/Background/Back" + endString, "Background" + endString, true); back = ABLoader.LoadFromFolder("MasterDuel/Background/Back" + endString, "Background" + endString, true);
back.transform.GetChild(0).gameObject.AddComponent<AutoScale>(); if (back.transform.GetChild(0).gameObject.TryGetComponent<SpriteScaler>(out var spriteScaler))
{
spriteScaler.isApplyOnUpdate = true;
spriteScaler.SetFitMode(SpriteScaler.FitMode.FitHighestResolutionMaintainAspectRatio);
}
Tools.ChangeLayer(back, "2D"); Tools.ChangeLayer(back, "2D");
back.transform.SetParent(transform, false); back.transform.SetParent(transform, false);
......
...@@ -433,7 +433,6 @@ namespace MDPro3 ...@@ -433,7 +433,6 @@ namespace MDPro3
DoWhenStop(summon); DoWhenStop(summon);
var manager = summon.GetComponent<ElementObjectManager>(); var manager = summon.GetComponent<ElementObjectManager>();
currentSyncManager = manager; currentSyncManager = manager;
manager.GetElement("BlackNormal").AddComponent<AutoScaleOnce>();
var subManager = manager.GetElement<ElementObjectManager>("SummonLinkpostLink"); var subManager = manager.GetElement<ElementObjectManager>("SummonLinkpostLink");
dummyCard = subManager.GetElement("DummyCardLink"); dummyCard = subManager.GetElement("DummyCardLink");
......
...@@ -270,17 +270,6 @@ namespace MDPro3.Servant ...@@ -270,17 +270,6 @@ namespace MDPro3.Servant
else//4 else//4
back = ABLoader.LoadFromFile("MasterDuel/Timeline/Summon/SummonMonster/04BackEff/SummonMonster_Bgdve_S2", true); back = ABLoader.LoadFromFile("MasterDuel/Timeline/Summon/SummonMonster/04BackEff/SummonMonster_Bgdve_S2", true);
back.transform.SetParent(Program.instance.container_2D, false); back.transform.SetParent(Program.instance.container_2D, false);
Transform eff_flame = back.transform.Find("Eff_Flame");
eff_flame.localScale = new Vector3(2.76f, 1.55f, 1f);
eff_flame.gameObject.AddComponent<AutoScaleOnce>();
Transform eff_bg00 = back.transform.Find("Eff_Bg00");
eff_bg00.localScale = new Vector3(250f, 25f, 1f);
Transform flame_re = back.transform.Find("flame_re");
if (flame_re == null)
flame_re = back.transform.Find("Eff_group/flame_re");
if (flame_re == null)
flame_re = back.transform.Find("Eff_Flame01_re");
flame_re.gameObject.AddComponent<AutoScaleOnce>();
Destroy(back, CUTIN_PLAY_TIME); Destroy(back, CUTIN_PLAY_TIME);
//Name Bar //Name Bar
......
...@@ -2643,7 +2643,8 @@ namespace MDPro3.Servant ...@@ -2643,7 +2643,8 @@ namespace MDPro3.Servant
var mono = myDeck.gameObject.AddComponent<DoWhenPlayableDirectorStop>(); var mono = myDeck.gameObject.AddComponent<DoWhenPlayableDirectorStop>();
mono.action = () => mono.action = () =>
{ {
var effect = ABLoader.LoadFromFile("MasterDuel/Timeline/DuelText/DuelTextStart", true); //var effect = ABLoader.LoadFromFile("MasterDuel/Timeline/DuelText/DuelTextStart", true);
var effect = Instantiate(container.duelTextStart);
var mono = effect.AddComponent<DoWhenPlayableDirectorStop>(); var mono = effect.AddComponent<DoWhenPlayableDirectorStop>();
mono.action = () => mono.action = () =>
{ {
......
using MDPro3;
using System.Collections;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using UnityEngine; using UnityEngine;
...@@ -49,16 +51,19 @@ namespace YgomSystem.Effect ...@@ -49,16 +51,19 @@ namespace YgomSystem.Effect
private bool applyOnCustomSize; private bool applyOnCustomSize;
private Vector2 appliedScreenSize; private bool m_ScaleYtoZ;
private Vector2 appliedScreenSize;
public bool isApplyOnUpdate public bool isApplyOnUpdate
{ {
get get
{ {
return false; return applyOnUpdate;
} }
set set
{ {
applyOnUpdate = value;
} }
} }
...@@ -66,7 +71,7 @@ namespace YgomSystem.Effect ...@@ -66,7 +71,7 @@ namespace YgomSystem.Effect
{ {
get get
{ {
return false; return _useDirectSizeSetting;
} }
set set
{ {
...@@ -77,7 +82,7 @@ namespace YgomSystem.Effect ...@@ -77,7 +82,7 @@ namespace YgomSystem.Effect
{ {
get get
{ {
return default(Vector2); return _directSizeSetting;
} }
set set
{ {
...@@ -88,7 +93,7 @@ namespace YgomSystem.Effect ...@@ -88,7 +93,7 @@ namespace YgomSystem.Effect
{ {
get get
{ {
return false; return _changePosition;
} }
set set
{ {
...@@ -99,7 +104,7 @@ namespace YgomSystem.Effect ...@@ -99,7 +104,7 @@ namespace YgomSystem.Effect
{ {
get get
{ {
return false; return _isUseFixedDepth;
} }
set set
{ {
...@@ -110,88 +115,188 @@ namespace YgomSystem.Effect ...@@ -110,88 +115,188 @@ namespace YgomSystem.Effect
{ {
get get
{ {
return 0f; return _fixedDepth;
} }
set set
{ {
} }
} }
public Camera viewCamera public Camera viewCamera { get; private set; }
public bool scaleYtoZ
{
get
{
return m_ScaleYtoZ;
}
set
{
}
}
public void SetFitMode(FitMode fitMode)
{ {
[CompilerGenerated] this.fitMode = fitMode;
get
{
return null;
}
[CompilerGenerated]
private set
{
}
} }
public void SetFitMode(FitMode fitMode) public FitMode GetFitMode()
{
return fitMode;
}
public Sprite TryGetTargetSprite()
{
if(targetSprite != null)
return targetSprite.sprite;
return null;
}
private void OnEnable()
{
StartCoroutine(SetupAsync());
}
private IEnumerator SetupAsync()
{ {
} if (targetSprite == null) targetSprite = GetComponent<SpriteRenderer>();
var originalColor = targetSprite.color;
targetSprite.color = Color.clear;
public void Setup(Camera view_camera) // Wait for the next frame to ensure script changes are ready.
yield return null;
targetSprite.color = originalColor;
Camera viewCamera = gameObject.layer switch
{
3 => Program.instance.camera_.camera2D,
16 => Program.instance.camera_.cameraDuelOverlay3D,
17 => Program.instance.camera_.cameraDuelOverlayEffect3D,
18 => Program.instance.camera_.cameraDuelOverlay2D,
19 => Program.instance.camera_.cameraDuelOverlayEffect2D,
_ => Program.instance.camera_.cameraMain,
};
Setup(viewCamera);
}
public void Setup(Camera view_camera)
{ {
} viewCamera = view_camera;
private void Awake()
{
Apply(); Apply();
} }
public void Apply() public void Apply()
{ {
var widthScale = transform.localScale.x; if (viewCamera == null)
var heightScale = transform.localScale.y; return;
var z = transform.localScale.z;
if (fitMode == FitMode.FitWidth) if (_changePosition)
{ transform.position = viewCamera.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, _fixedDepth));
var x = widthScale * (Screen.width * 9f / (Screen.height * 16f));
transform.localScale = new Vector3(x, heightScale, z); //float depth = _isUseFixedDepth ? _fixedDepth : viewCamera.WorldToScreenPoint(transform.position).z;
} float depth = viewCamera.WorldToScreenPoint(transform.position).z;
else if(fitMode == FitMode.FitHeight)
{ float screenWidth;
var y = heightScale * (Screen.height * 16f / (Screen.width * 9f)); float screenHeight;
transform.localScale=new Vector3(widthScale, y, z);
} if (viewCamera.orthographic)
else if (fitMode == FitMode.FitWidthMaintainAspectRatio)
{
if(name == "SpliteDummy" || name == "White")
{
var x = widthScale * (Screen.width * 9f / (Screen.height * 16f));
transform.localScale = new Vector3(x, heightScale * x / widthScale, z);
}
else if(name == "Black")
{
widthScale = 15f * (Screen.width * 9f / (Screen.height * 16f));
transform.localScale = new Vector3(widthScale, widthScale, z);
}
}
else if (fitMode == FitMode.FitHeightMaintainAspectRatio)
{ {
Debug.Log("mark: FitMode.FitHeightMaintainAspectRatio"); Vector3 bottomLeft = viewCamera.ViewportToWorldPoint(new Vector3(0, 0, depth));
//heightScale = 6f; Vector3 topRight = viewCamera.ViewportToWorldPoint(new Vector3(1, 1, depth));
//transform.localScale = new Vector3(heightScale, heightScale, z); screenWidth = topRight.x - bottomLeft.x;
screenHeight = topRight.y - bottomLeft.y;
} }
else if (fitMode == FitMode.FitWidthHeight) else
{ {
var x = heightScale * Screen.width / Screen.height; float halfFOV = viewCamera.fieldOfView * 0.5f * Mathf.Deg2Rad;
transform.localScale = new Vector3(x * 1.1f, heightScale, z); screenHeight = 2f * depth * Mathf.Tan(halfFOV);
if (transform.parent != null && transform.parent.name.StartsWith("Ef04678")) screenWidth = screenHeight * viewCamera.aspect;
transform.localScale = new Vector3(x * 2f, heightScale * 2f, z);
} }
Apply(screenWidth, screenHeight);
} }
public void Apply(float screenWidth, float screenHeight) public void Apply(float screenWidth, float screenHeight)
{ {
} if (isApplied && appliedScreenSize.x == screenWidth && appliedScreenSize.y == screenHeight)
return;
if (targetSprite == null) targetSprite = GetComponent<SpriteRenderer>();
if (targetMask == null) targetMask = GetComponent<SpriteMask>();
Sprite sprite = TryGetTargetSprite();
if (sprite == null) return;
Vector2 spriteSize = sprite.rect.size / sprite.pixelsPerUnit;
Vector2 targetSize = Vector2.zero;
if (_useDirectSizeSetting)
{
targetSize = _directSizeSetting;
}
else
{
switch (fitMode)
{
case FitMode.None:
targetSize = spriteSize;
break;
case FitMode.FitWidth:
targetSize = new Vector2(screenWidth, spriteSize.y);
break;
case FitMode.FitHeight:
targetSize = new Vector2(spriteSize.x, screenHeight);
break;
case FitMode.FitWidthMaintainAspectRatio:
float widthScale = screenWidth / spriteSize.x;
targetSize = spriteSize * widthScale;
break;
case FitMode.FitHeightMaintainAspectRatio:
float heightScale = screenHeight / spriteSize.y;
targetSize = spriteSize * heightScale;
break;
case FitMode.FitWidthHeight:
targetSize = new Vector2(screenWidth, screenHeight);
break;
case FitMode.FitHighestResolutionMaintainAspectRatio:
float maxScale = Mathf.Max(screenWidth / spriteSize.x, screenHeight / spriteSize.y);
targetSize = spriteSize * maxScale;
break;
case FitMode.FitLowestResolutionMaintainAspectRatio:
float minScale = Mathf.Min(screenWidth / spriteSize.x, screenHeight / spriteSize.y);
targetSize = spriteSize * minScale;
break;
default:
targetSize = spriteSize;
break;
}
}
Vector3 newScale = new(
targetSize.x / spriteSize.x,
targetSize.y / spriteSize.y,
1f
);
newScale += offsetScale;
if (m_ScaleYtoZ)
newScale.z = newScale.y;
transform.localScale = newScale;
isApplied = true;
appliedScreenSize = new Vector2(screenWidth, screenHeight);
Debug.Log($"SpriteScaler applied: {gameObject.name}, Camera: {viewCamera}, Mode: {fitMode}, Scale: {transform.localScale}, Screen Size: {appliedScreenSize}");
}
public void Reapply() public void Reapply()
{ {
} isApplied = false;
Apply();
}
private void OnDestroy() private void OnDestroy()
{ {
...@@ -199,6 +304,8 @@ namespace YgomSystem.Effect ...@@ -199,6 +304,8 @@ namespace YgomSystem.Effect
private void Update() private void Update()
{ {
} if (applyOnUpdate && viewCamera != null)
Apply();
}
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment