public override void lerp(FrameEncoding a, FrameEncoding b, float alpha) { CurlFrameEncoding start = a as CurlFrameEncoding; CurlFrameEncoding finish = b as CurlFrameEncoding; if (a != null && b != null) { if (!(start.LPos == Vector3.zero || finish.LPos == Vector3.zero)) { LPos = Vector3.LerpUnclamped(start.LPos, finish.LPos, alpha); } else { LPos = Vector3.zero; } if (!(start.RPos == Vector3.zero || finish.RPos == Vector3.zero)) { RPos = Vector3.LerpUnclamped(start.RPos, finish.RPos, alpha); } else { RPos = Vector3.zero; } LRot = Quaternion.SlerpUnclamped(start.LRot, finish.LRot, alpha); RRot = Quaternion.SlerpUnclamped(start.RRot, finish.RRot, alpha); for (int i = 0; i < LCurl.Length; i++) { LCurl[i] = (byte)((float)start.LCurl[i] + alpha * ((float)finish.LCurl[i] - (float)start.LCurl[i])); RCurl[i] = (byte)((float)start.RCurl[i] + alpha * ((float)finish.RCurl[i] - (float)start.RCurl[i])); } } }
public CurlFrameEncoding Copy() { CurlFrameEncoding state = new CurlFrameEncoding(); state.LPos.Set(LPos.x, LPos.y, LPos.z); state.RPos.Set(RPos.x, RPos.y, RPos.z); state.LRot.Set(LRot.x, LRot.y, LRot.z, LRot.w); state.RRot.Set(RRot.x, RRot.y, RRot.z, RRot.w); state.LCurl = new byte[6]; state.RCurl = new byte[6]; for (int i = 0; i < 6; i++) { state.LCurl[i] = LCurl[i]; state.RCurl[i] = RCurl[i]; } return(state); }