hedgewars/uGearsUtils.pas
changeset 10653 ae9ad7735690
parent 10634 35d059bd0932
child 10654 cdce07f5a011
equal deleted inserted replaced
10652:4456836514ed 10653:ae9ad7735690
    79 var Gear: PGear;
    79 var Gear: PGear;
    80     dmg, dmgBase: LongInt;
    80     dmg, dmgBase: LongInt;
    81     fX, fY, tdX, tdY: hwFloat;
    81     fX, fY, tdX, tdY: hwFloat;
    82     vg: PVisualGear;
    82     vg: PVisualGear;
    83     i, cnt: LongInt;
    83     i, cnt: LongInt;
       
    84     wrap: boolean;
    84 begin
    85 begin
    85 if Radius > 4 then AddFileLog('Explosion: at (' + inttostr(x) + ',' + inttostr(y) + ')');
    86 if Radius > 4 then AddFileLog('Explosion: at (' + inttostr(x) + ',' + inttostr(y) + ')');
    86 if Radius > 25 then KickFlakes(Radius, X, Y);
    87 if Radius > 25 then KickFlakes(Radius, X, Y);
    87 
    88 
    88 if ((Mask and EXPLNoGfx) = 0) then
    89 if ((Mask and EXPLNoGfx) = 0) then
   102 dmgBase:= dmgRadius + cHHRadius div 2;*)
   103 dmgBase:= dmgRadius + cHHRadius div 2;*)
   103 dmgBase:= Radius shl 1 + cHHRadius div 2;
   104 dmgBase:= Radius shl 1 + cHHRadius div 2;
   104 fX:= int2hwFloat(X);
   105 fX:= int2hwFloat(X);
   105 fY:= int2hwFloat(Y);
   106 fY:= int2hwFloat(Y);
   106 Gear:= GearsList;
   107 Gear:= GearsList;
       
   108 
       
   109 // we might have to run twice if weWrap is enabled
       
   110 wrap:= false;
       
   111 repeat;
       
   112 
   107 while Gear <> nil do
   113 while Gear <> nil do
   108     begin
   114     begin
   109     dmg:= 0;
   115     dmg:= 0;
   110     //dmg:= dmgRadius  + cHHRadius div 2 - hwRound(Distance(Gear^.X - int2hwFloat(X), Gear^.Y - int2hwFloat(Y)));
   116     //dmg:= dmgRadius  + cHHRadius div 2 - hwRound(Distance(Gear^.X - int2hwFloat(X), Gear^.Y - int2hwFloat(Y)));
   111     //if (dmg > 1) and
   117     //if (dmg > 1) and
   186         if (cnt > 0) and (SpritesData[sprChunk].Texture <> nil) then
   192         if (cnt > 0) and (SpritesData[sprChunk].Texture <> nil) then
   187             for i:= 0 to cnt do
   193             for i:= 0 to cnt do
   188                 AddVisualGear(X, Y, vgtChunk)
   194                 AddVisualGear(X, Y, vgtChunk)
   189         end;
   195         end;
   190 
   196 
       
   197 if (WorldEdge = weWrap) then
       
   198     begin
       
   199     // already wrapped? let's not wrap again!
       
   200     if wrap then
       
   201         break;
       
   202 
       
   203     // Radius + 5 because that's the actual radius the explosion changes graphically
       
   204     if X + (Radius + 5) > LongInt(rightX) then
       
   205         begin
       
   206         dec(X, playWidth);
       
   207         wrap:= true;
       
   208         end
       
   209     else if X - (Radius + 5) < LongInt(leftX) then
       
   210         begin
       
   211         inc(X, playWidth);
       
   212         wrap:= true;
       
   213         end;
       
   214     end;
       
   215 
       
   216 until (not wrap);
       
   217 
   191 uAIMisc.AwareOfExplosion(0, 0, 0)
   218 uAIMisc.AwareOfExplosion(0, 0, 0)
   192 end;
   219 end;
   193 
   220 
   194 function ModifyDamage(dmg: Longword; Gear: PGear): Longword;
   221 function ModifyDamage(dmg: Longword; Gear: PGear): Longword;
   195 var i: hwFloat;
   222 var i: hwFloat;