From 938b139298b1640de957beac16fbdc9946282500 Mon Sep 17 00:00:00 2001 From: Idrees Hassan Date: Sun, 26 Oct 2025 18:03:15 -0400 Subject: [PATCH] Remove duplicate function --- README.md | 22 +------------- dist/birb.js | 71 ++++++++++++++++++-------------------------- dist/birb.user.js | 73 ++++++++++++++++++---------------------------- manifest.json | 2 +- src/application.js | 19 ++---------- src/birb.js | 37 +++++++---------------- src/menu.js | 5 ++-- src/shared.js | 18 +++++++++++- 8 files changed, 92 insertions(+), 155 deletions(-) diff --git a/README.md b/README.md index 391b87b..b73fe0d 100644 --- a/README.md +++ b/README.md @@ -5,24 +5,4 @@ This project is still being worked on, but if you wish to help me beta test it, 1. Install [Tampermonkey](https://www.tampermonkey.net/) on your web browser 2. Enable the Tampermonkey extension and give it the permissions requested 3. Install my Pocket Bird script by going to this link and clicking install: [https://github.com/IdreesInc/Pocket-Bird/raw/refs/heads/main/dist/birb.user.js](https://github.com/IdreesInc/Pocket-Bird/raw/refs/heads/main/dist/birb.user.js) -4. Now any websites you visit will have a little bird hopping around! - -## Development - -This project uses Rollup to bundle the source files. - -### Building - -```bash -npm run build -``` - -### Development Mode - -Watch for changes and rebuild automatically: - -```bash -npm run dev -``` - -The source files are in the `src/` directory. The main entry point is `src/birb.js`, which bundles all the other modules together. \ No newline at end of file +4. Now any websites you visit will have a little bird hopping around! \ No newline at end of file diff --git a/dist/birb.js b/dist/birb.js index 5ed00e0..934f7a6 100644 --- a/dist/birb.js +++ b/dist/birb.js @@ -82,7 +82,7 @@ let elementToMove = parent ? element.parentElement : element; if (!elementToMove) { - console.error("Birb: Parent element not found"); + error("Birb: Parent element not found"); return; } @@ -171,6 +171,22 @@ console.error("Birb: ", ...arguments); } + /** + * Get a layer from a sprite sheet array + * @param {string[][]} spriteSheet The sprite sheet pixel array + * @param {number} spriteIndex The sprite index + * @param {number} width The width of each sprite + * @returns {string[][]} + */ + function getLayer(spriteSheet, spriteIndex, width) { + // From an array of a horizontal sprite sheet, get the layer for a specific sprite + const layer = []; + for (let y = 0; y < width; y++) { + layer.push(spriteSheet[y].slice(spriteIndex * width, (spriteIndex + 1) * width)); + } + return layer; + } + /** Indicators for parts of the base bird sprite sheet */ const SPRITE = { THEME_HIGHLIGHT: "theme-highlight", @@ -529,16 +545,16 @@ // Build layers from sprite sheet this.layers = { - base: new Layer(this.getLayer(spriteSheet, 0)), - down: new Layer(this.getLayer(spriteSheet, 1)), - heartOne: new Layer(this.getLayer(spriteSheet, 2)), - heartTwo: new Layer(this.getLayer(spriteSheet, 3)), - heartThree: new Layer(this.getLayer(spriteSheet, 4)), - tuftBase: new Layer(this.getLayer(spriteSheet, 5), "tuft"), - tuftDown: new Layer(this.getLayer(spriteSheet, 6), "tuft"), - wingsUp: new Layer(this.getLayer(spriteSheet, 7)), - wingsDown: new Layer(this.getLayer(spriteSheet, 8)), - happyEye: new Layer(this.getLayer(spriteSheet, 9)), + base: new Layer(getLayer(spriteSheet, 0, this.spriteWidth)), + down: new Layer(getLayer(spriteSheet, 1, this.spriteWidth)), + heartOne: new Layer(getLayer(spriteSheet, 2, this.spriteWidth)), + heartTwo: new Layer(getLayer(spriteSheet, 3, this.spriteWidth)), + heartThree: new Layer(getLayer(spriteSheet, 4, this.spriteWidth)), + tuftBase: new Layer(getLayer(spriteSheet, 5, this.spriteWidth), "tuft"), + tuftDown: new Layer(getLayer(spriteSheet, 6, this.spriteWidth), "tuft"), + wingsUp: new Layer(getLayer(spriteSheet, 7, this.spriteWidth)), + wingsDown: new Layer(getLayer(spriteSheet, 8, this.spriteWidth)), + happyEye: new Layer(getLayer(spriteSheet, 9, this.spriteWidth)), }; // Build frames from layers @@ -618,21 +634,6 @@ return anim.draw(this.ctx, this.direction, this.animStart, this.canvasPixelSize, species); } - /** - * Get a layer from the sprite sheet array - * @param {string[][]} array - * @param {number} sprite - * @returns {string[][]} - */ - getLayer(array, sprite) { - // From an array of a horizontal sprite sheet, get the layer for a specific sprite - const layer = []; - for (let y = 0; y < this.spriteWidth; y++) { - layer.push(array[y].slice(sprite * this.spriteWidth, (sprite + 1) * this.spriteWidth)); - } - return layer; - } - /** * @returns {AnimationType} The current animation key */ @@ -1053,7 +1054,7 @@ } const content = menu.querySelector(".birb-window-content"); if (!content) { - console.error("Birb: Content not found"); + error("Birb: Content not found"); return; } content.innerHTML = ""; @@ -2169,21 +2170,6 @@ save(); } - /** - * @param {string[][]} array - * @param {number} sprite - * @param {number} [width] - * @returns {string[][]} - */ - function getLayer(array, sprite, width = SPRITE_WIDTH) { - // From an array of a horizontal sprite sheet, get the layer for a specific sprite - const layer = []; - for (let y = 0; y < width; y++) { - layer.push(array[y].slice(sprite * width, (sprite + 1) * width)); - } - return layer; - } - /** * Update the birds location from the start to the target location on a parabolic path * @param {number} speed The speed of the bird along the path @@ -2241,7 +2227,6 @@ } function focusOnGround() { - console.log("Focusing on ground"); focusedElement = null; focusedBounds = { left: 0, right: window.innerWidth, top: getSafeWindowHeight() }; flyTo(Math.random() * window.innerWidth, 0); diff --git a/dist/birb.user.js b/dist/birb.user.js index 1b07866..55dd927 100644 --- a/dist/birb.user.js +++ b/dist/birb.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @name Pocket Bird // @namespace https://idreesinc.com -// @version 2025.10.26.388 +// @version 2025.10.26.402 // @description birb // @author Idrees // @downloadURL https://github.com/IdreesInc/Pocket-Bird/raw/refs/heads/main/dist/birb.user.js @@ -96,7 +96,7 @@ let elementToMove = parent ? element.parentElement : element; if (!elementToMove) { - console.error("Birb: Parent element not found"); + error("Birb: Parent element not found"); return; } @@ -185,6 +185,22 @@ console.error("Birb: ", ...arguments); } + /** + * Get a layer from a sprite sheet array + * @param {string[][]} spriteSheet The sprite sheet pixel array + * @param {number} spriteIndex The sprite index + * @param {number} width The width of each sprite + * @returns {string[][]} + */ + function getLayer(spriteSheet, spriteIndex, width) { + // From an array of a horizontal sprite sheet, get the layer for a specific sprite + const layer = []; + for (let y = 0; y < width; y++) { + layer.push(spriteSheet[y].slice(spriteIndex * width, (spriteIndex + 1) * width)); + } + return layer; + } + /** Indicators for parts of the base bird sprite sheet */ const SPRITE = { THEME_HIGHLIGHT: "theme-highlight", @@ -543,16 +559,16 @@ // Build layers from sprite sheet this.layers = { - base: new Layer(this.getLayer(spriteSheet, 0)), - down: new Layer(this.getLayer(spriteSheet, 1)), - heartOne: new Layer(this.getLayer(spriteSheet, 2)), - heartTwo: new Layer(this.getLayer(spriteSheet, 3)), - heartThree: new Layer(this.getLayer(spriteSheet, 4)), - tuftBase: new Layer(this.getLayer(spriteSheet, 5), "tuft"), - tuftDown: new Layer(this.getLayer(spriteSheet, 6), "tuft"), - wingsUp: new Layer(this.getLayer(spriteSheet, 7)), - wingsDown: new Layer(this.getLayer(spriteSheet, 8)), - happyEye: new Layer(this.getLayer(spriteSheet, 9)), + base: new Layer(getLayer(spriteSheet, 0, this.spriteWidth)), + down: new Layer(getLayer(spriteSheet, 1, this.spriteWidth)), + heartOne: new Layer(getLayer(spriteSheet, 2, this.spriteWidth)), + heartTwo: new Layer(getLayer(spriteSheet, 3, this.spriteWidth)), + heartThree: new Layer(getLayer(spriteSheet, 4, this.spriteWidth)), + tuftBase: new Layer(getLayer(spriteSheet, 5, this.spriteWidth), "tuft"), + tuftDown: new Layer(getLayer(spriteSheet, 6, this.spriteWidth), "tuft"), + wingsUp: new Layer(getLayer(spriteSheet, 7, this.spriteWidth)), + wingsDown: new Layer(getLayer(spriteSheet, 8, this.spriteWidth)), + happyEye: new Layer(getLayer(spriteSheet, 9, this.spriteWidth)), }; // Build frames from layers @@ -632,21 +648,6 @@ return anim.draw(this.ctx, this.direction, this.animStart, this.canvasPixelSize, species); } - /** - * Get a layer from the sprite sheet array - * @param {string[][]} array - * @param {number} sprite - * @returns {string[][]} - */ - getLayer(array, sprite) { - // From an array of a horizontal sprite sheet, get the layer for a specific sprite - const layer = []; - for (let y = 0; y < this.spriteWidth; y++) { - layer.push(array[y].slice(sprite * this.spriteWidth, (sprite + 1) * this.spriteWidth)); - } - return layer; - } - /** * @returns {AnimationType} The current animation key */ @@ -1067,7 +1068,7 @@ } const content = menu.querySelector(".birb-window-content"); if (!content) { - console.error("Birb: Content not found"); + error("Birb: Content not found"); return; } content.innerHTML = ""; @@ -2183,21 +2184,6 @@ save(); } - /** - * @param {string[][]} array - * @param {number} sprite - * @param {number} [width] - * @returns {string[][]} - */ - function getLayer(array, sprite, width = SPRITE_WIDTH) { - // From an array of a horizontal sprite sheet, get the layer for a specific sprite - const layer = []; - for (let y = 0; y < width; y++) { - layer.push(array[y].slice(sprite * width, (sprite + 1) * width)); - } - return layer; - } - /** * Update the birds location from the start to the target location on a parabolic path * @param {number} speed The speed of the bird along the path @@ -2255,7 +2241,6 @@ } function focusOnGround() { - console.log("Focusing on ground"); focusedElement = null; focusedBounds = { left: 0, right: window.innerWidth, top: getSafeWindowHeight() }; flyTo(Math.random() * window.innerWidth, 0); diff --git a/manifest.json b/manifest.json index 4b21fbd..7aaf858 100644 --- a/manifest.json +++ b/manifest.json @@ -2,7 +2,7 @@ "manifest_version": 3, "name": "Pocket Bird", "description": "It's a bird, in your browser. What more could you want?", - "version": "2025.10.26.388", + "version": "2025.10.26.402", "homepage_url": "https://idreesinc.com", "content_scripts": [ { diff --git a/src/application.js b/src/application.js index 0017a41..ff23bc0 100644 --- a/src/application.js +++ b/src/application.js @@ -14,7 +14,8 @@ import { isMobile, log, debug, - error + error, + getLayer } from './shared.js'; import { SPRITE, @@ -802,21 +803,6 @@ Promise.all([ save(); } - /** - * @param {string[][]} array - * @param {number} sprite - * @param {number} [width] - * @returns {string[][]} - */ - function getLayer(array, sprite, width = SPRITE_WIDTH) { - // From an array of a horizontal sprite sheet, get the layer for a specific sprite - const layer = []; - for (let y = 0; y < width; y++) { - layer.push(array[y].slice(sprite * width, (sprite + 1) * width)); - } - return layer; - } - /** * Update the birds location from the start to the target location on a parabolic path * @param {number} speed The speed of the bird along the path @@ -874,7 +860,6 @@ Promise.all([ } function focusOnGround() { - console.log("Focusing on ground"); focusedElement = null; focusedBounds = { left: 0, right: window.innerWidth, top: getSafeWindowHeight() }; flyTo(Math.random() * window.innerWidth, 0); diff --git a/src/birb.js b/src/birb.js index 41959d3..96c8adf 100644 --- a/src/birb.js +++ b/src/birb.js @@ -1,4 +1,4 @@ -import { Directions } from './shared.js'; +import { Directions, getLayer } from './shared.js'; import Layer from './layer.js'; import Frame from './frame.js'; import Anim from './anim.js'; @@ -41,16 +41,16 @@ export class Birb { // Build layers from sprite sheet this.layers = { - base: new Layer(this.getLayer(spriteSheet, 0)), - down: new Layer(this.getLayer(spriteSheet, 1)), - heartOne: new Layer(this.getLayer(spriteSheet, 2)), - heartTwo: new Layer(this.getLayer(spriteSheet, 3)), - heartThree: new Layer(this.getLayer(spriteSheet, 4)), - tuftBase: new Layer(this.getLayer(spriteSheet, 5), "tuft"), - tuftDown: new Layer(this.getLayer(spriteSheet, 6), "tuft"), - wingsUp: new Layer(this.getLayer(spriteSheet, 7)), - wingsDown: new Layer(this.getLayer(spriteSheet, 8)), - happyEye: new Layer(this.getLayer(spriteSheet, 9)), + base: new Layer(getLayer(spriteSheet, 0, this.spriteWidth)), + down: new Layer(getLayer(spriteSheet, 1, this.spriteWidth)), + heartOne: new Layer(getLayer(spriteSheet, 2, this.spriteWidth)), + heartTwo: new Layer(getLayer(spriteSheet, 3, this.spriteWidth)), + heartThree: new Layer(getLayer(spriteSheet, 4, this.spriteWidth)), + tuftBase: new Layer(getLayer(spriteSheet, 5, this.spriteWidth), "tuft"), + tuftDown: new Layer(getLayer(spriteSheet, 6, this.spriteWidth), "tuft"), + wingsUp: new Layer(getLayer(spriteSheet, 7, this.spriteWidth)), + wingsDown: new Layer(getLayer(spriteSheet, 8, this.spriteWidth)), + happyEye: new Layer(getLayer(spriteSheet, 9, this.spriteWidth)), }; // Build frames from layers @@ -130,21 +130,6 @@ export class Birb { return anim.draw(this.ctx, this.direction, this.animStart, this.canvasPixelSize, species); } - /** - * Get a layer from the sprite sheet array - * @param {string[][]} array - * @param {number} sprite - * @returns {string[][]} - */ - getLayer(array, sprite) { - // From an array of a horizontal sprite sheet, get the layer for a specific sprite - const layer = []; - for (let y = 0; y < this.spriteWidth; y++) { - layer.push(array[y].slice(sprite * this.spriteWidth, (sprite + 1) * this.spriteWidth)); - } - return layer; - } - /** * @returns {AnimationType} The current animation key */ diff --git a/src/menu.js b/src/menu.js index ba4c659..8e14717 100644 --- a/src/menu.js +++ b/src/menu.js @@ -3,7 +3,8 @@ import { makeElement, onClick, makeDraggable, - makeClosable + makeClosable, + error } from './shared.js'; export const MENU_ID = "birb-menu"; @@ -124,7 +125,7 @@ export function switchMenuItems(menuItems, updateLocationCallback) { } const content = menu.querySelector(".birb-window-content"); if (!content) { - console.error("Birb: Content not found"); + error("Birb: Content not found"); return; } content.innerHTML = ""; diff --git a/src/shared.js b/src/shared.js index 5a6f193..30fe9aa 100644 --- a/src/shared.js +++ b/src/shared.js @@ -79,7 +79,7 @@ export function makeDraggable(element, parent = true, callback = () => { }) { let elementToMove = parent ? element.parentElement : element; if (!elementToMove) { - console.error("Birb: Parent element not found"); + error("Birb: Parent element not found"); return; } @@ -166,4 +166,20 @@ export function debug() { export function error() { console.error("Birb: ", ...arguments); +} + +/** + * Get a layer from a sprite sheet array + * @param {string[][]} spriteSheet The sprite sheet pixel array + * @param {number} spriteIndex The sprite index + * @param {number} width The width of each sprite + * @returns {string[][]} + */ +export function getLayer(spriteSheet, spriteIndex, width) { + // From an array of a horizontal sprite sheet, get the layer for a specific sprite + const layer = []; + for (let y = 0; y < width; y++) { + layer.push(spriteSheet[y].slice(spriteIndex * width, (spriteIndex + 1) * width)); + } + return layer; } \ No newline at end of file