equal
deleted
inserted
replaced
22 * Since the effects of visual gears do not affect the course of the game, |
22 * Since the effects of visual gears do not affect the course of the game, |
23 * no "synchronization" between players is required. |
23 * no "synchronization" between players is required. |
24 * => The usage of safe functions or data types (e.g. GetRandom() or hwFloat) |
24 * => The usage of safe functions or data types (e.g. GetRandom() or hwFloat) |
25 * is usually not necessary and therefore undesirable. |
25 * is usually not necessary and therefore undesirable. |
26 *) |
26 *) |
27 |
27 |
28 {$INCLUDE "options.inc"} |
28 {$INCLUDE "options.inc"} |
29 |
29 |
30 unit uVisualGearsHandlers; |
30 unit uVisualGearsHandlers; |
31 |
31 |
32 interface |
32 interface |
33 uses uTypes; |
33 uses uTypes; |
34 |
34 |
35 var doStepHandlers: array[TVisualGearType] of TVGearStepProcedure; |
35 var doStepVGHandlers: array[TVisualGearType] of TVGearStepProcedure; |
36 |
36 |
37 procedure doStepFlake(Gear: PVisualGear; Steps: Longword); |
37 procedure doStepFlake(Gear: PVisualGear; Steps: Longword); |
38 procedure doStepBeeTrace(Gear: PVisualGear; Steps: Longword); |
38 procedure doStepBeeTrace(Gear: PVisualGear; Steps: Longword); |
39 procedure doStepCloud(Gear: PVisualGear; Steps: Longword); |
39 procedure doStepCloud(Gear: PVisualGear; Steps: Longword); |
40 procedure doStepExpl(Gear: PVisualGear; Steps: Longword); |
40 procedure doStepExpl(Gear: PVisualGear; Steps: Longword); |
110 if Angle > 360 then |
110 if Angle > 360 then |
111 Angle:= Angle - 360 |
111 Angle:= Angle - 360 |
112 else |
112 else |
113 if Angle < - 360 then |
113 if Angle < - 360 then |
114 Angle:= Angle + 360; |
114 Angle:= Angle + 360; |
115 |
115 |
116 |
116 |
117 if (round(X) >= cLeftScreenBorder) |
117 if (round(X) >= cLeftScreenBorder) |
118 and (round(X) <= cRightScreenBorder) |
118 and (round(X) <= cRightScreenBorder) |
119 and (round(Y) - 75 <= LAND_HEIGHT) |
119 and (round(Y) - 75 <= LAND_HEIGHT) |
120 and (Timer > 0) and (Timer-Steps > 0) then |
120 and (Timer > 0) and (Timer-Steps > 0) then |
121 begin |
121 begin |
247 end; |
247 end; |
248 |
248 |
249 //////////////////////////////////////////////////////////////////////////////// |
249 //////////////////////////////////////////////////////////////////////////////// |
250 procedure doStepLineTrail(Gear: PVisualGear; Steps: Longword); |
250 procedure doStepLineTrail(Gear: PVisualGear; Steps: Longword); |
251 begin |
251 begin |
|
252 {$IFNDEF PAS2C} |
252 Steps := Steps; |
253 Steps := Steps; |
|
254 {$ENDIF} |
253 if Gear^.Timer <= Steps then |
255 if Gear^.Timer <= Steps then |
254 DeleteVisualGear(Gear) |
256 DeleteVisualGear(Gear) |
255 else |
257 else |
256 dec(Gear^.Timer, Steps) |
258 dec(Gear^.Timer, Steps) |
257 end; |
259 end; |
526 procedure doStepTeamHealthSorter(Gear: PVisualGear; Steps: Longword); |
528 procedure doStepTeamHealthSorter(Gear: PVisualGear; Steps: Longword); |
527 var i: Longword; |
529 var i: Longword; |
528 b: boolean; |
530 b: boolean; |
529 t, h: LongInt; |
531 t, h: LongInt; |
530 begin |
532 begin |
|
533 {$IFNDEF PAS2C} |
531 Steps:= Steps; // avoid compiler hint |
534 Steps:= Steps; // avoid compiler hint |
|
535 {$ENDIF} |
532 |
536 |
533 for t:= 0 to Pred(TeamsCount) do |
537 for t:= 0 to Pred(TeamsCount) do |
534 with thexchar[t] do |
538 with thexchar[t] do |
535 begin |
539 begin |
536 team:= TeamsArray[t]; |
540 team:= TeamsArray[t]; |
600 end; |
604 end; |
601 end; |
605 end; |
602 |
606 |
603 procedure doStepSpeechBubble(Gear: PVisualGear; Steps: Longword); |
607 procedure doStepSpeechBubble(Gear: PVisualGear; Steps: Longword); |
604 begin |
608 begin |
|
609 |
|
610 {$IFNDEF PAS2C} |
605 Steps:= Steps; // avoid compiler hint |
611 Steps:= Steps; // avoid compiler hint |
|
612 {$ENDIF} |
606 |
613 |
607 with Gear^.Hedgehog^ do |
614 with Gear^.Hedgehog^ do |
608 if SpeechGear <> nil then |
615 if SpeechGear <> nil then |
609 SpeechGear^.Timer:= 0; |
616 SpeechGear^.Timer:= 0; |
610 |
617 |
706 gX,gY: LongInt; |
713 gX,gY: LongInt; |
707 vg: PVisualGear; |
714 vg: PVisualGear; |
708 begin |
715 begin |
709 gX:= round(Gear^.X); |
716 gX:= round(Gear^.X); |
710 gY:= round(Gear^.Y); |
717 gY:= round(Gear^.Y); |
711 for i:= 0 to 31 do |
718 for i:= 0 to 31 do |
712 begin |
719 begin |
713 vg:= AddVisualGear(gX, gY, vgtFire); |
720 vg:= AddVisualGear(gX, gY, vgtFire); |
714 if vg <> nil then |
721 if vg <> nil then |
715 begin |
722 begin |
716 vg^.State:= gstTmpFlag; |
723 vg^.State:= gstTmpFlag; |
717 inc(vg^.FrameTicks, vg^.FrameTicks) |
724 inc(vg^.FrameTicks, vg^.FrameTicks) |
718 end |
725 end |
719 end; |
726 end; |
750 //ScreenFadeValue:= round(60 * zoom * zoom); |
757 //ScreenFadeValue:= round(60 * zoom * zoom); |
751 //ScreenFadeSpeed:= 5; |
758 //ScreenFadeSpeed:= 5; |
752 gX:= round(Gear^.X); |
759 gX:= round(Gear^.X); |
753 gY:= round(Gear^.Y); |
760 gY:= round(Gear^.Y); |
754 AddVisualGear(gX, gY, vgtSmokeRing); |
761 AddVisualGear(gX, gY, vgtSmokeRing); |
755 for i:= 0 to 46 do |
762 for i:= 0 to 46 do |
756 begin |
763 begin |
757 vg:= AddVisualGear(gX, gY, vgtFire); |
764 vg:= AddVisualGear(gX, gY, vgtFire); |
758 if vg <> nil then |
765 if vg <> nil then |
759 begin |
766 begin |
760 vg^.State:= gstTmpFlag; |
767 vg^.State:= gstTmpFlag; |
761 inc(vg^.FrameTicks, vg^.FrameTicks) |
768 inc(vg^.FrameTicks, vg^.FrameTicks) |
762 end |
769 end |
763 end; |
770 end; |
766 for i:= 0 to 15 do |
773 for i:= 0 to 15 do |
767 AddVisualGear(gX, gY, vgtExplPart2); |
774 AddVisualGear(gX, gY, vgtExplPart2); |
768 Gear^.doStep:= @doStepBigExplosionWork; |
775 Gear^.doStep:= @doStepBigExplosionWork; |
769 if Steps > 1 then |
776 if Steps > 1 then |
770 Gear^.doStep(Gear, Steps-1); |
777 Gear^.doStep(Gear, Steps-1); |
|
778 |
|
779 {$IFNDEF PAS2C} |
771 with mobileRecord do |
780 with mobileRecord do |
772 if (performRumble <> nil) and (not fastUntilLag) then |
781 if (performRumble <> nil) and (not fastUntilLag) then |
773 performRumble(kSystemSoundID_Vibrate); |
782 performRumble(kSystemSoundID_Vibrate); |
|
783 {$ENDIF} |
774 end; |
784 end; |
775 |
785 |
776 procedure doStepChunk(Gear: PVisualGear; Steps: Longword); |
786 procedure doStepChunk(Gear: PVisualGear; Steps: Longword); |
777 begin |
787 begin |
778 Gear^.X:= Gear^.X + Gear^.dX * Steps; |
788 Gear^.X:= Gear^.X + Gear^.dX * Steps; |
830 |
840 |
831 //////////////////////////////////////////////////////////////////////////////// |
841 //////////////////////////////////////////////////////////////////////////////// |
832 procedure doStepSmoothWindBar(Gear: PVisualGear; Steps: Longword); |
842 procedure doStepSmoothWindBar(Gear: PVisualGear; Steps: Longword); |
833 begin |
843 begin |
834 inc(Gear^.Timer, Steps); |
844 inc(Gear^.Timer, Steps); |
835 |
845 |
836 while Gear^.Timer >= 10 do |
846 while Gear^.Timer >= 10 do |
837 begin |
847 begin |
838 dec(Gear^.Timer, 10); |
848 dec(Gear^.Timer, 10); |
839 if WindBarWidth < Gear^.Tag then |
849 if WindBarWidth < Gear^.Tag then |
840 inc(WindBarWidth) |
850 inc(WindBarWidth) |
849 else if cWindspeedf < Gear^.dAngle then |
859 else if cWindspeedf < Gear^.dAngle then |
850 begin |
860 begin |
851 cWindspeedf := cWindspeedf + Gear^.Angle*Steps; |
861 cWindspeedf := cWindspeedf + Gear^.Angle*Steps; |
852 if cWindspeedf > Gear^.dAngle then cWindspeedf:= Gear^.dAngle; |
862 if cWindspeedf > Gear^.dAngle then cWindspeedf:= Gear^.dAngle; |
853 end; |
863 end; |
854 |
864 |
855 if (WindBarWidth = Gear^.Tag) and (cWindspeedf = Gear^.dAngle) then |
865 if (WindBarWidth = Gear^.Tag) and (cWindspeedf = Gear^.dAngle) then |
856 DeleteVisualGear(Gear) |
866 DeleteVisualGear(Gear) |
857 end; |
867 end; |
858 //////////////////////////////////////////////////////////////////////////////// |
868 //////////////////////////////////////////////////////////////////////////////// |
859 procedure doStepStraightShot(Gear: PVisualGear; Steps: Longword); |
869 procedure doStepStraightShot(Gear: PVisualGear; Steps: Longword); |
860 begin |
870 begin |
864 if Gear^.FrameTicks <= Steps then |
874 if Gear^.FrameTicks <= Steps then |
865 DeleteVisualGear(Gear) |
875 DeleteVisualGear(Gear) |
866 else |
876 else |
867 begin |
877 begin |
868 dec(Gear^.FrameTicks, Steps); |
878 dec(Gear^.FrameTicks, Steps); |
869 if (Gear^.FrameTicks < 501) and (Gear^.FrameTicks mod 5 = 0) then |
879 if (Gear^.FrameTicks < 501) and (Gear^.FrameTicks mod 5 = 0) then |
870 Gear^.Tint:= (Gear^.Tint and $FFFFFF00) or (((Gear^.Tint and $000000FF) * Gear^.FrameTicks) div 500) |
880 Gear^.Tint:= (Gear^.Tint and $FFFFFF00) or (((Gear^.Tint and $000000FF) * Gear^.FrameTicks) div 500) |
871 end |
881 end |
872 end; |
882 end; |
873 |
883 |
874 |
884 |
909 @doStepStraightShot |
919 @doStepStraightShot |
910 ); |
920 ); |
911 |
921 |
912 procedure initModule; |
922 procedure initModule; |
913 begin |
923 begin |
914 doStepHandlers:= handlers |
924 doStepVGHandlers:= handlers |
915 end; |
925 end; |
916 |
926 |
917 end. |
927 end. |