void Update() { currentSpeed = 0f; rawMovement = Vector2.zero; currentDirection = Vector2.zero; if (resetOnPredicate.Any(pred => pred.Value)) { Reactivate(false, true); } if (reactivateOnPredicate.Any(pred => pred.Value)) { Reactivate(false, false); } if (deactivateOnPredicate.Any(pred => pred.Value)) { this.Deactivate(); } bool active = this.IsActive(); if (abortOnPredicate.Any(pred => pred.Value) && active) { this.Abort(); } if (!active) { return; } var damp = movementDampeners.Where(d => d.predicates.All(p => p.Value)).ToArray(); float dampAmount = damp.Aggregate <FrostyMovementDampener, float>(1, (val, d) => val * d.dampAmount); dampAmount = Mathf.SmoothDamp(currentDamp, dampAmount, ref currentDampSpeed, 0.15f); currentDamp = dampAmount; if (patterns == null) { return; } for (int i = 0; i < patterns.Length; i++) { FrostySingleMovementPattern pattern = patterns[i]; float speed; Vector2 dir = pattern.Evaluate(Toolbox.Instance.time.GetFixedDeltaTime(timeLayer), out speed); rawMovement += (dir.normalized * speed) * dampAmount; } currentDirection = rawMovement.normalized; currentSpeed = rawMovement.magnitude; if (kinematics != null) { kinematics.ApplyMovement(currentDirection, currentSpeed); } }
public void SetDirection(Vector2 direction) { Vector2 sum = Vector2.zero; for (int i = 0; i < patterns.Length; i++) { FrostySingleMovementPattern pattern = patterns[i]; pattern.direction = direction; } }
public void SetHorizontalAxisSign(int sign) { Vector2 sum = Vector2.zero; for (int i = 0; i < patterns.Length; i++) { FrostySingleMovementPattern pattern = patterns[i]; pattern.direction = new Vector2(Mathf.Sign(sign) * Mathf.Sign(pattern.direction.x) * pattern.direction.x, pattern.direction.y); } }
public Vector2 GetDirection() { Vector2 sum = Vector2.zero; for (int i = 0; i < patterns.Length; i++) { FrostySingleMovementPattern pattern = patterns[i]; sum += pattern.direction; } return(sum.normalized); }