forked from akanyan/mu3-mods
230 lines
6.8 KiB
C#
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();
|
|
}
|
|
|
|
|
|
} |