SHA256
Add Expiration Date
This commit is contained in:
2 files changed
+65
-61
No files matched your search
+5
-2
@@ -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
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user