How gfpeltier/ts-tanks works
TypeScript Tanks is a browser-based PixiJS tank game. The player uses keyboard controls to move and aim a tank, adjust firing power, and launch projectiles. Each frame, the game updates the tank and projectiles against generated terrain; projectile impacts remove terrain around an explosion. A status widget displays tank angle, health, and power. Terrain generation combines a cubic spline surface with a quadtree of grass sprites. Source samples establish these core runtime links; broader gameplay capabilities are not documented in the README.
Main entry points: index.ts Game loop · tank.ts Tank movement · terrain.ts Terrain model · projectile.ts Projectile physics
Components 11
Game runtime
- Game loop
src/index.ts - Keyboard controls
src/controls.ts
Tank combat
- Tank movement
src/models/tank.ts - Projectile physics
src/models/projectile.ts
Terrain system
- Terrain model
src/models/terrain.ts - Surface spline
src/cspline.ts - Terrain quadtree
src/quadtree.ts
Rendering and UI
- Sprite assets
src/sprites.ts - Sprite sheet
img/spritesheet.json - Status widget
src/widgets.ts
Other components
- Player
Connections 21
- Player → Keyboard controls: presses keys
- Game loop → Keyboard controls: registers keys
- Keyboard controls → Game loop: dispatches callbacks
- Game loop → Tank movement: updates movement
- Game loop → Terrain model: creates terrain
- Game loop → Tank movement: spawns tank
- Game loop → Projectile physics: updates projectiles
- Game loop → Status widget: draws status
- Game loop → Sprite assets: loads assets
- Tank movement → Terrain model: checks collision
- Tank movement → Projectile physics: creates projectile
- Projectile physics → Terrain model: checks impact
- Projectile physics → Terrain model: applies explosion
- Terrain model → Surface spline: samples surface
- Terrain model → Terrain quadtree: queries terrain
- Terrain quadtree → Surface spline: tests surface
- Terrain quadtree → Sprite assets: creates grass
- Tank movement → Sprite assets: gets tank sprites
- Projectile physics → Sprite assets: gets projectile sprite
- Sprite assets → Sprite sheet: loads textures
- Status widget → Tank movement: reads tank state