Exemple #1
0
 void PreloadNextVideos(int position)
 {
     for (int a = 0; a < areas.Count; a++)
     {
         DisplayArea thisArea = areas[a];
         //print(thisArea.video.url);
         for (int c = position; c < items.Count; c++)
         {
             //print(items[c].displayArea);
             for (int ch = 0; ch < items[c].changes.Count; ch++)
             {
                 AreaChange change = items[c].changes[ch];
                 if (change.displayArea == thisArea.name || (a == 0 && change.displayArea == null))
                 {
                     if (change.movieName != null)
                     {
                         if (thisArea.preparedVid == true && change.movieName == thisArea.video.url)
                         {
                             break;
                         }
                         print("Prepare video:" + change.movieName);
                         thisArea.video.playOnAwake = false;
                         thisArea.video.url         = change.movieName;
                         thisArea.video.Prepare();
                         thisArea.preparedVid = true;
                         break;
                     }
                 }
             }
         }
     }
 }
Exemple #2
0
        public void RefreshState()
        {
            if (!_gController.InGame)
            {
                return;
            }

            _gController.Cache.UpdateCache();
            var ingameData   = _gController.Game.IngameState.Data;
            var areaTemplate = ingameData.CurrentArea;
            var curAreaHash  = ingameData.CurrentAreaHash;

            if (CurrentArea != null && curAreaHash == CurrentArea.Hash)
            {
                return;
            }

            CurrentArea = new AreaInstance(areaTemplate, curAreaHash, ingameData.CurrentAreaLevel);
            AreaChange?.Invoke(this);
            OnAreaChange?.Invoke(this);
        }
Exemple #3
0
    void ChangeDisplay(int position)
    {
        if (!inFade)
        {
            inFade   = true;
            fadeTime = 0;
        }
        // fade out any areas in the current position, ready to blink in the new one
        fadeTime += Time.deltaTime;
        if (fadeTime < fadeTotal)
        {
            float fadeAlpha = (fadeTotal - fadeTime) / fadeTotal;
            for (int ch = 0; ch < items[position].changes.Count; ch++)
            {
                AreaChange  change = items[position].changes[ch];
                DisplayArea area   = GetDisplayArea(change.displayArea);
                area.videoImage.color = new Color(1, 1, 1, fadeAlpha);
                area.image.color      = new Color(1, 1, 1, fadeAlpha);
                area.text.color       = new Color(area.text.color.r, area.text.color.g, area.text.color.b, fadeAlpha);
            }
            return;
        }

        for (int ch = 0; ch < items[position].changes.Count; ch++)
        {
            AreaChange  change = items[position].changes[ch];
            DisplayArea area   = GetDisplayArea(change.displayArea);
            if (change.movieName != null)
            {
                if (area.video.url != change.movieName || !area.preparedVid)
                {
                    area.video.url = change.movieName;
                    area.video.Prepare();
                    area.video.playOnAwake = false;
                    area.preparedVid       = true;
                }
                if (!area.video.isPrepared)
                {
                    print("Not prepared");
                    return;
                }
                print("Play video:" + change.movieName + ":" + area.video.texture.width + "," + area.video.texture.height);
                // change image limits to fit video in the frame right
                float vw = area.video.texture.width;
                float vh = area.video.texture.height;

                Rect newUVRect;
                // first make texture uv rect exactly video size
                if (vw < vh)
                {
                    // sides of texture need to go
                    float scaling = vw / vh;
                    newUVRect = new Rect((1f - scaling) / 2f, 0, scaling, 1);
                    area.videoImage.uvRect = newUVRect;
                }
                else
                {
                    // top of texture needs to go
                    // size it so that pixels are square
                    float scaling = vh / vw;
                    newUVRect = new Rect(0, (1f - scaling) / 2f, 1, scaling);
                    area.videoImage.uvRect = newUVRect;
                }
                AlterOffsetForRatio(area.videoImage.GetComponent <RectTransform>(), vw, vh);

                RenderTexture rt = UnityEngine.RenderTexture.active;
                UnityEngine.RenderTexture.active = area.vidTex;
                GL.Clear(true, true, Color.clear);
                UnityEngine.RenderTexture.active = rt;

                area.video.Play();
                area.playedVid          = true;
                area.videoImage.enabled = true;
                area.videoImage.texture = area.vidTex;
                area.image.enabled      = false;
            }
            else
            {
                // stop any video in this area
                if (area.playedVid)
                {
                    area.video.Stop();
                    area.playedVid   = false;
                    area.preparedVid = false;
                }
                area.videoImage.enabled = false;
                if (change.image != null)
                {
                    // an image, load it
                    area.image.enabled = true;
                    area.image.texture = change.image;
                    AlterOffsetForRatio(area.image.GetComponent <RectTransform>(), change.image.width, change.image.height);
                }
                else
                {
                    area.image.enabled = false;
                }
            }
            area.text.text = change.text;
            // make sure any future videos are loaded
        }
        PreloadNextVideos(position);
        curPosition = position;
        if (inFade)
        {
            inFade = false;
            for (int ch = 0; ch < items[position].changes.Count; ch++)
            {
                AreaChange  change = items[position].changes[ch];
                DisplayArea area   = GetDisplayArea(change.displayArea);
                area.videoImage.color = new Color(1, 1, 1, 1);
                area.image.color      = new Color(1, 1, 1, 1);
                area.text.color       = new Color(area.text.color.r, area.text.color.g, area.text.color.b, 1);
            }
        }
    }
