예제 #1
0
        public override void ProcessFrame(Playable playable, FrameData info, object playerData)
        {
            MeshRendererActivationController trackBinding = playerData as MeshRendererActivationController;

            if (!trackBinding)
            {
                return;
            }

            int inputCount = playable.GetInputCount();

            bool hasInput = false;

            for (int i = 0; i < inputCount; i++)
            {
                float inputWeight = playable.GetInputWeight(i);

                // ScriptPlayable<MeshRendererActivationBehaviour> inputPlayable = (ScriptPlayable<MeshRendererActivationBehaviour>)playable.GetInput(i);
                // MeshRendererActivationBehaviour input = inputPlayable.GetBehaviour ();

                if (playable.GetInputWeight(i) > 0)
                {
                    hasInput = true;
                    break;
                }
            }

            trackBinding.SetActive(hasInput);
        }
    public override void ProcessFrame(Playable playable, FrameData info, object playerData)
    {
        // First frame of each behaviour: play audio clip if given, play audio source if given
        int inputCount = playable.GetInputCount();

        for (int i = 0; i < inputCount; i++)
        {
            float inputWeight = playable.GetInputWeight(i);

            m_CurrentWeights[i] = inputWeight;

            ScriptPlayable <AudioSnapshotBehaviour> inputPlayable = (ScriptPlayable <AudioSnapshotBehaviour>)playable.GetInput(i);
            AudioSnapshotBehaviour input = inputPlayable.GetBehaviour();

            if (Application.isPlaying)
            {
                input.PlayAudio(inputWeight);
            }

            input.audioSource.volume = input.weightedVolume ? input.volume * playable.GetInputWeight(i) : input.volume;
        }

        if (m_Mixer != null)
        {
            m_Mixer.TransitionToSnapshots(m_Snapshots, m_CurrentWeights, 0f);
        }
    }
예제 #3
0
        public static float NormalizeMixer(Playable mixer)
        {
            float result;

            if (!mixer.IsValid <Playable>())
            {
                result = 0f;
            }
            else
            {
                int   inputCount = mixer.GetInputCount <Playable>();
                float num        = 0f;
                for (int i = 0; i < inputCount; i++)
                {
                    num += mixer.GetInputWeight(i);
                }
                if (num > Mathf.Epsilon && num < 1f)
                {
                    for (int j = 0; j < inputCount; j++)
                    {
                        mixer.SetInputWeight(j, mixer.GetInputWeight(j) / num);
                    }
                }
                result = Mathf.Clamp01(num);
            }
            return(result);
        }
예제 #4
0
파일: SoundManager.cs 프로젝트: meamin9/cat
        private void PrepareSingleTrack(Playable owner, float deltaTime)
        {
            var count = owner.GetInputCount();

            if (count == 0)
            {
                return;
            }
            if (mSingleTransitionOut > 0f)
            {
                mSingleTransitionOut -= deltaTime;
                var t      = Mathf.Clamp01(1 - mSingleTransitionOut / mSingleTransitionTime);
                var weight = owner.GetInputWeight(0);
                owner.SetInputWeight(0, Mathf.Lerp(weight, 0, t));
            }
            else if (mSingleTransitionIn > 0f && mBgmAudioClip != null)
            {
                var playable = (AudioClipPlayable)owner.GetInput(0);
                if (playable.GetClip() != mBgmAudioClip)
                {
                    playable.SetClip(mBgmAudioClip);
                    playable.SetTime(0);
                }
                mSingleTransitionIn -= deltaTime;
                var t      = Mathf.Clamp01(1 - mSingleTransitionIn / mSingleTransitionTime);
                var weight = owner.GetInputWeight(0);
                owner.SetInputWeight(0, Mathf.Lerp(weight, 1, t));
            }
        }
