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 frames = new List(); [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 elements = new Dictionary(); [PropertyList] public Dictionary properties = new Dictionary(); 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; } } } }