public bool Move(float deltaTime, Level level) { if (!pastPositions.Any()) return true; if (currentGtc >= pastPositions.Keys.Max()) return false; if ((level.CanMove(pastPositions[currentGtc], pastPositions[currentGtc + 1]))) { DecisionPoint decisionPoint = null; if (decisionPoints.ContainsKey(currentGtc)) decisionPoint = decisionPoints[currentGtc]; if (decisionPoint == null || decisionPoint.Condition()) { float delta = pastPositions[currentGtc + 1].X - pastPositions[currentGtc].X; if (delta < 0) Rotation = 1; if (delta > 0) Rotation = -1; Model.AnimationPlayer.Update(TimeSpan.FromSeconds(Math.Abs(9f * delta / 25f)), true, Matrix.Identity); currentFloatGtc += deltaTime * 25f; currentGtc = (int)currentFloatGtc; } } float a = 1f - (currentFloatGtc - currentGtc); Position = pastPositions[currentGtc] * a + pastPositions[Math.Min(currentGtc + 1, pastPositions.Keys.Max())] * (1 - a); return true; }
public void Move(float delta, Level level) { if (level.CanMove(Position, delta)) { Model.AnimationPlayer.Update(TimeSpan.FromSeconds(Math.Abs(delta)), true, Matrix.Identity); Position = Position + new Vector2(delta, 0); } level.FirePositionalTriggers(Position, delta); }