66 lines
2.4 KiB
C++
66 lines
2.4 KiB
C++
// Fill out your copyright notice in the Description page of Project Settings.
|
|
|
|
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "GameFramework/Actor.h"
|
|
#include "CraftingRecipeDataAsset.h"
|
|
#include "Interactable.h"
|
|
#include "CraftingStation.generated.h"
|
|
|
|
class UStaticMeshComponent;
|
|
|
|
/**
|
|
* Un poste de travail pose dans le monde : etabli, et ce qui suivra.
|
|
*
|
|
* Il ne fabrique rien lui-meme et ne contient aucune recette. Tout ce qu'il
|
|
* fait, c'est ouvrir l'ecran de fabrication en annoncant SON type de poste --
|
|
* le reste appartient au UCraftingComponent du joueur, qui filtrera les
|
|
* recettes en consequence.
|
|
*
|
|
* L'acces au poste ne dure que le temps de l'ecran : c'est le controller qui
|
|
* l'accorde a l'ouverture et le reprend a la fermeture. Un etabli qui donnerait
|
|
* son acces "par proximite" obligerait a surveiller la distance en permanence,
|
|
* pour un resultat que le joueur comprendrait moins bien -- ici on fabrique a
|
|
* l'etabli parce qu'on est en train de s'en servir.
|
|
*
|
|
* Un seul BP_CraftingStation suffit pour tous les postes : c'est StationType
|
|
* qui change par instance, comme ItemData sur BP_Pickup.
|
|
*/
|
|
UCLASS()
|
|
class SURVIVAL_PROJET_API ACraftingStation : public AActor, public IInteractable
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
public:
|
|
ACraftingStation();
|
|
|
|
// --- IInteractable ---
|
|
virtual FText GetInteractionPrompt_Implementation(AActor* Interactor) const override;
|
|
virtual void Interact_Implementation(AActor* Interactor) override;
|
|
|
|
protected:
|
|
/**
|
|
* Le visuel ET la surface d'interaction.
|
|
*
|
|
* Pas de sphere dediee ici, contrairement a APickupItem : un poste est un
|
|
* meuble construit, dont le mesh a une vraie collision simple. Une sphere
|
|
* autour d'un volume pareil serait touchee AVANT lui -- le trace s'arrete au
|
|
* premier bloqueur -- et le prompt apparaitrait en visant le vide autour, ou
|
|
* masquerait un objet pose au pied du meuble.
|
|
*
|
|
* Corollaire : le mesh assigne doit avoir une collision simple. Sans elle,
|
|
* le trace le traverse, puisqu'il est lance en bTraceComplex = false.
|
|
*/
|
|
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Crafting")
|
|
TObjectPtr<UStaticMeshComponent> Mesh;
|
|
|
|
/** Le poste que cet acteur rend accessible pendant qu'on s'en sert. */
|
|
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Crafting")
|
|
ECraftingStation StationType = ECraftingStation::Workbench;
|
|
|
|
/** Texte affiche quand le joueur vise le poste. */
|
|
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Crafting")
|
|
FText InteractionPrompt;
|
|
};
|