Skip to content

Instantly share code, notes, and snippets.

@bash-tp
Last active November 16, 2017 15:47
Show Gist options
  • Save bash-tp/bc477d8b535b9c9c5c584e4852402666 to your computer and use it in GitHub Desktop.
Save bash-tp/bc477d8b535b9c9c5c584e4852402666 to your computer and use it in GitHub Desktop.
TagPro Player Monitor
// ==UserScript==
// @name TagPro Player Monitor
// @version 1.1
// @author bash#
// @namespace http://www.reddit.com/user/bash_tp/
// @description Shows an on-screen list of players in the game and their current status
// @include http://tagpro-*.koalabeast.com:*
// @include http://tangent.jukejuice.com*
// @include http://*.newcompte.fr*
// @updateURL https://gist.github.com/bash-tp/bc477d8b535b9c9c5c584e4852402666/raw/tagpro_player_monitor.user.js
// @downloadURL https://gist.github.com/bash-tp/bc477d8b535b9c9c5c584e4852402666/raw/tagpro_player_monitor.user.js
// ==/UserScript==
tagpro.ready(function () {
var playerList;
var baseX = 10;
var baseY = 60;
var size = 17;
var gap = 2;
var space = size + gap;
var textpad = 2;
var flagsprite =
{
1: "redflag",
2: "blueflag",
3: "yellowflag",
};
var data = {};
function makeData(team, color, offset) {
var style = new PIXI.TextStyle({
fontSize: "8pt",
fontWeight: "bold",
strokeThickness: 3,
fill: color,
});
data[team] =
{
sprite: undefined,
players: undefined,
json: "",
style: style,
x: baseX,
y: baseY + (space * offset),
};
}
makeData(1, "#FFB5BD", 0); // red
makeData(2, "#CFCFFF", 5); // blue
function getPlayers(team) {
var players = [];
for (var playerId in tagpro.players) {
if (!tagpro.players.hasOwnProperty(playerId)) continue;
if (tagpro.players[playerId].team != team) continue;
var player = tagpro.players[playerId];
players.push({
name: player.name,
flag: player.flag,
dead: player.dead,
bomb: player.bomb,
tagpro: player.tagpro,
grip: player.grip,
});
}
return players;
}
function createPlayerList(teamdata) {
var c = new PIXI.DisplayObjectContainer();
c.x = teamdata.x;
c.y = teamdata.y;
var players = teamdata.players;
for (var i = 0; i < 4; i++) {
var x = 0;
var y = space * i;
var addText = function(text, alpha) {
alpha = (typeof alpha === 'undefined') ? 1 : alpha;
var pt = new PIXI.Text(text, teamdata.style);
pt.x = x;
pt.y = y + textpad;
pt.alpha = alpha;
c.addChild(pt);
x += pt.width + gap;
};
var addTile = function(tile, alpha) {
alpha = (typeof alpha === 'undefined') ? 1 : alpha;
tagpro.tiles.draw(c, tile, { x: x, y: y }, size, size, alpha);
x += space;
};
if (players.length <= i) {
addTile("yellowflag", 0.25);
addText("-");
} else {
var player = players[i];
var name = player.name;
var flag = player.flag;
var dead = player.dead;
var bomb = player.bomb;
var tp = player.tagpro;
var grip = player.grip;
if (flag) {
addTile(flagsprite[flag]);
} else {
addTile("yellowflag", 0.25);
}
addText(name, dead ? 0.5 : 1);
if (tp) { addTile("tagpro"); }
if (bomb) { addTile("bomb"); }
if (grip) { addTile("grip"); }
}
}
return c;
}
var redrawPlayerList = function() {
if (!playerList) {
playerList = new PIXI.DisplayObjectContainer();
tagpro.renderer.layers.ui.addChild(playerList);
}
for (var team in data) {
var teamdata = data[team];
var players = getPlayers(team);
var json = JSON.stringify(players);
if (teamdata.json == json)
continue;
if (teamdata.sprite)
playerList.removeChild(teamdata.sprite);
teamdata.players = players;
teamdata.json = json;
teamdata.sprite = createPlayerList(teamdata);
playerList.addChild(teamdata.sprite);
}
};
tagpro.socket.on("mapupdate", redrawPlayerList);
tagpro.socket.on("p", redrawPlayerList);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment