(Feat) Add mulitplayer
This commit is contained in:
@@ -27,10 +27,15 @@ class SURVIVAL_PROJET_API APickupItem : public AActor, public IInteractable
|
||||
public:
|
||||
APickupItem();
|
||||
|
||||
virtual void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const override;
|
||||
|
||||
/**
|
||||
* Configure un pickup engendre a l'execution (objet jete au sol).
|
||||
* A appeler entre SpawnActorDeferred() et FinishSpawning() pour que
|
||||
* OnConstruction ait deja les bonnes donnees et pose le bon mesh.
|
||||
*
|
||||
* A n'appeler que sur le SERVEUR : c'est lui qui engendre les acteurs du
|
||||
* monde, les clients recoivent l'acteur deja configure par replication.
|
||||
*/
|
||||
UFUNCTION(BlueprintCallable, Category = "Item")
|
||||
void InitPickup(UItemDataAsset* InItemData, int32 InQuantity, int32 InRemainingUses = -1);
|
||||
@@ -62,21 +67,44 @@ protected:
|
||||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Item")
|
||||
TObjectPtr<USphereComponent> InteractionSphere;
|
||||
|
||||
/** Quel objet ce pickup represente. A assigner sur chaque instance. */
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Item")
|
||||
/**
|
||||
* Quel objet ce pickup represente. A assigner sur chaque instance.
|
||||
*
|
||||
* ReplicatedUsing et non simplement Replicated : chez un client, l'acteur
|
||||
* est construit AVANT que ses proprietes arrivent. OnConstruction s'execute
|
||||
* donc avec ItemData a nullptr et ne pose aucun mesh -- l'objet resterait
|
||||
* invisible pour tout le monde sauf l'hote. C'est OnRep qui repose le visuel
|
||||
* au moment ou la donnee arrive vraiment.
|
||||
*/
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, ReplicatedUsing = OnRep_ItemData, Category = "Item")
|
||||
TObjectPtr<UItemDataAsset> ItemData;
|
||||
|
||||
/** Combien d'exemplaires ce tas contient. */
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Item", meta = (ClampMin = "1"))
|
||||
/**
|
||||
* Combien d'exemplaires ce tas contient.
|
||||
* Replique parce que le prompt l'affiche ("Ramasser Branche x3") et qu'un
|
||||
* ramassage partiel, inventaire plein, le fait diminuer sous les yeux de tous.
|
||||
*/
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Replicated, Category = "Item")
|
||||
int32 Quantity = 1;
|
||||
|
||||
/**
|
||||
* Charges restantes pour un objet a usages multiples.
|
||||
* -1 = plein, ce qui est le cas de tout objet pose a la main dans le niveau.
|
||||
*/
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Item")
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Replicated, Category = "Item")
|
||||
int32 RemainingUses = -1;
|
||||
|
||||
/** Repose le mesh quand la donnee de l'objet arrive chez un client. */
|
||||
UFUNCTION()
|
||||
void OnRep_ItemData();
|
||||
|
||||
/**
|
||||
* Applique le visuel decrit par l'ItemData. Partage par OnConstruction et
|
||||
* OnRep_ItemData : deux copies finiraient par diverger, et le symptome
|
||||
* serait un objet correct dans l'editeur mais nu en jeu.
|
||||
*/
|
||||
void ApplyItemVisuals();
|
||||
|
||||
/**
|
||||
* Reprend automatiquement le WorldMesh de l'ItemData dans l'editeur.
|
||||
* Decoche pour imposer un mesh different sur une instance precise.
|
||||
|
||||
Reference in New Issue
Block a user