hedgewars/uGears.pas
changeset 14 81f125629b25
parent 10 edf56dca1587
child 15 6200cca92480
equal deleted inserted replaced
13:7a5db822fd3f 14:81f125629b25
   105                                                                doStepActionTimer,
   105                                                                doStepActionTimer,
   106                                                                doStepPickHammer,
   106                                                                doStepPickHammer,
   107                                                                doStepRope,
   107                                                                doStepRope,
   108                                                                doStepSmokeTrace,
   108                                                                doStepSmokeTrace,
   109                                                                doStepExplosion,
   109                                                                doStepExplosion,
   110                                                                doStepMine
   110                                                                doStepMine,
       
   111                                                                doStepCase
   111                                                                );
   112                                                                );
   112 
   113 
   113 function AddGear(X, Y: integer; Kind: TGearType; State: Cardinal; const dX: real=0.0; dY: real=0.0; Timer: LongWord=0): PGear;
   114 function AddGear(X, Y: integer; Kind: TGearType; State: Cardinal; const dX: real=0.0; dY: real=0.0; Timer: LongWord=0): PGear;
   114 begin
   115 begin
   115 {$IFDEF DEBUGFILE}AddFileLog('AddGear: ('+inttostr(x)+','+inttostr(y)+')');{$ENDIF}
   116 {$IFDEF DEBUGFILE}AddFileLog('AddGear: ('+inttostr(x)+','+inttostr(y)+')');{$ENDIF}
   191                 Result.HalfWidth:= 3;
   192                 Result.HalfWidth:= 3;
   192                 Result.HalfHeight:= 3;
   193                 Result.HalfHeight:= 3;
   193                 Result.Elasticity:= 0.55;
   194                 Result.Elasticity:= 0.55;
   194                 Result.Friction:= 0.995;
   195                 Result.Friction:= 0.995;
   195                 Result.Timer:= 3000;
   196                 Result.Timer:= 3000;
       
   197                 end;
       
   198         gtCase: begin
       
   199                 Result.HalfWidth:= 10;
       
   200                 Result.HalfHeight:= 10;
       
   201                 Result.Elasticity:= 0.6
   196                 end;
   202                 end;
   197      end;
   203      end;
   198 if GearsList = nil then GearsList:= Result
   204 if GearsList = nil then GearsList:= Result
   199                    else begin
   205                    else begin
   200                    GearsList.PrevGear:= Result;
   206                    GearsList.PrevGear:= Result;
   443                     end;
   449                     end;
   444        gtExplosion: DrawSprite(sprExplosion50, Round(Gear.X) + WorldDx, Round(Gear.Y) + WorldDy, Gear.State, Surface);
   450        gtExplosion: DrawSprite(sprExplosion50, Round(Gear.X) + WorldDx, Round(Gear.Y) + WorldDy, Gear.State, Surface);
   445             gtMine: if ((Gear.State and gstAttacking) = 0)or((Gear.Timer and $3FF) < 420)
   451             gtMine: if ((Gear.State and gstAttacking) = 0)or((Gear.Timer and $3FF) < 420)
   446                        then DrawSprite(sprMineOff , Round(Gear.X) - 8 + WorldDx, Round(Gear.Y) - 8 + WorldDy, trunc(Gear.DirAngle), Surface)
   452                        then DrawSprite(sprMineOff , Round(Gear.X) - 8 + WorldDx, Round(Gear.Y) - 8 + WorldDy, trunc(Gear.DirAngle), Surface)
   447                        else DrawSprite(sprMineOn  , Round(Gear.X) - 8 + WorldDx, Round(Gear.Y) - 8 + WorldDy, trunc(Gear.DirAngle), Surface);
   453                        else DrawSprite(sprMineOn  , Round(Gear.X) - 8 + WorldDx, Round(Gear.Y) - 8 + WorldDy, trunc(Gear.DirAngle), Surface);
       
   454             gtCase: DrawSprite(sprCase, Round(Gear.X) - 12 + WorldDx, Round(Gear.Y) - 12 + WorldDy, 0, Surface);
   448               end;
   455               end;
   449       Gear:= Gear.NextGear
   456       Gear:= Gear.NextGear
   450       end;
   457       end;
   451 end;
   458 end;
   452 
   459 
   468 procedure AddMiscGears;
   475 procedure AddMiscGears;
   469 var i, x, y: integer;
   476 var i, x, y: integer;
   470 begin
   477 begin
   471 for i:= 0 to cCloudsNumber do AddGear( - cScreenWidth + i * ((cScreenWidth * 2 + 2304) div cCloudsNumber), -128, gtCloud, random(4), (0.5-random)*0.01);
   478 for i:= 0 to cCloudsNumber do AddGear( - cScreenWidth + i * ((cScreenWidth * 2 + 2304) div cCloudsNumber), -128, gtCloud, random(4), (0.5-random)*0.01);
   472 AddGear(0, 0, gtActionTimer, gtsStartGame, 0, 0, 2000).Health:= 3;
   479 AddGear(0, 0, gtActionTimer, gtsStartGame, 0, 0, 2000).Health:= 3;
   473 for i:= 0 to 3 do
   480 for i:= 0 to 2 do
   474     begin
   481     begin
   475     GetHHPoint(x, y);
   482     GetHHPoint(x, y);
   476     AddGear(X, Y + 9, gtMine, 0);
   483     AddGear(X, Y + 9, gtMine, 0);
       
   484     end;
       
   485 
       
   486 for i:= 0 to 0 do
       
   487     begin
       
   488     GetHHPoint(x, y);
       
   489     AddGear(X, Y, gtCase, 0)
   477     end;
   490     end;
   478 end;
   491 end;
   479 
   492 
   480 procedure doMakeExplosion(X, Y, Radius: integer; Mask: LongWord);
   493 procedure doMakeExplosion(X, Y, Radius: integer; Mask: LongWord);
   481 var Gear: PGear;
   494 var Gear: PGear;
   495       if dmg > 0 then
   508       if dmg > 0 then
   496          begin
   509          begin
   497          dmg:= dmg shr 1;
   510          dmg:= dmg shr 1;
   498          case Gear.Kind of
   511          case Gear.Kind of
   499               gtHedgehog,
   512               gtHedgehog,
   500                   gtMine: begin
   513                   gtMine,
       
   514                   gtCase: begin
   501                           inc(Gear.Damage, dmg);
   515                           inc(Gear.Damage, dmg);
   502                           Gear.dX:= Gear.dX + dmg / 200 * sign(Gear.X - X);
   516                           Gear.dX:= Gear.dX + dmg / 200 * sign(Gear.X - X);
   503                           Gear.dY:= Gear.dY + dmg / 200 * sign(Gear.Y - Y);
   517                           Gear.dY:= Gear.dY + dmg / 200 * sign(Gear.Y - Y);
   504                           FollowGear:= Gear
   518                           FollowGear:= Gear
   505                           end;
   519                           end;