#pragma once #include "CoreMinimal.h" #include "UObject/NoExportTypes.h" #include "UObject/NoExportTypes.h" #include "ERefineryState.h" #include "Objective.h" #include "Templates/SubclassOf.h" #include "RefineryObjective.generated.h" class AActor; class AFSDRefinery; class AProceduralSetup; class UDebrisPositioning; UCLASS(Abstract, Blueprintable, ClassGroup=Custom, meta=(BlueprintSpawnableComponent)) class FSD_API URefineryObjective : public UObjective { GENERATED_BODY() public: DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FRefineryDelegate, AFSDRefinery*, InRefinery); UPROPERTY(BlueprintAssignable, BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) FRefineryDelegate OnRefinerySpawned; protected: UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) TSoftClassPtr refineryClass; UPROPERTY(BlueprintReadWrite, EditAnywhere, Transient, ReplicatedUsing=OnRep_Refinery, meta=(AllowPrivateAccess=true)) TWeakObjectPtr Refinery; UPROPERTY(BlueprintReadWrite, EditAnywhere, Transient, meta=(AllowPrivateAccess=true)) ERefineryState RefineryState; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) UDebrisPositioning* RefineryPlacement; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) TSoftClassPtr RawMaterialClass; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) UDebrisPositioning* RawMaterialPlacement; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) int32 RawMaterialCount; UPROPERTY(BlueprintReadWrite, EditAnywhere, Transient, meta=(AllowPrivateAccess=true)) bool bMissionCompleted; UPROPERTY(BlueprintReadWrite, EditAnywhere, Transient, meta=(AllowPrivateAccess=true)) bool bIsFinalBattle; UPROPERTY(BlueprintReadWrite, EditAnywhere, Transient, meta=(AllowPrivateAccess=true)) int32 OptionalTunnelRoomID; public: URefineryObjective(); virtual void GetLifetimeReplicatedProps(TArray& OutLifetimeProps) const override; UFUNCTION(BlueprintCallable) void SpawnWells(AProceduralSetup* Setup, const FVector& rigLocation, float minDistanceBetween, const TArray& minMaxDistancesToRig); protected: UFUNCTION(BlueprintCallable, BlueprintImplementableEvent) void ReceiveRefinerySpawned(AFSDRefinery* InRefinery); UFUNCTION(BlueprintCallable) void OnRep_Refinery(); UFUNCTION(BlueprintCallable) void OnRefineryStateChanged(ERefineryState InRefineryState); public: UFUNCTION(BlueprintCallable) FVector GetRefinerySpawnLocation(TSubclassOf NewRefineryClass); protected: UFUNCTION(BlueprintCallable, BlueprintImplementableEvent) void AddMissionCriticalItems(AProceduralSetup* Setup); };