public Animation.Clip QueryClip(Trajectory.Snippet currentSnippet) { // 1. Reduce cooldowns (after the previous Clip has finished) ReduceCooldowns(); // 2. Check if the next Clip is fitting (or the first one, if we reach the end) // The next Clip is NOT necesserily the product of the next Feature this._currentFeature = (this._currentFeature + SalamanderController.FeatureStep) % this._anim[this._currentAnimation].featureList.Count; this._maxTrajectoryDiff = currentSnippet.CalcDiff(this._anim[this._currentAnimation].featureList[this._currentFeature].snippet); if (this._maxTrajectoryDiff > SalamanderController.RecalculationThreshold) { (this._currentAnimation, this._currentFeature) = QueryFeature(currentSnippet); //Debug.Log("Recalculating"); //Debug.Log("File: " + this._currentAnimation + " Clip: " + this._currentFeature); } else { //Debug.Log("Not Recalculating"); } // 3. Construct the Clip, blend it with the current one and return it Animation.Clip nextClip = new Animation.Clip( this._anim[this._currentAnimation].frameList.GetRange( this._anim[this._currentAnimation].featureList[this._currentFeature].frameNum + SalamanderController.FramesPerPoint, SalamanderController.FramesPerPoint * (SalamanderController.FeaturePoints + SalamanderController.ClipBlendPoints) ) ); nextClip.BlendWith(_currentClip); _currentClip = nextClip; // 4. Put the current Feature on cooldown PutOnCooldown(this._anim[this._currentAnimation].featureList[this._currentFeature]); return(nextClip); }
public void LoadClip(Animation.Clip clip) { this._clip = clip; }