ServiceMenu: el aspecte es defineix en param.h
This commit is contained in:
@@ -48,4 +48,11 @@ balloon_4.grav 0.10f
|
||||
notification.pos_v TOP
|
||||
notification.pos_h LEFT
|
||||
notification.sound false
|
||||
notification.color 303030
|
||||
notification.color 303030
|
||||
|
||||
## --- SERVICE MENU ---
|
||||
service_menu.title_color 99FF62
|
||||
service_menu.text_color FFFFFF
|
||||
service_menu.selected_color FFDC44
|
||||
service_menu.bg_color 000000F0
|
||||
service_menu.drop_shadow false
|
||||
@@ -1,51 +1,58 @@
|
||||
## GAME
|
||||
game.item_size 20 # Tamaño de los items del juego
|
||||
game.coffee_machine_w 28 # Ancho de la máquina de café
|
||||
game.coffee_machine_h 37 # Alto de la máquina de café
|
||||
game.width 320 # Ancho de la resolucion nativa del juego
|
||||
game.height 256 # Alto de la resolucion nativa del juego
|
||||
game.play_area.rect.x 0 # Rectangulo con la posición de la zona de juego
|
||||
game.play_area.rect.y 0 # Rectangulo con la posición de la zona de juego
|
||||
game.play_area.rect.w 320 # Rectangulo con la posición de la zona de juego
|
||||
game.play_area.rect.h 216 # Rectangulo con la posición de la zona de juego
|
||||
game.enter_name_seconds 60 # Duración en segundos para introducir el nombre al finalizar la partida
|
||||
## --- GAME ---
|
||||
game.item_size 20 # Tamaño de los items del juego
|
||||
game.coffee_machine_w 28 # Ancho de la máquina de café
|
||||
game.coffee_machine_h 37 # Alto de la máquina de café
|
||||
game.width 320 # Ancho de la resolucion nativa del juego
|
||||
game.height 256 # Alto de la resolucion nativa del juego
|
||||
game.play_area.rect.x 0 # Rectangulo con la posición de la zona de juego
|
||||
game.play_area.rect.y 0 # Rectangulo con la posición de la zona de juego
|
||||
game.play_area.rect.w 320 # Rectangulo con la posición de la zona de juego
|
||||
game.play_area.rect.h 216 # Rectangulo con la posición de la zona de juego
|
||||
game.enter_name_seconds 60 # Duración en segundos para introducir el nombre al finalizar la partida
|
||||
|
||||
## FADE
|
||||
fade.num_squares_width 160
|
||||
fade.num_squares_height 128
|
||||
fade.random_squares_delay 1
|
||||
fade.random_squares_mult 500
|
||||
fade.post_duration 80
|
||||
fade.venetian_size 12
|
||||
## --- FADE ---
|
||||
fade.num_squares_width 160
|
||||
fade.num_squares_height 128
|
||||
fade.random_squares_delay 1
|
||||
fade.random_squares_mult 500
|
||||
fade.post_duration 80
|
||||
fade.venetian_size 12
|
||||
|
||||
## SCOREBOARD
|
||||
scoreboard.x 0
|
||||
scoreboard.y 216
|
||||
scoreboard.w 320
|
||||
scoreboard.h 40
|
||||
## --- SCOREBOARD ---
|
||||
scoreboard.rect.x 0
|
||||
scoreboard.rect.y 216
|
||||
scoreboard.rect.w 320
|
||||
scoreboard.rect.h 40
|
||||
|
||||
## TITLE
|
||||
## --- TITLE ---
|
||||
title.press_start_position 180
|
||||
title.title_duration 800
|
||||
title.arcade_edition_position 123
|
||||
title.title_c_c_position 80
|
||||
|
||||
## BACKGROUND
|
||||
## --- BACKGROUND ---
|
||||
background.attenuate_color FFFFFF
|
||||
background.attenuate_alpha 0
|
||||
|
||||
## BALLOONS
|
||||
balloon_1.vel 2.75f
|
||||
balloon_1.grav 0.09f
|
||||
balloon_2.vel 3.70f
|
||||
balloon_2.grav 0.10f
|
||||
balloon_3.vel 4.70f
|
||||
balloon_3.grav 0.10f
|
||||
balloon_4.vel 5.45f
|
||||
balloon_4.grav 0.10f
|
||||
## --- BALLOONS ---
|
||||
balloon_1.vel 2.75f
|
||||
balloon_1.grav 0.09f
|
||||
balloon_2.vel 3.70f
|
||||
balloon_2.grav 0.10f
|
||||
balloon_3.vel 4.70f
|
||||
balloon_3.grav 0.10f
|
||||
balloon_4.vel 5.45f
|
||||
balloon_4.grav 0.10f
|
||||
|
||||
## NOTIFICATION
|
||||
## --- NOTIFICATION ---
|
||||
notification.pos_v TOP
|
||||
notification.pos_h LEFT
|
||||
notification.sound false
|
||||
notification.color 303030
|
||||
notification.color 303030
|
||||
|
||||
## --- SERVICE MENU ---
|
||||
service_menu.title_color 99FF62
|
||||
service_menu.text_color FFFFFF
|
||||
service_menu.selected_color FFDC44
|
||||
service_menu.bg_color 111100F0
|
||||
service_menu.drop_shadow false
|
||||
@@ -1671,7 +1671,7 @@ void Game::setTotalPower()
|
||||
// Inicializa el marcador
|
||||
void Game::initScoreboard()
|
||||
{
|
||||
scoreboard_->setPos({param.scoreboard.x, param.scoreboard.y, param.scoreboard.w, param.scoreboard.h});
|
||||
scoreboard_->setPos(param.scoreboard.rect);
|
||||
scoreboard_->setMode(SCOREBOARD_CENTER_PANEL, ScoreboardMode::STAGE_INFO);
|
||||
for (const auto &player : players_)
|
||||
{
|
||||
|
||||
@@ -198,24 +198,24 @@ bool setParams(const std::string &var, const std::string &value)
|
||||
}
|
||||
|
||||
// SCOREBOARD
|
||||
else if (var == "scoreboard.x")
|
||||
else if (var == "scoreboard.rect.x")
|
||||
{
|
||||
param.scoreboard.x = std::stoi(value);
|
||||
param.scoreboard.rect.x = std::stoi(value);
|
||||
}
|
||||
|
||||
else if (var == "scoreboard.y")
|
||||
else if (var == "scoreboard.rect.y")
|
||||
{
|
||||
param.scoreboard.y = std::stoi(value);
|
||||
param.scoreboard.rect.y = std::stoi(value);
|
||||
}
|
||||
|
||||
else if (var == "scoreboard.w")
|
||||
else if (var == "scoreboard.rect.w")
|
||||
{
|
||||
param.scoreboard.w = std::stoi(value);
|
||||
param.scoreboard.rect.w = std::stoi(value);
|
||||
}
|
||||
|
||||
else if (var == "scoreboard.h")
|
||||
else if (var == "scoreboard.rect.h")
|
||||
{
|
||||
param.scoreboard.h = std::stoi(value);
|
||||
param.scoreboard.rect.h = std::stoi(value);
|
||||
}
|
||||
|
||||
// TITLE
|
||||
@@ -323,6 +323,32 @@ bool setParams(const std::string &var, const std::string &value)
|
||||
param.notification.color = Color::fromHex(value);
|
||||
}
|
||||
|
||||
// SERVICE MENU
|
||||
else if (var == "service_menu.title_color")
|
||||
{
|
||||
param.service_menu.title_color = Color::fromHex(value);
|
||||
}
|
||||
|
||||
else if (var == "service_menu.text_color")
|
||||
{
|
||||
param.service_menu.text_color = Color::fromHex(value);
|
||||
}
|
||||
|
||||
else if (var == "service_menu.selected_color")
|
||||
{
|
||||
param.service_menu.selected_color = Color::fromHex(value);
|
||||
}
|
||||
|
||||
else if (var == "service_menu.bg_color")
|
||||
{
|
||||
param.service_menu.bg_color = Color::fromHex(value);
|
||||
}
|
||||
|
||||
else if (var == "service_menu.drop_shadow")
|
||||
{
|
||||
param.service_menu.drop_shadow = stringToBool(value);
|
||||
}
|
||||
|
||||
// RESTO
|
||||
else
|
||||
{
|
||||
|
||||
@@ -67,16 +67,33 @@ struct ParamNotification
|
||||
Color color; // Color de las notificaciones
|
||||
};
|
||||
|
||||
// --- Parámetros del marcador ---
|
||||
struct ParamScoreboard
|
||||
{
|
||||
SDL_FRect rect; // Posición y tamaño del marcador
|
||||
};
|
||||
|
||||
// --- Parámetros del menú de servicio ---
|
||||
struct ParamServiceMenu
|
||||
{
|
||||
Color title_color;
|
||||
Color text_color;
|
||||
Color selected_color;
|
||||
Color bg_color;
|
||||
bool drop_shadow;
|
||||
};
|
||||
|
||||
// --- Estructura principal para almacenar todos los parámetros del juego ---
|
||||
struct Param
|
||||
{
|
||||
ParamGame game; // Parámetros del juego
|
||||
ParamFade fade; // Parámetros del fade
|
||||
SDL_FRect scoreboard; // Rectángulo del marcador
|
||||
ParamScoreboard scoreboard; // Rectángulo del marcador
|
||||
ParamTitle title; // Parámetros de la pantalla de título
|
||||
ParamBackground background; // Parámetros del fondo
|
||||
std::vector<ParamBalloon> balloon; // Parámetros de los globos
|
||||
ParamNotification notification; // Parámetros de las notificaciones
|
||||
ParamServiceMenu service_menu; // Parámetros del menú de servicio
|
||||
|
||||
// Constructor
|
||||
Param() : game(), fade(), scoreboard(), title(), background(), notification()
|
||||
|
||||
@@ -3,34 +3,15 @@
|
||||
#include "menu_option.h" // Necesario para acceder a las opciones
|
||||
#include "screen.h" // Para param
|
||||
#include <array>
|
||||
#include "param.h"
|
||||
|
||||
MenuRenderer::MenuRenderer(const ServiceMenu *menu_state, std::shared_ptr<Text> element_text, std::shared_ptr<Text> title_text)
|
||||
: element_text_(std::move(element_text)), title_text_(std::move(title_text)) { init(menu_state); }
|
||||
|
||||
void MenuRenderer::init(const ServiceMenu *menu_state)
|
||||
{
|
||||
aspect_ = menu_state->getAspect();
|
||||
switch (aspect_)
|
||||
{
|
||||
case ServiceMenu::Aspect::SHADOW:
|
||||
bg_color_ = SERV_MENU_BG_COLOR_SHADOW;
|
||||
bg_alpha_ = 255;
|
||||
break;
|
||||
|
||||
case ServiceMenu::Aspect::ALPHA:
|
||||
bg_color_ = SERV_MENU_BG_COLOR_ALPHA;
|
||||
bg_alpha_ = 240;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
: element_text_(std::move(element_text)), title_text_(std::move(title_text)) {}
|
||||
|
||||
void MenuRenderer::render(const ServiceMenu *menu_state)
|
||||
{
|
||||
// Dibuja la sombra
|
||||
if (aspect_ == ServiceMenu::Aspect::SHADOW)
|
||||
if (param.service_menu.drop_shadow)
|
||||
{
|
||||
SDL_FRect shadowRect = {rect_.x + 5, rect_.y + 5, rect_.w, rect_.h};
|
||||
SDL_SetRenderDrawColor(Screen::get()->getRenderer(), 0, 0, 0, 64);
|
||||
@@ -38,18 +19,18 @@ void MenuRenderer::render(const ServiceMenu *menu_state)
|
||||
}
|
||||
|
||||
// Dibuja el fondo
|
||||
SDL_SetRenderDrawColor(Screen::get()->getRenderer(), bg_color_.r, bg_color_.g, bg_color_.b, bg_alpha_);
|
||||
SDL_SetRenderDrawColor(Screen::get()->getRenderer(), param.service_menu.bg_color.r, param.service_menu.bg_color.g, param.service_menu.bg_color.b, param.service_menu.bg_color.a);
|
||||
SDL_RenderFillRect(Screen::get()->getRenderer(), &rect_);
|
||||
|
||||
// Dibuja el borde
|
||||
const Color BORDER_COLOR = title_color_.darken();
|
||||
const Color BORDER_COLOR = param.service_menu.title_color.darken();
|
||||
SDL_SetRenderDrawColor(Screen::get()->getRenderer(), BORDER_COLOR.r, BORDER_COLOR.g, BORDER_COLOR.b, 255);
|
||||
SDL_RenderRect(Screen::get()->getRenderer(), &rect_);
|
||||
SDL_RenderRect(Screen::get()->getRenderer(), &border_rect_);
|
||||
|
||||
// Dibuja el título
|
||||
float y = rect_.y + title_padding_;
|
||||
title_text_->writeDX(TEXT_COLOR | TEXT_CENTER, param.game.game_area.center_x, y, menu_state->getTitle(), -4, title_color_);
|
||||
title_text_->writeDX(TEXT_COLOR | TEXT_CENTER, param.game.game_area.center_x, y, menu_state->getTitle(), -4, param.service_menu.title_color);
|
||||
|
||||
// Dibuja la línea separadora
|
||||
y = rect_.y + upper_height_;
|
||||
@@ -62,7 +43,7 @@ void MenuRenderer::render(const ServiceMenu *menu_state)
|
||||
for (size_t i = 0; i < option_pairs.size(); ++i)
|
||||
{
|
||||
const bool is_selected = (i == menu_state->getSelectedIndex());
|
||||
const Color ¤t_color = is_selected ? selected_color_ : text_color_;
|
||||
const Color ¤t_color = is_selected ? param.service_menu.selected_color : param.service_menu.text_color;
|
||||
|
||||
if (menu_state->getCurrentGroupAlignment() == ServiceMenu::GroupAlignment::LEFT)
|
||||
{
|
||||
@@ -85,7 +66,7 @@ void MenuRenderer::update(const ServiceMenu *menu_state)
|
||||
updateResizeAnimation();
|
||||
}
|
||||
updateColorCounter();
|
||||
selected_color_ = getAnimatedSelectedColor();
|
||||
param.service_menu.selected_color = getAnimatedSelectedColor();
|
||||
}
|
||||
|
||||
void MenuRenderer::onLayoutChanged(const ServiceMenu *menu_state)
|
||||
@@ -231,7 +212,7 @@ void MenuRenderer::updateColorCounter()
|
||||
|
||||
Color MenuRenderer::getAnimatedSelectedColor()
|
||||
{
|
||||
static auto colorCycle = generateMirroredCycle(SERV_MENU_SELECTED_COLOR, ColorCycleStyle::HueWave);
|
||||
static auto colorCycle = generateMirroredCycle(param.service_menu.selected_color, ColorCycleStyle::HueWave);
|
||||
return colorCycle.at(color_counter_ % colorCycle.size());
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#include "ui/service_menu.h" // Necesario para las enums y para acceder al estado del menú
|
||||
#include "utils.h" // Para Color
|
||||
|
||||
|
||||
// Forward declarations
|
||||
class Text;
|
||||
class MenuOption;
|
||||
@@ -33,14 +34,8 @@ private:
|
||||
std::shared_ptr<Text> title_text_;
|
||||
|
||||
// --- Variables de estado de la vista (layout y animación) ---
|
||||
ServiceMenu::Aspect aspect_ = ServiceMenu::Aspect::ALPHA;
|
||||
SDL_FRect rect_{};
|
||||
SDL_FRect border_rect_{};
|
||||
Color bg_color_ = SERV_MENU_BG_COLOR_ALPHA;
|
||||
Uint8 bg_alpha_ = 240;
|
||||
Color title_color_ = SERV_MENU_TITLE_COLOR;
|
||||
Color text_color_ = SERV_MENU_TEXT_COLOR;
|
||||
Color selected_color_ = SERV_MENU_SELECTED_COLOR;
|
||||
size_t width_ = 0;
|
||||
size_t height_ = 0;
|
||||
size_t options_height_ = 0;
|
||||
@@ -64,7 +59,6 @@ private:
|
||||
int group_menu_widths_[5]{};
|
||||
|
||||
// --- Métodos privados de la vista ---
|
||||
void init(const ServiceMenu *menu_state);
|
||||
void setAnchors(const ServiceMenu *menu_state);
|
||||
SDL_FRect calculateNewRect(const ServiceMenu *menu_state);
|
||||
void resize(const ServiceMenu *menu_state);
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#include "section.h"
|
||||
#include "screen.h"
|
||||
#include "asset.h"
|
||||
#include "param.h"
|
||||
|
||||
// Singleton
|
||||
ServiceMenu *ServiceMenu::instance_ = nullptr;
|
||||
@@ -22,7 +23,7 @@ ServiceMenu::ServiceMenu()
|
||||
auto title_text = Resource::get()->getText("04b_25_flat_2x");
|
||||
|
||||
renderer_ = std::make_unique<MenuRenderer>(this, element_text, title_text);
|
||||
restart_message_ui_ = std::make_unique<UIMessage>(element_text, Lang::getText("[SERVICE_MENU] NEED_RESTART_MESSAGE"), SERV_MENU_TITLE_COLOR);
|
||||
restart_message_ui_ = std::make_unique<UIMessage>(element_text, Lang::getText("[SERVICE_MENU] NEED_RESTART_MESSAGE"), param.service_menu.title_color);
|
||||
|
||||
reset();
|
||||
}
|
||||
|
||||
@@ -15,11 +15,6 @@ class MenuRenderer; // <-- Nuevo
|
||||
class ServiceMenu
|
||||
{
|
||||
public:
|
||||
enum class Aspect
|
||||
{
|
||||
SHADOW,
|
||||
ALPHA
|
||||
};
|
||||
enum class SettingsGroup
|
||||
{
|
||||
VIDEO,
|
||||
@@ -28,6 +23,7 @@ public:
|
||||
SYSTEM,
|
||||
MAIN
|
||||
};
|
||||
|
||||
enum class GroupAlignment
|
||||
{
|
||||
CENTERED,
|
||||
@@ -65,7 +61,6 @@ public:
|
||||
size_t getSelectedIndex() const { return selected_; }
|
||||
const std::vector<std::pair<std::string, std::string>> &getOptionPairs() const { return option_pairs_; }
|
||||
size_t countOptionsInGroup(SettingsGroup group) const;
|
||||
Aspect getAspect() const { return aspect_; }
|
||||
|
||||
private:
|
||||
// --- Lógica de estado del menú (Modelo) ---
|
||||
@@ -76,7 +71,6 @@ private:
|
||||
|
||||
SettingsGroup current_settings_group_;
|
||||
SettingsGroup previous_settings_group_;
|
||||
Aspect aspect_ = Aspect::ALPHA;
|
||||
std::string title_;
|
||||
size_t selected_ = 0;
|
||||
size_t main_menu_selected_ = 0;
|
||||
|
||||
@@ -187,11 +187,6 @@ constexpr Color GREEN_COLOR = Color(0X5B, 0XEC, 0X95);
|
||||
constexpr Color BLUE_SKY_COLOR = Color(0X02, 0X88, 0XD1);
|
||||
constexpr Color PINK_SKY_COLOR = Color(0XFF, 0X6B, 0X97);
|
||||
constexpr Color GREEN_SKY_COLOR = Color(0X00, 0X79, 0X6B);
|
||||
constexpr Color SERV_MENU_TITLE_COLOR = Color(0x99, 0xFF, 0x62);
|
||||
constexpr Color SERV_MENU_TEXT_COLOR = Color(255, 255, 255);
|
||||
constexpr Color SERV_MENU_SELECTED_COLOR = Color(255, 170, 18).lighten();
|
||||
constexpr Color SERV_MENU_BG_COLOR_SHADOW = Color(0x1E, 0x1E, 0x1E);
|
||||
constexpr Color SERV_MENU_BG_COLOR_ALPHA = Color(0x00, 0x00, 0x00);
|
||||
constexpr Color DEBUG_COLOR = Color(0xFF, 0xFF, 0x00);
|
||||
|
||||
// Colores y gráficos
|
||||
|
||||
Reference in New Issue
Block a user