5#include "CoreMinimal.h"
6#include "Components/ActorComponent.h"
7#include "SquadComponent.generated.h"
9class APlayerController;
11class AProjectXPlayerStateTeam;
26 SquadID = SquadIDCounter;
32 return SquadID != INDEX_NONE && SquadID == Other.
SquadID;
37 return SquadID == INDEX_NONE;
42 return SquadID != INDEX_NONE;
47 bool HasAlivePlayers();
50 void ForceOnRepUpdate();
57 int32 SquadID = INDEX_NONE;
65 static int32 SquadIDCounter;
68 uint8 UpdateCounter = 0;
75UCLASS( ClassGroup=(
Custom), meta=(BlueprintSpawnableComponent) )
76class PROJECTX_API USquadComponent : public UActorComponent
78 GENERATED_UCLASS_BODY()
82 virtual void BeginPlay()
override;
86 UFUNCTION(BlueprintCallable, Category = SquadComponent)
87 FORCEINLINE int32 GetSquadCount()
const {
return SquadCount; }
88 UFUNCTION(BlueprintCallable, Category = SquadComponent)
89 FORCEINLINE int32 GetMaxSquadSize()
const {
return MaxSquadSize; }
90 UFUNCTION(BlueprintCallable, Category = SquadComponent)
91 void GetSquadList(TArray<FSquadInstance>& OutSquadList)
const;
92 UFUNCTION(BlueprintCallable, Category = SquadComponent)
93 void GetSquadListForTeam(TArray<FSquadInstance>& OutSquadList, uint8
Team)
const;
94 UFUNCTION(BlueprintPure, Category = SquadComponent, meta = (DisplayName =
"Get Squad By ID", ScriptName =
"GetSquadByID"))
96 UFUNCTION(BlueprintPure, Category = SquadComponent, meta = (DisplayName =
"Get Squad By Player", ScriptName =
"GetSquadByPlayer"))
98 UFUNCTION(BlueprintPure, Category = SquadComponent)
103 UFUNCTION(BlueprintCallable, Category = SquadComponent)
105 UFUNCTION(BlueprintCallable, Category = SquadComponent, meta = (DisplayName =
"Can Join Squad", ScriptName =
"CanJoinSquad"))
115 UFUNCTION(BlueprintCallable, Category = SquadComponent)
118 virtual void CleanupSquads();
120 virtual void TryJoinSquadVoiceChannel(TWeakObjectPtr<AProjectXPlayerState> NewSquadMember, int32 TeamID, int32 SquadID);
124 UPROPERTY(BlueprintAssignable)
125 FSquadListUpdateSignature OnSquadListChanged;
127 UPROPERTY(BlueprintAssignable)
128 FSquadUpdateSignature OnSquadChanged;
130 UPROPERTY(BlueprintAssignable)
131 FSquadMemberUpdateSignature OnSquadMemberAdded;
132 UPROPERTY(BlueprintAssignable)
133 FSquadMemberUpdateSignature OnSquadMemberRemoved;
137 virtual void OnRep_SquadList();
141 virtual void OnPlayerStateRemoved(APlayerState* PlayerState);
144 UPROPERTY(ReplicatedUsing = OnRep_SquadList)
145 TArray<FSquadInstance> SquadList;
147 TArray<FSquadInstance> CachedSquadList;
148 int32 VoiceChatSalt = 0;
149 FString NetAddress =
"";
151 TMap<int32, int32> CachedSquadIDMap;
153 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
154 uint8 MaxSquadSize = 5;
155 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Replicated)
156 uint8 SquadCount = 6;
159 UFUNCTION(BlueprintPure, Category = SquadComponent, meta = (WorldContext =
"WorldContextObject", CallableWithoutWorldContext))
160 static USquadComponent* GetSquadComponent(
const UObject* WorldContextObject);
161 UFUNCTION(BlueprintPure, Category = SquadComponent)
162 static bool GetSquadInfo(
const FSquadInstance&
Squad, uint8&
Team, int32& ID, TArray<AProjectXPlayerState*>& PlayerList);
163 UFUNCTION(BlueprintPure, Category = SquadComponent)
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FSquadMemberUpdateSignature, int32, SquadID, AProjectXPlayerState *, PlayerState)
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FSquadListUpdateSignature)
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FSquadUpdateSignature, int32, SquadID)
Definition: ProjectXPlayerController.h:83
Definition: ProjectXPlayerState.h:238
Definition: SquadComponent.h:15
bool operator!() const
Definition: SquadComponent.h:35
FSquadInstance(uint8 InTeam)
Definition: SquadComponent.h:23
int32 SquadID
Definition: SquadComponent.h:57
bool operator==(const FSquadInstance &Other) const
Definition: SquadComponent.h:30