Make TextureManager use a HashMap

This commit is contained in:
Sijmen 2018-07-29 23:40:43 +02:00
parent ce3efce2d9
commit 0091bf51ee
2 changed files with 39 additions and 37 deletions

View file

@ -53,13 +53,10 @@ fn update(event_pump: &mut EventPump, game_state: &mut GameState) -> bool {
Event::Quit { .. } => return false, Event::Quit { .. } => return false,
Event::KeyDown { Event::KeyDown {
keycode: Some(keycode), keycode: Some(Keycode::Escape),
.. ..
} => { } => {
match keycode { return false;
Keycode::Escape => return false,
_ => {}
};
} }
Event::MouseButtonDown { Event::MouseButtonDown {
@ -125,7 +122,6 @@ fn generate_map() -> Vec<Vec<Tile>> {
for (y, row) in map.iter_mut().enumerate() { for (y, row) in map.iter_mut().enumerate() {
for (x, tile) in row.iter_mut().enumerate() { for (x, tile) in row.iter_mut().enumerate() {
let height = perlin.get2d([x as f64 / 16.0, y as f64 / 16.0]) * 320.0; let height = perlin.get2d([x as f64 / 16.0, y as f64 / 16.0]) * 320.0;
println!("({}, {}) = {}", x, y, height);
tile.height = height as i32; tile.height = height as i32;
} }
} }
@ -155,7 +151,9 @@ pub fn main() {
let texture_creator = canvas.texture_creator(); let texture_creator = canvas.texture_creator();
let mut event_pump = sdl_context.event_pump().unwrap(); let mut event_pump = sdl_context.event_pump().unwrap();
let texture_manager = TextureManager::new(&texture_creator); let mut texture_manager = TextureManager::new();
texture_manager.load_textures(&texture_creator);
let map = generate_map(); let map = generate_map();
let mut game_state = GameState::new(); let mut game_state = GameState::new();

View file

@ -1,50 +1,54 @@
use sdl2::image::LoadTexture; use sdl2::image::LoadTexture;
use sdl2::render::{Texture, TextureCreator}; use sdl2::render::{Texture, TextureCreator};
use sdl2::video::WindowContext; use sdl2::video::WindowContext;
use std::collections::HashMap;
use std::ops::Index; use std::ops::Index;
pub struct TextureManager<'a> { pub struct TextureManager<'a> {
bridge_east: Texture<'a>, textures: HashMap<&'a str, Texture<'a>>,
bridge_north: Texture<'a>,
crossroad: Texture<'a>,
dirt: Texture<'a>,
dirt_high: Texture<'a>,
grass: Texture<'a>,
} }
impl<'a> TextureManager<'a> { impl<'a> TextureManager<'a> {
pub fn new(texture_creator: &'a TextureCreator<WindowContext>) -> TextureManager<'a> { pub fn new() -> Self {
TextureManager { Self {
bridge_east: texture_creator textures: HashMap::new(),
.load_texture("data/png/bridgeEast.png")
.unwrap(),
bridge_north: texture_creator
.load_texture("data/png/bridgeNorth.png")
.unwrap(),
crossroad: texture_creator
.load_texture("data/png/crossroad.png")
.unwrap(),
dirt: texture_creator.load_texture("data/png/dirt.png").unwrap(),
dirt_high: texture_creator
.load_texture("data/png/dirtHigh.png")
.unwrap(),
grass: texture_creator.load_texture("data/png/grass.png").unwrap(),
} }
} }
fn load_texture(
&mut self,
texture_creator: &'a TextureCreator<WindowContext>,
name: &'a str,
path: &str,
) {
let texture = texture_creator.load_texture(path).unwrap();
self.textures.insert(name, texture);
}
pub fn load_textures(&mut self, texture_creator: &'a TextureCreator<WindowContext>) {
self.load_texture(texture_creator, "bridge_east", "data/png/bridgeEast.png");
self.load_texture(texture_creator, "bridge_north", "data/png/bridgeNorth.png");
self.load_texture(texture_creator, "crossroad", "data/png/crossroad.png");
self.load_texture(texture_creator, "dirt", "data/png/dirt.png");
self.load_texture(texture_creator, "dirt_high", "data/png/dirtHigh.png");
self.load_texture(texture_creator, "grass", "data/png/grass.png");
}
} }
impl<'a> Index<usize> for TextureManager<'a> { impl<'a> Index<usize> for TextureManager<'a> {
type Output = Texture<'a>; type Output = Texture<'a>;
fn index(&self, index: usize) -> &Texture<'a> { fn index(&self, index: usize) -> &Texture<'a> {
match index { let key = match index {
1 => &self.bridge_east, 1 => "bridge_east",
2 => &self.bridge_north, 2 => "bridge_north",
3 => &self.crossroad, 3 => "crossroad",
4 => &self.dirt, 4 => "dirt",
5 => &self.dirt_high, 5 => "dirt_high",
6 => &self.grass, 6 => "grass",
_ => panic!("invalid texture ID"), _ => panic!("invalid texture ID"),
} };
&self.textures[key]
} }
} }