add_library(bim_game
  STATIC
  main/src/bim/game/arena.cpp
  main/src/bim/game/cell_neighborhood.cpp
  main/src/bim/game/check_game_over.cpp
  main/src/bim/game/contest.cpp
  main/src/bim/game/contest_result.cpp
  main/src/bim/game/contest_runner.cpp
  main/src/bim/game/contest_timeline.cpp
  main/src/bim/game/contest_timeline_writer.cpp
  main/src/bim/game/dump_arena.cpp
  main/src/bim/game/feature_flags.cpp
  main/src/bim/game/input_archive.cpp
  main/src/bim/game/kick_event.cpp
  main/src/bim/game/level_generation.cpp
  main/src/bim/game/output_archive.cpp
  main/src/bim/game/player_action.cpp
  main/src/bim/game/random_generator.cpp
  main/src/bim/game/tick_counter.cpp

  main/src/bim/game/animation/animation_catalog.cpp

  main/src/bim/game/component/animation_state.cpp
  main/src/bim/game/component/flame_direction.cpp
  main/src/bim/game/component/fractional_position_on_grid.cpp
  main/src/bim/game/component/invisibility_state.cpp
  main/src/bim/game/component/invincibility_state.cpp
  main/src/bim/game/component/player_action_queue.cpp
  main/src/bim/game/component/shield.cpp

  main/src/bim/game/context/fill_context.cpp
  main/src/bim/game/context/player_animations.cpp
  main/src/bim/game/context/register_player_animations.cpp

  main/src/bim/game/factory/arena_reduction.cpp
  main/src/bim/game/factory/bomb.cpp
  main/src/bim/game/factory/brick_wall.cpp
  main/src/bim/game/factory/falling_block.cpp
  main/src/bim/game/factory/flame.cpp
  main/src/bim/game/factory/fog_of_war.cpp
  main/src/bim/game/factory/invincibility_state.cpp
  main/src/bim/game/factory/invisibility_state.cpp
  main/src/bim/game/factory/main_timer.cpp
  main/src/bim/game/factory/player.cpp
  main/src/bim/game/factory/power_up.cpp

  main/src/bim/game/system/animator.cpp
  main/src/bim/game/system/apply_player_action.cpp
  main/src/bim/game/system/arena_reduction.cpp
  main/src/bim/game/system/flame_updater.cpp
  main/src/bim/game/system/fog_of_war_updater.cpp
  main/src/bim/game/system/refresh_bomb_inventory.cpp
  main/src/bim/game/system/remove_dead_objects.cpp
  main/src/bim/game/system/update_bomb_power_ups.cpp
  main/src/bim/game/system/update_bombs.cpp
  main/src/bim/game/system/update_brick_walls.cpp
  main/src/bim/game/system/update_falling_blocks.cpp
  main/src/bim/game/system/update_flame_power_ups.cpp
  main/src/bim/game/system/update_invincibility_state.cpp
  main/src/bim/game/system/update_invisibility_power_ups.cpp
  main/src/bim/game/system/update_invisibility_state.cpp
  main/src/bim/game/system/update_players.cpp
  main/src/bim/game/system/update_power_up_spawners.cpp
  main/src/bim/game/system/update_shields.cpp
  main/src/bim/game/system/update_shield_power_ups.cpp
  main/src/bim/game/system/update_timers.cpp
)
target_include_directories(bim_game PUBLIC main/include)
target_link_libraries(bim_game PUBLIC bim_core iscool_net EnTT::EnTT)

if (NOT BIM_BUILD_TESTS)
  return()
endif()

add_executable(game-tests
  tests/src/bim/game/archive.cpp
  tests/src/bim/game/arena.cpp
  tests/src/bim/game/check_game_over.cpp
  tests/src/bim/game/contest.cpp
  tests/src/bim/game/contest_timeline.cpp
  tests/src/bim/game/level_generation.cpp
  tests/src/bim/game/player_action.cpp

  tests/src/bim/game/component/animation_state.cpp
  tests/src/bim/game/component/flame_direction.cpp
  tests/src/bim/game/component/player_action_queue.cpp

  tests/src/bim/game/factory/power_up.cpp

  tests/src/bim/game/system/animator.cpp
  tests/src/bim/game/system/apply_player_action.cpp
  tests/src/bim/game/system/arena_reduction.cpp
  tests/src/bim/game/system/fog_of_war.cpp
  tests/src/bim/game/system/update_bomb_power_ups.cpp
  tests/src/bim/game/system/update_bombs.cpp
  tests/src/bim/game/system/update_brick_walls.cpp
  tests/src/bim/game/system/update_falling_blocks.cpp
  tests/src/bim/game/system/update_flame_power_ups.cpp
  tests/src/bim/game/system/update_invincibility_state.cpp
  tests/src/bim/game/system/update_invisibility_power_ups.cpp
  tests/src/bim/game/system/update_invisibility_state.cpp
  tests/src/bim/game/system/update_players.cpp
  tests/src/bim/game/system/update_power_up_spawners.cpp
  tests/src/bim/game/system/update_shields.cpp
  tests/src/bim/game/system/update_timers.cpp
)
target_link_libraries(
  game-tests
  PRIVATE
  bim_game
  GTest::gtest
  bim_gtest_main
)
