X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_holmes.inc;h=3cfdd17b09580471164bfc819190b7ee85d861e6;hb=5e0a71e1d35a9037be80c8912060a913d0e98b18;hp=27138aa84629b607443296cfa72bd914d933ca8e;hpb=b3b3def6089809491a38cc03717683c011298032;p=d2df-sdl.git diff --git a/src/game/g_holmes.inc b/src/game/g_holmes.inc index 27138aa..3cfdd17 100644 --- a/src/game/g_holmes.inc +++ b/src/game/g_holmes.inc @@ -21,29 +21,29 @@ const curWidth = 17; const curHeight = 23; const cursorImg: array[0..curWidth*curHeight-1] of Byte = ( - 0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0, - 1,0,3,2,2,0,0,0,0,0,0,0,0,0,0,0,0, - 1,1,3,3,2,2,0,0,0,0,0,0,0,0,0,0,0, - 1,1,3,3,4,2,2,0,0,0,0,0,0,0,0,0,0, - 1,1,3,3,4,4,2,2,0,0,0,0,0,0,0,0,0, - 1,1,3,3,4,4,4,2,2,0,0,0,0,0,0,0,0, - 1,1,3,3,4,4,4,4,2,2,0,0,0,0,0,0,0, - 1,1,3,3,4,4,4,5,6,2,2,0,0,0,0,0,0, - 1,1,3,3,4,4,5,6,7,5,2,2,0,0,0,0,0, - 1,1,3,3,4,5,6,7,5,4,5,2,2,0,0,0,0, - 1,1,3,3,5,6,7,5,4,5,6,7,2,2,0,0,0, - 1,1,3,3,6,7,5,4,5,6,7,7,7,2,2,0,0, - 1,1,3,3,7,5,4,5,6,7,7,7,7,7,2,2,0, - 1,1,3,3,5,4,5,6,8,8,8,8,8,8,8,8,2, - 1,1,3,3,4,5,6,3,8,8,8,8,8,8,8,8,8, - 1,1,3,3,5,6,3,3,1,1,1,1,1,1,1,0,0, - 1,1,3,3,6,3,3,1,1,1,1,1,1,1,1,0,0, - 1,1,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0, - 1,1,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0, - 1,1,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0, - 1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 3,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 3,3,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0, + 3,3,4,2,2,0,0,0,0,0,0,0,0,0,0,0,0, + 3,3,4,4,2,2,0,0,0,0,0,0,0,0,0,0,0, + 3,3,4,4,4,2,2,0,0,0,0,0,0,0,0,0,0, + 3,3,4,4,4,4,2,2,0,0,0,0,0,0,0,0,0, + 3,3,4,4,4,5,6,2,2,0,0,0,0,0,0,0,0, + 3,3,4,4,5,6,7,5,2,2,0,0,0,0,0,0,0, + 3,3,4,5,6,7,5,4,5,2,2,0,0,0,0,0,0, + 3,3,5,6,7,5,4,5,6,7,2,2,0,0,0,0,0, + 3,3,6,7,5,4,5,6,7,7,7,2,2,0,0,0,0, + 3,3,7,5,4,5,6,7,7,7,7,7,2,2,0,0,0, + 3,3,5,4,5,6,8,8,8,8,8,8,8,8,2,0,0, + 3,3,4,5,6,3,8,8,8,8,8,8,8,8,8,0,0, + 3,3,5,6,3,3,0,0,0,0,0,0,0,0,0,0,0, + 3,3,6,3,3,0,0,0,0,0,0,0,0,0,0,0,0, + 3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0, + 3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ); const cursorPal: array[0..9*4-1] of Byte = ( 0, 0, 0, 0, @@ -72,17 +72,41 @@ begin GetMem(tex, curTexWidth*curTexHeight*4); FillChar(tex^, curTexWidth*curTexHeight*4, 0); - tpp := tex; + // draw shadow + for y := 0 to curHeight-1 do + begin + for x := 0 to curWidth-1 do + begin + if (cursorImg[y*curWidth+x] <> 0) then + begin + c := 1*4; + tpp := tex+((y+1)*(curTexWidth*4)+(x+3)*4); + tpp^ := cursorPal[c+0]; Inc(tpp); + tpp^ := cursorPal[c+1]; Inc(tpp); + tpp^ := cursorPal[c+2]; Inc(tpp); + tpp^ := cursorPal[c+3]; Inc(tpp); + tpp^ := cursorPal[c+0]; Inc(tpp); + tpp^ := cursorPal[c+1]; Inc(tpp); + tpp^ := cursorPal[c+2]; Inc(tpp); + tpp^ := cursorPal[c+3]; Inc(tpp); + end; + end; + end; + + // draw cursor for y := 0 to curHeight-1 do begin - tpp := tex+(y*(curTexWidth*4)); for x := 0 to curWidth-1 do begin c := cursorImg[y*curWidth+x]*4; - tpp^ := cursorPal[c+0]; Inc(tpp); - tpp^ := cursorPal[c+1]; Inc(tpp); - tpp^ := cursorPal[c+2]; Inc(tpp); - tpp^ := cursorPal[c+3]; Inc(tpp); + if (c <> 0) then + begin + tpp := tex+(y*(curTexWidth*4)+x*4); + tpp^ := cursorPal[c+0]; Inc(tpp); + tpp^ := cursorPal[c+1]; Inc(tpp); + tpp^ := cursorPal[c+2]; Inc(tpp); + tpp^ := cursorPal[c+3]; Inc(tpp); + end; end; end; @@ -114,14 +138,14 @@ begin glEnable(GL_TEXTURE_2D); // color and opacity glColor4f(1, 1, 1, 0.9); - Dec(msX, 2); + //Dec(msX, 2); glBegin(GL_QUADS); glTexCoord2f(0.0, 0.0); glVertex2i(msX, msY); // top-left glTexCoord2f(1.0, 0.0); glVertex2i(msX+curTexWidth, msY); // top-right - glTexCoord2f(1.0, 1.0); glVertex2i(msX+curTexWidth, msY+curHeight); // bottom-right - glTexCoord2f(0.0, 1.0); glVertex2i(msX, msY+curHeight); // bottom-left + glTexCoord2f(1.0, 1.0); glVertex2i(msX+curTexWidth, msY+curTexHeight); // bottom-right + glTexCoord2f(0.0, 1.0); glVertex2i(msX, msY+curTexHeight); // bottom-left glEnd(); - Inc(msX, 2); + //Inc(msX, 2); glDisable(GL_BLEND); glDisable(GL_TEXTURE_2D); glColor4f(1, 1, 1, 1); @@ -410,6 +434,17 @@ begin end; +// ////////////////////////////////////////////////////////////////////////// // +procedure normRGBA (var r, g, b, a: Integer); inline; +begin + if (a < 0) then a := 0 else if (a > 255) then a := 255; + if (r < 0) then r := 0 else if (r > 255) then r := 255; + if (g < 0) then g := 0 else if (g > 255) then g := 255; + if (b < 0) then b := 0 else if (b > 255) then b := 255; +end; + + +// ////////////////////////////////////////////////////////////////////////// // function textWidth6 (const s: AnsiString): Integer; var f: Integer; @@ -438,10 +473,7 @@ var begin result := 0; if (Length(s) = 0) then exit; - if (a < 0) then a := 0 else if (a > 255) then a := 255; - if (r < 0) then r := 0 else if (r > 255) then r := 255; - if (g < 0) then g := 0 else if (g > 255) then g := 255; - if (b < 0) then b := 0 else if (b > 255) then b := 255; + normRGBA(r, g, b, a); if (a < 255) then begin @@ -492,31 +524,8 @@ end; // ////////////////////////////////////////////////////////////////////////// // procedure drawLine (x1, y1, x2, y2: Integer; r, g, b: Integer; a: Integer=255); - - procedure lcor (var x1, y1, x2, y2: Integer); - begin - if (y2 < y1) then - begin - x1 := x1 xor x2; - x2 := x1 xor x2; - x1 := x1 xor x2; - - y1 := y1 xor y2; - y2 := y1 xor y2; - y1 := y1 xor y2; - end; - - if (x1 < x2) then Inc(X2) else Inc(x1); - Inc(y2); - end; - begin - lcor(x1, y1, x2, y2); - - if (a < 0) then a := 0 else if (a > 255) then a := 255; - if (r < 0) then r := 0 else if (r > 255) then r := 255; - if (g < 0) then g := 0 else if (g > 255) then g := 255; - if (b < 0) then b := 0 else if (b > 255) then b := 255; + normRGBA(r, g, b, a); if (a < 255) then begin @@ -535,10 +544,17 @@ begin glPointSize(1); glBegin(GL_LINES); - glVertex2i(x1, y1); - glVertex2i(x2, y2); + glVertex2f(x1+0.37, y1+0.37); + glVertex2f(x2+0.37, y2+0.37); glEnd(); + if (x1 <> x2) or (y1 <> y2) then + begin + glBegin(GL_POINTS); + glVertex2f(x2+0.37, y2+0.37); + glEnd(); + end; + glColor4f(1, 1, 1, 1); glDisable(GL_BLEND); end; @@ -547,19 +563,7 @@ end; procedure drawRect (x, y, w, h: Integer; r, g, b: Integer; a: Integer=255); begin if (w < 0) or (h < 0) then exit; - //if (w = 1) and (h = 1) then begin drawLine(x, y, x, y, r, g, b, a); exit; end; - if (a < 0) then a := 0 else if (a > 255) then a := 255; - if (r < 0) then r := 0 else if (r > 255) then r := 255; - if (g < 0) then g := 0 else if (g > 255) then g := 255; - if (b < 0) then b := 0 else if (b > 255) then b := 255; - { - Inc(w); - Inc(h); - drawLine(x, y, x+w-1, y, r, g, b, a); - drawLine(x+w-1, y+1, x+w-1, y+h-1, r, g, b, a); - drawLine(x+w-2, y+h-1, x, y+h-1, r, g, b, a); - drawLine(x, y+h-2, x, y+1, r, g, b, a); - } + normRGBA(r, g, b, a); if (a < 255) then begin glEnable(GL_BLEND); @@ -574,26 +578,33 @@ begin glDisable(GL_LINE_SMOOTH); glDisable(GL_POLYGON_SMOOTH); glColor4f(r/255.0, g/255.0, b/255.0, a/255.0); - { - glBegin(GL_LINE_LOOP); - glVertex2f(x+0.37, y+0.37); - glVertex2f(x+w-1+0.37, y+0.37); - glVertex2f(x+w-1+0.37, y+h-1); - glVertex2f(x+0.37, y+h-1+0.37); - glEnd(); - } - glBegin(GL_LINES); - glVertex2i(x, y); glVertex2i(x+w, y); // top - glVertex2i(x, y+h-1); glVertex2i(x+w, y+h-1); // bottom - glVertex2f(x+0.37, y+1); glVertex2f(x+0.37, y+h-1); // left - glVertex2f(x+w-1+0.37, y+1); glVertex2f(x+w-1+0.37, y+h-1); // right - glEnd(); + if (w = 1) and (h = 1) then + begin + glBegin(GL_POINTS); + glVertex2f(x+0.37, y+0.37); + glEnd(); + end + else + begin + glBegin(GL_LINES); + glVertex2i(x, y); glVertex2i(x+w, y); // top + glVertex2i(x, y+h-1); glVertex2i(x+w, y+h-1); // bottom + glVertex2f(x+0.37, y+1); glVertex2f(x+0.37, y+h-1); // left + glVertex2f(x+w-1+0.37, y+1); glVertex2f(x+w-1+0.37, y+h-1); // right + glEnd(); + end; //glRect(x, y, x+w, y+h); glColor4f(1, 1, 1, 1); glDisable(GL_BLEND); end; +procedure drawRectUI (x, y, w, h: Integer; r, g, b: Integer; a: Integer=255); +begin + drawRect(x, y, w, h, r, g, b, a); +end; + + procedure darkenRect (x, y, w, h: Integer; a: Integer); begin if (w < 0) or (h < 0) then exit; @@ -621,10 +632,7 @@ end; procedure fillRect (x, y, w, h: Integer; r, g, b: Integer; a: Integer=255); begin if (w < 0) or (h < 0) then exit; - if (a < 0) then a := 0 else if (a > 255) then a := 255; - if (r < 0) then r := 0 else if (r > 255) then r := 255; - if (g < 0) then g := 0 else if (g > 255) then g := 255; - if (b < 0) then b := 0 else if (b > 255) then b := 255; + normRGBA(r, g, b, a); if (a < 255) then begin glEnable(GL_BLEND);