Add machine workshop, typed logic, mechanics and sensor-driven ECUs

This commit is contained in:
max
2026-11-02 07:27:13 +01:00
parent eb2b6366c2
commit abfcce0f46
99 changed files with 28835 additions and 145 deletions

View File

@@ -8,6 +8,7 @@ add_library(fluidsim_core
src/engine_config.cpp
src/carburetor.cpp
src/ecu.cpp
src/fuel_injector.cpp
src/engine.cpp
src/crankcase.cpp
src/two_stroke_cylinder.cpp
@@ -21,6 +22,19 @@ add_library(fluidsim_core
src/scenario_snapshot.cpp
src/scenario_geometry.cpp
src/physical_geometry.cpp
src/machine.cpp
src/machine_ports.cpp
src/mechanics.cpp
src/machine_mechanics.cpp
src/machine_sensors.cpp
src/machine_logic.cpp
src/logic_runtime.cpp
src/logic_serialization.cpp
src/logic_assembly.cpp
src/logic_example.cpp
src/speed_density_example.cpp
src/machine_simulation.cpp
src/machine_import.cpp
src/solver.cpp
src/vehicle.cpp
src/simulation_ring_buffer.cpp
@@ -49,6 +63,8 @@ add_executable(fluidsim_parity_trace tools/parity_trace.cpp)
target_link_libraries(fluidsim_parity_trace PRIVATE fluidsim_core)
add_executable(fluidsim_migrate_geometry tools/migrate_geometry.cpp)
target_link_libraries(fluidsim_migrate_geometry PRIVATE fluidsim_core)
add_executable(fluidsim_machine_benchmark tools/machine_benchmark.cpp)
target_link_libraries(fluidsim_machine_benchmark PRIVATE fluidsim_core)
if(FLUIDSIM_BUILD_DESKTOP)
find_package(SFML 3.0.2 COMPONENTS Graphics Audio QUIET)
@@ -72,15 +88,22 @@ if(FLUIDSIM_BUILD_DESKTOP)
endif()
find_package(OpenGL REQUIRED)
add_library(fluidsim_desktop_rendering
src/desktop_ui.cpp src/scenario_menu.cpp src/engine_schematic.cpp src/engine_renderer_3d.cpp src/dyno_renderer.cpp)
target_link_libraries(fluidsim_desktop_rendering PUBLIC fluidsim_core SFML::Graphics OpenGL::GL)
src/desktop_ui.cpp src/scenario_menu.cpp src/engine_schematic.cpp src/engine_renderer_3d.cpp src/dyno_renderer.cpp
src/machine_builder.cpp src/builder_geometry.cpp src/machine_renderer_3d.cpp src/window_presentation.cpp src/logic_editor.cpp
src/audio_output_stream.cpp src/sound_engine.cpp)
target_link_libraries(fluidsim_desktop_rendering PUBLIC fluidsim_core SFML::Graphics SFML::Audio OpenGL::GL)
if(WIN32)
target_link_libraries(fluidsim_desktop_rendering PRIVATE user32)
endif()
if(MSVC)
target_compile_options(fluidsim_desktop_rendering PRIVATE /W4 /permissive-)
else()
target_compile_options(fluidsim_desktop_rendering PRIVATE -Wall -Wextra -Wpedantic)
endif()
add_executable(fluidsim_desktop src/desktop_main.cpp src/audio_output_stream.cpp src/sound_engine.cpp)
add_executable(fluidsim_desktop src/desktop_main.cpp)
target_link_libraries(fluidsim_desktop PRIVATE fluidsim_desktop_rendering SFML::Audio)
add_executable(fluidsim_machine_render_benchmark tools/machine_render_benchmark.cpp)
target_link_libraries(fluidsim_machine_render_benchmark PRIVATE fluidsim_desktop_rendering)
if(MSVC)
target_compile_options(fluidsim_desktop PRIVATE /W4 /permissive-)
else()
@@ -117,6 +140,34 @@ endif()
include(CTest)
if(BUILD_TESTING)
add_executable(fluidsim_speed_density_tests tests/speed_density_tests.cpp)
target_link_libraries(fluidsim_speed_density_tests PRIVATE fluidsim_core)
add_test(NAME fluidsim_speed_density_tests COMMAND fluidsim_speed_density_tests)
add_executable(fluidsim_sensor_ecu_tests tests/sensor_ecu_tests.cpp)
target_link_libraries(fluidsim_sensor_ecu_tests PRIVATE fluidsim_core)
add_test(NAME fluidsim_sensor_ecu_tests COMMAND fluidsim_sensor_ecu_tests)
add_executable(fluidsim_logic_tests tests/logic_tests.cpp)
target_link_libraries(fluidsim_logic_tests PRIVATE fluidsim_core)
add_test(NAME fluidsim_logic_tests COMMAND fluidsim_logic_tests)
add_executable(fluidsim_machine_logic_tests tests/machine_logic_tests.cpp)
target_link_libraries(fluidsim_machine_logic_tests PRIVATE fluidsim_core)
add_test(NAME fluidsim_machine_logic_tests COMMAND fluidsim_machine_logic_tests)
add_executable(fluidsim_machine_tests tests/machine_tests.cpp)
target_link_libraries(fluidsim_machine_tests PRIVATE fluidsim_core)
add_test(NAME fluidsim_machine_tests COMMAND fluidsim_machine_tests)
add_executable(fluidsim_machine_sensor_tests tests/machine_sensor_tests.cpp)
target_link_libraries(fluidsim_machine_sensor_tests PRIVATE fluidsim_core)
target_compile_definitions(fluidsim_machine_sensor_tests PRIVATE FLUIDSIM_SENSOR_EXAMPLE_FILE="${CMAKE_CURRENT_SOURCE_DIR}/machines/sensor-bench.machine.toml")
add_test(NAME fluidsim_machine_sensor_tests COMMAND fluidsim_machine_sensor_tests)
add_executable(fluidsim_machine_port_tests tests/machine_port_tests.cpp)
target_link_libraries(fluidsim_machine_port_tests PRIVATE fluidsim_core)
add_test(NAME fluidsim_machine_port_tests COMMAND fluidsim_machine_port_tests)
add_executable(fluidsim_mechanics_tests tests/mechanics_tests.cpp)
target_link_libraries(fluidsim_mechanics_tests PRIVATE fluidsim_core)
add_test(NAME fluidsim_mechanics_tests COMMAND fluidsim_mechanics_tests)
add_executable(fluidsim_machine_mechanics_tests tests/machine_mechanics_tests.cpp)
target_link_libraries(fluidsim_machine_mechanics_tests PRIVATE fluidsim_core)
add_test(NAME fluidsim_machine_mechanics_tests COMMAND fluidsim_machine_mechanics_tests)
add_executable(fluidsim_physical_geometry_tests tests/physical_geometry_tests.cpp)
target_link_libraries(fluidsim_physical_geometry_tests PRIVATE fluidsim_core)
target_include_directories(fluidsim_physical_geometry_tests SYSTEM PRIVATE third_party/tomlplusplus)
@@ -138,6 +189,16 @@ if(BUILD_TESTING)
add_test(NAME fluidsim_scenario_examples COMMAND fluidsim_scenario_examples)
endif()
if(BUILD_TESTING AND FLUIDSIM_BUILD_DESKTOP)
add_executable(fluidsim_logic_editor_tests tests/logic_editor_tests.cpp)
target_link_libraries(fluidsim_logic_editor_tests PRIVATE fluidsim_desktop_rendering)
add_test(NAME fluidsim_logic_editor_tests COMMAND fluidsim_logic_editor_tests)
add_executable(fluidsim_menu_tests tests/menu_tests.cpp)
target_link_libraries(fluidsim_menu_tests PRIVATE fluidsim_desktop_rendering)
add_test(NAME fluidsim_menu_tests COMMAND fluidsim_menu_tests)
add_test(NAME fluidsim_window_tests COMMAND fluidsim_menu_tests --window-check)
add_executable(fluidsim_machine_builder_tests tests/machine_builder_tests.cpp)
target_link_libraries(fluidsim_machine_builder_tests PRIVATE fluidsim_desktop_rendering)
add_test(NAME fluidsim_machine_builder_tests COMMAND fluidsim_machine_builder_tests)
add_executable(fluidsim_desktop_ui_tests tests/desktop_ui_tests.cpp)
target_link_libraries(fluidsim_desktop_ui_tests PRIVATE fluidsim_desktop_rendering)
add_test(NAME fluidsim_desktop_ui_tests COMMAND fluidsim_desktop_ui_tests)