Update Player Character for Base Scanning Function
This commit is contained in:
parent
24c09c1ff1
commit
2515ce4e9c
@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:c3384b0ef9ac9102b4073bc0793ca6fe17e0874a220fe4bb55a21c0d2604c028
|
oid sha256:682634b96166cdd01fa16451402719e5e849c8cf7e5f4e8e3511d57a5decbb13
|
||||||
size 42197
|
size 42197
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:176aa0e3af0cb53206b368ca8493438efd106cf7275ee80c5808c70421dc255f
|
oid sha256:52a5259efe0a304bf08cdbf35cf509dab18fa2dae3ac9da963b6d36d4686bda2
|
||||||
size 901607
|
size 901607
|
||||||
|
3
CorruptedMemory/Content/UI/BP_GameUI.uasset
Normal file
3
CorruptedMemory/Content/UI/BP_GameUI.uasset
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:44c850bde4cbd5839a09e56aa98661c6ed81aae05e343a32f9462d57483e0d2e
|
||||||
|
size 167096
|
@ -5,6 +5,12 @@
|
|||||||
|
|
||||||
#include "CorruptedMemoryGameMode.h"
|
#include "CorruptedMemoryGameMode.h"
|
||||||
|
|
||||||
|
void ACM_PlayerController::ServerAddGameplayTagToShelf_Implementation(AActor* Shelving, const FString& GameplayTag)
|
||||||
|
{
|
||||||
|
if (!GetWorld()->GetAuthGameMode()) return;
|
||||||
|
Cast<ACorruptedMemoryGameMode>(GetWorld()->GetAuthGameMode())->AddGameplayTagToShelf(Shelving, GameplayTag);
|
||||||
|
}
|
||||||
|
|
||||||
void ACM_PlayerController::BeginPlay()
|
void ACM_PlayerController::BeginPlay()
|
||||||
{
|
{
|
||||||
Super::BeginPlay();
|
Super::BeginPlay();
|
||||||
|
@ -14,6 +14,10 @@ class CORRUPTEDMEMORY_API ACM_PlayerController : public APlayerController
|
|||||||
{
|
{
|
||||||
GENERATED_BODY()
|
GENERATED_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
UFUNCTION(Server, Reliable)
|
||||||
|
void ServerAddGameplayTagToShelf(AActor* Shelving, const FString& GameplayTag);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void BeginPlay() override;
|
virtual void BeginPlay() override;
|
||||||
};
|
};
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
|
|
||||||
#include "CMGameInstance.h"
|
#include "CMGameInstance.h"
|
||||||
#include "CM_GameState.h"
|
#include "CM_GameState.h"
|
||||||
|
#include "CM_PlayerController.h"
|
||||||
|
#include "CM_Shelving.h"
|
||||||
#include "CorruptedMemoryProjectile.h"
|
#include "CorruptedMemoryProjectile.h"
|
||||||
#include "Animation/AnimInstance.h"
|
#include "Animation/AnimInstance.h"
|
||||||
#include "Camera/CameraComponent.h"
|
#include "Camera/CameraComponent.h"
|
||||||
@ -30,13 +32,14 @@ ACorruptedMemoryCharacter::ACorruptedMemoryCharacter()
|
|||||||
FirstPersonCameraComponent->bUsePawnControlRotation = true;
|
FirstPersonCameraComponent->bUsePawnControlRotation = true;
|
||||||
|
|
||||||
// Create a mesh component that will be used when being viewed from a '1st person' view (when controlling this pawn)
|
// Create a mesh component that will be used when being viewed from a '1st person' view (when controlling this pawn)
|
||||||
Mesh1P = CreateDefaultSubobject<USkeletalMeshComponent>(TEXT("CharacterMesh1P"));
|
// Mesh1P = CreateDefaultSubobject<USkeletalMeshComponent>(TEXT("CharacterMesh1P"));
|
||||||
Mesh1P->SetOnlyOwnerSee(true);
|
// Mesh1P->SetOnlyOwnerSee(true);
|
||||||
Mesh1P->SetupAttachment(FirstPersonCameraComponent);
|
// Mesh1P->SetupAttachment(FirstPersonCameraComponent);
|
||||||
Mesh1P->bCastDynamicShadow = false;
|
// Mesh1P->bCastDynamicShadow = false;
|
||||||
Mesh1P->CastShadow = false;
|
// Mesh1P->CastShadow = false;
|
||||||
//Mesh1P->SetRelativeRotation(FRotator(0.9f, -19.19f, 5.2f));
|
// //Mesh1P->SetRelativeRotation(FRotator(0.9f, -19.19f, 5.2f));
|
||||||
Mesh1P->SetRelativeLocation(FVector(-30.f, 0.f, -150.f));
|
// Mesh1P->SetRelativeLocation(FVector(-30.f, 0.f, -150.f));
|
||||||
|
bReplicates = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ACorruptedMemoryCharacter::BeginPlay()
|
void ACorruptedMemoryCharacter::BeginPlay()
|
||||||
@ -79,6 +82,10 @@ void ACorruptedMemoryCharacter::SetupPlayerInputComponent(class UInputComponent*
|
|||||||
|
|
||||||
//Looking
|
//Looking
|
||||||
EnhancedInputComponent->BindAction(LookAction, ETriggerEvent::Triggered, this, &ACorruptedMemoryCharacter::Look);
|
EnhancedInputComponent->BindAction(LookAction, ETriggerEvent::Triggered, this, &ACorruptedMemoryCharacter::Look);
|
||||||
|
|
||||||
|
//Scanning
|
||||||
|
EnhancedInputComponent->BindAction(ScanAction, ETriggerEvent::Started, this, &ACorruptedMemoryCharacter::ScanStart);
|
||||||
|
EnhancedInputComponent->BindAction(ScanAction, ETriggerEvent::Canceled, this, &ACorruptedMemoryCharacter::ScanCancel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -89,6 +96,24 @@ void ACorruptedMemoryCharacter::LogServerMessage_Implementation(const FString& M
|
|||||||
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Yellow, Message);
|
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Yellow, Message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ACorruptedMemoryCharacter::Client_EnableUserInput_Implementation()
|
||||||
|
{
|
||||||
|
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT("EnableUserInput_Implementation"));
|
||||||
|
EnableInput(GetWorld()->GetFirstPlayerController());
|
||||||
|
GetWorld()->GetFirstPlayerController()->SetInputMode(FInputModeGameOnly());
|
||||||
|
}
|
||||||
|
|
||||||
|
void ACorruptedMemoryCharacter::Client_DisableUserInput_Implementation()
|
||||||
|
{
|
||||||
|
DisableInput(GetWorld()->GetFirstPlayerController());
|
||||||
|
GetWorld()->GetFirstPlayerController()->SetInputMode(FInputModeUIOnly());
|
||||||
|
}
|
||||||
|
|
||||||
|
void ACorruptedMemoryCharacter::Client_GameStart_Implementation()
|
||||||
|
{
|
||||||
|
OnGameStart.Broadcast();
|
||||||
|
}
|
||||||
|
|
||||||
void ACorruptedMemoryCharacter::Move(const FInputActionValue& Value)
|
void ACorruptedMemoryCharacter::Move(const FInputActionValue& Value)
|
||||||
{
|
{
|
||||||
// input is a Vector2D
|
// input is a Vector2D
|
||||||
@ -115,6 +140,33 @@ void ACorruptedMemoryCharacter::Look(const FInputActionValue& Value)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ACorruptedMemoryCharacter::ScanStart(const FInputActionValue& Value)
|
||||||
|
{
|
||||||
|
//Line trace to see if there is a shelf in front of the player
|
||||||
|
FHitResult HitResult;
|
||||||
|
FVector StartLocation = FirstPersonCameraComponent->GetComponentLocation();
|
||||||
|
FVector EndLocation = StartLocation + (FirstPersonCameraComponent->GetForwardVector() * 1000.f);
|
||||||
|
FCollisionQueryParams TraceParams;
|
||||||
|
TraceParams.AddIgnoredActor(this);
|
||||||
|
TraceParams.AddIgnoredActor(GetOwner());
|
||||||
|
TraceParams.bTraceComplex = true;
|
||||||
|
TraceParams.bReturnPhysicalMaterial = false;
|
||||||
|
GetWorld()->LineTraceSingleByChannel(HitResult, StartLocation, EndLocation, ECC_Visibility, TraceParams);
|
||||||
|
|
||||||
|
if (!IsValid(HitResult.GetActor())) return;
|
||||||
|
if (HitResult.GetActor()->Tags.Contains("StoreShelf"))
|
||||||
|
{
|
||||||
|
FString AccountName = Cast<UCMGameInstance>(GetWorld()->GetGameInstance())->AccountUsername;
|
||||||
|
if (Cast<ACM_Shelving>(HitResult.GetActor())->GameplayTags.Contains(AccountName)) return;
|
||||||
|
Cast<ACM_PlayerController>(GetWorld()->GetFirstPlayerController())->ServerAddGameplayTagToShelf(HitResult.GetActor(), AccountName);
|
||||||
|
ServerSuccessfulScan(AccountName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ACorruptedMemoryCharacter::ScanCancel(const FInputActionValue& Value)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
void ACorruptedMemoryCharacter::SetHasRifle(bool bNewHasRifle)
|
void ACorruptedMemoryCharacter::SetHasRifle(bool bNewHasRifle)
|
||||||
{
|
{
|
||||||
bHasRifle = bNewHasRifle;
|
bHasRifle = bNewHasRifle;
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
#include "GameFramework/Character.h"
|
#include "GameFramework/Character.h"
|
||||||
#include "InputActionValue.h"
|
#include "InputActionValue.h"
|
||||||
#include "CM_PlayerState.h"
|
#include "CM_PlayerState.h"
|
||||||
|
#include "CorruptedMemoryGameMode.h"
|
||||||
#include "CorruptedMemoryCharacter.generated.h"
|
#include "CorruptedMemoryCharacter.generated.h"
|
||||||
|
|
||||||
class UInputComponent;
|
class UInputComponent;
|
||||||
@ -20,9 +21,17 @@ class ACorruptedMemoryCharacter : public ACharacter
|
|||||||
{
|
{
|
||||||
GENERATED_BODY()
|
GENERATED_BODY()
|
||||||
|
|
||||||
/** Pawn mesh: 1st person view (arms; seen only by self) */
|
// /** Pawn mesh: 1st person view (arms; seen only by self) */
|
||||||
UPROPERTY(VisibleDefaultsOnly, Category=Mesh)
|
// UPROPERTY(VisibleDefaultsOnly, Category=Mesh)
|
||||||
USkeletalMeshComponent* Mesh1P;
|
// USkeletalMeshComponent* Mesh1P;
|
||||||
|
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnGameStart);
|
||||||
|
|
||||||
|
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnGameEnd);
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintAssignable, Category = "Game")
|
||||||
|
FOnGameStart OnGameStart;
|
||||||
|
UPROPERTY(BlueprintAssignable, Category = "Game")
|
||||||
|
FOnGameEnd OnGameEnd;
|
||||||
|
|
||||||
/** First person camera */
|
/** First person camera */
|
||||||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera, meta = (AllowPrivateAccess = "true"))
|
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera, meta = (AllowPrivateAccess = "true"))
|
||||||
@ -40,6 +49,8 @@ class ACorruptedMemoryCharacter : public ACharacter
|
|||||||
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Input, meta=(AllowPrivateAccess = "true"))
|
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Input, meta=(AllowPrivateAccess = "true"))
|
||||||
class UInputAction* MoveAction;
|
class UInputAction* MoveAction;
|
||||||
|
|
||||||
|
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Input, meta=(AllowPrivateAccess = "true"))
|
||||||
|
UInputAction* ScanAction;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ACorruptedMemoryCharacter();
|
ACorruptedMemoryCharacter();
|
||||||
@ -48,7 +59,6 @@ protected:
|
|||||||
virtual void BeginPlay();
|
virtual void BeginPlay();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
/** Look Input Action */
|
/** Look Input Action */
|
||||||
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, meta = (AllowPrivateAccess = "true"))
|
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, meta = (AllowPrivateAccess = "true"))
|
||||||
class UInputAction* LookAction;
|
class UInputAction* LookAction;
|
||||||
@ -67,10 +77,21 @@ public:
|
|||||||
|
|
||||||
UFUNCTION(Server, Reliable)
|
UFUNCTION(Server, Reliable)
|
||||||
void ServerPlayerJoin(const FString& PlayerName, const int32& PlayerIndex, const FUniqueNetIdRepl& UNetID);
|
void ServerPlayerJoin(const FString& PlayerName, const int32& PlayerIndex, const FUniqueNetIdRepl& UNetID);
|
||||||
|
UFUNCTION(Server, Reliable)
|
||||||
|
void ServerSuccessfulScan(const FString& Username);
|
||||||
|
|
||||||
|
|
||||||
UFUNCTION(Client, Reliable)
|
UFUNCTION(Client, Reliable)
|
||||||
void LogServerMessage(const FString& Message);
|
void LogServerMessage(const FString& Message);
|
||||||
|
|
||||||
|
UFUNCTION(Client, Reliable)
|
||||||
|
void Client_EnableUserInput();
|
||||||
|
UFUNCTION(Client, Reliable)
|
||||||
|
void Client_DisableUserInput();
|
||||||
|
|
||||||
|
UFUNCTION(Client, Reliable)
|
||||||
|
void Client_GameStart();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/** Called for movement input */
|
/** Called for movement input */
|
||||||
void Move(const FInputActionValue& Value);
|
void Move(const FInputActionValue& Value);
|
||||||
@ -78,6 +99,9 @@ protected:
|
|||||||
/** Called for looking input */
|
/** Called for looking input */
|
||||||
void Look(const FInputActionValue& Value);
|
void Look(const FInputActionValue& Value);
|
||||||
|
|
||||||
|
void ScanStart(const FInputActionValue& Value);
|
||||||
|
void ScanCancel(const FInputActionValue& Value);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// APawn interface
|
// APawn interface
|
||||||
virtual void SetupPlayerInputComponent(UInputComponent* InputComponent) override;
|
virtual void SetupPlayerInputComponent(UInputComponent* InputComponent) override;
|
||||||
@ -85,10 +109,15 @@ protected:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
/** Returns Mesh1P subobject **/
|
/** Returns Mesh1P subobject **/
|
||||||
USkeletalMeshComponent* GetMesh1P() const { return Mesh1P; }
|
// USkeletalMeshComponent* GetMesh1P() const { return Mesh1P; }
|
||||||
/** Returns FirstPersonCameraComponent subobject **/
|
/** Returns FirstPersonCameraComponent subobject **/
|
||||||
UCameraComponent* GetFirstPersonCameraComponent() const { return FirstPersonCameraComponent; }
|
UCameraComponent* GetFirstPersonCameraComponent() const { return FirstPersonCameraComponent; }
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
inline void ACorruptedMemoryCharacter::ServerSuccessfulScan_Implementation(const FString& Username)
|
||||||
|
{
|
||||||
|
if (const ACorruptedMemoryGameMode* GameMode = Cast<ACorruptedMemoryGameMode>(GetWorld()->GetAuthGameMode()))
|
||||||
|
{
|
||||||
|
GameMode->SuccessfulScan(Username);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
#include "CMGameInstance.h"
|
#include "CMGameInstance.h"
|
||||||
#include "CM_GameState.h"
|
#include "CM_GameState.h"
|
||||||
|
#include "CM_PlayerController.h"
|
||||||
#include "CM_PlayerState.h"
|
#include "CM_PlayerState.h"
|
||||||
#include "CorruptedMemoryCharacter.h"
|
#include "CorruptedMemoryCharacter.h"
|
||||||
#include "GameFramework/GameStateBase.h"
|
#include "GameFramework/GameStateBase.h"
|
||||||
@ -27,6 +28,36 @@ void ACorruptedMemoryGameMode::PostLogin(APlayerController* NewPlayer)
|
|||||||
{
|
{
|
||||||
Super::PostLogin(NewPlayer);
|
Super::PostLogin(NewPlayer);
|
||||||
NewPlayer->GetPlayerState<ACM_PlayerState>()->ClientPlayerJoin();
|
NewPlayer->GetPlayerState<ACM_PlayerState>()->ClientPlayerJoin();
|
||||||
|
FString MaxPlayers;
|
||||||
|
FParse::Value(FCommandLine::Get(), TEXT("maxPlayers="), MaxPlayers);
|
||||||
|
if (GetWorld()->GetGameState()->PlayerArray.Num() == FCString::Atoi(*MaxPlayers))
|
||||||
|
{
|
||||||
|
auto World = GetWorld();
|
||||||
|
FTimerHandle TimerHandle;
|
||||||
|
GetWorld()->GetTimerManager().SetTimer(TimerHandle, [World]()
|
||||||
|
{
|
||||||
|
for (const auto PlayerState : World->GetGameState()->PlayerArray)
|
||||||
|
{
|
||||||
|
Cast<ACorruptedMemoryCharacter>(PlayerState->GetPlayerController()->GetCharacter())->Client_GameStart();
|
||||||
|
Cast<ACorruptedMemoryCharacter>(PlayerState->GetPlayerController()->GetCharacter())->Client_EnableUserInput();
|
||||||
|
PlayerState->GetPlayerController()->EnableInput(PlayerState->GetPlayerController());
|
||||||
|
PlayerState->GetPlayerController()->SetInputMode(FInputModeGameOnly());
|
||||||
|
}
|
||||||
|
}, 5.f, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ACorruptedMemoryGameMode::SuccessfulScan(const FString& Username) const
|
||||||
|
{
|
||||||
|
ACM_GameState* CurrentGameState = GetWorld()->GetGameState<ACM_GameState>();
|
||||||
|
const auto PlayerState = CurrentGameState->PlayerArray.FindByPredicate([Username](const APlayerState* PlayerState) { return PlayerState->GetPlayerName() == Username; });
|
||||||
|
PlayerState->Get()->SetScore(PlayerState->Get()->GetScore() + SuccessfulScanScore);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ACorruptedMemoryGameMode::AddGameplayTagToShelf(AActor* Shelving, const FString& GameplayTag)
|
||||||
|
{
|
||||||
|
ACM_Shelving** FoundShelf = Shelves.FindByPredicate([Shelving](const ACM_Shelving* Shelf) { return Shelf == Shelving; });
|
||||||
|
(*FoundShelf)->GameplayTags.Add(GameplayTag);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ACorruptedMemoryGameMode::BeginPlay()
|
void ACorruptedMemoryGameMode::BeginPlay()
|
||||||
@ -65,4 +96,6 @@ void ACorruptedMemoryGameMode::ServerSpawnPlayer_Implementation(APlayerControlle
|
|||||||
}
|
}
|
||||||
ACharacter* SpawnedPlayerCharacter = GetWorld()->SpawnActor<ACharacter>(PlayerCharacterClass, SpawnPoints[PlayerController->GetPlayerState<ACM_PlayerState>()->GetPlayerId()]);
|
ACharacter* SpawnedPlayerCharacter = GetWorld()->SpawnActor<ACharacter>(PlayerCharacterClass, SpawnPoints[PlayerController->GetPlayerState<ACM_PlayerState>()->GetPlayerId()]);
|
||||||
PlayerController->Possess(SpawnedPlayerCharacter);
|
PlayerController->Possess(SpawnedPlayerCharacter);
|
||||||
|
PlayerController->EnableInput(PlayerController);
|
||||||
|
PlayerController->SetInputMode(FInputModeGameOnly());
|
||||||
}
|
}
|
||||||
|
@ -14,11 +14,19 @@ class ACorruptedMemoryGameMode : public AGameModeBase
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
ACorruptedMemoryGameMode();
|
ACorruptedMemoryGameMode();
|
||||||
|
|
||||||
|
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Game")
|
||||||
|
int SuccessfulScanScore = 10;
|
||||||
|
|
||||||
virtual void PostLogin(APlayerController* NewPlayer) override;
|
virtual void PostLogin(APlayerController* NewPlayer) override;
|
||||||
|
|
||||||
UFUNCTION(Server, Reliable)
|
UFUNCTION(Server, Reliable)
|
||||||
void ServerSpawnPlayer(APlayerController* PlayerController);
|
void ServerSpawnPlayer(APlayerController* PlayerController);
|
||||||
|
|
||||||
|
void SuccessfulScan(const FString& Username) const;
|
||||||
|
|
||||||
|
void AddGameplayTagToShelf(AActor* Shelving, const FString& GameplayTag);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void BeginPlay() override;
|
virtual void BeginPlay() override;
|
||||||
|
|
||||||
@ -29,5 +37,4 @@ private:
|
|||||||
TArray<ACM_Shelving*> Shelves;
|
TArray<ACM_Shelving*> Shelves;
|
||||||
|
|
||||||
TSubclassOf<ACharacter> PlayerCharacterClass;
|
TSubclassOf<ACharacter> PlayerCharacterClass;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user