Browse Source

feat #1740: First version of events done

tags/v0.10.0^2
Shaun 2 years ago
parent
commit
6aeb635ebf
5 changed files with 111 additions and 26 deletions
  1. +8
    -1
      src/client/js/components/player.js
  2. +40
    -0
      src/client/js/rendering/renderer.js
  3. +1
    -1
      src/server/misc/mods.js
  4. +15
    -3
      src/server/objects/objects.js
  5. +47
    -21
      src/server/world/map.js

+ 8
- 1
src/client/js/components/player.js View File

@@ -36,11 +36,18 @@ define([
},

extend: function (blueprint) {
let collisionChanges = blueprint.collisionChanges;
const { collisionChanges, mapChanges } = blueprint;
delete blueprint.collisionChanges;
delete blueprint.mapChanges;

if (collisionChanges)
collisionChanges.forEach(c => physics.setCollision(c));

if (mapChanges) {
mapChanges.forEach(({ x, y, mapCellString }) => {
renderer.updateMapAtPosition(x, y, mapCellString);
});
}
},

update: function () {


+ 40
- 0
src/client/js/rendering/renderer.js View File

@@ -843,6 +843,46 @@ define([
this.moveSpeedInc = 0.2 + (((maxValue - factor) / maxValue) * 0.3);
},

updateMapAtPosition: function (x, y, mapCellString) {
const { map, sprites, layers: { tileSprites: container } } = this;

const row = sprites[x];
if (!row)
return;

const cell = row[y];
if (!cell)
return;

cell.forEach(c => {
c.visible = false;
spritePool.store(c);
});

cell.length = 0;

map[x][y] = mapCellString.split(',');

map[x][y].forEach(m => {
m--;
let tile = spritePool.getSprite(m);
if (!tile) {
tile = this.buildTile(m, x, y);
container.addChild(tile);
tile.type = m;
tile.sheetNum = tileOpacity.getSheetNum(m);
} else {
tile.position.x = x * scale;
tile.position.y = y * scale;
tile.visible = true;
}

cell.push(tile);
cell.visible = true;
});
},

render: function () {
if (!this.stage)
return;


+ 1
- 1
src/server/misc/mods.js View File

@@ -49,7 +49,7 @@ module.exports = {
if (mod.disabled)
return;

const isMapThread = global.instancer;
const isMapThread = !!global.instancer;
mod.isMapThread = isMapThread;

mod.events = events;


+ 15
- 3
src/server/objects/objects.js View File

@@ -293,9 +293,21 @@ module.exports = {
.filter(o => o.player)
.forEach(function (o) {
o.syncer.setArray(true, 'player', 'collisionChanges', {
x: x,
y: y,
collides: collides
x,
y,
collides
});
});
},

notifyMapChange: function (x, y, mapCellString) {
this.objects
.filter(o => o.player)
.forEach(function (o) {
o.syncer.setArray(true, 'player', 'mapChanges', {
x,
y,
mapCellString
});
});
},


+ 47
- 21
src/server/world/map.js View File

@@ -153,7 +153,19 @@ module.exports = {
let newCell = '';
for (let k = 0; k < cLen; k++) {
let c = cell[k];
let newC = this.randomMap.randomizeTile(c);
let newC = c;

//Randomize tile
const msgBeforeRandomizePosition = {
success: true,
x: i,
y: j,
map: this.name
};
events.emit('onBeforeRandomizePosition', msgBeforeRandomizePosition);
if (msgBeforeRandomizePosition.success)
newC = this.randomMap.randomizeTile(c);

newCell += newC;

//Wall?
@@ -235,7 +247,7 @@ module.exports = {

this.oldLayers.tiles = _.get2dArray(w, h, 0);
this.oldLayers.walls = _.get2dArray(w, h, 0);
this.oldLayers.objects = _.get2dArray(w, h, 0);
this.oldLayers.doodads = _.get2dArray(w, h, 0);

let builders = {
tile: this.builders.tile.bind(this),
@@ -244,16 +256,18 @@ module.exports = {

this.collisionMap = _.get2dArray(w, h);

const layers = [...mapFile.layers.filter(l => l.objects), ...mapFile.layers.filter(l => !l.objects)];

//Rooms need to be ahead of exits
mapFile.layers.rooms = (mapFile.layers.rooms || [])
layers.rooms = (layers.rooms || [])
.sort(function (a, b) {
if ((a.exit) && (!b.exit))
return 1;
return 0;
});

for (let i = 0; i < mapFile.layers.length; i++) {
let layer = mapFile.layers[i];
for (let i = 0; i < layers.length; i++) {
let layer = layers[i];
let layerName = layer.name;
if (!layer.visible)
continue;
@@ -264,8 +278,10 @@ module.exports = {
map: this.name,
layer: layerName,
objects: data,
mapScale
mapScale,
size: this.size
};

events.emit('onAfterGetLayerObjects', info);
}

@@ -281,18 +297,20 @@ module.exports = {
for (let y = 0; y < h; y++) {
let index = (y * oldW) + x;

const info = {
const msgBuild = {
map: this.name,
layer: layerName,
sheetName: null,
cell: 0,
x,
y
};
if (x < oldW && y < oldH)
info.cell = data[index];
msgBuild.cell = data[index];

events.emit('onBeforeBuildLayerTile', info);
builders.tile(info);
events.emit('onBeforeBuildLayerTile', msgBuild);
const tile = builders.tile(msgBuild);
events.emit('onAfterBuildLayerTile', msgBuild);
}
}
}
@@ -319,7 +337,8 @@ module.exports = {
x,
y,
layerName,
tilesets: mapFile.tilesets
tilesets: mapFile.tilesets,
sheetName: null
};
events.emit('onBeforeGetCellInfo', cellInfoMsg);

@@ -333,16 +352,19 @@ module.exports = {
}

let firstGid = 0;
let sheetName = null;
for (let s = 0; s < tilesets.length; s++) {
let tileset = tilesets[s];
if (tileset.firstgid <= gid) {
sheetName = tileset.name;
firstGid = tileset.firstgid;
let sheetName = cellInfoMsg.sheetName;

if (!sheetName) {
for (let s = 0; s < tilesets.length; s++) {
let tileset = tilesets[s];
if (tileset.firstgid <= gid) {
sheetName = tileset.name;
firstGid = tileset.firstgid;
}
}
}

gid = gid - firstGid + 1;
gid = gid - firstGid + 1;
}

return {
cell: gid,
@@ -353,7 +375,7 @@ module.exports = {

builders: {
tile: function (info) {
let { x, y, cell, layer: layerName } = info;
let { x, y, cell, layer: layerName, sheetName } = info;

if (cell === 0) {
if (layerName === 'tiles')
@@ -363,7 +385,10 @@ module.exports = {
}

let cellInfo = this.getCellInfo(cell, x, y, layerName);
let sheetName = cellInfo.sheetName;
if (!sheetName) {
info.sheetName = cellInfo.sheetName;
sheetName = cellInfo.sheetName;
}

const offsetCell = this.getOffsetCellPos(sheetName, cellInfo.cell);

@@ -406,6 +431,7 @@ module.exports = {
}

let blueprint = {
id: cell.properties.id,
clientObj: clientObj,
sheetName: cell.has('sheetName') ? cell.sheetName : cellInfo.sheetName,
cell: cell.has('cell') ? cell.cell : cellInfo.cell - 1,


Loading…
Cancel
Save