hedgewars/uTriggers.pas
changeset 595 5ee863f2f568
parent 594 221ffeb92f30
child 610 9b5a6200f667
equal deleted inserted replaced
594:221ffeb92f30 595:5ee863f2f568
    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 const trigTurns = $80000001;
    25 
    25 
    26 procedure AddTrigger(id, Ticks, Lives: Longword);
    26 type TTrigAction = (taSpawnGear);
       
    27 
       
    28 procedure AddTriggerSpawner(id, Ticks, Lives: Longword; X, Y: LongInt; GearType: TGearType; GearTriggerId: Longword);
    27 procedure TickTrigger(id: Longword);
    29 procedure TickTrigger(id: Longword);
    28 
    30 
    29 implementation
    31 implementation
    30 uses uGears, uFloat, uMisc;
    32 uses uGears, uFloat, uMisc;
    31 type PTrigger = ^TTrigger;
    33 type PTrigger = ^TTrigger;
    32      TTrigger = record
    34      TTrigger = record
    33                 id: Longword;
    35                 id: Longword;
    34                 Ticks: Longword;
    36                 Ticks: Longword;
    35                 Lives: Longword;
    37                 Lives: Longword;
    36                 TicksPerLife: LongWord;
    38                 TicksPerLife: LongWord;
       
    39                 Action: TTrigAction;
       
    40                 X, Y: LongInt;
       
    41                 SpawnGearType: TGearType;
       
    42                 SpawnGearTriggerId: Longword;
    37                 Next: PTrigger;
    43                 Next: PTrigger;
    38                 end;
    44                 end;
    39 var TriggerList: PTrigger = nil;
    45 var TriggerList: PTrigger = nil;
    40 
    46 
    41 procedure AddTrigger(id, Ticks, Lives: Longword);
    47 procedure AddTriggerSpawner(id, Ticks, Lives: Longword; X, Y: LongInt; GearType: TGearType; GearTriggerId: Longword);
    42 var tmp: PTrigger;
    48 var tmp: PTrigger;
    43 begin
    49 begin
    44 if (Ticks = 0) or (Lives = 0) then exit;
    50 if (Ticks = 0) or (Lives = 0) then exit;
    45 {$IFDEF DEBUGFILE}AddFileLog('Add trigger: ' + inttostr(id));{$ENDIF}
    51 {$IFDEF DEBUGFILE}AddFileLog('Add spawner trigger: ' + inttostr(id) + ', gear triggers  ' + inttostr(GearTriggerId));{$ENDIF}
    46 new(tmp);
    52 new(tmp);
    47 FillChar(tmp^, sizeof(TGear), 0);
    53 FillChar(tmp^, sizeof(TTrigger), 0);
    48 
    54 
    49 tmp^.id:= id;
    55 tmp^.id:= id;
    50 tmp^.Ticks:= Ticks;
    56 tmp^.Ticks:= Ticks;
    51 tmp^.TicksPerLife:= Ticks;
    57 tmp^.TicksPerLife:= Ticks;
    52 tmp^.Lives:= Lives;
    58 tmp^.Lives:= Lives;
       
    59 tmp^.Action:= taSpawnGear;
       
    60 tmp^.X:= X;
       
    61 tmp^.Y:= Y;
       
    62 tmp^.SpawnGearType:= GearType;
       
    63 tmp^.SpawnGearTriggerId:= GearTriggerId;
    53 if TriggerList <> nil then tmp^.Next:= TriggerList;
    64 if TriggerList <> nil then tmp^.Next:= TriggerList;
    54 TriggerList:= tmp
    65 TriggerList:= tmp
    55 end;
    66 end;
    56 
    67 
    57 procedure TickTriggerT(Trigger: PTrigger);
    68 procedure TickTriggerT(Trigger: PTrigger);
    58 begin
    69 begin
    59 AddGear(1024, -140, gtTarget, 0, _0, _0, 0)
    70 with Trigger^ do
       
    71   case Action of
       
    72      taSpawnGear: AddGear(X, Y, SpawnGearType, 0, _0, _0, 0)^.TriggerId:= SpawnGearTriggerId;
       
    73   end
    60 end;
    74 end;
    61 
    75 
    62 procedure TickTrigger(id: Longword);
    76 procedure TickTrigger(id: Longword);
    63 var t, pt, nt: PTrigger;
    77 var t, pt, nt: PTrigger;
    64 begin
    78 begin