hedgewars/uVisualGears.pas
changeset 6306 553680d78546
parent 6302 db8bdbb34e03
child 6318 ca12368acc16
equal deleted inserted replaced
6305:5f7480c2a08d 6306:553680d78546
   338 
   338 
   339 case Gear^.Kind of
   339 case Gear^.Kind of
   340     vgtFlake: if cFlattenFlakes then gear^.Layer:= 0
   340     vgtFlake: if cFlattenFlakes then gear^.Layer:= 0
   341               else if random(3) = 0 then gear^.Layer:= 0   // 33% - far back
   341               else if random(3) = 0 then gear^.Layer:= 0   // 33% - far back
   342               else if random(3) = 0 then gear^.Layer:= 4   // 22% - mid-distance
   342               else if random(3) = 0 then gear^.Layer:= 4   // 22% - mid-distance
   343               else if random(2) = 0 then gear^.Layer:= 5   // 22% - just behind land
   343               else if random(3) <> 0 then gear^.Layer:= 5  // 30% - just behind land
   344               else if random(4) = 0 then gear^.Layer:= 6   // 15% - just in front of land
   344               else if random(2) = 0 then gear^.Layer:= 6   // 7% - just in front of land
   345               else gear^.Layer:= 2;  // 7% - close up
   345               else gear^.Layer:= 2;  // 7% - close up
   346 
   346 
   347     vgtCloud: if cFlattenClouds then gear^.Layer:= 5
   347     vgtCloud: if cFlattenClouds then gear^.Layer:= 5
   348               else if random(3) = 0 then gear^.Layer:= 0
   348               else if random(3) = 0 then gear^.Layer:= 0
   349               else gear^.Layer:= random(2) + 4;
   349               else gear^.Layer:= random(2) + 4;
   435 procedure KickFlakes(Radius, X, Y: LongInt);
   435 procedure KickFlakes(Radius, X, Y: LongInt);
   436 var Gear, t: PVisualGear;
   436 var Gear, t: PVisualGear;
   437     dmg, i: LongInt;
   437     dmg, i: LongInt;
   438 begin
   438 begin
   439 if (vobCount = 0) or (vobCount > 200) then exit;
   439 if (vobCount = 0) or (vobCount > 200) then exit;
   440 t:= VisualGearLayers[1];
   440 for i:= 2 to 6 do
   441 while t <> nil do
   441     if i <> 3 then
   442       begin
   442         begin
   443       Gear:= t;
   443         t:= VisualGearLayers[i];
   444       if Gear^.Kind = vgtFlake then
   444         while t <> nil do
   445           begin
       
   446           // Damage calc from doMakeExplosion
       
   447           dmg:= Min(101, Radius + cHHRadius div 2 - LongInt(abs(round(Gear^.X) - X) + abs(round(Gear^.Y) - Y)) div 5);
       
   448           if dmg > 1 then
       
   449               begin
   445               begin
   450               Gear^.tdX:= 0.02 * dmg + 0.01;
   446               Gear:= t;
   451               if Gear^.X - X < 0 then Gear^.tdX := -Gear^.tdX;
   447               if Gear^.Kind = vgtFlake then
   452               Gear^.tdY:= 0.02 * dmg + 0.01;
   448                   begin
   453               if Gear^.Y - Y < 0 then Gear^.tdY := -Gear^.tdY;
   449                   // Damage calc from doMakeExplosion
   454               Gear^.Timer:= 200
   450                   dmg:= Min(101, Radius + cHHRadius div 2 - LongInt(abs(round(Gear^.X) - X) + abs(round(Gear^.Y) - Y)) div 5);
       
   451                   if dmg > 1 then
       
   452                       begin
       
   453                       Gear^.tdX:= 0.02 * dmg + 0.01;
       
   454                       if Gear^.X - X < 0 then Gear^.tdX := -Gear^.tdX;
       
   455                       Gear^.tdY:= 0.02 * dmg + 0.01;
       
   456                       if Gear^.Y - Y < 0 then Gear^.tdY := -Gear^.tdY;
       
   457                       Gear^.Timer:= 200
       
   458                       end
       
   459                   end;
       
   460               t:= Gear^.NextGear
   455               end
   461               end
   456           end;
   462          end
   457       t:= Gear^.NextGear
       
   458       end;
       
   459 for i:= 3 to 6 do
       
   460     begin
       
   461     t:= VisualGearLayers[i];
       
   462     while t <> nil do
       
   463           begin
       
   464           Gear:= t;
       
   465           if Gear^.Kind = vgtFlake then
       
   466               begin
       
   467               // Damage calc from doMakeExplosion
       
   468               dmg:= Min(101, Radius + cHHRadius div 2 - LongInt(abs(round(Gear^.X) - X) + abs(round(Gear^.Y) - Y)) div 5);
       
   469               if dmg > 1 then
       
   470                   begin
       
   471                   Gear^.tdX:= 0.02 * dmg + 0.01;
       
   472                   if Gear^.X - X < 0 then Gear^.tdX := -Gear^.tdX;
       
   473                   Gear^.tdY:= 0.02 * dmg + 0.01;
       
   474                   if Gear^.Y - Y < 0 then Gear^.tdY := -Gear^.tdY;
       
   475                   Gear^.Timer:= 200
       
   476                   end
       
   477               end;
       
   478           t:= Gear^.NextGear
       
   479           end
       
   480      end
       
   481 end;
   463 end;
   482 
   464 
   483 procedure DrawVisualGears(Layer: LongWord);
   465 procedure DrawVisualGears(Layer: LongWord);
   484 var Gear: PVisualGear;
   466 var Gear: PVisualGear;
   485     tinted: boolean;
   467     tinted: boolean;