Skip to content

Kek5chen/syrillian

Repository files navigation

Codacy Badge codecov GitHub commit activity Discord

Syrillian Engine

Syrillian Engine is a Rust-based, real-time, mainly 3D game engine, focusing on flexibility, modularity, and a straightforward, entity-component-driven workflow.

It's designed to be easy, simple and extensible. We aim to provide a robust foundation for building modern 3D applications, rendering pipelines, and visually pleasing gameplay.

We're doing it different!

We're unique, in the sense that we aim to show how flexible Rust can be as a language. With the milestone to provide a simple, iteration-strong game engine, which people have fun making games with. The goal is to look beyond the boundaries so that users can simply focus on iteration speed. Not fighting a language.

The goal is that even new developers, and people familiar with other languages, have a comfortable dip into the Rust game-dev atmosphere!

Showroom

Feel free to add your own expositions here :)

Me picking up a shader-animated, physics-enabled cube which is emitting a lightsource From this Example

Features

  • Simple "Just get it started" approach. High focus on user-side simplicity, and even fresh rust users should feel welcome.
  • Lots of preset (components - prefabs - compatibility)! All boxed up, ready to be dropped in.
  • Mesh and Physics, Visual debugging features.
  • Game Objects that are builder extensible. Providing a fluid object creation and behavior specification workflow.
  • Built in giants:
    • Strong battle-tested Physics Integration provided by rapier
    • Ultra dynamic Graphics Abstraction provided by wgpu (DirectX, Vulkan, Metal, WebGL)

Getting Started

Prerequisites

  • Have a Rust Toolchain Installed.
  • Have a GPU

Building & Running

  1. Clone the repository:

    git clone https://github.com/Kek5chen/syrillian.git
    cd syrillian
  2. Build the engine library:

    cargo build
  3. Try out a demo example, included in the repository:

    cargo run --example my-main
  4. Dance in circles (optional)

NixOS Development Flakes are provided with the project.

If successful, a window should appear displaying a rendered scene.

Minimal Setup

We, optionally, provide the SyrillianApp Proc Macro. Usage example:

// make sure to get your imports and dependencies right, (for the dependencies, syrillian, env_logger, log), (for the imports use std::Error, and necessary modules from syrillian)
// The macro will provide you with a simple main runtime and (optional) logging
#[derive(Debug, Default, SyrillianApp)]
struct YourGame;

impl AppState for YourGame {
    // will be called once
    fn init(&mut self, world: &mut World) -> Result<(), Box<dyn Error>> {
        world.set_window_title("Example App");

        world.new_camera();
        world.spawn(&CubePrefab::default()).at(0, 0, -10); // Spawn Cube at (0, 0, -10).
        world.print_objects(); // Print Scene Hierarchy to Console

        Ok(())
    }

    // use the update function if you are making updates to the game state every frame
    fn update(&mut self, world: &mut World) -> Result<(), Box<dyn Error>> {
        Ok(())
    }

    // there's also "late_update", and more...
}

It's simple... Really!

Roadmap & Contributing

The whole feature map has moved into the Issues

Contributions are welcome! If you find a bug or have a feature request:

  1. Open an issue describing the problem or feature.
  2. Discuss solutions or improvements.
  3. Optionally, submit a pull request with your changes. Very welcome!

Ensure your code follows Rust’s formatting and clippy checks:

cargo fmt
cargo clippy

History

This project has been a big personal gem of mine, and I've poured probably a good 100+ hours of my freetime into it. I am not monetized to work on this, and I do it out of pure personal interest.

Any help, getting this project [better, stable, improved, ..] is very welcome, and I'll make sure to show or explain anything that's not clear. Even feedback or rants on the user-facing API are more than welcome, as I wish to provide patterns that make is as simple as possible to use.

If you need anything: Don't hesitate to join the discord to discuss :)

License

Syrillian Engine is distributed under the MIT License. See LICENSE for details.


Syrillian Engine ❤️ Building the backbone of your next great 3D experience.

About

Rust-based, real-time 2D&3D game engine built on top of wgpu

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 9