agb_eb_ext 0.25.0

AGB Extension methods
# AGB Extension

Collection of util methods for [AGB](https://github.com/agbrs/agb)

## API

### `backgrounds`

| Item                                    | Description                                               |
|-----------------------------------------|-----------------------------------------------------------|
| `create_text_bg()`                      | Blank P0 background for text                              |
| `create_filled_bg(data, priority)`      | Create a background filled via `fill_with`                |
| `create_full_filled_bg(data, priority)` | Same as `create_filled_bg` but does all 32x32 tiles       |
| `background_stack::<N>(layers)`         | Create up to 4 filled backgrounds, P3 (back) → P0 (front) |
| `full_fill(bg, tile_data)`              | Fill an entire 32x32 background                           |

### `button_highlight`

`ButtonHighlight` — focus indicator that animates between buttons

| Method             | Description                                   |
|--------------------|-----------------------------------------------|
| `new(x, y)`        | Create at pixel position                      |
| `set_target(x, y)` | Set the pixel position to move towards        |
| `update()`         | Step towards the target (call once per frame) |
| `pos()`            | Current position in pixels (`Vector2D<i32>`)  |

### `direction`

`Direction` — `Up` / `Down` / `Left` / `Right`

| Method                       | Description                          |
|------------------------------|--------------------------------------|
| `from_input(buttons)`        | First pressed direction, if any      |
| `from_recent_input(buttons)` | First just_pressed direction, if any |

### `gfx`

| Item                              | Description                                                      |
|-----------------------------------|------------------------------------------------------------------|
| `ShowSprite::show(at, frame)`     | Draw a `&'static Sprite` in one call                             |
| `ShowTag::show(idx, at, frame)`   | Draw one sprite from a `Tag`                                     |
| `ShowAllTag::show_all(at, frame)` | Draw every sprite in a `Tag` in a horizontal row (left to right) |
| `draw_bg_frame(...)`              | Draw a bordered frame (corners/edges/fill) onto a background     |
| `draw_bg_tiles(...)`              | Repeat a meta-tile across a background                           |

### `menu_cursor`

`MenuCursor` — grid/list cursor where every option is on screen

| Method                                | Description                                                            |
|---------------------------------------|------------------------------------------------------------------------|
| `new(column_count, count)`            | Create cursor                                                          |
| `update(buttons)`                     | Move cursor, returns `CursorResult`                                    |
| `idx()`                               | Selected index                                                         |
| `pos()` / `pos_usize()` / `vec_pos()` | Selected column/row as `(u8, u8)`, `(usize, usize)` or `Vector2D<i32>` |
| `set_idx(idx)`                        | Set selected index (clamped)                                           |

`CursorResult` — `NoChange` / `Invalid` / `Moved`

### `scrolling_cursor`

`ScrollingCursor` — wraps `MenuCursor` for vertically scrolling menus

| Method                                                       | Description                                    |
|--------------------------------------------------------------|------------------------------------------------|
| `new(column_count, item_count, visible_row_count)`           | Create cursor                                  |
| `update(buttons)`                                            | Move cursor and scroll, returns `CursorResult` |
| `first_visible_row()`                                        | First row to draw                              |
| `idx()`, `pos()`, `pos_usize()`, `vec_pos()`, `set_idx(idx)` | As `MenuCursor`                                |

### `rng`

`SeedGen` — accumulates entropy each frame to seed a `RandomNumberGenerator`

| Item                         | Description                                   |
|------------------------------|-----------------------------------------------|
| `SeedGen::update(buttons)`   | Mix input into the seed (once per frame)      |
| `SeedGen::create_rng()`      | Build a `RandomNumberGenerator` from the seed |
| `next_u16(rng)`              | Random `u16`                                  |
| `next_u16_in(rng, min, max)` | Random `u16` in an inclusive range            |

### `transitions`

`Fade` — `Start` → `Step1`…`Step5` → `End`, with `next()` returning the following step (`None` at `End`), and `Into<FadeAmount>`

| Function                                 | Description        |
|------------------------------------------|--------------------|
| `fade_to_black(amount, bg_ids, frame)`   | Fade out to black  |
| `fade_from_black(amount, bg_ids, frame)` | Fade in from black |
| `fade_to_white(amount, bg_ids, frame)`   | Fade out to white  |
| `fade_from_white(amount, bg_ids, frame)` | Fade in from white |
| `reset_fade(bg_ids, frame)`              | Clear any fade     |