public override void previewFrame(AMITarget itarget, float frame, int frameRate, bool play, float playSpeed) { if (keys == null || keys.Count <= 0) { return; } AMCameraFade.getCameraFade(); // if before or equal to first frame, or is the only frame AMCameraSwitcherKey firstKey = keys[0] as AMCameraSwitcherKey; if (firstKey.endFrame == -1 || (frame <= (float)firstKey.frame && !firstKey.canTween)) { AMCameraFade.reset(); if (!firstKey.hasStartTarget(itarget)) { return; } if (firstKey.type == 0) { Utility.SetTopCamera(firstKey.getCamera(itarget), GetCachedCameras(itarget)); } else { showColor(firstKey.color); } return; } for (int i = 0; i < keys.Count; i++) { AMCameraSwitcherKey key = keys[i] as AMCameraSwitcherKey; AMCameraSwitcherKey keyNext = i + 1 < keys.Count ? keys[i + 1] as AMCameraSwitcherKey : null; if (frame >= (float)key.endFrame && keyNext != null && (!keyNext.canTween || keyNext.endFrame != -1)) { continue; } // if no ease if (!key.canTween || keyNext == null) { AMCameraFade.reset(); if (!key.hasStartTarget(itarget)) { return; } if (key.type == 0) { Utility.SetTopCamera(key.getCamera(itarget), GetCachedCameras(itarget)); } else { showColor(key.color); } return; } // else find t using easing function if (!key.hasStartTarget(itarget) || !key.hasEndTarget(itarget)) { return; } //targets are equal if (key.targetsAreEqual(itarget)) { AMCameraFade.reset(); if (key.type == 0) { Utility.SetTopCamera(key.getCamera(itarget), GetCachedCameras(itarget)); } else { showColor(key.color); } } else { AMCameraFade.clearRenderTexture(); previewCameraFade(itarget, frame, key); } return; } }