Copying and Pasting cs Code

In cs, like in almost any computer programming language, reading data from a file can be tricky. You add extra lines of code to tell the computer what to do. Sometimes you can copy and paste these lines from other peoples’ code.

For example, you can follow the pattern in this listing:

         public static void AddKey(this AnimationCurve curve, Keyframe keyframe, TimelineKey lastKey)
         {
             var keys = curve.keys;

             //Early out - if this is the first key on this curve just add it
             if (keys.Length == 0)
             {
                 curve.AddKey(keyframe);
                 return;
             }

             if (lastKey == null)
             {
                 Debug.Log(string.Format("ERROR: NULL lastkey passed to AddKey when curve contains {0} keys", keys.Length));
                 return;
             }

             //Get the last keyframe
             Keyframe lastKeyframe = keys[keys.Length - 1];

             //If no TimelineKey is supplied, default to Linear curve
             CurveType curveType = lastKey.CurveType;

             switch (curveType)
             {
                 case CurveType.Instant:
                     lastKeyframe.outTangent = 0;
                     curve.MoveKey(keys.Length - 1, lastKeyframe);

                     keyframe.inTangent = float.PositiveInfinity;
                     curve.AddKey(keyframe);
                     break;

                 case CurveType.Linear:
                     var val = (keyframe.value - lastKeyframe.value) / (keyframe.time - lastKeyframe.time);
                     lastKeyframe.outTangent = val;
                     curve.MoveKey(keys.Length - 1, lastKeyframe);

                     keyframe.inTangent = val;
                     curve.AddKey(keyframe);
                     break;

                 case CurveType.Quadratic:
                     {
                         //Increase to cubic
                         var c1 = (2 * lastKey.CurveParams[0]) / 3;
                         var c2 = 1 - (2 * lastKey.CurveParams[0] + 1) / 3;

                         //Convert [0,1] into unity-acceptable tangents
                         c1 *= 3 * (keyframe.value - lastKeyframe.value) / (keyframe.time - lastKeyframe.time);
                         c2 *= 3 * (keyframe.value - lastKeyframe.value) / (keyframe.time - lastKeyframe.time);

                         //Set the out tangent for the previous frame and update
                         lastKeyframe.outTangent = c1;
                         curve.MoveKey(keys.Length - 1, lastKeyframe);

                         //Set the in tangent for the current frame and add
                         keyframe.inTangent = c2;
                         curve.AddKey(keyframe);
                         break;
                     }

                 case CurveType.Cubic:
                     {
                         //Get curve parameters
                         var c1 = lastKey.CurveParams[0];
                         var c2 = 1 - lastKey.CurveParams[1];

                         //Convert [0,1] into unity-acceptable tangents
                         c1 *= 3 * (keyframe.value - lastKeyframe.value) / (keyframe.time - lastKeyframe.time);
                         c2 *= 3 * (keyframe.value - lastKeyframe.value) / (keyframe.time - lastKeyframe.time);

                         //Set the out tangent for the previous frame and update
                         lastKeyframe.outTangent = c1;
                         curve.MoveKey(keys.Length - 1, lastKeyframe);

                         //Set the in tangent for the current frame and add
                         keyframe.inTangent = c2;
                         curve.AddKey(keyframe);
                         break;
                     }

                 default:
                     Debug.LogWarning("CurveType " + curveType.ToString() + " not yet supported!");
                     break;
             }
         }