ftw
A CLI tool to manage your godot-rust project!
Table of contents
General Information
This is a tool to help you manage your game project by providing commands to (1) create a project, (2) create a class, (3) create a singleton class, (4) build the library, (5) export your game, (6) run your project (and more to come in the future!). Its like rails but for game development
Setup
It leverages tools like godot and godot-headless to make it all work! In Linux you can install both godot and godot-headless, on others only godot. For additional setup instructions, check the wiki of the default template.
$ cargo install ftw
Usage
ftw new <project-name> [template]
Creates a new project directory
$ ftw new my-awesome-game # this creates a new project using the default template
$ ftw new my-awesome-game default # same as above
$ ftw new my-awesome-game /path/to/custom/template # creates a new project using a custom template
Note: The custom template should have same structure as the default template
ftw class <class-name> [node-type]
Creates a class
$ ftw class MyHero # creates a class called `MyHero` that is deriving from `Node` as default
$ ftw class MyHero Area2D # creates a class that derives from `Area2D`
Note: This creates the following files
rust/src/my_hero.rs
,godot/scenes/MyHero.tscn
andgodot/native/MyHero.gdns
then adds the class insiderust/src/lib.rs
You could also organize rs, tscn and gdns files into submodules or subfolders
$ ftw class heros/marvel/avengers/IronMan Area2D # creates a class that derives from `Area2D`
Note: This creates the following files
rust/src/heros/marvel/avengers/iron_man.rs
,godot/scenes/heros/marvel/avengers/IronMan.tscn
,godot/native/heros/marvel/avengers/IronMan.gdns
andmod.rs
files in each subfolder inrust/src
then adds the class insiderust/src/lib.rs
ftw singleton <class-name>
Creates a singleton class for autoloading
$ ftw singleton MySingleton # creates a class called `MySingleton` that derives from `Node`
Note: This creates the following
rust/src/my_singleton.rs
andgodot/native/MySingleton.gdns
then adds the class insiderust/src/lib.rs
ftw class
command
You can also organize the files into submodules/subfolders as in $ ftw singleton network/Network # creates a class called `Network` that derives from `Node`
ftw build [target] [build-type]
Builds the library for a particular target
$ ftw build # builds the library for your current platform as target using `debug` as default
$ ftw build linux-x86_64 # builds the library for the `linux-x86_64` platform using `debug` as default
$ ftw build linux-x86_64 debug # same as above
$ ftw build linux-x86_64 release # builds the library for the `linux-x86_64` platform using `release`
[target] can be one of the following
- android-aarch64
- android-arm
- android-x86
- android-x86_64
- ios-aarch64
- linux-x86
- linux-x86_64
- macos-x86_64
- windows-x86-gnu
- windows-x86-msvc
- windows-x86
- windows-x86_64-gnu
- windows-x86_64-msvc
- windows-x86_64
ftw export [target] [build-type]
Exports the game for a particular target
$ ftw export # exports the game for your current platform as target using `debug` as default
$ ftw export linux-x86_64 # exports the game for the `linux-x86_64` platform using `debug` as default
$ ftw export linux-x86_64 debug # same as above
$ ftw export linux-x86_64 release # exports the game for the `linux-x86_64` platform using `release`
ftw run
debug
then runs your game
Builds the library using $ ftw run # enjoy! 😆
Contact
Michael Angelo Calimlim <[email protected]>