As part of a larger multi-team initiative to build simulations with game development tools, this project realizes Earth-like environments which are easy to adapt into any existing game or simulation using the Bevy Game Engine.
Any simulation provided by these environments is simple and game-like. While this crate can be used to get a basic idea, or a simplified visualization of how a vehicle might move through a relatively flat environment, testing in more specialized simulation systems and with real prototypes is key for any real world vehicle or other safety-critical system.
The project requires an installation of
Rust
and it's accompanying package
tool cargo
. In addition, it requires the necessary
dependencies
for Bevy.
Once you have downloaded the dependencies, the project can be run like
any other Rust project. Simply download and run the earth
binary
with cargo run
, or you can run one of the earth
examples with
cargo run --example <name>
.
The main binary should present you with a blank screen by
default. This is an empty world which can be manipulated through use
of the console. You can open the console with `
(grave/tilde) which
will allow you to run commands.
The supported commands are listed below.
add <biome setup> at <location>
clear
generate
save [filename]
load [filename]
exit
The <biome setup>
field can be ocean
, forest
or city layout N
where N
is an integer from 0-6 inclusive. Experiment with the
different layouts to see what they all look like!
The <location>
field specifies a hex tile coordinate at which to add
the biome. Each coordinate is in the form vector [vector]
, where
each vector is <int><direction>
and directions can be
n|ne|nw|s|se|sw
for north, northeast, northwest, etc. You can
specify any tile on an infinite hex grid this way, but note that tiles
very far from the origin may be processed incorrectly due to floating
point error.
This removes all tiles on the grid, it is currently the only way of removing tiles.
This generates a 5-radius (49-tile) world out of seven random 7-tile biomes. Note that this command may hang the simulation for a second or two, and generate some harmless warnings, but it should work fine.
This command saves the seed—not the actual world—to a file given in
[filename]
or to ./seed
if no filename is given. You can only save
a world created with generate
this way, you cannot yet save manually
specified tile layouts.
This command loads the seed in the given filename (or ./seed
if no
filename is given). A generate
command will generate the same
arrangement of biomes as the generation before that seed was saved.
This command exits. It also has aliases quit
and q
.
This project was implemented by Caelan Chase Parker, and BrandiCook as our senior project for CS 46[1-3] at Oregon State University's undergraduate program. We worked on this project under the excellent guidance of Dr. Chris Patton of Patton Dynamics, LLC.
Many thanks to our project sponsor Dr. Patton, without whom this would not have been possible. We are also tremendously grateful to our instructors at Oregon State University, who were ready to help and guide every step of the way. Though the project was finished and prepared for release by Caelan and Chase, we could not have come as far without Brandi, who prototyped the initial natural environments that evolved into the current forest environment. Thank you all.
The code in this repository is licensed under the MIT license (see
LICENSE.txt
) except where otherwise specified.
Not all resources in this repository are licensed as specified in
LICENSE.txt
. Some assets (such as fonts) in this repository were
created by third parties and are redistributed under their respective
licenses. Each such resource is packaged in a directory with the
applicable license for that resource.
If there is no such license file exists alongside an asset, then the asset is either original (and distributed under MIT), or it is licensed under CC0 (it is in the public domain). Still, CC0 files are generally marked as such in the same directory, and their original source is also cited in the same way.
Please format your code appropriately and lint with clippy. Pull requests will be reviewed when possible by a core member of the current project team.
By contributing you agree to have your contribution distributed as part of the project under an MIT license irrevocably and in perpetuity. You further agree that this distribution may be in any forms that make sense for the project maintainers.