示例#1
0
    public override Playable CreatePlayable(PlayableGraph graph, GameObject owner)
    {
        var playable = ScriptPlayable <TimeMachineBehavior> .Create(graph, template);

        TimeMachineBehavior clone = playable.GetBehaviour();

        clone.trigger        = trigger.Resolve(graph.GetResolver());
        clone.markerToJumpTo = markerToJumpTo;
        clone.action         = action;
        clone.condition      = condition;
        clone.markerLabel    = markerLabel;
        clone.timeToJumpTo   = timeToJumpTo;

        return(playable);
    }
示例#2
0
    public override void ProcessFrame(Playable playable, FrameData info, object playerData)
    {
        //ScriptPlayable<TimeMachineBehaviour> inputPlayable = (ScriptPlayable<TimeMachineBehaviour>)playable.GetInput(i);
        //Debug.Log(PlayableExtensions.GetTime<ScriptPlayable<TimeMachineBehaviour>>(inputPlayable));

        if (!Application.isPlaying)
        {
            return;
        }

        int inputCount = playable.GetInputCount();

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

            if (inputWeight > 0f)
            {
                if (!input.clipExecuted)
                {
                    switch (input.action)
                    {
                    case TimeMachineBehavior.TimeMachineAction.JumpToTime:
                    case TimeMachineBehavior.TimeMachineAction.JumpToMarker:
                        if (input.ConditionMet())
                        {
                            //Rewind
                            if (input.action == TimeMachineBehavior.TimeMachineAction.JumpToTime)
                            {
                                //Jump to time
                                (playable.GetGraph().GetResolver() as PlayableDirector).time = (double)input.timeToJumpTo;
                            }
                            else
                            {
                                //Jump to marker
                                double t = markerClips[input.markerToJumpTo];
                                (playable.GetGraph().GetResolver() as PlayableDirector).time = t;
                            }
                            input.clipExecuted = false;     //we want the jump to happen again!
                        }
                        break;
                    }
                }
            }
        }
    }