#pragma once
#include "Networking/GasaNetLibrary.h"
#include "GameFramework/Actor.h"

#include "GasaActor.generated.h"

UCLASS()
class GASA_API AGasaActor : public AActor
{
	GENERATED_BODY()
public:
#pragma region NetSlime
	// NetSlime interface is generated by GasaGen/GasaGen_NetSlime.cpp
	FORCEINLINE ENetworkMode GetNetworkMode() const { return Gasa::GetNetworkMode( this ); }
	FORCEINLINE bool IsClient()               const { return Gasa::IsClient( this ); }
	FORCEINLINE bool IsListenServer()         const { return Gasa::IsListenServer( this ); }
	FORCEINLINE bool IsNetOwner()             const { return Gasa::IsNetOwner( this ); }
	FORCEINLINE bool IsServer()               const { return Gasa::IsServer( this ); }
	FORCEINLINE bool IsSimulatedProxy()       const { return Gasa::IsSimulatedProxy( this ); }
	FORCEINLINE void NetLog(
	    FString           Message,
	    EGasaVerbosity    Verbosity = EGasaVerbosity::Log,
	    FLogCategoryBase& Category  = LogGasaNet,
	    bool              DumpStack = false,
	    int32             Line      = __builtin_LINE(),
	    ANSICHAR const*   File      = __builtin_FILE(),
	    ANSICHAR const*   Func      = __builtin_FUNCTION()
	)
	{
		Gasa::NetLog( this, Message, Verbosity, Category, DumpStack, Line, File, Func );
	}
#pragma endregion NetSlime
};