예제 #5
0
    public override void ProcessFrame(Playable playable, FrameData info, object playerData)
    {
        m_Image = playerData as Image;

        if (m_Image == null)
        {
            return;
        }

        //if (!m_FirstFrameHappened)
        //{
        //    m_DefaultColor = m_TrackBinding.color;
        //    m_DefaultIntensity = m_TrackBinding.intensity;
        //    m_DefaultBounceIntensity = m_TrackBinding.bounceIntensity;
        //    m_DefaultRange = m_TrackBinding.range;
        //    m_FirstFrameHappened = true;
        //}

        int inputCount = playable.GetInputCount();

        Debug.Log(playable.GetInputWeight(0));
        Debug.Log(playable.GetInputWeight(1));

        //Color blendedColor = Color.clear;
        //float blendedIntensity = 0f;
        //float blendedBounceIntensity = 0f;
        //float blendedRange = 0f;
        //float totalWeight = 0f;
        //float greatestWeight = 0f;
        //int currentInputs = 0;

        //for (int i = 0; i < inputCount; i++)
        //{
        //    float inputWeight = playable.GetInputWeight(i);
        //    ScriptPlayable<LightControlBehaviour> inputPlayable = (ScriptPlayable<LightControlBehaviour>)playable.GetInput(i);
        //    LightControlBehaviour input = inputPlayable.GetBehaviour();

        //    blendedColor += input.color * inputWeight;
        //    blendedIntensity += input.intensity * inputWeight;
        //    blendedBounceIntensity += input.bounceIntensity * inputWeight;
        //    blendedRange += input.range * inputWeight;
        //    totalWeight += inputWeight;

        //    if (inputWeight > greatestWeight)
        //    {
        //        greatestWeight = inputWeight;
        //    }

        //    if (!Mathf.Approximately(inputWeight, 0f))
        //        currentInputs++;
        //}

        //m_TrackBinding.color = blendedColor + m_DefaultColor * (1f - totalWeight);
        //m_TrackBinding.intensity = blendedIntensity + m_DefaultIntensity * (1f - totalWeight);
        //m_TrackBinding.bounceIntensity = blendedBounceIntensity + m_DefaultBounceIntensity * (1f - totalWeight);
        //m_TrackBinding.range = blendedRange + m_DefaultRange * (1f - totalWeight);
    }
예제 #6
0
        override public void PrepareFrame(Playable playable, FrameData info)
        {
            if (mFinishFrameId == info.frameId)
            {
                var cb = mFinishCb;
                mFinishCb = null;
                cb.Invoke(0);
                return;
            }
            var count = mMixer.GetInputCount();

            if (count == 0)
            {
                return;
            }
            if (count > 1 && mTransitionTime >= 0f)
            {
                mTransitionTime -= info.deltaTime;
                if (mTransitionTime > 0f)
                {
                    var rate = mTransitionTime / mTransitionDuration;
                    for (var i = 0; i < count - 1; ++i)
                    {
                        mMixer.SetInputWeight(i, Mathf.Lerp(mMixer.GetInputWeight(i), 0f, rate));
                    }
                    mMixer.SetInputWeight(count - 1, Mathf.Lerp(mMixer.GetInputWeight(count - 1), 1f, 1f - rate));
                }
                else
                {
                    for (var i = 0; i < count - 1; ++i)
                    {
                        mMixer.GetInput(i).Destroy();
                    }
                    var clipPlayable = mMixer.GetInput(count - 1);
                    mMixer.DisconnectInput(count - 1);
                    mMixer.SetInputCount(1);
                    mMixer.ConnectInput(0, clipPlayable, 0);
                    mMixer.SetInputWeight(0, 1.0f);
                }
            }
            if (mActionTime > 0)
            {
                mActionTime -= info.deltaTime;
                if (mActionTime <= 0 && mFinishCb != null)
                {
                    mFinishFrameId = info.frameId + 2;
                }
            }
        }
예제 #7
0
        // NOTE: This function is called at runtime and edit time.  Keep that in mind when setting the values of properties.
        public override void ProcessFrame(Playable playable, FrameData info, object playerData)
        {
            int inputCount = playable.GetInputCount();

            for (int i = 0; i < inputCount; i++)
            {
                float inputWeight = playable.GetInputWeight(i);
                if (inputWeight > 0.001f && !played.Contains(i))
                {
                    played.Add(i);
                    ScriptPlayable <ShowAlertBehaviour> inputPlayable = (ScriptPlayable <ShowAlertBehaviour>)playable.GetInput(i);
                    ShowAlertBehaviour input = inputPlayable.GetBehaviour();
                    var message  = input.message;
                    var duration = input.useTextLengthForDuration ? 0 : (float)inputPlayable.GetDuration();
                    if (Application.isPlaying)
                    {
                        DialogueManager.ShowAlert(message, duration);
                    }
                    else
                    {
                        PreviewUI.ShowMessage(message, duration, -1);
                    }
                }
                else if (inputWeight <= 0.001f && played.Contains(i))
                {
                    played.Remove(i);
                }
            }
        }
