-
Notifications
You must be signed in to change notification settings - Fork 10
Code Style Document
Valk edited this page Aug 4, 2025
·
66 revisions
If the following looks overwhelming to you, you can ignore it, I will refactor your pull request to align with this style.
There's also a saying, "Rules were made to be broken". For example should it be called PlayerMovementComponent or PlayerComponentMovement? There is no wrong answer here.
- Indentation: 4 spaces.
- Line Endings: LF.
- Curly Braces: Always expand unless the expression(s) / statement(s) are short.
- Using Directives: Above namespace.
- PascalCase: Types, methods, properties, constants, events.
- camelCase: Private fields, local variables, method args.
- Private fields: Always prefix with an underscore.
-
Events: Avoid prefixing events with
Onas subscribers should use this instead.
Code Examples
private const int FPS_MAX; // hard to read
private const int FPSMax; // hard to read
private const int FpsMax; // goodpublic event Action OnDeactivated; // can no longer use On prefix in subscribers, avoid
public event Action Deactivated; // good- var Keyword: Never use unless the type is absurdly long.
- C# Events: Always use over Godot signals.
-
Explicit Private Modifiers: Always specify
private. - File Scoped Namespaces: Always use.
Code Examples
// Outside functions
int health; // easy to mistake this for a local member
private int _health; // good
// Inside functions
int health; // goodvar health = 100; // bad
int health = 100; // good
// Absurdly long type, this looks awful
foreach (KeyValuePair<Dictionary<int, List<string>>, List<Dictionary<int, int>>> kvp in abomination)
// Clean
foreach (var kvp in abomination)- Public Functions: Only use for singletons, otherwise avoid if possible.
- Private Functions: Use when possible.
-
Events: Never use unless you set them to
nullin _TreeExit() or Dispose(). Improper use can lead to random engine crashes.
Godot exports being at the top of the script and private static functions at the bottom.
- Godot Exports
- Events
- Properties
- Fields
- Godot Overrides
- Public Functions
- Private Functions
- Private Static Functions
Please familiarize yourself with these principles.