diff --git a/Config/DefaultEngine.ini b/Config/DefaultEngine.ini index 3681459..49f7658 100644 --- a/Config/DefaultEngine.ini +++ b/Config/DefaultEngine.ini @@ -1,8 +1,8 @@ [/Script/EngineSettings.GameMapsSettings] -GameDefaultMap=/Game/TempLevel.TempLevel -EditorStartupMap=/Game/TempLevel.TempLevel +GameDefaultMap=/Game/Maps/GameLevel.GameLevel +EditorStartupMap=/Game/Maps/GameLevel.GameLevel [/Script/Engine.RendererSettings] r.AllowStaticLighting=False diff --git a/Content/Maps/GameLevel.umap b/Content/Maps/GameLevel.umap index cbcb806..cf3bb4b 100644 --- a/Content/Maps/GameLevel.umap +++ b/Content/Maps/GameLevel.umap @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e145443090e51e985524e733653a7413ae1ad0fc3d6a8d694f55cb6c0f53b75e -size 15330960 +oid sha256:36cc3ecc3d1ade399fa8586305580de9c36b5370ba6959d1009ac189e404204f +size 15335523 diff --git a/Source/Crunch/Crunch.Build.cs b/Source/Crunch/Crunch.Build.cs index 2840b59..7b048f5 100644 --- a/Source/Crunch/Crunch.Build.cs +++ b/Source/Crunch/Crunch.Build.cs @@ -16,13 +16,14 @@ public class Crunch : ModuleRules "EnhancedInput", "GameplayAbilities", "GameplayTasks", - "GameplayTags" + "GameplayTags", + "AIModule" ]); PrivateDependencyModuleNames.AddRange([ "UMG", "Slate", - "SlateCore" + "SlateCore", ]); // Uncomment if you are using Slate UI diff --git a/Source/Crunch/Private/Character/CCharacter.cpp b/Source/Crunch/Private/Character/CCharacter.cpp index 8566d7e..cabcad0 100644 --- a/Source/Crunch/Private/Character/CCharacter.cpp +++ b/Source/Crunch/Private/Character/CCharacter.cpp @@ -11,6 +11,8 @@ #include "GAS/CAttributeSet.h" #include "GAS/UCAbilitySystemStatics.h" #include "Kismet/GameplayStatics.h" +#include "Net/UnrealNetwork.h" +#include "Player/CPlayerController.h" #include "Widgets/OverHeadStatsGauge.h" @@ -69,6 +71,12 @@ void ACCharacter::PossessedBy(AController* NewController) } } +void ACCharacter::GetLifetimeReplicatedProps(TArray& OutLifetimeProps) const +{ + Super::GetLifetimeReplicatedProps(OutLifetimeProps); + DOREPLIFETIME(ACCharacter, TeamId); +} + UAbilitySystemComponent* ACCharacter::GetAbilitySystemComponent() const { return CAbilitySystemComponent; @@ -146,7 +154,7 @@ void ACCharacter::PlayDeathAnimation() { if (DeathMontage) { - const auto MontageDuration {PlayAnimMontage(DeathMontage)}; + const auto MontageDuration{PlayAnimMontage(DeathMontage)}; GetWorldTimerManager().SetTimer( DeathMontageTimerHandle, this, @@ -184,7 +192,7 @@ void ACCharacter::StartDeathSequence() OnDead(); PlayDeathAnimation(); SetStatusGaugeEnabled(false); - + GetCharacterMovement()->SetMovementMode(MOVE_None); GetCapsuleComponent()->SetCollisionEnabled(ECollisionEnabled::NoCollision); } @@ -210,3 +218,13 @@ void ACCharacter::OnDead() void ACCharacter::OnRespawn() { } + +void ACCharacter::SetGenericTeamId(const FGenericTeamId& NewTeamID) +{ + TeamId = NewTeamID; +} + +FGenericTeamId ACCharacter::GetGenericTeamId() const +{ + return TeamId; +} diff --git a/Source/Crunch/Private/Player/CPlayerController.cpp b/Source/Crunch/Private/Player/CPlayerController.cpp index edaec40..27362bc 100644 --- a/Source/Crunch/Private/Player/CPlayerController.cpp +++ b/Source/Crunch/Private/Player/CPlayerController.cpp @@ -5,14 +5,22 @@ #include "Blueprint/UserWidget.h" #include "Character/CPlayerCharacter.h" +#include "Net/UnrealNetwork.h" #include "Widgets/GameplayWidget.h" +void ACPlayerController::GetLifetimeReplicatedProps(TArray& OutLifetimeProps) const +{ + Super::GetLifetimeReplicatedProps(OutLifetimeProps); + DOREPLIFETIME(ACPlayerController, TeamId); +} + void ACPlayerController::OnPossess(APawn* InPawn) { Super::OnPossess(InPawn); if (CPlayerCharacter = Cast(InPawn); IsValid(CPlayerCharacter)) { CPlayerCharacter->ServerSideInit(); + CPlayerCharacter->SetGenericTeamId(TeamId); } } @@ -26,6 +34,16 @@ void ACPlayerController::AcknowledgePossession(APawn* P) } } +FGenericTeamId ACPlayerController::GetGenericTeamId() const +{ + return TeamId; +} + +void ACPlayerController::SetGenericTeamId(const FGenericTeamId& NewTeamID) +{ + TeamId = NewTeamID; +} + void ACPlayerController::SpawnGameplayWidget() { if (!IsLocalPlayerController()) return; diff --git a/Source/Crunch/Public/Character/CCharacter.h b/Source/Crunch/Public/Character/CCharacter.h index f42c341..62442ba 100644 --- a/Source/Crunch/Public/Character/CCharacter.h +++ b/Source/Crunch/Public/Character/CCharacter.h @@ -5,6 +5,7 @@ #include "CoreMinimal.h" #include "AbilitySystemInterface.h" #include "GameplayTagContainer.h" +#include "GenericTeamAgentInterface.h" #include "GameFramework/Character.h" #include "CCharacter.generated.h" @@ -13,7 +14,7 @@ class UCAbilitySystemComponent; class UCAttributeSet; UCLASS() -class CRUNCH_API ACCharacter : public ACharacter, public IAbilitySystemInterface +class CRUNCH_API ACCharacter : public ACharacter, public IAbilitySystemInterface, public IGenericTeamAgentInterface { GENERATED_BODY() @@ -27,6 +28,7 @@ public: bool IsLocallyControlledByPlayer() const; // Only called on the server virtual void PossessedBy(AController* NewController) override; + virtual void GetLifetimeReplicatedProps(TArray& OutLifetimeProps) const override; /********************************************************************************************/ /* Gameplay Ability */ @@ -78,4 +80,14 @@ private: void ReSpawn(); virtual void OnDead(); virtual void OnRespawn(); +public: + /********************************************************************************************/ + /* Team */ + /********************************************************************************************/ + virtual void SetGenericTeamId(const FGenericTeamId& NewTeamID) override; + virtual FGenericTeamId GetGenericTeamId() const override; + +private: + UPROPERTY(Replicated) + FGenericTeamId TeamId; }; diff --git a/Source/Crunch/Public/Player/CPlayerController.h b/Source/Crunch/Public/Player/CPlayerController.h index 97144ff..265d900 100644 --- a/Source/Crunch/Public/Player/CPlayerController.h +++ b/Source/Crunch/Public/Player/CPlayerController.h @@ -4,13 +4,14 @@ #include "CoreMinimal.h" #include "GameFramework/PlayerController.h" +#include "GenericTeamAgentInterface.h" #include "CPlayerController.generated.h" class UGameplayWidget; class ACPlayerCharacter; UCLASS() -class CRUNCH_API ACPlayerController : public APlayerController +class CRUNCH_API ACPlayerController : public APlayerController, public IGenericTeamAgentInterface { GENERATED_BODY() @@ -18,13 +19,23 @@ public: virtual void OnPossess(APawn* InPawn) override; virtual void AcknowledgePossession(APawn* P) override; + virtual FGenericTeamId GetGenericTeamId() const override; + virtual void SetGenericTeamId(const FGenericTeamId& NewTeamID) override; + virtual void GetLifetimeReplicatedProps(TArray& OutLifetimeProps) const override; + private: void SpawnGameplayWidget(); UPROPERTY() TObjectPtr CPlayerCharacter; + UPROPERTY(EditDefaultsOnly, Category= "UI") TSubclassOf GameplayWidgetClass; + UPROPERTY() TObjectPtr GameplayWidget; + + UPROPERTY(Replicated) + FGenericTeamId TeamId; + };