hedgewars/GSHandlers.inc
changeset 1089 24e9e1ca0394
parent 1088 9702e17146e6
child 1090 c4ff49d0fe9b
equal deleted inserted replaced
1088:9702e17146e6 1089:24e9e1ca0394
  1479 Gear^.Timer:= 550;
  1479 Gear^.Timer:= 550;
  1480 
  1480 
  1481 Gear^.doStep:= @doStepKamikazeIdle
  1481 Gear^.doStep:= @doStepKamikazeIdle
  1482 end;
  1482 end;
  1483 
  1483 
  1484 procedure doStepSpider(Gear: PGear);
  1484 procedure doStepCakeWork(Gear: PGear);
  1485 begin
  1485 const dirs: array[0..3] of TPoint = ((x: 0; y: -1), (x: 1; y: 0),(x: 0; y: 1),(x: -1; y: 0));
  1486 AfterAttack;
  1486 var xx, yy, xxn, yyn: LongInt;
  1487 DeleteGear(Gear);
  1487 	da: LongInt;
  1488 end;
  1488 
       
  1489 	procedure PrevAngle;
       
  1490 	begin
       
  1491 	Gear^.Angle:= (Gear^.Angle + 4 - dA) mod 4
       
  1492 	end;
       
  1493 	
       
  1494 	procedure NextAngle;
       
  1495 	begin
       
  1496 	Gear^.Angle:= (Gear^.Angle + 4 + dA) mod 4
       
  1497 	end;
       
  1498 	
       
  1499 begin
       
  1500 inc(Gear^.Tag);
       
  1501 if Gear^.Tag < 5 then exit;
       
  1502 
       
  1503 
       
  1504 dA:= hwSign(Gear^.dX);
       
  1505 xx:= dirs[Gear^.Angle].x;
       
  1506 yy:= dirs[Gear^.Angle].y;
       
  1507 xxn:= dirs[(Gear^.Angle + 4 + dA) mod 4].x;
       
  1508 yyn:= dirs[(Gear^.Angle + 4 + dA) mod 4].y;
       
  1509 
       
  1510 
       
  1511 if (xx = 0) then
       
  1512 	if TestCollisionYwithGear(Gear, yy) then
       
  1513 		PrevAngle
       
  1514 	else begin
       
  1515 		Gear^.Tag:= 0;
       
  1516 		Gear^.Y:= Gear^.Y + int2hwFloat(yy);
       
  1517 		if not TestCollisionXwithGear(Gear, xxn) then NextAngle
       
  1518 		end;
       
  1519 
       
  1520 if (yy = 0) then
       
  1521 	if TestCollisionXwithGear(Gear, xx) then
       
  1522 		PrevAngle
       
  1523 	else begin
       
  1524 		Gear^.Tag:= 0;
       
  1525 		Gear^.X:= Gear^.X + int2hwFloat(xx);
       
  1526 		if not TestCollisionYwithGear(Gear, yyn) then NextAngle
       
  1527 		end;
       
  1528 
       
  1529 dec(Gear^.Health);
       
  1530 if Gear^.Health = 0 then
       
  1531 	begin
       
  1532 	doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 75, EXPLAutoSound);
       
  1533 	AfterAttack;
       
  1534 	DeleteGear(Gear)
       
  1535 	end
       
  1536 end;
       
  1537 
       
  1538 procedure doStepCakeFall(Gear: PGear);
       
  1539 begin
       
  1540 AllInactive:= false;
       
  1541 
       
  1542 Gear^.dY:= Gear^.dY + cGravity;
       
  1543 if TestCollisionYwithGear(Gear, 1) then
       
  1544 	Gear^.doStep:= @doStepCakeWork
       
  1545 else
       
  1546 	begin
       
  1547 	Gear^.Y:= Gear^.Y + Gear^.dY;
       
  1548 	if CheckGearDrowning(Gear) then AfterAttack
       
  1549 	end
       
  1550 end;
       
  1551 
       
  1552 procedure doStepCake(Gear: PGear);
       
  1553 var HHGear: PGear;
       
  1554 begin
       
  1555 AllInactive:= false;
       
  1556 
       
  1557 HHGear:= PHedgehog(Gear^.Hedgehog)^.Gear;
       
  1558 DeleteCI(HHGear);
       
  1559 
       
  1560 Gear^.doStep:= @doStepCakeFall
       
  1561 end;
       
  1562