public static Option <T> FindAnimationNode <T>(this IAnimationGraph graph, string name) where T : AnimationNode { Ensure.That(graph, nameof(graph)).IsNotNull(); return(graph.FindAnimationNode(name).OfType <T>().HeadOrNone()); }
public Option <IAnimationGraph> TryCreate( string name, IAnimationGraph parent, AnimationGraphContext context) { Ensure.That(parent, nameof(parent)).IsNotNull(); return(parent.FindAnimationNode <AnimationRootNode>(name).Bind(node => { var path = string.IsNullOrEmpty(parent.Key) ? name : string.Join("/", parent.Key, name); return TryCreate(path, node, context); })); }
public new static Option <Trigger> TryCreate( string name, IAnimationGraph parent, AnimationGraphContext context) { Ensure.That(parent, nameof(parent)).IsNotNull(); //TODO Resolve in an automatic fashion when it becomes possible to manipulate node connections from code. var animationNodeKey = name + " Animation"; return(( from oneShot in parent.FindAnimationNode <AnimationNodeOneShot>(name) from animation in parent.FindAnimationNode <AnimationNodeAnimation>(animationNodeKey) select(oneShot, animation)).Map(t => { var key = string.Join(":", parent.Key, name); var parameter = string.Join("/", new[] { "parameters", parent.Key, name, "scale" }.Where(v => v.Length > 0)); return new Trigger(key, parameter, t.oneShot, t.animation, context); })); }
public Option <AnimationNode> FindAnimationNode(string name) => _graph.FindAnimationNode(name);