Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[
- Author: michalMonster
- ]]
- local sw, sh = guiGetScreenSize()
- local zoom = 1920/sw
- SPEEDO = {}
- SPEEDO.TEXTURES = {
- dxCreateTexture('assets/textures/disc_fuel.png', 'argb', false, 'clamp'),
- dxCreateTexture('assets/textures/disc_speed.png', 'argb', false, 'clamp'),
- dxCreateTexture('assets/textures/indication_fuel.png', 'argb', false, 'clamp'),
- dxCreateTexture('assets/textures/indication_speed.png', 'argb', false, 'clamp'),
- dxCreateTexture('assets/textures/icon_breake.png', 'argb', false, 'clamp'),
- dxCreateTexture('assets/textures/icon_engine.png', 'argb', false, 'clamp'),
- dxCreateTexture('assets/textures/icon_light.png', 'argb', false, 'clamp'),
- }
- function getElementSpeed(theElement, unit)
- -- Check arguments for errors
- assert(isElement(theElement), "Bad argument 1 @ getElementSpeed (element expected, got " .. type(theElement) .. ")")
- local elementType = getElementType(theElement)
- assert(elementType == "player" or elementType == "ped" or elementType == "object" or elementType == "vehicle" or elementType == "projectile", "Invalid element type @ getElementSpeed (player/ped/object/vehicle/projectile expected, got " .. elementType .. ")")
- assert((unit == nil or type(unit) == "string" or type(unit) == "number") and (unit == nil or (tonumber(unit) and (tonumber(unit) == 0 or tonumber(unit) == 1 or tonumber(unit) == 2)) or unit == "m/s" or unit == "km/h" or unit == "mph"), "Bad argument 2 @ getElementSpeed (invalid speed unit)")
- -- Default to m/s if no unit specified and "ignore" argument type if the string contains a number
- unit = unit == nil and 0 or ((not tonumber(unit)) and unit or tonumber(unit))
- -- Setup our multiplier to convert the velocity to the specified unit
- local mult = (unit == 0 or unit == "m/s") and 50 or ((unit == 1 or unit == "km/h") and 180 or 111.84681456)
- -- Return the speed by calculating the length of the velocity vector, after converting the velocity to the specified unit
- return (Vector3(getElementVelocity(theElement)) * mult).length
- end
- SPEEDO.font = dxCreateFont("assets/fonts/roboto.ttf", 13/zoom)
- SPEEDO.UI = function()
- local vehicle = getPedOccupiedVehicle(localPlayer)
- if(vehicle)then
- setRadioChannel(0)
- if(not getElementData(localPlayer, "user:hud_disabled"))then
- local arrow_speed = getElementSpeed(vehicle, 1) * 0.975
- local distance = getElementData(vehicle, "vehicle:distance") or 0
- local fuel = getElementData(vehicle, "vehicle:fuel") or 25
- local bak = getElementData(vehicle, "vehicle:bak") or 25
- arrow_speed=arrow_speed > 303 and 303 or arrow_speed
- fuel = fuel > bak and bak or fuel
- fuel = fuel < 0 and 0 or fuel
- if(getElementData(vehicle, "vehicle:handbrake") and not getControlState("handbrake"))then
- setControlState("handbrake", true)
- end
- dxDrawImage(sw - 330/zoom, sh - 320/zoom, 290/zoom, 290/zoom, SPEEDO.TEXTURES[2], 0, 0, 0, tocolor(255, 255, 255, 255), false)
- dxDrawText(fuel..'/'..bak,300, 400, 1200, 1200, 0xFFFFFFFF,1, SPEEDO.font, 'center', 'center', false )
- dxDrawImage(sw - 35/zoom, sh - 160/zoom, 25/zoom, 19/zoom, SPEEDO.TEXTURES[6], 0, 0, 0, (not getVehicleEngineState(vehicle) and 0xFFFFFFFF or 0x00FFFFFF));
- dxDrawImage(sw - 35/zoom, sh - 190/zoom, 25/zoom, 19/zoom, SPEEDO.TEXTURES[5], 0, 0, 0, (getElementData(vehicle, "vehicle:handbrake") and 0xFFFFFFFF or 0x00FFFFFF))
- dxDrawImage(sw - 35/zoom, sh - 130/zoom, 25/zoom, 17/zoom, SPEEDO.TEXTURES[7], 0, 0, 0, (getVehicleOverrideLights(vehicle) == 2 and 0xFFFFFFFF or 0x00FFFFFF))
- dxDrawText(string.format("%05.1f", distance).."km", sw - 225 /zoom, sh - 80/zoom, 1772/zoom, 968/zoom, 0xFFFFFFFF, 1, SPEEDO.font, "center", "center", false)
- dxDrawImage(sw - 472/zoom, sh - 180/zoom, 139/zoom, 139/zoom, SPEEDO.TEXTURES[1], 0, 0, 0, tocolor(255, 255, 255, 255), false)
- dxDrawImage(sw - 472/zoom, sh - 180/zoom, 139/zoom, 139/zoom, SPEEDO.TEXTURES[3], fuel+30, 0, 0, tocolor(255, 255, 255, 255), false)
- dxDrawImage(sw - 330/zoom, sh - 310/zoom, 290/zoom, 290/zoom, SPEEDO.TEXTURES[4], arrow_speed+244, 0, 0, tocolor(255, 255, 255, 255), false)
- -- testowe informacji o spalaniu, etc.
- local export=exports.si_engine_capacity
- if(export)then
- local engine=getElementData(vehicle, "vehicle:engine") or export:getVehicleEngineFromModel(getElementModel(vehicle))
- local cylinders=export:getEngineCylinders(tonumber(string.format("%.1f", engine)))
- local fuel_usage=export:getFuelUsage(string.format("%.1f", engine))
- local fuel_type=getElementData(vehicle, "vehicle:type") or "?"
- local fuel_newType=export:getVehicleFuelType(fuel_type)
- local speed=math.floor(getElementSpeed(vehicle, 1)*1.025).."km/h"
- dxDrawText("Prędkość: "..speed.."\nPojemność: "..string.format("%.1f", engine).."dm³ "..cylinders.."\nSpalanie: "..string.format("%.1f", fuel_usage).."l/100km ("..fuel_newType..")", 0, 0, sw+1, sh+1, tocolor(0, 0, 0), 1, SPEEDO.font, "center", "bottom", false)
- dxDrawText("Prędkość: "..speed.."\nPojemność: "..string.format("%.1f", engine).."dm³ "..cylinders.."\nSpalanie: "..string.format("%.1f", fuel_usage).."l/100km ("..fuel_newType..")", 0, 0, sw, sh, tocolor(255, 0, 0), 1, SPEEDO.font, "center", "bottom", false)
- end
- end
- else
- removeEventHandler("onClientRender", root, SPEEDO.UI)
- end
- end
- -- distance, fuel, etc.
- SPEEDO.pos = {}
- SPEEDO.posTick = getTickCount()
- SPEEDO.preRender = function()
- local vehicle = getPedOccupiedVehicle(localPlayer)
- if(vehicle and getPedOccupiedVehicleSeat(localPlayer) == 0)then
- local distance = getElementData(vehicle, "vehicle:distance") or 0
- local fuel = getElementData(vehicle, "vehicle:fuel") or 25
- local gas = getElementData(vehicle, "vehicle:gas") or 25
- local actualType = getElementData(vehicle, "vehicle:actualType") or "Benzyna"
- if(((actualType == "Benzyna" or actualType == "Diesel") and fuel <= 0) or (actualType == "LPG" and gas <= 0) and getVehicleEngineState(vehicle))then
- setVehicleEngineState(vehicle, false)
- end
- if(#SPEEDO.pos < 3)then
- SPEEDO.pos = {getElementPosition(vehicle)}
- SPEEDO.posTick = getTickCount()
- else
- local x,y,z = getElementPosition(vehicle)
- local dist = getDistanceBetweenPoints3D(SPEEDO.pos[1], SPEEDO.pos[2], SPEEDO.pos[3], x, y, z)
- if(dist > 10)then
- local export=exports.si_engine_capacity
- if(export)then
- local engine=getElementData(vehicle, "vehicle:engine") or export:getVehicleEngineFromModel(getElementModel(vehicle))
- local fuel_usage=export:getFuelUsage(engine)
- local usage_10meters=fuel_usage/10000
- setElementData(vehicle, "vehicle:distance", distance+0.01)
- if(actualType == "Benzyna" or actualType == "Diesel")then
- setElementData(vehicle, "vehicle:fuel", fuel-usage_10meters)
- elseif(actualType == "LPG")then
- setElementData(vehicle, "vehicle:gas", gas-usage_10meters)
- end
- end
- SPEEDO.pos = {getElementPosition(vehicle)}
- SPEEDO.posTick = getTickCount()
- end
- end
- else
- removeEventHandler("onClientPreRender", root, SPEEDO.preRender)
- end
- end
- addEventHandler("onClientVehicleEnter", root, function(player, seat)
- if(player ~= localPlayer or getVehicleName(source) == "Bike" or getVehicleName(source) == "BMX" or getVehicleName(source) == "Mountain Bike")then return end
- addEventHandler("onClientRender", root, SPEEDO.UI)
- addEventHandler("onClientPreRender", root, SPEEDO.preRender)
- end)
- addEventHandler("onClientVehicleExit", root, function(player, seat)
- if(player ~= localPlayer or getVehicleName(source) == "Bike" or getVehicleName(source) == "BMX" or getVehicleName(source) == "Mountain Bike")then return end
- removeEventHandler("onClientRender", root, SPEEDO.UI)
- removeEventHandler("onClientPreRender", root, SPEEDO.preRender)
- end)
- local veh = getPedOccupiedVehicle(localPlayer)
- if(veh and getVehicleName(veh) ~= "Bike" and getVehicleName(veh) ~= "BMX" and getVehicleName(veh) ~= "Mountain Bike")then
- addEventHandler("onClientRender", root, SPEEDO.UI)
- addEventHandler("onClientPreRender", root, SPEEDO.preRender)
- end
Advertisement
Add Comment
Please, Sign In to add comment