(function() { var messageChannel = 'MESSAGE_CHANNEL_GATE_GAME'; var scoreboardID; function sendMessage(message) { message.scoreboardID = scoreboardID; Messages.sendMessage( messageChannel, JSON.stringify(message) ); } function onReceivedMessage(channel, message, senderID) { try { var data = JSON.parse(message); } catch (e) { print('[scoreboard_client] Error parsing message: ' + message); return; } // print('data: ' + JSON.stringify(data)); switch (data.type) { case 'RENDER': renderScoreboard(data.racers); break; } } function renderScoreboard(racers) { var text = ''; for (var sessionUUID in racers) { var racer = racers[sessionUUID]; if (racer.isRacing) { text += racer.name + ' is racing!\n'; } else { text += racer.name + ' ' + racer.finishTime.toFixed(2) + ' / ' + racer.bestTime.toFixed(2) + '\n'; } } Entities.editEntity(scoreboardID, { text: text }); } return { preload: function(id) { scoreboardID = id; Messages.subscribe(messageChannel); Messages.messageReceived.connect(null, onReceivedMessage); }, unload: function(id) { sendMessage({ type: 'REMOVE_RACER', avatarSessionUUID: MyAvatar.sessionUUID }); Messages.unsubscribe(messageChannel); Messages.messageReceived.disconnect(null, onReceivedMessage); }, }; })