示例#1
0
            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);
                }
            }
示例#2
0
            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);
                }
            }
示例#3
0
        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
            }
        }