添加项目文件。

This commit is contained in:
OLDREDSTONE
2025-02-26 10:55:02 +08:00
parent 28e70f8234
commit 0672aeb5d5
11 changed files with 563 additions and 0 deletions
+147
View File
@@ -0,0 +1,147 @@
using RhythmBase.Components;
using System.Diagnostics.CodeAnalysis;
namespace RDTKEditor.Models
{
internal enum RDPropertyType
{
Bool,
Integer,
Float,
Expression,
IntegerPair,
FloatPair,
ExpressionPair,
String,
Color,
Enum,
}
internal interface IRDTKPropertyVerifier
{
RDPropertyType Type { get; }
bool TryParse(string value, out object result);
string ToString(object value);
}
internal class RDTKPropertyVerifierEnum(Type enumType) : IRDTKPropertyVerifier
{
public RDPropertyType Type => RDPropertyType.Enum;
public Type EnumType { get; set; } = enumType;
public bool TryParse(string value, out object result)
{
if (Enum.TryParse(EnumType, value, out object v))
{
result = v;
return true;
}
result = null;
return false;
}
public string ToString(object value) => value?.ToString() ?? "null";
}
internal class RDTKPropertyVerifierBool : IRDTKPropertyVerifier
{
public RDPropertyType Type => RDPropertyType.Bool;
public bool TryParse(string value, out object result)
{
var t = bool.TryParse(value, out bool v);
result = v;
return t;
}
public string ToString(object value) => (bool)value ? "true" : "false";
}
internal class RDTKPropertyVerifierDefault : IRDTKPropertyVerifier
{
public RDPropertyType Type { get; set; }
public bool TryParse(string value, out object result)
{
result = value;
return true;
}
public string ToString(object value) => value?.ToString() ?? "null";
}
internal struct RDTKProperty(object value)
{
public event EventHandler<object?>? PropertyChanged = null;
private object _value = value;
public string Name { get; set; } = "";
public string Description { get; set; } = "";
public RDPropertyType Type { get; set; }
public IRDTKPropertyVerifier Verifier { get; set; } = new RDTKPropertyVerifierDefault();
public string Value
{
readonly get => Verifier.ToString(_value);
set
{
if (Verifier.TryParse(value, out object result))
{
_value = result;
}
}
}
public void OnChanged(object value)
{
if (_value == value) return;
if (Verifier.TryParse(value?.ToString()??"", out object result))
{
_value = result;
PropertyChanged?.Invoke(this, value);
}
}
}
internal class RDTKView
{
private RDLevel? Level { get; set; }
public RDTKView()
{
}
public RDTKViewMessage UpdateLevelByPath(string path)
{
try
{
Level = RDLevel.Read(path);
return new()
{
Message = "关卡已加载。",
Level = RDTKViewMessageLevel.Info,
Details = $"关卡路径:{path}",
};
}
catch (Exception ex)
{
return new()
{
Message = ex.Message,
Level = RDTKViewMessageLevel.Error,
Details = ex.StackTrace ?? "",
};
}
}
public RDTKViewMessage SaveLevelByPath(string path)
{
try
{
Level?.Write(path);
return new()
{
Message = "关卡已加载。",
Level = RDTKViewMessageLevel.Info,
Details = $"关卡路径:{path}",
};
}
catch (Exception ex)
{
return new()
{
Message = ex.Message,
Level = RDTKViewMessageLevel.Error,
Details = ex.StackTrace ?? "",
};
}
}
}
}
+10
View File
@@ -0,0 +1,10 @@
namespace RDTKEditor.Models
{
internal struct RDTKViewMessage()
{
public string Message { get; set; } = "";
public RDTKViewMessageLevel Level { get; set; }
public string Details { get; set; } = "";
public DateTime TimeStamp { get; } = DateTime.Now;
}
}
+10
View File
@@ -0,0 +1,10 @@
namespace RDTKEditor.Models
{
internal enum RDTKViewMessageLevel
{
None = 0,
Info = 1,
Warning = 2,
Error = 3,
}
}