Beispiel #1
0
        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);
        }
Beispiel #2
0
        public void Move(Vector2 acceleration, float dt, Level level)
        {
            Vector2 dragCoefficient = new Vector2(2.3f, 0.1f);
            Vector2 drag = new Vector2(dragCoefficient.X * Velocity.X * Math.Abs(Velocity.X), dragCoefficient.Y * Velocity.Y * Math.Abs(Velocity.Y));
            if (IsGrounded)
                drag *= 1.75f;
            Velocity = Velocity + acceleration * dt - drag * dt;

            if (IsGrounded)
                Model.AnimationPlayer.Update(TimeSpan.FromSeconds(Math.Abs(Velocity.X * 0.66f * dt)), true, Matrix.Identity);

            if (Velocity.X < 0)
                Rotation = 1;
            if (Velocity.X > 0)
                Rotation = -1;
            if (Velocity.Length() < 0.50f)
                Velocity = Vector2.Zero;

            level.FirePositionalTriggers(Position, Velocity.X * dt);

            var v = level.GetFinalVelocity(GetRectangle(), Velocity * dt);

            // Reduce jiggle
            if (Math.Abs(v.Y) < 0.001f)
                v.Y = 0;
            if (Math.Abs(v.X) < 0.001f)
                v.X = 0;

            // Reduce jiggle
            if (Math.Abs(Velocity.Y) < 0.3f)
                Velocity = new Vector2(Velocity.X, 0);
            if (Math.Abs(Velocity.X) < 0.3f)
                Velocity = new Vector2(0, Velocity.Y);

            Position = Position + v;

            var crv = level.GetCollisionResolvingVector(GetRectangle());
            Position = Position + crv;

            IsGrounded = level.IsGrounded(GetRectangle()) && !(Velocity.Y > 0);

            IsFalling = !IsGrounded && Velocity.Y < 0;
        }