private bool Import(TR2CombinedLevel level, EnemyTransportCollection enemies) { try { // The importer will handle any duplication between the entities to import and // remove so just pass the unfiltered lists to it. TRModelImporter importer = new TRModelImporter { ClearUnusedSprites = true, EntitiesToImport = enemies.EntitiesToImport, EntitiesToRemove = enemies.EntitiesToRemove, Level = level.Data, LevelName = level.Name, TextureRemapPath = @"Resources\Textures\Deduplication\" + level.JsonID + "-TextureRemap.json", TexturePositionMonitor = _outer.TextureMonitor.CreateMonitor(level.Name, enemies.EntitiesToImport) }; // Try to import the selected models into the level. importer.Import(); return(true); } catch (PackingException /* e*/) { //System.Diagnostics.Debug.WriteLine(level.Name + ": " + e.Message); // We need to reload the level to undo anything that may have changed. _outer.ReloadLevelData(level); // Tell the monitor to no longer track what we tried to import _outer.TextureMonitor.ClearMonitor(level.Name, enemies.EntitiesToImport); return(false); } }
private bool Import(TR2CombinedLevel level, TR2Entities lara) { List <TR2Entities> laraImport = new List <TR2Entities> { lara }; TRModelImporter importer = new TRModelImporter { Level = level.Data, LevelName = level.Name, ClearUnusedSprites = false, EntitiesToImport = laraImport, EntitiesToRemove = _laraRemovals, TexturePositionMonitor = _outer.TextureMonitor.CreateMonitor(level.Name, laraImport) }; string remapPath = @"Resources\Textures\Deduplication\" + level.JsonID + "-TextureRemap.json"; if (File.Exists(remapPath)) { importer.TextureRemapPath = remapPath; } try { // Try to import the selected models into the level. importer.Import(); return(true); } catch (PackingException) { // We need to reload the level to undo anything that may have changed. _outer.ReloadLevelData(level); // Tell the monitor to no longer track what we tried to import _outer.TextureMonitor.ClearMonitor(level.Name, laraImport); return(false); } }
private void RandomizeVehicles() { // For now, we only add the boat if it has a location defined for a level. The skidoo is added // to levels that have MercSnowMobDriver present (see EnemyRandomizer) but we could alter this // to include it potentially in any level. // This perhaps needs better tracking, for example if every level has a vehicle location defined // we might not necessarily want to include it in every level. Dictionary <TR2Entities, Location> vehicles = new Dictionary <TR2Entities, Location>(); PopulateVehicleLocation(TR2Entities.Boat, vehicles); if (_levelInstance.IsAssault) { // The assault course doesn't have enemies i.e. MercSnowMobDriver, so just add the skidoo too PopulateVehicleLocation(TR2Entities.RedSnowmobile, vehicles); } List <TR2Entity> levelEntities = _levelInstance.Data.Entities.ToList(); int entityLimit = _levelInstance.GetMaximumEntityLimit(); if (vehicles.Count == 0 || vehicles.Count + levelEntities.Count > entityLimit) { return; } TRModelImporter importer = new TRModelImporter { Level = _levelInstance.Data, LevelName = _levelInstance.Name, ClearUnusedSprites = false, EntitiesToImport = vehicles.Keys, TexturePositionMonitor = TextureMonitor.CreateMonitor(_levelInstance.Name, vehicles.Keys.ToList()) }; try { importer.Import(); foreach (TR2Entities entity in vehicles.Keys) { if (levelEntities.Count == entityLimit) { break; } Location location = vehicles[entity]; levelEntities.Add(new TR2Entity { TypeID = (short)entity, Room = (short)location.Room, X = location.X, Y = location.Y, Z = location.Z, Angle = location.Angle, Flags = 0, Intensity1 = -1, Intensity2 = -1 }); } if (levelEntities.Count > _levelInstance.Data.NumEntities) { _levelInstance.Data.Entities = levelEntities.ToArray(); _levelInstance.Data.NumEntities = (uint)levelEntities.Count; } } catch (PackingException) { // Silently ignore failed imports for now as these are nice-to-have only } }