protected override TilesetInfo Build(ObjectEditor.Struct item) { List <System.Drawing.Image> images = new List <System.Drawing.Image>(); if (item["@tileset_names"] is RubyArray) { foreach (object name in item["@tileset_names"] as RubyArray) { if (name is string) { images.Add(ResourceManager.Caches["Graphics/Tilesets"][name as string] as System.Drawing.Image); } else if (name is RubyString) { images.Add(ResourceManager.Caches["Graphics/Tilesets"][(name as RubyString).Text] as System.Drawing.Image); } else { images.Add(null); } } } TilesetInfo info = new TilesetInfoVA(images); return(info); }
public TilesetInfo this[int id] { get { ObjectEditor.Struct item = content[id] as ObjectEditor.Struct; return(Build(item)); } }
public override AbstractEditor CreateEditor() { ObjectEditor.StructField[] fields = new NekoKun.ObjectEditor.StructField[this.fields.Count]; this.fields.Values.CopyTo(fields, 0); Dictionary <string, object> param = new Dictionary <string, object>(); param["Views"] = this.views; if (this.arrayMode) { var array = new ObjectEditor.ArrayEditor(new ObjectEditor.StructEditor(param, fields)); array.ClipboardFormat = this.clipboardFormat; array.LoadObject = (item) => { var ms = new System.IO.MemoryStream(item); ms.Seek(4, System.IO.SeekOrigin.Begin); return(LoadItem((NekoKun.Serialization.RubyMarshal.RubyMarshal.Load(ms) as RubyArray)[0])); }; array.DumpObject = (item) => { var ms = new System.IO.MemoryStream(); ms.WriteByte(0); ms.WriteByte(0); ms.WriteByte(0); ms.WriteByte(0); NekoKun.Serialization.RubyMarshal.RubyMarshal.Dump(ms, new RubyArray(new List <object>() { this.CreateRubyObject(this.className, item as ObjectEditor.Struct) })); ms.Seek(0, System.IO.SeekOrigin.Begin); System.IO.BinaryWriter bw = new System.IO.BinaryWriter(ms); bw.Write((int)ms.Length - 4); return(ms.ToArray()); }; array.CreateDefaultObject = () => { ObjectEditor.Struct obj = new ObjectEditor.Struct(); foreach (var item in this.fields.Values) { obj[item] = item.DefaultValue; } return(obj); }; return(new ObjectEditor.ObjectFileEditor(this, array)); } else { return(new ObjectEditor.ObjectFileEditor(this, new ObjectEditor.StructEditor(param, fields))); } }
private RubyObject CreateRubyObject(string className, ObjectEditor.Struct item) { RubyObject obj = new RubyObject(); obj.ClassName = RubySymbol.GetSymbol(className); foreach (var kv in item) { if (kv.Key.ID.StartsWith("@")) { obj.InstanceVariables[RubySymbol.GetSymbol(kv.Key.ID)] = kv.Value; } } return(obj); }
protected abstract TilesetInfo Build(ObjectEditor.Struct item);
public override AbstractEditor CreateEditor() { ObjectEditor.StructField[] fields = new NekoKun.ObjectEditor.StructField[this.fields.Count]; this.fields.Values.CopyTo(fields, 0); Dictionary<string, object> param = new Dictionary<string, object>(); param["Views"] = this.views; if (this.arrayMode) { var array = new ObjectEditor.ArrayEditor(new ObjectEditor.StructEditor(param, fields)); array.ClipboardFormat = this.clipboardFormat; array.LoadObject = (item) => { var ms = new System.IO.MemoryStream(item); ms.Seek(4, System.IO.SeekOrigin.Begin); return LoadItem((NekoKun.Serialization.RubyMarshal.RubyMarshal.Load(ms) as RubyArray)[0]); }; array.DumpObject = (item) => { var ms = new System.IO.MemoryStream(); ms.WriteByte(0); ms.WriteByte(0); ms.WriteByte(0); ms.WriteByte(0); NekoKun.Serialization.RubyMarshal.RubyMarshal.Dump(ms, new RubyArray(new List<object>() { this.CreateRubyObject(this.className, item as ObjectEditor.Struct) })); ms.Seek(0, System.IO.SeekOrigin.Begin); System.IO.BinaryWriter bw = new System.IO.BinaryWriter(ms); bw.Write((int)ms.Length - 4); return ms.ToArray(); }; array.CreateDefaultObject = () => { ObjectEditor.Struct obj = new ObjectEditor.Struct(); foreach (var item in this.fields.Values) { obj[item] = item.DefaultValue; } return obj; }; return new ObjectEditor.ObjectFileEditor(this, array); } else return new ObjectEditor.ObjectFileEditor(this, new ObjectEditor.StructEditor(param, fields)); }