예제 #8
0
        public override void ProcessFrame(Playable playable, FrameData info, object playerData)
        {
            //Get our inputs
            int inputCount = playable.GetInputCount();

            //Calculate blended snow power
            double blendedSnowPower = 0;
            double totalWeight      = 0;

            for (int i = 0; i < inputCount; i++)
            {
                double inputWeight = playable.GetInputWeight(i);
                ScriptPlayable <WorldManagerSnowBehaviour> inputPlayable =
                    (ScriptPlayable <WorldManagerSnowBehaviour>)playable.GetInput(i);
                WorldManagerSnowBehaviour input = inputPlayable.GetBehaviour();

                blendedSnowPower += input.snowPower * inputWeight;
                totalWeight      += inputWeight;
            }

            //We will only update world manager if we got some weights i.e. we are being affected by the timeline
            if (!Mathf.Approximately((float)totalWeight, 0f))
            {
                WorldManager.Instance.SnowPower = (float)blendedSnowPower;
            }
        }
    public override void ProcessFrame(Playable playable, FrameData info, object playerData)
    {
        TextMeshProUGUI subtitleTextObject = playerData as TextMeshProUGUI;

        if (!subtitleTextObject)
        {
            return;
        }

        string currentText  = "";
        float  currentAlpha = 0.0f;

        int numberOfClips = playable.GetInputCount();

        for (int i = 0; i < numberOfClips; i++)
        {
            float clipWeight = playable.GetInputWeight(i);

            if (clipWeight > 0f)
            {
                ScriptPlayable <SubtitleBehaviour> clipPlayable = (ScriptPlayable <SubtitleBehaviour>)playable.GetInput(i);

                SubtitleBehaviour clipBehaviour = clipPlayable.GetBehaviour();
                currentText  = clipBehaviour.subtitleText;
                currentAlpha = clipWeight;
            }
        }

        subtitleTextObject.text  = currentText;
        subtitleTextObject.color = new Color(1, 1, 1, currentAlpha);
    }
    public override void ProcessFrame(Playable playable, FrameData info, object playerData)
    {
        NavMeshAgent trackBinding = playerData as NavMeshAgent;

        if (!trackBinding)
        {
            return;
        }

        int inputCount = playable.GetInputCount();

        for (int i = 0; i < inputCount; i++)
        {
            float inputWeight = playable.GetInputWeight(i);
            ScriptPlayable <NavMeshAgentControlBehaviour> inputPlayable = (ScriptPlayable <NavMeshAgentControlBehaviour>)playable.GetInput(i);
            NavMeshAgentControlBehaviour input = inputPlayable.GetBehaviour();

            if (inputWeight > 0.5f && !input.destinationSet && input.destination)
            {
                if (!trackBinding.isOnNavMesh)
                {
                    continue;
                }

                trackBinding.SetDestination(input.destination.position);
                input.destinationSet = true;
            }
        }
    }
