|
- module.exports = {
- instance: null,
- ent: null,
- tiles: [],
- oldTiles: {},
-
- load: function (instance, objToAdd, callback) {
- this.instance = instance;
-
- this.ent = instance.mapName + '-' + objToAdd.components.find(c => c.type === 'auth').username;
-
- io.get({
- ent: this.ent,
- field: 'customMap',
- callback: this.onLoad.bind(this, callback)
- });
- },
-
- onLoad: function (callback, result) {
- this.tiles = JSON.parse(result || '[]');
- this.build(callback);
- },
-
- save: async function () {
- await io.setAsync({
- key: this.ent,
- table: 'customMap',
- value: this.tiles,
- serialize: true
- });
- },
-
- build: function (callback) {
- this.tiles.forEach(function (t) {
- t = t.split('|');
- this.customize(t[0], t[1], t[2], true);
- }, this);
-
- this.save();
-
- callback();
- },
-
- customize: function (x, y, tile, noStore) {
- let action = null;
- if (arguments.length === 1) {
- action = x;
- let obj = action.obj;
- tile = action.tile;
- x = obj.x;
- y = obj.y;
-
- if (action.destroy) {
- x += action.direction.x;
- y += action.direction.y;
- }
- }
-
- let collide = true;
-
- if (!noStore) {
- let exists = this.tiles.find(function (t) {
- t = t.split('|');
- if ((t[0] === x) && (t[1] === y))
- return true;
- });
- if (exists) {
- tile = this.oldTiles[x + '|' + y];
- collide = false;
-
- this.tiles.spliceWhere(t => t === exists);
- } else if (this.instance.map.clientMap.collisionMap[x][y]) {
- //Can't build on natural collisions
- return;
- } else
- this.tiles.push(x + '|' + y + '|' + tile);
- }
-
- if ((collide) && (!this.oldTiles[x + '|' + y])) {
- let oldTile = this.instance.map.clientMap.map[x][y];
- this.oldTiles[x + '|' + y] = oldTile - 1;
- }
-
- this.instance.map.clientMap.map[x][y] = tile;
-
- this.instance.map.clientMap.collisionMap[x][y] = collide;
- this.instance.physics.graph.grid[x][y] = !collide;
-
- if (!noStore)
- this.save();
-
- if (action) {
- action.result = {
- x: x,
- y: y,
- tile: tile,
- collide: collide
- };
- }
- },
-
- placeTile: function (obj) {
- this.customize(obj.x, obj.y, 52);
- }
- };
|