using System.Collections.Generic; using UnityEditor; using UnityEngine; namespace SplashEdit.RuntimeCode { /// /// Represents a prohibited area in PlayStation 2D VRAM where textures should not be packed. /// This class provides conversion methods to and from Unity's Rect structure. /// public class ProhibitedArea { // X and Y coordinates of the prohibited area in VRAM. public int X; public int Y; // Width and height of the prohibited area. public int Width; public int Height; /// /// Creates a ProhibitedArea instance from a Unity Rect. /// The floating-point values of the Rect are rounded to the nearest integer. /// /// The Unity Rect representing the prohibited area. /// A new ProhibitedArea with integer dimensions. public static ProhibitedArea FromUnityRect(Rect rect) { return new ProhibitedArea { X = Mathf.RoundToInt(rect.x), Y = Mathf.RoundToInt(rect.y), Width = Mathf.RoundToInt(rect.width), Height = Mathf.RoundToInt(rect.height) }; } /// /// Converts the ProhibitedArea back into a Unity Rect. /// /// A Unity Rect with the same area as defined by this ProhibitedArea. public Rect ToUnityRect() { return new Rect(X, Y, Width, Height); } } public static class Utils { private static string _psxDataPath = "Assets/PSXData.asset"; public static (Rect, Rect) BufferForResolution(Vector2 selectedResolution, bool verticalLayout, Vector2 offset = default) { if (offset == default) { offset = Vector2.zero; } Rect buffer1 = new Rect(offset.x, offset.y, selectedResolution.x, selectedResolution.y); Rect buffer2 = verticalLayout ? new Rect(offset.x, 256, selectedResolution.x, selectedResolution.y) : new Rect(offset.x + selectedResolution.x, offset.y, selectedResolution.x, selectedResolution.y); return (buffer1, buffer2); } /// /// Loads stored PSX data from the asset. /// public static PSXData LoadData(out Vector2 selectedResolution, out bool dualBuffering, out bool verticalLayout, out List prohibitedAreas) { var _psxData = AssetDatabase.LoadAssetAtPath(_psxDataPath); if (!_psxData) { _psxData = ScriptableObject.CreateInstance(); AssetDatabase.CreateAsset(_psxData, _psxDataPath); AssetDatabase.SaveAssets(); } selectedResolution = _psxData.OutputResolution; dualBuffering = _psxData.DualBuffering; verticalLayout = _psxData.VerticalBuffering; prohibitedAreas = _psxData.ProhibitedAreas; return _psxData; } } }