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); } }
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); } }
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); } }
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; } }
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); } }