2023-06-26 13:36:07 -07:00

36 lines
1.7 KiB
Markdown

# Ballistica Feature Sets
This directory contains a config file for each feature-set in the project.
Feature sets are high level subsets of an engine or app which can be easily
added, removed, duplicated, etc.
### Naming Conventions
Feature sets should have lowercase alphanumeric names with underscores between
words. An example would be `foo_bar`. Variations of this name may be used
throughout code; for example `FooBar` may be used in class names where
camel-case is standard or `foobar` may be used in Python module names where
brevity is desirable.
### Locations
The build system looks for feature-set files in specific predefined locations
with specific naming conventions:
- **Feature Set Definition**: To define feature set `foo_bar`, a file must exist
in this directory called `featureset_foo_bar.py`.
- **Python Package**: If feature set `foo_bar` provides a Python package, it
should be a directory named `bafoobar` ('ba' prefix, name with spaces removed)
that lives under [src/assets/ba_data/python](../../src/assets/ba_data/python).
- **Native Code**: If feature set `foo_bar` provides a native component (C++
code or otherwise) it should live in a directory named `foo_bar` (unmodified
feature set name) under [src/ballistica](../../src/ballistica).
- **Meta Package**: If feature set `foo_bar` provides a meta package (that is,
code or data used to generate other source code), it should be a directory
named `bafoobarmeta` ('ba' prefix, name with spaces removed, 'meta' suffix)
that lives under [src/meta](../../src/meta).
- **Test Package**: If feature set `foo_bar` provides a set of tests, it should
be a directory named `test_foo_bar` ('test_' prefix, unmodified feature set
name) under [tests](../../tests).