Skip to content

[N24] The Process and godot_egui #727

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Aug 1, 2021
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added content/news/024/godot_egui.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
55 changes: 55 additions & 0 deletions content/news/024/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,37 @@ and story a bit more.
[@nikl_me]: https://twitter.com/nikl_me
[wicked_potions_repo]: https://github.com/NiklasEi/wicked_potions

### [The Process]

![Showcase image for the new inventory UI in The Process](the_process.gif)
_The godot_egui backend powering a new inventory UI for The Process_

[The Process] by @setzer22 is an upcoming game about factory building,
process management, and carrot production,
built with Rust using the Godot game engine!

Continuing with last month's migration of old GDScript code to ECS in Rust, this
month's main focus has been on porting the GUI code. This has resulted in
the birth of a Godot integration for [egui](https://docs.rs/egui/) that now
powers the game's interface.

This month has seen the following changes and improvements:

- Finished migration of character controller code to ECS style. Now with [300%
more jumps!](https://twitter.com/PlayTheProcess/status/1413081233396011012)
- Implemented [better ambient
lighting](https://twitter.com/PlayTheProcess/status/1413943539160031246) and
enable using different skies for radiance and display. This required a [forked
godot version](https://github.com/setzer22/godot/tree/feature/cosmetic_sky).
- Implement a [new inventory and
toolbar](https://twitter.com/PlayTheProcess/status/1417774452012724226)
interface using egui.
- Integrated the [puffin
profiler](https://twitter.com/PlayTheProcess/status/1420277428199559174) into
the game using the godot_egui integration.

[The Process]: https://twitter.com/PlayTheProcess

## Engine Updates

### [Emerald]
Expand Down Expand Up @@ -202,6 +233,30 @@ web [playground].
[Throne]: https://github.com/t-mw/throne
[playground]: https://t-mw.github.io/throne-playground/

### [godot_egui]

![godot_egui](godot_egui.gif)

[godot_egui] is an integration of the [egui](https://github.com/emilk/egui)
crate for the Godot engine using Rust, enabling highly dynamic and performant
user interfaces in an immediate-mode style in Godot.

Godot has a great GUI system, so why use `godot_egui` instead? A more in-depth
rationale can be found in the crate's README, but the main reason is to provide
a GUI system for godot-rust games that is closer to Rust's data driven
philosophy.

Unlike other egui integrations, `godot_egui` has the special feature of being
embedded as a custom Godot scene tree node. This effectively allows combining
Godot's retained mode UI and container-based placement with the simplicity of
immediate-mode style GUI code of `egui`, getting the best of both worlds.

The [github repository](https://github.com/setzer22/godot-egui) has an example
project and usage instructions to get you started with immediate-mode GUI
programming with Godot and Rust!

[godot_egui]: https://docs.rs/godot_egui/

## Popular Workgroup Issues in Github

<!-- Up to 10 links to interesting issues -->
Expand Down
Binary file added content/news/024/the_process.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.