Revise.Files.IFO.MapDataFile.Load C# (CSharp) Method

Load() public method

Loads the file from the specified stream.
public Load ( Stream stream ) : void
stream Stream The stream to read from.
return void
        public override void Load(Stream stream)
        {
            BinaryReader reader = new BinaryReader(stream, Encoding.GetEncoding("EUC-KR"));

            int blockCount = reader.ReadInt32();

            for (int i = 0; i < blockCount; i++) {
                MapBlockType type = (MapBlockType)reader.ReadInt32();

                if (!Enum.IsDefined(typeof(MapBlockType), type)) {
                    throw new InvalidMapBlockTypeException((int)type);
                }

                int offset = reader.ReadInt32();
                long nextBlock = stream.Position;

                stream.Seek(offset, SeekOrigin.Begin);

                if (type == MapBlockType.MapInformation) {
                    MapPosition = new IntVector2(reader.ReadInt32(), reader.ReadInt32());
                    ZonePosition = new IntVector2(reader.ReadInt32(), reader.ReadInt32());
                    World = reader.ReadMatrix();
                    Name = reader.ReadString();
                }else if(type == MapBlockType.WaterPatch){
                    WaterPatches = new MapWaterPatches();
                    WaterPatches.Read(reader);
                } else {
                    if (type == MapBlockType.WaterPlane) {
                        WaterSize = reader.ReadSingle();
                    }

                    int entryCount = reader.ReadInt32();
                    Type classType = type.GetAttributeValue<MapBlockTypeAttribute, Type>(x => x.Type);

                    for (int j = 0; j < entryCount; j++) {
                        IMapBlock block = (IMapBlock)Activator.CreateInstance(classType);
                        block.Read(reader);

                        switch (type) {
                            case MapBlockType.Object:
                                Objects.Add((MapObject)block);
                                break;
                            case MapBlockType.NPC:
                                NPCs.Add((MapNPC)block);
                                break;
                            case MapBlockType.Building:
                                Buildings.Add((MapBuilding)block);
                                break;
                            case MapBlockType.Sound:
                                Sounds.Add((MapSound)block);
                                break;
                            case MapBlockType.Effect:
                                Effects.Add((MapEffect)block);
                                break;
                            case MapBlockType.Animation:
                                Animations.Add((MapAnimation)block);
                                break;
                            case MapBlockType.MonsterSpawn:
                                MonsterSpawns.Add((MapMonsterSpawn)block);
                                break;
                            case MapBlockType.WaterPlane:
                                WaterPlanes.Add((MapWaterPlane)block);
                                break;
                            case MapBlockType.WarpPoint:
                                WarpPoints.Add((MapWarpPoint)block);
                                break;
                            case MapBlockType.CollisionObject:
                                CollisionObjects.Add((MapCollisionObject)block);
                                break;
                            case MapBlockType.EventObject:
                                EventObjects.Add((MapEventObject)block);
                                break;
                        }
                    }
                }

                if (i < blockCount - 1) {
                    stream.Seek(nextBlock, SeekOrigin.Begin);
                }
            }
        }

Usage Example

Example #1
0
 public void TestLoadMethod()
 {
     MapDataFile mapDataFile = new MapDataFile();
     mapDataFile.Load(TEST_FILE);
 }
All Usage Examples Of Revise.Files.IFO.MapDataFile::Load