Пример #1
0
    private PanoramaImage ExtractFromFlickr(string body)
    {
        if (body == null)
        {
            return(new PanoramaImage());
        }

        PanoramaImage image = new PanoramaImage();

        string[] urls = Regex.Split(body, @"""displayUrl""");

        string smallUrl  = "";
        string mediumUrl = "";
        string largeUrl  = "";
        string xlargeUrl = "";

        for (int i = 1; i < urls.Length; i++)
        {
            smallUrl  = (smallUrl.Length == 0 ? MatchUrl(urls[i], @":""(\S+?)"",""width"":100") : smallUrl);
            mediumUrl = (mediumUrl.Length == 0 ? MatchUrl(urls[i], @":""(\S+)"",""width"":640") : mediumUrl);
            largeUrl  = (largeUrl.Length == 0 ? MatchUrl(urls[i], @":""(\S+)"",""width"":1024") : largeUrl);
            xlargeUrl = (xlargeUrl.Length == 0 ? MatchUrl(urls[i], @":""(\S+)"",""width"":2048") : xlargeUrl);
        }

        image.url.Add(smallUrl);
        image.url.Add(mediumUrl);
        image.url.Add(largeUrl);
        image.url.Add(xlargeUrl);

        return(image);
    }
Пример #2
0
    private IEnumerator FetchStereo()
    {
        analytics.gav3.LogEvent("Panorama:" + analytics.sessionId, "RequestedStereo", "foo", 1);

        PanoramaImage image = null;

        if (analytics.stereoViewCount >= 0 && analytics.stereoViewCount < Recommendations.stereoImages.Count)
        {
            image = Recommendations.stereoImages[analytics.stereoViewCount];
        }

        if (image != null)
        {
            string domain = new System.Uri(image.url[0]).Host;
            statusMessage.text = "Waiting for " + domain + "...";
            DrawPanorama(image);

            analytics.LogStereoViewCount();
        }
        else
        {
            statusMessage.text = "Error getting stereoscopic panorama from index";
        }

        // clear previous info
        foreach (Transform child in titleMessage.transform)
        {
            Destroy(child.gameObject);
        }

        yield break;
    }
Пример #3
0
    private IEnumerator FetchStereoImg()
    {
        WWW       www;
        ImageInfo flickrImage;

        analytics.gav3.LogEvent("Panorama:" + analytics.sessionId, "RequestedStereoImg", "foo", 1);

        statusMessage.text = "Waiting for www.flickriver.com...";

        www = new WWW(STEREO_IMAGES_URL);
        networkConns.Add(www);
        print("Fetching page: " + STEREO_IMAGES_URL);
        yield return(www);

        flickrImage = ExtractFromFlickriver(www.text);
        if (flickrImage != null)
        {
            flickrImage.imageId = ExtractIdFromFlickrUrl(flickrImage.url);
        }

        if (flickrImage != null)
        {
            www = new WWW(flickrImage.url);
            networkConns.Add(www);
            statusMessage.text = "Waiting for www.flickr.com...";
            print("Fetching page: " + flickrImage.url);
            yield return(www);

            PanoramaImage image = ExtractFromFlickr(www.text);
            image.stereoType   = StereoType.CROSS_EYE;
            flickrImage.width /= 2;
            image.imageInfo    = flickrImage;
            www = null;

            statusMessage.text = "";

            DrawPanorama(image);

            analytics.LogStereoImgViewCount();
        }
        else
        {
            statusMessage.text = "Failed to find a stereo image to show!";
            analytics.LogException("Failed to extract URL from Flickriver", true);
        }

        // clear previous info
        foreach (Transform child in titleMessage.transform)
        {
            Destroy(child.gameObject);
        }
    }
Пример #4
0
    private PanoramaImage ExtractImageInfo(string body)
    {
        if (body == null)
        {
            return(new PanoramaImage());
        }

        PanoramaImage image = new PanoramaImage();

        string[] lines = body.Split(new string[] { System.Environment.NewLine }, System.StringSplitOptions.None);
        if (lines.Length > 0)
        {
            ImageInfo flickrImage = new ImageInfo();

            flickrImage.url     = "";
            flickrImage.imageId = long.Parse(lines[0]);
            flickrImage.width   = int.Parse(lines[3]);
            flickrImage.height  = int.Parse(lines[4]);
            flickrImage.title   = lines[1];
            flickrImage.author  = lines[2];

            string smallUrl  = lines[5];
            string mediumUrl = lines[6];
            string largeUrl  = lines[7];
            string xlargeUrl = lines[8];

            image.url.Add(smallUrl);
            image.url.Add(mediumUrl);
            image.url.Add(largeUrl);
            image.url.Add(xlargeUrl);

            image.imageInfo = flickrImage;
        }

        return(image);
    }
