-
Notifications
You must be signed in to change notification settings - Fork 5
Features
The LEDTableEngine is a flexible C++ framework for linux-based LED-Matrix-Displays that provides a simple programming interfaces to implement almost any kind of (multi-player!) game or visualization technique.
The modular structure enables the support of different types of displays.
- Desktop-Rendering: As simulation environment for easy development of new applications directly on your computer! The Desktop environment is realized by using the SDL2 and SDL2Image libraries for rendering.
- LED-Matrix-Rendering: Supports any kind of LED-Controller (tested with Diamex LED-Player S2) that supports the TPM2-Protocol. Currently only a single LED layout is implemented (see setup instructions), but in the future it could be possible to support multiple arrangements of LED strips.
Similar to the display modules, the system supports different types of input devices.
- USB-Keyboard: Allows you to control your LED matrix with a USB-Keyboard. Currently, keys for two players are supported on a single keyboard.
- Custom I2C-Controllers: The actual Matrix-Table should be controlled by actual game controllers. Therefore I designed, 3D-printed and built two custom controllers with just a single circuit board inside. The instructions and files to build these controllers are listed on Thingiverse. This functionality is only available if you have I2C-tools installed.
- Touch-Input: This feature is NOT implemented but planned for the future! If your LED-Matrix-Table contains IR-LEDs and -Sensors in each cell, the engine could be able to detect objects that cover individual cells. Therefore you have some kind of touch sensitive table which will provide a huge number of new possibilities.
The engine also supports audio output by using the SDL2-Library. Currently only a specific audio format (WAV) with very fixed settings is supported. Have a look at engine/audio.cpp. The engine also supports a few basic settings (brightness, player count) that can be changed via the integrated menu structure.
To give a full overview over the currently implemented applications that are executed in the engine, I wrote a short summary:
- Snake: The basic snake game, but with multi player support! Try to kill other snakes and look for food to grow!
- Pong: A simple Pong implementation that allows player vs. AI or player vs. player matches.
- Tetris: A Tetris implementation with the famous Tetris music and sound effects when placing stones.
- FlappyBird: More of a test implementation than an actual game :)
- Minesweeper: A custom version of minesweeper. Due to the lack of the possibility to draw digits into the cells, the number of bombs around a cell is color coded. The actual color bar is shown on the left and right side of the game field.
- Conway's game of life: This is not an actual game, but shows the life cycle of cells according to conway's rules. The lifespan of each cell is color coded. If the game field gets static, the animation is automatically reset to a new random cell population.
- Fractal visualization: An very basic implementation that renders a fractal with a fixed color map. Due to the low resolution, you can't see that much.
- Image slide show: Automatically display and blend a set of downscaled images (only Bitmap: .bmp) that are stored in the res/ImageSlideShowApp/ folder of the repository.
- Shader: This is more a collection of visual effects. The applications provides a general interface, similar to GLSL shaders and for each effect, just a single function has to be implemented. Currently, the following effects are available: Water animation, static chessboard (were you can play on with real chess figures), Color waves that change hue and saturation.
- Menu application: Allows hierarchical menus and sub-menus. Each menu entry can have an individual implementation (adjust settings, start other apps,..)
- Update App: This application is able to automatically update your software. It fetches the latest git repository from Github.com, compiles the project and restarts the engine on success after showing the green text "done". If something goes wrong, you see a red "failed" and the engine does not automatically restart. An error log is provided in the root directory of the repository.