hedgewars/uVisualGears.pas
changeset 15908 014f4edd0421
parent 15795 da1bb21e6fbf
equal deleted inserted replaced
15907:a323e1954a6f 15908:014f4edd0421
   134 end;
   134 end;
   135 
   135 
   136 function GetSpriteData(sprite, SDsprite: TSprite): PSpriteData; inline;
   136 function GetSpriteData(sprite, SDsprite: TSprite): PSpriteData; inline;
   137 begin
   137 begin
   138     exit(@SpritesData[GetSprite(sprite, SDsprite)]);
   138     exit(@SpritesData[GetSprite(sprite, SDsprite)]);
       
   139 end;
       
   140 
       
   141 procedure DrawCircleGear(gear : PVisualGear);
       
   142 var tmp: real;
       
   143 begin
       
   144    if gear^.Angle = 1 then
       
   145    begin
       
   146       tmp:= Gear^.State / 100;
       
   147       DrawTexture(round(Gear^.X-24*tmp) + WorldDx, round(Gear^.Y-24*tmp) + WorldDy, SpritesData[sprVampiric].Texture, tmp)
       
   148    end
       
   149    else
       
   150       DrawCircle(round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.State, Gear^.Timer);
   139 end;
   151 end;
   140 
   152 
   141 procedure DrawVisualGears(Layer: LongWord; worldIsShifted: boolean);
   153 procedure DrawVisualGears(Layer: LongWord; worldIsShifted: boolean);
   142 var Gear: PVisualGear;
   154 var Gear: PVisualGear;
   143     tinted, speedlessFlakes: boolean;
   155     tinted, speedlessFlakes: boolean;
   206               vgtSmokeTrace: if Gear^.State < 8 then
   218               vgtSmokeTrace: if Gear^.State < 8 then
   207                   DrawSprite(sprSmokeTrace, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.State);
   219                   DrawSprite(sprSmokeTrace, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.State);
   208               vgtEvilTrace: if Gear^.State < 8 then
   220               vgtEvilTrace: if Gear^.State < 8 then
   209                   DrawSprite(sprEvilTrace, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.State);
   221                   DrawSprite(sprEvilTrace, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.State);
   210               vgtLineTrail: DrawLine(Gear^.X, Gear^.Y, Gear^.dX, Gear^.dY, 1.0, $FF, min(Gear^.Timer, $C0), min(Gear^.Timer, $80), min(Gear^.Timer, (Gear^.Tint and $FF)));
   222               vgtLineTrail: DrawLine(Gear^.X, Gear^.Y, Gear^.dX, Gear^.dY, 1.0, $FF, min(Gear^.Timer, $C0), min(Gear^.Timer, $80), min(Gear^.Timer, (Gear^.Tint and $FF)));
       
   223               vgtLine: DrawLine(Gear^.X, Gear^.Y, Gear^.dX, Gear^.dY, Gear^.State, Gear^.Tint);
       
   224               vgtCircle: DrawCircleGear(gear);
   211           end;
   225           end;
   212           if (cReducedQuality and rqAntiBoom) = 0 then
   226           if (cReducedQuality and rqAntiBoom) = 0 then
   213               case Gear^.Kind of
   227               case Gear^.Kind of
   214                   vgtSmoke: DrawTextureF(SpritesData[sprSmoke].Texture, Gear^.scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, 7 - Gear^.Frame, 1, SpritesData[sprSmoke].Width, SpritesData[sprSmoke].Height);
   228                   vgtSmoke: DrawTextureF(SpritesData[sprSmoke].Texture, Gear^.scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, 7 - Gear^.Frame, 1, SpritesData[sprSmoke].Width, SpritesData[sprSmoke].Height);
   215                   vgtSmokeWhite: DrawSprite(sprSmokeWhite, round(Gear^.X) + WorldDx - 11, round(Gear^.Y) + WorldDy - 11, 7 - Gear^.Frame);
   229                   vgtSmokeWhite: DrawSprite(sprSmokeWhite, round(Gear^.X) + WorldDx - 11, round(Gear^.Y) + WorldDy - 11, 7 - Gear^.Frame);
   375                              if speedlessFlakes then
   389                              if speedlessFlakes then
   376                                  DrawTextureF(spriteData^.Texture, Gear^.Scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, spriteData^.Width, spriteData^.Height)
   390                                  DrawTextureF(spriteData^.Texture, Gear^.Scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, spriteData^.Width, spriteData^.Height)
   377                              else
   391                              else
   378                                  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);
   392                                  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);
   379                              end;
   393                              end;
   380                vgtCircle: if gear^.Angle = 1 then
   394               vgtCircle: DrawCircleGear(gear);
   381                               begin
       
   382                               tmp:= Gear^.State / 100;
       
   383                               DrawTexture(round(Gear^.X-24*tmp) + WorldDx, round(Gear^.Y-24*tmp) + WorldDy, SpritesData[sprVampiric].Texture, tmp)
       
   384                               end
       
   385                           else
       
   386                               DrawCircle(round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.State, Gear^.Timer);
       
   387            end;
   395            end;
   388            if (Gear^.Tint <> $FFFFFFFF) or tinted then
   396            if (Gear^.Tint <> $FFFFFFFF) or tinted then
   389                untint;
   397                untint;
   390            Gear:= Gear^.NextGear
   398            Gear:= Gear^.NextGear
   391            end
   399            end