// Format classique Flappy Bird : le personnage reste à une position d'écran // fixe, le décor défile de droite à gauche (pas de piste qui change de // forme selon le jour — parcours procédural à chaque partie, sans graine // partagée, puisqu'il n'y a plus de comparaison "même tracé pour tous"). export const VIEWPORT_WIDTH = 340; export const VIEWPORT_HEIGHT = 500; export const GROUND_HEIGHT = 36; export const GROUND_Y = VIEWPORT_HEIGHT - GROUND_HEIGHT; export const ICARUS_X = VIEWPORT_WIDTH * 0.3; export const ICARUS_RADIUS = 12; export const ICARUS_START_Y = VIEWPORT_HEIGHT / 2; export const GRAVITY = 900; // unités/seconde² export const FLAP_IMPULSE = -300; // vitesse verticale imposée à chaque battement d'aile export const MAX_FALL_SPEED = 480; export const TILT_MAX_RADIANS = (45 * Math.PI) / 180; // Animation des ailes (indépendante de l'inclinaison du corps) : un battement // continu en boucle (pour que ça se voie même sans taper, dès l'écran de // repos) + un battement plus ample et net à chaque tap, qui prend le dessus // brièvement sur le cycle continu. export const WING_REST_RADIANS = -(20 * Math.PI) / 180; export const WING_IDLE_PEAK_RADIANS = (15 * Math.PI) / 180; export const WING_IDLE_PERIOD_MS = 480; export const WING_FLAP_MAX_RADIANS = (75 * Math.PI) / 180; export const WING_FLAP_ANIM_MS = 260; export const FORWARD_SPEED = 130; // unités/seconde, vitesse de défilement des colonnes export const COLUMN_WIDTH = 46; export const COLUMN_GAP = 128; export const COLUMN_SPACING = 210; export const COLUMN_GAP_MARGIN = 50; // distance mini entre le centre du trou et le sol/plafond export const FIXED_DT_MS = 1000 / 60; export const MAX_FRAME_DT_MS = 250; // évite la "spirale de la mort" après un onglet en arrière-plan export const MIN_SCORE = 0; export const MAX_SCORE = 1000000;