Add game modes, states and controller

This commit is contained in:
nsubiron 2017-03-08 19:21:12 +00:00
parent 135c02c59b
commit 24a7d23c96
8 changed files with 215 additions and 0 deletions

View File

@ -0,0 +1,15 @@
// CARLA, Copyright (C) 2017 Computer Vision Center (CVC)
#include "Carla.h"
#include "CarlaGameMode.h"
#include "CarlaGameState.h"
#include "CarlaPlayerState.h"
#include "CarlaServerController.h"
ACarlaGameMode::ACarlaGameMode()
{
PlayerControllerClass = ACarlaServerController::StaticClass();
GameStateClass = ACarlaGameState::StaticClass();
PlayerStateClass = ACarlaPlayerState::StaticClass();
}

View File

@ -0,0 +1,19 @@
// CARLA, Copyright (C) 2017 Computer Vision Center (CVC)
#pragma once
#include "GameFramework/GameModeBase.h"
#include "CarlaGameMode.generated.h"
/**
*
*/
UCLASS()
class CARLA_API ACarlaGameMode : public AGameModeBase
{
GENERATED_BODY()
public:
ACarlaGameMode();
};

View File

@ -0,0 +1,8 @@
// CARLA, Copyright (C) 2017 Computer Vision Center (CVC)
#include "Carla.h"
#include "CarlaGameState.h"

View File

@ -0,0 +1,19 @@
// CARLA, Copyright (C) 2017 Computer Vision Center (CVC)
#pragma once
#include "GameFramework/GameStateBase.h"
#include "CarlaGameState.generated.h"
/**
*
*/
UCLASS()
class CARLA_API ACarlaGameState : public AGameStateBase
{
GENERATED_BODY()
};

View File

@ -0,0 +1,8 @@
// CARLA, Copyright (C) 2017 Computer Vision Center (CVC)
#include "Carla.h"
#include "CarlaPlayerState.h"

View File

@ -0,0 +1,19 @@
// CARLA, Copyright (C) 2017 Computer Vision Center (CVC)
#pragma once
#include "GameFramework/PlayerState.h"
#include "CarlaPlayerState.generated.h"
/**
*
*/
UCLASS()
class CARLA_API ACarlaPlayerState : public APlayerState
{
GENERATED_BODY()
};

View File

@ -0,0 +1,81 @@
// CARLA, Copyright (C) 2017 Computer Vision Center (CVC)
#include "Carla.h"
#include "CarlaServerController.h"
#include "Camera/CameraComponent.h"
#include "GameFramework/Pawn.h"
#include "GameFramework/SpringArmComponent.h"
// #include "CarlaPlayerCameraManager.h"
ACarlaServerController::ACarlaServerController()
{
// PlayerCameraManagerClass = ACarlaPlayerCameraManager::StaticClass();
bAutoManageActiveCameraTarget = false;
// Create the spring arm component
SpringArm = CreateDefaultSubobject<USpringArmComponent>(TEXT("SpringArm0"));
SpringArm->TargetOffset = FVector(0.f, 0.f, 200.f);
SpringArm->SetRelativeRotation(FRotator(-15.f, 0.f, 0.f));
SpringArm->SetupAttachment(RootComponent);
SpringArm->TargetArmLength = 600.0f;
SpringArm->bEnableCameraRotationLag = true;
SpringArm->CameraRotationLagSpeed = 7.f;
SpringArm->bInheritPitch = false;
SpringArm->bInheritRoll = false;
// Do not collide, may clip into level.
SpringArm->bDoCollisionTest = false;
// Create the camera component
PlayerCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("Camera0"));
PlayerCamera->SetupAttachment(SpringArm, USpringArmComponent::SocketName);
PlayerCamera->bUsePawnControlRotation = false;
PlayerCamera->FieldOfView = 90.f;
}
ACarlaServerController::~ACarlaServerController() {}
void ACarlaServerController::SetupInputComponent()
{
Super::SetupInputComponent();
check(InputComponent);
InputComponent->BindAxis("CameraZoom", this, &ACarlaServerController::ChangeCameraZoom);
InputComponent->BindAxis("CameraUp", this, &ACarlaServerController::ChangeCameraUp);
InputComponent->BindAxis("CameraRight", this, &ACarlaServerController::ChangeCameraRight);
InputComponent->BindAction("RestartLevel", IE_Pressed, this, &ACarlaServerController::RestartLevel);
}
void ACarlaServerController::Possess(APawn *aPawn)
{
Super::Possess(aPawn);
if (aPawn != nullptr) {
SpringArm->AttachToComponent(
aPawn->GetRootComponent(),
FAttachmentTransformRules::KeepRelativeTransform);
}
}
void ACarlaServerController::CalcCamera(float DeltaTime, FMinimalViewInfo& OutResult)
{
PlayerCamera->GetCameraView(DeltaTime, OutResult);
}
void ACarlaServerController::ChangeCameraZoom(float Value)
{
SpringArm->TargetArmLength = FMath::Clamp(SpringArm->TargetArmLength + Value, 200.0f, 1e4f);
}
void ACarlaServerController::ChangeCameraUp(float Value)
{
auto rotation = SpringArm->GetRelativeTransform().Rotator();
rotation.Pitch = FMath::Clamp(rotation.Pitch - Value, -80.0f, 0.0f);
SpringArm->SetRelativeRotation(rotation);
}
void ACarlaServerController::ChangeCameraRight(float Value)
{
auto rotation = SpringArm->GetRelativeTransform().Rotator();
rotation.Yaw -= Value;
SpringArm->SetRelativeRotation(rotation);
}

View File

@ -0,0 +1,46 @@
// CARLA, Copyright (C) 2017 Computer Vision Center (CVC)
#pragma once
#include "GameFramework/PlayerController.h"
#include "CarlaServerController.generated.h"
class USpringArmComponent;
class UCameraComponent;
/**
*
*/
UCLASS()
class CARLA_API ACarlaServerController : public APlayerController
{
GENERATED_BODY()
public:
ACarlaServerController();
~ACarlaServerController();
virtual void SetupInputComponent() override;
virtual void Possess(APawn *aPawn) override;
// virtual void UnPossess() override;
virtual void CalcCamera(float DeltaTime, FMinimalViewInfo& OutResult) override;
private:
void ChangeCameraZoom(float Value);
void ChangeCameraUp(float Value);
void ChangeCameraRight(float Value);
UPROPERTY()
USpringArmComponent *SpringArm;
UPROPERTY()
UCameraComponent *PlayerCamera;
};