@jtff/miztemplate-lib 3.0.0-rc10 → 3.0.0-rc12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/mizlib.js CHANGED
@@ -9,7 +9,54 @@ const lstat = promisify(fs.lstat);
9
9
 
10
10
  class Mizlib {
11
11
  constructor() {
12
- // no need for initialization
12
+ // no need for initialization
13
+ }
14
+
15
+ async injectLuaScriptIntoZipObjectAndUpdateWorkspace(workspacePath, folderPath, luaScriptsArray, titleString, zipObject, timing, colorString) {
16
+ let missionObject = await this.getMissionObjectFromZipObject(zipObject);
17
+ let mapResourceObject = await this.getMapResourceObjectFromZipObject(zipObject);
18
+ let tuple = this.injectLuaScriptAndUpdateWorkspace(workspacePath, folderPath, luaScriptsArray, titleString, missionObject, mapResourceObject, timing, colorString);
19
+ for (let luaScript of luaScriptsArray) {
20
+ this.injectFileIntoZipObject(zipObject, [
21
+ workspacePath,
22
+ "/",
23
+ folderPath,
24
+ "/",
25
+ path.basename(luaScript)
26
+ ].join("")
27
+ );
28
+ }
29
+ return {tuple, zipObject};
30
+ }
31
+
32
+ injectLuaScriptAndUpdateWorkspace(workspacePath, folderPath, luaScriptsArray, titleString, missionObject, mapResourceObject, timing, colorString) {
33
+ let tuple = this.injectLuaScriptsInMissionObject(
34
+ missionObject['trig'],
35
+ missionObject['trigrules'],
36
+ mapResourceObject,
37
+ titleString,
38
+ luaScriptsArray,
39
+ timing,
40
+ colorString
41
+ );
42
+ for (let luaScript of luaScriptsArray) {
43
+ fs.copyFileSync(
44
+ [
45
+ 'node_modules/@jtff/miztemplate-lib/lua/',
46
+ folderPath,
47
+ '/',
48
+ luaScript
49
+ ].join(""),
50
+ [
51
+ workspacePath,
52
+ "/",
53
+ folderPath,
54
+ "/",
55
+ path.basename(luaScript)
56
+ ].join("")
57
+ );
58
+ }
59
+ return tuple;
13
60
  }
14
61
 
15
62
  injectLuaScriptsInMissionObject(tObject, trObject, mrObject, strTitle, scriptFilesArray, timingInSeconds, hexColor) {
@@ -68,7 +115,7 @@ class Mizlib {
68
115
  // TODO: Inject fake data
69
116
  console.log("NO THEATRE SPECIFIED. RADIO PRESETS WILL NOT BE AVAILABLE !");
70
117
  } else {
71
- await this.mizUpdateRadioPresets(zip, 'resources/radios/' + strTheatreSettings);
118
+ await this.injectRadioPresetsFromFolderIntoZipObject(zip, 'resources/radios/' + strTheatreSettings);
72
119
  }
73
120
  this.mizUpdateSettingsLuaFiles(zip, strTheatreSettings);
74
121
  await this.mizUpdateSoundFolders(zip);
@@ -177,12 +224,11 @@ class Mizlib {
177
224
  for (let file of fs.readdirSync(folderPath).filter(file => file.endsWith(".lua"))) {
178
225
  console.log('injecting up2date ' + folderPath + '/' + file + ' file in archive');
179
226
  this.injectFileIntoZipObject(zip, folderPath + "/" + file);
180
- }
181
- ;
227
+ };
182
228
  }
183
229
 
184
230
 
185
- async mizUpdateRadioPresets(zip, preset_folder) {
231
+ async injectRadioPresetsFromFolderIntoZipObject(zip, preset_folder) {
186
232
  // Create folder Avionics to make sure it exists then delete it to remove any old preset in the template
187
233
  // Allows adding presets for A-10C
188
234
  zip.folder("Avionics");
@@ -258,16 +304,51 @@ class Mizlib {
258
304
  if (fs.existsSync('resources/sounds') && fs.lstatSync('resources/sounds').isDirectory()) {
259
305
  const folderArray = fs.readdirSync('resources/sounds');
260
306
  for (const folder of folderArray) {
261
- await this.mizUpdateSingleSoundFolder(zip, folder);
307
+ await this.injectSingleSoundFolderIntoZipObject(zip, folder);
262
308
  }
263
309
  }
264
310
  }
265
311
 
266
- async mizUpdateSingleSoundFolder(zip, folder) {
267
- if (fs.existsSync('resources/sounds/' + folder) && fs.lstatSync('resources/sounds/' + folder).isDirectory()) {
268
- console.log('adding sound files from resources/sounds/' + folder + ' folder...');
312
+ async updateWorkspaceWithSingleSoundFolder(workspacePath, folderString) {
313
+ if (
314
+ fs.existsSync(
315
+ [
316
+ workspacePath,
317
+ "/resources/sounds/",
318
+ folderString
319
+ ].join("")
320
+ ) &&
321
+ fs.lstatSync([
322
+ workspacePath,
323
+ "/resources/sounds/",
324
+ folderString
325
+ ].join("")).isDirectory()
326
+ ) {
327
+ fs.rmSync([
328
+ workspacePath,
329
+ "/resources/sounds/",
330
+ folderString
331
+ ].join(""), {recursive: true});
332
+ }
333
+ if (fs.existsSync('node_modules/@jtff/miztemplate-lib/resources/sounds/' + folderString) && fs.lstatSync('node_modules/@jtff/miztemplate-lib/resources/sounds/' + folderString).isDirectory()) {
334
+ fs.mkdirSync([
335
+ workspacePath,
336
+ "/resources/sounds/",
337
+ folderString
338
+ ].join(""), {recursive: true});
339
+ fs.cpSync('node_modules/@jtff/miztemplate-lib/resources/sounds/' + folderString,[
340
+ workspacePath,
341
+ "/resources/sounds/",
342
+ folderString
343
+ ].join(""), {recursive: true});
344
+ }
345
+ }
346
+
347
+ async injectSingleSoundFolderIntoZipObject(zip, workspacePath, folder) {
348
+ if (fs.existsSync(workspacePath + '/resources/sounds/' + folder) && fs.lstatSync(workspacePath + '/resources/sounds/' + folder).isDirectory()) {
349
+ console.log('adding sound files from '+workspacePath+'/resources/sounds/' + folder + ' folder...');
269
350
  zip = zip.remove(folder).folder(folder);
270
- await this.addFilesToZip(zip, 'resources/sounds/' + folder, fs.readdirSync('resources/sounds/' + folder));
351
+ await this.addFilesToZip(zip, workspacePath + '/resources/sounds/' + folder, fs.readdirSync(workspacePath + '/resources/sounds/' + folder));
271
352
  }
272
353
  }
273
354
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jtff/miztemplate-lib",
3
- "version": "3.0.0-rc10",
3
+ "version": "3.0.0-rc12",
4
4
  "description": "JTFF mission template library",
5
5
  "main": "index.js",
6
6
  "files": [
@@ -3,41 +3,50 @@ const path = require("path");
3
3
  const prompt = require('prompt');
4
4
 
5
5
  function injectScripts(jtffci, env_mission) {
6
- // create mission folder in dist (general) folder
7
- fs.mkdirSync(jtffci.config.general.missionFolder, { recursive: true });
8
- if (fs.existsSync([
6
+ const workspacePath = [
9
7
  jtffci.config.general.missionFolder,
10
8
  "/",
11
9
  path.parse(env_mission).name
12
- ].join(""))) {
10
+ ].join("");
11
+ const destinationMizFilePath = [
12
+ workspacePath,
13
+ '/',
14
+ path.basename(env_mission)
15
+ ].join("");
16
+ // create mission folder in jtffci.config.reneral.missionFolder folder
17
+ fs.mkdirSync(jtffci.config.general.missionFolder, { recursive: true });
18
+ if (fs.existsSync(workspacePath)) {
13
19
  // if there is a specific mission folder (dist/env_mission), clean it
14
- fs.rmSync([
15
- jtffci.config.general.missionFolder,
16
- "/",
17
- path.parse(env_mission).name
18
- ].join(""),
19
- { recursive: true }
20
- );
20
+ fs.rmSync(workspacePath,{ recursive: true });
21
21
  }
22
22
  // create a settings folder
23
23
  fs.mkdirSync([
24
- jtffci.config.general.missionFolder,
25
- "/",
26
- path.parse(env_mission).name,
24
+ workspacePath,
27
25
  "/settings"
28
26
  ].join(""),
29
27
  { recursive: true }
30
28
  );
31
29
  // create a src folder
32
30
  fs.mkdirSync([
33
- jtffci.config.general.missionFolder,
34
- "/",
35
- path.parse(env_mission).name,
31
+ workspacePath,
36
32
  "/src"
37
33
  ].join(""),
38
34
  { recursive: true }
39
35
  );
40
-
36
+ // create a lib folder
37
+ fs.mkdirSync([
38
+ workspacePath,
39
+ "/lib"
40
+ ].join(""),
41
+ { recursive: true }
42
+ );
43
+ // create a resources folder
44
+ fs.mkdirSync([
45
+ workspacePath,
46
+ "/resources"
47
+ ].join(""),
48
+ { recursive: true }
49
+ );
41
50
  const prompt_properties = [
42
51
  {
43
52
  name: 'inject_tankers',
@@ -118,112 +127,65 @@ function injectScripts(jtffci, env_mission) {
118
127
  console.log(' inject_A2G scripts: ' + (/^y\b|o\b|yes\b|oui\b/i).test(prompt_result.inject_A2G));
119
128
  console.log(' inject_mission specific scripts: ' + (/^y\b|o\b|yes\b|oui\b/i).test(prompt_result.inject_mission));
120
129
  console.log(' inject_radio_presets scripts: ' + (/^y\b|o\b|yes\b|oui\b/i).test(prompt_result.inject_radio_presets));
121
-
122
130
  // open the miz input file for reading
123
- const mizObject = await jtffci.mizlib.getZipObjectFromMizPath(env_mission);
124
- // inject all the lua files in the src folder into the source zip object
125
- jtffci.mizlib.injectLuaFilesFromFolderIntoZipObject(mizObject, "src");
126
- // inject all the lua files in the lib folder into the source zip object
127
- jtffci.mizlib.injectLuaFilesFromFolderIntoZipObject(mizObject, "lib");
128
- // injection des fichiers son Généraux si repertoire resources/sounds/General present
129
- await jtffci.mizlib.mizUpdateSingleSoundFolder(mizObject, 'General');
130
- // On fait une sauvegarde dans le folder de destination
131
- // fs.writeFileSync([
132
- // jtffci.config.general.missionFolder,
133
- // "/",
134
- // path.parse(env_mission).name,
135
- // "/",
136
- // path.basename(env_mission)
137
- // ].join(""),
138
- // await mizObject.generateAsync({
139
- // type: 'nodebuffer',
140
- // streamFiles: true,
141
- // compression: "DEFLATE",
142
- // compressionOptions: {
143
- // level: 9
144
- // }
145
- // })
146
- // );
147
- // injection des fichiers son Misc si repertoire resources/sounds/Misc present
148
- await jtffci.mizlib.mizUpdateSingleSoundFolder(mizObject, 'Misc');
149
- // On fait une sauvegarde dans le folder de destination
150
- // fs.writeFileSync([
151
- // jtffci.config.general.missionFolder,
152
- // "/",
153
- // path.parse(env_mission).name,
154
- // "/",
155
- // path.basename(env_mission)
156
- // ].join(""),
157
- // await mizObject.generateAsync({
158
- // type: 'nodebuffer',
159
- // streamFiles: true,
160
- // compression: "DEFLATE",
161
- // compressionOptions: {
162
- // level: 9
163
- // }
164
- // })
165
- // );
131
+ const originalMizObject = await jtffci.mizlib.getZipObjectFromMizPath(env_mission);
132
+ // copie de l'objet pour modification
133
+ let mizObject = originalMizObject;
134
+ // Open the mission Object and mapResource Object for modification
166
135
  const missionObject = await jtffci.mizlib.getMissionObjectFromZipObject(mizObject);
167
136
  let mapResourceObject = await jtffci.mizlib.getMapResourceObjectFromZipObject(mizObject);
137
+ // prepare settings array
168
138
  let settingsArray = [];
139
+ let scriptsArray = [];
140
+ let libsArray = [];
169
141
  if (Array.isArray(mapResourceObject)) {
170
142
  if (mapResourceObject.length === 0) {
171
143
  mapResourceObject = {};
172
144
  }
173
145
  }
174
- // injection SplashDamage
175
- let tuple = jtffci.mizlib.injectLuaScriptsInMissionObject(
176
- missionObject['trig'],
177
- missionObject['trigrules'],
178
- mapResourceObject,
179
- 'SplashDamage load',
180
- ['Splash_Damage_2_0.lua'],
181
- 9,
182
- '0x008000ff'
183
- );
184
- missionObject['trig'] = tuple.tObject;
185
- missionObject['trigrules'] = tuple.trObject;
186
- mapResourceObject = tuple.mrObject;
187
- // injection Moose
188
- tuple = jtffci.mizlib.injectLuaScriptsInMissionObject(
189
- missionObject['trig'],
190
- missionObject['trigrules'],
191
- mapResourceObject,
192
- 'Moose load',
193
- ['Moose_.lua'],
194
- 10,
195
- '0x008000ff'
196
- );
197
- missionObject['trig'] = tuple.tObject;
198
- missionObject['trigrules'] = tuple.trObject;
199
- mapResourceObject = tuple.mrObject;
200
- // injection Mist
201
- tuple = jtffci.mizlib.injectLuaScriptsInMissionObject(
202
- missionObject['trig'],
203
- missionObject['trigrules'],
204
- mapResourceObject,
205
- 'Mist load',
206
- ['mist_4_5_107.lua'],
207
- 13,
208
- '0x008000ff'
209
- );
210
- missionObject['trig'] = tuple.tObject;
211
- missionObject['trigrules'] = tuple.trObject;
212
- mapResourceObject = tuple.mrObject;
213
- // injection Skynet
214
- tuple = jtffci.mizlib.injectLuaScriptsInMissionObject(
215
- missionObject['trig'],
216
- missionObject['trigrules'],
217
- mapResourceObject,
218
- 'Skynet load',
219
- ['skynet-iads-compiled.lua'],
220
- 15,
221
- '0x008000ff'
222
- );
223
- missionObject['trig'] = tuple.tObject;
224
- missionObject['trigrules'] = tuple.trObject;
225
- mapResourceObject = tuple.mrObject;
226
- // injection Librairies JTFF
146
+ // insertion des librairies externes dans la file d'attente
147
+ libsArray.push({
148
+ folder: 'lib',
149
+ scriptTitle: 'SplashDamage 2.0',
150
+ scripts: ['Splash_Damage_2_0.lua'],
151
+ timing: 9,
152
+ color: '0x008000ff'
153
+ });
154
+ libsArray.push({
155
+ folder: 'lib',
156
+ scriptTitle: 'Moose',
157
+ scripts: ['Moose_.lua'],
158
+ timing: 10,
159
+ color: '0x008000ff'
160
+ });
161
+ libsArray.push({
162
+ folder: 'lib',
163
+ scriptTitle: 'Mist',
164
+ scripts: ['mist_4_5_107.lua'],
165
+ timing: 12,
166
+ color: '0x008000ff'
167
+ });
168
+ libsArray.push({
169
+ folder: 'lib',
170
+ scriptTitle: 'Hercules',
171
+ scripts: ['Hercules_Cargo.lua'],
172
+ timing: 14,
173
+ color: '0x008000ff'
174
+ });
175
+ libsArray.push({
176
+ folder: 'lib',
177
+ scriptTitle: 'Skynet',
178
+ scripts: ['skynet-iads-compiled.lua'],
179
+ timing: 15,
180
+ color: '0x008000ff'
181
+ });
182
+ // injection des fichiers son Généraux si repertoire resources/sounds/General present
183
+ await jtffci.mizlib.updateWorkspaceWithSingleSoundFolder(workspacePath, 'General');
184
+ await jtffci.mizlib.injectSingleSoundFolderIntoZipObject(mizObject,workspacePath, 'General');
185
+ // injection des fichiers son Misc si repertoire resources/sounds/Misc present
186
+ await jtffci.mizlib.updateWorkspaceWithSingleSoundFolder(workspacePath, 'Misc');
187
+ await jtffci.mizlib.injectSingleSoundFolderIntoZipObject(mizObject,workspacePath, 'Misc');
188
+ // insertion des Librairies JTFF dans la file d'attente
227
189
  settingsArray.push(
228
190
  {
229
191
  file: "settings-gemman.lua",
@@ -232,33 +194,46 @@ function injectScripts(jtffci, env_mission) {
232
194
  file: "settings-global.lua",
233
195
  },
234
196
  );
235
- tuple = jtffci.mizlib.injectLuaScriptsInMissionObject(
236
- missionObject['trig'],
237
- missionObject['trigrules'],
238
- mapResourceObject,
239
- 'Load JTFF Libraries',
240
- ['010-root_menus.lua', '020-mission_functions.lua', 'gemman.lua'],
241
- 17,
242
- '0xffff00ff'
243
- );
244
- missionObject['trig'] = tuple.tObject;
245
- missionObject['trigrules'] = tuple.trObject;
246
- mapResourceObject = tuple.mrObject;
247
-
248
- // injection de la gestion des Set_Clients
249
- tuple = jtffci.mizlib.injectLuaScriptsInMissionObject(
250
- missionObject['trig'],
251
- missionObject['trigrules'],
252
- mapResourceObject,
253
- 'Set clients',
254
- ['110-set_clients.lua'],
255
- 21,
256
- '0xff0000ff'
257
- );
258
- missionObject['trig'] = tuple.tObject;
259
- missionObject['trigrules'] = tuple.trObject;
260
- mapResourceObject = tuple.mrObject;
261
- // injection des Tankers et OndemandTankers
197
+ libsArray.push({
198
+ folder: 'lib',
199
+ scriptTitle: 'GemMan',
200
+ scripts: ['gemman.lua'],
201
+ timing: 17,
202
+ color: '0xffff00ff'
203
+ });
204
+ libsArray.push({
205
+ folder: 'src',
206
+ scriptTitle: 'JTFF Libraries',
207
+ scripts: ['010-root_menus.lua', '020-mission_functions.lua'],
208
+ timing: 18,
209
+ color: '0xffff00ff'
210
+ });
211
+ // traitement de la file d'attente des librairies (injection des triggers et des fichiers lua)
212
+ for ( script of libsArray) {
213
+ console.log(['adding library',script.scripts.join(' and '),'from',workspacePath + '/' + script.folder, 'folder...'].join(' '));
214
+ let {tuple, zipObject} = await jtffci.mizlib.injectLuaScriptIntoZipObjectAndUpdateWorkspace(
215
+ workspacePath,
216
+ script.folder,
217
+ script.scripts,
218
+ script.scriptTitle + ' Load',
219
+ mizObject,
220
+ script.timing,
221
+ script.color
222
+ );
223
+ missionObject['trig'] = tuple.tObject;
224
+ missionObject['trigrules'] = tuple.trObject;
225
+ mapResourceObject = tuple.mrObject;
226
+ mizObject = zipObject;
227
+ }
228
+ // injection de la gestion des Set_Clients dans la file d'attente
229
+ scriptsArray.push({
230
+ folder: 'src',
231
+ scriptTitle: 'Set clients',
232
+ scripts: ['110-set_clients.lua'],
233
+ timing: 21,
234
+ color: '0xff0000ff'
235
+ });
236
+ // injection des Tankers et OndemandTankers dans la file d'attente
262
237
  if ((/^y\b|o\b|yes\b|oui\b/i).test(prompt_result.inject_tankers)) {
263
238
  settingsArray.push(
264
239
  {
@@ -270,22 +245,19 @@ function injectScripts(jtffci, env_mission) {
270
245
  objectName: "OnDemandTankersConfig"
271
246
  },
272
247
  );
273
- tuple = jtffci.mizlib.injectLuaScriptsInMissionObject(
274
- missionObject['trig'],
275
- missionObject['trigrules'],
276
- mapResourceObject,
277
- 'Tankers',
278
- ['120-tankers.lua'],
279
- 22,
280
- '0xff0000ff'
281
- );
282
- missionObject['trig'] = tuple.tObject;
283
- missionObject['trigrules'] = tuple.trObject;
284
- mapResourceObject = tuple.mrObject;
248
+ scriptsArray.push({
249
+ folder: 'src',
250
+ scriptTitle: 'Tankers',
251
+ scripts: ['120-tankers.lua'],
252
+ timing: 22,
253
+ color: '0xff0000ff'
254
+ });
285
255
  }
256
+ // injection des Airboss et Pedros dans la file d'attente
286
257
  if ((/^y\b|o\b|yes\b|oui\b/i).test(prompt_result.inject_airboss)) {
287
258
  // injection des fichiers son Airboss
288
- // await jtffci.mizlib.mizUpdateSingleSoundFolder(mizObject, 'AIRBOSS');
259
+ await jtffci.mizlib.updateWorkspaceWithSingleSoundFolder(workspacePath, 'AIRBOSS');
260
+ await jtffci.mizlib.injectSingleSoundFolderIntoZipObject(mizObject,workspacePath, 'AIRBOSS');
289
261
  settingsArray.push(
290
262
  {
291
263
  file: "settings-airboss.lua",
@@ -296,19 +268,15 @@ function injectScripts(jtffci, env_mission) {
296
268
  objectName: "PedrosConfig"
297
269
  },
298
270
  );
299
- tuple = jtffci.mizlib.injectLuaScriptsInMissionObject(
300
- missionObject['trig'],
301
- missionObject['trigrules'],
302
- mapResourceObject,
303
- 'Airboss',
304
- ['130-airboss.lua', '135-pedro.lua'],
305
- 23,
306
- '0xff0000ff'
307
- );
308
- missionObject['trig'] = tuple.tObject;
309
- missionObject['trigrules'] = tuple.trObject;
310
- mapResourceObject = tuple.mrObject;
271
+ scriptsArray.push({
272
+ folder: 'src',
273
+ scriptTitle: 'Airboss',
274
+ scripts: ['130-airboss.lua', '135-pedro.lua'],
275
+ timing: 23,
276
+ color: '0xff0000ff'
277
+ });
311
278
  }
279
+ // injection des Beacons dans la file d'attente
312
280
  if ((/^y\b|o\b|yes\b|oui\b/i).test(prompt_result.inject_beacons)) {
313
281
  settingsArray.push(
314
282
  {
@@ -316,19 +284,15 @@ function injectScripts(jtffci, env_mission) {
316
284
  objectName: "BeaconsConfig"
317
285
  },
318
286
  );
319
- tuple = jtffci.mizlib.injectLuaScriptsInMissionObject(
320
- missionObject['trig'],
321
- missionObject['trigrules'],
322
- mapResourceObject,
323
- 'Beacons',
324
- ['140-beacons.lua'],
325
- 24,
326
- '0xff0000ff'
327
- );
328
- missionObject['trig'] = tuple.tObject;
329
- missionObject['trigrules'] = tuple.trObject;
330
- mapResourceObject = tuple.mrObject;
287
+ scriptsArray.push({
288
+ folder: 'src',
289
+ scriptTitle: 'Beacons',
290
+ scripts: ['140-beacons.lua'],
291
+ timing: 24,
292
+ color: '0xff0000ff'
293
+ });
331
294
  }
295
+ // injection des AWACS et OnDemandAwacs dans la file d'attente
332
296
  if ((/^y\b|o\b|yes\b|oui\b/i).test(prompt_result.inject_awacs)) {
333
297
  settingsArray.push(
334
298
  {
@@ -340,41 +304,34 @@ function injectScripts(jtffci, env_mission) {
340
304
  objectName: "AwacsOnDemandConfig"
341
305
  },
342
306
  );
343
- tuple = jtffci.mizlib.injectLuaScriptsInMissionObject(
344
- missionObject['trig'],
345
- missionObject['trigrules'],
346
- mapResourceObject,
347
- 'Awacs',
348
- ['150-awacs.lua'],
349
- 25,
350
- '0xff0000ff'
351
- );
352
- missionObject['trig'] = tuple.tObject;
353
- missionObject['trigrules'] = tuple.trObject;
354
- mapResourceObject = tuple.mrObject;
307
+ scriptsArray.push({
308
+ folder: 'src',
309
+ scriptTitle: 'Awacs',
310
+ scripts: ['150-awacs.lua'],
311
+ timing: 25,
312
+ color: '0xff0000ff'
313
+ });
355
314
  }
315
+ // injection des ATIS dans la file d'attente
356
316
  if ((/^y\b|o\b|yes\b|oui\b/i).test(prompt_result.inject_atis)) {
357
317
  // injection des fichiers son ATIS
358
- // await jtffci.mizlib.mizUpdateSingleSoundFolder(mizObject, 'ATIS');
318
+ await jtffci.mizlib.updateWorkspaceWithSingleSoundFolder(workspacePath, 'ATIS');
319
+ await jtffci.mizlib.injectSingleSoundFolderIntoZipObject(mizObject,workspacePath, 'ATIS');
359
320
  settingsArray.push(
360
321
  {
361
322
  file: "settings-atis.lua",
362
323
  objectName: "AtisConfig"
363
324
  },
364
325
  );
365
- tuple = jtffci.mizlib.injectLuaScriptsInMissionObject(
366
- missionObject['trig'],
367
- missionObject['trigrules'],
368
- mapResourceObject,
369
- 'ATIS',
370
- ['160-atis.lua'],
371
- 26,
372
- '0xff0000ff'
373
- );
374
- missionObject['trig'] = tuple.tObject;
375
- missionObject['trigrules'] = tuple.trObject;
376
- mapResourceObject = tuple.mrObject;
326
+ scriptsArray.push({
327
+ folder: 'src',
328
+ scriptTitle: 'ATIS',
329
+ scripts: ['160-atis.lua'],
330
+ timing: 26,
331
+ color: '0xff0000ff'
332
+ });
377
333
  }
334
+ // injection des scripts A2A dans la file d'attente
378
335
  if ((/^y\b|o\b|yes\b|oui\b/i).test(prompt_result.inject_A2A)) {
379
336
  settingsArray.push(
380
337
  {
@@ -398,44 +355,38 @@ function injectScripts(jtffci, env_mission) {
398
355
  objectName: "InterceptConfig"
399
356
  },
400
357
  );
401
- tuple = jtffci.mizlib.injectLuaScriptsInMissionObject(
402
- missionObject['trig'],
403
- missionObject['trigrules'],
404
- mapResourceObject,
405
- 'Air To Air',
406
- ['170-cap_zone_training.lua', '172-cap_zone_war.lua', '173-fox_zone_training.lua', '176-random_air_traffic.lua', '178-training-intercept.lua'],
407
- 27,
408
- '0xff0000ff'
409
- );
410
- missionObject['trig'] = tuple.tObject;
411
- missionObject['trigrules'] = tuple.trObject;
412
- mapResourceObject = tuple.mrObject;
358
+ scriptsArray.push({
359
+ folder: 'src',
360
+ scriptTitle: 'Air To Air',
361
+ scripts: ['170-cap_zone_training.lua', '172-cap_zone_war.lua', '173-fox_zone_training.lua', '176-random_air_traffic.lua', '178-training-intercept.lua'],
362
+ timing: 27,
363
+ color: '0xff0000ff'
364
+ });
413
365
  }
366
+ // injection des CTLD dans la file d'attente
414
367
  if ((/^y\b|o\b|yes\b|oui\b/i).test(prompt_result.inject_Logistics)) {
415
368
  // injection des fichiers son CTLD
416
- await jtffci.mizlib.mizUpdateSingleSoundFolder(mizObject, 'CTLD');
369
+ await jtffci.mizlib.updateWorkspaceWithSingleSoundFolder(workspacePath, 'CTLD');
370
+ await jtffci.mizlib.injectSingleSoundFolderIntoZipObject(mizObject,workspacePath, 'CTLD');
417
371
  settingsArray.push(
418
372
  {
419
373
  file: "settings-logistics.lua",
420
374
  objectName: "CTLDConfig"
421
375
  },
422
376
  );
423
- tuple = jtffci.mizlib.injectLuaScriptsInMissionObject(
424
- missionObject['trig'],
425
- missionObject['trigrules'],
426
- mapResourceObject,
427
- 'Logistics',
428
- ['180-logistics.lua'],
429
- 28,
430
- '0xff0000ff'
431
- );
432
- missionObject['trig'] = tuple.tObject;
433
- missionObject['trigrules'] = tuple.trObject;
434
- mapResourceObject = tuple.mrObject;
377
+ scriptsArray.push({
378
+ folder: 'src',
379
+ scriptTitle: 'Logistics',
380
+ scripts: ['180-logistics.lua'],
381
+ timing: 28,
382
+ color: '0xff0000ff'
383
+ });
435
384
  }
385
+ // injection des scripts A2G dans la file d'attente
436
386
  if ((/^y\b|o\b|yes\b|oui\b/i).test(prompt_result.inject_A2G)) {
437
387
  // injection des fichiers son Range
438
- // await jtffci.mizlib.mizUpdateSingleSoundFolder(mizObject, 'RANGE');
388
+ await jtffci.mizlib.updateWorkspaceWithSingleSoundFolder(workspacePath, 'RANGE');
389
+ await jtffci.mizlib.injectSingleSoundFolderIntoZipObject(mizObject,workspacePath, 'RANGE');
439
390
  settingsArray.push(
440
391
  {
441
392
  file: "settings-ranges.lua",
@@ -462,140 +413,86 @@ function injectScripts(jtffci, env_mission) {
462
413
  objectName: "SkynetConfig"
463
414
  },
464
415
  );
465
- tuple = jtffci.mizlib.injectLuaScriptsInMissionObject(
466
- missionObject['trig'],
467
- missionObject['trigrules'],
468
- mapResourceObject,
469
- 'Air To Ground',
470
- ['190-ranges.lua', '191-sams.lua', '193-training_ranges.lua', '195-reaper-ondemand.lua', '196-fac_ranges.lua', '199-skynet.lua'],
471
- 29,
472
- '0xff0000ff'
473
- );
474
- missionObject['trig'] = tuple.tObject;
475
- missionObject['trigrules'] = tuple.trObject;
476
- mapResourceObject = tuple.mrObject;
416
+ scriptsArray.push({
417
+ folder: 'src',
418
+ scriptTitle: 'Air To Ground',
419
+ scripts: ['190-ranges.lua', '191-sams.lua', '193-training_ranges.lua', '195-reaper-ondemand.lua', '196-fac_ranges.lua', '199-skynet.lua'],
420
+ timing: 29,
421
+ color: '0xff0000ff'
422
+ });
477
423
  }
424
+ // injection du script spécifique de mission dans la file d'attente
478
425
  if ((/^y\b|o\b|yes\b|oui\b/i).test(prompt_result.inject_mission)) {
479
- // fs.copyFileSync('templates/src/200-mission.lua',
480
- // [
481
- // jtffci.config.general.missionFolder,
482
- // "/",
483
- // path.parse(env_mission).name,
484
- // "/src/200-mission.lua"
485
- // ].join("")
486
- // );
487
- // const zip = await jtffci.mizlib.getZipObjectFromMizPath([
488
- // jtffci.config.general.missionFolder,
489
- // "/",
490
- // path.parse(env_mission).name,
491
- // "/",
492
- // path.basename(env_mission)
493
- // ].join(""));
494
- //
495
- // jtffci.mizlib.injectFileIntoZipObject(zip, [
496
- // jtffci.config.general.missionFolder,
497
- // "/",
498
- // path.parse(env_mission).name,
499
- // "/src/200-mission.lua"
500
- // ].join("")
501
- // );
502
- // const inputZip = await zip.generateAsync({
503
- // type: 'nodebuffer',
504
- // streamFiles: true,
505
- // compression: "DEFLATE",
506
- // compressionOptions: {
507
- // level: 9
508
- // }
509
- // });
510
- // fs.writeFileSync([
511
- // jtffci.config.general.missionFolder,
512
- // "/",
513
- // path.parse(env_mission).name,
514
- // "/",
515
- // path.basename(env_mission)
516
- // ].join(""),
517
- // inputZip);
518
- tuple = jtffci.mizlib.injectLuaScriptsInMissionObject(
519
- missionObject['trig'],
520
- missionObject['trigrules'],
521
- mapResourceObject,
522
- 'Mission specific',
523
- ['200-mission.lua'],
524
- 30,
525
- '0xff0000ff'
426
+ scriptsArray.push({
427
+ folder: 'src',
428
+ scriptTitle: 'Mission specific',
429
+ scripts: ['200-mission.lua'],
430
+ timing: 30,
431
+ color: '0xff0000ff'
432
+ });
433
+ }
434
+ // traitement de la file d'attente des scripts (injection des triggers et des fichiers lua)
435
+ for ( script of scriptsArray) {
436
+ console.log(['adding script',script.scripts.join(' and '),'from',workspacePath + '/' + script.folder, 'folder...'].join(' '));
437
+ let {tuple, zipObject} = await jtffci.mizlib.injectLuaScriptIntoZipObjectAndUpdateWorkspace(
438
+ workspacePath,
439
+ script.folder,
440
+ script.scripts,
441
+ script.scriptTitle,
442
+ mizObject,
443
+ script.timing,
444
+ script.color
526
445
  );
527
446
  missionObject['trig'] = tuple.tObject;
528
447
  missionObject['trigrules'] = tuple.trObject;
529
448
  mapResourceObject = tuple.mrObject;
449
+ mizObject = zipObject;
530
450
  }
451
+ // injection des preset radio dans les avions humains
531
452
  if ((/^y\b|o\b|yes\b|oui\b/i).test(prompt_result.inject_radio_presets)) {
532
453
  // injection des preset radio
533
- console.log([
534
- jtffci.config.general.missionFolder,
535
- "/",
536
- path.parse(env_mission).name,
537
- "/",
538
- path.basename(env_mission)
539
- ].join("") + ": injecting radio presets declared in resources/radios/" + path.parse(env_mission).name);
540
- await jtffci.mizlib.mizUpdateRadioPresets(mizObject, 'resources/radios/' + path.parse(env_mission).name);
541
- }
542
- //injection du trigger des settings
543
- for (let settingsObject of settingsArray) {
544
- fs.copyFileSync(
545
- [
546
- 'templates/settings/',
547
- settingsObject.file
548
- ].join(""),
549
- [
550
- jtffci.config.general.missionFolder,
551
- "/",
552
- path.parse(env_mission).name,
553
- "/settings/",
554
- settingsObject.file
555
- ].join("")
556
- );
454
+ fs.mkdirSync(workspacePath + '/resources/radios',{recursive: true});
455
+ console.log(destinationMizFilePath + ": injecting radio presets declared in resources/radios/" + path.parse(env_mission).name);
456
+ await jtffci.mizlib.injectRadioPresetsFromFolderIntoZipObject(mizObject, workspacePath + '/resources/radios');
557
457
  }
558
- await jtffci.mizlib.injectLuaSettingsFromFolderPathToZipObject(mizObject,
559
- [
560
- jtffci.config.general.missionFolder,
561
- "/",
562
- path.parse(env_mission).name,
563
- "/settings"
564
- ].join("")
565
- );
458
+ // traitement de la file d'attente des settings (injection des triggers et des fichiers lua)
566
459
  if (settingsArray.length > 0) {
567
- tuple = jtffci.mizlib.injectLuaScriptsInMissionObject(
568
- missionObject['trig'],
569
- missionObject['trigrules'],
570
- mapResourceObject,
460
+ console.log(['adding settings files',settingsArray.map(a => a.file).join(' and '),'from',workspacePath + '/settings', 'folder...'].join(' '));
461
+ let {tuple, zipObject} = await jtffci.mizlib.injectLuaScriptIntoZipObjectAndUpdateWorkspace(
462
+ workspacePath,
463
+ 'settings',
464
+ settingsArray.map(a => a.file),
571
465
  'Mission Settings',
572
- settingsArray.map(settingsObject => settingsObject.file),
466
+ mizObject,
573
467
  15,
574
468
  '0xffff00ff'
575
469
  );
576
470
  missionObject['trig'] = tuple.tObject;
577
471
  missionObject['trigrules'] = tuple.trObject;
578
472
  mapResourceObject = tuple.mrObject;
473
+ mizObject = zipObject;
579
474
  }
475
+ // creation du cichier miz dans l'espace de travail
476
+ await fs.closeSync(fs.openSync(destinationMizFilePath, 'a'));
477
+ // On fait une sauvegarde dans le folder de destination
478
+ fs.writeFileSync(
479
+ destinationMizFilePath,
480
+ await mizObject.generateAsync({
481
+ type: 'nodebuffer',
482
+ streamFiles: true,
483
+ compression: "DEFLATE",
484
+ compressionOptions: {
485
+ level: 9
486
+ }
487
+ })
488
+ );
580
489
  // Sauvegarde de la mission avec scripts injectés
581
490
  await jtffci.mizlib.mizInjectMissionDataFile(
582
- [
583
- jtffci.config.general.missionFolder,
584
- "/",
585
- path.parse(env_mission).name,
586
- "/",
587
- path.basename(env_mission)
588
- ].join(""),
491
+ destinationMizFilePath,
589
492
  { mission: missionObject }
590
493
  );
591
494
  await jtffci.mizlib.mizInjectMapResourceFile(
592
- [
593
- jtffci.config.general.missionFolder,
594
- "/",
595
- path.parse(env_mission).name,
596
- "/",
597
- path.basename(env_mission)
598
- ].join(""),
495
+ destinationMizFilePath,
599
496
  { mapResource: mapResourceObject }
600
497
  );
601
498
  console.log('...Done...');