# Hibis Coding Standards ## CXX Language Use C++17 as the C++ standard. Hibis should compile under all major compilers. ## Structure Each module of the game engine should be kept within their specific folders. E.g.: - Core - Renderer/(renderer name) If statically linking third party libraries are *absolutely* required, they must be placed in a folder called `external` in the repository root. ## Formatting Files need to end with a new line.
Indenting should be done using hard tabs (the tab character) rather than spaces.
New lines should be after `{` with the exception of class/struct construction which has no newlines at all.
There should be one class per file. ## Includes `#include` uses must go in the following order (with each section seperated by an extra newline): ```cpp #include // From Hibis #include // Use header in current dir #include "relative-header" ``` `..` should be avoided within "relative" headers in the event it causes issues for packagers.
Include guards should be handled via `#pragma once`. ## Variables Variables should be camelCase and be named to make it obvious what their purpose is.
Variables should be prefixed with specific chars depending on where the variable is. - Member Variable - Prefix with `m` - Global Variable - Prefix with `g` - Static Variable - Prefix with `s` Example: ```cpp const int gAmountOfTimesISuccessfullyWriteGoodVariableNames = 0; class ExampleClass final { public: ExampleClass() {} ~ExampleClass() {} // dont ask void hmmmTimeToScream() { std::cout << "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa" << std::endl; } private: std::string mMyName = "Example Class"; } ``` ## Classes If a class is not going to be used/intended to be used for polymorphism, mark it as a `final` class.
Base classes should make all functions `virtual` to allow for functions to be overriden.
Simple set/get functions should be inside of the header file on a single line.
Class names should be in PascalCase and be obvious what their purpose is.