class Powerup extends Particle{
    constructor(x, y) {
        super(x, y);
        this.r = 20;
        this.vel = createVector(0, 0.5);
        
        this.typeMap = {
            'triShot': {
                'function': this.triShot,
                'color': function() { fill(255, 0, 0); },
                'shape': function(_this) { circle(_this.pos.x, _this.pos.y, _this.r); }
            },
            'freeze': {
                'function': this.freeze,
                'color': function() { fill(165, 242, 243); },
                'shape': function(_this) { circle(_this.pos.x, _this.pos.y, _this.r); }
            },
            'shield': {
                'function': this.shield,
                'color': function() { fill(0, 255, 0); },
                'shape': function(_this) { circle(_this.pos.x, _this.pos.y, _this.r); }
            },
            'bomb': {
                'function': this.bomb,
                'color': function() { fill(117, 0, 142); },
                'shape': function(_this) { circle(_this.pos.x, _this.pos.y, _this.r); }
            },
            null: null
        };
        
        this.type = Object.keys(this.typeMap)[Math.floor(Math.random() * Object.keys(this.typeMap).length)] ;
    }
    
    display(idx){
        this.show();
        this.update();
        this.grab(idx);
    };

    grab(u){
        if (int(dist(this.pos.x, this.pos.y, ship.pos.x, ship.pos.y)) <= ship.r + this.r > 0){
            return [
                powerup.pop(powerup[u]),
                ship.powerup = this
            ];
        }
    }

    show(){
        this.typeMap[this.type]['color']();
        this.typeMap[this.type]['shape'](this);
    }

    update(){
        super.update();
    }
    
    triShot() {
        textSize(20);
        fill(255);

        text("Tri-Shot Activated!", width/2, height - 50);

        setTimeout(function(){
            ship.powerup = null;
        }, 10000);
    }
    
    
    bomb() {
        ship.powerup = null;
        for (var i = rock.length - 1; i >= 0; i--){
            handlePoints(rock[i].p);
            explode(rock[i].pos.x, rock[i].pos.y, 40);
            rock[i].break();
            rock.splice(i, 1);
        }
    }
    
    shield() {
        ship.shield = true;
        ship.specShield = true;
        setTimeout(function(){
            ship.shield = false;
            ship.specShield = false;
        }, 7500);
    }
    
    freeze() {
        limiter = 0.3;
        setTimeout(function(){
            limiter = 4;
            console.log('!');
            for (var b = rock.length - 1; b >= 0; b--){
                rock[b].vel.add(0.7);
                rock[b].vel.mult(2);
                if (rock[b].size === 'small'){
                    rock[b].vel.mult(1.25);
                } if (rock[b].size === 'tiny'){
                    rock[b].vel.mult(1.5);
                }
            }
        }, 5000);
    }

}