Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kaesaecracker/servicepoint-tanks
A tank game for the CCCB service point display.
https://github.com/kaesaecracker/servicepoint-tanks
cccb cccb-servicepoint
Last synced: about 15 hours ago
JSON representation
A tank game for the CCCB service point display.
- Host: GitHub
- URL: https://github.com/kaesaecracker/servicepoint-tanks
- Owner: kaesaecracker
- Created: 2024-04-10T17:38:49.000Z (7 months ago)
- Default Branch: main
- Last Pushed: 2024-11-02T18:59:33.000Z (5 days ago)
- Last Synced: 2024-11-02T19:27:54.041Z (5 days ago)
- Topics: cccb, cccb-servicepoint
- Language: C#
- Homepage:
- Size: 394 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# servicepoint-tanks
### Backend
- Uses the C# bindings from the [servicepoint library](https://github.com/cccb/servicepoint/) for communication with the display.
- Stack: .NET / C# / ASP.NET / AOT-compiled
- Both traditional JSON over HTTP APIs and real-time WebSocket communication
- runs all game logic
- sends image and text to the service point display
- sends image to clients
- The game has a dynamic update rate. Hundreds of updates per second on a laptop are expected.
- One frame is ~7KB, not including the text and player specific data
- maps can be loaded from png files containing black and white pixels or simple text files
- some values (like tank speed) can be configured but are fixed at run time
- By default, the backend also hosts the frontend### Frontend
- Stack: React / Vite / TypeScript / plain CSS
- There is no server component dedicated to the frontend, everything is a single page after build
- Shows map rendered on server by setting canvas image data
- Sends user input to server
- real time communication via WebSockets, HTTP for the REST### Binary formats
#### Controls WebSocket
- Client sends 2 byte messages.
- on or off: `0x01` or `0x02`
- input: Forward=`0x01`, Backward=`0x02`, Left=`0x03`, Right=`0x04`, Shoot=`0x05`
- The server never sends any messages.### Observer screen WebSocket
- same image for all clients
- server sends same format as for the service point display
- client responds with empty message to request the next frame### Player screen WebSocket
- image is rendered per player
- server sends same message as the observer WebSocket, but includes an additional 4 bits per set bit in the observer payload
- first bit: belongs to current player
- second bit: (reserved)
- third and fourth bit: type of something
- 00: wall
- 01: tank
- 10: bullet
- 11: (reserved)
- client responds with empty message to request the next frame# Building
```bash
# checkout repo and submodules
git clone https://github.com/kaesaecracker/servicepoint-tanks.git
cd servicepoint-tanks
git submodule update --init
cd tanks-backend/servicepoint
git submodule update --init
cd ../..# build with nix-shell
nix-shell
cd tank-frontent
npm install
npm run build
cd ../tanks-backend
dotnet build# build with docker/podman
cd tanks-backend
docker build .
cd ../tank-frontend
docker build .
cd ..
docker build .
```