Apply Stage-based Condition Management

This commit is contained in:
copecone committed 2026-09-28 21:15:02 +09:00
1 parent 363130e87b
commit d42c434780
7 files changed
+28 -45

No files matched your search

+2 -2
View File
@@ -146,8 +146,8 @@ public class RenderSession
RenderManager.Instance.levelPath = levelPath; RenderManager.Instance.levelPath = levelPath;
RenderManager.Instance.Configuration = renderConfig; RenderManager.Instance.Configuration = renderConfig;
RenderManager.Instance.StartLoadingOverride(); RenderManager.Instance.stage = RenderStage.Load;
if (_outputPath is null) RenderManager.Instance.SetupCaptureDirectory(); if (_outputPath is null) RenderManager.Instance.SetupCaptureDirectory();
else FileUtil.CreateDirectory(Path.GetDirectoryName(_outputPath) ?? throw new InvalidOperationException()); else FileUtil.CreateDirectory(Path.GetDirectoryName(_outputPath) ?? throw new InvalidOperationException());
+19 -36
View File
@@ -22,6 +22,11 @@ using ThreadPriority = System.Threading.ThreadPriority;
namespace ADOFAIRenderer.Core; namespace ADOFAIRenderer.Core;
internal enum RenderStage
{
None, Load, OnScene, Render
}
internal static class RenderContext internal static class RenderContext
{ {
public static bool Auto = true; public static bool Auto = true;
@@ -68,8 +73,8 @@ internal class RenderManager : MonoBehaviour
{ {
// Singleton Accessors // Singleton Accessors
public static RenderManager Instance { get; private set; } = null!; public static RenderManager Instance { get; private set; } = null!;
public static bool IsActive => Instance && Instance.IsRendering; public static bool IsActive => Instance && Instance.stage >= RenderStage.OnScene;
public static bool IsCapturingActive => Instance && Instance.IsCapturing; public static bool IsCapturingActive => Instance && Instance.stage >= RenderStage.Render;
public const int MaxQueuedFrames = 64; public const int MaxQueuedFrames = 64;
@@ -86,9 +91,7 @@ internal class RenderManager : MonoBehaviour
public RenderConfig Configuration = null!; public RenderConfig Configuration = null!;
// Render Sessions State (OOP Instance Fields) // Render Sessions State (OOP Instance Fields)
public bool OverrideLoading { get; private set; } public RenderStage stage = RenderStage.None;
private bool IsRendering { get; set; }
private bool IsCapturing { get; set; }
public double timeBase; public double timeBase;
public double unscaledTimeBase; public double unscaledTimeBase;
public double dspTimeBase; public double dspTimeBase;
@@ -142,28 +145,10 @@ internal class RenderManager : MonoBehaviour
CleanUpActiveRender(); CleanUpActiveRender();
} }
public void StartLoadingOverride()
{
OverrideLoading = true;
}
public void StartRendering()
{
IsRendering = true;
}
public void StartCapturing()
{
IsCapturing = true;
IsRenderCancelled = false;
}
public void ResetRenderState(bool success) public void ResetRenderState(bool success)
{ {
IsRendering = false;
IsCapturing = false;
OverrideLoading = false;
IsRenderCancelled = !success; IsRenderCancelled = !success;
stage = RenderStage.None;
} }
public void CleanUpActiveRender() public void CleanUpActiveRender()
@@ -233,9 +218,8 @@ internal class RenderManager : MonoBehaviour
scrController.instance.noFailInfiniteMargin = true; scrController.instance.noFailInfiniteMargin = true;
} }
StartRendering(); stage = RenderStage.OnScene;
countdown = 3; countdown = 3; endFrame = -1;
endFrame = -1;
if (!_escapeHandlerObj) if (!_escapeHandlerObj)
{ {
@@ -248,7 +232,7 @@ internal class RenderManager : MonoBehaviour
scrController.instance!.StartCoroutine(SetupPlay()); scrController.instance!.StartCoroutine(SetupPlay());
} }
if (!IsRendering) return; if (Instance.stage < RenderStage.OnScene) return;
if (!scrController.instance || scrController.instance.state == States.Fail || scrController.instance.state == States.Fail2) if (!scrController.instance || scrController.instance.state == States.Fail || scrController.instance.state == States.Fail2)
{ {
ResetRenderState(success: false); ResetRenderState(success: false);
@@ -272,13 +256,13 @@ internal class RenderManager : MonoBehaviour
public void OnPreUpdate() public void OnPreUpdate()
{ {
if (!IsRendering) return; if (Instance.stage < RenderStage.OnScene) return;
frameCount++; frameCount++;
} }
public void OnLastUpdate() public void OnLastUpdate()
{ {
if (!OverrideLoading) return; if (Instance.stage < RenderStage.Load) return;
if (!Configuration.AdvancedConfig.NonTile) return; if (!Configuration.AdvancedConfig.NonTile) return;
foreach (var floor in scrLevelMaker.instance.listFloors foreach (var floor in scrLevelMaker.instance.listFloors
.Where(floor => floor.holdRenderer && floor.holdRenderer.m_meshRenderer.enabled)) .Where(floor => floor.holdRenderer && floor.holdRenderer.m_meshRenderer.enabled))
@@ -292,12 +276,12 @@ internal class RenderManager : MonoBehaviour
// ReSharper disable once Unity.IncorrectMethodSignature // ReSharper disable once Unity.IncorrectMethodSignature
public void OnPostFrame(RenderTexture? texture) public void OnPostFrame(RenderTexture? texture)
{ {
if (!IsCapturing || !texture) return; if (Instance.stage < RenderStage.Render || !texture) return;
// [Backpressure Throttling] // [Backpressure Throttling]
isThrottling = false; isThrottling = false;
while (IsCapturing && IsRendering) while (Instance.stage >= RenderStage.Render)
{ {
int count; int count;
lock (ImageQueue) lock (ImageQueue)
@@ -351,7 +335,6 @@ internal class RenderManager : MonoBehaviour
var quitDelegate = var quitDelegate =
(Func<bool>)Delegate.CreateDelegate(typeof(Func<bool>), scnEditor.instance, targetMethod); (Func<bool>)Delegate.CreateDelegate(typeof(Func<bool>), scnEditor.instance, targetMethod);
if (Instance) Instance.StartLoadingOverride();
Application.wantsToQuit -= quitDelegate; Application.wantsToQuit -= quitDelegate;
ADOBase.loader.LoadSceneWithTransition(WipeDirection.StartsFromRight, "Assets/Scenes/RenderSettingsScene.unity"); ADOBase.loader.LoadSceneWithTransition(WipeDirection.StartsFromRight, "Assets/Scenes/RenderSettingsScene.unity");
}); });
@@ -418,7 +401,7 @@ internal class RenderManager : MonoBehaviour
yield break; yield break;
} }
StartCapturing(); Instance.stage = RenderStage.Render;
scrController.instance.paused = scrController.instance.audioPaused = false; scrController.instance.paused = scrController.instance.audioPaused = false;
scrController.instance.levelWasSkipped = true; scrController.instance.levelWasSkipped = true;
@@ -538,7 +521,7 @@ internal class RenderManager : MonoBehaviour
{ {
var firstKey = ImageQueue.Keys[0]; var firstKey = ImageQueue.Keys[0];
if (firstKey > passCount && !IsCapturing) if (firstKey > passCount && Instance.stage < RenderStage.Render)
{ {
passCount = firstKey; passCount = firstKey;
} }
+1 -1
View File
@@ -158,7 +158,7 @@ public static class RenderEnvironmentPatches
[SuppressMessage("ReSharper", "InconsistentNaming")] [SuppressMessage("ReSharper", "InconsistentNaming")]
public static void Prefix(ref bool stream) public static void Prefix(ref bool stream)
{ {
if (RenderManager.Instance && RenderManager.Instance.OverrideLoading && RenderManager.Instance.Configuration.AdvancedConfig.ProcessAudio) if (RenderManager.Instance && RenderManager.Instance.stage >= RenderStage.Load && RenderManager.Instance.Configuration.AdvancedConfig.ProcessAudio)
stream = false; stream = false;
} }
} }
+1 -1
View File
@@ -14,7 +14,7 @@ public static class scnGamePatch
[HarmonyPatch("Play")] [HarmonyPatch("Play")]
public static void ProcessFloors() public static void ProcessFloors()
{ {
var nonTile = RenderManager.Instance.OverrideLoading && var nonTile = RenderManager.Instance.stage >= RenderStage.Load &&
RenderManager.Instance.Configuration.AdvancedConfig.NonTile; RenderManager.Instance.Configuration.AdvancedConfig.NonTile;
if (!nonTile) return; if (!nonTile) return;
+1 -1
View File
@@ -14,7 +14,7 @@ public class scrFloorPatch
{ {
if (!scrLevelMaker.instance.listFloors.Contains(__instance)) return true; if (!scrLevelMaker.instance.listFloors.Contains(__instance)) return true;
var nonTile = RenderManager.Instance.OverrideLoading && var nonTile = RenderManager.Instance.stage >= RenderStage.Load &&
RenderManager.Instance.Configuration.AdvancedConfig.NonTile; RenderManager.Instance.Configuration.AdvancedConfig.NonTile;
return !nonTile; return !nonTile;
} }
+1 -1
View File
@@ -13,7 +13,7 @@ public static class scrPortalParticlesPatch
// ReSharper disable once InconsistentNaming // ReSharper disable once InconsistentNaming
public static void ForceScaledTime(scrPortalParticles __instance) public static void ForceScaledTime(scrPortalParticles __instance)
{ {
if (!RenderManager.Instance || !RenderManager.Instance.OverrideLoading) return; if (!RenderManager.Instance || RenderManager.Instance.stage < RenderStage.Load) return;
if (__instance == null) return; if (__instance == null) return;
var particleSystems = __instance.GetComponentsInChildren<ParticleSystem>(true); var particleSystems = __instance.GetComponentsInChildren<ParticleSystem>(true);
+3 -3
View File
@@ -1,6 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using ADOFAIRenderer.API;
using ADOFAIRenderer.Core; using ADOFAIRenderer.Core;
using ADOFAIRenderer.Data; using ADOFAIRenderer.Data;
using ADOFAIRenderer.Data.Input; using ADOFAIRenderer.Data.Input;
@@ -928,9 +929,8 @@ internal class RenderConfigUIManager : MonoBehaviour
if (showJudgementText != null) if (showJudgementText != null)
config.ShowJudgementText = showJudgementText.value; config.ShowJudgementText = showJudgementText.value;
RenderManager.Instance.SetupCaptureDirectory(); new RenderSession().Start(config, RenderManager.Instance.levelPath);
RenderManager.Instance.SetupGameScene();
} }
private VisualElement? _presetConfigContainer; private VisualElement? _presetConfigContainer;