예제 #11
0
    public override void ProcessFrame(Playable playable, FrameData info, object playerData)
    {
        m_TrackBinding = playerData as Light;

        if (m_TrackBinding == null)
        {
            return;
        }

        if (!m_FirstFrameHappened)
        {
            // Save default values
            m_DefaultColor           = m_TrackBinding.color;
            m_DefaultIntensity       = m_TrackBinding.intensity;
            m_DefaultBounceIntensity = m_TrackBinding.bounceIntensity;
            m_DefaultRange           = m_TrackBinding.range;
            m_FirstFrameHappened     = true;
        }

        // clip ¸öÊý
        int inputCount = playable.GetInputCount();


        // temporary values
        Color blendedColor           = Color.clear;
        float blendedIntensity       = 0f;
        float blendedBounceIntensity = 0f;
        float blendedRange           = 0f;
        float totalWeight            = 0f;
        float greatestWeight         = 0f;
        int   currentInputs          = 0;

        for (int i = 0; i < inputCount; i++)
        {
            float inputWeight = playable.GetInputWeight(i);
            ScriptPlayable <LightControlBehaviour> inputPlayable = (ScriptPlayable <LightControlBehaviour>)playable.GetInput(i);
            LightControlBehaviour input = inputPlayable.GetBehaviour();

            blendedColor           += input.color * inputWeight;
            blendedIntensity       += input.intensity * inputWeight;
            blendedBounceIntensity += input.bounceIntensity * inputWeight;
            blendedRange           += input.range * inputWeight;
            totalWeight            += inputWeight;

            if (inputWeight > greatestWeight)
            {
                greatestWeight = inputWeight;
            }

            if (!Mathf.Approximately(inputWeight, 0f))
            {
                currentInputs++;
            }
        }

        m_TrackBinding.color           = blendedColor + m_DefaultColor * (1f - totalWeight);
        m_TrackBinding.intensity       = blendedIntensity + m_DefaultIntensity * (1f - totalWeight);
        m_TrackBinding.bounceIntensity = blendedBounceIntensity + m_DefaultBounceIntensity * (1f - totalWeight);
        m_TrackBinding.range           = blendedRange + m_DefaultRange * (1f - totalWeight);
    }
        // NOTE: This function is called at runtime and edit time.  Keep that in mind when setting the values of properties.
        public override void ProcessFrame(Playable playable, FrameData info, object playerData)
        {
            Light trackBinding   = playerData as Light;
            float finalIntensity = 0f;
            Color finalColor     = Color.black;

            if (!trackBinding)
            {
                return;
            }

            int inputCount = playable.GetInputCount();              //get the number of all clips on this track

            for (int i = 0; i < inputCount; i++)
            {
                float inputWeight = playable.GetInputWeight(i);
                ScriptPlayable <Anim_LightControlBehaviour> inputPlayable = (ScriptPlayable <Anim_LightControlBehaviour>)playable.GetInput(i);
                Anim_LightControlBehaviour input = inputPlayable.GetBehaviour();

                // Use the above variables to process each frame of this playable.
                finalIntensity += input.intensity * inputWeight;
                finalColor     += input.color * inputWeight;
            }

            //assign the result to the bound object
            trackBinding.intensity = finalIntensity;
            trackBinding.color     = finalColor;
        }
예제 #13
0
        // NOTE: This function is called at runtime and edit time.  Keep that in mind when setting the values of properties.
        public override void ProcessFrame(Playable playable, FrameData info, object playerData)
        {
            // cast playerData into our track binding
            _trackBinding = playerData as PlayerController;
            if (_trackBinding == null)
            {
                return;
            }

            // set default value for block input
            bool blockInput = false;
            int  inputCount = playable.GetInputCount();

            for (int i = 0; i < inputCount; i++)
            {
                float inputWeight = playable.GetInputWeight(i);
                ScriptPlayable <BlockInputPlayableBehaviour> inputPlayable = (ScriptPlayable <BlockInputPlayableBehaviour>)playable.GetInput(i);
                BlockInputPlayableBehaviour input = inputPlayable.GetBehaviour();

                // Use the above variables to process each frame of this playable.

                // if any clip of this track is playing, set blockInput = true
                if (inputWeight > 0)
                {
                    blockInput = true;
                }
            }

            // set playerController.BlockInput according to our value
            _trackBinding.BlockInput = blockInput;
        }
