equal
deleted
inserted
replaced
64 procedure DrawFromRect(X, Y, W, H: LongInt; r: PSDL_Rect; SourceTexture: PTexture); |
64 procedure DrawFromRect(X, Y, W, H: LongInt; r: PSDL_Rect; SourceTexture: PTexture); |
65 var rr: TSDL_Rect; |
65 var rr: TSDL_Rect; |
66 _l, _r, _t, _b: real; |
66 _l, _r, _t, _b: real; |
67 VertexBuffer, TextureBuffer: array [0..3] of TVertex2f; |
67 VertexBuffer, TextureBuffer: array [0..3] of TVertex2f; |
68 begin |
68 begin |
69 if (SourceTexture^.h = 0) or (SourceTexture^.w = 0) then exit; |
69 if (SourceTexture^.h = 0) or (SourceTexture^.w = 0) then |
|
70 exit; |
70 |
71 |
71 // do not draw anything outside the visible screen space (first check fixes some sprite drawing, e.g. hedgehogs) |
72 // do not draw anything outside the visible screen space (first check fixes some sprite drawing, e.g. hedgehogs) |
72 if (abs(X) > W) and ((abs(X + W / 2) - W / 2) > cScreenWidth / cScaleFactor) then |
73 if (abs(X) > W) and ((abs(X + W / 2) - W / 2) > cScreenWidth / cScaleFactor) then |
73 exit; |
74 exit; |
74 if (abs(Y) > H) and ((abs(Y + H / 2 - (0.5 * cScreenHeight)) - H / 2) > cScreenHeight / cScaleFactor) then |
75 if (abs(Y) > H) and ((abs(Y + H / 2 - (0.5 * cScreenHeight)) - H / 2) > cScreenHeight / cScaleFactor) then |
204 begin |
205 begin |
205 glPushMatrix; |
206 glPushMatrix; |
206 glTranslatef(X, Y, 0); |
207 glTranslatef(X, Y, 0); |
207 |
208 |
208 if Dir < 0 then |
209 if Dir < 0 then |
209 glRotatef(Angle, 0, 0, -1) |
210 glRotatef(Angle, 0, 0, -1) |
210 else |
211 else |
211 glRotatef(Angle, 0, 0, 1); |
212 glRotatef(Angle, 0, 0, 1); |
212 if Dir < 0 then glScalef(-1.0, 1.0, 1.0); |
213 if Dir < 0 then |
|
214 glScalef(-1.0, 1.0, 1.0); |
213 |
215 |
214 DrawSprite(Sprite, -SpritesData[Sprite].Width div 2, -SpritesData[Sprite].Height div 2, Frame); |
216 DrawSprite(Sprite, -SpritesData[Sprite].Width div 2, -SpritesData[Sprite].Height div 2, Frame); |
215 |
217 |
216 glPopMatrix |
218 glPopMatrix |
217 end; |
219 end; |
227 |
229 |
228 glPushMatrix; |
230 glPushMatrix; |
229 glTranslatef(X, Y, 0); |
231 glTranslatef(X, Y, 0); |
230 |
232 |
231 if Dir < 0 then |
233 if Dir < 0 then |
232 begin |
234 begin |
233 hw:= - hw; |
235 hw:= - hw; |
234 glRotatef(Angle, 0, 0, -1); |
236 glRotatef(Angle, 0, 0, -1); |
235 end else |
237 end |
236 glRotatef(Angle, 0, 0, 1); |
238 else |
|
239 glRotatef(Angle, 0, 0, 1); |
237 |
240 |
238 |
241 |
239 glBindTexture(GL_TEXTURE_2D, Tex^.id); |
242 glBindTexture(GL_TEXTURE_2D, Tex^.id); |
240 |
243 |
241 VertexBuffer[0].X:= -hw; |
244 VertexBuffer[0].X:= -hw; |
255 end; |
258 end; |
256 |
259 |
257 procedure DrawSprite (Sprite: TSprite; X, Y, Frame: LongInt); |
260 procedure DrawSprite (Sprite: TSprite; X, Y, Frame: LongInt); |
258 var row, col, numFramesFirstCol: LongInt; |
261 var row, col, numFramesFirstCol: LongInt; |
259 begin |
262 begin |
260 if SpritesData[Sprite].imageHeight = 0 then exit; |
263 if SpritesData[Sprite].imageHeight = 0 then |
|
264 exit; |
261 numFramesFirstCol:= SpritesData[Sprite].imageHeight div SpritesData[Sprite].Height; |
265 numFramesFirstCol:= SpritesData[Sprite].imageHeight div SpritesData[Sprite].Height; |
262 row:= Frame mod numFramesFirstCol; |
266 row:= Frame mod numFramesFirstCol; |
263 col:= Frame div numFramesFirstCol; |
267 col:= Frame div numFramesFirstCol; |
264 DrawSprite2 (Sprite, X, Y, col, row); |
268 DrawSprite2 (Sprite, X, Y, col, row); |
265 end; |
269 end; |
408 |
412 |
409 t:= Pos * 32 / HHTexture^.h; |
413 t:= Pos * 32 / HHTexture^.h; |
410 b:= (Pos + 1) * 32 / HHTexture^.h; |
414 b:= (Pos + 1) * 32 / HHTexture^.h; |
411 |
415 |
412 if Dir = -1 then |
416 if Dir = -1 then |
413 begin |
417 begin |
414 l:= (Step + 1) * 32 / HHTexture^.w; |
418 l:= (Step + 1) * 32 / HHTexture^.w; |
415 r:= Step * 32 / HHTexture^.w |
419 r:= Step * 32 / HHTexture^.w |
416 end else |
420 end |
417 begin |
421 else |
418 l:= Step * 32 / HHTexture^.w; |
422 begin |
419 r:= (Step + 1) * 32 / HHTexture^.w |
423 l:= Step * 32 / HHTexture^.w; |
|
424 r:= (Step + 1) * 32 / HHTexture^.w |
420 end; |
425 end; |
421 |
426 |
422 |
427 |
423 glPushMatrix(); |
428 glPushMatrix(); |
424 glTranslatef(X, Y, 0); |
429 glTranslatef(X, Y, 0); |
455 exit; |
460 exit; |
456 |
461 |
457 if cGrayScale then |
462 if cGrayScale then |
458 begin |
463 begin |
459 tw:= round(r * RGB_LUMINANCE_RED + g * RGB_LUMINANCE_GREEN + b * RGB_LUMINANCE_BLUE); |
464 tw:= round(r * RGB_LUMINANCE_RED + g * RGB_LUMINANCE_GREEN + b * RGB_LUMINANCE_BLUE); |
460 if tw > 255 then tw:= 255; |
465 if tw > 255 then |
|
466 tw:= 255; |
461 r:= tw; |
467 r:= tw; |
462 g:= tw; |
468 g:= tw; |
463 b:= tw |
469 b:= tw |
464 end; |
470 end; |
465 |
471 |