summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob L. Kreuze <jakob@memeware.net>2018-06-23 21:19:02 -0400
committerJakob L. Kreuze <jakob@memeware.net>2018-06-23 21:19:02 -0400
commit9021cc7db0f434fa9686bda1221b80403ea0b0cb (patch)
tree13620746c7fba9e688b0d22b7cfc6d9be45952da
parent68b5ce87bc6b40e2b3d575e1150050bbcc954f17 (diff)
First input system exposing an interface that definitely isn't going to be used in the final versionHEADmaster
-rw-r--r--src/gl_renderer.rs46
-rw-r--r--src/input.rs20
-rw-r--r--src/main.rs12
3 files changed, 75 insertions, 3 deletions
diff --git a/src/gl_renderer.rs b/src/gl_renderer.rs
index 64f9151..9f71074 100644
--- a/src/gl_renderer.rs
+++ b/src/gl_renderer.rs
@@ -19,16 +19,58 @@ extern crate simple_error;
use std::error::Error;
+use self::glium::glutin;
+
use bitmap::BitmapManager;
+use input::Event;
/// Renderer using the OpenGL library.
-pub struct GLRenderer;
+pub struct GLRenderer {
+ events_loop: glutin::EventsLoop,
+ display: glium::Display,
+}
impl GLRenderer {
/// Instantiate a new instance of the renderer.
pub fn new(bitmaps: &BitmapManager) -> Result<GLRenderer, Box<Error>> {
let _font = bitmaps.get_font("textfont").unwrap();
- Ok(GLRenderer { })
+ let events_loop = glutin::EventsLoop::new();
+ let window = glutin::WindowBuilder::new();
+ let context = glutin::ContextBuilder::new();
+ let display = glium::Display::new(window, context, &events_loop)?;
+
+ Ok(GLRenderer { events_loop, display })
+ }
+
+ // TODO: Document this.
+ fn convert_event(ev: glutin::DeviceEvent) -> Event {
+ match ev {
+ // glutin::DeviceEvent::Button { button, state } => {
+ // if state == glutin::ElementState::Pressed {
+ // Event::KeyDown(button as u8)
+ // } else {
+ // Event::KeyUp(button as u8)
+ // }
+ // },
+ glutin::DeviceEvent::Key(press) => {
+ Event::KeyDown(press.scancode as u8)
+ }
+ _ => Event::None,
+ }
+ }
+
+ // TODO: Document this.
+ pub fn handle_input<F>(&mut self, mut on_event: F)
+ where F: FnMut(Event) {
+ self.events_loop.poll_events(|ev| {
+ match ev {
+ glutin::Event::DeviceEvent { device_id: _, event } => {
+ let equivalent = GLRenderer::convert_event(event);
+ on_event(equivalent);
+ },
+ _ => (),
+ }
+ });
}
}
diff --git a/src/input.rs b/src/input.rs
new file mode 100644
index 0000000..8303cf0
--- /dev/null
+++ b/src/input.rs
@@ -0,0 +1,20 @@
+// Copyright (C) 2018 Jakob L. Kreuze, All Rights Reserved.
+//
+// This file is part of rebuild.
+//
+// rebuild is free software: you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the Free Software
+// Foundation, either version 3 of the License, or (at your option) any later
+// version.
+//
+// rebuild is distributed in the hope that it will be useful, but WITHOUT ANY
+// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+// A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along with
+// rebuild. If not, see <http://www.gnu.org/licenses/>.
+
+pub enum Event {
+ KeyDown(u8),
+ None,
+}
diff --git a/src/main.rs b/src/main.rs
index 3b7660b..462ac17 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -22,6 +22,7 @@ use std::process;
mod bitmap;
mod gl_renderer;
mod grp;
+mod input;
mod path;
mod world;
@@ -42,5 +43,14 @@ fn main() {
let bitmaps = bitmap::BitmapManager::new(&groups).unwrap();
let _tile = bitmaps.get_tile(0);
- let _renderer = gl_renderer::GLRenderer::new(&bitmaps);
+ let mut renderer = gl_renderer::GLRenderer::new(&bitmaps).unwrap();
+
+ loop {
+ renderer.handle_input(|ev| {
+ match ev {
+ input::Event::KeyDown(key) => println!("{}", key),
+ _ => (),
+ }
+ });
+ }
}