예제 #14
0
    // NOTE: This function is called at runtime and edit time.  Keep that in mind when setting the values of properties.

    public override void ProcessFrame(Playable playable, FrameData info, object playerData)
    {
        VisualEffect vfxComponent = playerData as VisualEffect;

        if (!vfxComponent)
        {
            return;
        }

        int inputCount = playable.GetInputCount();

        for (int i = 0; i < inputCount; i++)
        {
            float inputWeight     = playable.GetInputWeight(i);
            bool  newEnabledState = inputWeight != 0.0f;

            var inputPlayable = (ScriptPlayable <VisualEffectActivationBehaviour>)playable.GetInput(i);
            var input         = inputPlayable.GetBehaviour();

            if (enabledStates[i] != newEnabledState)
            {
                if (newEnabledState)
                {
                    input.SendEventEnter(vfxComponent);
                }
                else
                {
                    input.SendEventExit(vfxComponent);
                }

                enabledStates[i] = newEnabledState;
            }
        }
    }
예제 #15
0
    public override void ProcessFrame(Playable playable, FrameData info, object playerData)
    {
        m_trackBinding = playerData as CanvasGroup;
        if (m_trackBinding == null)
        {
            return;
        }

        if (!m_firstFrameHappened)
        {
            // 初期値の記憶
            m_initialValue       = m_trackBinding.alpha;
            m_firstFrameHappened = true;
        }

        // 全clipのalpha値をweightに応じて合計する
        int   inputCount = playable.GetInputCount();
        float alpha      = 0;

        for (int i = 0; i < inputCount; ++i)
        {
            var inputWeight   = playable.GetInputWeight(i);
            var inputPlayable = (ScriptPlayable <AlphaBehaviour>)playable.GetInput(i);
            var input         = inputPlayable.GetBehaviour();
            alpha += input.Alpha * inputWeight;
        }

        // 反映
        m_trackBinding.alpha = alpha;
    }
예제 #16
0
    // NOTE: This function is called at runtime and edit time.  Keep that in mind when setting the values of properties.
    public override void ProcessFrame(Playable playable, FrameData info, object playerData)
    {
        if (!textMeshProUGUI || !backgroundImage)
        {
            return;
        }

        int inputCount = playable.GetInputCount();

        ToggleSubtitle(false);
        for (int i = 0; i < inputCount; i++)
        {
            float inputWeight = playable.GetInputWeight(i);
            ScriptPlayable <SubtitleTimelineBehaviour> inputPlayable = (ScriptPlayable <SubtitleTimelineBehaviour>)playable.GetInput(i);
            SubtitleTimelineBehaviour input = inputPlayable.GetBehaviour();
            var clip         = clips[i];
            var clipProgress = Mathf.Min((float)(director.time - clip.start), (float)clip.duration) / (float)clip.duration;
            if (clip.start <= director.time && director.time < clip.start + clip.duration)
            {
                ToggleSubtitle(true);
                UpdateSubtitle(clip.displayName, input.textColor, input.backgroundColor);
            }
            // Use the above variables to process each frame of this playable.
        }
    }
    // NOTE: This function is called at runtime and edit time.  Keep that in mind when setting the values of properties.
    public override void ProcessFrame(Playable playable, FrameData info, object playerData)
    {
        TextMesh trackBinding = playerData as TextMesh;

        if (!trackBinding)
        {
            return;
        }

        int inputCount = playable.GetInputCount();

        for (int i = 0; i < inputCount; i++)
        {
            float inputWeight = playable.GetInputWeight(i);

            if (inputWeight < 1f)
            {
                continue;
            }

            ScriptPlayable <FadeAnimationBehaviour> inputPlayable = (ScriptPlayable <FadeAnimationBehaviour>)playable.GetInput(i);

            FadeAnimationBehaviour input = inputPlayable.GetBehaviour();

            // Use the above variables to process each frame of this playable.
            double w = inputPlayable.GetTime() / inputPlayable.GetDuration();

            Color color = trackBinding.color;
            color.a            = input.Alpha.Evaluate((float)w);
            trackBinding.color = color;
        }
    }
