Beispiel #1
0
        //------------------------------------------------------------------
        private bool IsAnimationDisabled(Sequence action)
        {
            if (!Settings.NoChangeLaneAnimation) return false;

            // Move Car instead of the Animation
            action.Add (new Generic (() => Car.DockToLane()));

            return true;
        }
Beispiel #2
0
        //------------------------------------------------------------------
        public void ChangeLane(Sequence action, Lane lane, float duration)
        {
            if (lane == null) return;

            // No Lane changing when car doesn't move
            if (Car.Velocity < 10) return;

            // Add to the new Lane
            action.Add (new Generic (() => lane.Add (Car)));

            if (IsAnimationDisabled (action)) return;

            // Rotate
            Action <float> rotate = share => Car.Drawable.Rotation += share;
            float finalAngle = MathHelper.ToRadians ((lane.Position.X < Car.Position.X) ? -10 : 10);
            action.Add (new Controller (rotate, finalAngle, duration * 0.3f));

            // Moving
            Action <Vector2> move = shift => Car.LocalPosition += shift;
            var diapason = new Vector2 (lane.Position.X - Car.Position.X, 0);
            action.Add (new Controller (move, diapason, duration * 0.4f));

            // Inverse rotating
            var inverseRotating = new Controller (rotate, -finalAngle, duration * 0.3f);
            action.Add (inverseRotating);

            // Fix accuracy error in Car's Position
            action.Add (new Generic (() => Car.DockToLane()));
        }