use bevy::math::Vec2; use bevy::prelude::*; // Window pub const WINDOW_WIDTH: f32 = 600.0; pub const WINDOW_HEIGHT: f32 = 800.0; // Player pub const PLAYER_SPEED: f32 = 300.0; pub const PLAYER_SIZE: Vec2 = Vec2::new(30.0, 30.0); pub const STARTING_LIVES: u32 = 3; pub const PLAYER_RESPAWN_DELAY: f32 = 2.0; pub const PLAYER_INVINCIBILITY_DURATION: f32 = 2.0; // Enemies pub const ENEMY_SPEED: f32 = 100.0; pub const ENEMY_SIZE: Vec2 = Vec2::new(40.0, 40.0); pub const ENEMY_SHOOT_INTERVAL: f32 = 1.5; // Bullets pub const BULLET_SPEED: f32 = 500.0; pub const BULLET_SIZE: Vec2 = Vec2::new(5.0, 15.0); pub const ENEMY_BULLET_SIZE: Vec2 = Vec2::new(8.0, 8.0); pub const ENEMY_BULLET_SPEED: f32 = 300.0; // Formation const FORMATION_ROWS: usize = 4; pub const FORMATION_COLS: usize = 8; pub const FORMATION_ENEMY_COUNT: usize = FORMATION_ROWS * FORMATION_COLS; pub const FORMATION_X_SPACING: f32 = 60.0; pub const FORMATION_Y_SPACING: f32 = 50.0; pub const FORMATION_BASE_Y: f32 = WINDOW_HEIGHT / 2.0 - 150.0; // Collision thresholds (mean of half-widths) pub const BULLET_ENEMY_COLLISION_THRESHOLD: f32 = (BULLET_SIZE.x + ENEMY_SIZE.x) * 0.5; pub const PLAYER_ENEMY_COLLISION_THRESHOLD: f32 = (PLAYER_SIZE.x + ENEMY_SIZE.x) * 0.5; pub const ENEMY_BULLET_PLAYER_COLLISION_THRESHOLD: f32 = (ENEMY_BULLET_SIZE.x + PLAYER_SIZE.x) * 0.5; // Tractor beam pub const TRACTOR_BEAM_WIDTH: f32 = 20.0; pub const TRACTOR_BEAM_DURATION: f32 = 3.0; pub const CAPTURE_DURATION: f32 = 10.0; pub const BEAM_GLOW_WIDTH: f32 = 40.0; pub const BEAM_GLOW_COLOR: Color = Color::srgba(0.3, 0.0, 0.5, 0.25); pub const BEAM_CORE_COLOR: Color = Color::srgba(0.7, 0.2, 1.0, 0.7); pub const BEAM_PULSE_FREQ: f32 = 3.0; pub const BEAM_PULSE_AMPLITUDE: f32 = 0.15; // Special stages pub const SPECIAL_STAGE_INTERVAL: u32 = 3; // Starfield pub const STAR_COUNT: usize = 150; pub const STAR_MIN_SIZE: f32 = 1.0; pub const STAR_MAX_SIZE: f32 = 3.0; pub const STAR_MIN_SPEED: f32 = 20.0; pub const STAR_MAX_SPEED: f32 = 100.0; pub const STAR_Z_DEPTH: f32 = -10.0; // Explosion pub const EXPLOSION_DURATION: f32 = 0.4; pub const EXPLOSION_BASE_SIZE: Vec2 = Vec2::new(15.0, 15.0); pub const EXPLOSION_MAX_SIZE: Vec2 = Vec2::new(50.0, 50.0); pub const EXPLOSION_COLOR: Color = Color::srgba(1.0, 0.6, 0.1, 1.0);