hedgewars/uTriggers.pas
changeset 593 1f5e66379a43
parent 589 f382c41f658a
child 594 221ffeb92f30
equal deleted inserted replaced
592:b1189f31e354 593:1f5e66379a43
    19 unit uTriggers;
    19 unit uTriggers;
    20 
    20 
    21 interface
    21 interface
    22 uses SDLh, uConsts;
    22 uses SDLh, uConsts;
    23 {$INCLUDE options.inc}
    23 {$INCLUDE options.inc}
       
    24 const trigTurns = $80000001;
    24 
    25 
    25 procedure AddTrigger(id: Longword);
    26 procedure AddTrigger(id, Ticks: Longword);
    26 procedure DoTrigger(id: Longword);
    27 procedure TickTrigger(id: Longword);
    27 
    28 
    28 implementation
    29 implementation
    29 uses uGears;
    30 uses uGears, uFloat, uMisc;
    30 type PTrigger = ^TTrigger;
    31 type PTrigger = ^TTrigger;
    31      TTrigger = record
    32      TTrigger = record
    32                 id: Longword;
    33                 id: Longword;
       
    34                 Ticks: Longword;
    33                 Next: PTrigger;
    35                 Next: PTrigger;
    34                 end;
    36                 end;
    35 var TriggerList: PTrigger = nil;
    37 var TriggerList: PTrigger = nil;
    36 
    38 
    37 procedure AddTrigger(id: Longword);
    39 procedure AddTrigger(id, Ticks: Longword);
    38 var tmp: PTrigger;
    40 var tmp: PTrigger;
    39 begin
    41 begin
       
    42 if (Ticks = 0) then exit;
       
    43 {$IFDEF DEBUGFILE}AddFileLog('Add trigger: ' + inttostr(id));{$ENDIF}
    40 new(tmp);
    44 new(tmp);
    41 FillChar(tmp^, sizeof(TGear), 0);
    45 FillChar(tmp^, sizeof(TGear), 0);
    42 
    46 
    43 tmp^.id:= id;
    47 tmp^.id:= id;
       
    48 tmp^.Ticks:= Ticks;
    44 if TriggerList <> nil then tmp^.Next:= TriggerList;
    49 if TriggerList <> nil then tmp^.Next:= TriggerList;
    45 TriggerList:= tmp
    50 TriggerList:= tmp
    46 end;
    51 end;
    47 
    52 
    48 procedure DoTrigger(id: Longword);
    53 procedure TickTriggerT(Trigger: PTrigger);
    49 begin
    54 begin
       
    55 AddGear(1024, -140, gtTarget, 0, _0, _0, 0)
       
    56 end;
       
    57 
       
    58 procedure TickTrigger(id: Longword);
       
    59 var t, tt: PTrigger;
       
    60 begin
       
    61 t:= TriggerList;
       
    62 
       
    63 while (t <> nil) do
       
    64   begin
       
    65   if t^.id = id then
       
    66     begin
       
    67     tt:= t;
       
    68     dec(t^.Ticks);
       
    69     if (t^.Ticks = 0) then
       
    70        begin
       
    71        TickTriggerT(t);
       
    72        if t = TriggerList then TriggerList:= t^.Next
       
    73                           else tt^.Next:= t^.Next;
       
    74        Dispose(t)
       
    75        end
       
    76        else t:= t^.Next
       
    77     end else t:= t^.Next
       
    78   end
    50 end;
    79 end;
    51 
    80 
    52 end.
    81 end.