(function () { if (typeof Mario === "undefined") window.Mario = {}; var Coin = (Mario.Coin = function (pos, sprite) { Mario.Entity.call(this, { pos: pos, sprite: sprite, hitbox: [0, 0, 16, 16], }); this.idx = level.items.length; }); Mario.Util.inherits(Coin, Mario.Entity); Coin.prototype.isPlayerCollided = function () { //the first two elements of the hitbox array are an offset, so let's do this now. var hpos1 = [this.pos[0] + this.hitbox[0], this.pos[1] + this.hitbox[1]]; var hpos2 = [ player.pos[0] + player.hitbox[0], player.pos[1] + player.hitbox[1], ]; //if the hitboxes actually overlap if ( !( hpos1[0] > hpos2[0] + player.hitbox[2] || hpos1[0] + this.hitbox[2] < hpos2[0] ) ) { if ( !( hpos1[1] > hpos2[1] + player.hitbox[3] || hpos1[1] + this.hitbox[3] < hpos2[1] ) ) { this.collect(); } } }; Coin.prototype.render = function (ctx, vX, vY) { this.sprite.render(ctx, this.pos[0], this.pos[1], vX, vY); }; //money is not affected by gravity, you see. Coin.prototype.update = function (dt) { this.sprite.update(dt); }; Coin.prototype.checkCollisions = function () { this.isPlayerCollided(); }; Coin.prototype.collect = function () { sounds.coin.currentTime = 0.05; sounds.coin.play(); player.coins += 1; delete level.items[this.idx]; }; })();