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. |