예제 #18
0
        public override void PrepareFrame(Playable playable, FrameData info)
        {
            if (!playable.IsValid() || !playable.IsPlayableOfType <AudioMixerPlayable>())
            {
                return;
            }

            var inputCount = playable.GetInputCount();

            for (int i = 0; i < inputCount; ++i)
            {
                if (playable.GetInputWeight(i) > 0.0f)
                {
                    var input = playable.GetInput(i);

                    if (input.IsValid() && input.IsPlayableOfType <AudioClipPlayable>())
                    {
                        var audioClipPlayable   = (AudioClipPlayable)input;
                        var audioClipProperties = input.GetHandle().GetObject <AudioClipProperties>();

                        audioClipPlayable.SetVolume(Mathf.Clamp01(volume * audioClipProperties.volume));
                        audioClipPlayable.SetStereoPan(Mathf.Clamp(stereoPan, -1.0f, 1.0f));
                        audioClipPlayable.SetSpatialBlend(Mathf.Clamp01(spatialBlend));
                    }
                }
            }
        }
예제 #19
0
    // NOTE: This function is called at runtime and edit time.  Keep that in mind when setting the values of properties.
    public override void ProcessFrame(Playable playable, FrameData info, object playerData)
    {
        Targetable trackBinding = playerData as Targetable;

        if (!trackBinding)
        {
            return;
        }

        int inputCount = playable.GetInputCount();

        for (int i = 0; i < inputCount; i++)
        {
            float inputWeight = playable.GetInputWeight(i);

            if (inputWeight < 1f)
            {
                continue;
            }

            ScriptPlayable <TargetSwitcherBehaviour> inputPlayable = (ScriptPlayable <TargetSwitcherBehaviour>)playable.GetInput(i);
            TargetSwitcherBehaviour input = inputPlayable.GetBehaviour();

            // Use the above variables to process each frame of this playable.
            trackBinding.Target = input.Target;
        }
    }
        //////////////////////////////////////////////////////////////////////////
        public override void ProcessFrame(Playable playable, FrameData info, object playerData)
        {
            // try to get mixer
            var audioMixer = playerData as AudioMixer ?? SoundManager.Mixer;

            if (audioMixer == null)
            {
                return;
            }

            var finalValue = 0.0f;

            // calculate weights
            var inputCount = playable.GetInputCount();

            for (var i = 0; i < inputCount; i++)
            {
                //if (playable.IsPlayableOfType<ScriptPlayable<MixerPlayableBehaviour>>() == false)
                //    continue;

                // get clips data
                var inputWeight   = playable.GetInputWeight(i);
                var inputPlayable = (ScriptPlayable <AudioMixerPlayableBehaviour>)playable.GetInput(i);
                var input         = inputPlayable.GetBehaviour();

                // add weighted impact of the clip to final value
                finalValue += input.Value * inputWeight;
            }

            // assign result
            audioMixer.SetFloat(Parameter, finalValue);
        }
예제 #21
0
        public override void ProcessFrame(Playable playable, FrameData info, object playerData)
        {
            // TODO
            var binding = playerData as TimelineHandControl;

            if (!binding)
            {
                return;
            }

            var time = Director.time;


            SingleHandShape handShape = new SingleHandShape();

            for (int i = 0; i < Clips.Length; i++)
            {
                var clip         = Clips[i];
                var clipAsset    = clip.asset as HandClip;
                var behaviour    = clipAsset.behaviour;
                var clipWeight   = playable.GetInputWeight(i);
                var clipProgress = (float)((time - clip.start) / clip.duration);

                // if inside of clip
                if (0f <= clipProgress && clipProgress <= 1f)
                {
                    handShape += behaviour.handPreset.handShape * behaviour.strengthMultiplier * clipWeight;
                }
            }

            binding.handShape = handShape;
        }
