Lint: bugs reales + enums uint8_t + use-equals-default
Resuelve la categoría de findings de tidy que son bugs reales o cambios
de tipo concretos, no transforms automáticos:
Bugs reales (bugprone-* y clang-diagnostic-*):
- bugprone-empty-catch en postfx_config.cpp: el catch silencioso del
parser RGB era intencional (fallback a defaults si el array no parsea
como int). Marcado con @INTENTIONAL (keyword ya configurado en
.clang-tidy via bugprone-empty-catch.IgnoreCatchWithKeywords) y
comentario ampliado explicando la decisión.
- clang-diagnostic-unused-private-field en Starfield: el campo
'densitat_' se asignaba en el constructor pero nunca se leía. El
parámetro 'densitat' se reparte directamente en las CapaConfig al
construir, así que el field era código muerto. Eliminado.
- bugprone-branch-clone en vector_text.cpp: el switch de
get_shape_filename tenía dos grupos consecutivos (dígitos 0-9 y
mayúsculas A-Z) con cuerpo idéntico. Fusionados en un único case con
comentario explicando que comparten path porque la shape se llama
igual que el caracter.
- bugprone-switch-missing-default-case en Input::handleEvent: el switch
manejaba solo SDL_EVENT_GAMEPAD_ADDED/REMOVED y caía por fall-through
a un return {} fuera del switch. Añadido default: explícito con
comentario sobre qué hace Input vs el resto del sistema.
- bugprone-implicit-widening-of-multiplication-result en
GameScene::bullets_ y Collision::Context::bullets: 'MAX_BALES * 2'
es int*int y se widening implícitamente a std::size_t para el
template arg de std::array. Cast explícito a size_t en ambos sitios.
Otros mecánicos:
- performance-enum-size: 10 enums sin tipo subyacente pasaron a
': std::uint8_t' (PrimitiveType, InputAction, Mode, SceneType,
Option, AnimationState, TitleState, ModeSpawn, EstatStage,
ShipState). #include <cstdint> añadido donde faltaba.
- modernize-use-equals-default en SpawnController: el ctor por
defecto tenía cuerpo vacío ({}). Pasado a '= default;'.
Cero supresiones. La única "marca" es @INTENTIONAL en el empty-catch,
que es el mecanismo configurado en el .clang-tidy del proyecto para
distinguir intencionales de accidentales.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -40,8 +40,10 @@ void readRgb255(const fkyaml::node& node, const char* key,
|
||||
dst_r = static_cast<float>(R) / 255.0F;
|
||||
dst_g = static_cast<float>(G) / 255.0F;
|
||||
dst_b = static_cast<float>(B) / 255.0F;
|
||||
} catch (...) {
|
||||
// Mantiene los defaults si algún elemento no es entero.
|
||||
} catch (...) { // @INTENTIONAL
|
||||
// Mantiene los defaults si algún elemento del RGB no es entero parseable
|
||||
// (el YAML viene de archivo, así que es razonable degradar a los defaults
|
||||
// en vez de propagar la excepción y abortar el load del postpro entero).
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <cstdint>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
@@ -11,7 +12,7 @@
|
||||
namespace Graphics {
|
||||
|
||||
// Tipo de primitiva dins de una shape
|
||||
enum class PrimitiveType {
|
||||
enum class PrimitiveType : std::uint8_t {
|
||||
POLYLINE, // Secuencia de points connectats
|
||||
LINE // Línia individual (2 points)
|
||||
};
|
||||
|
||||
@@ -21,8 +21,7 @@ Starfield::Starfield(Rendering::Renderer* renderer,
|
||||
: shape_estrella_(ShapeLoader::load("star.shp")),
|
||||
renderer_(renderer),
|
||||
punt_fuga_(punt_fuga),
|
||||
area_(area),
|
||||
densitat_(densitat) {
|
||||
area_(area) {
|
||||
if (!shape_estrella_ || !shape_estrella_->isValid()) {
|
||||
std::cerr << "ERROR: No s'ha pogut load star.shp" << '\n';
|
||||
return;
|
||||
|
||||
@@ -77,7 +77,6 @@ class Starfield {
|
||||
Vec2 punt_fuga_; // Vec2 de origin de las estrelles
|
||||
SDL_FRect area_; // Àrea activa
|
||||
float radi_max_; // Distancia màxima del centro al límit de pantalla
|
||||
int densitat_; // Nombre total de estrelles
|
||||
float multiplicador_brightness_{1.0F}; // Multiplicador de brightness (1.0 = default)
|
||||
};
|
||||
|
||||
|
||||
@@ -80,7 +80,9 @@ void VectorText::load_charset() {
|
||||
}
|
||||
|
||||
auto VectorText::get_shape_filename(char c) const -> std::string {
|
||||
// Mapeo carácter → nombre de archivo (con prefix "font/")
|
||||
// Mapeo carácter → nombre de archivo (con prefix "font/").
|
||||
// Dígitos 0-9 y mayúsculas A-Z comparten el mismo path: la shape se llama
|
||||
// como el caracter mismo, así que se agrupan en un único case.
|
||||
switch (c) {
|
||||
case '0':
|
||||
case '1':
|
||||
@@ -92,9 +94,6 @@ auto VectorText::get_shape_filename(char c) const -> std::string {
|
||||
case '7':
|
||||
case '8':
|
||||
case '9':
|
||||
return std::string("font/char_") + c + ".shp";
|
||||
|
||||
// Lletres majúscules A-Z
|
||||
case 'A':
|
||||
case 'B':
|
||||
case 'C':
|
||||
|
||||
@@ -420,8 +420,11 @@ auto Input::handleEvent(const SDL_Event& event) -> std::string {
|
||||
return addGamepad(event.gdevice.which);
|
||||
case SDL_EVENT_GAMEPAD_REMOVED:
|
||||
return removeGamepad(event.gdevice.which);
|
||||
default:
|
||||
// El resto de eventos SDL no interesan a Input (los maneja el resto
|
||||
// del sistema: ventana, teclado, mouse).
|
||||
return {};
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
auto Input::addGamepad(int device_index) -> std::string {
|
||||
|
||||
@@ -3,11 +3,12 @@
|
||||
#include <SDL3/SDL.h>
|
||||
|
||||
#include <array>
|
||||
#include <cstdint>
|
||||
#include <string>
|
||||
#include <unordered_map>
|
||||
|
||||
// --- Enums ---
|
||||
enum class InputAction : int { // Acciones de entrada posibles en el juego
|
||||
enum class InputAction : std::uint8_t { // Acciones de entrada posibles en el juego
|
||||
// Inputs de juego (movimiento y acción)
|
||||
LEFT, // Rotar izquierda
|
||||
RIGHT, // Rotar derecha
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
namespace GameConfig {
|
||||
|
||||
// Mode de juego
|
||||
enum class Mode {
|
||||
enum class Mode : std::uint8_t {
|
||||
NORMAL, // Partida normal
|
||||
DEMO // Mode demostració (futur)
|
||||
};
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <cstdint>
|
||||
|
||||
#include "core/system/game_config.hpp"
|
||||
|
||||
namespace SceneManager {
|
||||
@@ -12,7 +14,7 @@ namespace SceneManager {
|
||||
class SceneContext {
|
||||
public:
|
||||
// Tipo de escena del juego
|
||||
enum class SceneType {
|
||||
enum class SceneType : std::uint8_t {
|
||||
LOGO, // Pantalla de start (logo JAILGAMES)
|
||||
TITLE, // Pantalla de título con menú
|
||||
GAME, // Juego principal (Asteroids)
|
||||
@@ -20,7 +22,7 @@ class SceneContext {
|
||||
};
|
||||
|
||||
// Opciones específiques para cada escena
|
||||
enum class Option {
|
||||
enum class Option : std::uint8_t {
|
||||
NONE, // Sin opciones especials (comportament per defecte)
|
||||
JUMP_TO_TITLE_MAIN, // TITLE: Saltar directament a MAIN (starfield instantani)
|
||||
// MODE_DEMO, // GAME: Mode demostració con IA (futur)
|
||||
|
||||
@@ -61,7 +61,9 @@ class GameScene final : public Scene {
|
||||
// Estat del juego
|
||||
std::array<Ship, 2> ships_; // [0]=P1, [1]=P2
|
||||
std::array<Enemy, Constants::MAX_ORNIS> enemies_;
|
||||
std::array<Bullet, Constants::MAX_BALES * 2> bullets_; // 6 balas: P1=[0,1,2], P2=[3,4,5]
|
||||
// 6 balas: P1=[0,1,2], P2=[3,4,5]. El cast a size_t evita la
|
||||
// widening conversion implícita que detecta clang-tidy.
|
||||
std::array<Bullet, static_cast<std::size_t>(Constants::MAX_BALES) * 2> bullets_;
|
||||
std::array<float, 2> hit_timer_per_player_; // Death timers per player (seconds)
|
||||
|
||||
// Lives and game over system
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#include <SDL3/SDL.h>
|
||||
|
||||
#include <array>
|
||||
#include <cstdint>
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
@@ -32,7 +33,7 @@ class LogoScene final : public Scene {
|
||||
|
||||
private:
|
||||
// Màquina de estats per l'animación
|
||||
enum class AnimationState {
|
||||
enum class AnimationState : std::uint8_t {
|
||||
PRE_ANIMATION, // Pantalla negra inicial
|
||||
ANIMATION, // Animación de zoom de lletres
|
||||
POST_ANIMATION, // Logo complet visible
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#include <SDL3/SDL.h>
|
||||
|
||||
#include <array>
|
||||
#include <cstdint>
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
@@ -39,7 +40,7 @@ class TitleScene final : public Scene {
|
||||
|
||||
private:
|
||||
// Màquina de estats per la pantalla de título
|
||||
enum class TitleState {
|
||||
enum class TitleState : std::uint8_t {
|
||||
STARFIELD_FADE_IN, // Fade-in del starfield (3.0s)
|
||||
STARFIELD, // Pantalla con camp de estrelles (4.0s)
|
||||
MAIN, // Pantalla de título con text (indefinit, hasta START)
|
||||
|
||||
@@ -15,9 +15,7 @@
|
||||
|
||||
namespace StageSystem {
|
||||
|
||||
SpawnController::SpawnController()
|
||||
|
||||
{}
|
||||
SpawnController::SpawnController() = default;
|
||||
|
||||
void SpawnController::configure(const StageConfig* config) {
|
||||
config_ = config;
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
namespace StageSystem {
|
||||
|
||||
// Tipo de mode de spawn
|
||||
enum class ModeSpawn {
|
||||
enum class ModeSpawn : std::uint8_t {
|
||||
PROGRESSIVE, // Spawn progressiu con intervals
|
||||
IMMEDIATE, // Todos los enemigos de cop
|
||||
WAVE // Onades de 3-5 enemigos (futura extensió)
|
||||
|
||||
@@ -31,7 +31,7 @@ namespace Systems::Collision {
|
||||
struct Context {
|
||||
std::array<Ship, 2>& ships;
|
||||
std::array<Enemy, Defaults::Entities::MAX_ORNIS>& enemies;
|
||||
std::array<Bullet, Defaults::Entities::MAX_BALES * 2>& bullets;
|
||||
std::array<Bullet, static_cast<std::size_t>(Defaults::Entities::MAX_BALES) * 2>& bullets;
|
||||
std::array<float, 2>& hit_timer_per_player;
|
||||
std::array<int, 2>& score_per_player;
|
||||
std::array<int, 2>& lives_per_player;
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#include <SDL3/SDL.h>
|
||||
|
||||
#include <array>
|
||||
#include <cstdint>
|
||||
#include <memory>
|
||||
|
||||
#include "core/graphics/shape.hpp"
|
||||
@@ -16,7 +17,7 @@
|
||||
namespace Title {
|
||||
|
||||
// Estats de l'animación de la ship
|
||||
enum class ShipState {
|
||||
enum class ShipState : std::uint8_t {
|
||||
ENTERING, // Entrant desde fuera de pantalla
|
||||
FLOATING, // Flotante en posición estàtica
|
||||
EXITING // Volant hacia el point de fuga
|
||||
|
||||
Reference in New Issue
Block a user