Results 1 to 3 of 3

Thread: Velocity and Speed

  1. #1

    Default Velocity and Speed

    no one asked for this, but I hope someone can find this info useful

    The velocity is the vector quantity that contains the magnitude (speed) and the direction of an Entity,
    while the speed is the scalar quantity containing the magnitude of the velocity, measured in distance divided by time. (units/second)

    As you know, every Entity has a .velocity vector, and from this vector we can extract the speed of an entity.

    To get the velocity from a player, we simply use:
    local.velocity = local.player.velocity; // assuming local.player is a Player Entity


    Then, to get the speed we use the following formula (Pythagorean theorem):
    local.speed = sqrt(pow local.velocity[0] 2 + pow local.velocity[1] 2);


    This will return the player's speed relative to the X and Y axis (North, South, East and West) in units per second.
    This can be used to get the walking/running speed of a player

    If we want to convert the speed from units/s to a real life unit like feet/s or meters/s we can do the following:

    local.unit["ft"] = 0.0625; // 1/16 = 0.0625
    local.unit["mt"] = 0.01905; // (1/16) * 0.3048 = 0.01905
    local.unit["cm"] = 1.905; // (1/16) * 30.48 = 1.905

    local.ft_speed = local.speed * local.unit["ft"]; // feet/second
    local.mt_speed = local.speed * local.unit["mt"]; // meters/second
    local.cm_speed = local.speed * local.unit["cm"]; // centimeters/second


    Now if for some reason we want to get the speed relative to the X, Y and Z axis (North, South, East, West, Up and Down)
    we simply add the value of the Z axis in the velocity vector to the speed formula:

    local.speed = sqrt(pow local.velocity[0] 2 + pow local.velocity[1] 2 + pow local.velocity[2] 2);
    // or alternatively
    local.speed = vector_length local.player.velocity;

    This can be used to show the speed of a flying Entity




    A simple demo script
    Spoiler: demo script


    local.unit["ft"] = 0.0625; // 1/16
    local.unit["mt"] = 0.01905; // (1/16) * 0.3048 = 0.01905
    local.unit["cm"] = 1.905; // (1/16) * 30.48 = 1.905

    // assuming local.player is a Player Entity
    while (local.player) {
    local.velocity = local.player.velocity;

    local.speed = sqrt(pow local.velocity[0] 2 + pow local.velocity[1] 2);

    local.ft_speed = local.speed * local.unit["ft"];
    local.mt_speed = local.speed * local.unit["mt"];
    local.cm_speed = local.speed * local.unit["cm"];

    local.player iprint("");
    local.player iprint("velocity: " + local.velocity);
    local.player iprint("speed: " + string(int(local.speed)) + " u/s");
    local.player iprint("speed: " + string(int(local.ft_speed)) + " ft/s");
    local.player iprint("speed: " + string(int(local.mt_speed)) + " mt/s");
    // local.player iprint("speed: " + string(int(local.cm_speed)) + " cm/s");
    waitframe;
    }


    and how does it look in game

  2. #2
    Administrator James's Avatar
    Join Date
    May 2010
    Location
    on the intraweb
    Posts
    3,180

    Default

    That's awesome man! Very nice share! Thank you!

  3. #3

    Default

    This could really be useful, thanks, good work.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •