Trait MainLoopRoot

Source
pub trait MainLoopRoot {
    // Required methods
    fn get_fps(&self) -> f32;
    fn frame(&mut self);
    fn render_frame(&mut self);

    // Provided methods
    fn sleep_and_get_input_data(&self, fps: f32, elapsed: Duration) -> bool { ... }
    fn main_loop(&mut self) { ... }
}
Expand description

A trait to abstract away the main loop and simplify code writing

Check out the game-loop-root.rs example, a version of quick-start.rs rewritten using MainLoopRoot

Required Methods§

Source

fn get_fps(&self) -> f32

Return the FPS at which the main loop should run. A constant like 60.0 or 30.0 is sufficient

Source

fn frame(&mut self)

This is where the main logic of your game should go - handling input, moving objects, handling collisions, etc.

Source

fn render_frame(&mut self)

All rendering code (drawing, printing to the screen, etc.) should be called in here. If the bool value returned by MainLoopRoot::sleep_and_get_input_data() is true, this won’t run and nothing should be printed to the screen

§Example

Here’s an example of what a render_frame trait implementation might look like, assuming your root struct has a view: View property for your main view

// --inside impl MainLoopRoot for Game--
fn render_frame(&mut self) {
    self.view.clear();

    // Draw every enemy in a vector of `Enemies` (all of which would implement `CanDraw`)
    for enemy in &self.enemies {
        self.view.draw(enemy);
    }
    self.view.draw(&self.player);

    self.view.display_render().unwrap();
}

Provided Methods§

Source

fn sleep_and_get_input_data(&self, fps: f32, elapsed: Duration) -> bool

The function used to sleep for the appropriate amount based on the value returned by get_fps. Uses gameloop::sleep_fps by default and will return None for the InputDataType. If the return value is true, render_frame will not be called on the next frame

Source

fn main_loop(&mut self)

The main loop function of the main loop root. This shouldn’t be overriden. See the MainLoopRoot documentation for more info

impl MainLoopRoot for Game {
    fn get_fps(&self) -> f32 { 30.0 }
    fn frame(&mut self) {
        // --snip--
    }
    fn render_frame(&mut self) {
        // --snip--
    }
}
let mut game = Game::new(); // `Game` implements `MainLoopRoot`. Its `new` method sets up all the game objects

game.main_loop();

Implementors§