Risistemando i miei plugin mi sono imbattuto in un limite di Construct 3: non è possibile personalizzare il file HTML. Il che non è un gran problema, a dire il vero, perché si può sempre editare con un qualsiasi editor. Però, soprattutto in fase di sviluppo, diventa una faccenda noiosa e anche ripetitiva. Per fortuna è possibile automatizzare il tutto.

Per farlo è sufficiente utilizzare un semplice script JS:

const configJSON = await runtime.assets.fetchJson("config.json");

Object.entries(configJSON).forEach(([tag, value]) => {
	value.forEach(el => {
    	let stringHTML = `<${tag} ` ;
        Object.entries(el).forEach(([k, v]) => {
			stringHTML += ` ${k}='${v}'`;
        });
        stringHTML += ` />`;
        document.head.insertAdjacentHTML('beforeend', stringHTML);
     });
});

Cosa fa?

Allora, vediamo le cose principali:

const configJSON = await runtime.assets.fetchJson("config.json");

Carica il contenuto del file config.json dentro una variabile di tipo CONST.

Object.entries(oggettoJSON).forEach( ([chiave, valore]) ==> {
  console.log(chiave, valore);
});

Questo pezzetto di codice scorre tutto l’oggetto JSON e permette di lavorare su ogni chiave dell’oggetto.

document.head.insertAdjacentHTML('beforeend', stringHTML);

Con questo inserisco una stringa html subito prima del tag di chiusura dell’elemento selezionato (nel DOM); in questo caso prima di chiudere l’HEAD.

Unendo questi tre pezzetti si può ottenere, in pratica, un semplice codice che scorre un file config.json scritto nella forma:

{
	"meta": [
		{
			"name": "description",
			"content": "Demo Plugin - Construct 3"
		},
		{
			"name": "author",
			"content": "Strani Anelli"
		}
	],
	"base": [
		{
			"href": "https://c3plugins.stranianelli.com/"
		}
	]
}

per inserire dentro l’head

<meta name="description" content="Demo Plugin - Construct 3">
<meta name="author" content="Strani Anelli">
<base href="https://c3plugins.stranianelli.com/">

Ovviamente questo permette di modificare il file HTML durante l’esecuzione del progetto (non necessariamente un gioco). Questo è il suo limite principale, perché impedisce di usare con efficacia questa tecnica per aggiungere elementi Open Graph.

Ovviamente, questo è il link al file C3P con un progetto demo.