aa0abd9ae1
defaults.hpp tenia 527 línies amb 17 namespaces de dominis distints (Window, Game, Zones, Entities, Palette, Ship, Physics, Math, Brightness, Rendering, Audio, Music, Sound, Controls, Enemies, Title, FloatingScore). 22 .cpp/.hpp l'incloïen, així que tocar una constant forçava recompilar pràcticament tot. Es divideix en 15 subfitxers (un per namespace, fusionant Music/Sound a audio.hpp i unificant els dos blocs Game duplicats en un sol): defaults/window.hpp defaults/audio.hpp defaults/game.hpp defaults/controls.hpp defaults/zones.hpp defaults/enemies.hpp defaults/entities.hpp defaults/title.hpp defaults/palette.hpp defaults/floating_score.hpp defaults/ship.hpp defaults/math.hpp defaults/physics.hpp defaults/brightness.hpp defaults/rendering.hpp Cross-deps explícites (#include en lloc d'order-of-declaration): zones.hpp -> game.hpp (per Game::WIDTH/HEIGHT) enemies.hpp -> entities.hpp (per SHIP_RADIUS) title.hpp -> game.hpp, math.hpp + <cmath> defaults.hpp queda com a umbrella que inclou els 15 subfitxers. Els 22 includers existents no requereixen cap canvi. Codi nou pot incloure el subfitxer concret per millorar la compilació incremental. Hallazgos #22 i #30 de CODE_REVIEW.md. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
84 lines
4.6 KiB
C++
84 lines
4.6 KiB
C++
// enemies.hpp - Configuració per tipus d'enemic (Pentagon/Cuadrado/Molinillo), spawn i scoring
|
|
// © 2026 JailDesigner
|
|
|
|
#pragma once
|
|
|
|
#include "core/defaults/entities.hpp"
|
|
|
|
namespace Defaults::Enemies {
|
|
|
|
// Pentagon (esquivador - zigzag evasion)
|
|
namespace Pentagon {
|
|
constexpr float VELOCITAT = 35.0F; // px/s (slightly slower)
|
|
constexpr float CANVI_ANGLE_PROB = 0.20F; // 20% per wall hit (frequent zigzag)
|
|
constexpr float CANVI_ANGLE_MAX = 1.0F; // Max random angle change (rad)
|
|
constexpr float DROTACIO_MIN = 0.75F; // Min visual rotation (rad/s) [+50%]
|
|
constexpr float DROTACIO_MAX = 3.75F; // Max visual rotation (rad/s) [+50%]
|
|
constexpr const char* SHAPE_FILE = "enemy_pentagon.shp";
|
|
} // namespace Pentagon
|
|
|
|
// Cuadrado (perseguidor - tracks player)
|
|
namespace Cuadrado {
|
|
constexpr float VELOCITAT = 40.0F; // px/s (medium speed)
|
|
constexpr float TRACKING_STRENGTH = 0.5F; // Interpolation toward player (0.0-1.0)
|
|
constexpr float TRACKING_INTERVAL = 1.0F; // Seconds between angle updates
|
|
constexpr float DROTACIO_MIN = 0.3F; // Slow rotation [+50%]
|
|
constexpr float DROTACIO_MAX = 1.5F; // [+50%]
|
|
constexpr const char* SHAPE_FILE = "enemy_square.shp";
|
|
} // namespace Cuadrado
|
|
|
|
// Molinillo (agressiu - fast straight lines, proximity spin-up)
|
|
namespace Molinillo {
|
|
constexpr float VELOCITAT = 50.0F; // px/s (fastest)
|
|
constexpr float CANVI_ANGLE_PROB = 0.05F; // 5% per wall hit (rare direction change)
|
|
constexpr float CANVI_ANGLE_MAX = 0.3F; // Small angle adjustments
|
|
constexpr float DROTACIO_MIN = 3.0F; // Base rotation (rad/s) [+50%]
|
|
constexpr float DROTACIO_MAX = 6.0F; // [+50%]
|
|
constexpr float DROTACIO_PROXIMITY_MULTIPLIER = 3.0F; // Spin-up multiplier when near ship
|
|
constexpr float PROXIMITY_DISTANCE = 100.0F; // Distance threshold (px)
|
|
constexpr const char* SHAPE_FILE = "enemy_pinwheel.shp";
|
|
} // namespace Molinillo
|
|
|
|
// Animation parameters (shared)
|
|
namespace Animation {
|
|
// Palpitation
|
|
constexpr float PALPITACIO_TRIGGER_PROB = 0.01F; // 1% chance per second
|
|
constexpr float PALPITACIO_DURACIO_MIN = 1.0F; // Min duration (seconds)
|
|
constexpr float PALPITACIO_DURACIO_MAX = 3.0F; // Max duration (seconds)
|
|
constexpr float PALPITACIO_AMPLITUD_MIN = 0.08F; // Min scale variation
|
|
constexpr float PALPITACIO_AMPLITUD_MAX = 0.20F; // Max scale variation
|
|
constexpr float PALPITACIO_FREQ_MIN = 1.5F; // Min frequency (Hz)
|
|
constexpr float PALPITACIO_FREQ_MAX = 3.0F; // Max frequency (Hz)
|
|
|
|
// Rotation acceleration
|
|
constexpr float ROTACIO_ACCEL_TRIGGER_PROB = 0.02F; // 2% chance per second [4x more frequent]
|
|
constexpr float ROTACIO_ACCEL_DURACIO_MIN = 3.0F; // Min transition time
|
|
constexpr float ROTACIO_ACCEL_DURACIO_MAX = 8.0F; // Max transition time
|
|
constexpr float ROTACIO_ACCEL_MULTIPLIER_MIN = 0.3F; // Min speed multiplier [more dramatic]
|
|
constexpr float ROTACIO_ACCEL_MULTIPLIER_MAX = 4.0F; // Max speed multiplier [more dramatic]
|
|
} // namespace Animation
|
|
|
|
// Spawn safety and invulnerability system
|
|
namespace Spawn {
|
|
// Safe spawn distance from player
|
|
constexpr float SAFETY_DISTANCE_MULTIPLIER = 3.0F; // 3x ship radius
|
|
constexpr float SAFETY_DISTANCE = Defaults::Entities::SHIP_RADIUS * SAFETY_DISTANCE_MULTIPLIER; // 36.0f px
|
|
constexpr int MAX_SPAWN_ATTEMPTS = 50; // Max attempts to find safe position
|
|
|
|
// Invulnerability system
|
|
constexpr float INVULNERABILITY_DURATION = 3.0F; // Seconds
|
|
constexpr float INVULNERABILITY_BRIGHTNESS_START = 0.3F; // Dim
|
|
constexpr float INVULNERABILITY_BRIGHTNESS_END = 0.7F; // Normal (same as Defaults::Brightness::ENEMIC)
|
|
constexpr float INVULNERABILITY_SCALE_START = 0.0F; // Invisible
|
|
constexpr float INVULNERABILITY_SCALE_END = 1.0F; // Full size
|
|
} // namespace Spawn
|
|
|
|
// Scoring system (puntuación per type de enemy)
|
|
namespace Scoring {
|
|
constexpr int PENTAGON_SCORE = 100; // Pentágono (esquivador, 35 px/s)
|
|
constexpr int QUADRAT_SCORE = 150; // Cuadrado (perseguidor, 40 px/s)
|
|
constexpr int MOLINILLO_SCORE = 200; // Molinillo (agressiu, 50 px/s)
|
|
} // namespace Scoring
|
|
|
|
} // namespace Defaults::Enemies
|