Пример #1
0
        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);
        }
Пример #2
0
 public TilesetInfo this[int id]
 {
     get
     {
         ObjectEditor.Struct item = content[id] as ObjectEditor.Struct;
         return(Build(item));
     }
 }
Пример #3
0
        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)));
            }
        }
Пример #4
0
        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);
        }
Пример #5
0
 protected abstract TilesetInfo Build(ObjectEditor.Struct item);
Пример #6
0
        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));
        }