Пример #5
0
    private void DrawPanorama(PanoramaImage image)
    {
        try {
            taskQueue = new List <object> ();

            List <Material> mats = null;
            Material        m1 = null, m2 = null;

            switch (image.stereoType)
            {
            case StereoType.NONE:
                m1 = new Material(monoPanoramaMat);
                monoEyePano.SetActive(true);
                leftEyePano.SetActive(false);
                rightEyePano.SetActive(false);
                leftEyeImg.SetActive(false);
                rightEyeImg.SetActive(false);
                break;

            case StereoType.SBS:
                m1 = new Material(leftSBSPanoramaMat);
                m2 = new Material(rightSBSPanoramaMat);
                monoEyePano.SetActive(false);
                leftEyePano.SetActive(true);
                rightEyePano.SetActive(true);
                leftEyeImg.SetActive(false);
                rightEyeImg.SetActive(false);
                break;

            case StereoType.OVER_UNDER:
                m1 = new Material(leftOUPanoramaMat);
                m2 = new Material(rightOUPanoramaMat);
                monoEyePano.SetActive(false);
                leftEyePano.SetActive(true);
                rightEyePano.SetActive(true);
                leftEyeImg.SetActive(false);
                rightEyeImg.SetActive(false);
                break;

            case StereoType.OVER_UNDER_INV:
                m1 = new Material(leftOUInvPanoramaMat);
                m2 = new Material(rightOUInvPanoramaMat);
                monoEyePano.SetActive(false);
                leftEyePano.SetActive(true);
                rightEyePano.SetActive(true);
                leftEyeImg.SetActive(false);
                rightEyeImg.SetActive(false);
                break;

            case StereoType.CROSS_EYE:
                m1 = new Material(leftCrossImgMat);
                m2 = new Material(rightCrossImgMat);
                monoEyePano.SetActive(false);
                leftEyePano.SetActive(false);
                rightEyePano.SetActive(false);
                leftEyeImg.SetActive(true);
                rightEyeImg.SetActive(true);
                break;
            }

            if (monoEyePano.activeSelf)
            {
                monoEyePano.GetComponent <Renderer>().sharedMaterial = m1;
                mats = new List <Material>()
                {
                    m1
                };
            }
            if (leftEyePano.activeSelf)
            {
                leftEyePano.GetComponent <Renderer>().sharedMaterial = m1;
                mats = new List <Material>()
                {
                    m1, m2
                };
            }
            if (rightEyePano.activeSelf)
            {
                rightEyePano.GetComponent <Renderer>().sharedMaterial = m2;
                mats = new List <Material>()
                {
                    m1, m2
                };
            }

            if (leftEyeImg.activeSelf)
            {
                leftEyeImg.GetComponent <Renderer>().sharedMaterial = m1;
                leftEyeImg.transform.localScale = new Vector3(image.imageInfo.width * PX_TO_METERS, image.imageInfo.height * PX_TO_METERS, 1);
                leftEyeImg.transform.position   = 133.4f * statusMessage.gameObject.transform.parent.transform.forward;
                leftEyeImg.transform.LookAt(Vector3.zero);
                leftEyeImg.transform.RotateAround(leftEyeImg.transform.position, leftEyeImg.transform.up, 180f);
                mats = new List <Material>()
                {
                    m1, m2
                };

                imgCaption.transform.localPosition = new Vector3(0, -0.55f, 0);
                imgCaption.transform.localRotation = Quaternion.identity;
                TextMesh caption = imgCaption.GetComponent <TextMesh>();
                caption.anchor = TextAnchor.MiddleCenter;
                caption.color  = Color.black;
                string shortUrl = "flic.kr/p/" + Base58.Encode(image.imageInfo.imageId);
                caption.text          = "by: " + image.imageInfo.author + " (" + shortUrl + ")";
                caption.characterSize = 0.3f;

                /*reportImage.transform.localPosition = new Vector3(0, -0.63f, 0);
                 * reportImage.transform.localRotation = Quaternion.identity;
                 * TextMesh reportText = reportImage.GetComponent<TextMesh>();
                 * reportText.characterSize = 0.3f;
                 * reportImage.SetActive(true);
                 *
                 * saveFavorite.transform.localPosition = new Vector3(0, -0.74f, 0);
                 * saveFavorite.transform.localRotation = Quaternion.identity;
                 * TextMesh saveFavoriteText = saveFavorite.GetComponent<TextMesh>();
                 * saveFavoriteText.characterSize = 0.3f;
                 * saveFavorite.SetActive(true);*/
            }
            if (rightEyeImg.activeSelf)
            {
                rightEyeImg.GetComponent <Renderer>().sharedMaterial = m2;
                rightEyeImg.transform.localScale = new Vector3(image.imageInfo.width * PX_TO_METERS, image.imageInfo.height * PX_TO_METERS, 1);
                rightEyeImg.transform.position   = 133.4f * statusMessage.gameObject.transform.parent.transform.forward;
                rightEyeImg.transform.LookAt(Vector3.zero);
                rightEyeImg.transform.RotateAround(rightEyeImg.transform.position, rightEyeImg.transform.up, 180f);
                mats = new List <Material>()
                {
                    m1, m2
                };
            }

            foreach (string url in image.url)
            {
                if (url.Length > 0)
                {
                    taskQueue.Add(new ApplyImageTask(url, mats));
                }
            }
            taskQueue.Add(new ShowTutorialTask());

            if (image.imageInfo != null)
            {
                currentImageId = image.imageInfo.imageId;
            }

            StartCoroutine(ProcessTasks());
        } catch (System.Exception e) {
            analytics.LogException("Error drawing panorama: " + e.Message + "; " + e.StackTrace, true);
        }
    }
