示例#1
0
        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);
        }
示例#2
0
    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;
        }
    }
示例#3
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());
            }
        }
示例#4
0
        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);
            }
        }
示例#5
0
        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;
        }
示例#6
0
        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;
        }