hedgewars/GSHandlers.inc
changeset 7581 ea509b70e03d
parent 7564 651d56a6e568
child 7589 63d937a764e2
equal deleted inserted replaced
7579:51724c98a74f 7581:ea509b70e03d
  4321             begin
  4321             begin
  4322             iterator^.Elasticity:= iterator^.X;
  4322             iterator^.Elasticity:= iterator^.X;
  4323             iterator^.Friction  := iterator^.Y;
  4323             iterator^.Friction  := iterator^.Y;
  4324             end;
  4324             end;
  4325 
  4325 
  4326         // This jiggles gears, to ensure a portal connection just placed under a gear takes effect.
       
  4327         iterator:= GearsList;
       
  4328         while iterator <> nil do
       
  4329             begin
       
  4330             if (iterator^.Kind <> gtPortal) and ((iterator^.Hedgehog <> CurrentHedgehog)
       
  4331             or ((iterator^.Message and gmAllStoppable) = 0)) then
       
  4332                     begin
       
  4333                     iterator^.Active:= true;
       
  4334                     if iterator^.dY.QWordValue = _0.QWordValue then
       
  4335                         iterator^.dY.isNegative:= false;
       
  4336                     iterator^.State:= iterator^.State or gstMoving;
       
  4337                     DeleteCI(iterator);
       
  4338                 //inc(iterator^.dY.QWordValue,10);
       
  4339                     end;
       
  4340             iterator:= iterator^.NextGear
       
  4341             end;
       
  4342 
       
  4343         if Gear^.Health > 1 then
  4326         if Gear^.Health > 1 then
  4344             dec(Gear^.Health);
  4327             dec(Gear^.Health);
  4345     end;
  4328     end;
  4346 end;
  4329 end;
  4347 
  4330 
  4466             if (CurWeapon <> nil) and (CurAmmoType = amPortalGun) then
  4449             if (CurWeapon <> nil) and (CurAmmoType = amPortalGun) then
  4467                 CurWeapon^.Timer := CurWeapon^.Timer or 2;
  4450                 CurWeapon^.Timer := CurWeapon^.Timer or 2;
  4468 
  4451 
  4469             iterator := GearsList;
  4452             iterator := GearsList;
  4470             while iterator <> nil do
  4453             while iterator <> nil do
  4471             begin
  4454                 begin
  4472                 if (iterator^.Kind = gtPortal) then
  4455                 if (iterator^.Kind = gtPortal) then
  4473                     if (iterator <> newPortal) and (iterator^.Timer > 0) and (iterator^.Hedgehog = CurrentHedgehog) then
  4456                     if (iterator <> newPortal) and (iterator^.Timer > 0) and (iterator^.Hedgehog = CurrentHedgehog) then
  4474                         begin
  4457                         begin
  4475                         if ((iterator^.Tag and 2) = (newPortal^.Tag and 2)) then
  4458                         if ((iterator^.Tag and 2) = (newPortal^.Tag and 2)) then
  4476                             begin
  4459                             begin
  4484                             iterator^.Health := newPortal^.Health;
  4467                             iterator^.Health := newPortal^.Health;
  4485                             end;
  4468                             end;
  4486                         end;
  4469                         end;
  4487                 iterator^.PortalCounter:= 0;
  4470                 iterator^.PortalCounter:= 0;
  4488                 iterator := iterator^.NextGear
  4471                 iterator := iterator^.NextGear
  4489             end;
  4472                 end;
       
  4473 
       
  4474             if newPortal^.LinkedGear <> nil then
       
  4475                 begin
       
  4476                 // This jiggles gears, to ensure a portal connection just placed under a gear takes effect.
       
  4477                 iterator:= GearsList;
       
  4478                 while iterator <> nil do
       
  4479                     begin
       
  4480                     if not (iterator^.Kind in [gtPortal, gtAirAttack]) and ((iterator^.Hedgehog <> CurrentHedgehog)
       
  4481                     or ((iterator^.Message and gmAllStoppable) = 0)) then
       
  4482                             begin
       
  4483                             iterator^.Active:= true;
       
  4484                             if iterator^.dY.QWordValue = _0.QWordValue then
       
  4485                                 iterator^.dY.isNegative:= false;
       
  4486                             iterator^.State:= iterator^.State or gstMoving;
       
  4487                             DeleteCI(iterator);
       
  4488                         //inc(iterator^.dY.QWordValue,10);
       
  4489                             end;
       
  4490                     iterator:= iterator^.NextGear
       
  4491                     end
       
  4492                 end
  4490             end;
  4493             end;
  4491     newPortal^.State := newPortal^.State and (not gstCollision);
  4494     newPortal^.State := newPortal^.State and (not gstCollision);
  4492     newPortal^.State := newPortal^.State or gstMoving;
  4495     newPortal^.State := newPortal^.State or gstMoving;
  4493     newPortal^.doStep := @doStepMovingPortal;
  4496     newPortal^.doStep := @doStepMovingPortal;
  4494 end;
  4497 end;