初始化 monorepo: Go后端(7微服务) + Unity客户端(9模块) + 启动器 HTML5原型: Three.js 3D体素世界, Perlin噪声地形, 原版材质, 22种方块 Minecraft创造模式背包: 双栏布局, 拖拽移动物品, 方向性元件引脚 AI助搭策划文档 + 客户端/服务端骨架 + Docker Compose + CI
This commit is contained in:
@@ -0,0 +1,339 @@
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using PCL.Core.App;
|
||||
using PCL.Core.App.Localization;
|
||||
|
||||
namespace PCL;
|
||||
|
||||
public partial class PageInstanceLeft : IRefreshable
|
||||
{
|
||||
/// <summary>
|
||||
/// 当前显示设置的 MC 实例。
|
||||
/// </summary>
|
||||
public static McInstance McInstance = null;
|
||||
|
||||
public PageInstanceLeft()
|
||||
{
|
||||
InitializeComponent();
|
||||
Loaded += (_, _) => RefreshModDisabled();
|
||||
}
|
||||
|
||||
public void Refresh()
|
||||
{
|
||||
Refresh(ModMain.frmMain.PageCurrentSub);
|
||||
}
|
||||
|
||||
public void RefreshModDisabled()
|
||||
{
|
||||
var hide = Config.Preference.Hide;
|
||||
|
||||
if (McInstance is not null && McInstance.Modable)
|
||||
{
|
||||
ItemMod.Visibility = !PageSetupUI.HiddenForceShow && hide.InstanceMod
|
||||
? Visibility.Collapsed
|
||||
: Visibility.Visible;
|
||||
ItemModDisabled.Visibility = Visibility.Collapsed;
|
||||
}
|
||||
else
|
||||
{
|
||||
ItemMod.Visibility = Visibility.Collapsed;
|
||||
ItemModDisabled.Visibility = !PageSetupUI.HiddenForceShow && hide.InstanceMod
|
||||
? Visibility.Collapsed
|
||||
: Visibility.Visible;
|
||||
}
|
||||
|
||||
// 功能隐藏
|
||||
if (!PageSetupUI.HiddenForceShow)
|
||||
{
|
||||
var disableCount = 0;
|
||||
if (hide.InstanceSave)
|
||||
disableCount += 1;
|
||||
if (hide.InstanceScreenshot)
|
||||
disableCount += 1;
|
||||
if (hide.InstanceMod)
|
||||
disableCount += 1;
|
||||
if (hide.InstanceResourcePack)
|
||||
disableCount += 1;
|
||||
if (hide.InstanceShader)
|
||||
disableCount += 1;
|
||||
if (hide.InstanceSchematic)
|
||||
disableCount += 1;
|
||||
if (hide.InstanceServer)
|
||||
disableCount += 1;
|
||||
if (disableCount == 7)
|
||||
TextResource.Visibility = Visibility.Collapsed;
|
||||
else
|
||||
TextResource.Visibility = Visibility.Visible;
|
||||
}
|
||||
else
|
||||
{
|
||||
TextResource.Visibility = Visibility.Visible;
|
||||
}
|
||||
|
||||
ItemInstall.Visibility = !PageSetupUI.HiddenForceShow && hide.InstanceEdit
|
||||
? Visibility.Collapsed
|
||||
: Visibility.Visible;
|
||||
ItemExport.Visibility = !PageSetupUI.HiddenForceShow && hide.InstanceExport
|
||||
? Visibility.Collapsed
|
||||
: Visibility.Visible;
|
||||
ItemWorld.Visibility = !PageSetupUI.HiddenForceShow && hide.InstanceSave
|
||||
? Visibility.Collapsed
|
||||
: Visibility.Visible;
|
||||
ItemScreenshot.Visibility = !PageSetupUI.HiddenForceShow && hide.InstanceScreenshot
|
||||
? Visibility.Collapsed
|
||||
: Visibility.Visible;
|
||||
ItemResourcePack.Visibility = !PageSetupUI.HiddenForceShow && hide.InstanceResourcePack
|
||||
? Visibility.Collapsed
|
||||
: Visibility.Visible;
|
||||
ItemShader.Visibility = !PageSetupUI.HiddenForceShow && hide.InstanceShader
|
||||
? Visibility.Collapsed
|
||||
: Visibility.Visible;
|
||||
ItemSchematic.Visibility = !PageSetupUI.HiddenForceShow && hide.InstanceSchematic
|
||||
? Visibility.Collapsed
|
||||
: Visibility.Visible;
|
||||
ItemServer.Visibility = !PageSetupUI.HiddenForceShow && hide.InstanceServer
|
||||
? Visibility.Collapsed
|
||||
: Visibility.Visible;
|
||||
}
|
||||
|
||||
private void RefreshButton_Click(object sender, EventArgs e) // 由边栏按钮匿名调用
|
||||
{
|
||||
Refresh((FormMain.PageSubType)ModBase.Val(((MyIconButton)sender).Tag));
|
||||
}
|
||||
|
||||
public void Refresh(FormMain.PageSubType subType)
|
||||
{
|
||||
switch (subType)
|
||||
{
|
||||
case FormMain.PageSubType.VersionMod:
|
||||
{
|
||||
PageInstanceCompResource.Refresh(ModComp.CompType.Mod);
|
||||
break;
|
||||
}
|
||||
case FormMain.PageSubType.VersionScreenshot:
|
||||
{
|
||||
var ignore= PageInstanceScreenshot.RefreshAsync();
|
||||
break;
|
||||
}
|
||||
case FormMain.PageSubType.VersionWorld:
|
||||
{
|
||||
PageInstanceSaves.Refresh();
|
||||
break;
|
||||
}
|
||||
case FormMain.PageSubType.VersionResourcePack:
|
||||
{
|
||||
PageInstanceCompResource.Refresh(ModComp.CompType.ResourcePack);
|
||||
break;
|
||||
}
|
||||
case FormMain.PageSubType.VersionShader:
|
||||
{
|
||||
PageInstanceCompResource.Refresh(ModComp.CompType.Shader);
|
||||
break;
|
||||
}
|
||||
case FormMain.PageSubType.VersionSchematic:
|
||||
{
|
||||
PageInstanceCompResource.Refresh(ModComp.CompType.Schematic);
|
||||
break;
|
||||
}
|
||||
case FormMain.PageSubType.VersionInstall:
|
||||
{
|
||||
ModDownload.dlClientListLoader.Start(isForceRestart: true);
|
||||
ModDownload.dlOptiFineListLoader.Start(isForceRestart: true);
|
||||
ModDownload.dlForgeListLoader.Start(isForceRestart: true);
|
||||
ModDownload.dlNeoForgeListLoader.Start(isForceRestart: true);
|
||||
ModDownload.dlLiteLoaderListLoader.Start(isForceRestart: true);
|
||||
ModDownload.dlFabricListLoader.Start(isForceRestart: true);
|
||||
ModDownload.dlFabricApiLoader.Start(isForceRestart: true);
|
||||
ModDownload.dlOptiFabricLoader.Start(isForceRestart: true);
|
||||
ModDownload.dlLabyModListLoader.Start(isForceRestart: true);
|
||||
ItemInstall.Checked = true;
|
||||
ModMain.frmInstanceInstall.GetCurrentInfo();
|
||||
break;
|
||||
}
|
||||
case FormMain.PageSubType.VersionExport:
|
||||
{
|
||||
if (ModMain.frmInstanceExport is not null)
|
||||
ModMain.frmInstanceExport.RefreshAll();
|
||||
ItemExport.Checked = true;
|
||||
break;
|
||||
}
|
||||
case FormMain.PageSubType.VersionServer:
|
||||
{
|
||||
if (ModMain.frmInstanceServer is not null)
|
||||
ModMain.frmInstanceServer.RefreshServers();
|
||||
ItemServer.Checked = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Reset(object sender, EventArgs e)
|
||||
{
|
||||
if (ModMain.MyMsgBox(Lang.Text("Instance.Left.InitializeSettings.ConfirmMessage"),
|
||||
Lang.Text("Instance.Left.InitializeSettings.ConfirmTitle"),
|
||||
button2: Lang.Text("Common.Action.Cancel"),
|
||||
isWarn: true)
|
||||
== 1)
|
||||
{
|
||||
if (ModMain.frmInstanceSetup is null)
|
||||
ModMain.frmInstanceSetup = new PageInstanceSetup();
|
||||
ModMain.frmInstanceSetup.Reset();
|
||||
ItemSetup.Checked = true;
|
||||
}
|
||||
}
|
||||
|
||||
#region 页面切换
|
||||
|
||||
/// <summary>
|
||||
/// 当前页面的编号。从 0 开始计算。
|
||||
/// </summary>
|
||||
public FormMain.PageSubType pageID = FormMain.PageSubType.Default;
|
||||
|
||||
/// <summary>
|
||||
/// 勾选事件改变页面。
|
||||
/// </summary>
|
||||
private void PageCheck(object sender, ModBase.RouteEventArgs e)
|
||||
{
|
||||
if (sender is MyListItem item && item.Tag is not null)
|
||||
PageChange((FormMain.PageSubType)ModBase.Val(item.Tag));
|
||||
}
|
||||
|
||||
public object PageGet(FormMain.PageSubType id)
|
||||
{
|
||||
if ((int)id == -1)
|
||||
id = pageID;
|
||||
switch (id)
|
||||
{
|
||||
case FormMain.PageSubType.VersionOverall:
|
||||
{
|
||||
if (ModMain.frmInstanceOverall is null)
|
||||
ModMain.frmInstanceOverall = new PageInstanceOverall();
|
||||
return ModMain.frmInstanceOverall;
|
||||
}
|
||||
case FormMain.PageSubType.VersionMod:
|
||||
{
|
||||
if (ModMain.frmInstanceMod is null)
|
||||
ModMain.frmInstanceMod = new PageInstanceCompResource(ModComp.CompType.Mod);
|
||||
return ModMain.frmInstanceMod;
|
||||
}
|
||||
case FormMain.PageSubType.VersionModDisabled:
|
||||
{
|
||||
if (ModMain.frmInstanceModDisabled is null)
|
||||
ModMain.frmInstanceModDisabled = new PageInstanceModDisabled();
|
||||
return ModMain.frmInstanceModDisabled;
|
||||
}
|
||||
case FormMain.PageSubType.VersionSetup:
|
||||
{
|
||||
if (ModMain.frmInstanceSetup is null)
|
||||
ModMain.frmInstanceSetup = new PageInstanceSetup();
|
||||
return ModMain.frmInstanceSetup;
|
||||
}
|
||||
case FormMain.PageSubType.VersionWorld:
|
||||
{
|
||||
if (ModMain.frmInstanceSaves is null)
|
||||
ModMain.frmInstanceSaves = new PageInstanceSaves();
|
||||
return ModMain.frmInstanceSaves;
|
||||
}
|
||||
case FormMain.PageSubType.VersionScreenshot:
|
||||
{
|
||||
if (ModMain.frmInstanceScreenshot is null)
|
||||
ModMain.frmInstanceScreenshot = new PageInstanceScreenshot();
|
||||
return ModMain.frmInstanceScreenshot;
|
||||
}
|
||||
case FormMain.PageSubType.VersionResourcePack:
|
||||
{
|
||||
if (ModMain.frmInstanceResourcePack is null)
|
||||
ModMain.frmInstanceResourcePack = new PageInstanceCompResource(ModComp.CompType.ResourcePack);
|
||||
return ModMain.frmInstanceResourcePack;
|
||||
}
|
||||
case FormMain.PageSubType.VersionShader:
|
||||
{
|
||||
if (ModMain.frmInstanceShader is null)
|
||||
ModMain.frmInstanceShader = new PageInstanceCompResource(ModComp.CompType.Shader);
|
||||
return ModMain.frmInstanceShader;
|
||||
}
|
||||
case FormMain.PageSubType.VersionSchematic:
|
||||
{
|
||||
if (ModMain.frmInstanceSchematic is null)
|
||||
ModMain.frmInstanceSchematic = new PageInstanceCompResource(ModComp.CompType.Schematic);
|
||||
return ModMain.frmInstanceSchematic;
|
||||
}
|
||||
case FormMain.PageSubType.VersionInstall:
|
||||
{
|
||||
if (ModMain.frmInstanceInstall is null)
|
||||
ModMain.frmInstanceInstall = new PageInstanceInstall();
|
||||
return ModMain.frmInstanceInstall;
|
||||
}
|
||||
case FormMain.PageSubType.VersionExport:
|
||||
{
|
||||
if (ModMain.frmInstanceExport is null)
|
||||
ModMain.frmInstanceExport = new PageInstanceExport();
|
||||
return ModMain.frmInstanceExport;
|
||||
}
|
||||
case FormMain.PageSubType.VersionServer:
|
||||
{
|
||||
if (ModMain.frmInstanceServer is null)
|
||||
ModMain.frmInstanceServer = new PageInstanceServer();
|
||||
return ModMain.frmInstanceServer;
|
||||
}
|
||||
|
||||
default:
|
||||
{
|
||||
throw new Exception("未知的实例设置子页面种类:" + (int)id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 切换现有页面。
|
||||
/// </summary>
|
||||
public void PageChange(FormMain.PageSubType id)
|
||||
{
|
||||
if (pageID == id)
|
||||
return;
|
||||
ModAnimation.AniControlEnabled += 1;
|
||||
try
|
||||
{
|
||||
PageChangeRun((MyPageRight)PageGet(id));
|
||||
pageID = id;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
ModBase.Log(
|
||||
ex,
|
||||
"切换分页面失败(ID " + (int)id + ")",
|
||||
ModBase.LogLevel.Feedback,
|
||||
userSummary: Lang.Text("Instance.Error.OperationFailed"));
|
||||
}
|
||||
finally
|
||||
{
|
||||
ModAnimation.AniControlEnabled -= 1;
|
||||
}
|
||||
}
|
||||
|
||||
private static void PageChangeRun(MyPageRight target)
|
||||
{
|
||||
ModAnimation.AniStop("FrmMain PageChangeRight"); // 停止主页面的右页面切换动画,防止它与本动画一起触发多次 PageOnEnter
|
||||
if (target.Parent is not null)
|
||||
target.SetValue(ContentPresenter.ContentProperty, null);
|
||||
ModMain.frmMain.pageRight = target;
|
||||
((MyPageRight)ModMain.frmMain.PanMainRight.Child).PageOnExit();
|
||||
ModAnimation.AniStart(new[]
|
||||
{
|
||||
ModAnimation.AaCode(() =>
|
||||
{
|
||||
((MyPageRight)ModMain.frmMain.PanMainRight.Child).PageOnForceExit();
|
||||
ModMain.frmMain.PanMainRight.Child = ModMain.frmMain.pageRight;
|
||||
ModMain.frmMain.pageRight.Opacity = 0d;
|
||||
}, 130),
|
||||
ModAnimation.AaCode(() =>
|
||||
{
|
||||
// 延迟触发页面通用动画,以使得在 Loaded 事件中加载的控件得以处理
|
||||
ModMain.frmMain.pageRight.Opacity = 1d;
|
||||
ModMain.frmMain.pageRight.PageOnEnter();
|
||||
}, 30, true)
|
||||
}, "PageLeft PageChange");
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
Reference in New Issue
Block a user