Exemple #4
0
    // Use this for initialization
    void Start()
    {
        osc = GetComponent <OSC>();
        osc.SetAllMessageHandler(OnOSCMessage);
        string allScript = GetScriptItems();

        string[]   lines         = allScript.Split('\n');
        ScriptItem curItem       = null;
        AreaChange newAreaChange = null;

        foreach (string lineRaw in lines)
        {
            string line = lineRaw.Trim();
            if (line.StartsWith("AREA:"))
            {
                DisplayArea newArea = new DisplayArea();
                string []   values  = line.Substring(5).Split(',');
                for (int c = 0; c < values.Length; c++)
                {
                    switch (c)
                    {
                    case 0:
                        newArea.name = values[c];
                        break;

                    case 1:
                        newArea.fontName = values[c];
                        break;

                    case 2:
                        int.TryParse(values[c], out newArea.fontSize);
                        break;

                    case 3:
                        int.TryParse(values[c], out newArea.r);
                        break;

                    case 4:
                        int.TryParse(values[c], out newArea.g);
                        break;

                    case 5:
                        int.TryParse(values[c], out newArea.b);
                        break;

                    case 6:
                        float.TryParse(values[c], out newArea.x0);
                        break;

                    case 7:
                        float.TryParse(values[c], out newArea.y0);
                        break;

                    case 8:
                        float.TryParse(values[c], out newArea.x1);
                        break;

                    case 9:
                        float.TryParse(values[c], out newArea.y1);
                        break;
                    }
                }


                GameObject imgChild = new GameObject("img " + newArea.name);
                imgChild.transform.SetParent(canvas.transform, false);
                RawImage      image = imgChild.AddComponent <RawImage>();
                RectTransform tf2   = imgChild.GetComponent <RectTransform>();
                tf2.anchorMin         = new Vector2(newArea.x0, newArea.y0);
                tf2.anchorMax         = new Vector2(newArea.x1, newArea.y1);
                tf2.offsetMin         = new Vector2(0, 0);
                tf2.offsetMax         = new Vector2(0, 0);
                newArea.image         = image;
                newArea.image.enabled = false;


                RenderTexture vidTex = new RenderTexture(1024, 1024, 0);
                vidTex.Create();

                GameObject vidChild = new GameObject("vid " + newArea.name);
                vidChild.transform.SetParent(canvas.transform, false);

                RawImage vImage = vidChild.AddComponent <RawImage>();
                vImage.texture = vidTex;
                RectTransform tf3 = vidChild.GetComponent <RectTransform>();
                tf3.anchorMin = new Vector2(newArea.x0, newArea.y0);
                tf3.anchorMax = new Vector2(newArea.x1, newArea.y1);
                tf3.offsetMin = new Vector2(0, 0);
                tf3.offsetMax = new Vector2(0, 0);

                VideoPlayer vidPlayer = vidChild.AddComponent <VideoPlayer>();
                vidPlayer.renderMode    = VideoRenderMode.RenderTexture;
                vidPlayer.targetTexture = vidTex;
                newArea.video           = vidPlayer;
                newArea.vidTex          = vidTex;
                newArea.videoImage      = vImage;



                GameObject textChild = new GameObject("txt " + newArea.name);
                textChild.transform.SetParent(canvas.transform, false);
                Text txt = textChild.AddComponent <Text>();
                txt.text      = "";
                txt.color     = new Color(((float)newArea.r) / 255.0f, ((float)newArea.g) / 255.0f, ((float)newArea.b) / 255.0f);
                txt.alignment = TextAnchor.MiddleLeft;
                txt.font      = Font.CreateDynamicFontFromOSFont(newArea.fontName, 36);
                txt.fontSize  = newArea.fontSize;

                RectTransform tf = textChild.GetComponent <RectTransform>();
                tf.anchorMin = new Vector2(newArea.x0, newArea.y0);
                tf.anchorMax = new Vector2(newArea.x1, newArea.y1);
                tf.offsetMin = new Vector2(0, 0);
                tf.offsetMax = new Vector2(0, 0);

                newArea.text = txt;

                areas.Add(newArea);
            }
            else
            {
                print(line);
                bool firstLine = (line.Length > 0 && line[0] == '#');
                if (firstLine)
                {
//                    print(line);
                    if (newAreaChange != null)
                    {
                        newAreaChange.text = newAreaChange.text.Trim();
                        curItem.changes.Add(newAreaChange);
                    }
                    newAreaChange = new AreaChange();
                    string [] cueData = line.Substring(1).Split(',');
                    if (cueData.Length > 1)
                    {
                        newAreaChange.displayArea = cueData[1];
                    }
                    curItem = null;
                    for (int c = 0; c < items.Count; c++)
                    {
                        if (items[c].cueID == cueData[0])
                        {
                            curItem = items[c];
                            break;
                        }
                    }
                    if (curItem == null)
                    {
                        curItem       = new ScriptItem();
                        curItem.cueID = cueData[0];
                        items.Add(curItem);
                        print(items.Count + "!");
                    }
                }
                else
                {
                    if (newAreaChange != null)
                    {
                        if (line.StartsWith("[") && line.IndexOf("]") > 0)
                        {
                            newAreaChange.image = LoadScriptImage(line.Substring(1, line.IndexOf("]") - 1));
                        }
                        else if (line.StartsWith("{") && line.IndexOf("}") > 0)
                        {
                            newAreaChange.movieName = LoadScriptVideo(line.Substring(1, line.IndexOf("}") - 1));
                        }
                        else
                        {
                            newAreaChange.text += line + "\n";
                        }
                    }
                }
            }
        }
        if (newAreaChange != null)
        {
            newAreaChange.text = newAreaChange.text.Trim();
            curItem.changes.Add(newAreaChange);
        }
    }