private void InitTriggersUI() { var btn = prefabFactory.CreateButton("Add triggers track"); btn.button.onClick.AddListener(() => { var target = new TriggersAnimationTarget { name = $"Triggers {current.targetTriggers.Count + 1}" }; target.AddEdgeFramesIfMissing(current.animationLength); current.Add(target); }); }
private void DeserializeClip(AtomAnimationClip clip, JSONClass clipJSON) { var animationPatternUID = clipJSON["AnimationPattern"]?.Value; if (!string.IsNullOrEmpty(animationPatternUID)) { var animationPattern = SuperController.singleton.GetAtomByUid(animationPatternUID)?.GetComponentInChildren <AnimationPattern>(); if (animationPattern == null) { SuperController.LogError($"Animation Pattern '{animationPatternUID}' linked to animation '{clip.animationName}' of atom '{_atom.uid}' was not found in scene"); } else { clip.animationPattern = animationPattern; } } JSONArray controllersJSON = clipJSON["Controllers"].AsArray; if (controllersJSON != null) { foreach (JSONClass controllerJSON in controllersJSON) { var controllerName = controllerJSON["Controller"].Value; var controller = _atom.freeControllers.Single(fc => fc.name == controllerName); if (controller == null) { SuperController.LogError($"VamTimeline: Atom '{_atom.uid}' does not have a controller '{controllerName}'"); continue; } var target = new FreeControllerAnimationTarget(controller); clip.Add(target); DeserializeCurve(target.x, controllerJSON["X"], clip.animationLength, target.settings); DeserializeCurve(target.y, controllerJSON["Y"], clip.animationLength); DeserializeCurve(target.z, controllerJSON["Z"], clip.animationLength); DeserializeCurve(target.rotX, controllerJSON["RotX"], clip.animationLength); DeserializeCurve(target.rotY, controllerJSON["RotY"], clip.animationLength); DeserializeCurve(target.rotZ, controllerJSON["RotZ"], clip.animationLength); DeserializeCurve(target.rotW, controllerJSON["RotW"], clip.animationLength); AddMissingKeyframeSettings(target); target.AddEdgeFramesIfMissing(clip.animationLength); } } JSONArray floatParamsJSON = clipJSON["FloatParams"].AsArray; if (floatParamsJSON != null) { foreach (JSONClass paramJSON in floatParamsJSON) { var storableId = paramJSON["Storable"].Value; var floatParamName = paramJSON["Name"].Value; var target = new FloatParamAnimationTarget(_atom, storableId, floatParamName); clip.Add(target); DeserializeCurve(target.value, paramJSON["Value"], clip.animationLength, target.settings); AddMissingKeyframeSettings(target); target.AddEdgeFramesIfMissing(clip.animationLength); } } JSONArray triggersJSON = clipJSON["Triggers"].AsArray; if (triggersJSON != null) { foreach (JSONClass triggerJSON in triggersJSON) { var target = new TriggersAnimationTarget { name = DeserializeString(triggerJSON["Name"], "Trigger") }; foreach (JSONClass entryJSON in triggerJSON["Triggers"].AsArray) { var trigger = new AtomAnimationTrigger(); trigger.RestoreFromJSON(entryJSON); target.SetKeyframe(trigger.startTime, trigger); } target.AddEdgeFramesIfMissing(clip.animationLength); clip.Add(target); } } }