6#include "Engine/StreamableManager.h"
7#include "CosmeticsComponent.generated.h"
12 GENERATED_USTRUCT_BODY()
14 FKeyChain(
const TSoftObjectPtr<USkeletalMesh> KeyChainMeshIn,
const TArray<TSoftObjectPtr<UMaterialInstance>>& KeyChainMaterailsIn)
16 KeyChainMesh = KeyChainMeshIn;
17 KeyChainMaterials = KeyChainMaterailsIn;
30 Materials = TArray<TSoftObjectPtr<UMaterialInstance>>();
32 ParticleSystem = NULL;
34 FVehicleSkin(
const TArray<TSoftObjectPtr<UMaterialInstance>>& NewMaterials,
const TSoftObjectPtr<USkeletalMesh>& NewVehicleMesh,
const TSoftObjectPtr<UParticleSystem> NewParticleSystem)
36 Materials = NewMaterials;
37 VehicleMesh = NewVehicleMesh;
38 ParticleSystem = NewParticleSystem;
42 TArray<TSoftObjectPtr<UMaterialInstance>> Materials = TArray<TSoftObjectPtr<UMaterialInstance>>();
44 TSoftObjectPtr<UParticleSystem> ParticleSystem = NULL;
46 TSoftObjectPtr<USkeletalMesh> VehicleMesh = NULL;
55 Materials = TArray<TSoftObjectPtr<UMaterialInstance>>();
58 ParticleSystem = NULL;
60 FWeaponSkin(
const TArray<TSoftObjectPtr<UMaterialInstance>>& NewMaterials,
const TSoftObjectPtr<USkeletalMesh>& NewWeaponMesh1P,
const TSoftObjectPtr<USkeletalMesh>& NewWeaponMesh3P,
const TSoftObjectPtr<UParticleSystem> NewParticleSystem)
62 Materials = NewMaterials;
63 WeaponMesh1P = NewWeaponMesh1P;
64 WeaponMesh3P = NewWeaponMesh3P;
65 ParticleSystem = NewParticleSystem;
69 TArray<TSoftObjectPtr<UMaterialInstance>> Materials = TArray<TSoftObjectPtr<UMaterialInstance>>();
71 TSoftObjectPtr<UParticleSystem> ParticleSystem = NULL;
73 TSoftObjectPtr<USkeletalMesh> WeaponMesh1P = NULL;
75 TSoftObjectPtr<USkeletalMesh> WeaponMesh3P = NULL;
86 Material = NewLoadedMaterial;
90 UMaterialInstance* Material = NULL;
103 return bLoadedMesh && bLoadedMaterials;
108 USkeletalMesh* Mesh = NULL;
109 bool bLoadedMesh = false;
110 bool bLoadedMaterials = false;
113UENUM(BlueprintType, meta = (Bitflags))
124USTRUCT(BlueprintType)
149 for (
const TPair<EPlayerSkinPart, FPlayerSkinPortion>& SkinPortion :
PlayerSkin)
151 if (!SkinPortion.Value.bLoadedMaterials || !SkinPortion.Value.bLoadedMesh)
189 PlayerSkin[Part].Materials[i].UpdatedLoadedMaterial(Material);
192 if (!MaterialInstance.bLoaded)
207 PlayerSkin[LoadSkippingPortion].bLoadedMesh =
true;
208 PlayerSkin[LoadSkippingPortion].bLoadedMaterials =
true;
232class UStaticMeshComponent;
233class USkeletalMeshComponent;
234class UParticleSystemComponent;
236class UMaterialInstance;
260 virtual void EndPlay(
const EEndPlayReason::Type EndPlayReason)
override;
263 UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = Cosmetics)
264 FVector Scale1P = FVector(1.0f,1.0f,1.0f);
266 UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = Cosmetics)
267 FVector Position1P = FVector(-45.0f, 0.0f, -155.0f);
269 UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = Cosmetics)
270 FVector Rotation1P = FVector(8.0f, 0.0f, -90.0f);
272 UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = Cosmetics)
273 FVector Position3P = FVector(0.0f, 0.0f, -96.0f);
275 UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = Cosmetics)
276 FRotator Rotation3P = FRotator(0.0f, -90.0f, 0.0f);
278 UPROPERTY(BlueprintReadWrite, EditDefaultsOnly, Category = Mesh)
279 bool bPreview = false;
282 UPROPERTY(BlueprintReadWrite, EditDefaultsOnly, Category = Mesh)
283 UClass* AnimationBlendTree1P;
284 UPROPERTY(BlueprintReadWrite, EditDefaultsOnly, Category = Mesh)
285 UClass* AnimationBlendTree3P;
288 UPROPERTY(BlueprintReadWrite, EditDefaultsOnly, Category = Mesh)
289 USkeletalMesh* BodyMesh1P;
290 UPROPERTY(BlueprintReadWrite, EditDefaultsOnly, Category = Mesh)
291 USkeletalMesh* BodyMesh3P;
293 UPROPERTY(BlueprintReadWrite, EditDefaultsOnly, Category = Mesh)
294 USkeletalMesh* ClassClothingMesh3P;
295 UPROPERTY(BlueprintReadWrite, EditDefaultsOnly, Category = Mesh)
296 USkeletalMesh* HeadVariant3P;
299 UPROPERTY(VisibleInstanceOnly, BlueprintReadOnly, Category = Mesh)
300 USkeletalMeshComponent* Mesh1P;
301 UPROPERTY(VisibleInstanceOnly, BlueprintReadOnly, Category = Mesh)
305 UPROPERTY(VisibleInstanceOnly, BlueprintReadOnly, Category = Mesh)
306 USkeletalMeshComponent* Gun1P;
308 UFUNCTION(BlueprintCallable)
309 UTexture* GetPattern()
const {
return PatternMaterial; }
310 UFUNCTION(BlueprintCallable)
311 void SetPattern(UTexture* const NewPattern) { PatternMaterial = NewPattern; }
312 UFUNCTION(BlueprintCallable, BlueprintPure)
313 const TArray<UMeshComponent*>& Get3pMeshComponents()
const {
return AllMeshes3P; }
315 UPROPERTY(BlueprintReadWrite, EditDefaultsOnly, Category = Mesh)
316 class UParticleSystem* AllyPlayerTrailParticle;
318 UPROPERTY(BlueprintReadWrite, EditDefaultsOnly, Category = Mesh)
319 class UParticleSystem* EnemyPlayerTrailParticle;
322 UPROPERTY(BlueprintReadWrite, EditDefaultsOnly, Category = Mesh)
324 UPROPERTY(BlueprintReadWrite, EditDefaultsOnly, Category = Mesh)
326 UPROPERTY(BlueprintReadWrite, EditDefaultsOnly, Category = Mesh)
328 UPROPERTY(VisibleInstanceOnly, BlueprintReadOnly, Category = Mesh)
332 UPROPERTY(VisibleInstanceOnly, BlueprintReadOnly, Category = Mesh)
334 UPROPERTY(VisibleInstanceOnly, BlueprintReadOnly, Category = Mesh)
338 TArray<UMeshComponent*> AllMeshes3P;
339 TArray<UMeshComponent*> AllMeshes1P;
340 TArray<UMeshComponent*> AllMeshes;
342 void SetStaticMesh(UStaticMeshComponent* MeshComponent, UStaticMesh* Mesh);
343 void SetSkeletalMesh(USkeletalMeshComponent* MeshComponent, USkeletalMesh* Mesh);
344 void SetFirstPersonMesh();
346 UFUNCTION(BlueprintCallable, Category = Cosmetics)
347 void SetScalarParameterForAllMeshes(const FName& ParameterName,
float ScalarParameter);
348 UFUNCTION(BlueprintCallable, Category = Cosmetics)
349 void SetVectorParameterForAllMeshes(const FName& ParameterName, FVector VectorParameter);
350 UFUNCTION(BlueprintCallable, Category = Cosmetics)
351 void SetTextureParameterForAllMeshes(const FName& ParameterName, UTexture* TextureParameter);
352 UFUNCTION(BlueprintCallable, Category = Cosmetics)
353 void SetMaterialLayer(UMaterialInterface* Material);
354 UFUNCTION(BlueprintCallable, Category = Cosmetics)
355 void ClearMaterialLayer();
356 void CacheAllMaterials();
357 void CacheMaterial(UMeshComponent* Mesh);
358 void RestoreAllMaterials();
359 void SetMaterialLayerForAllMeshes();
360 void SetMaterialLayerForMesh(UMeshComponent* Mesh);
364 UFUNCTION(BlueprintCallable)
366 TWeakObjectPtr<UMaterialInterface> MaterialLayer =
nullptr;
367 TMap<TWeakObjectPtr<UMeshComponent>, TArray<TWeakObjectPtr<UMaterialInterface>>> MaterialCache;
369 UFUNCTION(BlueprintCallable, Category = Cosmetics)
370 void LoadDefaultCosmetics();
372 UFUNCTION(BlueprintCallable, Category = Cosmetics)
373 void ToggleKeyChainVisiblity(
bool bHideKeyChain);
376 UFUNCTION(BlueprintCallable, Category = Cosmetics)
377 void ToggleView(
bool toggle);
378 UFUNCTION(BlueprintCallable)
380 UFUNCTION(BlueprintCallable)
382 UFUNCTION(BlueprintCallable)
385 void OnTightAimStart() { ToggleKeyChainVisiblity(
true); }
387 void OnTightAimEnd() { ToggleKeyChainVisiblity(
false); }
388 void OnCosmeticsLoaded();
389 UFUNCTION(BlueprintCallable)
390 void LoadCosmeticsForClass(
const FEquips& Equips,
ECosmeticType Type,
const TSubclassOf<AProjectXCharacter> CharacterClass,
const TSubclassOf<UWeaponInstance> WeaponClass = NULL);
392 void OnEquipsUpdated(
ECosmeticType Type,const FString& ShortCode, const FString& Key);
394 bool IsLocallyControlled();
396 void ToggleRagdoll(
bool toggle);
397 void ManageClothPhysics();
399 UFUNCTION(BlueprintCallable,BlueprintPure)
400 class UParticleSystem* GetPlayerTrail(
bool bIsAlly) const;
402 UFUNCTION(BlueprintCallable)
403 UAnimMontage* GetTauntMontage()
const {
return TauntMontage; }
405 void InitializeMesh1P(USkeletalMeshComponent*& Mesh, FName Name);
406 void InitializeMesh3P(USkeletalMeshComponent*& Mesh, FName Name,
bool bUseAttachedParentsBounds =
false);
407 UFUNCTION(BlueprintCallable)
409 void AsyncLoadSkeletalMesh(TSoftObjectPtr<USkeletalMesh> AssetPointer, TWeakObjectPtr<USkeletalMeshComponent> MeshComponent);
410 void AsyncLoadSkeletalMesh(TSoftObjectPtr<USkeletalMesh> AssetPointer, TWeakObjectPtr<USkeletalMeshComponent> MeshComponent, FDelegateBinding Callback);
411 void AsyncLoadStaticMesh(TSoftObjectPtr<UStaticMesh> AssetPointer, TWeakObjectPtr<UStaticMeshComponent> MeshComponent);
412 void AsyncLoadMaterialInstance(TSoftObjectPtr<UMaterialInstance> AssetPointer,
int MaterialIndex, FDelegateMaterialInstanceBinding Callback);
413 void AsyncLoadMaterial(TSoftObjectPtr<UMaterial> AssetPointer,
int MaterialIndex, FDelegateMaterialBinding Callback);
414 void AsyncLoadTexture(TSoftObjectPtr<UTexture> AssetPointer, FDelegateTextureBinding Callback);
415 void AsyncLoadParticle(TSoftObjectPtr<UParticleSystem> AssetPointer, FDelegateParticleBinding Callback);
417 void SpawnSkeletalMeshAttached(USkeletalMesh* Mesh, USceneComponent* AttachTo, FName Socket);
418 void SpawnStaticMeshAttached(UStaticMesh* Mesh, USceneComponent* AttachTo, FName Socket);
419 void SpawnKeyChainAttached(USkeletalMesh* Mesh, USceneComponent* AttachTo,TSubclassOf<UWeaponInstance> WeaponClass, FName Socket);
422 void AsyncLoadAsset(TSoftObjectPtr<T> AssetPointer, FDelegateBinding Callback);
424 bool CanApplyCosmeticChanges()
const;
426 UFUNCTION(BlueprintCallable, Category =
"Cosmetic")
427 void RenderCustomDepth3P(const uint8 StencilValue, const
bool bUseCustomDepth);
429 UPROPERTY(BlueprintAssignable)
430 FOnPlayerSkinLoadedSignature OnPlayerSkinLoaded;
431 UPROPERTY(BlueprintAssignable)
432 FOnCosmeticLoadedSignature OnPlayerTrailChangedEvent;
433 UPROPERTY(BlueprintAssignable)
434 FOnCosmeticMeshLoadingSignature On3PWeaponLoadedEvent;
435 UPROPERTY(BlueprintAssignable)
436 FOnCosmeticLoadedSignature OnPatternLoadedEvent;
439 UFUNCTION(BlueprintCallable)
441 UFUNCTION(BlueprintCallable)
443 UFUNCTION(BlueprintCallable)
445 UFUNCTION(BlueprintCallable)
447 UFUNCTION(BlueprintCallable)
449 UFUNCTION(BlueprintCallable)
451 UFUNCTION(BlueprintCallable)
454 void OnPlayerStateUpdated(APlayerState* PlayerState);
456 void LoadPlayerSkinPiece(
UCosmeticPlayerSkinAsset* SkinAsset,TSoftObjectPtr<USkeletalMesh> MeshAsset, const TArray<TSoftObjectPtr<UMaterialInstance>>& Materials,
EPlayerSkinPart SkinLoadedPortion);
462 TArray<USceneComponent*> Attachments;
464 UAnimMontage* TauntMontage =
nullptr;
465 UTexture* PatternMaterial =
nullptr;
467 TMap<FString,TMap<uint8, UMaterialInstance*>> VehicleLoadedSkins;
474 FTimerHandle RagdollTimerHandle;
476 class APlayerController* PlayerController =
nullptr;
477 class UCameraComponent* FPCamera =
nullptr;
479 bool bIsFirstPerson = true;
ECosmeticType
Definition: CosmeticAssetBase.h:21
DECLARE_DELEGATE_OneParam(FDelegateTextureBinding, UTexture *)
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnCosmeticLoadedSignature)
EPlayerSkinPart
Definition: CosmeticsComponent.h:115
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnPlayerSkinLoadedSignature, const UCosmeticPlayerSkinAsset *, SkinAsset)
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnCosmeticMeshLoadingSignature, USkeletalMeshComponent *, MeshComponent, bool, bLoaded)
EItemType
Definition: CosmeticsComponent.h:218
DECLARE_DELEGATE_TwoParams(FDelegateMaterialBinding, UMaterial *, int)
DECLARE_DELEGATE(FDelegateBinding)
Definition: ProjectXCharacter.h:128
Definition: ProjectXVehicle.h:56
TWeakObjectPtr< AProjectXCharacter > Driver
Definition: ProjectXVehicle.h:628
virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override
Definition: ProjectXVehicle.cpp:268
virtual void BeginPlay() override
Definition: ProjectXVehicle.cpp:182
Definition: BISSkeletalMeshComponent.h:11
Definition: CosmeticAssetBase.h:106
Definition: CosmeticAssetBase.h:265
Definition: CosmeticAssetBase.h:245
Definition: CosmeticAssetBase.h:141
Definition: CosmeticAssetBase.h:256
Definition: CosmeticAssetBase.h:277
Definition: CosmeticAssetBase.h:217
Definition: CosmeticAssetBase.h:230
Definition: CosmeticsComponent.h:254
Definition: WeaponInstance.h:220
Definition: WeaponInstanceSpawnableVehicle.h:15
Definition: CosmeticsManager.h:105
Definition: CosmeticsComponent.h:11
TSoftObjectPtr< USkeletalMesh > KeyChainMesh
Definition: CosmeticsComponent.h:20
TArray< TSoftObjectPtr< UMaterialInstance > > KeyChainMaterials
Definition: CosmeticsComponent.h:21
FKeyChain(const TSoftObjectPtr< USkeletalMesh > KeyChainMeshIn, const TArray< TSoftObjectPtr< UMaterialInstance > > &KeyChainMaterailsIn)
Definition: CosmeticsComponent.h:14
Definition: CosmeticsComponent.h:126
void InitializeMaterialsList(EPlayerSkinPart Part, int32 Size)
Definition: CosmeticsComponent.h:169
bool IsSkinLoaded()
Definition: CosmeticsComponent.h:147
void SetSkipLoadingPortion(EPlayerSkinPart LoadSkippingPortion)
Definition: CosmeticsComponent.h:201
USkeletalMesh *const GetLoadedMesh(EPlayerSkinPart Part)
Definition: CosmeticsComponent.h:137
void UpdateLoadedMaterial(EPlayerSkinPart Part, UMaterialInstance *Material, int i)
Definition: CosmeticsComponent.h:182
void UpdateLoadedSkinMesh(EPlayerSkinPart Part, USkeletalMesh *Mesh)
Definition: CosmeticsComponent.h:160
Definition: CosmeticsComponent.h:96
bool IsSkinPortionLoaded()
Definition: CosmeticsComponent.h:101
Definition: CosmeticsComponent.h:80
void UpdatedLoadedMaterial(UMaterialInstance *NewLoadedMaterial)
Definition: CosmeticsComponent.h:84
Definition: CosmeticsComponent.h:26
FVehicleSkin(const TArray< TSoftObjectPtr< UMaterialInstance > > &NewMaterials, const TSoftObjectPtr< USkeletalMesh > &NewVehicleMesh, const TSoftObjectPtr< UParticleSystem > NewParticleSystem)
Definition: CosmeticsComponent.h:34
Definition: CosmeticsComponent.h:51
FWeaponSkin(const TArray< TSoftObjectPtr< UMaterialInstance > > &NewMaterials, const TSoftObjectPtr< USkeletalMesh > &NewWeaponMesh1P, const TSoftObjectPtr< USkeletalMesh > &NewWeaponMesh3P, const TSoftObjectPtr< UParticleSystem > NewParticleSystem)
Definition: CosmeticsComponent.h:60