Last active
November 2, 2017 20:50
Fireworks FTW
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name Fireworks FTW | |
// @description Shows some fireworks when you win a normal pub game (and/or the raptors) | |
// @version 0.0.5 | |
// @include http://tagpro-*.koalabeast.com:* | |
// @include http://*.newcompte.fr:* | |
// @updateURL https://gist.github.com/nabbynz/fcc6c8b663d46b800ec4216c6065c2e5/raw/Fireworks_FTW.user.js | |
// @downloadURL https://gist.github.com/nabbynz/fcc6c8b663d46b800ec4216c6065c2e5/raw/Fireworks_FTW.user.js | |
// @grant none | |
// @author nabby | |
// ==/UserScript== | |
console.log('START: ' + GM_info.script.name + ' (v' + GM_info.script.version + ' by ' + GM_info.script.author + ')'); | |
if ($('script[src]').toArray().some(e => e.src.endsWith('easter-2017.js'))) return; //don't run if eggball (snaps) | |
// Options... | |
var showFireworks = true; | |
var showGordons = true; | |
var fireworksCount = 5; //the total number of fireworks to show (Default: 5) | |
var fireworksNumber = 100; //the number of particles per firework (Default: 100) | |
var fireworksTime = 1; //the max number of seconds that the fireworks are on screen for at the end of the game (Default: 1) | |
var fireworksType = 'rainbow'; //can be either: 'rainbow' (multi-colors) or 'team' (winning red/blue team color) or 'color' (uses fireworksColor below) | |
var fireworksColor = '#00ff00'; //only used if fireworksType is 'color' (Default: '#00ff00' - green). | |
tagpro.ready(function() { | |
if (showGordons) { | |
var images = []; | |
images.push("https://i.imgur.com/ID2lhJS.png"); | |
images.push("https://i.imgur.com/FzoxvLn.png"); | |
images.push("https://i.imgur.com/Ktg8C2D.png"); | |
images.push("https://i.imgur.com/FgWDO4X.png"); | |
images.push("https://i.imgur.com/7ukfF4H.png"); | |
images.push("https://i.imgur.com/FG1pxpS.png"); | |
const raptorSprites = images.map(function(v, i) { | |
var raptorSprite = new PIXI.Sprite.fromImage(v); | |
raptorSprite.visible = false; | |
tagpro.renderer.layers.ui.addChild(raptorSprite); | |
return raptorSprite; | |
}); | |
var initRaptor = function(id, speed=5) { | |
var raptorSprite = raptorSprites[id]; | |
if (raptorSprite.visible) { | |
return; | |
} | |
tagpro.renderer.layers.ui.removeChild(raptorSprite); | |
tagpro.renderer.layers.ui.addChild(raptorSprite); | |
raptorSprite.x = tagpro.renderer.renderer.width; | |
raptorSprite.y = tagpro.renderer.renderer.height - raptorSprite.height; | |
raptorSprite.visible = true; | |
var moveRaptor = function(speed) { | |
raptorSprite.x -= speed; | |
if (raptorSprite.x < -raptorSprite.width) { | |
raptorSprite.visible = false; | |
return; | |
} | |
setTimeout(function() { | |
moveRaptor(speed); | |
}, 1000 / 60); | |
}; | |
moveRaptor(speed); | |
}; | |
} | |
if (showFireworks) { | |
var tr = tagpro.renderer; | |
tagpro.particleDefinitions.firework = { | |
"alpha": { | |
"start": 0.28, | |
"end": 0.74 | |
}, | |
"scale": { | |
"start": 0.01, | |
"end": 0.33, | |
"minimumScaleMultiplier": 0.75 | |
}, | |
"color": { | |
"start": "#2b0aff", | |
"end": "#f78d2a" | |
}, | |
"speed": { | |
"start": 100, | |
"end": 750, | |
"minimumSpeedMultiplier": 1 | |
}, | |
"acceleration": { | |
"x": 0, | |
"y": 0 | |
}, | |
"maxSpeed": 0, | |
"startRotation": { | |
"min": 180, | |
"max": 360 | |
}, | |
"noRotation": false, | |
"rotationSpeed": { | |
"min": 0, | |
"max": 200 | |
}, | |
"lifetime": { | |
"min": 0.5, | |
"max": 1 | |
}, | |
"blendMode": "normal", | |
"ease": [ | |
{ | |
"s": 0, | |
"cp": 0.329, | |
"e": 0.548 | |
}, | |
{ | |
"s": 0.548, | |
"cp": 0.767, | |
"e": 0.876 | |
}, | |
{ | |
"s": 0.876, | |
"cp": 0.985, | |
"e": 1 | |
} | |
], | |
"frequency": 0.005, | |
"emitterLifetime": 1, | |
"maxParticles": fireworksNumber, | |
"pos": { | |
"x": 0, | |
"y": 0 | |
}, | |
"addAtBack": true, | |
"spawnType": "point" | |
}; | |
tr.createFireworks = function (x, y) { | |
if (!tr.options.disableParticles) { | |
var emitter = new PIXI.particles.Emitter( | |
tr.layers.foreground, | |
[tr.particleTexture, tr.particleFireTexture], | |
tagpro.particleDefinitions.firework | |
); | |
emitter.updateSpawnPos(x, y); | |
tr.emitters.push(emitter); | |
} | |
}; | |
var rainbow = function(numOfSteps, step) { | |
//From: https://stackoverflow.com/questions/1484506/random-color-generator-in-javascript | |
var r, g, b; | |
var h = step / numOfSteps; | |
var i = ~~(h * 6); | |
var f = h * 6 - i; | |
var q = 1 - f; | |
switch(i % 6){ | |
case 0: r = 1; g = f; b = 0; break; | |
case 1: r = q; g = 1; b = 0; break; | |
case 2: r = 0; g = 1; b = f; break; | |
case 3: r = 0; g = q; b = 1; break; | |
case 4: r = f; g = 0; b = 1; break; | |
case 5: r = 1; g = 0; b = q; break; | |
} | |
var c = "#" + ("00" + (~ ~(r * 255)).toString(16)).slice(-2) + ("00" + (~ ~(g * 255)).toString(16)).slice(-2) + ("00" + (~ ~(b * 255)).toString(16)).slice(-2); | |
return (c); | |
}; | |
var initFireworks = function() { | |
let vpWidth = $('#viewport').width(); | |
let vpHeight = $('#viewport').height(); | |
let startX = tagpro.players[tagpro.playerId].x - vpWidth / 2; | |
let startY = tagpro.players[tagpro.playerId].y + vpHeight / 2; | |
let fwPos = vpWidth / (fireworksCount+1); | |
for (var i=1; i<=fireworksCount; i++) { | |
let x = startX + fwPos * i; | |
let y = startY; | |
let c1, c2; | |
if (fireworksType === 'team') { | |
c1 = tagpro.players[tagpro.playerId].team === 1 ? '#ffffff' : '#ffffff'; | |
c2 = tagpro.players[tagpro.playerId].team === 1 ? '#ff0000' : '#0000ff'; | |
} else if (fireworksType === 'color') { | |
c1 = '#ffffff'; | |
c2 = fireworksColor; | |
} else { | |
c1 = rainbow(fireworksCount, i); | |
c2 = rainbow(fireworksCount, i+1); | |
} | |
tagpro.particleDefinitions.firework.color.start = c1; | |
tagpro.particleDefinitions.firework.color.end = c2; | |
tagpro.particleDefinitions.firework.emitterLifetime = fireworksTime; | |
tr.createFireworks(x, y); | |
} | |
}; | |
} | |
tagpro.socket.on("end", function(data) { | |
if ( (data.winner === 'red' && tagpro.players[tagpro.playerId].team === 1) || (data.winner === 'blue' && tagpro.players[tagpro.playerId].team === 2) ) { | |
if (showFireworks) { | |
initFireworks(); | |
} | |
if (showGordons) { | |
if (Math.abs(tagpro.score.r - tagpro.score.b) === 3) { //parade if we win 3:0 | |
var interval = 100; | |
for (var id=0; id<images.length; id++) { | |
setTimeout(function(id) { | |
initRaptor(id, 10); | |
}, interval, id); | |
interval += 500; | |
} | |
} else { | |
initRaptor(Math.floor(Math.random()*images.length-1)+1); | |
} | |
} | |
} | |
}); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment