Commit d94a1ad4 authored by ElderLich's avatar ElderLich

Bug Fix: Fixed 21:9 Resolution and more

parent 87790664
......@@ -523,15 +523,14 @@ namespace MDPro3
handsCount = Program.instance.ocgcore.GetOpHandCount();
float x = p.sequence * 4 - (handsCount - 1) * 2;
if (p.controller == 0)
{
var z = -28 + (30 - Program.instance.camera_.cameraMain.fieldOfView) * 0.7f;
var z = GetMyHandBaseZ();
return new Vector3(x + handOffset * UIManager.ScreenLengthWithoutScalerX(0.038f), 15, z);
}
else
{
var z = 17 - (30 - Program.instance.camera_.cameraMain.fieldOfView) * 0.7f;
var z = GetOpHandBaseZ();
return new Vector3(-x, 15, z);
}
}
......@@ -713,6 +712,35 @@ namespace MDPro3
return returnValue;
}
private static float GetMyHandBaseZ()
{
return -28f + GetHandDepthOffsetByFov();
}
private static float GetOpHandBaseZ()
{
return 17f - GetHandDepthOffsetByFov();
}
private static float GetHandDepthOffsetByFov()
{
var camera = Program.instance?.camera_?.cameraMain;
if (camera == null)
return 0f;
var fovDelta = Mathf.Clamp(30f - camera.fieldOfView, 0f, 6f);
var fovCompensation = fovDelta * 0.7f;
// After widening duel camera framing, retract hand outward on ultrawide displays.
var aspect = Tools.GetScreenAspectRatio();
var ultraWide21x9T = Mathf.InverseLerp(16f / 9f, 21f / 9f, aspect);
var ultraWide32x9T = Mathf.InverseLerp(21f / 9f, 32f / 9f, aspect);
// Strong ultrawide push so hand cards sit lower while keeping a little more text visible.
var ultraWideOutward = Mathf.Lerp(0f, 1.60f, ultraWide21x9T) + Mathf.Lerp(0f, 1.10f, ultraWide32x9T);
return fovCompensation - ultraWideOutward;
}
public static Vector3 GetCardRotation(GPS p, int code = 0)
{
var condition = CardRuleCondition.MeUpAtk;
......@@ -1915,9 +1943,9 @@ namespace MDPro3
var targetPosition = GetCardPosition(p, this);
var x = targetPosition.x;
if (HideMyHandCard && p.InMyControl())
targetPosition.z = -28f;
targetPosition.z = GetMyHandBaseZ();
if (HideOpHandCard && !p.InMyControl())
targetPosition.z = 17f;
targetPosition.z = GetOpHandBaseZ();
model.transform.DOLocalMove(targetPosition, time);
}
......
......@@ -56,16 +56,28 @@ namespace MDPro3
public static void ChangeCameraFOV()
{
float aspect = (float)Screen.width * 9 / Screen.height;
if (aspect > 16)
{
Program.instance.camera_.cameraMain.fieldOfView = 30 + 16 - aspect;
Program.instance.camera_.cameraDuelOverlay3D.fieldOfView = Program.instance.camera_.cameraMain.fieldOfView;
}
else
var camera = Program.instance.camera_;
if (camera == null || camera.cameraMain == null || camera.cameraDuelOverlay3D == null)
return;
var aspect = Tools.GetScreenAspectRatio();
var ultraWideT = Mathf.InverseLerp(16f / 9f, 32f / 9f, aspect);
// Keep 16:9 unchanged while widening ultrawide framing to match MD-style composition.
var duelFov = Mathf.Lerp(30f, 33f, ultraWideT);
camera.cameraMain.fieldOfView = duelFov;
camera.cameraDuelOverlay3D.fieldOfView = duelFov;
mainCameraDefaultPosition = new Vector3(
0f,
95f + Mathf.Lerp(0f, 4f, ultraWideT),
-37f - Mathf.Lerp(0f, 5f, ultraWideT));
if (Program.instance.ocgcore != null && Program.instance.ocgcore.showing)
{
Program.instance.camera_.cameraMain.fieldOfView = 30;
Program.instance.camera_.cameraDuelOverlay3D.fieldOfView = 30;
camera.cameraMain.transform.localPosition = mainCameraDefaultPosition;
if (!overlaySticking)
camera.cameraDuelOverlay3D.transform.localPosition = mainCameraDefaultPosition;
}
}
......@@ -89,7 +101,7 @@ namespace MDPro3
public static void Overlay3DReset()
{
Program.instance.camera_.cameraDuelOverlay3D.transform.localPosition = new Vector3(0, 95, -37);
Program.instance.camera_.cameraDuelOverlay3D.transform.localPosition = mainCameraDefaultPosition;
Program.instance.camera_.cameraDuelOverlay3D.transform.localEulerAngles = new Vector3(70, 0, 0);
}
......
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