[+] Feature for load self-made charts jacket from file

pull/30/head
Clansty 2024-04-22 20:58:01 +08:00
parent b13af00061
commit df863e879f
4 changed files with 51 additions and 0 deletions

View File

@ -270,6 +270,7 @@
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Main.cs" />
<Compile Include="UX\CustomVersionString.cs" />
<Compile Include="UX\LoadJacketPng.cs" />
<Compile Include="UX\SinglePlayer.cs" />
<Compile Include="UX\SkipWarningScreen.cs" />
<Compile Include="UX\SkipToMusicSelection.cs" />

View File

@ -16,6 +16,8 @@ SinglePlayer=true
SkipToMusicSelection=false
# Set the version string displayed at the top-right corner of the screen
CustomVersionString=""
# Load Jacket image from folder "LocalAssets" and filename "{MusicID}.png" for self-made charts
LoadJacketPng=true
[Performance]
# Disable some useless checks and delays to speed up the game boot process

View File

@ -19,6 +19,7 @@ namespace AquaMai
public bool SkipWarningScreen { get; set; }
public bool SinglePlayer { get; set; }
public bool SkipToMusicSelection { get; set; }
public bool LoadJacketPng { get; set; }
public string CustomVersionString { get; set; }
}

View File

@ -0,0 +1,47 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using HarmonyLib;
using UnityEngine;
using System.Text.RegularExpressions;
using MelonLoader;
namespace AquaMai.UX
{
[HarmonyPatch]
public class LoadJacketPng
{
public static IEnumerable<MethodBase> TargetMethods()
{
var AM = typeof(AssetManager);
return new[] { AM.GetMethod("GetJacketThumbTexture2D", new []{typeof(string)}), AM.GetMethod("GetJacketTexture2D", new []{typeof(string)}) };
}
public static bool Prefix(string filename, ref Texture2D __result)
{
var matches = Regex.Matches(filename, @"UI_Jacket_(\d+)(_s)?\.png");
if (matches.Count < 1)
{
return true;
}
var id = matches[0].Groups[1].Value;
foreach (var ext in new []{".jpg",".png",".webp",".bmp",".gif"})
{
if (File.Exists(Path.Combine(Environment.CurrentDirectory, "LocalAssets", id + ext)))
{
filename = id + ext;
}
}
var localPath = Path.Combine(Environment.CurrentDirectory, "LocalAssets", filename);
if (!File.Exists(localPath)) return true;
__result = new Texture2D(1, 1);
ImageConversion.LoadImage(__result, File.ReadAllBytes(localPath));
return false;
}
}
}