Beispiel #1
0
    public void Build(string goName, bool autoKill, UpdateType updateType)
    {
        if(mSequence != null) {
            HOTween.Kill(mSequence);
            mInsertActionTrack = null;
            mActionTween = null;
        }

        mSequence = new Sequence(
            new SequenceParms()
            .Id(string.Format("{0}:{1}", goName, mTake.name))
            .UpdateType(updateType)
            .AutoKill(autoKill)
            .Loops(mTake.numLoop, mTake.loopMode)
            .OnComplete(OnSequenceComplete));

        mTake.maintainCaches(mTarget);

        float minWaitTime = float.MaxValue;

        List<List<AMActionData>> trackValueSets = null;

        foreach(AMTrack track in mTake.trackValues) {
            Object tgt = null;
            if((tgt = track.GetTarget(mTarget)) != null) {
                track.buildSequenceStart(this);

                int keyMax = track.keys.Count;
                if(keyMax > 0) {
                    for(int keyInd = 0; keyInd < keyMax; keyInd++) {
                        AMKey key = track.keys[keyInd];
                        key.build(this, track, keyInd, tgt);
                    }

                    float waitTime = track.keys[0].getWaitTime(mTake.frameRate, 0.0f);
                    if(waitTime < minWaitTime)
                        minWaitTime = waitTime;
                }

                //check to see if we have value sets for this track
                if(mInsertActionTrack != null) {
                    if(trackValueSets == null)
                        trackValueSets = new List<List<AMActionData>>();
                    trackValueSets.Add(mInsertActionTrack);
                    mInsertActionTrack = null;
                }
            }
        }

        //build the value track
        mInsertActionTrack = null;
        if(trackValueSets != null && trackValueSets.Count > 0) {
            mActionTween = new AMActionTween(trackValueSets);
            mSequence.Insert(mActionTween.startTime, HOTween.To(this, mActionTween.duration, new TweenParms().Prop("id", mActionTween)));

        }

        //prepend delay at the beginning
        if(minWaitTime > 0.0f)
            mSequence.PrependInterval(minWaitTime);
    }