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
@@ -0,0 +1,103 @@
using System;
using System.ComponentModel;
using System.Globalization;
using PCL.Core.UI.Animation.Easings;
namespace PCL.Core.UI.Converters;
public class EasingConverter : TypeConverter
{
public override bool CanConvertFrom(ITypeDescriptorContext? context, Type sourceType) =>
sourceType == typeof(string) || base.CanConvertFrom(context, sourceType);
public override bool CanConvertTo(ITypeDescriptorContext? context, Type? destinationType) =>
destinationType == typeof(string) || base.CanConvertTo(context, destinationType);
public override object? ConvertFrom(ITypeDescriptorContext? context, CultureInfo? culture, object value)
{
if (value is string s)
{
return s switch
{
"BackEaseIn" => new BackEaseIn(),
"BackEaseOut" => new BackEaseOut(),
"BackEaseInOut" => new BackEaseInOut(),
"BounceEaseIn" => new BounceEaseIn(),
"BounceEaseOut" => new BounceEaseOut(),
"BounceEaseInOut" => new BounceEaseInOut(),
"CircularEaseIn" => new CircularEaseIn(),
"CircularEaseOut" => new CircularEaseOut(),
"CircularEaseInOut" => new CircularEaseInOut(),
"CubicEaseIn" => new CubicEaseIn(),
"CubicEaseOut" => new CubicEaseOut(),
"CubicEaseInOut" => new CubicEaseInOut(),
"ElasticEaseIn" => new ElasticEaseIn(),
"ElasticEaseOut" => new ElasticEaseOut(),
"ElasticEaseInOut" => new ElasticEaseInOut(),
"ExponentialEaseIn" => new ExponentialEaseIn(),
"ExponentialEaseOut" => new ExponentialEaseOut(),
"ExponentialEaseInOut" => new ExponentialEaseInOut(),
"LinearEasing" => new LinearEasing(),
"QuadEaseIn" => new QuadEaseIn(),
"QuadEaseOut" => new QuadEaseOut(),
"QuadEaseInOut" => new QuadEaseInOut(),
"QuarticEaseIn" => new QuarticEaseIn(),
"QuarticEaseOut" => new QuarticEaseOut(),
"QuarticEaseInOut" => new QuarticEaseInOut(),
"QuinticEaseIn" => new QuinticEaseIn(),
"QuinticEaseOut" => new QuinticEaseOut(),
"QuinticEaseInOut" => new QuinticEaseInOut(),
"SineEaseIn" => new SineEaseIn(),
"SineEaseOut" => new SineEaseOut(),
"SineEaseInOut" => new SineEaseInOut(),
_ => throw new NotSupportedException($"不支持的缓动: {s}")
};
}
return base.ConvertFrom(context, culture, value);
}
public override object? ConvertTo(ITypeDescriptorContext? context, CultureInfo? culture, object? value, Type destinationType)
{
if (destinationType == typeof(string) && value is IEasing easing)
{
return easing switch
{
BackEaseIn => "BackEaseIn",
BackEaseOut => "BackEaseOut",
BackEaseInOut => "BackEaseInOut",
BounceEaseIn => "BounceEaseIn",
BounceEaseOut => "BounceEaseOut",
BounceEaseInOut => "BounceEaseInOut",
CircularEaseIn => "CircularEaseIn",
CircularEaseOut => "CircularEaseOut",
CircularEaseInOut => "CircularEaseInOut",
CubicEaseIn => "CubicEaseIn",
CubicEaseOut => "CubicEaseOut",
CubicEaseInOut => "CubicEaseInOut",
ElasticEaseIn => "ElasticEaseIn",
ElasticEaseOut => "ElasticEaseOut",
ElasticEaseInOut => "ElasticEaseInOut",
ExponentialEaseIn => "ExponentialEaseIn",
ExponentialEaseOut => "ExponentialEaseOut",
ExponentialEaseInOut => "ExponentialEaseInOut",
LinearEasing => "LinearEasing",
QuadEaseIn => "QuadEaseIn",
QuadEaseOut => "QuadEaseOut",
QuadEaseInOut => "QuadEaseInOut",
QuarticEaseIn => "QuarticEaseIn",
QuarticEaseOut => "QuarticEaseOut",
QuarticEaseInOut => "QuarticEaseInOut",
QuinticEaseIn => "QuinticEaseIn",
QuinticEaseOut => "QuinticEaseOut",
QuinticEaseInOut => "QuinticEaseInOut",
SineEaseIn => "SineEaseIn",
SineEaseOut => "SineEaseOut",
SineEaseInOut => "SineEaseInOut",
_ => throw new NotSupportedException($"不支持的缓动: {easing.GetType().Name}")
};
}
return base.ConvertTo(context, culture, value, destinationType);
}
}