5#include "CoreMinimal.h"
22#define LOG_CALL_INFO (FString(__FUNCTION__) + TEXT(": ") + FString::FromInt(__LINE__))
25#define LOG_CLASS (FString(__FUNCTION__).Left(FString(__FUNCTION__).Find(TEXT("::"))))
30#define NAMEOF(Type) ([]{ (void)sizeof(Type); return TEXT(#Type); }())
34#define NAMEOF_VAR(Expr) ((void)sizeof(Expr), TEXT(#Expr))
38#define LOG_INFO(Category, Format, ...) UE_LOG(Category, Log, TEXT("[%s]: %s"), *LOG_CALL_INFO, *FString::Printf(TEXT(Format), ##__VA_ARGS__))
39#define LOG_WARNING(Category, Format, ...) UE_LOG(Category, Warning, TEXT("[%s]: %s"), *LOG_CALL_INFO, *FString::Printf(TEXT(Format), ##__VA_ARGS__))
40#define LOG_ERROR(Category, Format, ...) UE_LOG(Category, Error, TEXT("[%s]: %s"), *LOG_CALL_INFO, *FString::Printf(TEXT(Format), ##__VA_ARGS__))
43#define LOG_CLASS_INFO(Category, Format, ...) UE_LOG(Category, Log, TEXT("%s: ") TEXT(Format), *LOG_CLASS, ##__VA_ARGS__)
44#define LOG_CLASS_WARNING(Category, Format, ...) UE_LOG(Category, Warning, TEXT("%s: ") TEXT(Format), *LOG_CLASS, ##__VA_ARGS__)
45#define LOG_CLASS_ERROR(Category, Format, ...) UE_LOG(Category, Error, TEXT("%s: ") TEXT(Format), *LOG_CLASS, ##__VA_ARGS__)
49#define LOG_SCREEN_C(Color, Format, ...) do { if (GEngine) GEngine->AddOnScreenDebugMessage(-1, 5.f, Color, FString::Printf(TEXT(Format), ##__VA_ARGS__)); } while(0)
50#define LOG_SCREEN(Format, ...) do { if (GEngine) GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Green, FString::Printf(TEXT(Format), ##__VA_ARGS__)); } while(0)
51#define LOG_SCREEN_ERROR(Format, ...) do { if (GEngine) GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT(Format), ##__VA_ARGS__)); } while(0)
52#define LOG_SCREEN_WARNING(Format, ...) do { if (GEngine) GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Yellow, FString::Printf(TEXT(Format), ##__VA_ARGS__)); } while(0)
DECLARE_LOG_CATEGORY_EXTERN(LogCK, Log, All)