hedgewars/uGearsUtils.pas
changeset 7719 eeae1cb6b6bf
parent 7627 e1e112687fd6
child 7721 2b1ad418ba39
equal deleted inserted replaced
7718:97ba379164ec 7719:eeae1cb6b6bf
    38 
    38 
    39 function  CheckGearNear(Gear: PGear; Kind: TGearType; rX, rY: LongInt): PGear;
    39 function  CheckGearNear(Gear: PGear; Kind: TGearType; rX, rY: LongInt): PGear;
    40 function  CheckGearDrowning(Gear: PGear): boolean;
    40 function  CheckGearDrowning(Gear: PGear): boolean;
    41 procedure CheckCollision(Gear: PGear); inline;
    41 procedure CheckCollision(Gear: PGear); inline;
    42 procedure CheckCollisionWithLand(Gear: PGear); inline;
    42 procedure CheckCollisionWithLand(Gear: PGear); inline;
       
    43 
       
    44 function MakeHedgehogsStep(Gear: PGear) : boolean;
    43 
    45 
    44 var doStepHandlers: array[TGearType] of TGearStepProcedure;
    46 var doStepHandlers: array[TGearType] of TGearStepProcedure;
    45 
    47 
    46 
    48 
    47 implementation
    49 implementation
   680         Gear^.State := Gear^.State or gstCollision
   682         Gear^.State := Gear^.State or gstCollision
   681     else 
   683     else 
   682         Gear^.State := Gear^.State and (not gstCollision)
   684         Gear^.State := Gear^.State and (not gstCollision)
   683 end;
   685 end;
   684 
   686 
       
   687 function MakeHedgehogsStep(Gear: PGear) : boolean;
       
   688 begin
       
   689     if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then if (TestCollisionYwithGear(Gear, -1) = 0) then
       
   690         begin
       
   691         Gear^.Y:= Gear^.Y - _1;
       
   692     if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then if (TestCollisionYwithGear(Gear, -1) = 0) then
       
   693         begin
       
   694         Gear^.Y:= Gear^.Y - _1;
       
   695     if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then if (TestCollisionYwithGear(Gear, -1) = 0) then
       
   696         begin
       
   697         Gear^.Y:= Gear^.Y - _1;
       
   698     if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then if (TestCollisionYwithGear(Gear, -1) = 0) then
       
   699         begin
       
   700         Gear^.Y:= Gear^.Y - _1;
       
   701     if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then if (TestCollisionYwithGear(Gear, -1) = 0) then
       
   702         begin
       
   703         Gear^.Y:= Gear^.Y - _1;
       
   704     if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then if (TestCollisionYwithGear(Gear, -1) = 0) then
       
   705         begin
       
   706         Gear^.Y:= Gear^.Y - _1;
       
   707         if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then
       
   708             Gear^.Y:= Gear^.Y + _6
       
   709         end else Gear^.Y:= Gear^.Y + _5 else
       
   710         end else Gear^.Y:= Gear^.Y + _4 else
       
   711         end else Gear^.Y:= Gear^.Y + _3 else
       
   712         end else Gear^.Y:= Gear^.Y + _2 else
       
   713         end else Gear^.Y:= Gear^.Y + _1
       
   714         end;
       
   715 
       
   716     if not TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then
       
   717         begin
       
   718         Gear^.X:= Gear^.X + SignAs(_1, Gear^.dX);
       
   719         MakeHedgehogsStep:= true
       
   720         end else
       
   721         MakeHedgehogsStep:= false;
       
   722 
       
   723     if TestCollisionYwithGear(Gear, 1) = 0 then
       
   724         begin
       
   725         Gear^.Y:= Gear^.Y + _1;
       
   726     if TestCollisionYwithGear(Gear, 1) = 0 then
       
   727         begin
       
   728         Gear^.Y:= Gear^.Y + _1;
       
   729     if TestCollisionYwithGear(Gear, 1) = 0 then
       
   730         begin
       
   731         Gear^.Y:= Gear^.Y + _1;
       
   732     if TestCollisionYwithGear(Gear, 1) = 0 then
       
   733         begin
       
   734         Gear^.Y:= Gear^.Y + _1;
       
   735     if TestCollisionYwithGear(Gear, 1) = 0 then
       
   736         begin
       
   737         Gear^.Y:= Gear^.Y + _1;
       
   738     if TestCollisionYwithGear(Gear, 1) = 0 then
       
   739         begin
       
   740         Gear^.Y:= Gear^.Y + _1;
       
   741     if TestCollisionYwithGear(Gear, 1) = 0 then
       
   742         begin
       
   743         Gear^.Y:= Gear^.Y - _6;
       
   744         Gear^.dY:= _0;
       
   745         Gear^.State:= Gear^.State or gstMoving;
       
   746         exit
       
   747         end;
       
   748         end
       
   749         end
       
   750         end
       
   751         end
       
   752         end
       
   753         end;
       
   754 end;
       
   755 
   685 end.
   756 end.