Переглянути джерело

opaque hiders

tags/v0.3.0
big bad waffle 6 роки тому
джерело
коміт
e9fcfa1527
4 змінених файлів з 282 додано та 145 видалено
  1. BIN
     
  2. +19
    -9
      src/client/js/rendering/renderer.js
  3. +230
    -78
      src/server/config/maps/fjolarok/map.json
  4. +33
    -58
      src/server/world/map.js

+ 19
- 9
src/client/js/rendering/renderer.js Переглянути файл

@@ -413,16 +413,21 @@ define([
this.hiddenRooms.forEach(function (h) {
h.container = new pixi.Container();
this.layers.hiders.addChild(h.container);
this.buildRectangle({
x: h.x * scale,
y: h.y * scale,
w: h.width * scale,
h: h.height * scale,
color: 0x2d2136,
parent: h.container
});
for (var i = h.x; i < h.x + h.width; i++) {
for (var j = h.y; j < h.y + h.height; j++) {
if (!physics.isInPolygon(i, j, h.area))
continue;

this.buildRectangle({
x: i * scale,
y: j * scale,
w: scale,
h: scale,
color: 0x2d2136,
alpha: (h.fog == 1) ? 0.8 : 1,
parent: h.container
});

[hiddenTiles, hiddenWalls].forEach(function (k) {
var cell = k[i][j];
if (cell == 0)
@@ -449,12 +454,17 @@ define([
var hLen = hiddenRooms.length;
for (var i = 0; i < hLen; i++) {
var h = hiddenRooms[i];
h.container.visible = (
var visible = (
(x < h.x) ||
(x >= h.x + h.width) ||
(y < h.y) ||
(y >= h.y + h.height)
);

if (!visible)
visible = !physics.isInPolygon(x, y, h.area);

h.container.visible = visible;
}
},



+ 230
- 78
src/server/config/maps/fjolarok/map.json
Різницю між файлами не показано, бо вона завелика
Переглянути файл


+ 33
- 58
src/server/world/map.js Переглянути файл

@@ -363,6 +363,35 @@ define([
} else if (cell.width == 24)
blueprint.x++;

if (cell.polyline) {
var lowX = this.size.w;
var lowY = this.size.h;
var highX = 0;
var highY = 0;

blueprint.area = cell.polyline.map(function (v) {
var x = ~~((v.x + cell.x) / mapScale);
var y = ~~((v.y + cell.y) / mapScale);

if (x < lowX)
lowX = x;
if (x > highX)
highX = x;

if (y < lowY)
lowY = y;
if (y > highY)
highY = y;

return [x, y];
});

blueprint.x = lowX;
blueprint.y = lowY;
blueprint.width = (highX - lowX);
blueprint.height = (highY - lowY);
}

if (layerName == 'rooms') {
if (blueprint.properties.exit) {
var room = this.rooms.find(function (r) {
@@ -383,38 +412,11 @@ define([
this.rooms.push(blueprint);
}
} else if (layerName == 'hiddenRooms') {
blueprint.fog = (cell.properties || {}).fog;
console.log(blueprint.fog);
this.hiddenRooms.push(blueprint);
} else if (!clientObj) {
if (cell.polyline) {
var lowX = this.size.w;
var lowY = this.size.h;
var highX = 0;
var highY = 0;

blueprint.area = cell.polyline.map(function (v) {
var x = ~~((v.x + cell.x) / mapScale);
var y = ~~((v.y + cell.y) / mapScale);

if (x < lowX)
lowX = x;
if (x > highX)
highX = x;

if (y < lowY)
lowY = y;
if (y > highY)
highY = y;

return [x, y];
});

blueprint.x = lowX;
blueprint.y = lowY;
blueprint.width = (highX - lowX);
blueprint.height = (highY - lowY);

spawners.register(blueprint, blueprint.spawnCd || mapFile.properties.spawnCd);
} else if (!mapFile.properties.isRandom)
if (!mapFile.properties.isRandom)
spawners.register(blueprint, blueprint.spawnCd || mapFile.properties.spawnCd);
else {
var room = this.rooms.find(function (r) {
@@ -428,34 +430,7 @@ define([
room.objects.push(blueprint);
}
} else {
if (cell.polyline) {
var lowX = this.size.w;
var lowY = this.size.h;
var highX = 0;
var highY = 0;

blueprint.area = cell.polyline.map(function (v) {
var x = ~~((v.x + cell.x) / mapScale);
var y = ~~((v.y + cell.y) / mapScale);

if (x < lowX)
lowX = x;
if (x > highX)
highX = x;

if (y < lowY)
lowY = y;
if (y > highY)
highY = y;

return [x, y];
});

blueprint.x = lowX;
blueprint.y = lowY;
blueprint.width = (highX - lowX);
blueprint.height = (highY - lowY);
} else if (cell.width) {
if ((cell.width) && (!cell.polyline)) {
blueprint.width = cell.width / mapScale;
blueprint.height = cell.height / mapScale;
}


Завантаження…
Відмінити
Зберегти