123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- using BepInEx;
- using BepInEx.Common;
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text;
- using UnityEngine;
- namespace Screencap
- {
- public class ScreenshotManager : BaseUnityPlugin
- {
- public override string Name => "Screenshot Manager";
- private string screenshotDir = Utility.CombinePaths(Utility.ExecutingDirectory, "UserData", "cap");
- public ScreenshotManager()
- {
- if (!Directory.Exists(screenshotDir))
- Directory.CreateDirectory(screenshotDir);
- }
- void LateUpdate()
- {
- if (UnityEngine.Event.current.Equals(Event.KeyboardEvent("f9")))
- {
- string filename = Path.Combine(screenshotDir, $"Koikatsu -{DateTime.Now.ToString("yyyy-mm-dd-HH-mm-ss")}.png");
- TakeScreenshot(filename);
- }
- else if (UnityEngine.Event.current.Equals(Event.KeyboardEvent("f11")))
- {
- string filename = Path.Combine(screenshotDir, $"Koikatsu Char-{DateTime.Now.ToString("yyyy-mm-dd-HH-mm-ss")}.png");
- TakeCharScreenshot(filename);
- }
- }
- void TakeScreenshot(string filename)
- {
- UnityEngine.Application.CaptureScreenshot(filename);
- Console.WriteLine($"Screenshot saved to {filename}");
- }
- void TakeCharScreenshot(string filename)
- {
- Camera.main.backgroundColor = Color.clear;
- var tex = RenderCamera(Camera.main);
- File.WriteAllBytes(filename, tex.EncodeToPNG());
- Destroy(tex);
- Console.WriteLine($"Character screenshot saved to {filename}");
- }
- Texture2D RenderCamera(Camera cam)
- {
- float oldaspect = cam.aspect;
- cam.targetTexture = new RenderTexture(1024, 1024, 32); //((int)cam.pixelRect.width, (int)cam.pixelRect.height, 32);
- cam.aspect = cam.targetTexture.width / (float)cam.targetTexture.height;
- RenderTexture currentRT = RenderTexture.active;
- RenderTexture.active = cam.targetTexture;
-
- cam.Render();
- Texture2D image = new Texture2D(cam.targetTexture.width, cam.targetTexture.height);
- image.ReadPixels(new Rect(0, 0, cam.targetTexture.width, cam.targetTexture.height), 0, 0);
- image.Apply();
- RenderTexture.active = currentRT;
- Destroy(cam.targetTexture);
- cam.targetTexture = null;
- cam.aspect = oldaspect;
- return image;
- }
- }
- }
|