Multiplayer Horde Mode Gameloop: C++/Blueprints

Multiplayer Horde Mode Gameloop: C++/Blueprints

Multiplayer Horde Mode Gameloop: C++/Blueprints

Multiplayer Horde Mode Gameloop: C++/Blueprints, gameloop base del segundo juego del curso Unreal Engine 4 Mastery: Create Multiplayer Games with C++ de Tom Looman certificado por Epic Games disponible en la plataforma Udemy.

A lo largo del curso se desarrollarán dos juegos con base en C++ y extendiendo la funcionalidad con Blueprints. Los dos juegos son multijugador y se profundizará también en AI y para reforzar los diferentes temas se proponen distintos retos.

En esta parte se ha creado el gameloop base del juego utilizando las clases:

  • GameMode: Para gestionar la creación de oleadas de enemigos.
  • GameState: Para comunicar a los clientes el estado de las oleadas.
  • PlayerState: Para poder sumar puntos por muerte de enemigos a los jugadores.
  • EQS: Utilización de EQS para hacer spawn de los enemigos teniendo en cuenta la distancia con respecto a los jugadores.
  • Nociones básicas de BSP-Tools para crear el escenario.
  • Respawn de jugadores si un jugador completa la oleada o Game Over si mueren todos.

Destacado ASGameMode .h .cpp

DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams(FOnActorKilled, AActor*, VictimActor, AActor*, KillerActor, AController*, KillerController);

UPROPERTY(BlueprintAssignable, Category = "GameMode")
FOnActorKilled OnActorKilled;

void ASGameMode::CheckWaveState()
{

  bool bIsPreparingForWave = GetWorldTimerManager().IsTimerActive(TimerHandle_NextWaveStart);

  if (NrOfBotsToSpawn > 0 || bIsPreparingForWave)
  {
    return;
  }

  bool bIsAnyBotAlive = false;

  for (FConstPawnIterator It = GetWorld()->GetPawnIterator(); It; It++)
  {
    APawn* TestPawn = It->Get();
    if (TestPawn == nullptr || TestPawn->IsPlayerControlled())
    {
      continue;
    }

    USHealthComponent* HealthComp = Cast<USHealthComponent>(TestPawn->GetComponentByClass(USHealthComponent::StaticClass()));
    if (HealthComp && HealthComp->GetHealth() > 0.0f)
    {
      bIsAnyBotAlive = true;
      break;
    }

  }

  if (!bIsAnyBotAlive)
  {
    
    SetWaveState(EWaveState::WaveComplete);

    PrepareForNextWave();
  }

}

Destacado ASGameState .h .cpp

UENUM(BlueprintType)
enum class EWaveState : uint8
{
  WaitingToStart,

  WaveInProgress,

  // No longer spawning new bots, waiting for players to kill remaining bots
  WaitingToComplete,

  WaveComplete,

  GameOver,
};

UFUNCTION(BlueprintImplementableEvent, Category = "GameState")
void WaveStateChanged(EWaveState NewState, EWaveState OldState);

void ASGameState::SetWaveState(EWaveState NewState)
{
  if (Role == ROLE_Authority)
  {
    EWaveState OldState = WaveState;

    WaveState = NewState;
    // Call on server
    OnRep_WaveState(OldState);
  }
}

 

A continuación os dejaré los enlaces al código, demo y al video en youtube para que podáis ver más. De momento me está gustando el curso pero al final compartiré una valoración general por si a alguien le pueda interesar que sepa más o menos que esperar del mismo.

Repositorio: Multiplayer Horde Mode Gameloop: C++/Blueprints [project]

Demo: Multiplayer Horde Mode Gameloop: C++/Blueprints [demo]

Curso: Unreal Engine 4 Mastery: Create Multiplayer Games with C++