Ejemplo n.º 1
0
    public override void Read(
        TagRecord _Tag
        , BinaryReader _GAFFileReader
        , ref GAFAnimationData _SharedData
        , ref GAFTimelineData _CurrentTimeline)
    {
        uint framesCount = _GAFFileReader.ReadUInt32();

        for (uint i = 0; i < framesCount; ++i)
        {
            uint         frameNumber = _GAFFileReader.ReadUInt32();
            GAFFrameData frame       = new GAFFrameData(frameNumber);

            bool hasChangesInDisplayList = _GAFFileReader.ReadByte() == 1;
            bool hasActions = _GAFFileReader.ReadByte() == 1;

            if (hasChangesInDisplayList)
            {
                uint statesCount = _GAFFileReader.ReadUInt32();
                for (uint j = 0; j < statesCount; ++j)
                {
                    frame.addState(ExctractState(_GAFFileReader));
                }
            }

            if (hasActions)
            {
                uint actionsCount = _GAFFileReader.ReadUInt32();
                for (uint j = 0; j < actionsCount; ++j)
                {
                    var type       = _GAFFileReader.ReadUInt32();
                    var actionData = new GAFActionData((GAFActionData.ActionType)type);

                    uint parametersCount = _GAFFileReader.ReadUInt32();
                    for (int k = 0; k < parametersCount; ++k)
                    {
                        actionData.parameters.Add(GAFReader.ReadString(_GAFFileReader));
                    }
                }
            }

            _CurrentTimeline.frames.Add(frame.frameNumber, frame);
        }
    }
Ejemplo n.º 2
0
    public override void Read(
        TagRecord _Tag
        , BinaryReader _GAFFileReader
        , ref GAFAnimationData _SharedData
        , ref GAFTimelineData _CurrentTimeline)
    {
        uint framesCount = _GAFFileReader.ReadUInt32();

        for (uint i = 0; i < framesCount; ++i)
        {
            uint         frameNumber = _GAFFileReader.ReadUInt32();
            GAFFrameData frame       = new GAFFrameData(frameNumber);

            uint statesCount = _GAFFileReader.ReadUInt32();
            for (uint j = 0; j < statesCount; ++j)
            {
                frame.addState(ExctractState(_GAFFileReader));
            }

            _SharedData.rootTimeline.frames.Add(frame.frameNumber, frame);
        }
    }
Ejemplo n.º 3
0
        protected virtual List <GAFObjectStateData> getStates(uint _FrameNumber, bool _RefreshStates)
        {
            if (!_RefreshStates)
            {
                _RefreshStates = _FrameNumber < getCurrentFrameNumber();
            }

            if (_RefreshStates)
            {
                var frame   = new GAFFrameData(_FrameNumber);
                var objects = asset.getObjects(timelineID);
                var frames  = asset.getFrames(timelineID);

                foreach (var _obj in objects)
                {
                    frame.addState(new GAFObjectStateData(_obj.id));
                }

                foreach (var _frame in frames)
                {
                    if (_frame.Key > _FrameNumber)
                    {
                        break;
                    }

                    foreach (var _state in _frame.Value.states)
                    {
                        frame.states[_state.Key] = _state.Value;
                    }
                }

                return(frame.states.Values.ToList());
            }
            else
            {
                var frames = asset.getFrames(timelineID);
                if (_FrameNumber - getCurrentFrameNumber() == 1)
                {
                    if (frames.ContainsKey(_FrameNumber))
                    {
                        return(frames[_FrameNumber].states.Values.ToList());
                    }
                }
                else
                {
                    var frame = new GAFFrameData(_FrameNumber);
                    foreach (var _frame in frames)
                    {
                        if (_frame.Key > _FrameNumber)
                        {
                            break;
                        }

                        if (_frame.Key < getCurrentFrameNumber())
                        {
                            continue;
                        }

                        foreach (var _state in _frame.Value.states)
                        {
                            frame.states[_state.Key] = _state.Value;
                        }
                    }

                    return(frame.states.Values.ToList());
                }

                return(null);
            }
        }
Ejemplo n.º 4
0
        protected virtual List<GAFObjectStateData> getStates(uint _FrameNumber, bool _RefreshStates)
        {
            if (!_RefreshStates)
            {
                _RefreshStates = _FrameNumber < getCurrentFrameNumber();
            }

            if (_RefreshStates)
            {
                var frame = new GAFFrameData(_FrameNumber);
                var objects = asset.getObjects(timelineID);
                var frames = asset.getFrames(timelineID);

                foreach (var _obj in objects)
                {
                    frame.addState(new GAFObjectStateData(_obj.id));
                }

                foreach (var _frame in frames)
                {
                    if (_frame.Key > _FrameNumber)
                        break;

                    foreach (var _state in _frame.Value.states)
                    {
                        frame.states[_state.Key] = _state.Value;
                    }
                }

                return frame.states.Values.ToList();
            }
            else
            {
                var frames = asset.getFrames(timelineID);
                if (_FrameNumber - getCurrentFrameNumber() == 1)
                {
                    if (frames.ContainsKey(_FrameNumber))
                    {
                        return frames[_FrameNumber].states.Values.ToList();
                    }
                }
                else
                {
                    var frame = new GAFFrameData(_FrameNumber);
                    foreach (var _frame in frames)
                    {
                        if (_frame.Key > _FrameNumber)
                            break;

                        if (_frame.Key < getCurrentFrameNumber())
                            continue;

                        foreach (var _state in _frame.Value.states)
                        {
                            frame.states[_state.Key] = _state.Value;
                        }
                    }

                    return frame.states.Values.ToList();
                }

                return null;
            }
        }
