/*
	ZBuild.hpp
	Author: James Russell <jcrussell@762studios.com>

	Purpose:	This is the build file that is used to set overall build configuration 
				when building ZEngine projects.  This needs to be on the build path for
				all ZEngine projects.

	Changelog
	2011/12/11 - creation (jcrussell)
*/

#pragma once

#ifndef _ZBUILD_HPP
#define _ZBUILD_HPP

//Current version of ZEngine (overall, not individual lib versions)
#define ZENGINE_CURRENT_VERSION		"0.6.0"

//These should be modified for the game in question
#ifndef COMPANY_NAME
#define COMPANY_NAME				"762Studios"
#endif

#ifndef GAME_NAME
#define GAME_NAME					"762Game"
#endif

/*
The following flags can be enabled / disabled based off of compile type.  Usually enabled as a 1 or 0, but 
some will have additional options.

--- ZRendererUtil ---
#define ZASSERT_RENDERERUTIL			- Enables run-time asserts for renderer util project debugging

--- ZRenderer ---
#define ZASSERT_RENDERER				- Enables run-time asserts for renderer project debugging

#define ZGL_CHECKGL						- Enables the CHECKGL function call to check graphics library state after library calls

--- ZUtil ---
#define ZALLOC_CHECK_ALLOC				- Indicates that ZAlloc should record allocations
#define ZALLOC_EXTRA_SPAMMY				- Indicates that ZAlloc should log all allocations 

#define ZASSERT_DISABLE					- Disables run-time asserts for debugging purposes
#define ZASSERT_UTIL_ENABLE				- Enables run-time asserts for util project debugging

#define ZLOG_LEVEL						- Defined as one of ZLOG_LEVEL_NONE, ZLOG_LEVEL_ERROR, ZLOG_LEVEL_WARNING, ZLOG_LEVEL_DETAILED, or ZLOG_LEVEL_EVERYTHING

#define ZSTL_CHECK_INTEGRITY			- Causes ZSTL containers to check integrity after function calls (uses ZASSERT)
#define ZSTL_CHECK_NAME					- Causes ZName to ensure no hash collision has occurred
#define ZSTL_DISABLE_RUNTIME_CHECKS		- Causes ZSTL containers to no longer do runtime bounds and error checking (ballsy)
*/

//Engine Debug version engine flags
#ifdef _DEBUGENG

	#define ZALLOC_CHECK_ALLOC 1
	#define ZALLOC_EXTRA_SPAMMY 0

	#define ZASSERT_ENABLE 1
	#define ZASSERT_UTIL_ENABLE 1
	#define ZASSERT_RENDERER_ENABLE 1

	#define ZRENDERER_CHECKGL 1

	#define ZLOG_LEVEL ZLOG_LEVEL_SPAM

	#define ZSTL_CHECK_INTEGRITY 1
	#define ZSTL_CHECK_NAME 1
	#define ZSTL_DISABLE_RUNTIME_CHECKS 0

#endif //_DEBUGENG

//Debug version engine flags
#ifdef _DEBUG

	#define ZALLOC_CHECK_ALLOC 1
	#define ZALLOC_EXTRA_SPAMMY 0

	#define ZASSERT_ENABLE 1
	#define ZASSERT_UTIL_ENABLE 1
	#define ZASSERT_RENDERER_ENABLE 0

	#define ZLOG_LEVEL ZLOG_LEVEL_INFO

	#define ZRENDERER_CHECKGL 1

	#define ZSTL_CHECK_INTEGRITY 1
	#define ZSTL_CHECK_NAME 1
	#define ZSTL_DISABLE_RUNTIME_CHECKS 0

#endif //_DEBUG

//Dev version engine flags
#ifdef _DEV

	#define ZALLOC_CHECK_ALLOC 0
	#define ZALLOC_EXTRA_SPAMMY 0

	#define ZASSERT_ENABLE 1
	#define ZASSERT_UTIL_ENABLE 0
	#define ZASSERT_RENDERER_ENABLE 0

	#define ZRENDERER_CHECKGL 0

	#define ZLOG_LEVEL ZLOG_LEVEL_WARNING

	#define ZSTL_CHECK_INTEGRITY 0
	#define ZSTL_CHECK_NAME 0
	#define ZSTL_DISABLE_RUNTIME_CHECKS 0

#endif //_DEV

//Release version engine flags
#ifdef _RELEASE

	#define ZALLOC_CHECK_ALLOC 0
	#define ZALLOC_EXTRA_SPAMMY 0

	#define ZASSERT_ENABLE 0
	#define ZASSERT_UTIL_ENABLE 0
	#define ZASSERT_RENDERER_ENABLE 0

	#define ZRENDERER_CHECKGL 0

	#define ZLOG_LEVEL ZLOG_LEVEL_WARNING

	#define ZSTL_CHECK_INTEGRITY 0
	#define ZSTL_CHECK_NAME 0
	#define ZSTL_DISABLE_RUNTIME_CHECKS 1

#endif //_RELEASE

#endif
 
