Files
Naked-Desire/Source/NakedDesire/Commissions/CommissionConstraint.h
T
2026-06-03 15:17:02 +03:00

44 lines
1.3 KiB
C++

// © 2025 Naked People Team. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "UObject/Object.h"
#include "CommissionConstraint.generated.h"
class ANakedDesireCharacter;
DECLARE_MULTICAST_DELEGATE(FOnConstraintChangedSignature);
/**
* A "while Y" gate attached to a UCommissionObjective. The objective only counts progress while every
* constraint reports IsMet(). A constraint subscribes to whatever world signal it watches and fires
* OnConstraintChanged so the owning objective re-evaluates. Constraints compose with any objective, so
* "expose boobs" + "while at the beach" + "during night" is data, not new objective code (see §13.4).
*/
UCLASS(Abstract, EditInlineNew, BlueprintType)
class NAKEDDESIRE_API UCommissionConstraint : public UObject
{
GENERATED_BODY()
public:
FOnConstraintChangedSignature OnConstraintChanged;
void Activate(ANakedDesireCharacter* InPlayer);
void Deactivate();
virtual bool IsMet() const { return true; }
UFUNCTION(BlueprintPure)
virtual FText GetDescription() const;
protected:
UPROPERTY()
ANakedDesireCharacter* Player = nullptr;
virtual void OnActivate() {}
virtual void OnDeactivate() {}
// Subclasses call this when the thing they watch changes; the owning objective re-evaluates.
void NotifyChanged() { OnConstraintChanged.Broadcast(); }
};