hedgewars/uTriggers.pas
changeset 613 e8cf72d0e0f7
parent 610 9b5a6200f667
child 615 b646b3c43369
equal deleted inserted replaced
612:333d095319de 613:e8cf72d0e0f7
    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 type TTrigAction = (taSpawnGear);
    26 type TTrigAction = (taSpawnGear, taSuccessFinish);
    27 
    27 
    28 procedure AddTriggerSpawner(id, Ticks, Lives: Longword; X, Y: LongInt; GearType: TGearType; GearTriggerId: Longword);
    28 procedure AddTriggerSpawner(id, Ticks, Lives: Longword; X, Y: LongInt; GearType: TGearType; GearTriggerId: Longword);
       
    29 procedure AddTriggerSuccess(tId: Longword);
    29 procedure TickTrigger(id: Longword);
    30 procedure TickTrigger(id: Longword);
    30 
    31 
    31 implementation
    32 implementation
    32 uses uGears, uFloat, uMisc, uWorld;
    33 uses uGears, uFloat, uMisc, uWorld;
    33 type PTrigger = ^TTrigger;
    34 type PTrigger = ^TTrigger;
    42                 SpawnGearTriggerId: Longword;
    43                 SpawnGearTriggerId: Longword;
    43                 Next: PTrigger;
    44                 Next: PTrigger;
    44                 end;
    45                 end;
    45 var TriggerList: PTrigger = nil;
    46 var TriggerList: PTrigger = nil;
    46 
    47 
       
    48 function AddTrigger: PTrigger;
       
    49 var tmp: PTrigger;
       
    50 begin
       
    51 new(tmp);
       
    52 FillChar(tmp^, sizeof(TTrigger), 0);
       
    53 if TriggerList <> nil then tmp^.Next:= TriggerList;
       
    54 TriggerList:= tmp;
       
    55 AddTrigger:= tmp
       
    56 end;
       
    57 
    47 procedure AddTriggerSpawner(id, Ticks, Lives: Longword; X, Y: LongInt; GearType: TGearType; GearTriggerId: Longword);
    58 procedure AddTriggerSpawner(id, Ticks, Lives: Longword; X, Y: LongInt; GearType: TGearType; GearTriggerId: Longword);
    48 var tmp: PTrigger;
    59 var tmp: PTrigger;
    49 begin
    60 begin
    50 if (Ticks = 0) or (Lives = 0) then exit;
    61 if (Ticks = 0) or (Lives = 0) then exit;
    51 {$IFDEF DEBUGFILE}AddFileLog('Add spawner trigger: ' + inttostr(id) + ', gear triggers  ' + inttostr(GearTriggerId));{$ENDIF}
    62 {$IFDEF DEBUGFILE}AddFileLog('Add spawner trigger: ' + inttostr(id) + ', gear triggers  ' + inttostr(GearTriggerId));{$ENDIF}
    52 new(tmp);
       
    53 FillChar(tmp^, sizeof(TTrigger), 0);
       
    54 
    63 
       
    64 tmp:= AddTrigger;
    55 tmp^.id:= id;
    65 tmp^.id:= id;
    56 tmp^.Ticks:= Ticks;
    66 tmp^.Ticks:= Ticks;
    57 tmp^.TicksPerLife:= Ticks;
    67 tmp^.TicksPerLife:= Ticks;
    58 tmp^.Lives:= Lives;
    68 tmp^.Lives:= Lives;
    59 tmp^.Action:= taSpawnGear;
    69 tmp^.Action:= taSpawnGear;
    60 tmp^.X:= X;
    70 tmp^.X:= X;
    61 tmp^.Y:= Y;
    71 tmp^.Y:= Y;
    62 tmp^.SpawnGearType:= GearType;
    72 tmp^.SpawnGearType:= GearType;
    63 tmp^.SpawnGearTriggerId:= GearTriggerId;
    73 tmp^.SpawnGearTriggerId:= GearTriggerId
    64 if TriggerList <> nil then tmp^.Next:= TriggerList;
    74 end;
    65 TriggerList:= tmp
    75 
       
    76 procedure AddTriggerSuccess(tId: Longword);
       
    77 begin
       
    78 with AddTrigger^ do
       
    79      begin
       
    80      id:= tId;
       
    81      Ticks:= 1;
       
    82      TicksPerLife:= 1;
       
    83      Action:= taSuccessFinish
       
    84      end
    66 end;
    85 end;
    67 
    86 
    68 procedure TickTriggerT(Trigger: PTrigger);
    87 procedure TickTriggerT(Trigger: PTrigger);
    69 begin
    88 begin
    70 with Trigger^ do
    89 with Trigger^ do
    71   case Action of
    90   case Action of
    72      taSpawnGear: begin
    91      taSpawnGear: begin
    73                   FollowGear:= AddGear(X, Y, SpawnGearType, 0, _0, _0, 0);
    92                   FollowGear:= AddGear(X, Y, SpawnGearType, 0, _0, _0, 0);
    74                   FollowGear^.TriggerId:= SpawnGearTriggerId
    93                   FollowGear^.TriggerId:= SpawnGearTriggerId
       
    94                   end;
       
    95  taSuccessFinish: begin
       
    96                   GameState:= gsExit
    75                   end
    97                   end
    76   end
    98   end
    77 end;
    99 end;
    78 
   100 
    79 procedure TickTrigger(id: Longword);
   101 procedure TickTrigger(id: Longword);