예제 #22
0
    public override void ProcessFrame(Playable playable, FrameData info, object playerData)
    {
        RawImage  rawImage       = playerData as RawImage;
        Texture2D currentTexture = null;
        float     curentAlpha    = 0f;

        if (!rawImage)
        {
            return;
        }

        int inputCount = playable.GetInputCount();

        for (int i = 0; i < inputCount; i++)
        {
            float inputWeight = playable.GetInputWeight(i);
            if (inputWeight > 0f)
            {
                ScriptPlayable <SlideShowBehavior> inputPlayable = (ScriptPlayable <SlideShowBehavior>)playable.GetInput(i);
                SlideShowBehavior input = inputPlayable.GetBehaviour();
                currentTexture = input.image;
                curentAlpha    = inputWeight;
            }
        }
        rawImage.texture = currentTexture;
        rawImage.color   = new Color(1, 1, 1, curentAlpha);
    }
        public override void ProcessFrame(Playable playable, FrameData info, object playerData)
        {
            //Get our inputs
            int inputCount = playable.GetInputCount();

            //Calculate blended progress
            float          blendedProgress = 0;
            float          totalWeight     = 0;
            PegasusManager manager         = null;

            for (int i = 0; i < inputCount; i++)
            {
                float inputWeight = playable.GetInputWeight(i);
                ScriptPlayable <PegasusBehaviour> inputPlayable = (ScriptPlayable <PegasusBehaviour>)playable.GetInput(i);
                PegasusBehaviour input = inputPlayable.GetBehaviour();

                if (manager == null)
                {
                    manager = input.pegasusManager;
                }

                blendedProgress += input.pegasusProgress * inputWeight;
                totalWeight     += inputWeight;
            }

            //We will only update if we got some weights i.e. we are being affected by the timeline
            if (!Mathf.Approximately(totalWeight, 0f))
            {
                if (manager != null)
                {
                    manager.MoveTargetTo(blendedProgress);
                }
            }
        }
    public override void ProcessFrame(Playable playable, FrameData info, object playerData)
    {
        Image imageObject = playerData as Image;

        if (!imageObject)
        {
            return;
        }

        Color currentColor = new Color(0, 0, 0, 0);
        float currentAlpha = 0;

        int numberOfClips = playable.GetInputCount();

        for (int i = 0; i < numberOfClips; i++)
        {
            float clipWeight = playable.GetInputWeight(i);

            if (clipWeight > 0f)
            {
                ScriptPlayable <PlayableImageBehaviour> clipPlayable = (ScriptPlayable <PlayableImageBehaviour>)playable.GetInput(i);

                PlayableImageBehaviour clipBehaviour = clipPlayable.GetBehaviour();
                currentColor = clipBehaviour.imageColor;
                currentAlpha = clipWeight;
            }
        }

        imageObject.color = new Color(currentColor.r, currentColor.g, currentColor.b, currentAlpha);
    }
    public override void ProcessFrame(Playable playable, FrameData info, object playerData)
    {
        TMP_Text text = playerData as TMP_Text;

        string currentText  = "";
        float  currentAlpha = 0f;

        if (!text)
        {
            return;
        }

        int inputCount = playable.GetInputCount();

        for (int i = 0; i < inputCount; i++)
        {
            float inputWeight = playable.GetInputWeight(i);

            if (inputWeight > 0f)
            {
                ScriptPlayable <SubtitleBehaviour> inputPlayable = (ScriptPlayable <SubtitleBehaviour>)playable.GetInput(i);

                SubtitleBehaviour input = inputPlayable.GetBehaviour();
                currentText  = input.SubtitleText;
                currentAlpha = inputWeight;
            }
        }

        text.text  = currentText;
        text.color = new Color(1, 1, 1, currentAlpha);
    }
