#pragma once #include "CoreMinimal.h" #include "UObject/NoExportTypes.h" #include "Curves/CurveFloat.h" #include "EnemyPawn.h" #include "FacilityTurret.generated.h" class AActor; class USceneComponent; class USkeletalMeshComponent; class USoundCue; UCLASS(Blueprintable) class AFacilityTurret : public AEnemyPawn { GENERATED_BODY() public: UPROPERTY(BlueprintReadWrite, EditAnywhere, Instanced, meta=(AllowPrivateAccess=true)) USceneComponent* Root; UPROPERTY(BlueprintReadWrite, EditAnywhere, Instanced, meta=(AllowPrivateAccess=true)) USkeletalMeshComponent* Mesh; protected: UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float IndicatorActivationDelay; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) bool FinishAttackIgnoreLoS; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) bool InvulnerableOnInactive; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float FoldOutTime; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) USoundCue* EngagedAudio; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float Offset; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float AimAcceleration; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) FRuntimeFloatCurve AimSpeedCurve; UPROPERTY(BlueprintReadWrite, EditAnywhere, Replicated, Transient, meta=(AllowPrivateAccess=true)) AActor* CurrentTarget; UPROPERTY(BlueprintReadWrite, EditAnywhere, Transient, ReplicatedUsing=OnRep_TurretEngaged, meta=(AllowPrivateAccess=true)) bool TurretEngaged; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) bool AlwaysActive; public: AFacilityTurret(); virtual void GetLifetimeReplicatedProps(TArray& OutLifetimeProps) const override; protected: UFUNCTION(BlueprintCallable) void TurnOffMesh(); UFUNCTION(BlueprintAuthorityOnly, BlueprintCallable) void SetIsAttacking(bool IsAttacking); UFUNCTION(BlueprintCallable) void OnRep_TurretEngaged(); UFUNCTION(BlueprintCallable, BlueprintImplementableEvent) void OnProjectileSpawned(); UFUNCTION(BlueprintCallable, BlueprintImplementableEvent) void OnEngagedChanged(bool engaged); public: UFUNCTION(BlueprintCallable, BlueprintImplementableEvent) void OnAttack(); UFUNCTION(BlueprintCallable, BlueprintPure) FRotator GetLookingDirection() const; };