|
@@ -5,9 +5,37 @@
|
|
|
#include "CoreMinimal.h"
|
|
|
#include "EzAbilityContext.h"
|
|
|
#include "EzAbilityInstance.h"
|
|
|
+#include "EzAbilitySettingInterface.h"
|
|
|
#include "Components/ActorComponent.h"
|
|
|
#include "EzAbilityComponent.generated.h"
|
|
|
|
|
|
+USTRUCT(BlueprintType)
|
|
|
+struct FEzAbilityParameter
|
|
|
+{
|
|
|
+ GENERATED_BODY()
|
|
|
+
|
|
|
+ FEzAbilityParameter() = default;
|
|
|
+
|
|
|
+ FEzAbilityParameter& operator=(const FEzAbilityParameter& Parameter)
|
|
|
+ {
|
|
|
+ Instigator = Parameter.Instigator;
|
|
|
+ Targets = Parameter.Targets;
|
|
|
+ Locations = Parameter.Locations;
|
|
|
+
|
|
|
+ return *this;
|
|
|
+ }
|
|
|
+
|
|
|
+ UPROPERTY(EditAnywhere)
|
|
|
+ TObjectPtr<AActor> Instigator = nullptr;
|
|
|
+
|
|
|
+ UPROPERTY(EditAnywhere)
|
|
|
+ TArray<TObjectPtr<AActor>> Targets;
|
|
|
+
|
|
|
+ UPROPERTY(EditAnywhere)
|
|
|
+ TArray<FVector> Locations;
|
|
|
+};
|
|
|
+
|
|
|
+
|
|
|
UCLASS(ClassGroup=(Custom), meta=(BlueprintSpawnableComponent))
|
|
|
class EZABILITY_API UEzAbilityComponent : public UActorComponent
|
|
|
{
|
|
@@ -20,19 +48,25 @@ public:
|
|
|
protected:
|
|
|
// Called when the game starts
|
|
|
virtual void BeginPlay() override;
|
|
|
-
|
|
|
+ virtual void OnRegister() override;
|
|
|
+ virtual void InitializeComponent() override;
|
|
|
+ virtual void PreNetReceive() override;
|
|
|
+ virtual bool IsLocallyControlled() const;
|
|
|
+
|
|
|
public:
|
|
|
virtual void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const override;
|
|
|
virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override;
|
|
|
|
|
|
-
|
|
|
- UFUNCTION(BlueprintCallable)
|
|
|
- bool ActivateAbility(UEzAbility* Ability, AActor* Instigator = nullptr);
|
|
|
+ //////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
+ ///Ability
|
|
|
+ UFUNCTION(BlueprintCallable, Category="Ability")
|
|
|
+ bool ActivateAbility(const UEzAbility* Ability, const FEzAbilityParameter& Parameter);
|
|
|
|
|
|
- UFUNCTION(BlueprintCallable)
|
|
|
+ UFUNCTION(BlueprintCallable, meta=(DisplayName="ActivateAbility"), Category="Ability")
|
|
|
+ bool ActivateAbility_NoParameter(const UEzAbility* Ability);
|
|
|
+
|
|
|
+ UFUNCTION(BlueprintCallable, Category="Ability")
|
|
|
bool CancelAbility();
|
|
|
-
|
|
|
-
|
|
|
|
|
|
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FAbilityRunStatusChanged, EAbilityRunStatus, RunStatus);
|
|
|
/** Called when the run status of the Ability has changed */
|
|
@@ -40,11 +74,19 @@ public:
|
|
|
FAbilityRunStatusChanged OnAbilityRunStatusChanged;
|
|
|
|
|
|
protected:
|
|
|
- UFUNCTION()
|
|
|
- void OnRep_AbilityInstances();
|
|
|
+ void CacheIsNetSimulated();
|
|
|
+ bool InternalActivateAbility(const UEzAbility* Ability, const FEzAbilityParameter& Parameter);
|
|
|
|
|
|
+ void NotifyAbilityFailed(const UEzAbility* Ability, const FText& Text);
|
|
|
+
|
|
|
+ UFUNCTION()
|
|
|
+ void OnRep_AbilityInstance();
|
|
|
+
|
|
|
+ UFUNCTION()
|
|
|
+ void OnRep_PassiveAbilityInstances();
|
|
|
+
|
|
|
UFUNCTION(Server, reliable, WithValidation)
|
|
|
- void ServerActivateAbility();
|
|
|
+ void ServerActivateAbility(const UEzAbility* Ability, const FEzAbilityParameter& Parameter);
|
|
|
|
|
|
UFUNCTION(Client, reliable)
|
|
|
void ClientActivateAbility();
|
|
@@ -60,11 +102,21 @@ protected:
|
|
|
|
|
|
UFUNCTION(Client, reliable)
|
|
|
void ClientCancelAbility();
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
protected:
|
|
|
+ UPROPERTY(EditAnywhere, Category="Ability")
|
|
|
+ TScriptInterface<IEzAbilitySettingInterface> SettingInterface;
|
|
|
+
|
|
|
UPROPERTY(BlueprintReadOnly, Transient, Category="Ability")
|
|
|
- FEzAbilityContext AbilityContext;
|
|
|
+ FEzAbilityContext AbilityContext;
|
|
|
+
|
|
|
+ UPROPERTY(BlueprintReadOnly, Transient, Category="Ability", ReplicatedUsing=OnRep_AbilityInstance)
|
|
|
+ FEzAbilityInstance AbilityInstance;
|
|
|
+
|
|
|
+ UPROPERTY(BlueprintReadOnly, Transient, Category="Ability", ReplicatedUsing=OnRep_PassiveAbilityInstances)
|
|
|
+ FEzAbilityInstanceContainer PassiveAbilityInstances;
|
|
|
|
|
|
- UPROPERTY(BlueprintReadOnly, Transient, Category="Ability", ReplicatedUsing=OnRep_AbilityInstances)
|
|
|
- FEzAbilityInstanceContainer AbilityInstances;
|
|
|
+ UPROPERTY()
|
|
|
+ bool bCachedIsNetSimulated;
|
|
|
};
|