use bevy::math::Vec2; use bevy::prelude::*; // --- Constants --- pub const WINDOW_WIDTH: f32 = 600.0; pub const WINDOW_HEIGHT: f32 = 800.0; pub const PLAYER_SPEED: f32 = 300.0; pub const BULLET_SPEED: f32 = 500.0; pub const ENEMY_SPEED: f32 = 100.0; pub const PLAYER_SIZE: Vec2 = Vec2::new(30.0, 30.0); pub const ENEMY_SIZE: Vec2 = Vec2::new(40.0, 40.0); pub const BULLET_SIZE: Vec2 = Vec2::new(5.0, 15.0); // Player bullet pub const ENEMY_BULLET_SIZE: Vec2 = Vec2::new(8.0, 8.0); // Enemy bullet pub const ENEMY_BULLET_SPEED: f32 = 300.0; pub const ENEMY_SHOOT_INTERVAL: f32 = 1.5; // Formation constants 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; // Top area for formation pub const STARTING_LIVES: u32 = 3; pub const PLAYER_RESPAWN_DELAY: f32 = 2.0; pub const PLAYER_INVINCIBILITY_DURATION: f32 = 2.0; // Collision thresholds pub const BULLET_ENEMY_COLLISION_THRESHOLD: f32 = (BULLET_SIZE.x + ENEMY_SIZE.x) * 0.5; // 22.5 pub const PLAYER_ENEMY_COLLISION_THRESHOLD: f32 = (PLAYER_SIZE.x + ENEMY_SIZE.x) * 0.5; // 35.0 pub const ENEMY_BULLET_PLAYER_COLLISION_THRESHOLD: f32 = (ENEMY_BULLET_SIZE.x + PLAYER_SIZE.x) * 0.5; // Tractor beam constants pub const TRACTOR_BEAM_WIDTH: f32 = 20.0; pub const TRACTOR_BEAM_DURATION: f32 = 3.0; pub const TRACTOR_BEAM_COLOR: Color = Color::srgba(0.5, 0.0, 0.8, 0.6); pub const CAPTURE_DURATION: f32 = 10.0; // How long the player stays captured // Tractor beam visual constants 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; // Starfield constants 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; // Behind all game entities // Explosion constants 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);