#pragma once

#ifdef NH_PLATFORM_WINDOWS
#if HZ_DYNAMIC_LINK
	#ifdef NH_BUILD_DLL
		#define NH_API __declspec(dllexport)
	#else
		#define NH_API __declspec(dllimport)
	#endif // HZ_BUILD_DLL
#else
	#define NH_API
#endif
#else
	#error NEIGHBORHOOD only Support Windows!
#endif // NG_PLATFORM_WINDOWS


#ifdef NH_DEBUG
	#define NH_ENABLE_ASSERTS
#endif // NH_DEBUG


#ifdef NH_ENABLE_ASSERTS
	#define NH_ASSERT(x, ...) { if(!(x)) { NH_ERROR("Assertion Failed: {0}", __VA_ARGS__); __debugbreak(); } }
	#define NH_CORE_ASSERT(x, ...) { if(!(x)) { NH_CORE_ERROR("Assertion Failed: {0}", __VA_ARGS__); __debugbreak(); } }
#else
	#define NH_ASSERT(x, ...)
	#define NH_CORE_ASSERT(x, ...)
#endif // NH_ENABLE_ASSERTS



#define BIT(x) (1 << x)



#define NH_BIND_EVENT_FN(fn) std::bind(&fn, this, std::placeholders::_1)