![UPENDI](/branding/upendi_logo.png)

# JuggleBoard Game

Un gioco arcade **reaction & chaining** per dispositivi mobili (orizzontale), realizzato in **Godot 4.7** (GDScript).

**Prodotto per la [Cooperativa Sociale UPENDI](https://www.upendi.it/)** (Gravina in Puglia) — Pedagogia del Circo e Circo Sociale.

> Il logo UPENDI è stato generato con l'API Gemini.

Un gioco arcade **reaction & chaining** per dispositivi mobili (orizzontale), realizzato in **Godot 4.7** (GDScript), ispirato al prodotto riabilitativo "Juggle Board".

## Gameplay
- **5 corsie orizzontali**, ognuna con una **pallina colorata** a riposo sul lato destro.
- Un **bersaglio in alto** indica quale pallina toccare.
- Toccando la pallina giusta: scivola a sinistra e poi torna a destra, con un **suono di conferma**.
- Un nuovo bersaglio appare **solo se c'è almeno una pallina a riposo**.
- Devi concatenare i lanci **prima che scada il timeout**: più concateni, più punti (combo).
- **Difficoltà crescente**: il tempo parte molto disteso (~4,5s) e **si riduce** con il tempo trascorso e il punteggio.
- **Tap sbagliato** → suono di errore e reset combo (nessun game over).
- **Combo con decadimento**: il combo cresce con i tap rapidi ma **si riduce pian piano** in proporzione al tempo che aspetti prima di cliccare la pallina bersaglio (rate configurabile `COMBO_DECAY`).
- **Timeout scaduto** → suono dedicato, reset combo, nuovo bersaglio (nessun game over).
- I suoni (lancio, errore, timeout) sono generati proceduralmente in 8-bit.

## Requisiti
- Godot 4.x (sviluppato e testato con 4.7.1, renderer GL Compatibility).

## Eseguire
```bash
# dal percorso del progetto
godot --path .
```
Oppure apri il progetto con l'editor Godot (`godot -e .`) e premi **Play** (F5).

## Controlli
- **Desktop**: click del mouse sulla pallina.
- **Mobile**: tocco sullo schermo.

## Struttura
```
project.godot          # configurazione (viewport 1280x720, landscape, GL Compatibility)
icon.svg
scenes/
  main.tscn            # scena principale (radice Node2D + script)
scripts/
  main.gd              # logica di gioco, HUD, punteggio, difficoltà
  ball.gd              # pallina: Area2D, scivolata sinistra↔destra, input
  target_dot.gd        # indicatore del colore bersaglio
```

## Personalizzare la difficoltà
In `scripts/main.gd` (sezione "Tuning difficoltà"):
- `START_TIME` → tempo iniziale tra un ordine e l'altro (s). Più alto = partenza più distesa.
- `MIN_TIME` → tempo minimo (velocità massima) raggiunto a difficoltà piena.
- `TIME_RAMP` → secondi di gioco per raggiungere la difficoltà piena.
- `SCORE_RAMP` → punteggio per raggiungere la difficoltà piena.

La difficoltà cresce col massimo tra il fattore-tempo e il fattore-punteggio.

## Esportazione mobile
Installa dal Project Manager il template **Android** (o iOS su macOS), poi
*Project → Export* con preset `Android` / `Web`.
