(Feat) Add mulitplayer
This commit is contained in:
@@ -13,6 +13,12 @@ UCraftingComponent::UCraftingComponent()
|
||||
|
||||
// Necessaire pour que InitializeComponent() soit appele.
|
||||
bWantsInitializeComponent = true;
|
||||
|
||||
// Aucune propriete repliquee : le composant ne porte que StationRefCounts,
|
||||
// tenu a jour des deux cotes par le controller. C'est uniquement le routage
|
||||
// de Server_Craft qui l'exige -- un composant non replique voit ses RPC
|
||||
// serveur silencieusement jetees.
|
||||
SetIsReplicatedByDefault(true);
|
||||
}
|
||||
|
||||
void UCraftingComponent::InitializeComponent()
|
||||
@@ -198,8 +204,29 @@ void UCraftingComponent::GatherIngredientStatus(const UCraftingRecipeDataAsset*
|
||||
}
|
||||
}
|
||||
|
||||
void UCraftingComponent::Server_Craft_Implementation(UCraftingRecipeDataAsset* Recipe)
|
||||
{
|
||||
Craft(Recipe);
|
||||
}
|
||||
|
||||
bool UCraftingComponent::Craft(UCraftingRecipeDataAsset* Recipe)
|
||||
{
|
||||
// Fabriquer consomme et ajoute dans l'inventaire, devenu autoritaire.
|
||||
// Le client demande, le serveur decide -- et il refait CanCraft de son cote
|
||||
// avec SA liste de postes accessibles : sans ca, un client desynchronise
|
||||
// fabriquerait une recette d'etabli au milieu de la foret.
|
||||
const AActor* Owner = GetOwner();
|
||||
if (!Owner || !Owner->HasAuthority())
|
||||
{
|
||||
Server_Craft(Recipe);
|
||||
|
||||
// "Demande partie", pas "objet fabrique". Le resultat arrivera par la
|
||||
// replication de l'inventaire, et OnCraftSucceeded n'est diffuse que
|
||||
// sur le serveur -- une animation de reussite devra passer par une RPC
|
||||
// Client_ le jour ou il y en aura une.
|
||||
return true;
|
||||
}
|
||||
|
||||
ECraftFailureReason Reason = ECraftFailureReason::None;
|
||||
if (!CanCraft(Recipe, Reason))
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user