예제 #26
0
        public override void ProcessFrame(Playable playable, FrameData info, object playerData)
        {
            if (playerData is RenderPipeline renderPipeline && renderPipeline.ScreenBlend != null)
            {
                if (cachedScreenBlend == null)
                {
                    cachedScreenBlend       = renderPipeline.ScreenBlend;
                    defaultScreenBlendColor = cachedScreenBlend.Properties.Color;
                }
                int   inputCount   = playable.GetInputCount();
                Color defaultColor = cachedScreenBlend.Properties.Color;
                Color blendedColor = Color.clear;
                float totalWeight  = 0.0f;

                for (int i0 = 0; i0 < inputCount; ++i0)
                {
                    var playableInput = (ScriptPlayable <ScreenBlendColorTweenBehaviour>)playable.GetInput(i0);
                    ScreenBlendColorTweenBehaviour input = playableInput.GetBehaviour();
                    float inputWeight = playable.GetInputWeight(i0);

                    float normalisedTime = (float)(playableInput.GetTime() / playableInput.GetDuration());
                    blendedColor += Color.Lerp(input.startColor, input.endColor, input.transition.Evaluate(normalisedTime)) * inputWeight;
                    totalWeight  += inputWeight;
                }
                blendedColor += defaultColor * (1.0f - totalWeight);
                cachedScreenBlend.Properties.Color = blendedColor;
            }
        }
        // NOTE: This function is called at runtime and edit time.  Keep that in mind when setting the values of properties.
        public override void ProcessFrame(Playable playable, FrameData info, object playerData)
        {
            GameObject trackBinding = playerData as GameObject;

            Transform speaker = (trackBinding != null) ? trackBinding.transform : null;

            int inputCount = playable.GetInputCount();

            for (int i = 0; i < inputCount; i++)
            {
                float inputWeight = playable.GetInputWeight(i);
                if (inputWeight > 0.001f && !played.Contains(i))
                {
                    played.Add(i);
                    ScriptPlayable <PlaySequenceBehaviour> inputPlayable = (ScriptPlayable <PlaySequenceBehaviour>)playable.GetInput(i);
                    PlaySequenceBehaviour input = inputPlayable.GetBehaviour();
                    var sequence = input.sequence;
                    if (Application.isPlaying)
                    {
                        DialogueManager.PlaySequence(sequence, speaker, input.listener);
                    }
                    else
                    {
                        PreviewUI.ShowMessage(sequence, 3, -1);
                    }
                }
                else if (inputWeight <= 0.001f && played.Contains(i))
                {
                    played.Remove(i);
                }
            }
        }
예제 #28
0
        public override void ProcessFrame(Playable playable, FrameData info, object playerData)
        {
            texthandler = playerData as SubTitleHandler;

            if (texthandler == null)
            {
                return;
            }

            int inputCount = playable.GetInputCount();

            for (int i = 0; i < inputCount; i++)
            {
                ScriptPlayable <TextHandlerBehaviour> inputPlayable =
                    (ScriptPlayable <TextHandlerBehaviour>)playable.GetInput(i);
                TextHandlerBehaviour input = inputPlayable.GetBehaviour();
                if (!input.isInQueue && playable.GetInputWeight(i) > float.Epsilon)
                {
                    texthandler.NextInQueue(input.clipTextSo, input.Speed);
                    if (Application.isPlaying)
                    {
                        input.isInQueue = true;
                    }
                }
            }
        }
예제 #29
0
        public override void ProcessFrame(Playable playable, FrameData info, object playerData)
        {
            Renderer controller = playerData as Renderer;

            if (controller == null)
            {
                return;
            }

            int inputCount = playable.GetInputCount();

            if (inputCount == 0)
            {
                return;
            }

            float   totalWeight = 0;
            Vector4 value       = Vector4.zero;

            for (int i = 0; i < inputCount; i++)
            {
                var inputPlayable  = (ScriptPlayable <EZMaterialVectorPropertyBehaviour>)playable.GetInput(i);
                var inputBehaviour = inputPlayable.GetBehaviour();

                float inputWeight = playable.GetInputWeight(i);
                totalWeight += inputWeight;

                value += inputBehaviour.value * inputWeight;
            }

            controller.GetPropertyBlock(propertyBlock);
            value = Vector4.Lerp(defaultValue, value, totalWeight);
            propertyBlock.SetVector(propertyName, value);
            controller.SetPropertyBlock(propertyBlock);
        }
예제 #30
0
    public override void ProcessFrame(Playable playable, FrameData info, object playerData)
    {
        GameObject subsObject   = playerData as GameObject;
        string     currentText  = "";
        float      currentAlpha = 0f;

        if (!subsObject)
        {
            return;
        }

        int inputCount = playable.GetInputCount();

        for (int i = 0; i < inputCount; i++)
        {
            float inputWeight = playable.GetInputWeight(i);
            if (inputWeight > 0f)
            {
                ScriptPlayable <SubtitleBehaviour> inputPlayable;
                inputPlayable = (ScriptPlayable <SubtitleBehaviour>)playable.GetInput(i);
                SubtitleBehaviour input = inputPlayable.GetBehaviour();

                currentText  = input.subtitleText;
                currentAlpha = inputWeight;
            }
        }
        UpdateText(subsObject, currentText, currentAlpha);
    }