DEADSOFTWARE

gl: handle punch animation in render
[d2df-sdl.git] / src / game / renders / opengl / r_draw.pas
index c2bfc245726f040e249c9455835317666c7726a3..fbdae7e4ee8e09cdfd307dc29365d7b322f88149 100644 (file)
@@ -18,7 +18,7 @@ unit r_draw;
 interface
 
   uses
-    g_textures,
+    g_animations,
     r_textures
   ;
 
@@ -33,6 +33,9 @@ interface
   procedure r_Draw_FillRect (l, t, r, b: Integer; rr, gg, bb, aa: Byte);
   procedure r_Draw_InvertRect (l, t, r, b: Integer; rr, gg, bb, aa: Byte);
 
+  procedure r_Draw_Text (const text: AnsiString; x, y: Integer; r, g, b, a: Byte; f: TGLFont);
+  procedure r_Draw_GetTextSize (const text: AnsiString; f: TGLFont; out w, h: Integer);
+
 implementation
 
   uses
@@ -147,8 +150,8 @@ implementation
     if img = nil then
       r_Draw_Texture(nil, x, y, w, h, flip, NTR, NTG, NTB, NTB, blend)
     else
-      for j := 0 to h div img.height - 1 do
-        for i := 0 to w div img.width - 1 do
+      for j := 0 to (h - 1) div img.height do
+        for i := 0 to (w - 1) div img.width do
           r_Draw_Texture(img, x + i * img.width, y + j * img.height, img.width, img.height, flip, r, g, b, a, blend);
   end;
 
@@ -255,4 +258,33 @@ implementation
     glEnd;
   end;
 
+  procedure r_Draw_Text (const text: AnsiString; x, y: Integer; r, g, b, a: Byte; f: TGLFont);
+    var i, xoff, spc: Integer; t: TGLTexture; ch: AnsiChar;
+  begin
+    xoff := x; spc := MAX(0, f.GetSpace());
+    for i := 1 to Length(text) do
+    begin
+      ch := text[i];
+      t := f.GetChar(ch);
+      if t <> nil then
+        r_Draw_Texture(t, xoff, y, t.width, t.height, false, r, g, b, a, false);
+      Inc(xoff, f.GetWidth(ch) + spc);
+    end;
+  end;
+
+  procedure r_Draw_GetTextSize (const text: AnsiString; f: TGLFont; out w, h: Integer);
+    var i, spc, len: Integer;
+  begin
+    w := 0;
+    h := f.GetMaxHeight();
+    len := Length(text);
+    if len > 0 then
+    begin
+      spc := MAX(0, f.GetSpace());
+      for i := 1 to len - 1 do
+        Inc(w, f.GetWidth(text[i]) + spc);
+      Inc(w, f.GetWidth(text[len]));
+    end;
+  end;
+
 end.