Skip to content

Fast match viewer with rewinding support for Russian AI Cup championship series

License

Notifications You must be signed in to change notification settings

kswaldemar/rewind-viewer

Repository files navigation

Rewind viewer

MIT License C++ standard OpenGL RAIC Build status Linux Windows GitHub Releases

Fast Russain AI Cup championship match viewer with rewinding support written in OpenGL

Overview

The viewer has several advantages in comparison of local-runner with drawing plugin:

  • All figures are drawn using your video adapter, so no more problems with slow drawing
  • Rewinding - ability to navigate between game tick
  • In Pause navigation - zoom and navigate in any game state
  • Handy mouse navigation

Drawbacks:

  • Viewer running as standalone application, it knows nothing about local runner or your strategy, so you need manually send all data (like buildings, units etc.) and you can draw only data visible by your strategy
  • In theory, high memory usage, because it needs to store all drawing primitives for rewinding support

Binaries

Source code with changelog for significant releases can be found in github releases page.

Prebuilt windows binaries for other version, such as bugfixes can be found here. It is required to have x86 C++ Redistributable for Visual Studio 2015 installed to run prebuild windows binaries.

Build

Clone repository with submodules:

git clone --recursive https://github.com/kswaldemar/rewind-viewer.git

Unix, MacOS:

mkdir build && cd build
cmake --CMAKE_BUILD_TYPE=Release ..
cmake --build .

Windows:

mkdir build && cd build
cmake ..
cmake --build . --config Release

Note: Compiler with c++14 support needed. That means Visual Studio 2015 or higher on Windows.

⚠️ Note: Viewer should be launched from the same folder, where resources is located. So you need to manually copy resources to build folder, or copy executable to project root directory.

Strategy integration

Strategy should send commands in json format via socket. You may use one from clients folder or implement your own.

⚠️ Json protocol starting from release 2.0 doesn't compatible with older clients (from 1.3 and below). Check that your client is updated.

Sample usage:

  1. Start the viewer.
  2. Start localrunner, preferably in render_to_screen=false mode.
  3. Start your strategy.
  4. To be able to drew things in the viewer you will need to create a client, send data to the client in your strategy, and end the frame with client command.
  5. There is no need to close the viewer after the strategy is done, just start from step 2. Old drawn data will be cleaned after new connection.

Create client four your language

You can use Python3 client as a reference.

Documentation for json protocol can be found here.

License

Project sources distributed under MIT license, third parties distributed under their own licences

Credits

Project created with help of many great libraries:

  • glad for loading OpenGL functions
  • glm math library for OpenGL
  • glfw for creating window and crossplatform context handling
  • ImGui for UI widgets inside application
  • nlohmann json for json operating
  • csimplesocket for network interaction
  • stb_image for images processing
  • loguru for logging support

Resources: