feat: 项目初始化 + 3D方块世界原型 + AI助搭系统
CI / Go Backend (push) Canceled after 0s

初始化 monorepo: Go后端(7微服务) + Unity客户端(9模块) + 启动器

HTML5原型: Three.js 3D体素世界, Perlin噪声地形, 原版材质, 22种方块

Minecraft创造模式背包: 双栏布局, 拖拽移动物品, 方向性元件引脚

AI助搭策划文档 + 客户端/服务端骨架 + Docker Compose + CI
This commit is contained in:
xyou
2026-08-08 14:07:56 +08:00
parent 9500c4c80a
commit f70b061d1a
1972 changed files with 159760 additions and 6 deletions
+92
View File
@@ -0,0 +1,92 @@
using System;
using System.IO;
using PCL.Core.Utils.OS;
using Special = System.Environment.SpecialFolder;
namespace PCL.Core.App;
/// <summary>
/// Application global paths.<br/>
/// <b>NOTE</b>: The behaviors of all path strings depends on <see cref="Path"/> API provided by
/// .NET standard library. You should use <see cref="Path"/> and other APIs relative to it to process
/// any path string from this service, rather than concat paths manually.
/// </summary>
public static class Paths
{
/// <summary>
/// The default directory used for relative path combining.
/// </summary>
public static string DefaultDirectory => Basics.ExecutableDirectory;
private static string _data;
private static string _sharedData;
private static string _sharedLocalData;
private static string _temp;
/// <summary>
/// Per-instance data directory.
/// </summary>
public static string Data { get => _data; set => _data = value; }
/// <summary>
/// Shared synchronized data directory.
/// </summary>
public static string SharedData { get => _sharedData; set => _sharedData = value; }
/// <summary>
/// Shared synchronized data directory of old versions.<br/>
/// Keep the value just for migration, DO NOT USE IT.
/// </summary>
public static string OldSharedData { get; set; }
/// <summary>
/// Shared local data directory, used to put some large files that can be released or downloaded back anytime.
/// </summary>
public static string SharedLocalData { get => _sharedLocalData; set => _sharedLocalData = value; }
/// <summary>
/// Temporary files directory (can be deleted anytime, except when the program is running).
/// </summary>
public static string Temp { get => _temp; set => _temp = value; }
/// <summary>
/// Get path string relative to a special folder.
/// </summary>
/// <param name="folder">the special folder</param>
/// <param name="relative">the relative path</param>
/// <returns>the path string relative to the special folder</returns>
public static string GetSpecialPath(Special folder, string relative)
{
var folderPath = Environment.GetFolderPath(folder);
return Path.Combine(folderPath, relative);
}
static Paths()
{
#if DEBUG
const string name = "PCLCE_Debug";
const string oldName = ".PCLCEDebug";
#else
const string name = "PCLCE";
const string oldName = ".PCLCE";
#endif
// fill paths
_data = Path.Combine(DefaultDirectory, "PCL");
_sharedData = GetSpecialPath(Special.ApplicationData, name);
_sharedLocalData = GetSpecialPath(Special.LocalApplicationData, name);
_temp = Path.Combine(Path.GetTempPath(), name);
OldSharedData = GetSpecialPath(Special.ApplicationData, oldName);
#if DEBUG
// read environment variables
EnvironmentInterop.ReadVariable("PCL_PATH", ref _data);
EnvironmentInterop.ReadVariable("PCL_PATH_SHARED", ref _sharedData);
EnvironmentInterop.ReadVariable("PCL_PATH_LOCAL", ref _sharedLocalData);
EnvironmentInterop.ReadVariable("PCL_PATH_TEMP", ref _temp);
#endif
// create directories
Directory.CreateDirectory(_data);
Directory.CreateDirectory(_sharedData);
Directory.CreateDirectory(_sharedLocalData);
Directory.CreateDirectory(_temp);
}
}