hedgewars/uVisualGearsList.pas
branchqmlfrontend
changeset 12855 1b2b84315d27
parent 12110 f214d6315b71
child 13040 a87d3119c962
equal deleted inserted replaced
11843:01f88c3b7b66 12855:1b2b84315d27
    34 
    34 
    35 var VGCounter: LongWord;
    35 var VGCounter: LongWord;
    36     VisualGearLayers: array[0..6] of PVisualGear;
    36     VisualGearLayers: array[0..6] of PVisualGear;
    37 
    37 
    38 implementation
    38 implementation
    39 uses uCollisions, uFloat, uVariables, uConsts, uTextures, uVisualGearsHandlers;
    39 uses uCollisions, uFloat, uVariables, uConsts, uTextures, uVisualGearsHandlers, uScript;
    40 
    40 
    41 function AddVisualGear(X, Y: LongInt; Kind: TVisualGearType): PVisualGear; inline;
    41 function AddVisualGear(X, Y: LongInt; Kind: TVisualGearType): PVisualGear; inline;
    42 begin
    42 begin
    43     // adjust some visual gear types if underwater
    43     // adjust some visual gear types if underwater
    44     if CheckCoordInWater(X, Y) and ((Kind = vgtBeeTrace) or (Kind = vgtSmokeTrace) or (Kind = vgtEvilTrace)) then
    44     if CheckCoordInWater(X, Y) and ((Kind = vgtBeeTrace) or (Kind = vgtSmokeTrace) or (Kind = vgtEvilTrace)) then
   228                 Scale:= 0.75;
   228                 Scale:= 0.75;
   229                 Timer:= 1;
   229                 Timer:= 1;
   230                 end;
   230                 end;
   231     vgtDroplet:
   231     vgtDroplet:
   232                 begin
   232                 begin
   233                 dx:= 0.001 * (random(180) - 90);
   233                 // old dx & dy calcs
   234                 dy:= -0.001 * (random(160) + 40);
   234                 // dx:= 0.001 * (random(180) - 90);
       
   235                 // dy:= -0.001 * (random(160) + 40);
       
   236                 // => min speed ~ 0.098, max speed ~ 0.218, speed range ~ 0.120
       
   237                 // => min angle(4096) ~ 129, max angle ~ 1919, angle range ~ 1790
       
   238                 dx:= 0.001 * (98 + random(121)); // speed
       
   239                 Frame:= 129 + random(1791); // angle
       
   240                 dy:= -dx * hwFloat2Float(AngleSin(Frame));
       
   241                 // divide by 2 to create an eliptic shape
       
   242                 dx:=  dx * hwFloat2Float(AngleCos(Frame)) / 2;
   235                 FrameTicks:= 250 + random(1751);
   243                 FrameTicks:= 250 + random(1751);
   236                 Frame:= random(3)
   244                 Frame:= random(3)
   237                 end;
   245                 end;
   238    vgtBeeTrace:
   246    vgtBeeTrace:
   239                 begin
   247                 begin
   339 
   347 
   340 if State <> 0 then
   348 if State <> 0 then
   341     gear^.State:= State;
   349     gear^.State:= State;
   342 
   350 
   343 case Gear^.Kind of
   351 case Gear^.Kind of
   344     vgtFlake: if cFlattenFlakes then
   352     vgtFlake: 
   345         gear^.Layer:= 0
   353               if random(3) = 0 then
   346               else if random(3) = 0 then
       
   347                   begin
   354                   begin
   348                   gear^.Scale:= 0.5;
   355                   gear^.Scale:= 0.5;
   349                   gear^.Layer:= 0   // 33% - far back
   356                   gear^.Layer:= 0   // 33% - far back
   350                   end
   357                   end
   351               else if random(3) = 0 then
   358               else if random(3) = 0 then
   353                   gear^.Scale:= 0.8;
   360                   gear^.Scale:= 0.8;
   354                   gear^.Layer:= 4   // 22% - mid-distance
   361                   gear^.Layer:= 4   // 22% - mid-distance
   355                   end
   362                   end
   356               else if random(3) <> 0 then
   363               else if random(3) <> 0 then
   357                   gear^.Layer:= 5  // 30% - just behind land
   364                   gear^.Layer:= 5  // 30% - just behind land
   358               else if random(2) = 0 then
   365               else if (not cFlattenFlakes) and (random(2) = 0) then
   359                   gear^.Layer:= 6   // 7% - just in front of land
   366                   gear^.Layer:= 6   // 7% - just in front of land
   360               else
   367               else if not cFlattenFlakes then
   361                   begin
   368                   begin
   362                   gear^.Scale:= 1.5;
   369                   gear^.Scale:= 1.5;
   363                   gear^.Layer:= 2;  // 7% - close up
   370                   gear^.Layer:= 2  // 7% - close up
   364                   end;
   371                   end
       
   372               else begin 
       
   373                    gear^.Layer:= 0;
       
   374                    gear^.Scale:= 0.5
       
   375                    end;
   365 
   376 
   366     vgtCloud: if cFlattenClouds then gear^.Layer:= 5
   377     vgtCloud: if cFlattenClouds then gear^.Layer:= 5
   367               else if random(3) = 0 then
   378               else if random(3) = 0 then
   368                   begin
   379                   begin
   369                   gear^.Scale:= 0.25;
   380                   gear^.Scale:= 0.25;
   427     gear^.NextGear:= VisualGearLayers[gear^.Layer]
   438     gear^.NextGear:= VisualGearLayers[gear^.Layer]
   428     end;
   439     end;
   429 VisualGearLayers[gear^.Layer]:= gear;
   440 VisualGearLayers[gear^.Layer]:= gear;
   430 
   441 
   431 AddVisualGear:= gear;
   442 AddVisualGear:= gear;
       
   443 ScriptCall('onVisualGearAdd', gear^.uid);
   432 end;
   444 end;
   433 
   445 
   434 procedure DeleteVisualGear(Gear: PVisualGear);
   446 procedure DeleteVisualGear(Gear: PVisualGear);
   435 begin
   447 begin
       
   448     ScriptCall('onVisualGearDelete', Gear^.uid);
   436     FreeAndNilTexture(Gear^.Tex);
   449     FreeAndNilTexture(Gear^.Tex);
   437 
   450 
   438     if Gear^.NextGear <> nil then
   451     if Gear^.NextGear <> nil then
   439         Gear^.NextGear^.PrevGear:= Gear^.PrevGear;
   452         Gear^.NextGear^.PrevGear:= Gear^.PrevGear;
   440     if Gear^.PrevGear <> nil then
   453     if Gear^.PrevGear <> nil then