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