Add Expiration Date

This commit is contained in:
copecone committed 2026-08-20 09:06:05 +09:00
1 parent f14942a287
commit 257592f3c1
2 files changed
+38 -34

No files matched your search

+5 -2
View File
@@ -1,3 +1,4 @@
using System;
using ADOFAIRenderer; using ADOFAIRenderer;
using ADOFAIRenderer.Core; using ADOFAIRenderer.Core;
using ADOFAIRenderer.Util; using ADOFAIRenderer.Util;
@@ -6,8 +7,9 @@ using MelonLoader;
using MelonLoader.Utils; using MelonLoader.Utils;
using UnityEngine; using UnityEngine;
using UnityEngine.EventSystems; using UnityEngine.EventSystems;
using Object = UnityEngine.Object;
[assembly: MelonInfo(typeof(RenderMod), "ADOFAI Renderer", "0.1.2-INDEV", "ADOFAI Editor Forum")] [assembly: MelonInfo(typeof(RenderMod), "ADOFAI Renderer", "0.3.2-BETA", "ADOFAI Editor Forum")]
[assembly: MelonGame("7th Beat Games", "A Dance of Fire and Ice")] [assembly: MelonGame("7th Beat Games", "A Dance of Fire and Ice")]
namespace ADOFAIRenderer namespace ADOFAIRenderer
@@ -21,6 +23,7 @@ namespace ADOFAIRenderer
public static AssetBundle ShaderBundle = null!; public static AssetBundle ShaderBundle = null!;
public static ComputeShader ColorConversionShader = null!; public static ComputeShader ColorConversionShader = null!;
public static bool IsFeatureDisabled = false; public static bool IsFeatureDisabled = false;
public static DateTime ExpirationTime = new(2026, 09, 21, 0, 0, 0, DateTimeKind.Utc);
public override void OnInitializeMelon() public override void OnInitializeMelon()
{ {
@@ -47,7 +50,7 @@ namespace ADOFAIRenderer
ColorConversionShader = ShaderBundle.LoadAsset<ComputeShader>("ColorConversion"); ColorConversionShader = ShaderBundle.LoadAsset<ComputeShader>("ColorConversion");
Melon<RenderMod>.Logger.Msg("컬러 변환 Compute Shader 로드 완료."); Melon<RenderMod>.Logger.Msg("컬러 변환 Compute Shader 로드 완료.");
} }
catch (System.Exception ex) catch (Exception ex)
{ {
Melon<RenderMod>.Logger.Warning($"Shader 에셋번들을 로드할 수 없습니다. GPU 컬러 변환이 비활성화되며 CPU로 폴백합니다. 에러: {ex.Message}"); Melon<RenderMod>.Logger.Warning($"Shader 에셋번들을 로드할 수 없습니다. GPU 컬러 변환이 비활성화되며 CPU로 폴백합니다. 에러: {ex.Message}");
} }
+33 -32
View File
@@ -1,3 +1,4 @@
using System;
using System.Collections.Generic; using System.Collections.Generic;
using ADOFAIRenderer.Core; using ADOFAIRenderer.Core;
using ADOFAIRenderer.Data; using ADOFAIRenderer.Data;
@@ -6,6 +7,7 @@ using ADOFAIRenderer.Util.FFmpeg;
using MelonLoader; using MelonLoader;
using UnityEngine; using UnityEngine;
using UnityEngine.UIElements; using UnityEngine.UIElements;
using UnityEngine.UIElements.Experimental;
namespace ADOFAIRenderer.UI; namespace ADOFAIRenderer.UI;
@@ -90,9 +92,6 @@ internal class RenderConfigUIManager : MonoBehaviour
Melon<RenderMod>.Logger.Error("Button 'PresetSettingsButton'을(를) 찾을 수 없습니다."); Melon<RenderMod>.Logger.Error("Button 'PresetSettingsButton'을(를) 찾을 수 없습니다.");
} }
_advancedSettingsButton = _root.Q<Button>("AdvancedSettingsButton");
if (_advancedSettingsButton == null)
{
var bottomRow = CreateRow(); var bottomRow = CreateRow();
bottomRow.pickingMode = PickingMode.Ignore; bottomRow.pickingMode = PickingMode.Ignore;
bottomRow.style.position = Position.Absolute; bottomRow.style.position = Position.Absolute;
@@ -103,25 +102,19 @@ internal class RenderConfigUIManager : MonoBehaviour
_advancedSettingsButton = new Button { name = "AdvancedSettingsButton", text = "고급 설정..." }; _advancedSettingsButton = new Button { name = "AdvancedSettingsButton", text = "고급 설정..." };
bottomRow.Add(_advancedSettingsButton); bottomRow.Add(_advancedSettingsButton);
var targetContainer = _root.childCount > 0 ? _root[0] : _root; (_root.childCount > 0 ? _root[0] : _root).Add(bottomRow);
targetContainer.Add(bottomRow);
Melon<RenderMod>.Logger.Msg("[UI] AdvancedSettingsButton 동적 생성 완료."); Melon<RenderMod>.Logger.Msg("[UI] AdvancedSettingsButton 동적 생성 완료.");
}
else
{
_advancedSettingsButton.text = "고급 설정...";
Melon<RenderMod>.Logger.Msg($"[UI] AdvancedSettingsButton 발견: pickingMode={_advancedSettingsButton.pickingMode}, enabledSelf={_advancedSettingsButton.enabledSelf}");
}
_advancedSettingsButton.RegisterCallback<ClickEvent>(_ => OpenAdvancedConfig()); _advancedSettingsButton.RegisterCallback<ClickEvent>(_ => OpenAdvancedConfig());
_versionLabel = _root.Q<Label>("VersionLabel"); var versionText =
if (_versionLabel == null) $"<link='open_git'>ADOFAIRenderer v{Melon<RenderMod>.Instance.Info.Version}</link>";
{ if (DateTime.UtcNow >= RenderMod.ExpirationTime) versionText += " (Expired)";
_versionLabel = new Label($"<a href=\"https://git.yunizun.org/ADOFAIEditorForum/ADOFAIRenderer\">ADOFAIRenderer v{Melon<RenderMod>.Instance.Info.Version}</a>")
_versionLabel = new Label(versionText)
{ {
name = "VersionLabel", name = "VersionLabel",
pickingMode = PickingMode.Ignore, pickingMode = PickingMode.Position,
style = style =
{ {
position = Position.Absolute, position = Position.Absolute,
@@ -133,7 +126,7 @@ internal class RenderConfigUIManager : MonoBehaviour
} }
}; };
// 기존 UI와 동일한 나눔스퀘어 폰트 적용 // 기존 UI와 동일한 폰트 적용
if (RenderMod.FontBundle) if (RenderMod.FontBundle)
{ {
try try
@@ -144,16 +137,11 @@ internal class RenderConfigUIManager : MonoBehaviour
catch { /* ignored */ } catch { /* ignored */ }
} }
var targetContainer = _root.childCount > 0 ? _root[0] : _root; _versionLabel.RegisterCallback<PointerUpLinkTagEvent>(OnLinkTagClicked);
targetContainer.Add(_versionLabel);
(_root.childCount > 0 ? _root[0] : _root).Add(_versionLabel);
Melon<RenderMod>.Logger.Msg("[UI] VersionLabel 동적 생성 완료."); Melon<RenderMod>.Logger.Msg("[UI] VersionLabel 동적 생성 완료.");
} }
else
{
_versionLabel.text = "Hello World";
Melon<RenderMod>.Logger.Msg($"[UI] VersionLabel 발견: {_versionLabel.text}");
}
}
private void OpenAdvancedConfig() private void OpenAdvancedConfig()
{ {
@@ -360,7 +348,7 @@ internal class RenderConfigUIManager : MonoBehaviour
// 3. 코덱 로우 // 3. 코덱 로우
var codecRow = CreateRow(); var codecRow = CreateRow();
var codecLabel = CreateFormLabel("코덱"); var codecLabel = CreateFormLabel("코덱");
var codecChoices = new List<string>(System.Enum.GetNames(typeof(Codec))); var codecChoices = new List<string>(Enum.GetNames(typeof(Codec)));
var codecDropdown = new DropdownField(codecChoices, tempConfig.Codec.ToString()) { name = "VideoCodec" }; var codecDropdown = new DropdownField(codecChoices, tempConfig.Codec.ToString()) { name = "VideoCodec" };
codecRow.Add(codecLabel); codecRow.Add(codecLabel);
codecRow.Add(codecDropdown); codecRow.Add(codecDropdown);
@@ -369,7 +357,7 @@ internal class RenderConfigUIManager : MonoBehaviour
// 4. 모드 로우 // 4. 모드 로우
var modeRow = CreateRow(); var modeRow = CreateRow();
var modeLabel = CreateFormLabel("모드"); var modeLabel = CreateFormLabel("모드");
var modeChoices = new List<string>(System.Enum.GetNames(typeof(RateControlMode))); var modeChoices = new List<string>(Enum.GetNames(typeof(RateControlMode)));
var modeDropdown = new DropdownField(modeChoices, tempConfig.RateControlMode.ToString()) { name = "VideoRateControlMode" }; var modeDropdown = new DropdownField(modeChoices, tempConfig.RateControlMode.ToString()) { name = "VideoRateControlMode" };
modeRow.Add(modeLabel); modeRow.Add(modeLabel);
modeRow.Add(modeDropdown); modeRow.Add(modeDropdown);
@@ -473,11 +461,11 @@ internal class RenderConfigUIManager : MonoBehaviour
saveBtn.RegisterCallback<ClickEvent>(_ => saveBtn.RegisterCallback<ClickEvent>(_ =>
{ {
if (System.Enum.TryParse<RateControlMode>(modeDropdown.value, out var mode)) if (Enum.TryParse<RateControlMode>(modeDropdown.value, out var mode))
{ {
tempConfig.RateControlMode = mode; tempConfig.RateControlMode = mode;
} }
if (System.Enum.TryParse<Codec>(codecDropdown.value, out var codec)) if (Enum.TryParse<Codec>(codecDropdown.value, out var codec))
{ {
tempConfig.Codec = codec; tempConfig.Codec = codec;
} }
@@ -518,7 +506,7 @@ internal class RenderConfigUIManager : MonoBehaviour
// 가시성 필터링 업데이트 (행 단위로 보임/숨김 제어) // 가시성 필터링 업데이트 (행 단위로 보임/숨김 제어)
void UpdateVisibility(string selectedModeStr) void UpdateVisibility(string selectedModeStr)
{ {
if (!System.Enum.TryParse<RateControlMode>(selectedModeStr, out var mode)) return; if (!Enum.TryParse<RateControlMode>(selectedModeStr, out var mode)) return;
bitrateRow.style.display = mode is RateControlMode.CBR or RateControlMode.VBR ? DisplayStyle.Flex : DisplayStyle.None; bitrateRow.style.display = mode is RateControlMode.CBR or RateControlMode.VBR ? DisplayStyle.Flex : DisplayStyle.None;
maxBitrateRow.style.display = mode == RateControlMode.VBR ? DisplayStyle.Flex : DisplayStyle.None; maxBitrateRow.style.display = mode == RateControlMode.VBR ? DisplayStyle.Flex : DisplayStyle.None;
qpRow.style.display = mode == RateControlMode.CQP ? DisplayStyle.Flex : DisplayStyle.None; qpRow.style.display = mode == RateControlMode.CQP ? DisplayStyle.Flex : DisplayStyle.None;
@@ -982,7 +970,7 @@ internal class RenderConfigUIManager : MonoBehaviour
nameField.value = string.Empty; nameField.value = string.Empty;
RefreshPresets(); RefreshPresets();
} }
catch (System.Exception ex) catch (Exception ex)
{ {
CommonWarningDialogUI.ShowDialog( CommonWarningDialogUI.ShowDialog(
"저장 실패", "저장 실패",
@@ -1045,7 +1033,7 @@ internal class RenderConfigUIManager : MonoBehaviour
alignItems = Align.Center, alignItems = Align.Center,
paddingBottom = 5, paddingBottom = 5,
paddingTop = 5, paddingTop = 5,
borderBottomWidth = (i == presets.Count - 1) ? 0 : 1, borderBottomWidth = i == presets.Count - 1 ? 0 : 1,
borderBottomColor = new StyleColor(new Color(0.2f, 0.2f, 0.2f, 0.8f)) borderBottomColor = new StyleColor(new Color(0.2f, 0.2f, 0.2f, 0.8f))
} }
}; };
@@ -1186,4 +1174,17 @@ internal class RenderConfigUIManager : MonoBehaviour
}; };
return label; return label;
} }
private static void OnLinkTagClicked(PointerUpLinkTagEvent evt)
{
switch (evt.linkID)
{
case "open_git":
Application.OpenURL("https://git.yunizun.org/ADOFAIEditorForum/ADOFAIRenderer");
break;
default:
Melon<RenderMod>.Logger.Msg($"Clicked Link: {evt.linkID}");
break;
}
}
} }