上传文件至 Common

This commit is contained in:
2025-10-13 18:18:47 +08:00
parent 535e955faf
commit 566c6190ff
25 changed files with 1487 additions and 0 deletions

103
Common/CustomCameraId.cs Normal file
View 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;
}
}