- Read raylib source code
- Read raylib go source code
- Try reporduce minimal versions
- Check for dependecy updates that may help
engine-workspace/
├── go.work # Workspace file (for local development)
├── engine/ # Engine module (github.com/TheLazyLemur/engine)
│ ├── component/ # Core components (Transform, Camera, RenderMesh, Name)
│ ├── core/ # Engine, systems, registries
│ ├── editor/ # Editor UI and state
│ ├── scene/ # Scene API and serialization
│ ├── system/ # System interface
│ ├── math/ # 3D math library
│ ├── viewport/ # Viewport rendering
│ └── config/ # Engine configuration
├── game/ # Game module (imports engine)
│ ├── cmd/game/main.go # Game entry point
│ ├── component/ # Game components
│ ├── system/ # Game systems
│ ├── systems.go # RegisterSystems() integration point
│ └── assets/ # Game assets
└── rtsgame/ # Another game module using the engine
For Published Games:
/Users/you/my-awesome-game/
├── go.mod # Module: my-awesome-game
│ # Requires: github.com/TheLazyLemur/engine
├── main.go # Game entry point
├── component/ # Game components
├── system/ # Game systems
├── systems.go # RegisterSystems()
└── assets/ # Game assets
go 1.25.3
use (
./engine
./game
./pkg/fmod
./pkg/rlshadow
)make # Build game
./bin/run.sh --assets ./game/assets # Run
./bin/rtsgame --mode=editor --assets ./rtsgame/assets # Run RTS game (editor)
./bin/rtsgame --mode=game --assets ./rtsgame/assets # Run RTS game (no editor)| Skill | Description |
|---|---|
engine-component |
Creating ECS components |
engine-system |
Creating ECS systems |
engine-shader |
Creating custom shaders |
engine-collision |
Collision detection |
engine-game-setup |
Setting up a new game project |
The engine and games are separate Go modules. For cross-module features:
- Engine provides callbacks/interfaces for games to implement
- Games register callbacks during initialization
- Engine invokes callbacks at appropriate times
Example: SetViewportRectCallback in engine allows games to receive viewport bounds for overlay rendering.
- Use existing patterns: Check similar code in the codebase first
- Check imports: Use absolute paths for engine imports
- Run tests: Use
go test ./...to verify changes - Build before commit: Run
maketo ensure everything compiles - Read raylib docs: The C API docs apply to raylib-go
- Serialize properly: Mark runtime-only fields with
json:"-"