flying-squid/src/lib/plugins/communication.js

46 lines
No EOL
1.6 KiB
JavaScript

module.exports.server=function(serv)
{
serv._writeAll= (packetName, packetFields) =>
serv.players.forEach((player) => player._client.write(packetName, packetFields));
serv._writeArray= (packetName, packetFields, players) =>
players.forEach((player) =>player._client.write(packetName, packetFields));
serv._writeNearby= (packetName, packetFields, loc) =>
serv._writeArray(packetName, packetFields, serv.getNearby(loc));
serv.getNearby= ({world,position,radius=8*16*32}) => serv.players.filter( player =>
player.world == world &&
player.entity.position.distanceTo(position) <= radius
);
serv.getNearbyEntities= ({world,position,radius=8*16*32}) => Object.keys(serv.entities)
.map(eId => serv.entities[eId])
.filter(entity =>
entity.world == world &&
entity.position.distanceTo(position) <= radius
);
};
module.exports.player=function(player,serv)
{
player._writeOthers= (packetName, packetFields) =>
player
.getOthers()
.forEach((otherPlayer) => otherPlayer._client.write(packetName, packetFields));
player._writeOthersNearby = (packetName, packetFields) =>
serv._writeArray(packetName, packetFields, player.nearbyPlayers());
player.getOthers = () => serv.players.filter((otherPlayer) => otherPlayer != player);
player.getNearbyPlayers = (radius=player.entity.viewDistance*32) => serv.getNearby({
world: player.world,
position: player.position,
radius: radius
});
player.nearbyPlayers = (radius=player.entity.viewDistance*32) => player.entity.nearbyEntities
.filter(e => e.type == 'player')
.map(e => e.player);
};