Ceci est une ancienne révision du document !
Daphné Chamot-Rooke (contact : daphne.chamot-rooke@etu.upmc.fr)
Himany Seri (contact : himany.seri@etu.upmc.fr)
Début : Février 2019
Fin : mai 2019
Objectif : créer un dispositif qui modifie la perception d'autrui
Matériel :
De nos jours l’étude des mouvements de foule permet de simuler la mécanique des foule : ses mouvements semblables à la physique des fluides et sa psychologie sociale. Dans de nombreuses situations nous avons affaire à des mouvements de foule, que ce soit dans des concerts, des conventions, des manifestations, et même sur les réseaux sociaux.
Comment l’individu influence-t-il la foule et comment celle-ci influence telle l’individu ? Comment initie-t-on un mouvement de foule ?
Nous avons décidé d'orienter notre projet sur comment percevoir la foule et comment *se* percevoir dans la foule. Les mécanismes de l'individu à la foule sont en effet des allers-retours, comme lors d'un croisement de regard.
Nous avions d'abord pensé à travailler sur les émotions, les émotions dans la foule. Nous avions eu l'idée d'un bracelet retranscrivant l'émotion globale de la foule. Puis nous nous sommes orientées vers des applications, car cela nous semblait plus réalisable pour travailler avec de nombreuses personnes. Nous avons choisi de créer un programme pour ordinateur, un jeu multijoueur qui permettrait de retranscrire des mouvements de foule.
Notre jeu se compose d'un avatar représentant soi-même à la 3e personne, vu du dessus. Un “monstre” invisible “mange” les avatars lorsqu'il croise leur chemin. Il faut donc faire attention à son entourage, suivre les autres.
Nous voulons faire plusieurs “salles” avec plusieurs consignes, peut-être en faire une où l'on se voit à la première personne, et une autre avec des consignes différentes pour chaque individu afin de créer un tout avec l'action de chaque individu.
Code JavaScript pour le serveur :
//this code is based on https://github.com/CodingTrain/website/tree/master/CodingChallenges/CC_032.2_agar.io_sockets/Node var blobs = []; //liste pour stocker les blobs function Blob(id, x, y) { //définit l'objet blob this.id = id; this.x = x; this.y = y; } var monstres = []; //liste pour stocker les monstres function Monster (xm, ym) { //définit l'objet monstre this.xm = xm; this.ym = ym; } // Using express: http://expressjs.com/ var express = require('express'); // Create the app var app = express(); // Set up the server // process.env.PORT is related to deploying on heroku var server = app.listen(process.env.PORT || 3000, listen); // This call back just tells us that the server has started function listen() { var host = server.address().address; var port = server.address().port; console.log('Example app listening at http://' + host + ':' + port); } app.use(express.static('public')); // WebSocket Portion // WebSockets work with the HTTP server var io = require('socket.io')(server); setInterval(heartbeat, 33); function heartbeat() { io.sockets.emit('heartbeat_blobs', blobs); io.sockets.emit('heartbeat_monstre', monstres); } // Register a callback function to run when we have an individual connection // This is run for each individual user that connects io.sockets.on('connection', // We are given a websocket object in our function function(socket) { console.log("We have a new client: " + socket.id); socket.on('start_blobs', function(data) { console.log(socket.id + " " + data.x + " " + data.y); socket.broadcast.emit('start_blobs', data); var blob = new Blob(socket.id, data.x, data.y); blobs.push(blob); } ); socket.on('start_monstres', function(datam) { console.log(datam.xm + " " + datam.ym); socket.broadcast.emit('start_monstres', datam); var monstre = new Monster(datam.xm, datam.ym); monstres.push(monstre); } ); socket.on('update', function(data) { //console.log(blobs); for (var i = 0; i < blobs.length; i++) { if (socket.id == blobs[i].id) { //console.log(blobs[i].id); blobs[i].x = data.x; blobs[i].y = data.y; } } } ); socket.on('move', function(datam) { //console.log(blobs); for (var i = 0; i < monstres.length; i++) { monstres[i].xm = datam.xm; monstres[i].ym = datam.ym; } } ); socket.on('eaten', function (data) { // remove the eaten blob // set array of blobs excluding the eaten blob var eaten = { id: '' }; var newblob = blobs.filter(function( blobs ) { if (blobs.id === data.eatenId) { eaten.id = blobs.id; } return blobs.id !== data.eatenId; }); blobs = newblob; io.sockets.emit('', blobs); }); socket.on('disconnect', function() { console.log("Client has disconnected" + " " + socket.id); blobs = blobs.filter(function( blobs ) { return blobs.id !== socket.id; }); }); } );