hedgewars/uVisualGears.pas
changeset 4793 5ea3d182415e
parent 4792 68f9b331014a
child 4806 48c1a395f0a7
equal deleted inserted replaced
4769:42adc7c11980 4793:5ea3d182415e
    30 procedure KickFlakes(Radius, X, Y: LongInt);
    30 procedure KickFlakes(Radius, X, Y: LongInt);
    31 procedure DrawVisualGears(Layer: LongWord);
    31 procedure DrawVisualGears(Layer: LongWord);
    32 procedure DeleteVisualGear(Gear: PVisualGear);
    32 procedure DeleteVisualGear(Gear: PVisualGear);
    33 function  VisualGearByUID(uid : Longword) : PVisualGear;
    33 function  VisualGearByUID(uid : Longword) : PVisualGear;
    34 procedure AddClouds;
    34 procedure AddClouds;
       
    35 procedure ChangeToSDClouds;
    35 procedure AddDamageTag(X, Y, Damage, Color: LongWord);
    36 procedure AddDamageTag(X, Y, Damage, Color: LongWord);
    36 
    37 
    37 implementation
    38 implementation
    38 uses uSound, uMobile, uVariables, uTextures, uRender, Math, uRenderUtils;
    39 uses uSound, uMobile, uVariables, uTextures, uRender, Math, uRenderUtils;
    39 
    40 
   326 
   327 
   327     if Gear^.NextGear <> nil then Gear^.NextGear^.PrevGear:= Gear^.PrevGear;
   328     if Gear^.NextGear <> nil then Gear^.NextGear^.PrevGear:= Gear^.PrevGear;
   328     if Gear^.PrevGear <> nil then Gear^.PrevGear^.NextGear:= Gear^.NextGear
   329     if Gear^.PrevGear <> nil then Gear^.PrevGear^.NextGear:= Gear^.NextGear
   329     else VisualGearsList:= Gear^.NextGear;
   330     else VisualGearsList:= Gear^.NextGear;
   330 
   331 
       
   332     if lastVisualGearByUID = Gear then lastVisualGearByUID:= nil;
       
   333 
   331     Dispose(Gear);
   334     Dispose(Gear);
   332 end;
   335 end;
   333 
   336 
   334 procedure ProcessVisualGears(Steps: Longword);
   337 procedure ProcessVisualGears(Steps: Longword);
   335 var Gear, t: PVisualGear;
   338 var Gear, t: PVisualGear;
   390                       else
   393                       else
   391                         if SuddenDeathDmg then
   394                         if SuddenDeathDmg then
   392                             DrawRotatedF(sprSDFlake, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle)
   395                             DrawRotatedF(sprSDFlake, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle)
   393                         else
   396                         else
   394                             DrawRotatedF(sprFlake, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle);
   397                             DrawRotatedF(sprFlake, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle);
   395             vgtCloud: DrawSprite(sprCloud, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame);
   398             vgtCloud: if SuddenDeathDmg then
       
   399                           DrawSprite(sprSDCloud, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame)
       
   400                       else
       
   401                           DrawSprite(sprCloud, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame);
   396             end;
   402             end;
   397         if Gear^.Tint <> $FFFFFFFF then Tint($FF,$FF,$FF,$FF);
   403         if Gear^.Tint <> $FFFFFFFF then Tint($FF,$FF,$FF,$FF);
   398         Gear:= Gear^.NextGear
   404         Gear:= Gear^.NextGear
   399         end;
   405         end;
   400     1: while Gear <> nil do
   406     1: while Gear <> nil do
   479                                 Tint($FF, $FF, $FF, Gear^.FrameTicks);
   485                                 Tint($FF, $FF, $FF, Gear^.FrameTicks);
   480                                 tinted:= true
   486                                 tinted:= true
   481                                 end;
   487                                 end;
   482                             DrawRotatedF(sprEgg, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Frame, 1, Gear^.Angle);
   488                             DrawRotatedF(sprEgg, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Frame, 1, Gear^.Angle);
   483                             end;
   489                             end;
   484                 vgtSplash: DrawSprite(sprSplash, round(Gear^.X) + WorldDx - 40, round(Gear^.Y) + WorldDy - 58, 19 - (Gear^.FrameTicks div 37));
   490                  vgtSplash: if SuddenDeathDmg then
   485                 vgtDroplet: DrawSprite(sprDroplet, round(Gear^.X) + WorldDx - 8, round(Gear^.Y) + WorldDy - 8, Gear^.Frame);
   491                                 DrawSprite(sprSDSplash, round(Gear^.X) + WorldDx - 40, round(Gear^.Y) + WorldDy - 58, 19 - (Gear^.FrameTicks div 37))
       
   492                             else
       
   493                                 DrawSprite(sprSplash, round(Gear^.X) + WorldDx - 40, round(Gear^.Y) + WorldDy - 58, 19 - (Gear^.FrameTicks div 37));
       
   494                 vgtDroplet: if SuddenDeathDmg then
       
   495                                 DrawSprite(sprSDDroplet, round(Gear^.X) + WorldDx - 8, round(Gear^.Y) + WorldDy - 8, Gear^.Frame)
       
   496                             else
       
   497                                 DrawSprite(sprDroplet, round(Gear^.X) + WorldDx - 8, round(Gear^.Y) + WorldDy - 8, Gear^.Frame);
   486                vgtBeeTrace: begin
   498                vgtBeeTrace: begin
   487                             if Gear^.FrameTicks < $FF then
   499                             if Gear^.FrameTicks < $FF then
   488                                 Tint($FF, $FF, $FF, Gear^.FrameTicks div 2)
   500                                 Tint($FF, $FF, $FF, Gear^.FrameTicks div 2)
   489                             else
   501                             else
   490                                 Tint($FF, $FF, $FF, $80);
   502                                 Tint($FF, $FF, $FF, $80);
   519 
   531 
   520 function  VisualGearByUID(uid : Longword) : PVisualGear;
   532 function  VisualGearByUID(uid : Longword) : PVisualGear;
   521 var vg: PVisualGear;
   533 var vg: PVisualGear;
   522 begin
   534 begin
   523 VisualGearByUID:= nil;
   535 VisualGearByUID:= nil;
       
   536 if uid = 0 then exit;
       
   537 if (lastVisualGearByUID <> nil) and (lastVisualGearByUID^.uid = uid) then
       
   538     begin
       
   539     VisualGearByUID:= lastVisualGearByUID;
       
   540     exit
       
   541     end;
   524 vg:= VisualGearsList;
   542 vg:= VisualGearsList;
   525 while vg <> nil do
   543 while vg <> nil do
   526     begin
   544     begin
   527     if vg^.uid = uid then
   545     if vg^.uid = uid then
   528         begin
   546         begin
   529             VisualGearByUID:= vg;
   547         lastVisualGearByUID:= vg;
   530             exit
   548         VisualGearByUID:= vg;
       
   549         exit
   531         end;
   550         end;
   532     vg:= vg^.NextGear
   551     vg:= vg^.NextGear
   533     end
   552     end
   534 end;
   553 end;
   535 
   554 
   538 begin
   557 begin
   539 for i:= 0 to cCloudsNumber - 1 do
   558 for i:= 0 to cCloudsNumber - 1 do
   540     AddVisualGear(cLeftScreenBorder + i * cScreenSpace div (cCloudsNumber + 1), LAND_HEIGHT-1184, vgtCloud)
   559     AddVisualGear(cLeftScreenBorder + i * cScreenSpace div (cCloudsNumber + 1), LAND_HEIGHT-1184, vgtCloud)
   541 end;
   560 end;
   542 
   561 
       
   562 procedure ChangeToSDClouds;
       
   563 var       i: LongInt;
       
   564     vg, tmp: PVisualGear;
       
   565 begin
       
   566 if cCloudsNumber = cSDCloudsNumber then exit;
       
   567 vg:= VisualGearsList;
       
   568 while vg <> nil do
       
   569     if vg^.Kind = vgtCloud then
       
   570         begin
       
   571         tmp:= vg^.NextGear;
       
   572         DeleteVisualGear(vg);
       
   573         vg:= tmp
       
   574         end
       
   575     else vg:= vg^.NextGear;
       
   576 for i:= 0 to cSDCloudsNumber - 1 do
       
   577     AddVisualGear(cLeftScreenBorder + i * cScreenSpace div (cSDCloudsNumber + 1), LAND_HEIGHT-1184, vgtCloud)
       
   578 end;
       
   579 
   543 procedure initModule;
   580 procedure initModule;
   544 begin
   581 begin
   545     VisualGearsList:= nil;
   582     VisualGearsList:= nil;
   546 end;
   583 end;
   547 
   584