536 const uw: boolean = false; |
536 const uw: boolean = false; |
537 begin |
537 begin |
538 AllInactive := false; |
538 AllInactive := false; |
539 gX := hwRound(Gear^.X); |
539 gX := hwRound(Gear^.X); |
540 gY := hwRound(Gear^.Y); |
540 gY := hwRound(Gear^.Y); |
541 nuw := (cWaterLine < hwRound(Gear^.Y) + Gear^.Radius); |
541 nuw := (cWaterLine < gy + Gear^.Radius); |
542 if nuw and not uw then |
542 if nuw and not uw then |
543 begin |
543 begin |
544 AddVisualGear(gX, cWaterLine, vgtSplash); |
544 AddVisualGear(gX, cWaterLine, vgtSplash); |
545 AddVisualGear(gX - 3 + Random(6), cWaterLine, vgtDroplet); |
545 AddVisualGear(gX - 3 + Random(6), cWaterLine, vgtDroplet); |
546 AddVisualGear(gX - 3 + Random(6), cWaterLine, vgtDroplet); |
546 AddVisualGear(gX - 3 + Random(6), cWaterLine, vgtDroplet); |
557 Gear^.SoundChannel := LoopSound(sndBee); |
557 Gear^.SoundChannel := LoopSound(sndBee); |
558 uw := nuw |
558 uw := nuw |
559 end; |
559 end; |
560 |
560 |
561 |
561 |
562 t := Distance(Gear^.dX, Gear^.dY); |
562 if (GameTicks and $F) = 0 then |
563 Gear^.dX := Gear^.Elasticity * (Gear^.dX + _0_000004 * (TargetPoint.X - gX)); |
563 begin |
564 Gear^.dY := Gear^.Elasticity * (Gear^.dY + _0_000004 * (TargetPoint.Y - gY)); |
564 if (GameTicks and $30) = 0 then |
565 |
565 AddVisualGear(gX, gY, vgtBeeTrace); |
566 t := t / Distance(Gear^.dX, Gear^.dY); |
566 Gear^.dX := Gear^.Elasticity * (Gear^.dX + _0_000064 * (TargetPoint.X - gX)); |
567 Gear^.dX := Gear^.dX * t; |
567 Gear^.dY := Gear^.Elasticity * (Gear^.dY + _0_000064 * (TargetPoint.Y - gY)); |
568 Gear^.dY := Gear^.dY * t; |
568 // make sure new speed isn't higher than original one (which we stored in Friction variable) |
|
569 t := Gear^.Friction / Distance(Gear^.dX, Gear^.dY); |
|
570 Gear^.dX := Gear^.dX * t; |
|
571 Gear^.dY := Gear^.dY * t; |
|
572 end; |
|
573 |
569 Gear^.X := Gear^.X + Gear^.dX; |
574 Gear^.X := Gear^.X + Gear^.dX; |
570 Gear^.Y := Gear^.Y + Gear^.dY; |
575 Gear^.Y := Gear^.Y + Gear^.dY; |
571 |
|
572 if (GameTicks and $3F) = 0 then |
|
573 begin |
|
574 AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtBeeTrace); |
|
575 end; |
|
576 |
576 |
577 CheckCollision(Gear); |
577 CheckCollision(Gear); |
578 dec(Gear^.Timer); |
578 dec(Gear^.Timer); |
579 if ((Gear^.State and gstCollision) <> 0) or (Gear^.Timer = 0) then |
579 if ((Gear^.State and gstCollision) <> 0) or (Gear^.Timer = 0) then |
580 begin |
580 begin |
600 dec(Gear^.Timer); |
600 dec(Gear^.Timer); |
601 if Gear^.Timer = 0 then |
601 if Gear^.Timer = 0 then |
602 begin |
602 begin |
603 Gear^.SoundChannel := LoopSound(sndBee); |
603 Gear^.SoundChannel := LoopSound(sndBee); |
604 Gear^.Timer := 5000; |
604 Gear^.Timer := 5000; |
|
605 // save initial speed in otherwise unused Friction variable |
|
606 Gear^.Friction := Distance(Gear^.dX, Gear^.dY); |
605 Gear^.doStep := @doStepBeeWork |
607 Gear^.doStep := @doStepBeeWork |
606 end; |
608 end; |
607 end; |
609 end; |
608 |
610 |
609 //////////////////////////////////////////////////////////////////////////////// |
611 //////////////////////////////////////////////////////////////////////////////// |