/** * returns an RGBA buffer * @param {number} r red * @param {number} g green * @param {number} b blue * @param {number} a alpha * @returns {RGBA} */ function rgba(r, g, b, a) { const buffer = Uint8Array.allocPlain(4); buffer[0] = r; buffer[1] = g; buffer[2] = b; buffer[3] = a; return buffer; } const PAD_BUTTON_START = 0x1000; const PAD_BUTTON_A = 0x0100; const RED_COLOR = rgba(255, 0, 0, 255); const GREEN_COLOR = rgba(0, 255, 0, 255); const WHITE_COLOR = rgba(255, 255, 255, 255); const FALLING_SPEED = 250; const TERMINAL_VELOCITY_SPEED = 500; function rgba_compare(rgba1, rgba2) { return (rgba1[0] == rgba2[0]) && (rgba1[1] == rgba2[1]) && (rgba1[2] == rgba2[2]) && (rgba1[3] == rgba2[3]); } /** * clamps a number to the min and max values. * @param {number} num * @param {number} min * @param {number} max * @returns a clamped number */ function clamp(num, min, max) { return Math.min(Math.max(num, min), max); } globalThis.rectangle_color = RED_COLOR; /** @type {GRRLibTexture} */ globalThis.background = null; /** @type {GRRLibTexture} */ globalThis.bird = null; globalThis.bird_velocity = 0; globalThis.bird_position = 0; function swap_colors() { if (rgba_compare(rectangle_color, RED_COLOR)) { rectangle_color = GREEN_COLOR; } else if (rgba_compare(rectangle_color, GREEN_COLOR)) { rectangle_color = RED_COLOR; } } function start() { const background = wii.get_file("background-day.png"); const bird = wii.get_file("yellowbird-midflap.png"); globalThis.background = wii.grrlib.load_texture(background); globalThis.bird = wii.grrlib.load_texture(bird); } function update_bird() { const deltatime = wii.get_deltatime(); bird_position -= bird_velocity * deltatime; bird_velocity = clamp(bird_velocity - (FALLING_SPEED * deltatime), -TERMINAL_VELOCITY_SPEED, TERMINAL_VELOCITY_SPEED); wii.grrlib.draw_img(0, bird_position, bird, 0, 1, 1, WHITE_COLOR); } function update() { const pressed = wii.pad.buttons_down(); if (pressed & PAD_BUTTON_START) { wii.print("exiting from js"); wii.exit(); } if (pressed & PAD_BUTTON_A) { bird_velocity = FALLING_SPEED; } wii.grrlib.draw_img(0, 0, background, 0, 1, 1, WHITE_COLOR); update_bird(); wii.print("deltatime: " + wii.get_deltatime()) }