hedgewars/uVisualGears.pas
changeset 1041 362b95d49cf4
parent 945 4ead9cde4e14
child 1045 ea195268734f
equal deleted inserted replaced
1040:ab4c0fa893a2 1041:362b95d49cf4
    39              end;
    39              end;
    40 
    40 
    41 function  AddVisualGear(X, Y: LongInt; Kind: TVisualGearType): PVisualGear;
    41 function  AddVisualGear(X, Y: LongInt; Kind: TVisualGearType): PVisualGear;
    42 procedure ProcessVisualGears(Steps: Longword);
    42 procedure ProcessVisualGears(Steps: Longword);
    43 procedure DrawVisualGears();
    43 procedure DrawVisualGears();
       
    44 procedure DeleteVisualGear(Gear: PVisualGear);
    44 procedure AddClouds;
    45 procedure AddClouds;
    45 
    46 
    46 var VisualGearsList: PVisualGear = nil;
    47 var VisualGearsList: PVisualGear = nil;
    47     vobFrameTicks, vobFramesCount: Longword;
    48     vobFrameTicks, vobFramesCount: Longword;
    48     vobVelocity, vobFallSpeed: LongInt;
    49     vobVelocity, vobFallSpeed: LongInt;
    83 
    84 
    84 if hwRound(Gear^.X) < -cScreenWidth - 256 then Gear^.X:= int2hwFloat(cScreenWidth + 2048) else
    85 if hwRound(Gear^.X) < -cScreenWidth - 256 then Gear^.X:= int2hwFloat(cScreenWidth + 2048) else
    85 if hwRound(Gear^.X) > cScreenWidth + 2048 then Gear^.X:= int2hwFloat(-cScreenWidth - 256)
    86 if hwRound(Gear^.X) > cScreenWidth + 2048 then Gear^.X:= int2hwFloat(-cScreenWidth - 256)
    86 end;
    87 end;
    87 
    88 
       
    89 procedure doStepExpl(Gear: PVisualGear; Steps: Longword);
       
    90 begin
       
    91 Gear^.X:= Gear^.X + Gear^.dX;
       
    92 
       
    93 Gear^.Y:= Gear^.Y + Gear^.dY;
       
    94 Gear^.dY:= Gear^.dY + cGravity;
       
    95 
       
    96 dec(Gear^.FrameTicks);
       
    97 if Gear^.FrameTicks = 0 then DeleteVisualGear(Gear)
       
    98 end;
       
    99 
    88 // ==================================================================
   100 // ==================================================================
    89 const doStepHandlers: array[TVisualGearType] of TVGearStepProcedure =
   101 const doStepHandlers: array[TVisualGearType] of TVGearStepProcedure =
    90                         (
   102                         (
    91                           @doStepFlake,
   103                           @doStepFlake,
    92                           @doStepCloud
   104                           @doStepCloud,
       
   105                           @doStepExpl
    93                         );
   106                         );
    94 
   107 
    95 function  AddVisualGear(X, Y: LongInt; Kind: TVisualGearType): PVisualGear;
   108 function  AddVisualGear(X, Y: LongInt; Kind: TVisualGearType): PVisualGear;
    96 var Result: PVisualGear;
   109 var Result: PVisualGear;
    97 begin
   110 begin
   121                dx.QWordValue:= random(214748364);
   134                dx.QWordValue:= random(214748364);
   122                dy.isNegative:= random(2) = 0;
   135                dy.isNegative:= random(2) = 0;
   123                dy.QWordValue:= 21474836 + random(64424509);
   136                dy.QWordValue:= 21474836 + random(64424509);
   124                mdY:= dy.QWordValue
   137                mdY:= dy.QWordValue
   125                end;
   138                end;
       
   139   vgtExplPart: with Result^ do
       
   140                begin
       
   141                dx.isNegative:= random(2) = 0;
       
   142                dx.QWordValue:= random(300000) + 1000000;
       
   143                dy.isNegative:= random(2) = 0;
       
   144                dy.QWordValue:= random(300000) + 1000000;
       
   145                FrameTicks:= 700
       
   146                end;
   126      end;
   147      end;
   127 
   148 
   128 if VisualGearsList <> nil then
   149 if VisualGearsList <> nil then
   129    begin
   150    begin
   130    VisualGearsList^.PrevGear:= Result;
   151    VisualGearsList^.PrevGear:= Result;
   133 VisualGearsList:= Result;
   154 VisualGearsList:= Result;
   134 
   155 
   135 AddVisualGear:= Result
   156 AddVisualGear:= Result
   136 end;
   157 end;
   137 
   158 
       
   159 procedure DeleteVisualGear(Gear: PVisualGear);
       
   160 begin
       
   161 if Gear^.NextGear <> nil then Gear^.NextGear^.PrevGear:= Gear^.PrevGear;
       
   162 if Gear^.PrevGear <> nil then Gear^.PrevGear^.NextGear:= Gear^.NextGear
       
   163    else VisualGearsList:= Gear^.NextGear;
       
   164 
       
   165 Dispose(Gear)
       
   166 end;
   138 
   167 
   139 procedure ProcessVisualGears(Steps: Longword);
   168 procedure ProcessVisualGears(Steps: Longword);
   140 var Gear, t: PVisualGear;
   169 var Gear, t: PVisualGear;
   141 begin
   170 begin
   142 if Steps = 0 then exit;
   171 if Steps = 0 then exit;