hedgewars/uVisualGears.pas
changeset 10373 5e83d029e918
parent 10362 a39e4fa3153e
child 10584 f44ec13e3082
equal deleted inserted replaced
10372:e49b76a12800 10373:5e83d029e918
   130     exit(@SpritesData[GetSprite(sprite, SDsprite)]);
   130     exit(@SpritesData[GetSprite(sprite, SDsprite)]);
   131 end;
   131 end;
   132 
   132 
   133 procedure DrawVisualGears(Layer: LongWord);
   133 procedure DrawVisualGears(Layer: LongWord);
   134 var Gear: PVisualGear;
   134 var Gear: PVisualGear;
   135     tinted: boolean;
   135     tinted, speedlessFlakes: boolean;
   136     tmp: real;
   136     tmp: real;
   137     i: LongInt;
   137     i: LongInt;
   138     sprite: TSprite;
   138     sprite: TSprite;
   139     spriteData: PSpriteData;
   139     spriteData: PSpriteData;
   140 begin
   140 begin
       
   141 if SuddenDeathDmg then
       
   142     speedlessFlakes:= (vobSDVelocity = 0)
       
   143 else
       
   144     speedlessFlakes:= (vobVelocity = 0);
       
   145 
   141 case Layer of
   146 case Layer of
   142     // this layer is very distant in the background when stereo
   147     // this layer is very distant in the background when stereo
   143     0: begin
   148     0: begin
   144         Gear:= VisualGearLayers[0];
   149         Gear:= VisualGearLayers[0];
   145         while Gear <> nil do
   150         while Gear <> nil do
   152                         end;
   157                         end;
   153                vgtFlake: begin
   158                vgtFlake: begin
   154                          sprite:= GetSprite(sprFlake, sprSDFlake);
   159                          sprite:= GetSprite(sprFlake, sprSDFlake);
   155                          if cFlattenFlakes then
   160                          if cFlattenFlakes then
   156                              begin
   161                              begin
   157                              if vobSDVelocity = 0 then
   162                              if speedlessFlakes then
   158                                  DrawSprite(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame)
   163                                  DrawSprite(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame)
   159                              else
   164                              else
   160                                  DrawSpriteRotatedF(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle);
   165                                  DrawSpriteRotatedF(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle);
   161                              end
   166                              end
   162                          else
   167                          else
   163                              begin
   168                              begin
   164                              if vobSDVelocity = 0 then
   169                              if speedlessFlakes then
   165                                  DrawTextureF(SpritesData[sprite].Texture, Gear^.Scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, SpritesData[sprFlake].Width, SpritesData[sprFlake].Height)
   170                                  DrawTextureF(SpritesData[sprite].Texture, Gear^.Scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, SpritesData[sprFlake].Width, SpritesData[sprFlake].Height)
   166                              else
   171                              else
   167                                  DrawTextureRotatedF(SpritesData[sprite].Texture, Gear^.Scale, 0, 0, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, SpritesData[sprFlake].Width, SpritesData[sprFlake].Height, Gear^.Angle);
   172                                  DrawTextureRotatedF(SpritesData[sprite].Texture, Gear^.Scale, 0, 0, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, SpritesData[sprFlake].Width, SpritesData[sprFlake].Height, Gear^.Angle);
   168                              end;
   173                              end;
   169                          end;
   174                          end;
   182           if Gear^.Tint <> $FFFFFFFF then
   187           if Gear^.Tint <> $FFFFFFFF then
   183               Tint(Gear^.Tint);
   188               Tint(Gear^.Tint);
   184           case Gear^.Kind of
   189           case Gear^.Kind of
   185               vgtFlake: begin
   190               vgtFlake: begin
   186                          sprite:= GetSprite(sprFlake, sprSDFlake);
   191                          sprite:= GetSprite(sprFlake, sprSDFlake);
   187                          if vobSDVelocity = 0 then
   192                          if speedlessFlakes then
   188                              DrawSprite(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame)
   193                              DrawSprite(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame)
   189                          else
   194                          else
   190                              DrawSpriteRotatedF(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle);
   195                              DrawSpriteRotatedF(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle);
   191                         end;
   196                         end;
   192               vgtSmokeTrace: if Gear^.State < 8 then
   197               vgtSmokeTrace: if Gear^.State < 8 then
   244                Tint(Gear^.Tint);
   249                Tint(Gear^.Tint);
   245            case Gear^.Kind of
   250            case Gear^.Kind of
   246 (*
   251 (*
   247               vgtFlake: begin
   252               vgtFlake: begin
   248                         sprite:= GetSprite(sprFlake, sprSDFlake);
   253                         sprite:= GetSprite(sprFlake, sprSDFlake);
   249                         if vobSDVelocity = 0 then
   254                         if speedlessFlakes then
   250                             DrawSprite(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame)
   255                             DrawSprite(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame)
   251                         else
   256                         else
   252                             DrawSpriteRotatedF(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle)
   257                             DrawSpriteRotatedF(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle)
   253                         end;*)
   258                         end;*)
   254                vgtSpeechBubble: begin
   259                vgtSpeechBubble: begin
   354                    vgtBulletHit: DrawSpriteRotatedF(sprBulletHit, round(Gear^.X) + WorldDx - 0, round(Gear^.Y) + WorldDy - 0, 7 - (Gear^.FrameTicks div 50), 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);
   355                end;
   360                end;
   356            case Gear^.Kind of
   361            case Gear^.Kind of
   357                vgtFlake: begin
   362                vgtFlake: begin
   358                          spriteData:= GetSpriteData(sprFlake, sprSDFlake);
   363                          spriteData:= GetSpriteData(sprFlake, sprSDFlake);
   359                          if vobSDVelocity = 0 then
   364                          if speedlessFlakes then
   360                              DrawTextureF(spriteData^.Texture, Gear^.Scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, spriteData^.Width, spriteData^.Height)
   365                              DrawTextureF(spriteData^.Texture, Gear^.Scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, spriteData^.Width, spriteData^.Height)
   361                          else
   366                          else
   362                              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);
   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);
   363                          end;
   368                          end;
   364                vgtCircle: if gear^.Angle = 1 then
   369                vgtCircle: if gear^.Angle = 1 then
   386                          spriteData:= GetSpriteData(sprCloud, sprSDCloud);
   391                          spriteData:= GetSpriteData(sprCloud, sprSDCloud);
   387                          DrawTextureF(spriteData^.Texture, Gear^.Scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, spriteData^.Width, spriteData^.Height);
   392                          DrawTextureF(spriteData^.Texture, Gear^.Scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, spriteData^.Width, spriteData^.Height);
   388                          end;
   393                          end;
   389               vgtFlake: begin
   394               vgtFlake: begin
   390                         spriteData:= GetSpriteData(sprFlake, sprSDFlake);
   395                         spriteData:= GetSpriteData(sprFlake, sprSDFlake);
   391                         if vobSDVelocity = 0 then
   396                         if speedlessFlakes then
   392                             DrawTextureF(spriteData^.Texture, Gear^.Scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, spriteData^.Width, spriteData^.Height)
   397                             DrawTextureF(spriteData^.Texture, Gear^.Scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, spriteData^.Width, spriteData^.Height)
   393                         else
   398                         else
   394                             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);
   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);
   395                         end;
   400                         end;
   396             end;
   401             end;
   411                           sprite:= GetSprite(sprCloud, sprSDCloud);
   416                           sprite:= GetSprite(sprCloud, sprSDCloud);
   412                           DrawSprite(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame);
   417                           DrawSprite(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame);
   413                           end;
   418                           end;
   414               vgtFlake: begin
   419               vgtFlake: begin
   415                         sprite:= GetSprite(sprFlake, sprSDFlake);
   420                         sprite:= GetSprite(sprFlake, sprSDFlake);
   416                         if vobSDVelocity = 0 then
   421                         if speedlessFlakes then
   417                             DrawSprite(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame)
   422                             DrawSprite(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame)
   418                         else
   423                         else
   419                             DrawSpriteRotatedF(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle);
   424                             DrawSpriteRotatedF(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle);
   420                         end;
   425                         end;
   421                 end;
   426                 end;
   432             if Gear^.Tint <> $FFFFFFFF then
   437             if Gear^.Tint <> $FFFFFFFF then
   433                 Tint(Gear^.Tint);
   438                 Tint(Gear^.Tint);
   434             case Gear^.Kind of
   439             case Gear^.Kind of
   435                 vgtFlake: begin
   440                 vgtFlake: begin
   436                           sprite:= GetSprite(sprFlake, sprSDFlake);
   441                           sprite:= GetSprite(sprFlake, sprSDFlake);
   437                           if vobSDVelocity = 0 then
   442                           if speedlessFlakes then
   438                               DrawSprite(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame)
   443                               DrawSprite(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame)
   439                           else
   444                           else
   440                               DrawSpriteRotatedF(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle)
   445                               DrawSpriteRotatedF(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle)
   441                           end;
   446                           end;
   442                 vgtNoPlaceWarn:
   447                 vgtNoPlaceWarn: