hedgewars/uVisualGears.pas
branchqmlfrontend
changeset 12855 1b2b84315d27
parent 12702 0dfb49261cab
child 13048 9dd724e8d620
equal deleted inserted replaced
11843:01f88c3b7b66 12855:1b2b84315d27
   123         exit(SDsprite)
   123         exit(SDsprite)
   124     else
   124     else
   125         exit(sprite);
   125         exit(sprite);
   126 end;
   126 end;
   127 
   127 
       
   128 function GetSpriteByWind(sprite, Lsprite: TSprite): TSprite; inline;
       
   129 begin
       
   130     if (SpritesData[Lsprite].Texture <> nil) and (cWindSpeedf<0) then
       
   131         exit(Lsprite)
       
   132     else
       
   133         exit(sprite);
       
   134 end;
       
   135 
   128 function GetSpriteData(sprite, SDsprite: TSprite): PSpriteData; inline;
   136 function GetSpriteData(sprite, SDsprite: TSprite): PSpriteData; inline;
   129 begin
   137 begin
   130     exit(@SpritesData[GetSprite(sprite, SDsprite)]);
   138     exit(@SpritesData[GetSprite(sprite, SDsprite)]);
   131 end;
   139 end;
   132 
   140 
   150         while Gear <> nil do
   158         while Gear <> nil do
   151             begin
   159             begin
   152             if Gear^.Tint <> $FFFFFFFF then Tint(Gear^.Tint);
   160             if Gear^.Tint <> $FFFFFFFF then Tint(Gear^.Tint);
   153             case Gear^.Kind of
   161             case Gear^.Kind of
   154               vgtCloud: begin
   162               vgtCloud: begin
   155                         spriteData:= GetSpriteData(sprCloud, sprSDCloud);
   163                         spriteData:= GetSpriteData(GetSpriteByWind(sprCloud, sprCloudL), GetSpriteByWind(sprSDCloud, sprSDCloudL));
   156                         DrawTextureF(spriteData^.Texture, Gear^.Scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, spriteData^.Width, spriteData^.Height)
   164                         DrawTextureF(spriteData^.Texture, Gear^.Scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, spriteData^.Width, spriteData^.Height)
   157                         end;
   165                         end;
   158                vgtFlake: begin
   166                vgtFlake: begin
   159                          sprite:= GetSprite(sprFlake, sprSDFlake);
   167                          sprite:= GetSpriteByWind(GetSprite(sprFlake, sprSDFlake), GetSprite(sprFlakeL, sprSDFlakeL));
   160                          if cFlattenFlakes then
   168                          if cFlattenFlakes then
   161                              begin
   169                              begin
   162                              if speedlessFlakes then
   170                              if speedlessFlakes then
   163                                  DrawSprite(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame)
   171                                  DrawSprite(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame)
   164                              else
   172                              else
   186           //tinted:= false;
   194           //tinted:= false;
   187           if Gear^.Tint <> $FFFFFFFF then
   195           if Gear^.Tint <> $FFFFFFFF then
   188               Tint(Gear^.Tint);
   196               Tint(Gear^.Tint);
   189           case Gear^.Kind of
   197           case Gear^.Kind of
   190               vgtFlake: begin
   198               vgtFlake: begin
   191                          sprite:= GetSprite(sprFlake, sprSDFlake);
   199                          sprite:= GetSpriteByWind(GetSprite(sprFlake, sprSDFlake), GetSprite(sprFlakeL, sprSDFlakeL));
   192                          if speedlessFlakes then
   200                          if speedlessFlakes then
   193                              DrawSprite(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame)
   201                              DrawSprite(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame)
   194                          else
   202                          else
   195                              DrawSpriteRotatedF(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle);
   203                              DrawSpriteRotatedF(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle);
   196                         end;
   204                         end;
   329                    vgtSteam: DrawSprite(sprSmokeWhite, round(Gear^.X) + WorldDx - 11, round(Gear^.Y) + WorldDy - 11, 7 - Gear^.Frame);
   337                    vgtSteam: DrawSprite(sprSmokeWhite, round(Gear^.X) + WorldDx - 11, round(Gear^.Y) + WorldDy - 11, 7 - Gear^.Frame);
   330                    vgtAmmo: begin
   338                    vgtAmmo: begin
   331                             tinted:= true;
   339                             tinted:= true;
   332                             Tint($FF, $FF, $FF, round(Gear^.alpha * $FF));
   340                             Tint($FF, $FF, $FF, round(Gear^.alpha * $FF));
   333                             DrawTextureF(ropeIconTex, Gear^.scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, 0, 1, 32, 32);
   341                             DrawTextureF(ropeIconTex, Gear^.scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, 0, 1, 32, 32);
   334                             DrawTextureF(SpritesData[sprAMAmmos].Texture, Gear^.scale * 0.90, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Frame - 1, 1, 32, 32);
   342                             if Gear^.Frame <> ord(amNothing) then
       
   343                                 DrawTextureF(SpritesData[sprAMAmmos].Texture, Gear^.scale * 0.90, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Frame - 1, 1, 32, 32);
   335                             end;
   344                             end;
   336                    vgtShell: begin
   345                    vgtShell: begin
   337                              if Gear^.FrameTicks < $FF then
   346                              if Gear^.FrameTicks < $FF then
   338                                  begin
   347                                  begin
   339                                  Tint($FF, $FF, $FF, Gear^.FrameTicks);
   348                                  Tint($FF, $FF, $FF, Gear^.FrameTicks);
   358                    vgtNote: DrawSpriteRotatedF(sprNote, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Frame, 1, Gear^.Angle);
   367                    vgtNote: DrawSpriteRotatedF(sprNote, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Frame, 1, Gear^.Angle);
   359                    vgtBulletHit: DrawSpriteRotatedF(sprBulletHit, round(Gear^.X) + WorldDx - 0, round(Gear^.Y) + WorldDy - 0, 7 - (Gear^.FrameTicks div 50), 1, Gear^.Angle);
   368                    vgtBulletHit: DrawSpriteRotatedF(sprBulletHit, round(Gear^.X) + WorldDx - 0, round(Gear^.Y) + WorldDy - 0, 7 - (Gear^.FrameTicks div 50), 1, Gear^.Angle);
   360                end;
   369                end;
   361            case Gear^.Kind of
   370            case Gear^.Kind of
   362                vgtFlake: begin
   371                vgtFlake: begin
   363                          spriteData:= GetSpriteData(sprFlake, sprSDFlake);
   372                          spriteData:= GetSpriteData(GetSpriteByWind(sprFlake, sprFlakeL), GetSpriteByWind(sprSDFlake, sprSDFlakeL));
   364                          if speedlessFlakes then
   373                          if speedlessFlakes then
   365                              DrawTextureF(spriteData^.Texture, Gear^.Scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, spriteData^.Width, spriteData^.Height)
   374                              DrawTextureF(spriteData^.Texture, Gear^.Scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, spriteData^.Width, spriteData^.Height)
   366                          else
   375                          else
   367                              DrawTextureRotatedF(spriteData^.Texture, Gear^.Scale, 0, 0, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, spriteData^.Width, spriteData^.Height, Gear^.Angle);
   376                              DrawTextureRotatedF(spriteData^.Texture, Gear^.Scale, 0, 0, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, spriteData^.Width, spriteData^.Height, Gear^.Angle);
   368                          end;
   377                          end;
   386             begin
   395             begin
   387             if Gear^.Tint <> $FFFFFFFF then
   396             if Gear^.Tint <> $FFFFFFFF then
   388                 Tint(Gear^.Tint);
   397                 Tint(Gear^.Tint);
   389             case Gear^.Kind of
   398             case Gear^.Kind of
   390                vgtCloud: begin
   399                vgtCloud: begin
   391                          spriteData:= GetSpriteData(sprCloud, sprSDCloud);
   400                          spriteData:= GetSpriteData(GetSpriteByWind(sprCloud, sprCloudL), GetSpriteByWind(sprSDCloud, sprSDCloudL));
   392                          DrawTextureF(spriteData^.Texture, Gear^.Scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, spriteData^.Width, spriteData^.Height);
   401                          DrawTextureF(spriteData^.Texture, Gear^.Scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, spriteData^.Width, spriteData^.Height);
   393                          end;
   402                          end;
   394               vgtFlake: begin
   403               vgtFlake: begin
   395                         spriteData:= GetSpriteData(sprFlake, sprSDFlake);
   404                         spriteData:= GetSpriteData(GetSpriteByWind(sprFlake, sprFlakeL), GetSpriteByWind(sprSDFlake, sprSDFlakeL));
   396                         if speedlessFlakes then
   405                         if speedlessFlakes then
   397                             DrawTextureF(spriteData^.Texture, Gear^.Scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, spriteData^.Width, spriteData^.Height)
   406                             DrawTextureF(spriteData^.Texture, Gear^.Scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, spriteData^.Width, spriteData^.Height)
   398                         else
   407                         else
   399                             DrawTextureRotatedF(spriteData^.Texture, Gear^.Scale, 0, 0, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, spriteData^.Width, spriteData^.Height, Gear^.Angle);
   408                             DrawTextureRotatedF(spriteData^.Texture, Gear^.Scale, 0, 0, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, spriteData^.Width, spriteData^.Height, Gear^.Angle);
   400                         end;
   409                         end;
   411             begin
   420             begin
   412             if Gear^.Tint <> $FFFFFFFF then
   421             if Gear^.Tint <> $FFFFFFFF then
   413                 Tint(Gear^.Tint);
   422                 Tint(Gear^.Tint);
   414             case Gear^.Kind of
   423             case Gear^.Kind of
   415                 vgtCloud: begin
   424                 vgtCloud: begin
   416                           sprite:= GetSprite(sprCloud, sprSDCloud);
   425                         sprite:= GetSpriteByWind(GetSprite(sprCloud, sprSDCloud), GetSprite(sprCloudL, sprSDCloudL));
   417                           DrawSprite(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame);
   426                           DrawSprite(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame);
   418                           end;
   427                           end;
   419               vgtFlake: begin
   428               vgtFlake: begin
   420                         sprite:= GetSprite(sprFlake, sprSDFlake);
   429                         sprite:= GetSpriteByWind(GetSprite(sprFlake, sprSDFlake), GetSprite(sprFlakeL, sprSDFlakeL));
   421                         if speedlessFlakes then
   430                         if speedlessFlakes then
   422                             DrawSprite(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame)
   431                             DrawSprite(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame)
   423                         else
   432                         else
   424                             DrawSpriteRotatedF(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle);
   433                             DrawSpriteRotatedF(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle);
   425                         end;
   434                         end;
   436             begin
   445             begin
   437             if Gear^.Tint <> $FFFFFFFF then
   446             if Gear^.Tint <> $FFFFFFFF then
   438                 Tint(Gear^.Tint);
   447                 Tint(Gear^.Tint);
   439             case Gear^.Kind of
   448             case Gear^.Kind of
   440                 vgtFlake: begin
   449                 vgtFlake: begin
   441                           sprite:= GetSprite(sprFlake, sprSDFlake);
   450                          sprite:= GetSpriteByWind(GetSprite(sprFlake, sprSDFlake), GetSprite(sprFlakeL, sprSDFlakeL));
   442                           if speedlessFlakes then
   451                           if speedlessFlakes then
   443                               DrawSprite(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame)
   452                               DrawSprite(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame)
   444                           else
   453                           else
   445                               DrawSpriteRotatedF(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle)
   454                               DrawSpriteRotatedF(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle)
   446                           end;
   455                           end;
   461 for i:= 0 to cCloudsNumber - 1 do
   470 for i:= 0 to cCloudsNumber - 1 do
   462     AddVisualGear(cLeftScreenBorder + i * LongInt(cScreenSpace div (cCloudsNumber + 1)), LAND_HEIGHT-1184, vgtCloud)
   471     AddVisualGear(cLeftScreenBorder + i * LongInt(cScreenSpace div (cCloudsNumber + 1)), LAND_HEIGHT-1184, vgtCloud)
   463 end;
   472 end;
   464 
   473 
   465 procedure ChangeToSDClouds;
   474 procedure ChangeToSDClouds;
   466 var       i: LongInt;
   475 var       i, j: LongInt;
   467     vg, tmp: PVisualGear;
   476     vg, tmp: PVisualGear;
   468 begin
   477 begin
   469 if cCloudsNumber = cSDCloudsNumber then
   478 if cCloudsNumber = cSDCloudsNumber then
   470     exit;
   479     exit;
   471 vg:= VisualGearLayers[0];
   480 for i:= 0 to 6 do
   472 while vg <> nil do
   481     begin
   473     if vg^.Kind = vgtCloud then
   482     vg:= VisualGearLayers[i];
   474         begin
   483     while vg <> nil do
   475         tmp:= vg^.NextGear;
   484         if vg^.Kind = vgtCloud then
   476         DeleteVisualGear(vg);
   485             begin
   477         vg:= tmp
   486             tmp:= vg^.NextGear;
   478         end
   487             DeleteVisualGear(vg);
   479     else vg:= vg^.NextGear;
   488             vg:= tmp
   480 for i:= 0 to cSDCloudsNumber - 1 do
   489             end
   481     AddVisualGear(cLeftScreenBorder + i * LongInt(cScreenSpace div (cSDCloudsNumber + 1)), LAND_HEIGHT-1184, vgtCloud)
   490         else vg:= vg^.NextGear;
       
   491     for j:= 0 to cSDCloudsNumber - 1 do
       
   492         AddVisualGear(cLeftScreenBorder + j * LongInt(cScreenSpace div (cSDCloudsNumber + 1)), LAND_HEIGHT-1184, vgtCloud)
       
   493     end;
   482 end;
   494 end;
   483 
   495 
   484 procedure AddFlakes;
   496 procedure AddFlakes;
   485 var i: LongInt;
   497 var i: LongInt;
   486 begin
   498 begin