1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
//! In order to get the crate running, you have to copy `msvc` folder and `build.rs` from crates
//! [repository](https://github.com/jakubDoka/rustbatch)
//! and place it into root of your project.
//! # RustBatch
//! This crate provides some performant tools for building big 2D games that deals with huge amount of entities.
//! So far crate contains:
//! - OpenGl abstraction based around batching.
//! - Collision scanner that provides fast collision detection for couple thousand entities
//! - Multithreaded pathfinder that has no problems ewen with 1000 X 1000 tile-maps
//! - Math module that contains structs like Matrix, Vector or Rectangle
//! - Custom per-batch vertex and fragment shader also supported
//! - Sprite packing so you can take advantage of batching as match as you can
//! # Warming
//! Important thing to note is that some functions from render module are calling functions and
//! using enums from gl crate. Functions has to be loaded first witch you achieve by creating
//! window.
//! # Example
//! ```
//!extern crate rustbatch;
//!
//!use rustbatch::{sdl2, image, gl};
//!use rustbatch::debug::FPS;
//!use rustbatch::{Window, Texture, Sprite, Batch};
//!use rustbatch::{Mat, WHITE};
//!
//!
//!fn main() {
//!    // creating window to draw to and event pump to read input. Ignore
//!    // gl var, it cannot be dropped otherwise rendering will not work so just leave it be
//!    let (mut window, mut event_pump, gl) = Window::new(|sys| {
//!        sys.window("rusty batch", 400, 400)
//!            .opengl()
//!            .resizable()
//!            .build()
//!            .unwrap()
//!    });
//!
//!    window.set_background_color(&[0.5f32, 0.5f32, 0.5f32, 1f32]); //gray background
//!
//!    // This is wrapped opengl texture object
//!    let texture = Texture::new(
//!        "C:/Users/jakub/Documents/programming/rust/src/ggl/src/bullets.png",
//!        gl::NEAREST, // So the pixels are drawn with no interpolation
//!        gl::RGBA // Color structure, you would use gl::RGB if your texture does not have alpha channel
//!    ).unwrap();
//!
//!    // Creating sprite. Notice that sprite is just collection of points and it cannot be directly
//!    // drawn to window
//!    let mut sprite = Sprite::new(texture.frame());
//!
//!    // On the other hand batch owns texture witch can be drawn to window
//!    let mut batch = Batch::new(texture);
//!
//!    // this is just a little helper
//!    let mut fps = FPS::new(1f32);
//!
//!    'main: loop {
//!        //polling events
//!        for event in event_pump.poll_iter() {
//!            match event {
//!                // break loop if X button on window is pressed
//!                sdl2::event::Event::Quit { .. } => break 'main,
//!                _ => {}
//!            }
//!        }
//!
//!        // i hope you know how to get delta on your own but fps returns is as bonus if you supply
//!        // 0f32 as delta
//!        let _delta = fps.increase(0f32);
//!
//!        // clearing window
//!        window.clear();
//!
//!        // drawing sprite to batch
//!        // IM is matrix transform. more about matrix in mat module docs
//!        // texture color is multiplied by inputted color
//!        sprite.draw(&mut batch, &Mat::IM, &WHITE);
//!
//!        // drawing batch to window
//!        window.draw(&batch);
//!
//!        // Don't forget to clear batch if you not planning to use it as canvas,
//!        // after all drawing sprites to batch takes some time
//!        batch.clear();
//!
//!        // finishing with window update so you can se it changing
//!        window.update();
//!    }
//!}
//! ```

pub mod images;
pub mod entity;
pub mod render;
pub mod debug;
pub mod math;

pub use sdl2;
pub use image;
pub use gl;
pub use rand;

pub use debug::FPS;
pub use render::{window::Window, texture::Texture, sprite::Sprite, batch::Batch};
pub use math::{mat::Mat, rgba::WHITE};