/* * Copyright (c) 2016-2020 Marco Hladik * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ enumflags { AF_RIGHT, AF_TOP, AF_LEFT, AF_BOTTOM }; typedef struct { int iID; int iScale; vector vecColor; float flAlpha; int iFlags; } font_s; void Font_Load(string strFile, font_s &fntNew) { #ifdef CLASSIC_VGUI fntNew.iID = (int)loadfont("", "gfx/conchars", "12", -1, 0, 0); fntNew.iScale = 12; fntNew.vecColor = [255,200,0] / 255; fntNew.flAlpha = 1.0f; fntNew.iFlags = 0; #else string strTemp = ""; string strFontPath = ""; filestream fileFont = fopen(strFile, FILE_READ); fntNew.iID = 0; fntNew.iScale = 8; fntNew.vecColor = [1,1,1]; fntNew.flAlpha = 1.0f; fntNew.iFlags = 0; if (fileFont >= 0) { while ((strTemp = fgets(fileFont))) { if (tokenizebyseparator(strTemp, "=") == 2) { switch (argv(0)) { case "COLOR": fntNew.vecColor = stov(argv(1)) / 255; break; case "ALPHA": fntNew.flAlpha = stof(argv(1)) / 255; break; case "SIZE": fntNew.iScale = (int)stof(argv(1)); break; case "PATH": strFontPath = argv(1); break; case "FLAGS": fntNew.iFlags = (int)stof(argv(1)); break; default: break; } } } fclose(fileFont); } else { error(sprintf("[MENU] Cannot load font file %s!", strFile)); } fntNew.iID = (int)loadfont("", strFontPath, ftos((float)fntNew.iScale), -1, 0, 0); #endif } void Font_DrawText (vector vecOrigin, string strText, font_s fnt) { drawfont = (float)fnt.iID; drawstring(vecOrigin, strText, [fnt.iScale, fnt.iScale], fnt.vecColor, fnt.flAlpha, (float)fnt.iFlags); } void Font_DrawField (vector vecOrigin, vector vecSize, string strText, font_s fnt, int iAlignFlags) { drawfont = (float)fnt.iID; drawtextfield(vecOrigin, vecSize, (float)iAlignFlags, strText); } string Font_RGBtoHex(vector vecColor) { static string numtohex(float x) { x = rint(x * 15); if (x <= 9) return ftos(x); else { x -= 10; return sprintf("%c", 'A' + x); } } return sprintf("^x%s%s%s", numtohex(vecColor[0]), numtohex(vecColor[1]), numtohex(vecColor[2])); }