refactor: normalizar notificaciones a castellano, title case sin dos puntos
- Todo en castellano (Vinyeta→viñeta, Cromàtica→cromática, Complet→completo, Desactivat→desactivado, Boids→boids) - Primera letra mayúscula, resto minúscula (MODO SANDBOX→Modo sandbox, etc.) - Sin dos puntos separador (PostFX: X→PostFX X, Escalado: X→Escalado X, Sprite: X→Textura X) - Separadores de miles en castellano (1,000→1.000 pelotas) - Nombres de figura en minúscula via tolower (SPHERE→sphere → "Modo sphere") - Ajuste valores PostFX por defecto (vignette 1.5→0.8, chroma 1.0→0.2) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -77,7 +77,7 @@ void BoidManager::activateBoids() {
|
||||
|
||||
// Mostrar notificación (solo si NO estamos en modo demo o logo)
|
||||
if (state_mgr_ && ui_mgr_ && state_mgr_->getCurrentMode() == AppMode::SANDBOX) {
|
||||
ui_mgr_->showNotification("Modo Boids");
|
||||
ui_mgr_->showNotification("Modo boids");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -93,7 +93,7 @@ void BoidManager::deactivateBoids(bool force_gravity_on) {
|
||||
|
||||
// Mostrar notificación (solo si NO estamos en modo demo o logo)
|
||||
if (state_mgr_ && ui_mgr_ && state_mgr_->getCurrentMode() == AppMode::SANDBOX) {
|
||||
ui_mgr_->showNotification("Modo Física");
|
||||
ui_mgr_->showNotification("Modo física");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@ constexpr Uint64 NOTIFICATION_FADE_TIME = 200; // Duración animación salida
|
||||
constexpr float NOTIFICATION_BG_ALPHA = 0.7f; // Opacidad fondo semitransparente (0.0-1.0)
|
||||
constexpr int NOTIFICATION_PADDING = 10; // Padding interno del fondo (píxeles físicos)
|
||||
constexpr int NOTIFICATION_TOP_MARGIN = 20; // Margen superior desde borde pantalla (píxeles físicos)
|
||||
constexpr char KIOSK_NOTIFICATION_TEXT[] = "MODO KIOSKO";
|
||||
constexpr char KIOSK_NOTIFICATION_TEXT[] = "Modo kiosko";
|
||||
|
||||
// Configuración de pérdida aleatoria en rebotes
|
||||
constexpr float BASE_BOUNCE_COEFFICIENT = 0.75f; // Coeficiente base IGUAL para todas las pelotas
|
||||
|
||||
@@ -472,20 +472,20 @@ void Engine::handleGravityToggle() {
|
||||
toggleBoidsMode(false); // Cambiar a PHYSICS sin activar gravedad (preserva inercia)
|
||||
// NO llamar a forceBallsGravityOff() porque aplica impulsos que destruyen la inercia de BOIDS
|
||||
// La gravedad ya está desactivada por BoidManager::activateBoids() y se mantiene al salir
|
||||
showNotificationForAction("Modo Física - Gravedad Off");
|
||||
showNotificationForAction("Modo física, gravedad off");
|
||||
return;
|
||||
}
|
||||
|
||||
// Si estamos en modo figura, salir a modo física SIN GRAVEDAD
|
||||
if (current_mode_ == SimulationMode::SHAPE) {
|
||||
toggleShapeModeInternal(false); // Desactivar figura sin forzar gravedad ON
|
||||
showNotificationForAction("Gravedad Off");
|
||||
showNotificationForAction("Gravedad off");
|
||||
} else {
|
||||
scene_manager_->switchBallsGravity(); // Toggle normal en modo física
|
||||
// Determinar estado actual de gravedad (gravity_force_ != 0.0f significa ON)
|
||||
const Ball* first_ball = scene_manager_->getFirstBall();
|
||||
bool gravity_on = (first_ball == nullptr) ? true : (first_ball->getGravityForce() != 0.0f);
|
||||
showNotificationForAction(gravity_on ? "Gravedad On" : "Gravedad Off");
|
||||
showNotificationForAction(gravity_on ? "Gravedad on" : "Gravedad off");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -679,9 +679,9 @@ void Engine::toggleDemoMode() {
|
||||
|
||||
// Mostrar notificación según el modo resultante
|
||||
if (new_mode == AppMode::SANDBOX && prev_mode != AppMode::SANDBOX) {
|
||||
showNotificationForAction("MODO SANDBOX");
|
||||
showNotificationForAction("Modo sandbox");
|
||||
} else if (new_mode == AppMode::DEMO && prev_mode != AppMode::DEMO) {
|
||||
showNotificationForAction("MODO DEMO");
|
||||
showNotificationForAction("Modo demo");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -692,9 +692,9 @@ void Engine::toggleDemoLiteMode() {
|
||||
|
||||
// Mostrar notificación según el modo resultante
|
||||
if (new_mode == AppMode::SANDBOX && prev_mode != AppMode::SANDBOX) {
|
||||
showNotificationForAction("MODO SANDBOX");
|
||||
showNotificationForAction("Modo sandbox");
|
||||
} else if (new_mode == AppMode::DEMO_LITE && prev_mode != AppMode::DEMO_LITE) {
|
||||
showNotificationForAction("MODO DEMO LITE");
|
||||
showNotificationForAction("Modo demo lite");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -705,9 +705,9 @@ void Engine::toggleLogoMode() {
|
||||
|
||||
// Mostrar notificación según el modo resultante
|
||||
if (new_mode == AppMode::SANDBOX && prev_mode != AppMode::SANDBOX) {
|
||||
showNotificationForAction("MODO SANDBOX");
|
||||
showNotificationForAction("Modo sandbox");
|
||||
} else if (new_mode == AppMode::LOGO && prev_mode != AppMode::LOGO) {
|
||||
showNotificationForAction("MODO LOGO");
|
||||
showNotificationForAction("Modo logo");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1052,10 +1052,10 @@ void Engine::toggleRealFullscreen() {
|
||||
|
||||
void Engine::applyPostFXPreset(int mode) {
|
||||
static constexpr float presets[4][3] = {
|
||||
{1.5f, 0.0f, 0.0f}, // 0: Vinyeta
|
||||
{1.5f, 0.0f, 0.8f}, // 1: Scanlines
|
||||
{1.5f, 1.0f, 0.0f}, // 2: Cromàtica
|
||||
{1.5f, 1.0f, 0.8f}, // 3: Complet
|
||||
{0.8f, 0.0f, 0.0f}, // 0: Vinyeta
|
||||
{0.8f, 0.0f, 0.8f}, // 1: Scanlines
|
||||
{0.8f, 0.2f, 0.0f}, // 2: Cromàtica
|
||||
{0.8f, 0.2f, 0.8f}, // 3: Complet
|
||||
};
|
||||
postfx_uniforms_.vignette_strength = presets[mode][0];
|
||||
postfx_uniforms_.chroma_strength = presets[mode][1];
|
||||
@@ -1071,8 +1071,8 @@ void Engine::handlePostFXCycle() {
|
||||
|
||||
void Engine::handlePostFXToggle() {
|
||||
static constexpr const char* names[4] = {
|
||||
"PostFX: Vinyeta", "PostFX: Scanlines",
|
||||
"PostFX: Cromàtica", "PostFX: Complet"
|
||||
"PostFX viñeta", "PostFX scanlines",
|
||||
"PostFX cromática", "PostFX completo"
|
||||
};
|
||||
postfx_enabled_ = !postfx_enabled_;
|
||||
if (postfx_enabled_) {
|
||||
@@ -1082,7 +1082,7 @@ void Engine::handlePostFXToggle() {
|
||||
postfx_uniforms_.vignette_strength = 0.0f;
|
||||
postfx_uniforms_.chroma_strength = 0.0f;
|
||||
postfx_uniforms_.scanline_strength = 0.0f;
|
||||
showNotificationForAction("PostFX: Desactivat");
|
||||
showNotificationForAction("PostFX desactivado");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1103,8 +1103,8 @@ void Engine::setPostFXParamOverrides(float vignette, float chroma) {
|
||||
|
||||
void Engine::cycleShader() {
|
||||
static const char* names[5] = {
|
||||
"PostFX: Desactivat", "PostFX: Vinyeta", "PostFX: Scanlines",
|
||||
"PostFX: Cromàtica", "PostFX: Complet"
|
||||
"PostFX desactivado", "PostFX viñeta", "PostFX scanlines",
|
||||
"PostFX cromática", "PostFX completo"
|
||||
};
|
||||
postfx_cycle_idx_ = (postfx_cycle_idx_ + 1) % 5;
|
||||
int cycle = postfx_cycle_idx_;
|
||||
@@ -1136,13 +1136,13 @@ void Engine::toggleIntegerScaling() {
|
||||
break;
|
||||
}
|
||||
|
||||
const char* mode_name = "INTEGER";
|
||||
const char* mode_name = "entero";
|
||||
switch (current_scaling_mode_) {
|
||||
case ScalingMode::INTEGER: mode_name = "INTEGER"; break;
|
||||
case ScalingMode::LETTERBOX: mode_name = "LETTERBOX"; break;
|
||||
case ScalingMode::STRETCH: mode_name = "STRETCH"; break;
|
||||
case ScalingMode::INTEGER: mode_name = "entero"; break;
|
||||
case ScalingMode::LETTERBOX: mode_name = "letterbox"; break;
|
||||
case ScalingMode::STRETCH: mode_name = "stretch"; break;
|
||||
}
|
||||
showNotificationForAction(std::string("Escalado: ") + mode_name);
|
||||
showNotificationForAction(std::string("Escalado ") + mode_name);
|
||||
}
|
||||
|
||||
void Engine::addSpriteToBatch(float x, float y, float w, float h, int r, int g, int b, float scale) {
|
||||
@@ -1306,8 +1306,8 @@ void Engine::switchTextureInternal(bool show_notification) {
|
||||
// Mostrar notificación con el nombre de la textura (solo si se solicita)
|
||||
if (show_notification) {
|
||||
std::string texture_name = texture_names_[current_texture_index_];
|
||||
std::transform(texture_name.begin(), texture_name.end(), texture_name.begin(), ::toupper);
|
||||
showNotificationForAction("Sprite: " + texture_name);
|
||||
std::transform(texture_name.begin(), texture_name.end(), texture_name.begin(), ::tolower);
|
||||
showNotificationForAction("Textura " + texture_name);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -8,8 +8,8 @@
|
||||
// MSL binding: constant PostFXUniforms& u [[buffer(0)]]
|
||||
// ============================================================================
|
||||
struct PostFXUniforms {
|
||||
float vignette_strength; // 0 = none, 1.5 = default subtle
|
||||
float chroma_strength; // 0 = off, 1 = full chromatic aberration
|
||||
float vignette_strength; // 0 = none, 0.8 = default subtle
|
||||
float chroma_strength; // 0 = off, 0.2 = default chromatic aberration
|
||||
float scanline_strength; // 0 = off, 1 = full scanlines
|
||||
float time; // accumulated seconds (for future animations)
|
||||
};
|
||||
|
||||
@@ -38,19 +38,19 @@ bool InputHandler::processEvents(Engine& engine) {
|
||||
|
||||
// Controles de dirección de gravedad con teclas de cursor
|
||||
case SDLK_UP:
|
||||
engine.handleGravityDirectionChange(GravityDirection::UP, "Gravedad Arriba");
|
||||
engine.handleGravityDirectionChange(GravityDirection::UP, "Gravedad arriba");
|
||||
break;
|
||||
|
||||
case SDLK_DOWN:
|
||||
engine.handleGravityDirectionChange(GravityDirection::DOWN, "Gravedad Abajo");
|
||||
engine.handleGravityDirectionChange(GravityDirection::DOWN, "Gravedad abajo");
|
||||
break;
|
||||
|
||||
case SDLK_LEFT:
|
||||
engine.handleGravityDirectionChange(GravityDirection::LEFT, "Gravedad Izquierda");
|
||||
engine.handleGravityDirectionChange(GravityDirection::LEFT, "Gravedad izquierda");
|
||||
break;
|
||||
|
||||
case SDLK_RIGHT:
|
||||
engine.handleGravityDirectionChange(GravityDirection::RIGHT, "Gravedad Derecha");
|
||||
engine.handleGravityDirectionChange(GravityDirection::RIGHT, "Gravedad derecha");
|
||||
break;
|
||||
|
||||
case SDLK_V:
|
||||
@@ -193,40 +193,40 @@ bool InputHandler::processEvents(Engine& engine) {
|
||||
|
||||
// Cambio de número de pelotas (escenarios 1-8)
|
||||
case SDLK_1:
|
||||
engine.changeScenario(0, "10 Pelotas");
|
||||
engine.changeScenario(0, "10 pelotas");
|
||||
break;
|
||||
|
||||
case SDLK_2:
|
||||
engine.changeScenario(1, "50 Pelotas");
|
||||
engine.changeScenario(1, "50 pelotas");
|
||||
break;
|
||||
|
||||
case SDLK_3:
|
||||
engine.changeScenario(2, "100 Pelotas");
|
||||
engine.changeScenario(2, "100 pelotas");
|
||||
break;
|
||||
|
||||
case SDLK_4:
|
||||
engine.changeScenario(3, "500 Pelotas");
|
||||
engine.changeScenario(3, "500 pelotas");
|
||||
break;
|
||||
|
||||
case SDLK_5:
|
||||
engine.changeScenario(4, "1,000 Pelotas");
|
||||
engine.changeScenario(4, "1.000 pelotas");
|
||||
break;
|
||||
|
||||
case SDLK_6:
|
||||
engine.changeScenario(5, "5,000 Pelotas");
|
||||
engine.changeScenario(5, "5.000 pelotas");
|
||||
break;
|
||||
|
||||
case SDLK_7:
|
||||
engine.changeScenario(6, "10,000 Pelotas");
|
||||
engine.changeScenario(6, "10.000 pelotas");
|
||||
break;
|
||||
|
||||
case SDLK_8:
|
||||
engine.changeScenario(7, "50,000 Pelotas");
|
||||
engine.changeScenario(7, "50.000 pelotas");
|
||||
break;
|
||||
|
||||
case SDLK_9:
|
||||
if (engine.isCustomScenarioEnabled()) {
|
||||
std::string custom_notif = std::to_string(engine.getCustomScenarioBalls()) + " Pelotas";
|
||||
std::string custom_notif = std::to_string(engine.getCustomScenarioBalls()) + " pelotas";
|
||||
engine.changeScenario(CUSTOM_SCENARIO_IDX, custom_notif.c_str());
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "shape_manager.hpp"
|
||||
|
||||
#include <algorithm> // for std::min, std::max
|
||||
#include <algorithm> // for std::min, std::max, std::transform
|
||||
#include <cctype> // for ::tolower
|
||||
#include <cstdlib> // for rand
|
||||
#include <string> // for std::string
|
||||
|
||||
@@ -93,7 +94,7 @@ void ShapeManager::toggleShapeMode(bool force_gravity_on_exit) {
|
||||
|
||||
// Mostrar notificación (solo si NO estamos en modo demo o logo)
|
||||
if (state_mgr_ && ui_mgr_ && state_mgr_->getCurrentMode() == AppMode::SANDBOX) {
|
||||
ui_mgr_->showNotification("Modo Física");
|
||||
ui_mgr_->showNotification("Modo física");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -136,7 +137,7 @@ void ShapeManager::toggleDepthZoom() {
|
||||
|
||||
// Mostrar notificación si está en modo SANDBOX
|
||||
if (ui_mgr_ && state_mgr_ && state_mgr_->getCurrentMode() == AppMode::SANDBOX) {
|
||||
ui_mgr_->showNotification(depth_zoom_enabled_ ? "Profundidad On" : "Profundidad Off");
|
||||
ui_mgr_->showNotification(depth_zoom_enabled_ ? "Profundidad on" : "Profundidad off");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -277,7 +278,9 @@ void ShapeManager::activateShapeInternal(ShapeType type) {
|
||||
|
||||
// Mostrar notificación con nombre de figura (solo si NO estamos en modo demo o logo)
|
||||
if (active_shape_ && state_mgr_ && ui_mgr_ && state_mgr_->getCurrentMode() == AppMode::SANDBOX) {
|
||||
std::string notification = std::string("Modo ") + active_shape_->getName();
|
||||
std::string shape_name = active_shape_->getName();
|
||||
std::transform(shape_name.begin(), shape_name.end(), shape_name.begin(), ::tolower);
|
||||
std::string notification = std::string("Modo ") + shape_name;
|
||||
ui_mgr_->showNotification(notification);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user