Board Game Factory
Contributors are welcome here! See the end of readme.
This is a vector-graphics framework intended for creating and scaling up production of reusable assets with vector graphics.
It is a thick wrapper around cairo for vector graphics and pango for fully featured text layout and rendering providing very user-friendly for composing assets.
I've developed it personally to satisfy my need for a solid prototyping engine for board games, but inherently, it is in no way tied to making board games, even though it contains a couple convenience classes for that (such as CardSheet for producing printable card sheets out of lists of components).
Installation
Requires conda and having conda forge in channels (see https://conda-forge.org).
Unfortunately the cairo and pango binary libraries cannot be installed directly with pip.
conda install cairo pango
pip install board-game-factory
Features
- High quality rendering - BGF is based fully in Vector Graphics, therefore allowing for renders of arbitrary resolution
- Component Tree structure - similar to making GUIs in Java, you can embed a component inside a component inside a component...
- Fully extensible components - the best way to use this framework is to create and compose your own components extending base components.
- Fully dynamic and highly flexible sizing system:
- Component width/height possible values:
- INFER - the component decides on its own how large it should be
- FILL - fill all available remaining space in the parent Container
- '12.34%' - take up 12.34% of available space
- 123 - take up 123 pixels
- Component width/height possible values:
- Many basic and advanced components are already implemented:
- Container - base component with a layout manager, you add components into it.
- Shapes
- Rectangle
- RoundedRectangle
- Circle
- Line
- TextUniform - a fully featured text rendering component (exposing most advanced features of pango) for rendering text of a uniform style (all characters have same font, size, color, ...).
- TextMarkup - advanced text component supporting markup for strings with multiple styles (boldface words, multiple colors, ...)
- features smart inline laying of icons (any images) for embedding icons directly in text
- Grid - a special component for creating table structures:
- each cell can have unique parameters (e.g. layout manager)
- incredibly flexible row and column definitions (INFER, FILL, %, px)
- fully featured cell merging
- just with those few components + LayoutManagers I've made all the samples you can see below in the link on imgur.
- LayoutManagers
- Absolute - define pixels
- HorizontalFlow, VerticalFlow - align automatically to row or column
- Fully extensible, you can write your own
Usage
For examples of usage see tests.
Things I made with BGF
Samples of prototypes I've made with this framework:
Issues
Please report any issues and feel free to try and fix them on your own.
Contributors Wanted!
I would love to welcome people on board who would like to extend the project or improve it, if you're interested you can drop in a PR directly or we can first discuss, you can reach me at adam.volny at gmail dot com.
For a hobby project, I think it has a surprisingly high quality of design and code. There are is quite a good test coverage, all tests are performed directly against rendered references. This allowed for controlled development of many of the complex features in this framework (dynamic sizing & positioning is really difficult with this amount of supported features).
It could be extended to do many things (e.g. a gui board game asset builder, coupled with inputs from spreadsheets, ...), I would love to hear Your ideas!