#pragma once #include "CoreMinimal.h" #include "UObject/NoExportTypes.h" #include "Engine/NetSerialization.h" #include "Engine/NetSerialization.h" #include "GameplayTagContainer.h" #include "CoolDownProgressStyle.h" #include "EPickaxePartLocation.h" #include "EPickaxeState.h" #include "Item.h" #include "PickaxeMeshInstance.h" #include "PickaxePartEquip.h" #include "Templates/SubclassOf.h" #include "UpgradableGear.h" #include "PickaxeItem.generated.h" class UAnimMontage; class UDamageComponent; class UFSDPhysicalMaterial; class UFXSystemAsset; class UForceFeedbackEffect; class UItemCharacterAnimationSet; class UMaterialInterface; class UPlayerAnimInstance; class UPrimitiveComponent; class USceneComponent; class USoundCue; class UStatusEffect; UCLASS(Abstract, Blueprintable) class APickaxeItem : public AItem, public IUpgradableGear, public IPickaxePartEquip { GENERATED_BODY() public: UPROPERTY(BlueprintReadWrite, EditAnywhere, Transient, meta=(AllowPrivateAccess=true)) bool QuadDamageCarving; protected: UPROPERTY(BlueprintReadWrite, EditAnywhere, Instanced, meta=(AllowPrivateAccess=true)) USceneComponent* FP_Root; UPROPERTY(BlueprintReadWrite, EditAnywhere, Instanced, meta=(AllowPrivateAccess=true)) USceneComponent* TP_Root; UPROPERTY(BlueprintReadWrite, EditAnywhere, Instanced, meta=(AllowPrivateAccess=true)) USceneComponent* FP_Scale; UPROPERTY(BlueprintReadWrite, EditAnywhere, Instanced, meta=(AllowPrivateAccess=true)) USceneComponent* TP_Scale; UPROPERTY(BlueprintReadWrite, EditAnywhere, Transient, meta=(AllowPrivateAccess=true)) UPlayerAnimInstance* FPAnimInstance; UPROPERTY(BlueprintReadWrite, EditAnywhere, Transient, meta=(AllowPrivateAccess=true)) UPlayerAnimInstance* TPAnimInstance; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) UAnimMontage* FP_EquipAnimation; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) UAnimMontage* TP_EquipAnimation; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float EquipDuration; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) UItemCharacterAnimationSet* CharacterAnimationSet; UPROPERTY(BlueprintReadWrite, EditAnywhere, Instanced, meta=(AllowPrivateAccess=true)) UDamageComponent* DamageComponent; UPROPERTY(BlueprintReadWrite, EditAnywhere, Instanced, meta=(AllowPrivateAccess=true)) UDamageComponent* SpecialDamageComponent; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float SpecialCooldown; UPROPERTY(BlueprintReadWrite, EditAnywhere, Transient, meta=(AllowPrivateAccess=true)) float SpecialCooldownRemaining; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) FCoolDownProgressStyle SpecialCooldownUI; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) int32 RockMiningBonus; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) int32 DirtMiningBonus; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float DamageRange; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float MiningRange; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float DamageRadius; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) TSubclassOf OnDamageEnemySlowdownEffect; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) FGameplayTagContainer WideDamageTrackingTags; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) USoundCue* MiningSound; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) UForceFeedbackEffect* MineRumble; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) UForceFeedbackEffect* PartialMineRumble; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) UForceFeedbackEffect* DamageRumble; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float GeneralImpactAudioVolume; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float HitCooldown; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float MiningDuration; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float DistanceConsideredSameHit; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float BlockParticlesScaleFP; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float BlockParticlesScaleTP; UPROPERTY(BlueprintReadWrite, EditAnywhere, Transient, ReplicatedUsing=OnRep_State, meta=(AllowPrivateAccess=true)) EPickaxeState State; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) USoundCue* PowerAttackRefreshedSound; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) bool PreventQMining; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float QMiningExpectedDelay; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float QMiningInitialDelay; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float QMiningReducedPlayRatePct; UPROPERTY(EditAnywhere, meta=(AllowPrivateAccess=true)) double QMiningLastHitTime; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) bool CanBezerk; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) TSubclassOf BezerkStatusEffect; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) bool PowerAttackEnabled; UPROPERTY(BlueprintReadWrite, EditAnywhere, Transient, meta=(AllowPrivateAccess=true)) TMap EquippedParts; UPROPERTY(BlueprintReadWrite, EditAnywhere, Transient, meta=(AllowPrivateAccess=true)) UMaterialInterface* EquippedMaterial; public: APickaxeItem(); virtual void GetLifetimeReplicatedProps(TArray& OutLifetimeProps) const override; protected: UFUNCTION(BlueprintCallable, BlueprintImplementableEvent) void SpecialTargetDamageEffects(const FVector& ImpactPoint, const FVector& ImpactNormal); public: UFUNCTION(BlueprintCallable) void SetSpecialCoolDownDuration(float newCooldownDuration); protected: UFUNCTION(BlueprintCallable, Reliable, Server) void Server_TriggerBezerk(); UFUNCTION(BlueprintCallable, Reliable, Server) void Server_SetState(EPickaxeState NewState); UFUNCTION(BlueprintCallable, Reliable, Server) void Server_RemoveDebrisInstance(FVector_NetQuantize HitPos, int32 DebrisIndex, int32 remappedIndex); UFUNCTION(BlueprintCallable, Server, Unreliable) void Server_HitBlock(FVector_NetQuantize Position, int32 Material, bool removeDebris, bool isSpecial); UFUNCTION(BlueprintCallable, Reliable, Server) void Server_DoPowerAttack(); UFUNCTION(BlueprintCallable, Reliable, Server) void Server_DigBlock(FVector carvePos, FVector carveDirection, int32 TerrainMaterial, bool isSpecial); UFUNCTION(BlueprintCallable, Reliable, Server) void Server_DamageTarget(UPrimitiveComponent* TargetComponent, bool isSpecial, const FVector_NetQuantize& ImpactPoint, const FVector_NetQuantizeNormal& ImpactNormal, UFSDPhysicalMaterial* PhysMaterial, uint8 BoneIndex); public: UFUNCTION(BlueprintCallable) void RefreshSpecialCooldown(); protected: UFUNCTION(BlueprintCallable) void OnRep_State(EPickaxeState oldState); UFUNCTION(BlueprintCallable) void OnLoadoutChanged(); public: UFUNCTION(BlueprintCallable, BlueprintPure) float GetSpecialCooldownProgress() const; protected: UFUNCTION(BlueprintCallable, NetMulticast, Unreliable) void All_SimulateHitBlock(FVector_NetQuantize Position, int32 materia, bool removeDebris, bool isSpecial); UFUNCTION(BlueprintCallable, NetMulticast, Unreliable) void All_SimulateDigDebris(FVector_NetQuantize Position, UFXSystemAsset* Particles, USoundCue* cue); UFUNCTION(BlueprintCallable, NetMulticast, Unreliable) void All_SimulateDigBlock(FVector_NetQuantize Position, bool SpawnParticles, int32 Material, float Density, bool isSpecial); UFUNCTION(BlueprintCallable, NetMulticast, Unreliable) void All_SimulateDamageTarget(UPrimitiveComponent* TargetComponent, bool isSpecial, const FVector_NetQuantize& ImpactPoint, const FVector_NetQuantizeNormal& ImpactNormal, UFSDPhysicalMaterial* PhysMaterial, uint8 BoneIndex); UFUNCTION(BlueprintCallable, NetMulticast, Unreliable) void All_DoPowerAttack(); // Fix for true pure virtual functions not being implemented };