private bool LoadMap() { var path = Path.Combine(Directory, "map"); using var reader = new TMEBinaryReader(File.Open(path, FileMode.Open)); GameMap = _container.Resolve <IMap>(); if (GameMap is TMEMap map) { map.MistEnabled = _engine.Scenario.Info.IsFeature(FeatureFlags.Mist); map.TunnelsEnabled = _engine.Scenario.Info.IsFeature(FeatureFlags.Tunnels); } GameMap.LoadFullMapFromStream(reader); return(true); }
public bool Load() { var scenario = _engine.Scenario; var scenarioInfo = scenario.Info; _variables.Initialise(); var path = Path.Combine(Directory, "database"); // TODO: DI using (var reader = new TMEBinaryReader(File.Open(path, FileMode.Open))) { var magicNo = reader.ReadUInt32(); if (magicNo != TMEMagicNo) { var number = BinaryPrimitives.ReverseEndianness(TMEMagicNo); if (magicNo != number) { _logger.LogError($"Database MagicNo '{magicNo}' does not match '{TMEMagicNo}'"); return(false); } reader.EnableByteSwap = true; } ScenarioId = reader.ReadUInt32(); if (ScenarioId != scenarioInfo.Id) { _logger.LogError($"Database ScenarioId '{ScenarioId}' does not match '{scenarioInfo.Id}'"); return(false); } Version = reader.ReadUInt32(); if (Version < scenarioInfo.DatabaseVersion) { _logger.LogError($"Database Version '{Version}' is less than scenario version '{scenarioInfo.DatabaseVersion}'"); return(false); } Header = reader.ReadString(); Description = ""; if (_serializeContext.IsSaveGame) { Description = Version > 8 ? reader.ReadString() : ""; } _serializeContext.Reader = reader; _serializeContext.Version = Version; _serializeContext.IsDatabase = true; _serializeContext.IsSaveGame = false; // Read objects if (_entityContainer is ISerializable entities) { if (!entities.Load(_serializeContext)) { throw new FileLoadException("Error in Entities"); } } // Load Text if (_strings is ISerializable strings) { if (!strings.Load(_serializeContext)) { throw new FileLoadException("Error in Strings"); } } // load variables if (_variables is ISerializable variables) { if (!variables.Load(_serializeContext)) { throw new FileLoadException("Error in variables"); } } _engine.Scenario.InitialiseAfterGameLoad(); // load Version 10 extras ** DDR ** } return(LoadMap()); }