Esempio n. 1
0
        // set render texture or colors if render texture is used (stills handled in AMTake)
        private void setRenderTexture(AMITarget itarget, AMCameraFade cf, float frame, int firstTargetType, int secondTargetType, bool isReversed,
                                      AMCameraSwitcherKey action)
        {
            Camera firstCamera  = (isReversed ? action.getCameraEnd(itarget) : action.getCamera(itarget));
            Camera secondCamera = (isReversed ? action.getCamera(itarget) : action.getCameraEnd(itarget));

            if (isReversed && frame == action.frame)
            {
                if (firstTargetType == 0)
                {
                    Utility.SetTopCamera(firstCamera, GetCachedCameras(itarget));
                }
            }
            else
            {
                if (secondTargetType == 0)
                {
                    Utility.SetTopCamera(secondCamera, GetCachedCameras(itarget));
                }
            }

            if (action.still || (firstTargetType != 0 && secondTargetType != 0))
            {
                return;
            }

            bool isPro = AMTakeData.isProLicense;

            // first target is camera, set render texture
            if (firstTargetType == 0)
            {
                // if should update render texture
                if (/*!cf.tex ||*/ cf.shouldUpdateRenderTexture || (isPro && (!firstCamera.targetTexture || !cf.isRenderTextureSetupFor(firstCamera) /*|| firstCamera.targetTexture != cf.tex*/)))
                {
                    if (isPro)
                    {
                        cf.setupRenderTexture(firstCamera);
                    }
                    else
                    {
                        cf.useRenderTexture = false;
                        // show place-holder if non-pro
                        cf.colorTex    = Color.white;
                        cf.hasColorTex = false;
                        cf.clearScreenTex();
                        cf.placeholder = true;
                    }
                }
            }
        }
        void CameraEnd(bool isReversed, Camera cam, Camera camEnd, Camera[] allCams)
        {
            if (isReversed)
            {
                //set camEnd to top
                if (camEnd)
                {
                    AMUtil.SetTopCamera(cam, allCams);
                }
            }

            if (typeEnd == 0)
            {
                AMCameraFade.reset();
            }
            else
            {
                AMCameraFade cf = AMCameraFade.getCameraFade();
                cf.keepAliveColor = true;
                cf.hasColorTex    = true;
                cf.hasColorBG     = false;
                cf.colorTex       = colorEnd;
                cf.mode           = 0;
                cf.value          = 1.0f;
            }

            if (!still)
            {
                if (cam)
                {
                    cam.targetTexture = null;
                }
                if (camEnd)
                {
                    camEnd.targetTexture = null;
                }
            }

            if (AMCameraFade.hasInstance())
            {
                AMCameraFade cf = AMCameraFade.getCameraFade();
                cf.clearScreenTex();
                cf.clearTexture();
                if (cf.keepAlives > 0)
                {
                    cf.keepAlives--;
                }
            }
        }
Esempio n. 3
0
        private void renderCameraSwitcherStill(AMITarget itarget, float _frame)
        {
            if (!cameraSwitcher)
            {
                return;
            }

            AMCameraSwitcherTrack.cfTuple tuple = cameraSwitcher.getCameraFadeTupleForFrame(itarget, (int)_frame);
            if (tuple.frame != 0)
            {
                AMCameraFade cf = AMCameraFade.getCameraFade();
                cf.isReset = false;
                // create render texture still
                //bool isPro = PlayerSettings.advancedLicense;
                bool isPro = isProLicense;
                if (!cf.screenTex || cf.shouldUpdateStill || (isPro && cf.cachedStillFrame != tuple.frame))
                {
                    if (isPro)
                    {
                        int firstTargetType  = (tuple.isReversed ? tuple.type2 : tuple.type1);
                        int secondTargetType = (tuple.isReversed ? tuple.type1 : tuple.type2);
                        if (firstTargetType == 0)
                        {
                            if (cf.screenTex)
                            {
                                Object.DestroyImmediate(cf.screenTex);
                            }
                            previewFrame(itarget, tuple.frame, false, false);
                            // set top camera
                            //bool isReversed = tuple.isReversed;
                            Camera firstCamera = (tuple.isReversed ? tuple.camera2 : tuple.camera1);



                            Utility.SetTopCamera(firstCamera, cameraSwitcher.getAllCameras(itarget));

                            // set cached frame to 0 if bad frame
                            if (cf.width <= 0 || cf.height <= 0)
                            {
                                if (Application.isPlaying)
                                {
                                    cf.width  = Screen.width;
                                    cf.height = Screen.height;
                                }
                                else
                                {
                                    cf.width             = 200;
                                    cf.height            = 100;
                                    cf.shouldUpdateStill = true;
                                }
                            }
                            else
                            {
                                cf.shouldUpdateStill = false;
                            }

                            cf.refreshScreenTex(firstCamera);
                            cf.cachedStillFrame = tuple.frame;
                            cf.placeholder      = false;

                            if (secondTargetType == 0)
                            {
                                Camera secondCamera = (tuple.isReversed ? tuple.camera1 : tuple.camera2);
                                Utility.SetTopCamera(secondCamera, cameraSwitcher.getAllCameras(itarget));
                            }
                        }
                    }
                    else
                    {
                        cf.clearScreenTex();
                        cf.placeholder = true;
                    }
                }
                cf.useRenderTexture = false;
            }
        }