internal void evaluateActions(float dt) { foreach (KeyValuePair <string, DAction> keyValuePair in actions) { DAction action = keyValuePair.Value; action.evaluateWithNode(this, dt); if (action.elapsed > action.duration) { actionsToRemove.Add(keyValuePair.Key); } } if (actionsToRemove.Count > 0) { foreach (string key in actionsToRemove) { actions.Remove(key); } actionsToRemove.Clear(); } for (int i = children.Count - 1; i >= 0; i--) { children[i].evaluateActions(dt); } }
internal override void evaluateWithNode(DNode node, float dt) { elapsed += dt; if (executionCount < count) { float actionElapsed = action.elapsed; action.evaluateWithNode(node, dt); if (actionElapsed + dt > action.duration) { executionCount += 1; if (executionCount < count) { action = action.copy(); //TODO: performance action.runOnNode(node); dt = actionElapsed + dt - action.duration; elapsed -= dt; evaluateWithNode(node, dt); } } } }
public ActionRepeat(DAction action, int count) : base(0) { this.action = action; this.count = count; duration = action.duration * count; }
internal virtual void touchDown() { resetPosition(); scale = Vector2.One; float duration = 0.125f; float x = position.X + (size.X / 2.0f) * 0.05f; float y = position.Y + (size.Y / 2.0f) * 0.05f; run(DAction.group(new[] { DAction.scaleTo(0.95f, duration), DAction.moveTo(new Vector2(x, y), duration) }), "Button.touchDown"); }
internal void run(DAction action, string key) { DAction copy = action.copy(); copy.runOnNode(this); if (actions.ContainsKey(key)) { actions[key] = copy; } else { actions.Add(key, copy); } }
internal override void evaluateWithNode(DNode node, float dt) { elapsed += dt; DAction action = enumerator.Current; if (action != null) { float actionElapsed = action.elapsed; action.evaluateWithNode(node, dt); if (actionElapsed + dt > action.duration) { if (enumerator.MoveNext()) { enumerator.Current.runOnNode(node); dt = actionElapsed + dt - action.duration; elapsed -= dt; evaluateWithNode(node, dt); } } } }
internal void run(DAction action, Action completionBlock) { run(action, $"{DScene.current}{random.NextDouble()}"); }
internal void run(DAction action) { run(action, $"{DGame.current.currentTime}{random.NextDouble()}"); }
/// <summary> /// Performs an action after the specified delay. /// </summary> internal static DAction afterDelay(float delay, DAction action) { return(sequence(new[] { waitForDuration(delay), action })); }
internal static DAction repeatForever(DAction action) { return(new ActionRepeat(action, int.MaxValue)); }
internal static DAction repeat(DAction action, int count) { return(new ActionRepeat(action, count)); }