-
Notifications
You must be signed in to change notification settings - Fork 1
/
PlayerName.cpp
100 lines (88 loc) · 3.28 KB
/
PlayerName.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include "PlayerName.h"
PlayerName::PlayerName()
{
_playerNameTexture.loadFromFile("assets/PLAYER_NAME.png");
_playerNameSprite.setTexture(_playerNameTexture);
_font.loadFromFile("assets/SuperMario256.ttf");
}
void PlayerName::update(sf::Event event)
{
if (_inPlayerName && event.type == sf::Event::TextEntered)
{
// Acepta letras minúsculas y mayúsculas, pero convierte las minúsculas a mayúsculas
if ((event.text.unicode >= 'a' && event.text.unicode <= 'z') && _playerName.length() < 5)
{
// Convierte a mayúscula y agrega la letra al nombre del jugador
_playerName += static_cast<char>(event.text.unicode - 32); // Convertir a mayúscula
}
else if ((event.text.unicode >= 'A' && event.text.unicode <= 'Z') && _playerName.length() < 5)
{
// Agrega la letra al nombre del jugador
_playerName += static_cast<char>(event.text.unicode);
}
else if (event.text.unicode == 8 && !_playerName.empty()) // Tecla de retroceso
{
// Elimina la última letra del nombre del jugador
_playerName.pop_back();
}
else if (event.text.unicode == 13 && !_playerName.empty()) // Tecla Enter
{
// Finaliza la entrada del nombre
_setedPlayerName = true;
}
}
}
void PlayerName::render(sf::RenderWindow& window)
{
sf::View currentView = window.getView();
sf::Vector2f centerPosition = currentView.getCenter();
_playerNameSprite.setPosition(centerPosition.x - 400.0f, 0.0f);
window.draw(_playerNameSprite);
sf::Text label;
label.setFont(_font);
label.setCharacterSize(24);
label.setFillColor(sf::Color::White);
label.setOutlineThickness(2);
label.setOutlineColor(sf::Color::Black);
label.setString("INGRESA TU NOMBRE [MAX 5]:");
// Calcula el ancho del texto
sf::FloatRect textRect = label.getLocalBounds();
// Ajusta la posición x para centrar el texto
label.setPosition(centerPosition.x - textRect.width / 2, centerPosition.y - textRect.height / 2 - 20); // Posición ajustada para la etiqueta
window.draw(label);
// Ahora también mostramos el nombre del jugador que se está ingresando
sf::Text playerNameText;
playerNameText.setFont(_font);
playerNameText.setCharacterSize(24);
playerNameText.setFillColor(sf::Color::White);
playerNameText.setOutlineThickness(2);
playerNameText.setOutlineColor(sf::Color::Black);
playerNameText.setString(_playerName); // Usamos _playerName para mostrar el nombre actual
// Calcula el ancho del texto del nombre del jugador
sf::FloatRect playerNameRect = playerNameText.getLocalBounds();
// Ajusta la posición x para centrar el texto
playerNameText.setPosition(centerPosition.x - playerNameRect.width / 2, centerPosition.y - playerNameRect.height / 2 + 10); // Posición para el nombre del jugador
window.draw(playerNameText);
}
bool PlayerName::getInPlayerName() const
{
return _inPlayerName;
}
std::string PlayerName::getPlayerName() const
{
return _playerName;
}
bool PlayerName::setedPlayerName() const
{
return _setedPlayerName;
}
void PlayerName::open()
{
_inPlayerName = true;
_setedPlayerName = false;
_playerName.clear();
}
void PlayerName::close()
{
_inPlayerName = false;
}