2 interface |
2 interface |
3 uses uFLTypes; |
3 uses uFLTypes; |
4 |
4 |
5 procedure resetGameConfig; cdecl; |
5 procedure resetGameConfig; cdecl; |
6 procedure runQuickGame; cdecl; |
6 procedure runQuickGame; cdecl; |
|
7 procedure runLocalGame; cdecl; |
7 procedure getPreview; cdecl; |
8 procedure getPreview; cdecl; |
8 |
9 |
9 procedure registerGUIMessagesCallback(p: pointer; f: TGUICallback); cdecl; |
10 procedure registerGUIMessagesCallback(p: pointer; f: TGUICallback); cdecl; |
10 |
11 |
11 procedure setSeed(seed: PChar); cdecl; |
12 procedure setSeed(seed: PChar); cdecl; |
13 |
14 |
14 procedure tryAddTeam(teamName: PChar); |
15 procedure tryAddTeam(teamName: PChar); |
15 procedure tryRemoveTeam(teamName: PChar); |
16 procedure tryRemoveTeam(teamName: PChar); |
16 |
17 |
17 implementation |
18 implementation |
18 uses uFLIPC, hwengine, uFLUtils, uFLTeams; |
19 uses uFLIPC, hwengine, uFLUtils, uFLTeams, uFLData; |
19 |
20 |
20 var guiCallbackPointer: pointer; |
21 var guiCallbackPointer: pointer; |
21 guiCallbackFunction: TGUICallback; |
22 guiCallbackFunction: TGUICallback; |
22 |
23 |
23 const |
24 const |
102 procedure setSeed(seed: PChar); cdecl; |
103 procedure setSeed(seed: PChar); cdecl; |
103 begin |
104 begin |
104 currentConfig.seed:= seed |
105 currentConfig.seed:= seed |
105 end; |
106 end; |
106 |
107 |
|
108 |
107 function getSeed: PChar; cdecl; |
109 function getSeed: PChar; cdecl; |
108 begin |
110 begin |
109 getSeed:= str2PChar(currentConfig.seed) |
111 getSeed:= str2PChar(currentConfig.seed) |
|
112 end; |
|
113 |
|
114 function getUnusedColor: shortstring; |
|
115 var i, c: Longword; |
|
116 fColorMatched: boolean; |
|
117 begin |
|
118 c:= 0; |
|
119 i:= 0; |
|
120 repeat |
|
121 repeat |
|
122 fColorMatched:= (currentConfig.teams[i].hogsNumber > 0) and (currentConfig.teams[i].color = colorsSet[c]); |
|
123 inc(i) |
|
124 until (i >= 8) or (currentConfig.teams[i].hogsNumber = 0) or fColorMatched; |
|
125 |
|
126 if fColorMatched then |
|
127 begin |
|
128 i:= 0; |
|
129 inc(c) |
|
130 end; |
|
131 until not fColorMatched; |
|
132 |
|
133 getUnusedColor:= colorsSet[c] |
110 end; |
134 end; |
111 |
135 |
112 procedure runQuickGame; cdecl; |
136 procedure runQuickGame; cdecl; |
113 begin |
137 begin |
114 with currentConfig do |
138 with currentConfig do |
115 begin |
139 begin |
116 gameType:= gtLocal; |
140 gameType:= gtLocal; |
117 arguments[0]:= ''; |
141 arguments[0]:= ''; |
118 arguments[1]:= '--internal'; |
142 arguments[1]:= '--internal'; |
119 arguments[2]:= '--nosound'; |
143 arguments[2]:= '--nomusic'; |
120 argumentsNumber:= 3; |
144 argumentsNumber:= 3; |
121 |
145 |
122 teams[0]:= createRandomTeam; |
146 teams[0]:= createRandomTeam; |
123 teams[0].color:= '6341088'; |
147 teams[0].color:= colorsSet[0]; |
124 teams[1]:= createRandomTeam; |
148 teams[1]:= createRandomTeam; |
125 teams[1].color:= '2113696'; |
149 teams[1].color:= colorsSet[1]; |
126 teams[1].botLevel:= 1; |
150 teams[1].botLevel:= 1; |
127 |
151 |
128 queueExecution; |
152 queueExecution; |
129 end; |
153 end; |
130 end; |
154 end; |
|
155 |
131 |
156 |
132 procedure getPreview; cdecl; |
157 procedure getPreview; cdecl; |
133 begin |
158 begin |
134 with currentConfig do |
159 with currentConfig do |
135 begin |
160 begin |
141 |
166 |
142 queueExecution; |
167 queueExecution; |
143 end; |
168 end; |
144 end; |
169 end; |
145 |
170 |
|
171 procedure runLocalGame; cdecl; |
|
172 begin |
|
173 with currentConfig do |
|
174 begin |
|
175 gameType:= gtLocal; |
|
176 arguments[0]:= ''; |
|
177 arguments[1]:= '--internal'; |
|
178 arguments[2]:= '--nomusic'; |
|
179 argumentsNumber:= 3; |
|
180 |
|
181 queueExecution; |
|
182 end; |
|
183 end; |
|
184 |
|
185 |
146 procedure engineMessageCallback(p: pointer; msg: PChar; len: Longword); |
186 procedure engineMessageCallback(p: pointer; msg: PChar; len: Longword); |
147 begin |
187 begin |
148 if len = 128 * 256 then guiCallbackFunction(guiCallbackPointer, mtPreview, msg, len) |
188 if len = 128 * 256 then guiCallbackFunction(guiCallbackPointer, mtPreview, msg, len) |
149 end; |
189 end; |
150 |
190 |
176 // no free space for a team or reached hogs number maximum |
217 // no free space for a team or reached hogs number maximum |
177 if (i > 7) or (hedgehogsNumber >= 48) then exit; |
218 if (i > 7) or (hedgehogsNumber >= 48) then exit; |
178 |
219 |
179 team:= teamByName(teamName); |
220 team:= teamByName(teamName); |
180 if team = nil then exit; |
221 if team = nil then exit; |
|
222 |
|
223 c:= getUnusedColor; |
181 |
224 |
182 teams[i]:= team^; |
225 teams[i]:= team^; |
183 |
226 |
184 if i = 0 then hn:= 4 else hn:= teams[i - 1].hogsNumber; |
227 if i = 0 then hn:= 4 else hn:= teams[i - 1].hogsNumber; |
185 if hn > 48 - hedgehogsNumber then hn:= 48 - hedgehogsNumber; |
228 if hn > 48 - hedgehogsNumber then hn:= 48 - hedgehogsNumber; |
186 teams[i].hogsNumber:= hn; |
229 teams[i].hogsNumber:= hn; |
|
230 |
|
231 teams[i].color:= c; |
187 end; |
232 end; |
188 |
233 |
189 |
234 |
190 msg:= '0' + #10 + teamName; |
235 msg:= '0' + #10 + teamName; |
191 |
236 |
193 |
238 |
194 msg:= teamName; |
239 msg:= teamName; |
195 |
240 |
196 guiCallbackFunction(guiCallbackPointer, mtRemoveTeam, @msg[1], length(msg)) |
241 guiCallbackFunction(guiCallbackPointer, mtRemoveTeam, @msg[1], length(msg)) |
197 end; |
242 end; |
|
243 |
198 |
244 |
199 procedure tryRemoveTeam(teamName: PChar); |
245 procedure tryRemoveTeam(teamName: PChar); |
200 var msg: ansistring; |
246 var msg: ansistring; |
201 begin |
247 i: Longword; |
|
248 tn: shortstring; |
|
249 begin |
|
250 with currentConfig do |
|
251 begin |
|
252 i:= 0; |
|
253 tn:= teamName; |
|
254 while (i < 8) and (teams[i].teamName <> tn) do |
|
255 inc(i); |
|
256 |
|
257 // team not found??? |
|
258 if (i > 7) then exit; |
|
259 |
|
260 while (i < 7) and (teams[i + 1].hogsNumber > 0) do |
|
261 begin |
|
262 teams[i]:= teams[i + 1]; |
|
263 inc(i) |
|
264 end; |
|
265 |
|
266 teams[i].hogsNumber:= 0 |
|
267 end; |
|
268 |
202 msg:= teamName; |
269 msg:= teamName; |
203 |
270 |
204 guiCallbackFunction(guiCallbackPointer, mtRemovePlayingTeam, @msg[1], length(msg)); |
271 guiCallbackFunction(guiCallbackPointer, mtRemovePlayingTeam, @msg[1], length(msg)); |
205 guiCallbackFunction(guiCallbackPointer, mtAddTeam, @msg[1], length(msg)) |
272 guiCallbackFunction(guiCallbackPointer, mtAddTeam, @msg[1], length(msg)) |
206 end; |
273 end; |