var http = require('http'), io = require('socket.io'), fs = require('fs'), Box2D = require('./box2d.js'); eval(fs.readFileSync('common.js') + ''); var clients = []; var lastIntervalTime = new Date().getTime(); function update() { var newTime = new Date().getTime() //console.log(newTime - lastIntervalTime); lastIntervalTime = newTime; world.Step(1 / 60, 10, 10); world.ClearForces(); } function updateWorld(client) { var body = world.GetBodyList(); var update = {}; var isUpdateNeeded = false; do { var userData = body.GetUserData(); if(userData && userData.bodyId && body.IsAwake()){ update[userData.bodyId] = { p: body.GetPosition(), a: body.GetAngle(), lv: body.GetLinearVelocity(), av: body.GetAngularVelocity() }; isUpdateNeeded = true; } } while (body = body.GetNext()); if(isUpdateNeeded) { sendToClients('world-update', update, null); } } function updateWithBodies(bodies) { var update = {}; var isUpdateNeeded = false; for(var b in bodies) { var body = bodies[b]; //console.log(body); var userData = body.GetUserData(); if(userData && userData.bodyId && body.IsAwake()){ update[userData.bodyId] = { p: body.GetPosition(), a: body.GetAngle(), lv: body.GetLinearVelocity(), av: body.GetAngularVelocity() }; isUpdateNeeded = true; } } if(isUpdateNeeded) { sendToClients('world-update', update); } } function sendToClients(message, data, except) { var packet = { m: message, d: data } for (var i = 0; i < clients.length; i++) { if(clients[i] != except) { clients[i].send(JSON.stringify(packet)); } } } function pong(client, data) { var packet = { m: 'pong', d: data } client.send(JSON.stringify(packet)); } // Set Gravity here setupWorld(0); //world.SetContactListener(createCollisionDetector()); // Box2D Engine step configuration setInterval(update, 1000 / 60); // Send world update to client every 32 ms setInterval(updateWorld, 32); // Setting up socket var server = http.createServer( function(req, res){ res.writeHead(200, {'Content-Type': 'text/html'}); res.end('