public override void UpdateInfo(SynctoryFrameInfo info) { if (!enabled) return; string clipName = string.Format("{0}", info.Unit.Key); switch (BakeMode) { case BakeOption.NONE: //TODO: Cache existence if (HadClipAtStartup(clipName)) { PlayClip(clipName, StampUtils.InfoToSeconds(info)); } else { OnNoAnimation(); } break; case BakeOption.MISSING_ANIMATIONS: if (HadClipAtStartup(clipName)) { PlayClip(clipName, StampUtils.InfoToSeconds(info)); } else { BakeAnimation(info); } break; case BakeOption.OVERWRITE_ANIMATIONS: if (HadClipAtStartup(clipName)) { OverwriteAnimation(info); } else { BakeAnimation(info); } break; } }
public override void UpdateInfo(SynctoryFrameInfo info) { int hash = GetHash(info.Unit.Key); switch (BakeMode) { case BakeOption.NONE: //TODO: Cache existence if (HasStateHash(hash)) { PlayAnimHash(hash, info.UnitProgression); } else { OnNoAnimation(); } break; case BakeOption.MISSING_ANIMATIONS: if (HasStateHash(hash)) { PlayAnimHash(hash, info.UnitProgression); } else { BakeAnimation(info); } break; case BakeOption.OVERWRITE_ANIMATIONS: if (HasStateHash(hash)) { OverwriteAnimation(info); } else { BakeAnimation(info); } break; } }
//NOTE: Units MUST be in order ////TODO: also need to check steps are all sequetial (in timestamps) too public SynctoryFrameInfo UpdateTime(TimeSpan time) { if (CachedUnits.Count == 0) { Debug.LogError("[Location] No cached units in location"); return null; } TimeSpan unitEnd = TimeSpan.MaxValue; Unit candidateUnit = null; foreach (Unit unit in CachedUnits) { if (time >= unit.StartTime) { candidateUnit = unit; } else { unitEnd = unit.StartTime; break; } } CurrentUnit = candidateUnit; SynctoryFrameInfo info = new SynctoryFrameInfo(); info.Unit = CurrentUnit; info.Ticks = time.Ticks - CurrentUnit.StartTime.Ticks; info.TotalTicks = unitEnd.Ticks - CurrentUnit.StartTime.Ticks; LastFrameInfo = info; CurrentUnitProgression = LastFrameInfo.UnitProgression; return LastFrameInfo; }
protected void UpdateBinders(SynctoryFrameInfo info) { if (!Application.isPlaying) { return; } foreach (SynctoryBinder binder in _Binders) { binder.UpdateInfo(info); } }
private void PlayClip(SynctoryFrameInfo info) { UpdateTime(info); UpdatePitch(info); //TODO: skip time if delta too large //_AudioSource.time = (float) TimeSpan.FromTicks((long) info.Ticks).TotalSeconds; if (!_AudioSource.isPlaying) { _AudioSource.Play(); } }
public override void UpdateInfo(SynctoryFrameInfo info) { if (!Synctory.Clock.IsPlaying()) { _AudioSource.Stop(); return; } if (!TryUpdateClip(info.Unit.Key)) { return; } float seconds = (float) TimeSpan.FromTicks((long) info.Ticks).TotalSeconds; if (seconds > _AudioSource.clip.length) { OnClipEnd(); } else { PlayClip(info); } }
private void UpdateTime(SynctoryFrameInfo info) { float syncSeconds= (float) TimeSpan.FromTicks((long) info.Ticks).TotalSeconds; float playbackDelta = _AudioSource.time - syncSeconds; if (Mathf.Abs(playbackDelta) >= SKIP_DELTA_THRESHOLD) { _AudioSource.time = (float) TimeSpan.FromTicks((long) info.Ticks).TotalSeconds; } }
private void UpdatePitch(SynctoryFrameInfo info) { float syncSeconds= (float) TimeSpan.FromTicks((long) info.Ticks).TotalSeconds; float playbackDelta = _AudioSource.time - syncSeconds; float deltaTime = Time.smoothDeltaTime; float targetPitch = (deltaTime - playbackDelta) / deltaTime; _TargetPitch = Mathf.Min(MAX_PITCH, Mathf.Max(MIN_PITCH, targetPitch)); _AudioSource.pitch += (_TargetPitch - _AudioSource.pitch) / PITCH_SEEK_DAMPENER; //Debug.Log("[AUDIO] Playback delta: " + playbackDelta + " pitch: " + _AudioSource.pitch); }
public void TimeUpdated(SynctoryFrameInfo info) { UpdateBinders(info); }
private void BakeAnimation(SynctoryFrameInfo info) { }
private void OverwriteAnimation(SynctoryFrameInfo info) { }
public override void UpdateInfo(SynctoryFrameInfo info) { int locationKey = info.Unit.Location.Key; _Agent.SetDestination(_Locations[locationKey].transform.position); }
private void BakeAnimation(SynctoryFrameInfo info) { string clipName = string.Format("{0}", info.Unit.Key); AnimationClip clip = GetAnimationClip(clipName); float currentTime = StampUtils.InfoToSeconds(info); AnimUtils.AddTransformCurve("m_LocalPosition.x", clip, _PrevTime, _PrevXPosition, currentTime, transform.localPosition.x); AnimUtils.AddTransformCurve("m_LocalPosition.z", clip, _PrevTime, _PrevZPosition, currentTime, transform.localPosition.z); _PrevXPosition = transform.localPosition.x; _PrevZPosition = transform.localPosition.z; _PrevTime = currentTime; }
public abstract void UpdateInfo(SynctoryFrameInfo info);