hedgewars/uVisualGearsHandlers.pas
changeset 10015 4feced261c68
parent 9998 736015b847e3
parent 9960 fac73b8a52d3
child 10108 c68cf030eded
equal deleted inserted replaced
10014:56d2f2d5aad8 10015:4feced261c68
    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.