Files
Naked-Desire/Source/NakedDesire/Interactables/Bed.h
T

57 lines
1.9 KiB
C++

// © 2025 Naked People Team. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "NakedDesire/Interaction/Interactable.h"
#include "Bed.generated.h"
class UBoxComponent;
class UWidgetComponent;
/**
* The apartment bed (GDD §2.4, §4.4 step 2, §11.19). Interacting sleeps: fast-forwards
* 8 hours, restores energy, charges the phone, autosaves (all via UTimeOfDaySubsystem),
* and loses any clothing left outside the apartment. Sleep is the only place the player
* sleeps — there is no sleeping outside.
*/
UCLASS(Blueprintable)
class NAKEDDESIRE_API ABed : public AActor, public IInteractable
{
GENERATED_BODY()
public:
ABed();
virtual void Interact_Implementation(ANakedDesireCharacter* Player) override;
virtual bool CanInteract_Implementation(ANakedDesireCharacter* Player) const override;
virtual FText GetInteractionPrompt_Implementation() const override;
virtual void HideInteractionHint_Implementation() override;
virtual void ShowInteractionFocusHint_Implementation() override;
virtual void ShowInteractionProximityHint_Implementation() override;
protected:
virtual void BeginPlay() override;
// Cosmetic fade / SFX over the (instantaneous) time jump — authored in BP. Fired just
// before the sleep is resolved so the screen can be covered as time advances.
UFUNCTION(BlueprintImplementableEvent, Category = "Sleep")
void PlaySleepTransition();
private:
// Performs the actual sleep transaction (time skip + energy + loss). Split out so a BP
// fade timeline can drive it at the black midpoint if desired.
void DoSleep();
void ApplyOutline(bool bEnabled, int32 StencilValue);
UPROPERTY(EditDefaultsOnly)
TObjectPtr<UStaticMeshComponent> MeshComponent;
UPROPERTY(EditDefaultsOnly)
TObjectPtr<UBoxComponent> ColliderComponent;
UPROPERTY(EditDefaultsOnly)
TObjectPtr<UWidgetComponent> InteractionHint;
};