cmake_minimum_required(VERSION 3.12)
project(wolf2009_gameplay LANGUAGES C CXX)
set(WOLF2009_MINIZ_SOURCE_DIR "" CACHE PATH "Optional miniz compression backend")
set(WOLF2009_EMPTY_MPK "" CACHE FILEPATH "Optional user's original empty.mpk, read-only")
set(WOLF2009_TRAINYARD_MPK "" CACHE FILEPATH "Optional user's original trainyard.mpk, read-only")
set(WOLF2009_WAREHOUSE_MPK "" CACHE FILEPATH "Optional user's original mtw_ware.mpk, read-only")
if(WOLF2009_MINIZ_SOURCE_DIR)
    add_library(wolf2009_gameplay_compression STATIC "${WOLF2009_MINIZ_SOURCE_DIR}/miniz.c")
    target_include_directories(wolf2009_gameplay_compression PUBLIC "${WOLF2009_MINIZ_SOURCE_DIR}")
    target_compile_definitions(wolf2009_gameplay_compression PUBLIC WOLF2009_USE_MINIZ)
    set(compression wolf2009_gameplay_compression)
else()
    find_package(ZLIB REQUIRED)
    set(compression ZLIB::ZLIB)
endif()
set(core "${CMAKE_CURRENT_SOURCE_DIR}/../wolf2009")
add_library(wolf2009_gameplay_map STATIC GameplayMap.cpp GameplayFixture.cpp NativeCollisionMesh.cpp
    "${core}/Archive.cpp" "${core}/Entities.cpp" "${core}/PlayerStart.cpp"
    "${core}/StaticCollision.cpp" "${core}/MapPhysics.cpp")
target_include_directories(wolf2009_gameplay_map PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}" "${core}")
target_compile_features(wolf2009_gameplay_map PUBLIC cxx_std_11)
target_link_libraries(wolf2009_gameplay_map PUBLIC ${compression})
add_executable(wolf2009-gameplay-map ExportGameplayMap.cpp)
target_link_libraries(wolf2009-gameplay-map PRIVATE wolf2009_gameplay_map)
add_executable(wolf2009-gameplay-test GameplayMapTest.cpp)
target_link_libraries(wolf2009-gameplay-test PRIVATE wolf2009_gameplay_map)
add_executable(wolf2009-collision-coverage CollisionCoverage.cpp)
target_link_libraries(wolf2009-collision-coverage PRIVATE wolf2009_gameplay_map)
add_library(wolf2009_world_collision_geometry STATIC "${core}/WorldCollisionGeometry.cpp")
target_sources(wolf2009_world_collision_geometry PRIVATE "${core}/HavokTriangleMesh.cpp" "${core}/WorldTriangleGeometry.cpp")
target_include_directories(wolf2009_world_collision_geometry PUBLIC "${core}")
target_compile_features(wolf2009_world_collision_geometry PUBLIC cxx_std_11)
add_executable(wolf2009-world-collision-test WorldCollisionGeometryTest.cpp)
target_link_libraries(wolf2009-world-collision-test PRIVATE wolf2009_world_collision_geometry wolf2009_gameplay_map)
enable_testing()
add_test(NAME wolf2009_gameplay_map COMMAND wolf2009-gameplay-test)
add_executable(wolf2009-native-collision-mesh-test NativeCollisionMeshTest.cpp)
target_link_libraries(wolf2009-native-collision-mesh-test PRIVATE wolf2009_gameplay_map)
add_test(NAME wolf2009_native_collision_mesh COMMAND wolf2009-native-collision-mesh-test)
add_test(NAME wolf2009_world_collision_geometry COMMAND wolf2009-world-collision-test)
add_executable(wolf2009-world-triangles-test ../../tests/WorldTriangleGeometry.cpp)
target_link_libraries(wolf2009-world-triangles-test PRIVATE wolf2009_world_collision_geometry wolf2009_gameplay_map)
add_test(NAME wolf2009_world_triangles_geometry COMMAND wolf2009-world-triangles-test)
add_executable(wolf2009-world-material-profile-test WorldCollisionMaterialProfileTest.cpp)
target_link_libraries(wolf2009-world-material-profile-test PRIVATE wolf2009_world_collision_geometry wolf2009_gameplay_map)
add_test(NAME wolf2009_world_material_profile COMMAND wolf2009-world-material-profile-test)
if(WOLF2009_EMPTY_MPK)
    add_test(NAME wolf2009_gameplay_empty_data COMMAND wolf2009-gameplay-test "${WOLF2009_EMPTY_MPK}")
endif()
if(WOLF2009_TRAINYARD_MPK)
    add_test(NAME wolf2009_world_collision_trainyard COMMAND wolf2009-world-collision-test "${WOLF2009_TRAINYARD_MPK}")
endif()
if(WOLF2009_WAREHOUSE_MPK)
    add_test(NAME wolf2009_world_collision_warehouse COMMAND wolf2009-world-collision-test "${WOLF2009_WAREHOUSE_MPK}")
endif()
