generated from krampus/template-godot4
161 lines
5.3 KiB
Markdown
161 lines
5.3 KiB
Markdown
|
# DEVELOPMENT.md
|
||
|
|
||
|
This is a set of general guidelines for developers.
|
||
|
|
||
|
## Dev Tools
|
||
|
|
||
|
This project uses `gdlint` and `gdformat` from
|
||
|
[Scony/godot-gdscript-toolkit](https://github.com/Scony/godot-gdscript-toolkit)
|
||
|
for linting & formatting, respectively.
|
||
|
|
||
|
These tools are integrated into our development workflow using Godot
|
||
|
plugins:
|
||
|
[ryan-haskell/gdformat-on-save](https://github.com/ryan-haskell/gdformat-on-save)
|
||
|
and
|
||
|
[krampus/gdlint-plugin](https://git.of.the.spectacle.lol/krampus/gdlint-plugin)
|
||
|
respectively.
|
||
|
|
||
|
When a script is saved in the Godot editor, it is automatically
|
||
|
formatted and checked for linting errors which are shown as warnings.
|
||
|
|
||
|
### Setup on Linux Environment
|
||
|
|
||
|
`gdlint` and `gdformat` require Python >=3.8. On Ubuntu:
|
||
|
|
||
|
```bash
|
||
|
$ sudo apt update
|
||
|
$ sudo apt install python3 python3-venv
|
||
|
```
|
||
|
|
||
|
Next, install `gdscript-toolkit` through `pip`:
|
||
|
|
||
|
```bash
|
||
|
$ pip install --user -r requirements.txt
|
||
|
```
|
||
|
|
||
|
Then run `godot`. The plugins should be configured automatically.
|
||
|
|
||
|
(If you prefer to install `gdscript-toolkit` in a venv, just make sure
|
||
|
the plugins can find their required binaries.)
|
||
|
|
||
|
### Setup on Windows Environment
|
||
|
|
||
|
Download and run the appropriate installer from the [Python website](https://www.python.org/downloads/windows/)
|
||
|
|
||
|
During installation, select the "Add python.exe to PATH" checkbox when prompted.
|
||
|
|
||
|
Open "Windows PowerShell" and run the following command to make sure pip is installed:
|
||
|
```
|
||
|
pip --version
|
||
|
```
|
||
|
|
||
|
Assuming pip is installed you should see a message like:
|
||
|
```
|
||
|
pip 24.0 from C:\Users\dummy\AppData\Local\Programs\Python\Python312\Lib\site-packages\pip (python 3.12)
|
||
|
```
|
||
|
|
||
|
If pip is installed, run the following command to install the toolkit for the linter and formatter:
|
||
|
```
|
||
|
install gdtoolkit==4.2.2
|
||
|
```
|
||
|
|
||
|
Then run the following command to finish the installation process:
|
||
|
```
|
||
|
pip install setuptools==69.5.1
|
||
|
```
|
||
|
|
||
|
Check that everything installed by running "gdlint -h" and you should see something like:
|
||
|
|
||
|
```
|
||
|
GDScript linter
|
||
|
|
||
|
A tool for diagnosing typical GDScript code problems.
|
||
|
On success and the exitcode is 0.
|
||
|
On failure, python exception or list of problems is shown and exitcode is non-zero.
|
||
|
...
|
||
|
```
|
||
|
Also run "gdformat -h" and you should see something like:
|
||
|
|
||
|
```
|
||
|
GDScript formatter
|
||
|
|
||
|
Uncompromising GDScript code formatter. The only configurable thing is
|
||
|
max line length allowed and tabs/spaces indent. The rest will be taken
|
||
|
care of by gdformat in a one, consistent way.
|
||
|
...
|
||
|
```
|
||
|
|
||
|
### Git Hooks
|
||
|
|
||
|
If you like, you can use the included githooks to automatically check formatting & linting before making a commit.
|
||
|
|
||
|
You can enable our githooks like this:
|
||
|
|
||
|
```bash
|
||
|
$ git config core.hooksPath .githooks
|
||
|
```
|
||
|
|
||
|
## Standards & Practices
|
||
|
|
||
|
### Style
|
||
|
|
||
|
Code should generally conform to the [GDScript style
|
||
|
guide](https://docs.godotengine.org/en/stable/tutorials/scripting/gdscript/gdscript_styleguide.html)
|
||
|
where possible. Use the provided [linter and formatter](#dev-tools) to
|
||
|
apply most style guidelines automatically.
|
||
|
|
||
|
### Type Annotations
|
||
|
|
||
|
Use explicit type annotations wherever possible. Don't fret about it
|
||
|
too much, this is GDScript and there are a lot of situations where you
|
||
|
gotta do some freaky duck typing, but try to do as much explicit type
|
||
|
annotation as you can.
|
||
|
|
||
|
### Organization
|
||
|
|
||
|
_NOTE update this section as we build out the project more_
|
||
|
|
||
|
- All non-code assets go under `assets`
|
||
|
- Graphical assets go under `assets/images`
|
||
|
- Sprites go under `assets/images/sprites`
|
||
|
- Audio assets go under `assets/audio`
|
||
|
- Music goes under `assets/audio/music`
|
||
|
- SFX assets go under `assets/audio/sfx`
|
||
|
- Video assets go under `assets/video`
|
||
|
- Scenes and GDScript source files go under `src`
|
||
|
- Godot plugins go under `addons`
|
||
|
|
||
|
## Git Workflow
|
||
|
|
||
|
We use a standard branching workflow. Here's the full process of getting something merged in:
|
||
|
|
||
|
1. [Create an issue](../../../issues/new) for the feature you want to
|
||
|
implement or the bug you want to fix, and assign it to
|
||
|
yourself. Alternately, pick an existing issue you want to work on
|
||
|
from the [issue tracker](../../../issues).
|
||
|
2. In your local repo, create a new branch off of `main`. Your feature
|
||
|
branch's name should include the issue number and a brief
|
||
|
descriptive title, e.g. `37-immanentize-eschaton` or similar.
|
||
|
3. Build the feature or fix the bug or whatever it is you're
|
||
|
doing. Frequent, small commits are preferred, and it's a good idea
|
||
|
to merge new changes from `main` often.
|
||
|
4. Push your changes to the server and
|
||
|
[create a pull request](../../../compare/main...main) to merge your
|
||
|
feature branch into `main`. Your PR description should include the
|
||
|
changes you made. If you include the phrase _"closes #[issue
|
||
|
number]"_ in your PR description, the issue will automatically be
|
||
|
closed when your PR is merged, which is nice.
|
||
|
5. Request review from `intrusive/Owners`. If your patch touches
|
||
|
something you think a specific dev needs to see, tag them for
|
||
|
review explicitly.
|
||
|
6. Once your PR gets approval from either 1 member of
|
||
|
`intrusive/Owners` or from the specific developer who needs to see
|
||
|
it, merge it into `main` yourself. There should be a button on the
|
||
|
PR page to do this. If it says you can't merge automatically, you
|
||
|
probably need to merge new changes from `main`
|
||
|
7. If it wasn't done automatically, close the issue and delete the
|
||
|
feature branch.
|
||
|
|
||
|
Try to stick to the above workflow as much as you can, but occasional
|
||
|
shortcuts for hotfixes etc aren't the end of the world.
|