private void ParseEntities(XmlNode entityXml) { foreach (XmlNode energyTankNode in entityXml.SelectNodes("EnergyTank")) { m_energyTanks.Add(new EnergyTankTemplate(energyTankNode)); } foreach (XmlNode treasureNode in entityXml.SelectNodes("Treasure")) { m_treasures.Add(new TreasureTemplate(treasureNode)); } foreach (XmlNode trapNode in entityXml.SelectNodes("Trap")) { m_traps.Add(new TrapTemplate(trapNode)); } foreach (XmlNode mobSpawnerNode in entityXml.SelectNodes("MobSpawner")) { m_mobSpawners.Add(new MobSpawnerTemplate(mobSpawnerNode)); } m_portalRoomSideBitmask.Clear(); foreach (XmlNode portalNode in entityXml.SelectNodes("Portal")) { PortalTemplate portalTemplate = new PortalTemplate(portalNode); m_portals.Add(portalTemplate); if (portalTemplate.PortalRoomSide != MathConstants.eSignedDirection.none) { m_portalRoomSideBitmask.Set(portalTemplate.PortalRoomSide, true); } } }
private Portal CreateTeleporterPortal( Random rng, RoomIndex roomIndex) { Portal portal = null; RoomLayout room = GetRoomByIndex(roomIndex); RoomTemplate roomTemplate = m_roomTemplateSet.GetTemplateByName(room.static_room_data.room_template_name); List <PortalTemplate> teleporterTemplates = roomTemplate.PortalTemplates.Where(t => t.PortalType == ePortalType.teleporter).ToList(); if (teleporterTemplates.Count > 0) { RoomKey roomKey = GetRoomKeyForRoomIndex(roomIndex); PortalTemplate portalTemplate = teleporterTemplates[rng.Next(teleporterTemplates.Count)]; portal = new Portal(); portal.bounding_box = portalTemplate.BoundingBox; portal.room_side = portalTemplate.PortalRoomSide; portal.portal_type = portalTemplate.PortalType; portal.room_x = roomKey.x; portal.room_y = roomKey.y; portal.room_z = roomKey.z; // This is a temp ID for the purpose of portal connection. // A new ID will get assigned when inserting this portal into the DB. portal.portal_id = m_nextPortalId; ++m_nextPortalId; // This get sets in the next pass portal.target_portal_id = -1; // Add the new portal to the room room.portals.Add(portal); } return(portal); }