1
0
forked from akanyan/mu3-mods
Files
mu3-mods/Extras/Offgeki/MU3.Sequence/patch_PlayMusic.cs
2025-04-01 23:03:21 -06:00

230 lines
6.8 KiB
C#

using UnityEngine;
using MU3.Util;
using MU3.Game;
using UnityEngine.SceneManagement;
using System.Linq;
using System.Collections.Generic;
namespace MU3.Sequence;
class patch_PlayMusic : PlayMusic
{
private SessionInfo _sessionInfo;
//private State _state = State;
private bool _nogeki_removed = false;
private bool _nogeki_enabled = false;
private GameObject _offgeki_bg;
private void disableEffect(GameObject effect)
{
var childCount = effect.transform.childCount;
effect.transform.DetachChildren();
effect.transform.localScale = new Vector3(0, 0, 0);
effect.SetActive(false);
}
private extern void orig_Execute_SetupScene();
private void Execute_SetupScene()
{
Mod.State state = Singleton<Mod.State>.instance;
state.Init();
orig_Execute_SetupScene();
if (state.RemoveBackground && _offgeki_bg == null)
{
// Create a black quad that fills the screen
GameObject bgQuad = GameObject.CreatePrimitive(PrimitiveType.Quad);
bgQuad.name = "OffgekiBackground";
// Scale it to cover the view
bgQuad.transform.localScale = new Vector3(10000, 10000, 1);
// Position it far behind other elements
bgQuad.transform.position = new Vector3(0, 0, 500);
// Assign the material
bgQuad.GetComponent<Renderer>().material = new(Shader.Find("Unlit/Color"))
{
color = new Color(state.BackgroundR, state.BackgroundG, state.BackgroundB)
};
_offgeki_bg = bgQuad;
}
// Remove canvases
SystemUI systemUI = SingletonMonoBehaviour<SystemUI>.instance;
List<string> disableCanvases = [];
if (state.RemoveBackground)
{
disableCanvases.Add("Canvas_P_Background");
disableCanvases.Add("Canvas_P_FadeOut");
}
if (state.RemoveHeader)
{
disableCanvases.Add("Canvas_P_UserData");
disableCanvases.Add("Canvas_P_Signage");
}
if (state.RemoveFooter)
{
disableCanvases = [
..disableCanvases,
"Canvas_P_SystemButton",
"Canvas_P_ButtonGuide",
"Canvas_P_Credit"
];
}
foreach (var item in systemUI.GetComponentsInChildren<Canvas>())
{
if (!item.enabled) continue;
if (disableCanvases.Contains(item.name))
{
item.enabled = false;
}
}
string name = $"st_{_sessionInfo.stageId:0000}";
Scene sceneByName = SceneManager.GetSceneByName(name);
GameObject[] rootObjects = sceneByName.GetRootGameObjects();
foreach (var obj in rootObjects)
{
if (obj.name == "BattleStage(Clone)" && state.RemoveBackgroundFrame)
{
obj.SetActive(false);
continue;
}
if (obj.name == "NotesPrimitiveManager(Clone)")
{
PrimitiveMesh[] childs = obj.GetComponentsInChildren<PrimitiveMesh>();
for (int i = 0; i < childs.Length; i++)
{
if (i == 2)
{
PrimitiveMesh child = childs[i];
child.gameObject.SetActive(false);
}
}
}
}
List<string> disableCharacterLines = state.RemoveCharacterLine ? [
"fd_charaline",
"fd_charaline(Clone)",
"fd_charapole",
"fd_charapole (1)",
"fd_charazone",
"fd_checkpole",
"fd_checkpole (1)",
"fd_zonetry",
] : [];
List<string> disableBullets = state.RemoveBullets ? [
"FX_Bullet_03_Hit(Clone)",
"FX_Bullet_03_Break(Clone)",
"FX_Bullet_03_CBreak(Clone)",
"FX_Bullet_02_Hit(Clone)",
"FX_Bullet_02_Break(Clone)",
"FX_Bullet_02_CBreak(Clone)",
"FX_Bullet_Hit(Clone)",
"FX_Bullet_Break(Clone)",
"FX_Bullet_CBreak(Clone)",
] : [];
List<string> disableHitFX = state.RemoveNoteFX ? [
"EffectCache_attachBell",
"EffectCache_flickHit",
"EffectCache_flickBreak",
"EffectCache_flickCBreak",
"EffectCache_flickPBreak",
"EffectCache_crFlickHit",
"EffectCache_crFlickBreak",
"EffectCache_crFlickCBreak",
"EffectCache_crFlickPBreak",
"EffectCache_normalHit",
"EffectCache_normalBreak",
"EffectCache_normalCBreak",
"EffectCache_normalPBreak",
"EffectCache_holdEndHit",
"EffectCache_holdEndBreak",
"EffectCache_holdEndCBreak",
"EffectCache_holdEndPBreak",
"EffectCache_holdKeep",
"FX_Tap_PBreak(Clone)",
"FX_Tap_CBreak(Clone)",
"FX_Tap_Break(Clone)",
"FX_Tap_Hit(Clone)",
"FX_Release_PBreak(Clone)",
] : [];
List<string> reducedNoteFX = state.ReducedNoteFX ? [
"EffectCache_holdEndCBreak",
"EffectCache_holdEndPBreak",
"EffectCache_holdKeep",
"EffectCache_crFlickPBreak",
"EffectCache_flickPBreak",
] : [];
List<string> disableBulletFX = state.RemoveBullets ? [
"hitZako",
"criticalZako",
"explosionZako",
"EffectCache_explosionZako",
"EffectCache_hitZako",
"EffectCache_criticalZako",
"hitBoss",
"criticalBoss",
"explosionBoss",
"EffectCache_explosionBoss",
"EffectCache_hitBoss",
"EffectCache_criticalBoss",
] : [];
List<string> disableNames = [
..disableCharacterLines,
..disableBullets,
..disableHitFX,
..reducedNoteFX,
..disableBulletFX,
];
Transform[] arrTransforms = Resources.FindObjectsOfTypeAll<Transform>().Where((s) => (s.hideFlags == HideFlags.None)).ToArray();
for (int i = 0; i < arrTransforms.Length; i++)
{
//UnityEngine.Debug.Log($"[Nogeki] Transform: {arrTransforms[i].name}");
if (disableNames.Contains(arrTransforms[i].name))
{
disableEffect(arrTransforms[i].gameObject);
}
}
}
private extern void orig_Enter_DispCombo();
private void Enter_DispCombo()
{
SystemUI systemUI = SingletonMonoBehaviour<SystemUI>.instance;
foreach (var item in systemUI.GetComponentsInChildren<Canvas>())
{
if (item.enabled) continue;
item.enabled = true;
}
orig_Enter_DispCombo();
}
}