Ejemplo n.º 1
0
function handleWsMessage(msg) {
    var offset = 0;
    240 === msg.getUint8(offset) && (offset += 5);
    switch (msg.getUint8(offset++)) {
        case 16: // update nodes
            updateNodes(msg, offset);
            break;
        case 17: // update position
            posX = msg.getFloat32(offset, true);
            offset += 4;
            posY = msg.getFloat32(offset, true);
            offset += 4;
            posSize = msg.getFloat32(offset, true);
            break;
        case 20: // clear nodes
            gg.playerCells = [];
            gg.nodesOnScreen = [];
            break;
        case 21: // draw line
            lineX = msg.getInt16(offset, true);
            offset += 2;
            lineY = msg.getInt16(offset, true);
            if (!drawLine) {
                drawLine = true;
                drawLineX = lineX;
                drawLineY = lineY;
            }
            break;
        case 32: // add node
            gg.nodesOnScreen.push(msg.getUint32(offset, true));
            break;
        case 64: // set border
            gg.leftPos = msg.getFloat64(offset, true);
            offset += 8;
            gg.topPos = msg.getFloat64(offset, true);
            offset += 8;
            gg.rightPos = msg.getFloat64(offset, true);
            offset += 8;
            gg.bottomPos = msg.getFloat64(offset, true);
            posX = (gg.rightPos + gg.leftPos) / 2;
            posY = (gg.bottomPos + gg.topPos) / 2;
            posSize = 1;
            if (0 === gg.playerCells.length) {
                gg.nodeX = posX;
                gg.nodeY = posY;
                gg.viewZoom = posSize;
            }
            break;
    }
}
Ejemplo n.º 2
0
function updateNodes(view, offset) {
    gg.timestamp = +new Date;
    var code = Math.random();
    gg.ua = false;
    var queueLength = view.getUint16(offset, true);
    offset += 2;
    for (var i = 0; i < queueLength; ++i) {
        var killer = gg.nodes[view.getUint32(offset, true)],
            killedNode = gg.nodes[view.getUint32(offset + 4, true)];
        offset += 8;
        if (killer && killedNode) {
            killedNode.destroy();
            killedNode.ox = killedNode.x;
            killedNode.oy = killedNode.y;
            killedNode.oSize = killedNode.size;
            killedNode.nx = killer.x;
            killedNode.ny = killer.y;
            killedNode.nSize = killedNode.size;
            killedNode.updateTime = gg.timestamp;
        }
    }
    var i2 = 0;
    while (true) {
        var nodeid = view.getUint32(offset, true);
        offset += 4;
        if (0 === nodeid) break;
        ++i2;
        var size: number, posY: number,
            posX = view.getInt16(offset, true);
        offset += 2;
        posY = view.getInt16(offset, true);
        offset += 2;
        size = view.getInt16(offset, true);
        offset += 2;
        var r = view.getUint8(offset++);
        var g: number = view.getUint8(offset++);
        var b = view.getUint8(offset++);
        var color = (r << 16 | g << 8 | b).toString(16);
        for (; 6 > color.length;) color = `0${color}`;
        var colorstr = `#${color}`,
            flags = view.getUint8(offset++),
            flagVirus = !!(flags & 1),
            flagAgitated = !!(flags & 16);
        flags & 2 && (offset += 4);
        flags & 4 && (offset += 8);
        flags & 8 && (offset += 16);
        var name = "";
        for (; ;) {
            var char = view.getUint16(offset, true);
            offset += 2;
            if (0 === char) break;
            name += String.fromCharCode(char);
        }
        var node: Cell = null;
        if (gg.nodes.hasOwnProperty(nodeid)) {
            node = gg.nodes[nodeid];
            node.updatePos();
            node.ox = node.x;
            node.oy = node.y;
            node.oSize = node.size;
            node.color = colorstr;
        } else {
            node = new Cell(
                nodeid, posX, posY,
                size, colorstr, name);
            gg.nodelist.push(node);
            gg.nodes[nodeid] = node;
            //node.ka = posX;
            //node.la = posY;
        }
        node.isVirus = flagVirus;
        node.isAgitated = flagAgitated;
        node.nx = posX;
        node.ny = posY;
        node.nSize = size;
        node.updateCode = code;
        node.updateTime = gg.timestamp;
        node.flag = flags;
        // name && node.setName(name);
        if (-1 !== gg.nodesOnScreen.indexOf(nodeid) && -1 === gg.playerCells.indexOf(node)) {
            document.getElementById("overlays").style.display = "none";
            gg.playerCells.push(node);
            if (1 === gg.playerCells.length) {
                gg.nodeX = node.x;
                gg.nodeY = node.y;
            }
        }
    }
    queueLength = view.getUint32(offset, true);
    offset += 4;
    for (var i1 = 0; i1 < queueLength; i1++) {
        var nodeId = view.getUint32(offset, true);
        offset += 4;
        var node1 = gg.nodes[nodeId];
        null != node1 && node1.destroy();
    }
}