SHA256
Apply Stage-based Condition Management
This commit is contained in:
7 files changed
+28
-45
No files matched your search
@@ -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
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in new issue
Block a user