public IList <ObjectInstantiationData> LoadFromTemplate( GameObject[] enemyPrefabs, GameObject[] treasurePrefabs, IDictionary <POIType, GameObject[]> poiPrefabs, GameObject lavaParticlesPrefab, GameObject portalParticlesPrefab) { bool hasPOI = false; if (assignedPOI != null) { hasPOI = true; } var roomTemplate = tileMap.GenerateRoom(templateFileName, Neighbors, hasTreasure, hasPOI); foreach (var poi in roomTemplate.pois) { poi.type = assignedPOI.ToString(); } width = roomTemplate.dimensions.width; depth = roomTemplate.dimensions.height; var objs = new List <ObjectInstantiationData>(); objs.AddRange(EnemySpawner.SpawnEnemies(tileMap, roomTemplate.enemyNests, enemyPrefabs)); if (hasTreasure) { var treasures = (InteractablesSpawner.SpawnTreasures(roomTemplate.treasures, treasurePrefabs)); objs.AddRange(treasures); } if (assignedPOI != null) { var pois = (InteractablesSpawner.SpawnPOIs(roomTemplate.pois, poiPrefabs)); objs.AddRange(pois); } var lavas = ParticleSpawner.SpawnLavaParticles(roomTemplate.lavas, lavaParticlesPrefab); objs.AddRange(lavas); var portals = ParticleSpawner.SpawnPortalParticles(roomTemplate.portal, portalParticlesPrefab); objs.AddRange(portals); return(objs); }