Jump to content

Speedometer


Matevsz

Recommended Posts

hello, how to move the speedometer at the center of the screen? it is on the right side of

  
c_XOffset = 10 
c_YOffset = 10 
c_ImageW = 200 
c_ImageH = 200 
c_BarW = 0 
c_BarH = 0 
c_BarYOffset = 70 
  
function initGui() 
    if disc then 
        destroyElement(disc) 
    end 
    g_screenWidth, g_screenHeight = guiGetScreenSize() 
    local scale 
    if c_EnableScaling then 
        scale = (g_screenWidth/1000 + g_screenHeight/850)/2 
    else 
        scale = 1 
    end 
    g_XOffset = round(c_XOffset*scale) 
    g_YOffset = round(c_YOffset*scale) 
    g_ImageW = round(c_ImageW*scale) 
    g_ImageH = round(c_ImageH*scale) 
    g_BarW = round(c_BarW*scale) 
    g_BarH = round(c_BarH*scale) 
    g_BarYOffset = round(c_BarYOffset*scale) 
    disc = guiCreateStaticImage(g_screenWidth - g_ImageW - g_XOffset, g_screenHeight - g_ImageH - g_YOffset, g_ImageW, g_ImageH, "disc.png", false) 
    x, y = guiGetPosition(disc, false) 
end 
  

Link to comment
  
g_root = getRootElement() 
g_rootElement = getResourceRootElement( getThisResource() ) 
g_Player = getLocalPlayer() 
  
c_EnableScaling = true 
-- --> These values will be scaled with screen size 
-- Offsets from the lower right screen corner 
c_XOffset = 10 
c_YOffset = 10 
c_ImageW = 200 
c_ImageH = 200 
c_BarW = 0 
c_BarH = 0 
c_BarYOffset = 70 
-- <-- 
  
-- All other values are fixed 
c_FireTimeMs = 5000 
c_BarAlpha = 120 
c_BarFlashInterval = 300 
  
g_tFireStart = nil 
  
function drawNeedle() 
    if not isPedInVehicle(g_Player) then 
        -- Fallback for player exiting car without onClientVehicleStartExit event 
        --   (e.g. falling off a bike) 
        hideSpeedometer() 
    end 
    local vehSpeed = getVehicleSpeed() 
    --local vehHealth = getElementHealth(source,getPedOccupiedVehicle(g_Player)) 
  
    if vehHealth and (vehHealth > 0) then 
        -- Show a little red/green health bar on the speedo 
        local hp = (vehHealth-250)/750 
        local curBarLen = hp*g_BarW 
        if curBarLen < 1 then curBarLen = 1 end 
  
        -- green/yellow till 50%, then yellow/red 
        local r = 255*(1 - hp)/0.5 
        if r > 255 then r = 255 end 
        local g = 255*hp/0.5 
        if g > 255 then g = 255 end 
        if g < 0 then g = 0 end 
        
        if hp >= 0 then 
            g_tFireStart = nil 
            dxDrawRectangle(x + g_ImageW/2 - g_BarW/2, y + g_BarYOffset, curBarLen, g_BarH, tocolor(r, g, 0, c_BarAlpha)) 
        else 
            -- Flash red bar for 5s when car is about to blow 
            if not g_tFireStart then g_tFireStart = getTickCount() end 
            local firePerc = (c_FireTimeMs - (getTickCount() - g_tFireStart)) / c_FireTimeMs 
            if firePerc < 0 then firePerc = 0 end 
            local a = c_BarAlpha 
            if (getTickCount()/c_BarFlashInterval)%2 > 1 then a = 0 end 
            dxDrawRectangle(x + g_ImageW/2 - g_BarW/2, y + g_BarYOffset, firePerc*g_BarW, g_BarH, tocolor(255, 0, 0, a)) 
        end     
    end 
    -- Draw rotated needle image 
    -- Image is scaled exactly 1° per kmh of speed, so we can use vehSpeed directly 
    dxDrawImage(x, y, g_ImageW, g_ImageH, "needle.png", vehSpeed -130, 0, 0, white, true) 
end 
  
  
function showSpeedometer() 
    guiSetVisible(disc, true) 
    addEventHandler("onClientRender", g_root, drawNeedle) 
end 
function hideSpeedometer() 
    guiSetVisible( disc, false) 
    removeEventHandler("onClientRender", g_root, drawNeedle) 
end 
  
function getVehicleSpeed() 
    if isPedInVehicle(g_Player) then 
        local vx, vy, vz = getElementVelocity(getPedOccupiedVehicle(g_Player)) 
        return math.sqrt(vx^2 + vy^2 + vz^2) * 161 
    end 
    return 0 
end 
  
  
addEventHandler("onClientVehicleEnter", g_root, 
    function(thePlayer) 
        if thePlayer == g_Player then 
            showSpeedometer() 
        end 
    end 
) 
  
addEventHandler("onClientVehicleStartExit", g_root, 
    function(thePlayer) 
        if thePlayer == g_Player then 
            hideSpeedometer() 
        end 
    end 
) 
  
function round(num) 
    return math.floor(num + 0.3) 
end 
  
function initGui() 
    if disc then 
        destroyElement(disc) 
    end 
    g_screenWidth, g_screenHeight = guiGetScreenSize() 
    local scale 
    if c_EnableScaling then 
        scale = (g_screenWidth/1000 + g_screenHeight/850)/2 
    else 
        scale = 1 
    end 
    g_XOffset = round(c_XOffset*scale) 
    g_YOffset = round(c_YOffset*scale) 
    g_ImageW = round(c_ImageW*scale) 
    g_ImageH = round(c_ImageH*scale) 
    g_BarW = round(c_BarW*scale) 
    g_BarH = round(c_BarH*scale) 
    g_BarYOffset = round(c_BarYOffset*scale) 
    disc = guiCreateStaticImage(g_screenWidth - g_ImageW - g_XOffset, g_screenHeight - g_ImageH - g_YOffset, g_ImageW, g_ImageH, "disc.png", false) 
    x, y = guiGetPosition(disc, false) 
end 
  
addEventHandler("onClientResourceStart", g_rootElement, 
    function () 
        initGui() 
        guiSetVisible(disc, false) 
        setTimer(function() 
            local w, h = guiGetScreenSize() 
            if (w ~= g_screenWidth) or (h ~= g_screenHeight) then 
                initGui() 
            end 
        end, 500, 0) 
        if isPedInVehicle(g_Player) then 
            showSpeedometer() 
        end 
    end 
) 
  

Here is the entire code

I changed to:

  
c_XOffset = 0 
c_YOffset = 0 
  

but still it is on the right

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...