#pragma once #include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "DescentShowcaseRig.generated.h" class AKazahTender; class UChildActorComponent; class UPointLightComponent; /** * A Tender with its headlight on, a couple of dim fill lights and a seabed to catch the beam, for looking at the model. It is not * part of the map (the map holds only a PlayerStart, everything else is spawned by code): the `kazah_showcase` and `kazah_closeups` * scenarios spawn it with FindOrSpawn. It has no fog or exposure of its own since the integration pass: ADescentEnvironment is the * only authority for those. Everything is relative to the actor. The fill lights are in the game's unitless light units. */ UCLASS() class THEDESCENT_API ADescentShowcaseRig : public AActor { GENERATED_BODY() public: ADescentShowcaseRig(); static ADescentShowcaseRig* FindOrSpawn(UWorld* World, const FVector& LocationM = FVector::ZeroVector); AKazahTender* GetTender() const; /** Multiplies the fill lights' brightness (1 = the dim default). Close-up scenarios raise it. */ UFUNCTION(BlueprintCallable, Category = "Showcase") void SetFillScale(float Scale); /** Obsolete: the rig has no fog or exposure of its own since the integration pass. Does nothing; kept so old scenarios compile. */ UFUNCTION(BlueprintCallable, Category = "Showcase") void SetOwnEnvironment(bool bOn); protected: virtual void OnConstruction(const FTransform& Transform) override; private: UPROPERTY(VisibleAnywhere, Category = "Showcase") TObjectPtr TenderSlot; /** Cool light from the front, above and to starboard. */ UPROPERTY(VisibleAnywhere, Category = "Showcase") TObjectPtr FillFront; /** Teal rim light from behind and below, so the stern and rotors read against the dark. */ UPROPERTY(VisibleAnywhere, Category = "Showcase") TObjectPtr FillRear; /** Faint light from above and to port, so the side that faces away from FillFront is not a silhouette. */ UPROPERTY(VisibleAnywhere, Category = "Showcase") TObjectPtr FillTop; float FillScale = 1.f; UPROPERTY(VisibleAnywhere, Category = "Showcase") TObjectPtr Seabed; };