hedgewars/uGearsHandlersMess.pas
changeset 10874 059a6492176e
parent 10831 19d056c10bbd
child 10875 67b92a09cded
equal deleted inserted replaced
10873:84c00d1127d6 10874:059a6492176e
  3138     Gear^.doStep := @doStepKamikazeIdle
  3138     Gear^.doStep := @doStepKamikazeIdle
  3139 end;
  3139 end;
  3140 
  3140 
  3141 ////////////////////////////////////////////////////////////////////////////////
  3141 ////////////////////////////////////////////////////////////////////////////////
  3142 
  3142 
  3143 const cakeh =   27;
       
  3144 var
       
  3145     CakePoints: array[0..Pred(cakeh)] of record
       
  3146         x, y: hwFloat;
       
  3147     end;
       
  3148     CakeI: Longword;
       
  3149 
       
  3150 procedure doStepCakeExpl(Gear: PGear);
  3143 procedure doStepCakeExpl(Gear: PGear);
  3151 begin
  3144 begin
  3152     AllInactive := false;
  3145     AllInactive := false;
  3153 
  3146 
  3154     inc(Gear^.Tag);
  3147     inc(Gear^.Tag);
  3211 
  3204 
  3212 
  3205 
  3213 procedure doStepCakeWork(Gear: PGear);
  3206 procedure doStepCakeWork(Gear: PGear);
  3214 var
  3207 var
  3215     tdx, tdy: hwFloat;
  3208     tdx, tdy: hwFloat;
       
  3209     cakeData: PCakeData;
  3216 begin
  3210 begin
  3217     AllInactive := false;
  3211     AllInactive := false;
  3218 
  3212 
  3219     inc(Gear^.Tag);
  3213     inc(Gear^.Tag);
  3220     if Gear^.Tag < 7 then
  3214     if Gear^.Tag < 7 then
  3235 
  3229 
  3236     if not cakeStep(Gear) then Gear^.doStep:= @doStepCakeFall;
  3230     if not cakeStep(Gear) then Gear^.doStep:= @doStepCakeFall;
  3237 
  3231 
  3238     if Gear^.Tag = 0 then
  3232     if Gear^.Tag = 0 then
  3239         begin
  3233         begin
  3240         CakeI := (CakeI + 1) mod cakeh;
  3234         cakeData:= PCakeData(Gear^.Data);
  3241         tdx := CakePoints[CakeI].x - Gear^.X;
  3235         with cakeData^ do
  3242         tdy := - CakePoints[CakeI].y + Gear^.Y;
  3236             begin
  3243         CakePoints[CakeI].x := Gear^.X;
  3237             CakeI := (CakeI + 1) mod cakeh;
  3244         CakePoints[CakeI].y := Gear^.Y;
  3238             tdx := CakePoints[CakeI].x - Gear^.X;
  3245         Gear^.DirAngle := DxDy2Angle(tdx, tdy);
  3239             tdy := - CakePoints[CakeI].y + Gear^.Y;
       
  3240             CakePoints[CakeI].x := Gear^.X;
       
  3241             CakePoints[CakeI].y := Gear^.Y;
       
  3242             Gear^.DirAngle := DxDy2Angle(tdx, tdy);
       
  3243             end;
  3246         end;
  3244         end;
  3247 end;
  3245 end;
  3248 
  3246 
  3249 procedure doStepCakeUp(Gear: PGear);
  3247 procedure doStepCakeUp(Gear: PGear);
  3250 var
  3248 var
  3251     i: Longword;
  3249     i: Longword;
       
  3250     cakeData: PCakeData;
  3252 begin
  3251 begin
  3253     AllInactive := false;
  3252     AllInactive := false;
  3254 
  3253 
  3255     inc(Gear^.Tag);
  3254     inc(Gear^.Tag);
  3256     if Gear^.Tag < 100 then
  3255     if Gear^.Tag < 100 then
  3257         exit;
  3256         exit;
  3258     Gear^.Tag := 0;
  3257     Gear^.Tag := 0;
  3259 
  3258 
  3260     if Gear^.Pos = 6 then
  3259     if Gear^.Pos = 6 then
  3261         begin
  3260         begin
  3262         for i:= 0 to Pred(cakeh) do
  3261         cakeData:= PCakeData(Gear^.Data);
  3263             begin
  3262         with cakeData^ do
  3264             CakePoints[i].x := Gear^.X;
  3263             begin
  3265             CakePoints[i].y := Gear^.Y
  3264             for i:= 0 to Pred(cakeh) do
  3266             end;
  3265                 begin
  3267         CakeI := 0;
  3266                 CakePoints[i].x := Gear^.X;
       
  3267                 CakePoints[i].y := Gear^.Y
       
  3268                 end;
       
  3269             CakeI := 0;
       
  3270             end;
  3268         Gear^.doStep := @doStepCakeWork
  3271         Gear^.doStep := @doStepCakeWork
  3269         end
  3272         end
  3270     else
  3273     else
  3271         inc(Gear^.Pos)
  3274         inc(Gear^.Pos)
  3272 end;
  3275 end;