void TwitterFeedShowTweetState::Update(float dt)
 {
     if(m_toursCameraTransitionController.IsTransitionComplete() && !m_cameraTransitionComplete)
     {
         m_cameraTransitionComplete = true;
         
         if(m_isInterior)
         {
             m_interiorVisibilityUpdater.SetInteriorShouldDisplay(true);
         }
         
         rapidjson::Document jsonDocument;
         jsonDocument.SetObject();
         
         jsonDocument.AddMember("pinImageUrl", m_pinImageUrl.c_str(), jsonDocument.GetAllocator());
         jsonDocument.AddMember("pinContentUrl", m_pinContentUrl.c_str(), jsonDocument.GetAllocator());
         jsonDocument.AddMember("isVideo", m_hasAttachedVideo, jsonDocument.GetAllocator());
         
         rapidjson::StringBuffer buffer;
         rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
         jsonDocument.Accept(writer);
         
         ExampleApp::WorldPins::SdkModel::WorldPinFocusData worldPinFocusData(m_pinPlacename,
                                                                              buffer.GetString(),
                                                                              Search::TourTwitterVendorName);
         
         Eegeo::Space::LatLong location = m_pinLocation;
         const int twitterIconIndex = 13;
         const float heightOffsetAboveTerrainMetres = 0.f;
         
         m_pPinModel = m_worldPinsService.AddPin(Eegeo_NEW(TwitterFeedPinSelectionHandler)(m_stateModel,
                                                                                           m_messageBus),
                                                 NULL,
                                                 worldPinFocusData,
                                                 m_isInterior,
                                                 m_worldPinInteriorData,
                                                 location,
                                                 twitterIconIndex,
                                                 heightOffsetAboveTerrainMetres,
                                                 WorldPins::SdkModel::WorldPinVisibility::TourPin);
         // Hide hovercard if no image to show
         if(m_pinImageUrl.empty())
         {
             m_pPinModel->SetFocusable(false);
         }
     }
     else if(!m_interiorTransitionComplete && m_isInterior && m_interiorController.InteriorInScene())
     {
         m_interiorTransitionComplete = true;
         m_interiorController.SetCurrentFloor(m_worldPinInteriorData.floor);
     }
 }
 void InteriorWorldPinController::HandleMarkerAdded(const Eegeo::Resources::Interiors::Markers::InteriorMarkerModel& markerModel)
 {
     if(m_deferedRemovalMap.erase(markerModel.GetInteriorId().Value()) != 0)
     {
         return;
     }
     
     Eegeo_ASSERT(m_interiorIdToWorldPinMap.find(markerModel.GetInteriorId().Value()) == m_interiorIdToWorldPinMap.end(),
                  "InteriorWorldPinController already has a pin with that Id");
     
     const float heightOffsetMetres = 0.0f;
     const bool isInterior = false;
     const int iconIndex = 11;
     WorldPins::SdkModel::WorldPinInteriorData worldPinInteriorData;
     
     ExampleApp::WorldPins::SdkModel::WorldPinFocusData worldPinFocusData(markerModel.GetInteriorName(),
                                                                          markerModel.GetInteriorOwner(),
                                                                          Search::InteriorVendorName);
     
     Eegeo::Space::LatLong location = Eegeo::Space::LatLong::FromDegrees(markerModel.GetMarkerLatLongAltitude().GetLatitudeInDegrees(),
                                                                         markerModel.GetMarkerLatLongAltitude().GetLongitudeInDegrees());
     
     InteriorWorldPinSelectionHandler* pSelectionHandler = Eegeo_NEW(InteriorWorldPinSelectionHandler)(markerModel.GetInteriorId(),
                                                                                                       m_interiorSelectionModel,
                                                                                                       m_cameraController,
                                                                                                       markerModel.GetMarkerLatLongAltitude().ToECEF(),
                                                                                                       *this);
     
     WorldPins::SdkModel::WorldPinItemModel* pItemModel = m_worldPinsService.AddPin(pSelectionHandler,
                                                                                    NULL,
                                                                                    worldPinFocusData,
                                                                                    isInterior,
                                                                                    worldPinInteriorData,
                                                                                    location,
                                                                                    iconIndex,
                                                                                    heightOffsetMetres,
                                                                                    WorldPins::SdkModel::WorldPinVisibility::World);
     m_interiorIdToWorldPinMap[markerModel.GetInteriorId().Value()] = pItemModel;
 }