Planets.nu - Alt Resource View

Uses different methods for graphic display of resources on map

// ==UserScript==
// @name          Planets.nu - Alt Resource View
// @description   Uses different methods for graphic display of resources on map
// @include       http://*.planets.nu/*
// @include       http://planets.nu/*
// @version 1.0
// @namespace https://greasyfork.org/users/7189
// ==/UserScript==

/*------------------------------------------------------------------------------
This add-on cahanges how resources are displayed on the map when using the Map 
Tools. Rsource are shown as 1 or 2 circles with the following characteristics:

Orange Circle:
 - Radius: Represents the total amount of that resource at the planet. For
   minerals this will include ground and surface amounts.
 - Edge Width: For minerals it reresents the density, unless that mineral is
   mined out (5 or less in ground) For other values it represents the expected
   increase in that value (population growth, income, etc.)
Yellow Circle (minerals only):
   Represents the amount of minerals available on the surface. If a planet is
   mined out, this will most likely be the only circle visible.
Natives only:
   When viewing natives a single letter respresenting the native type is
   displayed over the planet. The bigger the letter, the better the
   government.
------------------------------------------------------------------------------*/

function wrapper () { // wrapper for injection

    vgapMap.prototype.renderResource = function(ctx) {

        for (var i = 0; i < vgap.planets.length; i++) {
            var planet = vgap.planets[i];
            var density = 50;
            var surface = 0;
            var amount = planet[this.showresources];
            if (this.showresources == "nativeclans") {
                if (planet.nativeclans <= 0) continue;
                var nativeGrowth = 0;
                var nativeMax = 0;
                if ((planet.nativehappypoints + vgap.nativeTaxChange(planet)) >= 70 && planet.nativeclans > 0 && planet.clans > 0) {
                    if (planet.nativetype == 9) {
                        //siliconoid like it hot
                        nativeMax = planet.temp * 1000;
                        nativeGrowth = nativeGrowth + Math.round(((planet.temp / 100) * (planet.nativeclans / 25) * (5 / (planet.nativetaxrate + 5))));
                    }
                    else {
                        nativeMax = Math.round(Math.sin(3.14 * (100 - planet.temp) / 100) * 150000);
                        nativeGrowth = nativeGrowth + Math.round(Math.sin(3.14 * ((100 - planet.temp) / 100)) * (planet.nativeclans / 25) * (5 / (planet.nativetaxrate + 5)));
                    }
                    //slows down over 6,600,000
                    if (planet.nativeclans > 66000)
                        nativeGrowth = Math.round(nativeGrowth / 2);

                    //check max
                    if (planet.nativeclans > nativeMax)
                        nativeGrowth = 0;
                }                
                amount /= 20;
                density = nativeGrowth/planet.nativeclans*2000;
                
                var nativeletter = planet.nativeracename.substring(0, 1);
                if (planet.nativetype == 4) nativeletter = "V"; //avian
                if (planet.nativetype == 5) nativeletter = "X"; //amorph
                var fontsize = (30 + 3*planet.nativegovernment) / (this.zoom <= 1 ? 1.5 : 1);
                
                ctx.font = fontsize + "px sans-serif";
                ctx.fillStyle = "#ffff00";
                ctx.textAlign = "center";
                ctx.textBaseline = "middle";                
                ctx.fillText(nativeletter, this.screenX(planet.x), this.screenY(planet.y));
                ctx.font = "10px sans-serif";
                
            }
            else if (this.showresources == "megacredits") {
                var nativetaxrate = planet.nativetaxrate;
                var player = vgap.getPlayer(planet.ownerid);
                if (player != null) {
                    if (player.raceid == 6 && nativetaxrate > 20)
                        nativetaxrate = 20;
                }

                var val = Math.round(nativetaxrate * planet.nativegovernment * 20 / 100 * planet.nativeclans / 1000);

                if (val > planet.clans)
                    val = planet.clans;

                //player tax rate (fed bonus)
                var taxbonus = 1;
                if (vgap.advActive(2))
                    taxbonus = 2;
                val = val * taxbonus;

                //insectoid bonus
                if (planet.nativetype == 6)
                    val = val * 2;

                var colTax = Math.round(planet.colonisttaxrate * planet.clans / 1000);

                colTax = colTax * taxbonus;

                val += colTax;

                if (val > 5000)
                    val = 5000;
                density = val / 50;
            }
            else if (this.showresources == "supplies") {
                density = planet.factories;
                if (planet.nativetype == 2) //bovinoid
                    density += Math.min(planet.clans, planet.nativeclans/100); 
                density /= 20;
            }
            else if (this.showresources == "clans") {
                var player = vgap.getPlayer(planet.ownerid);
                var raceId = player.raceid;

                var colGrowth = 0;
                if ((planet.colonisthappypoints + vgap.colonistTaxChange(planet)) >= 70 && planet.clans > 0) {

                    var colMax = Math.round(Math.sin(3.14 * (100 - planet.temp) / 100) * 100000);

                    //crystals like it hot
                    if (raceId == 7) {
                        colMax = 1000 * planet.temp;
                        colGrowth = Math.round(((planet.temp / 100) * (planet.clans / 20) * (5 / (planet.colonisttaxrate + 5))));
                        if (vgap.advActive(47))
                            colGrowth = Math.round((((planet.temp * planet.temp) / 4000) * (planet.clans / 20) * (5 / (planet.colonisttaxrate + 5))));
                    }
                    else if (planet.temp >= 15 && planet.temp <= 84)
                        colGrowth = Math.round(Math.sin(3.14 * ((100 - planet.temp) / 100)) * (planet.clans / 20) * (5 / (planet.colonisttaxrate + 5)));

                    //slows down over 6,600,000
                    if (planet.clans > 66000)
                        colGrowth = Math.round(colGrowth / 2);

                    //planetoids do not have an atmosphere
                    if (planet.debrisdisk > 0)
                        colGrowth = 0;

                    //check against max
                    if ((planet.clans + colGrowth) > colMax)
                        colGrowth = colMax - planet.clans;

                    //100 and 0 degree planets
                    if (colGrowth < 0)
                        colGrowth = 0;
                }
                density = colGrowth/planet.clans*2000;
                amount /= 2;
            }            
            else if (this.showresources != "megacredits" && this.showresources != "supplies" && this.showresources != "clans") {
                amount = planet["ground" + this.showresources];
                density = planet["density" + this.showresources];
                surface = planet[this.showresources];
                if (amount > 0) {
                    if (amount <= 5) density = 0;
                    amount += surface;
                }
                else {
                    var total = planet["total" + this.showresources];
                    if (total > 0) amount = total;
                }
            }
            this.drawMineralValue(ctx, this.screenX(planet.x), this.screenY(planet.y), amount, density, surface);
        }

    };

    vgapMap.prototype.drawMineralValue = function (ctx, x, y, total, density, mined) {
        var density = Math.floor(density / 10 * this.zoom) + 1;
        if (density < 1) density = 1;
        if (total > 0)
            this.drawCircle(ctx, x, y, Math.sqrt(total/2) * this.zoom, "rgba(255, 128, 0, 0.5)", density);
        if (mined > 0)
            this.drawCircle(ctx, x, y, Math.sqrt(mined/2) * this.zoom, "rgba(255, 255, 0, 1)", 1);
        
    };
   
} //wrapper for injection

var script = document.createElement("script");
script.type = "application/javascript";
script.textContent = "(" + wrapper + ")();";

document.body.appendChild(script); 
document.body.removeChild(script);