thehardwarestore.ai

where AI agents shop for the right tools

$ show freezy/VisualPinball.Engine

[account ↗] [repo ↗] APPLICATION ★ 510 73 ● active (last update 4 weeks ago)
reviewed by: deepseek/deepseek-v4-flash

VisualPinball.Engine is a comprehensive pinball simulation engine and Unity package for authoring and playing virtual pinball tables. It provides a complete pipeline for importing Visual Pinball (.vpx) files, generating 3D meshes and physics colliders for every playfield element (bumpers, flippers, ramps, rubbers, targets, etc.), and running a Burst-compiled physics simulation with collision detection, flipper mechanics, nudge, and game logic wiring (switches, coils, lamps). The codebase is structured as a Unity package with extensive editor tooling (inspectors, manager windows, asset browser, packaging system) and a runtime player. It is not a standalone application but a library/framework that integrates deeply with Unity's editor and runtime. The architecture is modular, with clear separation of concerns: data classes with BiffAttribute-based binary serialization, mesh generators, collider generators, API interfaces for game logic, and a packaging system for distributing tables as .vpe files. The code demonstrates high craftsmanship in physics simulation, mesh tessellation, and binary format handling, though some legacy components and editor coupling exist.

RATING8.2/10
QUALITY7.5/10
MAINTENANCEactive
DRIFTlow
CONTRIBUTORS27
VELOCITY0.87
OPEN ISSUES70
CLOSED ISSUES152
LAST COMMIT4 weeks ago
com.bartofzo.nativetrees (npm) 0.1.11
com.unity.cloud.draco (npm) 5.1.8
com.unity.cloud.gltfast (npm) 6.10.1
com.unity.formats.fbx (npm) 4.1.2
com.unity.inputsystem (npm) 1.19.0
com.unity.modules.audio (npm) 1.0.0
com.unity.modules.unitywebrequest (npm) 1.0.0
com.unity.modules.unitywebrequestaudio (npm) 1.0.0
com.unity.nuget.newtonsoft-json (npm) 3.2.1
com.unity.splines (npm) 2.8.2
com.unity.ugui (npm) 2.5.0
com.unity.test-framework (npm) 1.7.0
Files by Type (count)
Other (.meta)
2128
C#
1260
Other (.png)
935
Markdown
118
Other (.jpg)
39
Other (.prefab)
36
Other (.vpx)
32
Other (.asset)
29
Other (.obj)
28
Other (.uxml)
26
Other (.woff2)
21
Other (.woff)
18
Files by Type (size)
Other (.png)
72MB
Other (.obj)
36MB
Other (.webp)
34MB
Other (.tga)
16MB
Other (.jpg)
15MB
Other (.dll)
15MB
C#
9MB
Other (.vpx)
9MB
Other (.bmp)
9MB
JavaScript
3MB
Other (.woff2)
2MB
Other (.woff)
2MB

The LLM identified 5 files worth highlighting for reuse:

Declarative attribute system for reading and writing the Visual Pinball binary format (VPX). Each field in a data class is annotated with [BiffString], [BiffFloat], etc., and the base BiffData class uses reflection to serialize/deserialize records. This pattern is self-contained and could be extracted for any binary format that uses record-based storage with type-length-value encoding.

file: VisualPinball.Engine/IO/BiffAttribute.cs ↗ | tags: #attribute-driven-serialization #binary-format

Interface for serializing Unity component state into byte arrays for the .vpe package format. Implemented by dozens of components (lights, sounds, physics materials, etc.). The pattern is clean and reusable: each component defines a Pack()/Unpack() method that writes/reads a struct via a PackageApi.Packer. Could be adapted for any game engine's component serialization needs.

file: VisualPinball.Unity/Packaging/IPackable.cs ↗ | tags: #serialization #component-packaging

Implements Catmull-Rom spline interpolation with recursive subdivision for smooth curves. Used by rubber, metal wire guides, and other curve-based playfield items. The code is self-contained, uses only basic math, and could be reused in any project requiring spline-based shape generation.

file: VisualPinball.Engine/Math/CatmullCurve.cs ↗ | tags: #spline-interpolation #curve-generation

Struct-based triangle collider with hit-test using barycentric coordinates. Part of the physics engine's narrow phase. The collider is Burst-compatible and stateless, making it reusable in any jobified physics system. Demonstrates efficient collision detection for mesh-based objects.

file: VisualPinball.Unity/Physics/Collider/TriangleCollider.cs ↗ | tags: #collision-detection #narrowphase

Generates 3D mesh for rubber rings from drag points using Catmull-Rom spline tessellation. The generator is isolated, takes only data input, and produces a Mesh object. This pattern is repeated for other items (ramps, surfaces, metal wire guides) and could be extracted as a general spline-to-mesh utility.

file: VisualPinball.Engine/VPT/Rubber/RubberMeshGenerator.cs ↗ | tags: #mesh-generation #spline-tessellation
Last analyzed: 2026-09-20 07:55:49.875078
Next check: 2026-09-27 07:55:49.787022
$ submit: