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
+65 -61

No files matched your search

+5 -2
View File
@@ -1,3 +1,4 @@
using System;
using ADOFAIRenderer;
using ADOFAIRenderer.Core;
using ADOFAIRenderer.Util;
@@ -6,8 +7,9 @@ using MelonLoader;
using MelonLoader.Utils;
using UnityEngine;
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")]
namespace ADOFAIRenderer
@@ -21,6 +23,7 @@ namespace ADOFAIRenderer
public static AssetBundle ShaderBundle = null!;
public static ComputeShader ColorConversionShader = null!;
public static bool IsFeatureDisabled = false;
public static DateTime ExpirationTime = new(2026, 09, 21, 0, 0, 0, DateTimeKind.Utc);
public override void OnInitializeMelon()
{
@@ -47,7 +50,7 @@ namespace ADOFAIRenderer
ColorConversionShader = ShaderBundle.LoadAsset<ComputeShader>("ColorConversion");
Melon<RenderMod>.Logger.Msg("컬러 변환 Compute Shader 로드 완료.");
}
catch (System.Exception ex)
catch (Exception ex)
{
Melon<RenderMod>.Logger.Warning($"Shader 에셋번들을 로드할 수 없습니다. GPU 컬러 변환이 비활성화되며 CPU로 폴백합니다. 에러: {ex.Message}");
}
+60 -59
View File
@@ -1,3 +1,4 @@
using System;
using System.Collections.Generic;
using ADOFAIRenderer.Core;
using ADOFAIRenderer.Data;
@@ -6,6 +7,7 @@ using ADOFAIRenderer.Util.FFmpeg;
using MelonLoader;
using UnityEngine;
using UnityEngine.UIElements;
using UnityEngine.UIElements.Experimental;
namespace ADOFAIRenderer.UI;
@@ -90,69 +92,55 @@ internal class RenderConfigUIManager : MonoBehaviour
Melon<RenderMod>.Logger.Error("Button 'PresetSettingsButton'을(를) 찾을 수 없습니다.");
}
_advancedSettingsButton = _root.Q<Button>("AdvancedSettingsButton");
if (_advancedSettingsButton == null)
{
var bottomRow = CreateRow();
bottomRow.pickingMode = PickingMode.Ignore;
bottomRow.style.position = Position.Absolute;
bottomRow.style.right = 0f;
bottomRow.style.bottom = 0f;
bottomRow.style.justifyContent = Justify.FlexEnd;
var bottomRow = CreateRow();
bottomRow.pickingMode = PickingMode.Ignore;
bottomRow.style.position = Position.Absolute;
bottomRow.style.right = 0f;
bottomRow.style.bottom = 0f;
bottomRow.style.justifyContent = Justify.FlexEnd;
_advancedSettingsButton = new Button { name = "AdvancedSettingsButton", text = "고급 설정..." };
bottomRow.Add(_advancedSettingsButton);
_advancedSettingsButton = new Button { name = "AdvancedSettingsButton", text = "고급 설정..." };
bottomRow.Add(_advancedSettingsButton);
var targetContainer = _root.childCount > 0 ? _root[0] : _root;
targetContainer.Add(bottomRow);
Melon<RenderMod>.Logger.Msg("[UI] AdvancedSettingsButton 동적 생성 완료.");
}
else
{
_advancedSettingsButton.text = "고급 설정...";
Melon<RenderMod>.Logger.Msg($"[UI] AdvancedSettingsButton 발견: pickingMode={_advancedSettingsButton.pickingMode}, enabledSelf={_advancedSettingsButton.enabledSelf}");
}
(_root.childCount > 0 ? _root[0] : _root).Add(bottomRow);
Melon<RenderMod>.Logger.Msg("[UI] AdvancedSettingsButton 동적 생성 완료.");
_advancedSettingsButton.RegisterCallback<ClickEvent>(_ => OpenAdvancedConfig());
_versionLabel = _root.Q<Label>("VersionLabel");
if (_versionLabel == null)
{
_versionLabel = new Label($"<a href=\"https://git.yunizun.org/ADOFAIEditorForum/ADOFAIRenderer\">ADOFAIRenderer v{Melon<RenderMod>.Instance.Info.Version}</a>")
{
name = "VersionLabel",
pickingMode = PickingMode.Ignore,
style =
{
position = Position.Absolute,
left = 25f, bottom = 25f,
fontSize = 24f,
paddingTop = 0, paddingBottom = 0, paddingLeft = 0, paddingRight = 0,
marginTop = 0, marginBottom = 0, marginLeft = 0, marginRight = 0,
color = new StyleColor(new Color(0f, 0f, 0f, 0.3f))
}
};
var versionText =
$"<link='open_git'>ADOFAIRenderer v{Melon<RenderMod>.Instance.Info.Version}</link>";
if (DateTime.UtcNow >= RenderMod.ExpirationTime) versionText += " (Expired)";
// 기존 UI와 동일한 나눔스퀘어 폰트 적용
if (RenderMod.FontBundle)
_versionLabel = new Label(versionText)
{
name = "VersionLabel",
pickingMode = PickingMode.Position,
style =
{
try
{
var font = RenderMod.FontBundle.LoadAsset<Font>("NanumSquareNeoOTF-Bd");
if (font) { _versionLabel.style.unityFontDefinition = FontDefinition.FromFont(font); }
}
catch { /* ignored */ }
position = Position.Absolute,
left = 25f, bottom = 25f,
fontSize = 24f,
paddingTop = 0, paddingBottom = 0, paddingLeft = 0, paddingRight = 0,
marginTop = 0, marginBottom = 0, marginLeft = 0, marginRight = 0,
color = new StyleColor(new Color(0f, 0f, 0f, 0.3f))
}
};
var targetContainer = _root.childCount > 0 ? _root[0] : _root;
targetContainer.Add(_versionLabel);
Melon<RenderMod>.Logger.Msg("[UI] VersionLabel 동적 생성 완료.");
}
else
// 기존 UI와 동일한 폰트 적용
if (RenderMod.FontBundle)
{
_versionLabel.text = "Hello World";
Melon<RenderMod>.Logger.Msg($"[UI] VersionLabel 발견: {_versionLabel.text}");
try
{
var font = RenderMod.FontBundle.LoadAsset<Font>("NanumSquareNeoOTF-Bd");
if (font) { _versionLabel.style.unityFontDefinition = FontDefinition.FromFont(font); }
}
catch { /* ignored */ }
}
_versionLabel.RegisterCallback<PointerUpLinkTagEvent>(OnLinkTagClicked);
(_root.childCount > 0 ? _root[0] : _root).Add(_versionLabel);
Melon<RenderMod>.Logger.Msg("[UI] VersionLabel 동적 생성 완료.");
}
private void OpenAdvancedConfig()
@@ -360,7 +348,7 @@ internal class RenderConfigUIManager : MonoBehaviour
// 3. 코덱 로우
var codecRow = CreateRow();
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" };
codecRow.Add(codecLabel);
codecRow.Add(codecDropdown);
@@ -369,7 +357,7 @@ internal class RenderConfigUIManager : MonoBehaviour
// 4. 모드 로우
var modeRow = CreateRow();
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" };
modeRow.Add(modeLabel);
modeRow.Add(modeDropdown);
@@ -473,11 +461,11 @@ internal class RenderConfigUIManager : MonoBehaviour
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;
}
if (System.Enum.TryParse<Codec>(codecDropdown.value, out var codec))
if (Enum.TryParse<Codec>(codecDropdown.value, out var codec))
{
tempConfig.Codec = codec;
}
@@ -518,7 +506,7 @@ internal class RenderConfigUIManager : MonoBehaviour
// 가시성 필터링 업데이트 (행 단위로 보임/숨김 제어)
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;
maxBitrateRow.style.display = mode == RateControlMode.VBR ? 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;
RefreshPresets();
}
catch (System.Exception ex)
catch (Exception ex)
{
CommonWarningDialogUI.ShowDialog(
"저장 실패",
@@ -1045,7 +1033,7 @@ internal class RenderConfigUIManager : MonoBehaviour
alignItems = Align.Center,
paddingBottom = 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))
}
};
@@ -1186,4 +1174,17 @@ internal class RenderConfigUIManager : MonoBehaviour
};
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;
}
}
}