(Feat) Add Cooking and Workbench
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
// 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;
|
||||
};
|
||||
Reference in New Issue
Block a user