// Copyright CodeSpartan, 2022. All rights reserved.

#pragma once

#include "CoreMinimal.h"
#include "UObject/NoExportTypes.h"
#include "AbilityLogic.generated.h"

/**
 * 
 */
class ACharacter;
class AController;
class UAbilityAssetCpp;

UCLASS(Blueprintable, BlueprintType, Abstract, EditInlineNew, HideCategories = ("DoNotShow"), AutoExpandCategories = ("Default"))
class MMOKITCODE_API UAbilityLogic : public UObject
{
	GENERATED_BODY()

public:

	UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = "Ability")
	void FireLocally(AController* MyController, ACharacter* Instigator, UAbilityAssetCpp* AbilityAsset, ACharacter*& OptionalVictim, FTransform& OptionalInstigationTransform, FTransform& OptionalTargetTransform, bool& StopExecute);

	UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = "Ability")
	void FireServer(AController* InstigatorController, ACharacter* Instigator, ACharacter* Victim, UAbilityAssetCpp* AbilityAsset, FTransform IntigationTransform, FTransform TargetTransform, ACharacter*& VictimOut, bool& StopExecute);

	UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = "Ability")
	void FireOwnerOnConfirm(AController* MyController, ACharacter* Instigator, ACharacter* Victim, UAbilityAssetCpp* AbilityAsset, FTransform IntigationTransform, FTransform TargetTransform);

	UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = "Ability")
	void FireOwnerOnDeny(AController* MyController, ACharacter* Instigator, ACharacter* Victim, UAbilityAssetCpp* AbilityAsset, FTransform IntigationTransform, FTransform TargetTransform);

	UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = "Ability")
	void FireClientsExceptOwner(ACharacter* Instigator, ACharacter* Victim, UAbilityAssetCpp* AbilityAsset, FTransform IntigationTransform, FTransform TargetTransform);
};