Ejemplo n.º 5
0
        private void OnUpdate(float _TimeDelta)
        {
            m_Stopwatch += _TimeDelta;

            if (m_Stopwatch >= settings.targetSPF)
            {
                int framesCount = 1;
                if (settings.perfectTiming)
                {
                    m_StoredTime += m_Stopwatch - settings.targetSPF;
                    if (m_StoredTime > settings.targetSPF)
                    {
                        int additionalFrames = Mathf.FloorToInt(m_StoredTime / settings.targetSPF);
                        m_StoredTime = m_StoredTime - (additionalFrames * settings.targetSPF);
                        framesCount += additionalFrames;
                    }
                }

                m_Stopwatch = 0f;

                if (internalFrameNumber > 1)
                {
                    currentFrameNumber = !m_IsFirstFrame ? internalFrameNumber : internalFrameNumber - 1;
                    m_IsFirstFrame     = false;
                }
                else
                {
                    currentFrameNumber = currentSequence.startFrame - 1;
                    m_IsFirstFrame     = false;
                }

                m_TargetFrame = internalFrameNumber + (uint)framesCount;

                GAFFrameData tempFrame = null;

                for (currentFrameNumber = currentFrameNumber + 1; currentFrameNumber <= m_TargetFrame; currentFrameNumber++)
                {
                    if (currentFrameNumber > currentSequence.endFrame)
                    {
                        currentFrameNumber = currentSequence.endFrame;
                        break;
                    }

                    tempFrame = getFrame(currentFrameNumber);

                    for (int j = 0; j < tempFrame.events.Count; j++)
                    {
                        var tempEvent = tempFrame.events[j];
                        if (tempEvent.type != GAFBaseEvent.ActionType.SoundEvent)
                        {
                            tempEvent.execute(this);
                        }
                        else
                        {
                            var soundEvent = tempEvent as GAFSoundEvent;

                            if (soundEvent.action == GAFSoundEvent.SoundAction.Stop)
                            {
                                foreach (var frameAudioData in m_FramesAudioData)
                                {
                                    for (int i = 0, count = frameAudioData.audios.Count; i < count; i++)
                                    {
                                        var frameAudio = frameAudioData.audios[i];

                                        if (frameAudio.ID == soundEvent.id)
                                        {
                                            frameAudio.source.Stop();
                                        }
                                    }
                                }
                            }

                            else
                            {
                                var audioFrame = m_FramesAudioData.Find(x => x.frameNumber == tempFrame.frameNumber);
                                if (audioFrame != null)
                                {
                                    var data = audioFrame.audios.Find(x => x.ID == soundEvent.id);

                                    if (data != null)
                                    {
                                        switch (soundEvent.action)
                                        {
                                        case GAFSoundEvent.SoundAction.Continue:
                                            data.source.Play();
                                            break;

                                        case GAFSoundEvent.SoundAction.Start:
                                            if (!data.source.isPlaying)
                                            {
                                                data.source.Play();
                                            }
                                            break;
                                        }
                                    }
                                }
                            }
                        }
                    }

                    if (m_Triggers != null && m_Triggers.ContainsKey(tempFrame.frameNumber))
                    {
                        m_Triggers[tempFrame.frameNumber](this);
                    }
                }

                if (m_TargetFrame > currentSequence.endFrame)
                {
                    switch (settings.wrapMode)
                    {
                    case GAFWrapMode.Once:
                        updateToFrame(currentSequence.endFrame, true);
                        m_ContiniousPlaying = false;

                        setPlaying(false);
                        return;

                    case GAFWrapMode.Loop:
                        updateToFrame(currentSequence.startFrame, true);
                        currentFrameNumber = 0;
                        m_IsFirstFrame     = true;

                        if (on_stop_play != null)
                        {
                            on_stop_play(this);
                        }

                        if (on_start_play != null)
                        {
                            on_start_play(this);
                        }

                        return;

                    default:
                        m_ContiniousPlaying = false;
                        setPlaying(false);
                        return;
                    }
                }

                updateToFrame(m_TargetFrame, false);
            }
        }