hedgewars/uStore.pas
changeset 198 6f00e0f4cb88
parent 196 993cf173218b
child 199 f156e54736a4
equal deleted inserted replaced
197:8a7123b84d1b 198:6f00e0f4cb88
    26 procedure StoreRelease;
    26 procedure StoreRelease;
    27 procedure DrawGear(Stuff : TStuff; X, Y: integer; Surface: PSDL_Surface);
    27 procedure DrawGear(Stuff : TStuff; X, Y: integer; Surface: PSDL_Surface);
    28 procedure DrawSpriteFromRect(r: TSDL_Rect; X, Y, Height, Position: integer; Surface: PSDL_Surface);
    28 procedure DrawSpriteFromRect(r: TSDL_Rect; X, Y, Height, Position: integer; Surface: PSDL_Surface);
    29 procedure DrawSprite (Sprite: TSprite; X, Y, Frame: integer; Surface: PSDL_Surface);
    29 procedure DrawSprite (Sprite: TSprite; X, Y, Frame: integer; Surface: PSDL_Surface);
    30 procedure DrawSprite2(Sprite: TSprite; X, Y, FrameX, FrameY: integer; Surface: PSDL_Surface);
    30 procedure DrawSprite2(Sprite: TSprite; X, Y, FrameX, FrameY: integer; Surface: PSDL_Surface);
       
    31 procedure DrawSurfSprite(X, Y, Height, Frame: integer; Source, Surface: PSDL_Surface);
    31 procedure DrawLand (X, Y: integer; Surface: PSDL_Surface);
    32 procedure DrawLand (X, Y: integer; Surface: PSDL_Surface);
    32 procedure DXOutText(X, Y: Integer; Font: THWFont; s: string; Surface: PSDL_Surface);
    33 procedure DXOutText(X, Y: Integer; Font: THWFont; s: string; Surface: PSDL_Surface);
    33 procedure DrawCaption(X, Y: integer; Rect: TSDL_Rect; Surface: PSDL_Surface);
    34 procedure DrawCaption(X, Y: integer; Rect: TSDL_Rect; Surface: PSDL_Surface);
    34 procedure DrawCentered(X, Top: integer; Source, Surface: PSDL_Surface);
    35 procedure DrawCentered(X, Top: integer; Source, Surface: PSDL_Surface);
    35 procedure DrawFromStoreRect(X, Y: integer; Rect: PSDL_Rect; Surface: PSDL_Surface);
    36 procedure DrawFromStoreRect(X, Y: integer; Rect: PSDL_Rect; Surface: PSDL_Surface);
    36 procedure DrawHedgehog(X, Y: integer; Dir: integer; Pos, Step: LongWord; Surface: PSDL_Surface);
    37 procedure DrawHedgehog(X, Y: integer; Dir: integer; Pos, Step: LongWord; Surface: PSDL_Surface);
    37 function  RenderString(s: string; Color: integer; font: THWFont): PSDL_Surface;
    38 function  RenderString(s: string; Color: integer; font: THWFont): PSDL_Surface;
    38 procedure RenderHealth(var Hedgehog: THedgehog);
    39 procedure RenderHealth(var Hedgehog: THedgehog);
    39 procedure AddProgress;
    40 procedure AddProgress;
    40 function  LoadImage(filename: string; hasAlpha: boolean; const critical: boolean = true): PSDL_Surface;
    41 function  LoadImage(filename: string; hasAlpha: boolean; const critical: boolean = true; const setTransparent: boolean = true): PSDL_Surface;
    41 
    42 
    42 var PixelFormat: PSDL_PixelFormat;
    43 var PixelFormat: PSDL_PixelFormat;
    43  SDLPrimSurface: PSDL_Surface;
    44  SDLPrimSurface: PSDL_Surface;
    44 
    45 
    45 implementation
    46 implementation
   108 clr.g:= (Color shr 8) and $FF;
   109 clr.g:= (Color shr 8) and $FF;
   109 clr.b:= Color and $FF;
   110 clr.b:= Color and $FF;
   110 tmpsurf:= TTF_RenderUTF8_Blended(Fontz[Font].Handle, PChar(s), clr);
   111 tmpsurf:= TTF_RenderUTF8_Blended(Fontz[Font].Handle, PChar(s), clr);
   111 Result.x:= X + 3;
   112 Result.x:= X + 3;
   112 Result.y:= Y + 1;
   113 Result.y:= Y + 1;
       
   114 TryDo(tmpsurf <> nil, errmsgRenderText, true);
   113 SDL_UpperBlit(tmpsurf, nil, Surface, @Result);
   115 SDL_UpperBlit(tmpsurf, nil, Surface, @Result);
   114 SDL_FreeSurface(tmpsurf);
   116 SDL_FreeSurface(tmpsurf);
   115 Result.x:= X;
   117 Result.x:= X;
   116 Result.y:= Y;
   118 Result.y:= Y;
   117 Result.w:= w + 6;
   119 Result.w:= w + 6;
   157       end;
   159       end;
   158     end;
   160     end;
   159 
   161 
   160     procedure MakeCrossHairs;
   162     procedure MakeCrossHairs;
   161     var Team: PTeam;
   163     var Team: PTeam;
   162         r: TSDL_Rect;
       
   163         tmpsurf: PSDL_Surface;
   164         tmpsurf: PSDL_Surface;
   164         s: string;
   165         s: string;
   165         TransColor: Longword;
   166     begin
   166     begin
       
   167     r.x:= 0;
       
   168     r.y:= 256;
       
   169     r.w:= 16;
       
   170     r.h:= 16;
       
   171     s:= Pathz[ptGraphics] + '/' + cCHFileName;
   167     s:= Pathz[ptGraphics] + '/' + cCHFileName;
   172     tmpsurf:= LoadImage(PChar(s), false);
   168     tmpsurf:= LoadImage(PChar(s), true, true, false);
   173     TransColor:= SDL_MapRGB(tmpsurf.format, $FF, $FF, $FF);
       
   174     TryDo(SDL_SetColorKey(tmpsurf, SDL_SRCCOLORKEY, TransColor) = 0, errmsgTransparentSet, true);
       
   175 
   169 
   176     Team:= TeamsList;
   170     Team:= TeamsList;
   177     while Team<>nil do
   171     while Team<>nil do
   178       begin
   172       begin
   179       SDL_FillRect(StoreSurface, @r, Team.AdjColor);
   173       Team.CrosshairSurf:= SDL_CreateRGBSurface(SDL_HWSURFACE, 24, 360, cBits, PixelFormat.RMask, PixelFormat.GMask, PixelFormat.BMask, PixelFormat.AMask);
   180       SDL_UpperBlit(tmpsurf, nil, StoreSurface, @r);
   174       TryDo(Team.CrosshairSurf <> nil, errmsgCreateSurface, true);
   181       Team.CrossHairRect:= r;
   175       SDL_FillRect(Team.CrosshairSurf, nil, Team.AdjColor);
   182       inc(r.x, 16);
   176       SDL_UpperBlit(tmpsurf, nil, Team.CrosshairSurf, nil);
       
   177       TryDo(SDL_SetColorKey(Team.CrosshairSurf, SDL_SRCCOLORKEY or SDL_RLEACCEL, 0) = 0, errmsgTransparentSet, true);
   183       Team:= Team.Next
   178       Team:= Team.Next
   184       end;
   179       end;
   185       
   180       
   186     SDL_FreeSurface(tmpsurf)
   181     SDL_FreeSurface(tmpsurf)
   187     end;
   182     end;
   343 r.h:= Height;
   338 r.h:= Height;
   344 DrawFromRect(X, Y, @r, StoreSurface, Surface)
   339 DrawFromRect(X, Y, @r, StoreSurface, Surface)
   345 end;
   340 end;
   346 
   341 
   347 procedure DrawSprite (Sprite: TSprite; X, Y, Frame: integer; Surface: PSDL_Surface);
   342 procedure DrawSprite (Sprite: TSprite; X, Y, Frame: integer; Surface: PSDL_Surface);
   348 var r: TSDL_Rect;
   343 begin
   349 begin
   344 DrawSurfSprite(X, Y, SpritesData[Sprite].Height, Frame, SpritesData[Sprite].Surface, Surface)
   350 r.x:= 0;
       
   351 r.w:= SpritesData[Sprite].Width;
       
   352 r.y:= Frame * SpritesData[Sprite].Height;
       
   353 r.h:= SpritesData[Sprite].Height;
       
   354 DrawFromRect(X, Y, @r, SpritesData[Sprite].Surface, Surface)
       
   355 end;
   345 end;
   356 
   346 
   357 procedure DrawSprite2(Sprite: TSprite; X, Y, FrameX, FrameY: integer; Surface: PSDL_Surface);
   347 procedure DrawSprite2(Sprite: TSprite; X, Y, FrameX, FrameY: integer; Surface: PSDL_Surface);
   358 var r: TSDL_Rect;
   348 var r: TSDL_Rect;
   359 begin
   349 begin
   360 r.x:= FrameX * SpritesData[Sprite].Width;
   350 r.x:= FrameX * SpritesData[Sprite].Width;
   361 r.w:= SpritesData[Sprite].Width;
   351 r.w:= SpritesData[Sprite].Width;
   362 r.y:= FrameY * SpritesData[Sprite].Height;
   352 r.y:= FrameY * SpritesData[Sprite].Height;
   363 r.h:= SpritesData[Sprite].Height;
   353 r.h:= SpritesData[Sprite].Height;
   364 DrawFromRect(X, Y, @r, SpritesData[Sprite].Surface, Surface)
   354 DrawFromRect(X, Y, @r, SpritesData[Sprite].Surface, Surface)
       
   355 end;
       
   356 
       
   357 procedure DrawSurfSprite(X, Y, Height, Frame: integer; Source, Surface: PSDL_Surface);
       
   358 var r: TSDL_Rect;
       
   359 begin
       
   360 r.x:= 0;
       
   361 r.w:= Source.w;
       
   362 r.y:= Frame * Height;
       
   363 r.h:= Height;
       
   364 DrawFromRect(X, Y, @r, Source, Surface)
   365 end;
   365 end;
   366 
   366 
   367 procedure DXOutText(X, Y: Integer; Font: THWFont; s: string; Surface: PSDL_Surface);
   367 procedure DXOutText(X, Y: Integer; Font: THWFont; s: string; Surface: PSDL_Surface);
   368 var clr: TSDL_Color;
   368 var clr: TSDL_Color;
   369     tmpsurf: PSDL_Surface;
   369     tmpsurf: PSDL_Surface;
   373 r.y:= Y;
   373 r.y:= Y;
   374 clr.r:= $FF;
   374 clr.r:= $FF;
   375 clr.g:= $FF;
   375 clr.g:= $FF;
   376 clr.b:= $FF;
   376 clr.b:= $FF;
   377 tmpsurf:= TTF_RenderUTF8_Solid(Fontz[Font].Handle, PChar(s), clr);
   377 tmpsurf:= TTF_RenderUTF8_Solid(Fontz[Font].Handle, PChar(s), clr);
       
   378 TryDo(tmpsurf <> nil, errmsgRenderText, true);
   378 SDL_UpperBlit(tmpsurf, nil, Surface, @r);
   379 SDL_UpperBlit(tmpsurf, nil, Surface, @r);
   379 SDL_FreeSurface(tmpsurf)
   380 SDL_FreeSurface(tmpsurf)
   380 end;
   381 end;
   381 
   382 
   382 procedure DrawLand(X, Y: integer; Surface: PSDL_Surface);
   383 procedure DrawLand(X, Y: integer; Surface: PSDL_Surface);
   468    WriteLnToConsole('Freeing progress surface... ');
   469    WriteLnToConsole('Freeing progress surface... ');
   469    SDL_FreeSurface(ProgrSurf)
   470    SDL_FreeSurface(ProgrSurf)
   470    end;
   471    end;
   471 end;
   472 end;
   472 
   473 
   473 function  LoadImage(filename: string; hasAlpha: boolean; const critical: boolean = true): PSDL_Surface;
   474 function  LoadImage(filename: string; hasAlpha: boolean; const critical: boolean = true; const setTransparent: boolean = true): PSDL_Surface;
   474 var tmpsurf: PSDL_Surface;
   475 var tmpsurf: PSDL_Surface;
   475 begin
   476 begin
   476 WriteToConsole(msgLoading + filename + '... ');
   477 WriteToConsole(msgLoading + filename + '... ');
   477 tmpsurf:= IMG_Load(PChar(filename + '.' + cBitsStr + '.png'));
   478 tmpsurf:= IMG_Load(PChar(filename + '.' + cBitsStr + '.png'));
   478 if tmpsurf = nil then
   479 if tmpsurf = nil then
   484       WriteLnToConsole(msgFailed);
   485       WriteLnToConsole(msgFailed);
   485       Result:= nil;
   486       Result:= nil;
   486       exit
   487       exit
   487       end;
   488       end;
   488       
   489       
   489 TryDo(SDL_SetColorKey(tmpsurf, SDL_SRCCOLORKEY or SDL_RLEACCEL, 0) = 0, errmsgTransparentSet, true);
   490 if setTransparent then TryDo(SDL_SetColorKey(tmpsurf, SDL_SRCCOLORKEY or SDL_RLEACCEL, 0) = 0, errmsgTransparentSet, true);
   490 if hasAlpha then Result:= SDL_DisplayFormatAlpha(tmpsurf)
   491 if hasAlpha then Result:= SDL_DisplayFormatAlpha(tmpsurf)
   491             else Result:= SDL_DisplayFormat(tmpsurf);
   492             else Result:= SDL_DisplayFormat(tmpsurf);
   492 WriteLnToConsole(msgOK)
   493 WriteLnToConsole(msgOK)
   493 end;
   494 end;
   494 
   495