Hello World

This commit is contained in:
Astro 2020-03-04 18:28:07 +01:00
commit 0effe28bfa
5 changed files with 114 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
/target
Cargo.lock

10
Cargo.toml Normal file
View File

@ -0,0 +1,10 @@
[package]
name = "affection"
version = "0.1.0"
authors = ["Astro <astro@spaceboyz.net>"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
sdl2 = "0.33"

18
examples/example00.rs Normal file
View File

@ -0,0 +1,18 @@
use affection::*;
struct Example {
}
impl Callbacks for Example {
fn load_state() -> Self {
Example {}
}
fn handle_event(&mut self, ev: Event) {}
fn update(&mut self) {}
fn draw(&mut self, graphics: &mut Graphics) {}
fn clean_up(self) {}
}
pub fn main() {
run::<Example>(Config::default());
}

33
src/graphics.rs Normal file
View File

@ -0,0 +1,33 @@
use sdl2::{video::Window, EventPump, event::EventPollIterator};
pub use sdl2::event::Event;
use super::Config;
pub struct Graphics {
events: EventPump,
window: Window,
}
impl Graphics {
pub fn new(config: &Config) -> Self {
let sdl_context = sdl2::init().unwrap();
let video_subsystem = sdl_context.video().unwrap();
let mut window = video_subsystem.window(
&config.window_title,
config.window_size.0,
config.window_size.1
)
.opengl()
.build()
.unwrap();
window.show();
Graphics {
events: sdl_context.event_pump().unwrap(),
window,
}
}
pub fn get_events(&mut self) -> EventPollIterator {
self.events.poll_iter()
}
}

51
src/lib.rs Normal file
View File

@ -0,0 +1,51 @@
pub mod graphics;
pub use graphics::{Graphics, Event};
pub struct Config {
window_title: String,
window_size: (u32, u32),
}
impl Default for Config {
fn default() -> Self {
Config {
window_title: "Affection".to_owned(),
window_size: (800, 600),
}
}
}
pub trait Callbacks {
fn load_state() -> Self;
fn pre_loop(&mut self) {
}
fn handle_event(&mut self, ev: Event);
fn update(&mut self);
fn draw(&mut self, graphics: &mut Graphics);
fn clean_up(self);
}
pub fn run<C: Callbacks>(config: Config) {
let mut graphics = Graphics::new(&config);
let mut state = C::load_state();
state.pre_loop();
loop {
state.update();
for ev in graphics.get_events() {
state.handle_event(ev);
}
state.draw(&mut graphics);
}
state.clean_up();
}
#[cfg(test)]
mod tests {
use super::Config;
#[test]
fn it_works() {
let _config = Config::default();
}
}