KeyframedAnimationSet CreateAnimationSet() { var trackList = Editor.Parser.ANIC.ChildList; if ((trackList == null) || (trackList.Count <= 0)) { return(null); } KeyframedAnimationSet set = new KeyframedAnimationSet("SetName", 1, PlaybackType.Once, trackList.Count, new CallbackKey[0]); for (int i = 0; i < trackList.Count; i++) { var track = trackList[i]; ScaleKey[] scaleKeys = new ScaleKey[track.scalings.Length]; RotationKey[] rotationKeys = new RotationKey[track.rotations.Length]; TranslationKey[] translationKeys = new TranslationKey[track.translations.Length]; set.RegisterAnimationKeys(track.boneFrame, scaleKeys, rotationKeys, translationKeys); for (int j = 0; j < track.scalings.Length; j++) { float time = track.scalings[j].index; ScaleKey scale = new ScaleKey(); scale.Time = time; scale.Value = track.scalings[j].value; //scaleKeys[j] = scale; set.SetScaleKey(i, j, scale); } for (int j = 0; j < track.rotations.Length; j++) { float time = track.rotations[j].index; RotationKey rotation = new RotationKey(); rotation.Time = time; rotation.Value = track.rotations[j].value; //rotationKeys[j] = rotation; set.SetRotationKey(i, j, rotation); } for (int j = 0; j < track.translations.Length; j++) { float time = track.translations[j].index; TranslationKey translation = new TranslationKey(); translation.Time = time; translation.Value = track.translations[j].value; //translationKeys[j] = translation; set.SetTranslationKey(i, j, translation); } } return(set); }
void LerpBones2(RecoilType _type, RotationKey _lastKey, RotationKey _curKey, out bool _finished) { _finished = false; float recoilSplit = recoilTime / keys.Length; timer += Time.deltaTime; if (timer > recoilSplit) { timer = recoilSplit; } float perc = timer / recoilSplit; if (_type == RecoilType.First) { for (int i = 0; i < bones.Length; i++) { bones[i].localRotation = Quaternion.Lerp(bones[i].localRotation, Quaternion.Euler(_curKey.rotations[i]), perc); } } else if (_type == RecoilType.Keys) { for (int i = 0; i < bones.Length; i++) { bones[i].localRotation = Quaternion.Lerp(Quaternion.Euler(_lastKey.rotations[i]), Quaternion.Euler(_curKey.rotations[i]), perc); } } else { for (int i = 0; i < bones.Length; i++) { bones[i].localRotation = Quaternion.Lerp(Quaternion.Euler(_lastKey.rotations[i]), bones[i].localRotation, perc); } } if (perc >= 1) { _finished = true; timer = 0; } }
IEnumerator DoConvertTake(AMTakeData oldTake, Take newTake, bool isMeta, string assetPath) { newTake.name = oldTake.name; newTake.frameRate = oldTake.frameRate; newTake.endFramePadding = oldTake.endFramePadding; newTake.numLoop = oldTake.numLoop; newTake.loopMode = oldTake.loopMode; newTake.loopBackToFrame = oldTake.loopBackToFrame; newTake.trackCounter = oldTake.track_count; newTake.groupCounter = oldTake.group_count; //go through groups newTake.rootGroup = new Group(); newTake.rootGroup.group_name = oldTake.rootGroup.group_name; newTake.rootGroup.group_id = oldTake.rootGroup.group_id; newTake.rootGroup.elements = new List <int>(oldTake.rootGroup.elements); newTake.rootGroup.foldout = oldTake.rootGroup.foldout; newTake.groupValues = new List <Group>(); foreach (var oldGroup in oldTake.groupValues) { var newGroup = new Group(); newGroup.group_name = oldGroup.group_name; newGroup.group_id = oldGroup.group_id; newGroup.elements = new List <int>(oldGroup.elements); newGroup.foldout = oldGroup.foldout; newTake.groupValues.Add(newGroup); } //go through tracks newTake.trackValues = new List <Track>(); foreach (var oldTrack in oldTake.trackValues) { AddMessage(" - convert track: " + oldTrack.name); Track newTrack = null; if (oldTrack is AMAnimationTrack) { newTrack = new UnityAnimationTrack(); ConvertTrackCommonFields(oldTrack, newTrack, true, isMeta); newTrack.keys = new List <Key>(); foreach (AMAnimationKey oldKey in oldTrack.keys) { var newKey = new UnityAnimationKey(); ConvertKeyCommonFields(oldKey, newKey); newKey.wrapMode = oldKey.wrapMode; newKey.amClip = oldKey.amClip; newKey.crossfade = oldKey.crossfade; newKey.crossfadeTime = oldKey.crossfadeTime; newTrack.keys.Add(newKey); } } else if (oldTrack is AMAudioTrack) { newTrack = new AudioTrack(); ConvertTrackCommonFields(oldTrack, newTrack, true, isMeta); newTrack.keys = new List <Key>(); foreach (AMAudioKey oldKey in oldTrack.keys) { var newKey = new AudioKey(); ConvertKeyCommonFields(oldKey, newKey); newKey.audioClip = oldKey.audioClip; newKey.loop = oldKey.loop; newKey.oneShot = oldKey.oneShot; newTrack.keys.Add(newKey); } } else if (oldTrack is AMCameraSwitcherTrack) { newTrack = new CameraSwitcherTrack(); ConvertTrackCommonFields(oldTrack, newTrack, true, isMeta); newTrack.keys = new List <Key>(); for (int i = 0; i < oldTrack.keys.Count; i++) { var oldKey = (AMCameraSwitcherKey)oldTrack.keys[i]; var newKey = new CameraSwitcherKey(); ConvertKeyCommonFields(oldKey, newKey); newKey.type = oldKey.type; newKey.typeEnd = oldKey.typeEnd; newKey.color = oldKey.color; newKey.colorEnd = oldKey.colorEnd; newKey.cameraFadeType = oldKey.cameraFadeType; newKey.cameraFadeParameters = new List <float>(oldKey.cameraFadeParameters); newKey.irisShape = oldKey.irisShape; newKey.still = oldKey.still; newKey.endFrame = oldKey.endFrame; if (isMeta) { newKey.SetCameraDirect(null, oldKey.cameraTargetPath); newKey.SetCameraEndDirect(null, oldKey.cameraEndTargetPath); } else { newKey.SetCameraDirect(oldKey.getCamera(null), ""); newKey.SetCameraDirect(oldKey.getCameraEnd(null), ""); } newTrack.keys.Add(newKey); } } else if (oldTrack is AMEventTrack) { var newEventTrack = new EventTrack(); newTrack = newEventTrack; ConvertTrackCommonFields(oldTrack, newTrack, false, isMeta); newTrack.keys = new List <Key>(); string eventCompName = null; //TODO: create new tracks per different components from keys //for now we only allow conversion of one component, so the first key will be used. foreach (AMEventKey oldKey in oldTrack.keys) { string keyCompName = oldKey.getComponentName(); if (string.IsNullOrEmpty(eventCompName)) { if (!string.IsNullOrEmpty(keyCompName)) { eventCompName = keyCompName; AddMessage(" - EventTrack using component: " + eventCompName); if (isMeta) { newEventTrack.SetTargetAsComponentDirect(oldTrack.targetPath, null, eventCompName); } else { newEventTrack.SetTargetAsComponentDirect("", oldKey.getComponentRef(), eventCompName); } } } //only add if component matched if (string.IsNullOrEmpty(eventCompName) || keyCompName != eventCompName) { AddMessage(" - Cannot add EventKey with Component: " + eventCompName, Color.yellow); continue; } var newKey = new EventKey(); ConvertKeyCommonFields(oldKey, newKey); newKey.useSendMessage = oldKey.useSendMessage; newKey.methodName = oldKey.methodName; newKey.parameters = new List <EventParameter>(oldKey.parameters.Count); for (int i = 0; i < oldKey.parameters.Count; i++) { var oldParm = oldKey.parameters[i]; var newParm = new EventParameter(); ConvertEventParameter(oldParm, newParm); newKey.parameters.Add(newParm); } newTrack.keys.Add(newKey); } } else if (oldTrack is AMGOSetActiveTrack) { var oldGOTrack = (AMGOSetActiveTrack)oldTrack; var newGOTrack = new GOSetActiveTrack(); newTrack = newGOTrack; ConvertTrackCommonFields(oldTrack, newTrack, true, isMeta); newGOTrack.startActive = oldGOTrack.startActive; newTrack.keys = new List <Key>(); foreach (AMGOSetActiveKey oldKey in oldTrack.keys) { var newKey = new GOSetActiveKey(); ConvertKeyCommonFields(oldKey, newKey); newKey.setActive = oldKey.setActive; newKey.endFrame = oldKey.endFrame; newTrack.keys.Add(newKey); } } else if (oldTrack is AMMaterialTrack) { var oldMatTrack = (AMMaterialTrack)oldTrack; var newMatTrack = new MaterialTrack(); newTrack = newMatTrack; ConvertTrackCommonFields(oldTrack, newTrack, true, isMeta); newMatTrack.materialIndex = oldMatTrack.materialIndex; newMatTrack.property = oldMatTrack.property; newMatTrack.propertyType = (MaterialTrack.ValueType)oldMatTrack.propertyType; newTrack.keys = new List <Key>(); foreach (AMMaterialKey oldKey in oldTrack.keys) { var newKey = new MaterialKey(); ConvertKeyCommonFields(oldKey, newKey); newKey.endFrame = oldKey.endFrame; newKey.texture = oldKey.texture; newKey.vector = oldKey.vector; newTrack.keys.Add(newKey); } } else if (oldTrack is AMOrientationTrack) { newTrack = new OrientationTrack(); ConvertTrackCommonFields(oldTrack, newTrack, true, isMeta); newTrack.keys = new List <Key>(); foreach (AMOrientationKey oldKey in oldTrack.keys) { var newKey = new OrientationKey(); ConvertKeyCommonFields(oldKey, newKey); if (isMeta) { newKey.SetTargetDirect(null, oldKey.GetTargetPath()); } else { newKey.SetTargetDirect(oldKey.GetTarget(null), ""); } newKey.endFrame = oldKey.endFrame; newTrack.keys.Add(newKey); } } else if (oldTrack is AMPropertyTrack) { var oldPropTrack = (AMPropertyTrack)oldTrack; var newPropTrack = new PropertyTrack(); newTrack = newPropTrack; ConvertTrackCommonFields(oldTrack, newTrack, true, isMeta); newPropTrack.valueType = (PropertyTrack.ValueType)oldPropTrack.valueType; if (oldPropTrack.isPropertySet()) { Component comp = oldPropTrack.GetTargetComp(null); string compName = oldPropTrack.getComponentName(); bool isField = oldPropTrack.isField; string fieldName = oldPropTrack.getMemberName(); if (isMeta) { newPropTrack.SetTargetCompDirect(null, compName, isField, fieldName); } else { newPropTrack.SetTargetCompDirect(comp, compName, isField, fieldName); } } newTrack.keys = new List <Key>(); foreach (AMPropertyKey oldKey in oldTrack.keys) { var newKey = new PropertyKey(); ConvertKeyCommonFields(oldKey, newKey); newKey.endFrame = oldKey.endFrame; newKey.val = oldKey.val; newKey.valString = oldKey.valString; newKey.valObj = oldKey.valObj; newKey.vect4 = oldKey.vect4; newTrack.keys.Add(newKey); } } else if (oldTrack is AMRotationEulerTrack) { var oldRotEulerTrack = (AMRotationEulerTrack)oldTrack; var newRotEulerTrack = new RotationEulerTrack(); newTrack = newRotEulerTrack; ConvertTrackCommonFields(oldTrack, newTrack, true, isMeta); newRotEulerTrack.axis = (AxisFlags)oldRotEulerTrack.axis; newTrack.keys = new List <Key>(); foreach (AMRotationEulerKey oldKey in oldTrack.keys) { var newKey = new RotationEulerKey(); ConvertKeyCommonFields(oldKey, newKey); newKey.rotation = oldKey.rotation; newKey.endFrame = oldKey.endFrame; newTrack.keys.Add(newKey); } } else if (oldTrack is AMRotationTrack) { newTrack = new RotationTrack(); ConvertTrackCommonFields(oldTrack, newTrack, true, isMeta); newTrack.keys = new List <Key>(); foreach (AMRotationKey oldKey in oldTrack.keys) { var newKey = new RotationKey(); ConvertKeyCommonFields(oldKey, newKey); newKey.rotation = oldKey.rotation; newKey.endFrame = oldKey.endFrame; newTrack.keys.Add(newKey); } } else if (oldTrack is AMTranslationTrack) { var oldTransTrack = (AMTranslationTrack)oldTrack; var newTransTrack = new TranslationTrack(); newTrack = newTransTrack; ConvertTrackCommonFields(oldTrack, newTrack, true, isMeta); newTransTrack.pixelPerUnit = oldTransTrack.pixelPerUnit; newTransTrack.pixelSnap = oldTransTrack.pixelSnap; newTrack.keys = new List <Key>(); foreach (AMTranslationKey oldKey in oldTrack.keys) { var newKey = new TranslationKey(); ConvertKeyCommonFields(oldKey, newKey); newKey.position = oldKey.position; newKey.endFrame = oldKey.endFrame; newKey.isConstSpeed = oldKey.isConstSpeed; newKey.path = new Vector3[oldKey.path.Length]; System.Array.Copy(oldKey.path, newKey.path, newKey.path.Length); newTrack.keys.Add(newKey); } } else if (oldTrack is AMTriggerTrack) //convert TriggerTrack to EventTrack with TriggerSignal { var newTriggerTrack = new EventTrack(); newTrack = newTriggerTrack; ConvertTrackCommonFields(oldTrack, newTrack, false, isMeta); //grab/create signal for this trigger string signalPath = GetTriggerSignalPath(assetPath); TriggerSignal triggerSignal; if (!mTriggerSignalLookup.TryGetValue(signalPath, out triggerSignal)) { //try to load it if it exists triggerSignal = AssetDatabase.LoadAssetAtPath <TriggerSignal>(signalPath); if (!triggerSignal) { AddMessage(" - Creating Trigger Signal: " + signalPath); triggerSignal = ScriptableObject.CreateInstance <TriggerSignal>(); AssetDatabase.CreateAsset(triggerSignal, signalPath); AssetDatabase.SaveAssets(); yield return(new WaitForFixedUpdate()); } mTriggerSignalLookup.Add(signalPath, triggerSignal); } newTriggerTrack.SetTargetAsObject(triggerSignal); newTrack.keys = new List <Key>(); foreach (AMTriggerKey oldKey in oldTrack.keys) { var newKey = new EventKey(); ConvertKeyCommonFields(oldKey, newKey); newKey.useSendMessage = false; newKey.methodName = "Invoke"; newKey.parameters = new List <EventParameter>(3); newKey.parameters.Add(new EventParameter() { valueType = EventData.ValueType.String, val_string = oldKey.valueString }); newKey.parameters.Add(new EventParameter() { valueType = EventData.ValueType.Integer, val_int = oldKey.valueInt }); newKey.parameters.Add(new EventParameter() { valueType = EventData.ValueType.Float, val_float = oldKey.valueFloat }); newTrack.keys.Add(newKey); } } newTake.trackValues.Add(newTrack); yield return(new WaitForFixedUpdate()); } }
private void buttonAnimationKeyframeNew_Click(object sender, EventArgs e) { try { if (listViewAnimationTrack.SelectedItems.Count != 1) { return; } xaAnimationTrack track = (xaAnimationTrack)listViewAnimationTrack.SelectedItems[0].Tag; int animation = Editor.Parser.AnimationSection.TrackList.IndexOf(track); int timeIndex = (int)numericAnimationClipKeyframe.Value; xaAnimationKeyframe keyframe = (xaAnimationKeyframe)Gui.Scripting.RunScript(EditorVar + ".NewKeyframe(track=" + EditorVar + ".Parser.AnimationSection.TrackList[" + animation + "], index=" + timeIndex + ")"); Changed = Changed; int key = track.KeyframeList.IndexOf(keyframe); if (key >= animationSet.GetRotationKeyCount(animationSet.GetAnimationIndex(track.Name))) { if (animationSet != null) { Pause(); renderTimer.Tick -= renderTimer_Tick; Gui.Renderer.RemoveAnimationSet(animationId); animationSet.Dispose(); animationSet = null; } animationSet = CreateAnimationSet(); if (animationSet != null) { animationId = Gui.Renderer.AddAnimationSet(animationSet); renderTimer.Interval = 10; renderTimer.Tick += new EventHandler(renderTimer_Tick); Play(); } } float time = timeIndex; ScaleKey scale = new ScaleKey(); scale.Time = time; scale.Value = keyframe.Scaling; animationSet.SetScaleKey(animation, key, scale); RotationKey rotation = new RotationKey(); rotation.Time = time; rotation.Value = Quaternion.Invert(keyframe.Rotation); animationSet.SetRotationKey(animation, key, rotation); TranslationKey translation = new TranslationKey(); translation.Time = time; translation.Value = keyframe.Translation; animationSet.SetTranslationKey(animation, key, translation); AdvanceTime(0); AddTrackToEditedTracks(track); listViewAnimationTrack.SelectedItems[0].SubItems[1].Text = track.KeyframeList.Count.ToString(); listViewAnimationTrack.SelectedItems[0].SubItems[2].Text = (track.KeyframeList[track.KeyframeList.Count - 1].Index - track.KeyframeList[0].Index + 1).ToString(); DisplayNewKeyframe(true); } catch (Exception ex) { Utility.ReportException(ex); } }
KeyframedAnimationSet CreateAnimationSet() { var trackList = Editor.Parser.AnimationSection.TrackList; if ((trackList == null) || (trackList.Count <= 0)) { return null; } KeyframedAnimationSet set = new KeyframedAnimationSet("SetName", 1, PlaybackType.Once, trackList.Count, new CallbackKey[0]); for (int i = 0; i < trackList.Count; i++) { var track = trackList[i]; var keyframes = track.KeyframeList; ScaleKey[] scaleKeys = new ScaleKey[keyframes.Count]; RotationKey[] rotationKeys = new RotationKey[keyframes.Count]; TranslationKey[] translationKeys = new TranslationKey[keyframes.Count]; for (int k = 0; k < 10; k++) { try { set.RegisterAnimationKeys(k == 0 ? track.Name : track.Name + "_error" + k, scaleKeys, rotationKeys, translationKeys); for (int j = 0; j < keyframes.Count; j++) { float time = keyframes[j].Index; ScaleKey scale = new ScaleKey(); scale.Time = time; scale.Value = keyframes[j].Scaling; //scaleKeys[j] = scale; set.SetScaleKey(i, j, scale); RotationKey rotation = new RotationKey(); rotation.Time = time; rotation.Value = Quaternion.Invert(keyframes[j].Rotation); //rotationKeys[j] = rotation; set.SetRotationKey(i, j, rotation); TranslationKey translation = new TranslationKey(); translation.Time = time; translation.Value = keyframes[j].Translation; //translationKeys[j] = translation; set.SetTranslationKey(i, j, translation); } break; } catch (Exception ex) { switch (k) { case 0: Report.ReportLog("Error in Track: " + track.Name); Utility.ReportException(ex); break; case 9: Report.ReportLog("Aborting to register with different name. Animation will not be displayed."); break; } } } } return set; }
KeyframedAnimationSet CreateAnimationSet() { var trackList = Editor.Parser.ANIC.ChildList; if ((trackList == null) || (trackList.Count <= 0)) { return null; } KeyframedAnimationSet set = new KeyframedAnimationSet("SetName", 1, PlaybackType.Once, trackList.Count, new CallbackKey[0]); for (int i = 0; i < trackList.Count; i++) { var track = trackList[i]; ScaleKey[] scaleKeys = new ScaleKey[track.scalings.Length]; RotationKey[] rotationKeys = new RotationKey[track.rotations.Length]; TranslationKey[] translationKeys = new TranslationKey[track.translations.Length]; set.RegisterAnimationKeys(track.boneFrame, scaleKeys, rotationKeys, translationKeys); for (int j = 0; j < track.scalings.Length; j++) { float time = track.scalings[j].index; ScaleKey scale = new ScaleKey(); scale.Time = time; scale.Value = track.scalings[j].value; //scaleKeys[j] = scale; set.SetScaleKey(i, j, scale); } for (int j = 0; j < track.rotations.Length; j++) { float time = track.rotations[j].index; RotationKey rotation = new RotationKey(); rotation.Time = time; rotation.Value = track.rotations[j].value; //rotationKeys[j] = rotation; set.SetRotationKey(i, j, rotation); } for (int j = 0; j < track.translations.Length; j++) { float time = track.translations[j].index; TranslationKey translation = new TranslationKey(); translation.Time = time; translation.Value = track.translations[j].value; //translationKeys[j] = translation; set.SetTranslationKey(i, j, translation); } } return set; }