cmake_minimum_required(VERSION 3.16) project(ShadowOverBishkekDemo LANGUAGES C CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # Опция для интеграции Steamworks SDK (по умолчанию выключена) option(STEAMSDK "Enable Steamworks SDK integration" OFF) include(${CMAKE_CURRENT_SOURCE_DIR}/../cmake/ThirdParty.cmake) # =========================================== # Основной проект ShadowOverBishkekDemo # =========================================== add_executable(ShadowOverBishkekDemo WIN32 ../src/main.cpp ../src/Game.cpp ../src/Game.h ../src/Character.cpp ../src/Character.h ../src/CharacterState.cpp ../src/CharacterState.h ../src/Environment.cpp ../src/Environment.h ../src/Localization.cpp ../src/Localization.h ../src/render/Renderer.cpp ../src/render/Renderer.h ../src/render/ShaderManager.cpp ../src/render/ShaderManager.h ../src/render/TextureManager.cpp ../src/render/TextureManager.h ../src/TextModel.cpp ../src/TextModel.h ../src/AudioPlayerAsync.cpp ../src/AudioPlayerAsync.h ../src/BoneAnimatedModelNew.cpp ../src/BoneAnimatedModelNew.h ../src/render/OpenGlExtensions.cpp ../src/render/OpenGlExtensions.h ../src/utils/Utils.cpp ../src/utils/Utils.h ../src/SparkEmitter.cpp ../src/SparkEmitter.h ../src/TeleportZone.h ../src/TeleportZone.cpp ../src/utils/TaskManager.cpp ../src/utils/TaskManager.h ../src/render/FrameBuffer.cpp ../src/render/FrameBuffer.h ../src/render/ShadowMap.cpp ../src/render/ShadowMap.h ../src/UiManager.cpp ../src/UiManager.h ../src/render/TextRenderer.h ../src/render/TextRenderer.cpp ../src/MenuManager.h ../src/MenuManager.cpp ../src/Location.h ../src/Location.cpp ../src/LocationState.h ../src/LocationState.cpp ../src/LocationEditor.h ../src/LocationEditor.cpp ../src/NpcCar.h ../src/NpcCar.cpp ../src/GameConstants.h ../src/GameConstants.cpp ../src/GameState.h ../src/GameState.cpp ../src/ScriptEngine.h ../src/ScriptEngine.cpp ../src/navigation/PathFinder.h ../src/navigation/PathFinder.cpp ../src/items/GameObjectLoader.h ../src/items/GameObjectLoader.cpp ../src/items/Item.h ../src/items/Item.cpp ../src/items/ItemRegistry.h ../src/items/ItemRegistry.cpp ../src/items/InteractiveObject.h ../src/items/InteractiveObject.cpp ../src/items/InteractiveObjectState.h ../src/dialogue/DialogueTypes.h ../src/dialogue/DialogueDatabase.h ../src/dialogue/DialogueDatabase.cpp ../src/dialogue/DialogueRuntime.h ../src/dialogue/DialogueRuntime.cpp ../src/dialogue/DialogueOverlay.h ../src/dialogue/DialogueOverlay.cpp ../src/dialogue/DialogueSystem.h ../src/dialogue/DialogueSystem.cpp ../src/dialogue/TranslationDatabase.h ../src/dialogue/TranslationDatabase.cpp ../src/quest/QuestTypes.h ../src/quest/QuestJournal.h ../src/quest/QuestJournal.cpp ../src/cutscene/CutsceneTypes.h ../src/cutscene/CutsceneDatabase.h ../src/cutscene/CutsceneDatabase.cpp ../src/cutscene/CutsceneRuntime.h ../src/cutscene/CutsceneRuntime.cpp ../src/cutscene/CutsceneOverlay.h ../src/cutscene/CutsceneOverlay.cpp ../src/render/UiQuad.h app.rc ) # Установка проекта по умолчанию для Visual Studio set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT ShadowOverBishkekDemo) # include-пути проекта target_include_directories(ShadowOverBishkekDemo PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../src" ) set_target_properties(ShadowOverBishkekDemo PROPERTIES OUTPUT_NAME "ShadowOverBishkekDemo" ) # Определения препроцессора target_compile_definitions(ShadowOverBishkekDemo PRIVATE WIN32_LEAN_AND_MEAN PNG_ENABLED ) # Линкуем с SDL2main, если он вообще установлен target_link_libraries(ShadowOverBishkekDemo PRIVATE SDL2main_external_lib) # Линкуем сторонние библиотеки target_link_libraries(ShadowOverBishkekDemo PRIVATE SDL2_external_lib libpng_external_lib zlib_external_lib libzip_external_lib freetype_external_lib SDL2_ttf_external_lib eigen_external_lib boost_external_lib sol2_external_lib SDL2_mixer_external_lib ) # Линкуем OpenGL (Windows) if(WIN32) target_link_libraries(ShadowOverBishkekDemo PRIVATE opengl32) endif() # =========================================== # Интеграция Steamworks SDK (если STEAMSDK=ON) # =========================================== if(STEAMSDK) message(STATUS "Steamworks SDK integration is ENABLED.") target_compile_definitions(ShadowOverBishkekDemo PRIVATE STEAMSDK) set(STEAM_SDK_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../thirdparty/steamworks_sdk_164/sdk") target_include_directories(ShadowOverBishkekDemo PRIVATE "${STEAM_SDK_DIR}/public" "${STEAM_SDK_DIR}/public/steam" ) if(CMAKE_SIZEOF_VOID_P EQUAL 8) set(STEAM_LIB_DIR "${STEAM_SDK_DIR}/redistributable_bin/win64") set(STEAM_LIB_NAME "steam_api64") set(STEAM_DLL_NAME "steam_api64.dll") else() set(STEAM_LIB_DIR "${STEAM_SDK_DIR}/redistributable_bin") set(STEAM_LIB_NAME "steam_api") set(STEAM_DLL_NAME "steam_api.dll") endif() find_library(STEAM_LIBRARY NAMES ${STEAM_LIB_NAME} PATHS ${STEAM_LIB_DIR} NO_DEFAULT_PATH ) if(STEAM_LIBRARY) target_link_libraries(ShadowOverBishkekDemo PRIVATE ${STEAM_LIBRARY}) message(STATUS "Found Steam API library: ${STEAM_LIBRARY}") else() message(FATAL_ERROR "Steam API library (${STEAM_LIB_NAME}) NOT found in ${STEAM_LIB_DIR}!") endif() file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/steam_appid.txt" "4945840") else() message(STATUS "Steamworks SDK integration is DISABLED.") endif() # =========================================== # Копирование DLL и ресурсов для локального запуска в Visual Studio # =========================================== if (WIN32) set(SDL2_DLL_SRC "$,${SDL2_INSTALL_DIR}/bin/SDL2d.dll,${SDL2_INSTALL_DIR}/bin/SDL2.dll>") set(SDL2_DLL_DST "$,$/SDL2d.dll,$/SDL2.dll>") set(LIBZIP_DLL_SRC "$,${LIBZIP_BASE_DIR}-Debug/bin/zip.dll,${LIBZIP_BASE_DIR}-Release/bin/zip.dll>") set(ZLIB_DLL_SRC "$,${ZLIB_INSTALL_DIR}/bin/zd.dll,${ZLIB_INSTALL_DIR}/bin/z.dll>") set(ZLIB_DLL_DST "$,$/zd.dll,$/z.dll>") set(SDL2TTF_DLL_SRC "$,${SDL2TTF_BASE_DIR}-Debug/bin/SDL2_ttfd.dll,${SDL2TTF_BASE_DIR}-Release/bin/SDL2_ttf.dll>") add_custom_command(TARGET ShadowOverBishkekDemo POST_BUILD COMMAND ${CMAKE_COMMAND} -E echo "Copying DLLs to output folder..." COMMAND ${CMAKE_COMMAND} -E copy_if_different "${SDL2_DLL_SRC}" "${SDL2_DLL_DST}" COMMAND ${CMAKE_COMMAND} -E copy_if_different "${LIBZIP_DLL_SRC}" "$/zip.dll" COMMAND ${CMAKE_COMMAND} -E copy_if_different "${ZLIB_DLL_SRC}" "${ZLIB_DLL_DST}" COMMAND ${CMAKE_COMMAND} -E copy_if_different "${SDL2TTF_DLL_SRC}" "$" COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/../thirdparty/SDL_mixer-release-2.8.0/install-$/bin/SDL2_mixer$<$:d>.dll" "$/SDL2_mixer$<$:d>.dll" ) if(STEAMSDK) add_custom_command(TARGET ShadowOverBishkekDemo POST_BUILD COMMAND ${CMAKE_COMMAND} -E echo "Copying Steam SDK components..." COMMAND ${CMAKE_COMMAND} -E copy_if_different "${STEAM_LIB_DIR}/${STEAM_DLL_NAME}" "$/${STEAM_DLL_NAME}" COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_BINARY_DIR}/steam_appid.txt" "$/steam_appid.txt" COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_BINARY_DIR}/steam_appid.txt" "${CMAKE_BINARY_DIR}/steam_appid.txt" ) endif() endif() # Копирование ресурсов локально set(RUNTIME_RESOURCE_DIRS "resources" "audio") foreach(resdir IN LISTS RUNTIME_RESOURCE_DIRS) add_custom_command(TARGET ShadowOverBishkekDemo POST_BUILD COMMAND ${CMAKE_COMMAND} -E echo "Copying ${resdir} to runtime folders..." COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_SOURCE_DIR}/../${resdir}" "$/${resdir}" COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_SOURCE_DIR}/../${resdir}" "${CMAKE_BINARY_DIR}/${resdir}" ) endforeach() # =========================================== # ПРАВИЛА ИНСТАЛЛЯЦИИ (Для CPack и создания пакетов) # =========================================== # 1. Основной исполняемый файл install(TARGETS ShadowOverBishkekDemo DESTINATION .) # 2. Необходимые DLL if(WIN32) install(FILES "${SDL2_INSTALL_DIR}/bin/SDL2.dll" "${LIBZIP_BASE_DIR}-Release/bin/zip.dll" "${ZLIB_INSTALL_DIR}/bin/z.dll" "${SDL2TTF_BASE_DIR}-Release/bin/SDL2_ttf.dll" "${CMAKE_CURRENT_SOURCE_DIR}/../thirdparty/SDL_mixer-release-2.8.0/install-Release/bin/SDL2_mixer.dll" "${CMAKE_CURRENT_SOURCE_DIR}/dist_dlls/concrt140.dll" "${CMAKE_CURRENT_SOURCE_DIR}/dist_dlls/msvcp140.dll" "${CMAKE_CURRENT_SOURCE_DIR}/dist_dlls/msvcp140_1.dll" "${CMAKE_CURRENT_SOURCE_DIR}/dist_dlls/msvcp140_2.dll" "${CMAKE_CURRENT_SOURCE_DIR}/dist_dlls/msvcp140_atomic_wait.dll" "${CMAKE_CURRENT_SOURCE_DIR}/dist_dlls/msvcp140_clr0400.dll" "${CMAKE_CURRENT_SOURCE_DIR}/dist_dlls/msvcp140_codecvt_ids.dll" "${CMAKE_CURRENT_SOURCE_DIR}/dist_dlls/msvcp140d.dll" "${CMAKE_CURRENT_SOURCE_DIR}/dist_dlls/OpenAL32.dll" "${CMAKE_CURRENT_SOURCE_DIR}/dist_dlls/vcamp140.dll" "${CMAKE_CURRENT_SOURCE_DIR}/dist_dlls/vccorlib140.dll" "${CMAKE_CURRENT_SOURCE_DIR}/dist_dlls/vcomp140.dll" "${CMAKE_CURRENT_SOURCE_DIR}/dist_dlls/vcruntime140.dll" "${CMAKE_CURRENT_SOURCE_DIR}/dist_dlls/vcruntime140_1.dll" "${CMAKE_CURRENT_SOURCE_DIR}/dist_dlls/vcruntime140_1_clr0400.dll" "${CMAKE_CURRENT_SOURCE_DIR}/dist_dlls/vcruntime140_threads.dll" "${CMAKE_CURRENT_SOURCE_DIR}/dist_dlls/wrap_oal.dll" DESTINATION . ) if(STEAMSDK) install(FILES "${STEAM_LIB_DIR}/${STEAM_DLL_NAME}" "${CMAKE_CURRENT_BINARY_DIR}/steam_appid.txt" DESTINATION . ) endif() endif() # 3. Директории с ресурсами foreach(resdir IN LISTS RUNTIME_RESOURCE_DIRS) install(DIRECTORY "${CMAKE_SOURCE_DIR}/../${resdir}" DESTINATION .) endforeach() # =========================================== # НАСТРОЙКА CPACK (Создание ZIP Portable и NSIS Installer) # =========================================== set(CPACK_PACKAGE_NAME "ShadowOverBishkekDemo") set(CPACK_PACKAGE_VENDOR "Fish Run Games") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Shadow Over Bishkek Demo Version") set(CPACK_PACKAGE_VERSION_MAJOR "1") set(CPACK_PACKAGE_VERSION_MINOR "0") set(CPACK_PACKAGE_VERSION_PATCH "3") set(CPACK_PACKAGE_INSTALL_DIRECTORY "Fish Run Games/Shadow Over Bishkek Demo") set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.txt") # Настройки NSIS инсталлятора set(CPACK_NSIS_DISPLAY_NAME "Shadow Over Bishkek Demo") set(CPACK_NSIS_PACKAGE_NAME "Shadow Over Bishkek Demo") set(CPACK_NSIS_HELP_LINK "https://fishrungames.com/contact.html") set(CPACK_NSIS_URL_INFO_ABOUT "https://shadowoverbishkek.com/") set(CPACK_NSIS_MODIFY_PATH OFF) set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON) # Иконки и ярлыки в меню Пуск и на Рабочем столе set(CPACK_NSIS_MUI_ICON "${CMAKE_CURRENT_SOURCE_DIR}/icon.ico") set(CPACK_NSIS_MUI_UNIICON "${CMAKE_CURRENT_SOURCE_DIR}/icon.ico") set(CPACK_NSIS_CREATE_ICONS_EXTRA "CreateShortCut '$DESKTOP\\\\Shadow Over Bishkek Demo.lnk' '$INSTDIR\\\\ShadowOverBishkekDemo.exe'" ) # Форматы генераторов: ZIP (Portable) и NSIS (Установщик) set(CPACK_GENERATOR "ZIP;NSIS") include(CPack)