Пример #6
0
    private IEnumerator FetchMono()
    {
//		analytics.gav3.LogEvent ("Panorama:" + analytics.sessionId, "RequestedMono", "foo", 1);
//		analytics.LogEvent ("Panorama", "Requested");

        WWW www;
//		analytics.LogEvent ("Panorama", "DebugNewWWW");
        ImageInfo flickrImage;

//		analytics.LogEvent ("Panorama", "DebugNewImageInfo");

        // first try recommendation
        flickrImage = GetRecommendedImage(analytics.monoViewCount);

//		analytics.LogEvent ("Panorama", "DebugGotRecommendation");
        analytics.gav3.LogEvent("Panorama:" + analytics.sessionId, "DebugGotRecommendation", "foo", 1);

        // else get random
        if (flickrImage == null)
        {
            analytics.LogEvent("Panorama", "FetchingRandom");
            statusMessage.text = "Waiting for www.flickriver.com...";

            bool      censored;
            Stopwatch s = new Stopwatch();
            s.Start();

            do
            {
                www = new WWW(IMAGES_URL);
                networkConns.Add(www);
                print("Fetching page: " + IMAGES_URL);
                yield return(www);

                flickrImage = ExtractFromFlickriver(www.text);
                if (flickrImage != null)
                {
                    flickrImage.imageId = ExtractIdFromFlickrUrl(flickrImage.url);
                }

                censored = IsCensored(flickrImage);
            } while (censored);

            s.Stop();
            analytics.LogTiming("Loading", s.ElapsedMilliseconds, "Flickriver", "FetchPage");
        }
        else
        {
            analytics.LogEvent("Panorama", "FetchingRecommendation" + analytics.monoViewCount);
        }

        if (flickrImage != null)
        {
            Stopwatch s = new Stopwatch();
            analytics.LogEvent("Panorama", "DebugFetchFlickr");
            s.Start();

            www = new WWW(flickrImage.url);
            networkConns.Add(www);
            statusMessage.text = "Waiting for www.flickr.com...";
            print("Fetching page: " + flickrImage.url);
            yield return(www);

            s.Stop();
            analytics.LogEvent("Panorama", "DebugGotFlickr");
            analytics.LogTiming("Loading", s.ElapsedMilliseconds, "Flickr", "FetchPage");

            PanoramaImage image = ExtractFromFlickr(www.text);
            image.imageInfo = flickrImage;
            www             = null;

            statusMessage.text = "";

            if (renderMode == RenderMode.MONO_PANORAMA)
            {
                /* draw! */
                DrawPanorama(image);
                ShowInfo(flickrImage);

                /* log */
                analytics.LogMonoViewCount();
                analytics.LogEvent("Panorama", "ImagesLoading");
            }
        }
        else
        {
            statusMessage.text = "Failed to find a panorama to show!";
            analytics.LogException("Failed to extract URL from Flickriver", true);
        }
    }
    private PanoramaImage ExtractFromFlickr(string body)
    {
        if (body == null) {
            return new PanoramaImage();
        }

        PanoramaImage image = new PanoramaImage ();

        string[] urls = Regex.Split (body, @"""displayUrl""");

        string smallUrl = "";
        string mediumUrl = "";
        string largeUrl = "";
        string xlargeUrl = "";

        for (int i = 1; i < urls.Length; i++) {
            smallUrl = (smallUrl.Length == 0 ? MatchUrl(urls[i], @":""(\S+?)"",""width"":100") : smallUrl);
            mediumUrl = (mediumUrl.Length == 0 ? MatchUrl(urls[i], @":""(\S+)"",""width"":640") : mediumUrl );
            largeUrl = (largeUrl.Length == 0 ? MatchUrl(urls[i], @":""(\S+)"",""width"":1024") : largeUrl );
            xlargeUrl = (xlargeUrl.Length == 0 ? MatchUrl(urls[i], @":""(\S+)"",""width"":2048") : xlargeUrl );
        }

        image.url.Add (smallUrl);
        image.url.Add (mediumUrl);
        image.url.Add (largeUrl);
        image.url.Add (xlargeUrl);

        return image;
    }
    private void DrawPanorama(PanoramaImage image)
    {
        try {
            taskQueue = new List<object> ();

            List<Material> mats = null;
            Material m1 = null, m2 = null;

            switch (image.stereoType) {
            case StereoType.NONE:
                m1 = new Material(monoPanoramaMat);
                monoEyePano.SetActive(true);
                leftEyePano.SetActive(false);
                rightEyePano.SetActive(false);
                leftEyeImg.SetActive(false);
                rightEyeImg.SetActive(false);
                break;
            case StereoType.SBS:
                m1 = new Material(leftSBSPanoramaMat);
                m2 = new Material(rightSBSPanoramaMat);
                monoEyePano.SetActive(false);
                leftEyePano.SetActive(true);
                rightEyePano.SetActive(true);
                leftEyeImg.SetActive(false);
                rightEyeImg.SetActive(false);
                break;
            case StereoType.OVER_UNDER:
                m1 = new Material(leftOUPanoramaMat);
                m2 = new Material(rightOUPanoramaMat);
                monoEyePano.SetActive(false);
                leftEyePano.SetActive(true);
                rightEyePano.SetActive(true);
                leftEyeImg.SetActive(false);
                rightEyeImg.SetActive(false);
                break;
            case StereoType.OVER_UNDER_INV:
                m1 = new Material(leftOUInvPanoramaMat);
                m2 = new Material(rightOUInvPanoramaMat);
                monoEyePano.SetActive(false);
                leftEyePano.SetActive(true);
                rightEyePano.SetActive(true);
                leftEyeImg.SetActive(false);
                rightEyeImg.SetActive(false);
                break;
            case StereoType.CROSS_EYE:
                m1 = new Material(leftCrossImgMat);
                m2 = new Material(rightCrossImgMat);
                monoEyePano.SetActive(false);
                leftEyePano.SetActive(false);
                rightEyePano.SetActive(false);
                leftEyeImg.SetActive(true);
                rightEyeImg.SetActive(true);
                break;
            }

            if (monoEyePano.activeSelf) {
                monoEyePano.GetComponent<Renderer>().sharedMaterial = m1;
                mats = new List<Material>() {m1};
            }
            if (leftEyePano.activeSelf) {
                leftEyePano.GetComponent<Renderer>().sharedMaterial = m1;
                mats = new List<Material>() {m1, m2};
            }
            if (rightEyePano.activeSelf) {
                rightEyePano.GetComponent<Renderer>().sharedMaterial = m2;
                mats = new List<Material>() {m1, m2};
            }

            if (leftEyeImg.activeSelf) {
                leftEyeImg.GetComponent<Renderer>().sharedMaterial = m1;
                leftEyeImg.transform.localScale = new Vector3(image.imageInfo.width * PX_TO_METERS, image.imageInfo.height * PX_TO_METERS, 1);
                leftEyeImg.transform.position = 133.4f * statusMessage.gameObject.transform.parent.transform.forward;
                leftEyeImg.transform.LookAt(Vector3.zero);
                leftEyeImg.transform.RotateAround(leftEyeImg.transform.position, leftEyeImg.transform.up, 180f);
                mats = new List<Material>() {m1, m2};

                imgCaption.transform.localPosition = new Vector3(0, -0.55f, 0);
                imgCaption.transform.localRotation = Quaternion.identity;
                TextMesh caption = imgCaption.GetComponent<TextMesh>();
                caption.anchor = TextAnchor.MiddleCenter;
                caption.color = Color.black;
                string shortUrl = "flic.kr/p/" + Base58.Encode(image.imageInfo.imageId);
                caption.text = "by: " + image.imageInfo.author + " (" + shortUrl + ")";
                caption.characterSize = 0.3f;

                /*reportImage.transform.localPosition = new Vector3(0, -0.63f, 0);
                reportImage.transform.localRotation = Quaternion.identity;
                TextMesh reportText = reportImage.GetComponent<TextMesh>();
                reportText.characterSize = 0.3f;
                reportImage.SetActive(true);

                saveFavorite.transform.localPosition = new Vector3(0, -0.74f, 0);
                saveFavorite.transform.localRotation = Quaternion.identity;
                TextMesh saveFavoriteText = saveFavorite.GetComponent<TextMesh>();
                saveFavoriteText.characterSize = 0.3f;
                saveFavorite.SetActive(true);*/
            }
            if (rightEyeImg.activeSelf) {
                rightEyeImg.GetComponent<Renderer>().sharedMaterial = m2;
                rightEyeImg.transform.localScale = new Vector3(image.imageInfo.width * PX_TO_METERS, image.imageInfo.height * PX_TO_METERS, 1);
                rightEyeImg.transform.position = 133.4f * statusMessage.gameObject.transform.parent.transform.forward;
                rightEyeImg.transform.LookAt(Vector3.zero);
                rightEyeImg.transform.RotateAround(rightEyeImg.transform.position, rightEyeImg.transform.up, 180f);
                mats = new List<Material>() {m1, m2};
            }

            foreach (string url in image.url) {
                if (url.Length > 0) {
                    taskQueue.Add (new ApplyImageTask (url, mats));
                }
            }
            taskQueue.Add (new ShowTutorialTask ());

            if (image.imageInfo != null) {
                currentImageId = image.imageInfo.imageId;
            }

            StartCoroutine( ProcessTasks () );
        } catch (System.Exception e) {
            analytics.LogException("Error drawing panorama: " + e.Message + "; " + e.StackTrace, true);
        }
    }
Пример #9
0
    private PanoramaImage ExtractImageInfo(string body)
    {
        if (body == null) {
            return new PanoramaImage();
        }

        PanoramaImage image = new PanoramaImage ();

        string[] lines = body.Split (new string[]{System.Environment.NewLine}, System.StringSplitOptions.None);
        if (lines.Length > 0) {
            ImageInfo flickrImage = new ImageInfo ();

            flickrImage.url = "";
            flickrImage.imageId = long.Parse(lines[0]);
            flickrImage.width = int.Parse(lines[3]);
            flickrImage.height = int.Parse(lines[4]);
            flickrImage.title = lines[1];
            flickrImage.author = lines[2];

            string smallUrl = lines[5];
            string mediumUrl = lines[6];
            string largeUrl = lines[7];
            string xlargeUrl = lines[8];

            image.url.Add (smallUrl);
            image.url.Add (mediumUrl);
            image.url.Add (largeUrl);
            image.url.Add (xlargeUrl);

            image.imageInfo = flickrImage;
        }

        return image;
    }