上传文件至 Common
This commit is contained in:
103
Common/CustomCameraId.cs
Normal file
103
Common/CustomCameraId.cs
Normal file
@@ -0,0 +1,103 @@
|
||||
using System;
|
||||
using static Manager.CameraManager;
|
||||
using System.Collections;
|
||||
using HarmonyLib;
|
||||
using Manager;
|
||||
using MelonLoader;
|
||||
using UnityEngine;
|
||||
|
||||
namespace SinmaiAssist.Common;
|
||||
|
||||
public class CustomCameraId
|
||||
{
|
||||
private static CameraParameter _gameCameraParam;
|
||||
private static CameraParameter _qrCameraParam;
|
||||
|
||||
[HarmonyPrefix]
|
||||
[HarmonyPatch(typeof(CameraManager), "CameraInitialize")]
|
||||
public static bool CameraInitialize(CameraManager __instance, ref IEnumerator __result)
|
||||
{
|
||||
__result = CameraInitialize(__instance);
|
||||
return false;
|
||||
}
|
||||
|
||||
[HarmonyPostfix]
|
||||
[HarmonyPatch(typeof(CameraManager), "Initialize")]
|
||||
public static void SetCameraResolution(CameraManager __instance)
|
||||
{
|
||||
if (SinmaiAssist.GameID != "SDEZ")
|
||||
{
|
||||
WebCamDevice qrDevice = WebCamTexture.devices[SinmaiAssist.GameID == "SDGB" ? SinmaiAssist.MainConfig.Common.CustomCameraId.ChimeCameraId : SinmaiAssist.MainConfig.Common.CustomCameraId.LeftQrCameraId];
|
||||
WebCamTexture qrTexture = new WebCamTexture(qrDevice.name);
|
||||
qrTexture.Play();
|
||||
_qrCameraParam = new CameraParameter(qrTexture.width, qrTexture.height, (int)qrTexture.requestedFPS);
|
||||
AccessTools.Field(typeof(CameraManager), "QrCameraParam").SetValue(__instance, _qrCameraParam);
|
||||
qrTexture.Stop();
|
||||
}
|
||||
WebCamDevice gameDevice = WebCamTexture.devices[SinmaiAssist.MainConfig.Common.CustomCameraId.PhotoCameraId];
|
||||
WebCamTexture gameTexture = new WebCamTexture(gameDevice.name);
|
||||
gameTexture.Play();
|
||||
_gameCameraParam = new CameraParameter(gameTexture.width, gameTexture.height, (int)gameTexture.requestedFPS);
|
||||
AccessTools.Field(typeof(CameraManager), "GameCameraParam").SetValue(__instance, _gameCameraParam);
|
||||
gameTexture.Stop();
|
||||
}
|
||||
|
||||
private static IEnumerator CameraInitialize(CameraManager __instance)
|
||||
{
|
||||
int webcamtexLength = Math.Max(2, WebCamTexture.devices.Length);
|
||||
WebCamTexture[] webcamtex = new WebCamTexture[webcamtexLength];
|
||||
|
||||
int leftQrCameraId = ((SinmaiAssist.MainConfig.Common.CustomCameraId.LeftQrCameraId < WebCamTexture.devices.Length)
|
||||
? SinmaiAssist.MainConfig.Common.CustomCameraId.LeftQrCameraId
|
||||
: 0);
|
||||
int rightQrCameraId = ((SinmaiAssist.MainConfig.Common.CustomCameraId.RightQrCameraId < WebCamTexture.devices.Length)
|
||||
? SinmaiAssist.MainConfig.Common.CustomCameraId.RightQrCameraId
|
||||
: 0);
|
||||
int photoCameraId = ((SinmaiAssist.MainConfig.Common.CustomCameraId.PhotoCameraId < WebCamTexture.devices.Length)
|
||||
? SinmaiAssist.MainConfig.Common.CustomCameraId.PhotoCameraId
|
||||
: 0);
|
||||
int chimeQrCameraId = ((SinmaiAssist.MainConfig.Common.CustomCameraId.ChimeCameraId < WebCamTexture.devices.Length)
|
||||
? SinmaiAssist.MainConfig.Common.CustomCameraId.ChimeCameraId
|
||||
: 0);
|
||||
|
||||
switch (SinmaiAssist.GameID)
|
||||
{
|
||||
case "SDGB":
|
||||
webcamtex[chimeQrCameraId] = new WebCamTexture(WebCamTexture.devices[chimeQrCameraId].name, _qrCameraParam.Width, _qrCameraParam.Height, _qrCameraParam.Fps);
|
||||
DeviceId[0] = chimeQrCameraId;
|
||||
DeviceId[1] = photoCameraId;
|
||||
break;
|
||||
case "SDEZ":
|
||||
webcamtex[leftQrCameraId] = new WebCamTexture(WebCamTexture.devices[leftQrCameraId].name, _qrCameraParam.Width, _qrCameraParam.Height, _qrCameraParam.Fps);
|
||||
webcamtex[rightQrCameraId] = new WebCamTexture(WebCamTexture.devices[rightQrCameraId].name, _qrCameraParam.Width, _qrCameraParam.Height, _qrCameraParam.Fps);
|
||||
DeviceId[0] = leftQrCameraId;
|
||||
DeviceId[1] = rightQrCameraId;
|
||||
DeviceId[2] = photoCameraId;
|
||||
break;
|
||||
default:
|
||||
DeviceId[0] = photoCameraId;
|
||||
break;
|
||||
}
|
||||
webcamtex[photoCameraId] = new WebCamTexture(WebCamTexture.devices[photoCameraId].name, _gameCameraParam.Width, _gameCameraParam.Height, _gameCameraParam.Fps);
|
||||
|
||||
// 判断如果设备只连接了一个摄像头,就将相机0复制到相机1,防止其他代码调用相机1导致读到个Null
|
||||
if (WebCamTexture.devices.Length == 1)
|
||||
{
|
||||
webcamtex[1] = webcamtex[0];
|
||||
}
|
||||
|
||||
AccessTools.Field(typeof(CameraManager), "_webcamtex").SetValue(__instance, webcamtex);
|
||||
|
||||
__instance.isAvailableCamera = new bool[webcamtex.Length];
|
||||
__instance.cameraProcMode = new CameraProcEnum[webcamtex.Length];
|
||||
|
||||
for (int i = 0; i < webcamtex.Length; i++)
|
||||
{
|
||||
__instance.isAvailableCamera[i] = true;
|
||||
__instance.cameraProcMode[i] = CameraProcEnum.Good;
|
||||
}
|
||||
|
||||
IsReady = true;
|
||||
yield break;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user