// Project Sword & Gun Copyright © 2021 Kevin Poretti

#pragma once

#include "CoreMinimal.h"

#include "SwordNGun/SNGTypes.h"
#include "UObject/Interface.h"
#include "SNGEventProcessorInterface.generated.h"

// This class does not need to be modified.
UINTERFACE(MinimalAPI, BlueprintType)
class USNGEventProcessorInterface : public UInterface
{
	GENERATED_BODY()
};

/**
 *	Interface for anything that may consume and respond to SNGEvents like character commands or damage events.
 */
class SWORDNGUN_API ISNGEventProcessorInterface
{
	GENERATED_BODY()

	// Add interface functions to this class. This is the class that will be inherited to implement this interface.
public:

	/**
	 *	This function will be called by anything that wants to send a message to the implementer of this abstract function.
	 *
	 *	For example, this could be a controller sending a command to a pawn to perform some action based off of input or
	 *	AI behaviour decisions. This could also be something like a weapon informing a pawn that it has been damaged by it.
	 *
	 *	@param Event the event being pushed to the implementer to be consumed and processed 
	 */
	virtual void PushEvent(FSNGEvent Event)=0;
};
