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