Files
crtr/Assets/Cryville/Crtr/Skin.cs
2023-01-27 15:31:51 +08:00

65 lines
1.4 KiB
C#

using Cryville.Common.Pdt;
using Cryville.Crtr.Browsing;
using Newtonsoft.Json;
using System.Collections.Generic;
using System.IO;
using System.Text;
namespace Cryville.Crtr {
public class Skin : MetaInfo {
public const long CURRENT_FORMAT = 2;
[JsonRequired]
public long format;
public string @base;
[JsonRequired]
public string ruleset;
public List<string> frames = new List<string>();
[JsonIgnore]
public PdtSkin Root { get; private set; }
public void LoadPdt(DirectoryInfo dir) {
using (StreamReader pdtreader = new StreamReader(dir.FullName + "/" + data + ".pdt", Encoding.UTF8)) {
var src = pdtreader.ReadToEnd();
Root = (PdtSkin)new SkinInterpreter(src, null).Interpret();
}
}
}
public class PdtSkin : SkinElement { }
public class SkinElement {
[ElementList]
public Dictionary<SkinSelectors, SkinElement> elements
= new Dictionary<SkinSelectors, SkinElement>();
[PropertyList]
public Dictionary<SkinPropertyKey, PdtExpression> properties
= new Dictionary<SkinPropertyKey, PdtExpression>();
public bool IsDynamic {
get;
private set;
}
public void Optimize(PdtEvaluatorBase etor) {
IsDynamic = true;
foreach (var e in properties.Values) {
etor.Optimize(e);
if (!e.IsConstant)
IsDynamic = true;
}
foreach (var e in elements) {
e.Key.Optimize(etor);
e.Value.Optimize(etor);
if (e.Value.IsDynamic)
IsDynamic = true;
}
}
}
}