#define FILTERSCRIPT #include #include #define COLOR_FORE 0x000000FF #define COLOR_BACK 0xD31919FF #define HUD_UPDATE_INTERVAL 100 #define INVALID_TEXTDRAW_ID (Text:-1) new Text:gPlayerHUD[MAX_PLAYERS] = {INVALID_TEXTDRAW_ID, ...}, bitarray(gShownHUD, MAX_PLAYERS); forward LaunchTimers(); forward UpdatePlayerHUD(playerid); Float:GetVehicleSpeed(vehicleid) { new Float:vX, Float:vY, Float:vZ; GetVehicleVelocity(vehicleid, vX, vY, vZ); return floatsqroot(vX*vX + vY*vY + vZ*vZ); } CreatePlayerHUD(playerid) { gPlayerHUD[playerid] = TextDrawCreate(620, 410, "0 kmh"); TextDrawSetProportional(gPlayerHUD[playerid], true); TextDrawUseBox(gPlayerHUD[playerid], false); TextDrawSetOutline(gPlayerHUD[playerid], 2); TextDrawAlignment(gPlayerHUD[playerid], 3); TextDrawLetterSize(gPlayerHUD[playerid], 0.7, 2.0); TextDrawFont(gPlayerHUD[playerid], 3); TextDrawColor(gPlayerHUD[playerid], COLOR_FORE); TextDrawBackgroundColor(gPlayerHUD[playerid], COLOR_BACK); return 1; } DestroyPlayerHUD(playerid) { TextDrawHideForPlayer(playerid, gPlayerHUD[playerid]); TextDrawDestroy(gPlayerHUD[playerid]); gPlayerHUD[playerid] = INVALID_TEXTDRAW_ID; return 1; } ShowPlayerHUD(playerid, bool:show) { if (show) { truebit(gShownHUD, playerid); TextDrawShowForPlayer(playerid, gPlayerHUD[playerid]); } else { falsebit(gShownHUD, playerid); TextDrawHideForPlayer(playerid, gPlayerHUD[playerid]); } return 1; } public UpdatePlayerHUD(playerid) { if (getbit(gShownHUD, playerid) && gPlayerHUD[playerid] != INVALID_TEXTDRAW_ID) { new text[30]; format(text, sizeof(text), "%.0f kmh", 200 * GetVehicleSpeed(GetPlayerVehicleID(playerid))); TextDrawSetString(gPlayerHUD[playerid], text); return 1; } return 0; } public LaunchTimers() { static playerid; SetTimerEx("UpdatePlayerHUD", HUD_UPDATE_INTERVAL, true, "i", playerid); if (playerid < MAX_PLAYERS) { SetTimer("LaunchTimers", HUD_UPDATE_INTERVAL / MAX_PLAYERS, false); playerid++; } else { playerid = 0; } return 1; } public OnFilterScriptInit() { for (new i; i < MAX_PLAYERS; i++) { if (IsPlayerConnected(i) && !IsPlayerNPC(i)) { CreatePlayerHUD(i); ShowPlayerHUD(i, (GetPlayerState(i) == PLAYER_STATE_DRIVER)); } } LaunchTimers(); return 1; } public OnFilterScriptExit() { for (new i; i < MAX_PLAYERS; i++) { if (IsPlayerConnected(i) && !IsPlayerNPC(i)) { DestroyPlayerHUD(i); } } return 1; } public OnPlayerConnect(playerid) { if (!IsPlayerNPC(playerid)) { CreatePlayerHUD(playerid); } return 1; } public OnPlayerDisconnect(playerid, reason) { #pragma unused reason if (!IsPlayerNPC(playerid)) { DestroyPlayerHUD(playerid); } return 1; } public OnPlayerStateChange(playerid, newstate, oldstate) { #pragma unused oldstate if (!IsPlayerNPC(playerid)) { ShowPlayerHUD(playerid, (newstate == PLAYER_STATE_DRIVER)); } return 1; }