mirror of
https://github.com/lisk77/comet.git
synced 2025-10-23 21:38:50 +00:00
2.7 KiB
2.7 KiB
☄️ Comet
a free and open source games framework
Warning
This project is in early development and is not yet ready for use.
It could be potentially used to make something very basic in a very hacky way, but it is not a good experience
Installation is manual as of right now but if it reaches an acceptable state I will publish the crate
Recommended setup
The project structure should look like this:
project
│ Cargo.toml
│ build.rs
│ crates
│ └── comet
│ resources
│ └── shaders
│ └── textures
│ src
│ └── main.rs
# Cargo.toml
# ...
[dependencies]
comet = { path = "path/of/the/comet/crate" }
# ...
// main.rs
use comet::prelude::*;
struct GameState {}
impl GameState {
pub fn new() -> Self {
Self {}
}
}
// This function will be called once before the event loop starts
fn setup(app: &mut App, renderer: &mut Renderer2D) {}
// This function will be called every tick
fn update(app: &mut App, renderer: &mut Renderer2D, dt: f32) {}
fn main() {
App::new() // Generate a basic 2D app
.with_preset(App2D) // Pre-registers the `Transform2D` component in the world
.with_title("Comet App") // Sets the window title
.with_icon(r"resources/textures/comet_icon.png") // Sets the window icon
.with_size(1920, 1080) // Sets the window size
.with_game_state(GameState::new()) // Adds a custom game state struct
.run::<Renderer2D>(setup, update) // Starts app with the given
}
// build.rs example
use anyhow::*;
use fs_extra::copy_items;
use fs_extra::dir::CopyOptions;
use std::env;
fn main() -> Result<()> {
println!("cargo:rerun-if-changed=resources/textures/*");
println!("cargo:rerun-if-changed=resources/shaders/*");
let out_dir = env::var("OUT_DIR")?;
let mut copy_options = CopyOptions::new();
copy_options.overwrite = true;
let mut paths_to_copy = Vec::new();
paths_to_copy.push("resources/textures/");
paths_to_copy.push("resources/shaders/");
copy_items(&paths_to_copy, out_dir, ©_options)?;
Ok(())
}
Todo
(not ordered by importance)
- (out of the box) Rendering
- 2D
- texture rendering
- world rendering
- 3D
- Particles
- Post-processing
- 2D
- Math
- Vectors
- Matrices
- Quaternions
- Interpolation
- Bezier curves
- Easing functions
- Noise
- Ray-casting
- Pathfinding
- ECS
- Components
- Entities
- Archetypes
- World
- general management
- saving
- loading
- Input
- Sound
- Physics
- Basic Plugin System
- Custom Renderer