Beispiel #1
0
        public InstanceTree LoadData(Stream stream)
        {
            InstanceTree   tree     = new InstanceTree();
            StructInstance instance = new StructInstance(this, tree, stream, stream.Position);

            tree.AddChild(instance);
            return(tree);
        }
Beispiel #2
0
        public virtual int GetInstanceDataSize(StructCell cell, StructInstance instance)
        {
            int?cellSize = instance.GetCellSize(cell);

            if (cellSize.HasValue)
            {
                return(cellSize.Value);
            }
            return(GetDataSize());
        }
Beispiel #3
0
 public StructInstance(StructDef def, InstanceTreeNode parent, Stream stream, 
     StructInstance followInstance, bool followChildren)
 {
     SequenceIndex = -1;
     _def = def;
     _parent = parent;
     _stream = stream;
     _followInstance = followInstance;
     _followChildren = followChildren;
 }
Beispiel #4
0
 protected void LoadChildFields(BinaryReader reader, StructInstance instance)
 {
     foreach (StructField field in ChildFields)
     {
         if (!field.IsLinked)
         {
             field.LoadData(reader, instance);
         }
     }
 }
Beispiel #5
0
 public StructInstance(StructDef def, InstanceTreeNode parent, Stream stream,
                       StructInstance followInstance, bool followChildren)
 {
     SequenceIndex   = -1;
     _def            = def;
     _parent         = parent;
     _stream         = stream;
     _followInstance = followInstance;
     _followChildren = followChildren;
 }
Beispiel #6
0
 public override Image Decode(Stream inputStream, StructInstance instance)
 {
     var metaInstance = (StructInstance) instance.Parent.Parent.Children[0].Children[0];
     int width = metaInstance.EvaluateSymbol("SceneWidth").ToInt32(CultureInfo.CurrentCulture);
     int height = metaInstance.EvaluateSymbol("SceneHeight").ToInt32(CultureInfo.CurrentCulture);
     byte[] pixelData = new byte[width*height];
     instance.Stream.Read(pixelData, 0, width*height);
     Color[] palette = LoadPalette(metaInstance);
     return CreateBitmapWithPalette(width, height, pixelData, palette);
 }
Beispiel #7
0
 private static Color[] LoadPalette(StructInstance instance)
 {
     var colorCount = instance.EvaluateSymbol("PaletteColors").ToInt32(CultureInfo.CurrentCulture);
     instance.Stream.Seek(instance.Offset + 6, SeekOrigin.Begin);
     var result = new Color[colorCount+4];
     result[0] = Color.FromArgb(0, 0, 0);
     result[1] = Color.FromArgb(0x54, 0x54, 0x54);
     result[2] = Color.FromArgb(0xb4, 0xb4, 0xb4);
     result[3] = Color.FromArgb(0xff, 0xff, 0xff);
     for(int i=0; i<colorCount; i++)
     {
         int r = instance.Stream.ReadByte();
         int g = instance.Stream.ReadByte();
         int b = instance.Stream.ReadByte();
         instance.Stream.Seek(3, SeekOrigin.Current);
         result[i+4] = Color.FromArgb(r*4, g*4, b*4);
     }
     return result;
 }
Beispiel #8
0
 public InstanceTree LoadData(Stream stream)
 {
     InstanceTree tree = new InstanceTree();
     StructInstance instance = new StructInstance(this, tree, stream, stream.Position);
     tree.AddChild(instance);
     return tree;
 }
Beispiel #9
0
 public DependencyTrackingContext(StructInstance instance, StructCell cell)
     : base(instance)
 {
     _instance = instance;
     _cell     = cell;
 }
Beispiel #10
0
 public ExprCell(StructField def, StructInstance instance, Expression expression) : base(def)
 {
     _instance   = instance;
     _expression = expression;
 }
Beispiel #11
0
 public int GetDataSize(StructInstance instance)
 {
     return(_def.GetInstanceDataSize(this, instance));
 }
Beispiel #12
0
 protected void AddCell(StructInstance instance, IConvertible value, string displayValue, int offset)
 {
     instance.AddCell(new ValueCell(this, value, displayValue, offset), _hidden);
 }
Beispiel #13
0
 protected void AddCell(StructInstance instance, Expression expr)
 {
     instance.AddCell(new ExprCell(this, instance, expr), _hidden);
 }
Beispiel #14
0
 protected void AddCell(StructInstance instance, IConvertible value, string displayValue, int offset)
 {
     instance.AddCell(new ValueCell(this, value, displayValue, offset), _hidden);
 }
Beispiel #15
0
 public abstract void LoadData(BinaryReader reader, StructInstance instance);
Beispiel #16
0
 protected void LoadChildFields(BinaryReader reader, StructInstance instance)
 {
     foreach (StructField field in ChildFields)
     {
         if (!field.IsLinked)
             field.LoadData(reader, instance);
     }
 }
Beispiel #17
0
 protected void AddCell(StructInstance instance, Expression expr)
 {
     instance.AddCell(new ExprCell(this, instance, expr), _hidden);
 }
Beispiel #18
0
        public void LoadInstanceData(StructInstance instance, Stream stream)
        {
            BinaryReader reader = new BinaryReader(stream);
            foreach (StructField field in _fields)
            {
                if (field.IsLinked) continue;

                try
                {
                    field.LoadData(reader, instance);
                }
                catch(LoadDataException ex)
                {
                    instance.AddCell(ValueCell.CreateErrorCell(field, ex.Message), false);
                    break;
                }
                catch(IOException ex)
                {
                    instance.AddCell(ValueCell.CreateErrorCell(field, ex.Message), false);
                    break;
                }
            }
            long offset = instance.GetLastRewindOffset();
            if (offset != -1)
                stream.Position = offset;
        }
Beispiel #19
0
 public abstract void LoadData(BinaryReader reader, StructInstance instance);
Beispiel #20
0
 public virtual int GetInstanceDataSize(StructCell cell, StructInstance instance)
 {
     int? cellSize = instance.GetCellSize(cell);
     if (cellSize.HasValue)
         return cellSize.Value;
     return GetDataSize();
 }
Beispiel #21
0
 public int GetDataSize(StructInstance instance)
 {
     return _def.GetInstanceDataSize(this, instance);
 }
Beispiel #22
0
 protected StructCell AddCell(StructInstance instance, IConvertible value, int offset)
 {
     StructCell cell = new ValueCell(this, value, offset);
     instance.AddCell(cell, _hidden);
     return cell;
 }