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); |