Тактический отряд с автоматическим огнём в изометрии, собственный софтверный растеризатор (raylib только окно, ввод и финальный блит). Ядро (спек, раздел 6): - LaneClear: проверка линии огня по своим, стенам и дальности; - решатель огневых позиций с гистерезисом и коммитом; - резервирование линий огня и расступание из чужих секторов; - пули-снаряды, дружественный урон физически возможен. Хоррор-слой (render-only): свет и туман войны с памятью карты, светящиеся трассеры, кровь, виньетка, зерно, напряжение. Ближний бой: сектор удара, три фазы, связка из трёх ударов, своя дисциплина «не бить сквозь своего». Проверка: squad_proto.exe --accept прогоняет критерии приёмки раздела 11 плюс блок M7 по ближнему бою — все PASS, FRIENDLY_HITS = 0 за 3 минуты боя. Сборка: cmake -S . -B build && cmake --build build --config Release raylib 6.0 подтягивается через FetchContent. Документация — CLAUDE.md как оглавление, содержание в docs/. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
54 lines
2.1 KiB
CMake
54 lines
2.1 KiB
CMake
cmake_minimum_required(VERSION 3.16)
|
|
project(squad_proto CXX)
|
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# raylib: системная, иначе выкачиваем 6.0 через FetchContent
|
|
# ---------------------------------------------------------------------------
|
|
find_package(raylib 6 QUIET)
|
|
|
|
if(NOT raylib_FOUND)
|
|
include(FetchContent)
|
|
set(BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
|
|
set(BUILD_GAMES OFF CACHE BOOL "" FORCE)
|
|
set(CUSTOMIZE_BUILD OFF CACHE BOOL "" FORCE)
|
|
FetchContent_Declare(
|
|
raylib
|
|
URL https://github.com/raysan5/raylib/archive/refs/tags/6.0.tar.gz
|
|
DOWNLOAD_EXTRACT_TIMESTAMP TRUE # CMP0135: иначе CMake ругается на таймстемпы
|
|
)
|
|
FetchContent_MakeAvailable(raylib)
|
|
endif()
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Исходники
|
|
# ---------------------------------------------------------------------------
|
|
file(GLOB_RECURSE SQUAD_SOURCES CONFIGURE_DEPENDS
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp")
|
|
|
|
add_executable(squad_proto ${SQUAD_SOURCES})
|
|
|
|
target_include_directories(squad_proto PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/src")
|
|
target_link_libraries(squad_proto PRIVATE raylib)
|
|
|
|
if(MSVC)
|
|
target_compile_options(squad_proto PRIVATE /W4 /utf-8 /permissive-)
|
|
else()
|
|
target_compile_options(squad_proto PRIVATE -Wall -Wextra)
|
|
endif()
|
|
|
|
if(WIN32)
|
|
target_link_libraries(squad_proto PRIVATE winmm)
|
|
endif()
|
|
|
|
# Единый каталог для бинарника при любом генераторе (VS/Ninja/Makefiles)
|
|
set_target_properties(squad_proto PROPERTIES
|
|
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
|
|
RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/bin"
|
|
RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/bin"
|
|
RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_BINARY_DIR}/bin"
|
|
RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL "${CMAKE_BINARY_DIR}/bin")
|