delta-time: game.cpp (funciona pero va un poc massa ràpid)
This commit is contained in:
@@ -210,7 +210,7 @@ void Game::updateHiScore() {
|
||||
}
|
||||
}
|
||||
|
||||
// Actualiza las variables del jugador
|
||||
// Actualiza las variables del jugador (frame-based)
|
||||
void Game::updatePlayers() {
|
||||
for (auto &player : players_) {
|
||||
player->update();
|
||||
@@ -246,6 +246,42 @@ void Game::updatePlayers() {
|
||||
sortPlayersByZOrder();
|
||||
}
|
||||
|
||||
// Actualiza las variables del jugador (time-based)
|
||||
void Game::updatePlayers(float deltaTime) {
|
||||
for (auto &player : players_) {
|
||||
player->update(deltaTime);
|
||||
|
||||
if (player->isPlaying()) {
|
||||
// Comprueba la colisión entre el jugador y los globos
|
||||
auto balloon = checkPlayerBalloonCollision(player);
|
||||
|
||||
// Si hay colisión
|
||||
if (balloon) {
|
||||
// Si el globo está parado y el temporizador activo, lo explota
|
||||
if (balloon->isStopped() && time_stopped_counter_ > 0) {
|
||||
balloon_manager_->popBalloon(balloon);
|
||||
}
|
||||
// En caso contrario, el jugador ha sido golpeado por un globo activo
|
||||
else {
|
||||
handlePlayerCollision(player, balloon);
|
||||
|
||||
if (demo_.enabled && allPlayersAreNotPlaying()) {
|
||||
fade_out_->setType(Fade::Type::RANDOM_SQUARE2);
|
||||
fade_out_->setPostDuration(500);
|
||||
fade_out_->activate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Comprueba las colisiones entre el jugador y los items
|
||||
checkPlayerItemCollision(player);
|
||||
}
|
||||
}
|
||||
|
||||
// Organiza la lista de jugadores
|
||||
sortPlayersByZOrder();
|
||||
}
|
||||
|
||||
// Dibuja a los jugadores
|
||||
void Game::renderPlayers() {
|
||||
for (auto &player : players_) {
|
||||
@@ -892,14 +928,14 @@ void Game::updateTimeStopped() {
|
||||
if (time_stopped_counter_ > 0) {
|
||||
time_stopped_counter_--;
|
||||
if (time_stopped_counter_ > 120) {
|
||||
if (time_stopped_counter_ % 30 == 0) {
|
||||
if (static_cast<int>(time_stopped_counter_) % 30 == 0) {
|
||||
playSound("clock.wav");
|
||||
}
|
||||
} else {
|
||||
if (time_stopped_counter_ % 30 == 0) {
|
||||
if (static_cast<int>(time_stopped_counter_) % 30 == 0) {
|
||||
balloon_manager_->normalColorsToAllBalloons();
|
||||
playSound("clock.wav");
|
||||
} else if (time_stopped_counter_ % 30 == 15) {
|
||||
} else if (static_cast<int>(time_stopped_counter_) % 30 == 15) {
|
||||
balloon_manager_->reverseColorsToAllBalloons();
|
||||
playSound("clock.wav");
|
||||
}
|
||||
@@ -909,9 +945,10 @@ void Game::updateTimeStopped() {
|
||||
}
|
||||
}
|
||||
|
||||
// Actualiza toda la lógica del juego (frame-based)
|
||||
void Game::update() {
|
||||
if (SDL_GetTicks() - ticks_ > param.game.speed) {
|
||||
ticks_ = SDL_GetTicks();
|
||||
if (SDL_GetTicks() - last_time_ > param.game.speed) {
|
||||
last_time_ = SDL_GetTicks();
|
||||
screen_->update();
|
||||
|
||||
updateDemo();
|
||||
@@ -925,6 +962,20 @@ void Game::update() {
|
||||
Audio::update();
|
||||
}
|
||||
|
||||
// Actualiza toda la lógica del juego (time-based)
|
||||
void Game::update(float deltaTime) {
|
||||
screen_->update();
|
||||
|
||||
updateDemo();
|
||||
#ifdef RECORDING
|
||||
updateRecording();
|
||||
#endif
|
||||
updateGameStates();
|
||||
fillCanvas();
|
||||
|
||||
Audio::update();
|
||||
}
|
||||
|
||||
// Dibuja el juego
|
||||
void Game::render() {
|
||||
screen_->start(); // Prepara para empezar a dibujar en la textura de juego
|
||||
@@ -1006,13 +1057,24 @@ void Game::disableTimeStopItem() {
|
||||
balloon_manager_->normalColorsToAllBalloons();
|
||||
}
|
||||
|
||||
// Calcula el deltatime
|
||||
auto Game::calculateDeltaTime() -> float {
|
||||
const Uint64 current_time = SDL_GetTicks();
|
||||
const float delta_time = static_cast<float>(current_time - last_time_);
|
||||
last_time_ = current_time;
|
||||
return delta_time;
|
||||
}
|
||||
|
||||
// Bucle para el juego
|
||||
void Game::run() {
|
||||
last_time_ = SDL_GetTicks();
|
||||
|
||||
while (Section::name == Section::Name::GAME) {
|
||||
#ifndef RECORDING
|
||||
checkInput();
|
||||
#endif
|
||||
update();
|
||||
const float delta_time = calculateDeltaTime();
|
||||
update(delta_time);
|
||||
handleEvents(); // Tiene que ir antes del render
|
||||
render();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user