SquadJS/squad-server/layers/layers.js
2021-02-25 17:38:00 +00:00

62 lines
1.4 KiB
JavaScript

import axios from 'axios';
import Logger from 'core/logger';
import Layer from './layer.js';
class Layers {
constructor() {
this.layers = [];
this.pulled = false;
}
async pull(force = false) {
if (this.pulled && !force) {
Logger.verbose('Layers', 1, 'Already pulled layers.');
return;
}
this.layers = [];
try {
Logger.verbose('Layers', 1, 'Pulling layers...');
const response = await axios.get(
'https://raw.githubusercontent.com/Squad-Wiki-Editorial/squad-wiki-pipeline-map-data/dev/completed_output/2.0/finished_2.0.json'
);
for (const layer of response.data.Maps) {
this.layers.push(new Layer(layer));
}
Logger.verbose('Layers', 1, `Pulled ${this.layers.length} layers.`);
this.pulled = true;
} catch (error) {
Logger.verbose('Layers', 1, `Error pulling layers: ${error.message}`);
Logger.verbose('Layers', 3, 'ERROR:', error);
}
return this.layers;
}
async getLayerByCondition(condition) {
await this.pull();
const matches = this.layers.filter(condition);
if (matches.length === 1) return matches[0];
return null;
}
getLayerByName(name) {
return this.getLayerByCondition((layer) => layer.name === name);
}
getLayerByClassname(classname) {
return this.getLayerByCondition((layer) => layer.classname === classname);
}
}
export default new Layers();