public static DlmCell ReadFromStream(DlmLayer layer, BigEndianReader reader) { DlmCell cell = new DlmCell(layer); cell.Id = reader.ReadShort(); cell.Elements = new DlmBasicElement[(int)reader.ReadShort()]; for (int i = 0; i < cell.Elements.Length; i++) { DlmBasicElement element = DlmBasicElement.ReadFromStream(cell, reader); cell.Elements[i] = element; } return(cell); }
public static DlmLayer ReadFromStream(DlmMap map, BigEndianReader reader) { DlmLayer layer = new DlmLayer(map); if (map.Version >= 9) { layer.LayerId = reader.ReadByte(); } else { layer.LayerId = reader.ReadInt(); } layer.Cells = new DlmCell[(int)reader.ReadShort()]; for (int i = 0; i < layer.Cells.Length; i++) { layer.Cells[i] = DlmCell.ReadFromStream(layer, reader); } return(layer); }
public DlmCell(DlmLayer layer) { this.Layer = layer; }
public static DlmMap ReadFromStream(BigEndianReader givenReader, DlmReader dlmReader) { BigEndianReader reader = givenReader; DlmMap map = new DlmMap(); map.Version = reader.ReadByte(); map.Id = reader.ReadInt(); if (map.Version >= 7) { map.Encrypted = reader.ReadBoolean(); map.EncryptionVersion = reader.ReadByte(); int len = reader.ReadInt(); if (map.Encrypted) { string key = dlmReader.DecryptionKey; if (key == null && dlmReader.DecryptionKeyProvider != null) { key = dlmReader.DecryptionKeyProvider(map.Id); } if (key == null) { throw new InvalidOperationException(string.Format("Cannot decrypt the map {0} without decryption key", map.Id)); } byte[] data = reader.ReadBytes(len); byte[] encodedKey = Encoding.Default.GetBytes(key); if (key.Length > 0) { for (int i = 0; i < data.Length; i++) { data[i] ^= encodedKey[i % key.Length]; } reader = new BigEndianReader(new MemoryStream(data)); } } } map.RelativeId = reader.ReadUInt(); map.MapType = reader.ReadByte(); map.SubAreaId = reader.ReadInt(); map.TopNeighbourId = reader.ReadInt(); map.BottomNeighbourId = reader.ReadInt(); map.LeftNeighbourId = reader.ReadInt(); map.RightNeighbourId = reader.ReadInt(); map.ShadowBonusOnEntities = (int)reader.ReadUInt(); if (map.Version >= 9) { var readColor = reader.ReadInt(); var backgroundAlpha = (readColor & 4278190080) >> 32; var backgroundRed = (readColor & 16711680) >> 16; var backgroundGreen = (readColor & 65280) >> 8; var backgroundBlue = readColor & 255; readColor = (int)reader.ReadUInt(); var gridAlpha = (readColor & 4278190080) >> 32; var gridRed = (readColor & 16711680) >> 16; var gridGreen = (readColor & 65280) >> 8; var gridBlue = readColor & 255; var gridColor = (gridAlpha & 255) << 32 | (gridRed & 255) << 16 | (gridGreen & 255) << 8 | gridBlue & 255; } else if (map.Version >= 3) { map.BackgroundColor = Color.FromArgb((int)reader.ReadByte(), (int)reader.ReadByte(), (int)reader.ReadByte()); } if (map.Version >= 4) { map.ZoomScale = reader.ReadUShort(); map.ZoomOffsetX = reader.ReadShort(); map.ZoomOffsetY = reader.ReadShort(); } map.UseLowPassFilter = (reader.ReadByte() == 1); map.UseReverb = (reader.ReadByte() == 1); if (map.UseReverb) { map.PresetId = reader.ReadInt(); } else { map.PresetId = -1; } map.BackgroudFixtures = new DlmFixture[(int)reader.ReadByte()]; for (int i = 0; i < map.BackgroudFixtures.Length; i++) { map.BackgroudFixtures[i] = DlmFixture.ReadFromStream(map, reader); } map.ForegroundFixtures = new DlmFixture[(int)reader.ReadByte()]; for (int i = 0; i < map.ForegroundFixtures.Length; i++) { map.ForegroundFixtures[i] = DlmFixture.ReadFromStream(map, reader); } reader.ReadInt(); map.GroundCRC = reader.ReadInt(); map.Layers = new DlmLayer[(int)reader.ReadByte()]; for (int i = 0; i < map.Layers.Length; i++) { map.Layers[i] = DlmLayer.ReadFromStream(map, reader); } map.Cells = new DlmCellData[560]; short j = 0; while ((int)j < map.Cells.Length) { map.Cells[(int)j] = DlmCellData.ReadFromStream(map, j, reader); j += 1; } return(map); }