Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
        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);
        }