private void AdjustEntities() { // If an entity is marked to be removed but is also in the list // to import, don't remove it in the first place. List <TR2Entities> cleanedEntities = new List <TR2Entities>(); foreach (TR2Entities entity in EntitiesToRemove) { if (_aliasMap.ContainsKey(entity)) { // Check if we have another alias in the import list different from any // in the current level TR2Entities alias = TR2EntityUtilities.GetAliasForLevel(LevelName, entity); TR2Entities importAlias = TR2Entities.Lara; foreach (TR2Entities a in _aliasMap[entity]) { if (EntitiesToImport.Contains(a)) { importAlias = a; break; } } if (alias != importAlias) { cleanedEntities.Add(entity); } } else if (!EntitiesToImport.Contains(entity)) { cleanedEntities.Add(entity); } } EntitiesToRemove = cleanedEntities; }
private void CleanAliases() { List <TR2Entities> cleanedEntities = new List <TR2Entities>(); // Do we have any aliases? foreach (TR2Entities importEntity in EntitiesToImport) { if (_aliasMap.ContainsKey(importEntity)) { throw new TransportException(string.Format ( "Cannot import ambiguous entity {0} - choose an alias from [{1}].", importEntity.ToString(), string.Join(", ", _aliasMap[importEntity]) )); } bool entityIsValid = true; if (_entityAliases.ContainsKey(importEntity)) { TR2Entities existingEntity = TR2EntityUtilities.GetAliasForLevel(LevelName, _entityAliases[importEntity]); // This entity is only valid if the alias it's for is not already there entityIsValid = importEntity != existingEntity; } if (entityIsValid) { cleanedEntities.Add(importEntity); } } // #139 Ensure that aliases are added last so to avoid dependency issues cleanedEntities.Sort(delegate(TR2Entities e1, TR2Entities e2) { return(((short)TR2EntityUtilities.TranslateEntityAlias(e1)).CompareTo((short)TR2EntityUtilities.TranslateEntityAlias(e2))); }); // For some reason, if the Barracuda is added before the shark, there is a slight animation // corruption on the shark's mouth. I can't find the reason. The patch is to ensure the // Barracuda is added last. // #137 Reason found - animated textures were not being reindexed following deduplication. See // TRModelExtensions.ReindexTextures and #137. /*int barracudaIndex = cleanedEntities.FindIndex(e => _aliasMap[TR2Entities.Barracuda].Contains(e)); * if (barracudaIndex != -1) * { * TR2Entities barracuda = cleanedEntities[barracudaIndex]; * cleanedEntities.RemoveAt(barracudaIndex); * cleanedEntities.Add(barracuda); * }*/ EntitiesToImport = cleanedEntities; }
internal List <TR2Entities> GetIgnoredEntities(string lvlName) { TexturePositionMonitor monitor = GetMonitor(lvlName); if (monitor != null && monitor.RemovedTextures != null) { List <TR2Entities> entities = new List <TR2Entities>(); foreach (TR2Entities entity in monitor.RemovedTextures) { entities.Add(TR2EntityUtilities.GetAliasForLevel(lvlName, entity)); } return(entities); } return(null); }