better JSON serializer
This commit is contained in:
parent
3ed203b662
commit
e5d946ba20
2 changed files with 32 additions and 15 deletions
36
game.js
36
game.js
|
@ -19,7 +19,12 @@ class Game extends GameBasic {
|
||||||
for (let entity of entities) {
|
for (let entity of entities) {
|
||||||
entity.pos = { x: Math.round(entity.pos.x), y: Math.round(entity.pos.y) };
|
entity.pos = { x: Math.round(entity.pos.x), y: Math.round(entity.pos.y) };
|
||||||
entity.vel = { x: Math.round(entity.vel.x), y: Math.round(entity.vel.y) };
|
entity.vel = { x: Math.round(entity.vel.x), y: Math.round(entity.vel.y) };
|
||||||
entList.push(entity);
|
|
||||||
|
let props = entity.serverProps;
|
||||||
|
let basic = props.map(prop => entity[prop]);
|
||||||
|
let str = JSON.stringify(basic);
|
||||||
|
|
||||||
|
entList.push({ entity, str, basic });
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entList.length == 0) return;
|
if (entList.length == 0) return;
|
||||||
|
@ -28,28 +33,37 @@ class Game extends GameBasic {
|
||||||
if (!client.active) continue;
|
if (!client.active) continue;
|
||||||
|
|
||||||
let wsEnt = client.ent;
|
let wsEnt = client.ent;
|
||||||
wsEnt.isYou = true;
|
|
||||||
if (!wsEnt) continue;
|
if (!wsEnt) continue;
|
||||||
|
|
||||||
|
wsEnt.isYou = true;
|
||||||
|
|
||||||
let filtered;
|
let filtered;
|
||||||
|
|
||||||
if (!full) {
|
if (!full) {
|
||||||
filtered = entList.filter((ent) =>
|
filtered = entList.filter(({ entity: ent }) => {
|
||||||
(Math.sqrt(((ent.pos.x - wsEnt.pos.x) ** 2) + ((ent.pos.y - wsEnt.pos.y) ** 2))) < 777
|
return Math.sqrt((ent.pos.x - wsEnt.pos.x) ** 2 + (ent.pos.y - wsEnt.pos.y) ** 2) < 777
|
||||||
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
filtered = entList;
|
filtered = entList;
|
||||||
}
|
}
|
||||||
|
|
||||||
filtered= filtered.map(x => {
|
let na = [];
|
||||||
let props = x.serverProps;
|
for (let i in filtered) {
|
||||||
return props.map(prop => x[prop]);
|
let fi = filtered[i]
|
||||||
});
|
|
||||||
|
|
||||||
filtered.push([this.width,this.height])
|
na.push(fi.str)
|
||||||
|
if (fi.entity.isYou) {
|
||||||
|
let narr = [... fi.basic];
|
||||||
|
narr[fi.entity.serverProps.indexOf('isYou')] = 'true';
|
||||||
|
na[na.length - 1] = JSON.stringify(narr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
client.send(JSON.stringify(filtered));
|
na.push(JSON.stringify([this.width, this.height]))
|
||||||
|
|
||||||
|
client.send(`[${na.join(',')}]`);
|
||||||
|
|
||||||
wsEnt.isYou = false;
|
wsEnt.isYou = false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -147,13 +147,17 @@ class Game extends GameBasic {
|
||||||
let that = this;
|
let that = this;
|
||||||
|
|
||||||
let entList = JSON.parse(data);
|
let entList = JSON.parse(data);
|
||||||
entList = entList.map((y, i) => {
|
entList = entList.map((j, i) => {
|
||||||
if (i == entList.length - 1) {
|
if (i == entList.length - 1) {
|
||||||
that.width = y[0];
|
that.width = j[0];
|
||||||
that.height = y[1];
|
that.height = j[1];
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!j) return undefined;
|
||||||
|
|
||||||
|
let y = j; //(typeof j == 'string') ? JSON.parse(j) : j;
|
||||||
|
|
||||||
let type = (Object.keys(legalTypes).indexOf(y[0]) == -1) ? Player : legalTypes[y[0]];
|
let type = (Object.keys(legalTypes).indexOf(y[0]) == -1) ? Player : legalTypes[y[0]];
|
||||||
|
|
||||||
let props = new type().serverProps;
|
let props = new type().serverProps;
|
||||||
|
@ -186,7 +190,6 @@ class Game extends GameBasic {
|
||||||
|
|
||||||
let matchingPlayer = entList.filter(x => x && x.you == you)
|
let matchingPlayer = entList.filter(x => x && x.you == you)
|
||||||
|
|
||||||
|
|
||||||
if (matchingPlayer.length == 0) {
|
if (matchingPlayer.length == 0) {
|
||||||
matchingPlayer = entList.filter(x => x && x.isYou);
|
matchingPlayer = entList.filter(x => x && x.isYou);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue