forked from akanyan/mu3-mods
add offgeki
This commit is contained in:
230
Extras/Offgeki/MU3.Sequence/patch_PlayMusic.cs
Normal file
230
Extras/Offgeki/MU3.Sequence/patch_PlayMusic.cs
Normal file
@ -0,0 +1,230 @@
|
||||
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();
|
||||
}
|
||||
|
||||
|
||||
}
|
Reference in New Issue
Block a user