Documentation Style Guide¶
This guide describes the style for text, code, and terminology for Thunder Engine documentation.
General Principles¶
- Clarity
Write in simple and understandable language. Avoid complex constructions.
- Consistency
Use the same terminology throughout all documentation.
- Relevance
Documentation should correspond to the current engine version.
- Practicality
Each section should answer the question “how to use this?”.
Tone and Style¶
Use Active Voice
✅ “The Camera component displays the scene on the screen”
❌ “The scene is displayed on the screen by the Camera component”
Address the Reader as “you”
✅ “You can create a camera using the method…”
❌ “The user can create a camera…”
Use Imperative Mood in Examples
✅ “Create an actor and add the Camera component”
❌ “One should create an actor and add the Camera component”
Terminology¶
Key Terms
Term |
Usage |
|---|---|
Actor |
Always capitalized, as a class |
Component |
Always capitalized |
Camera |
Component name capitalized |
Mesh |
Geometry resource |
Resource |
Resource (asset) |
Scene |
Scene |
Engine |
Engine (in the context of the Engine class) |
Verbs
Verb |
Usage |
|---|---|
create |
For creating objects |
load |
For loading resources |
set |
For setting properties |
get |
For retrieving values |
enable/disable |
For enabled/disabled |
Text Formatting
Element Formatting Example
—————– ———————– ————————
Class names monospace Camera
Method names monospace() setFov()
Properties bold enabled
File names monospace main.cpp
Paths monospace /resources/textures/
Code .. code-block:: with language specified
Values monospace true, nullptr
Code Formatting¶
Code Blocks
Always specify the language:
.. code-block:: cpp
void example() {
// code
}
Variable Names in Examples
Use meaningful names:
// Good
Camera* mainCamera = actor->addComponent<Camera>();
// Bad
Camera* cam = actor->addComponent<Camera>();
Comments in Code
Write comments in English:
// Create the main camera
Camera* camera = actor->addComponent<Camera>();
camera->setFov(70.0f); // Set the field of view
Property Formatting¶
Property Description Format
**propertyName** (type)
Property description.
* Default value: ``defaultValue``
* Range: from ``min`` to ``max``
* Additional notes
Example
**fieldOfView** (float)
Field of view in degrees for perspective projection.
* Default value: ``60.0``
* Range: from ``1.0`` to ``179.0``
* Large values create a "fisheye" effect
Example Formatting¶
Basic Example
**Basic Camera Creation**
.. code-block:: cpp
Actor* cameraActor = scene->createActor("MainCamera");
Camera* camera = cameraActor->addComponent<Camera>();
camera->setFov(70.0f);
Warning Formatting¶
Note — for important but non-critical information:
.. note::
The camera must be added to an actor before calling ``setMainCamera()``.
Tip — for useful advice:
.. tip::
For 2D games, use orthographic projection with ``setOrthographic(true)``.
Warning — for potential issues:
.. warning::
Do not call ``update()`` manually. The animation system calls this method automatically.
Caution — for critical warnings:
.. caution::
Incorrect near/far plane settings may lead to depth artifacts.
Table Formatting¶
Simple Table
============= =====================================
Property Description
============= =====================================
**fov** Field of view in degrees
**near** Near clipping plane
**far** Far clipping plane
============= =====================================
Table with Alignment
============= =====================================
Property Description
============= =====================================
**fov** Field of view in degrees
Range: 1.0 - 179.0
Default: 60.0
**near** Near clipping plane
Default: 0.1
============= =====================================
API References¶
Class References
The :cpp:class:`Camera` class controls scene display.
Method References
Use the :cpp:func:`Camera::setFov()` method to adjust the field of view.
Enumeration References
The projection type is set via :cpp:enum:`Camera::ProjectionType`.
Pre-Submission Checklist¶
Before submitting a pull request, verify:
[ ] The document begins with a unique anchor
[ ] Correct headers are used (===, —, ~~~)
[ ] All code blocks have the language specified
[ ] Default value is specified for each property
[ ] Usage examples are added
[ ] All links work (verified via
make html)[ ] No spelling errors
[ ] Terminology is consistent
[ ] Unimplemented features are marked as “currently not implemented”