set(GAME_NAME TestGame)

set(CMAKE_CXX_STANDARD 20)

file(GLOB_RECURSE SRC "*.cpp" "*.c" "*.h" "*.hpp" "*.res" "*.world" "*.conf")

add_executable(${GAME_NAME} ${SRC})
target_link_libraries(${GAME_NAME} PRIVATE Core)
target_include_directories(${GAME_NAME} PRIVATE
	${PROJECT_SOURCE_DIR}/Core
	${PROJECT_SOURCE_DIR}/FastRTTI
	${PROJECT_SOURCE_DIR}/Delegate
)

if(MSVC)
    set(OUTPUT_PATH ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$<CONFIG>)
else()
    set(OUTPUT_PATH ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
endif()

add_custom_command(
    TARGET ${GAME_NAME}
    POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy_if_different
            ${CMAKE_CURRENT_SOURCE_DIR}/main_config.conf
            ${OUTPUT_PATH}/main_config.conf
            COMMENT "Copying main config file"
)

	
add_custom_command(
    TARGET ${GAME_NAME}
    POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy_directory
            ${CMAKE_CURRENT_SOURCE_DIR}/Worlds
            ${OUTPUT_PATH}/Worlds
            COMMENT "Copying Worlds directory"
)

add_custom_command(
    TARGET ${GAME_NAME}
    POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy_directory
            ${CMAKE_CURRENT_SOURCE_DIR}/Resources
            ${OUTPUT_PATH}/Resources
            COMMENT "Copying Resources directory"
)

add_custom_command(
    TARGET ${GAME_NAME}
    PRE_BUILD
    COMMAND ${CMAKE_COMMAND} -E make_directory ${OUTPUT_PATH}/Shaders
    COMMENT "Creating Shaders directory"
)

add_custom_command(
    TARGET ${GAME_NAME}
    POST_BUILD
    COMMAND $ENV{VULKAN_SDK}/Bin/glslc.exe
            ${CMAKE_CURRENT_SOURCE_DIR}/Shaders/vertex.vert
            -o ${OUTPUT_PATH}/Shaders/vertex.spv
    COMMENT "Building vertex shader"
)

add_custom_command(
    TARGET ${GAME_NAME}
    POST_BUILD
    COMMAND $ENV{VULKAN_SDK}/Bin/glslc.exe
            ${CMAKE_CURRENT_SOURCE_DIR}/Shaders/fragment.frag
            -o ${OUTPUT_PATH}/Shaders/fragment.spv
    COMMENT "Building fragment shader"
)
