From 796fe1f45b4fe4f2774ac030e9e8fd7888e3b296 Mon Sep 17 00:00:00 2001 From: Andi-K Date: Sat, 16 May 2015 00:50:13 +0200 Subject: [PATCH] Upgraded to latest Piston and Rust 1.0.0 removed use of unstabel features Gl => GlGraphics --- src/board.rs | 96 +++++++++++++++++++++++++++++++--------------------- src/main.rs | 13 +++---- 2 files changed, 62 insertions(+), 47 deletions(-) diff --git a/src/board.rs b/src/board.rs index 18ceb08..07b929f 100644 --- a/src/board.rs +++ b/src/board.rs @@ -1,10 +1,10 @@ use std::collections::HashSet; -use std::iter::range_step_inclusive; +// use std::iter::range_step_inclusive; use rand::random; use graphics::*; use opengl_graphics::{ - Gl, + GlGraphics, }; use number_renderer::NumberRenderer; use settings::Settings; @@ -18,7 +18,6 @@ fn rgb2rgba(c: [f32; 3]) -> [f32; 4] { [c[0], c[1], c[2], 1.0] } pub struct Board<'a> { tiles: Vec>, score: i32, - settings: &'a Settings, } @@ -53,7 +52,7 @@ impl<'a> Board<'a> { for tile in self.tiles.iter_mut() { tile.update(dt); } - + if self.is_locking() { return; } @@ -68,8 +67,8 @@ impl<'a> Board<'a> { for j in i+1..self.tiles.len() { let tile2 = &self.tiles[j]; if tile2.status != TileState::TileStatic - || tile1.tile_x != tile2.tile_x - || tile1.tile_y != tile2.tile_y { + || tile1.tile_x != tile2.tile_x + || tile1.tile_y != tile2.tile_y { continue; } @@ -88,19 +87,22 @@ impl<'a> Board<'a> { tiles.push(self.tiles[i].clone()); } } - tiles.append(&mut tiles_need_added); + // better but unstable: tiles.append(&mut tiles_need_added); + while let Some(tile_to_add) = tiles_need_added.pop() { + tiles.push(tile_to_add); + } self.tiles = tiles; self.add_score(score_to_added); } } - pub fn render(&self, number_renderer: &NumberRenderer, c: &Context, gl: &mut Gl) { + pub fn render(&self, number_renderer: &NumberRenderer, c: &Context, gl: &mut GlGraphics) { number_renderer.render( - self.score as u32, - self.settings.best_rect[0] + self.settings.best_rect[2] / 2.0, - self.settings.best_rect[1] + self.settings.best_rect[3] / 2.0, - self.settings.best_rect[2], - self.settings.text_light_color, c, gl); + self.score as u32, + self.settings.best_rect[0] + self.settings.best_rect[2] / 2.0, + self.settings.best_rect[1] + self.settings.best_rect[3] / 2.0, + self.settings.best_rect[2], + self.settings.text_light_color, c, gl); self.render_board(c, gl); self.render_tiles(number_renderer, c, gl); @@ -118,20 +120,28 @@ impl<'a> Board<'a> { fn merge_col(&mut self, y_start: i32, y_end: i32, y_step: i32) { if self.is_locking() { + println!("return"); return; } - let mut need_generate = false; + let mut steps: Vec = Vec::with_capacity(self.settings.tile_height as usize); + let mut next_step = y_start; + if y_step < 0 { + while next_step > y_end { steps.push(next_step); next_step += y_step } + } else { + while next_step < y_end { steps.push(next_step); next_step += y_step } + }; loop { // move all tiles to right place - for col in 0..self.settings.tile_width { - for row in range_step_inclusive(y_start, y_end, y_step) { + for col in 0 .. self.settings.tile_width { + // TODO: replace steps by (y_start .. y_end).step_by(y_step) if step_by becomes stable + for row in steps.to_vec() { match self.get_mut_tile(col, row) { None => { match self.get_mut_next_tile(col, row, 0, y_step) { Some(ref mut tile) => { println!("move ({}, {}) to ({}, {})", - tile.tile_x, tile.tile_y, col, row); + tile.tile_x, tile.tile_y, col, row); need_generate = true; tile.start_moving(col, row); }, @@ -150,13 +160,13 @@ impl<'a> Board<'a> { let mut sy = 0; let mut dx = 0; let mut dy = 0; - for row in range_step_inclusive(y_start, y_end, y_step) { + for row in steps.to_vec() { match self.get_tile(col, row) { Some(ref d_tile) => { match self.get_next_tile(col, row, 0, y_step) { Some(ref s_tile) if d_tile.score == s_tile.score - && self.get_tile_count(d_tile.tile_x, d_tile.tile_y) == 1 => { + && self.get_tile_count(d_tile.tile_x, d_tile.tile_y) == 1 => { found = true; dx = d_tile.tile_x; dy = d_tile.tile_y; @@ -206,10 +216,18 @@ impl<'a> Board<'a> { } let mut need_generate = false; + let mut steps: Vec = Vec::with_capacity(self.settings.tile_width as usize); + let mut next_step = x_start; + if x_step < 0 { + while next_step > x_end { steps.push(next_step); next_step += x_step } + } else { + while next_step < x_end { steps.push(next_step); next_step += x_step } + }; loop { // move all tiles to right place for row in 0..self.settings.tile_height { - for col in range_step_inclusive(x_start, x_end, x_step) { + for col in steps.to_vec() { + match self.get_mut_tile(col, row) { None => { match self.get_mut_next_tile(col, row, x_step, 0) { @@ -234,13 +252,13 @@ impl<'a> Board<'a> { let mut sy = 0; let mut dx = 0; let mut dy = 0; - for col in range_step_inclusive(x_start, x_end, x_step) { + for col in steps.to_vec() { match self.get_tile(col, row) { Some(ref d_tile) => { match self.get_next_tile(col, row, x_step, 0) { Some(ref s_tile) if d_tile.score == s_tile.score - && self.get_tile_count(d_tile.tile_x, d_tile.tile_y) == 1 => { + && self.get_tile_count(d_tile.tile_x, d_tile.tile_y) == 1 => { found = true; dx = d_tile.tile_x; dy = d_tile.tile_y; @@ -289,7 +307,7 @@ impl<'a> Board<'a> { let mut x = x + step_x; let mut y = y + step_y; while x >= 0 && x < self.settings.tile_width - && y >= 0 && y < self.settings.tile_height { + && y >= 0 && y < self.settings.tile_height { let tile = self.get_tile(x, y); if tile.is_some() { return tile; @@ -305,7 +323,7 @@ impl<'a> Board<'a> { let mut y = y + step_y; let mut found = false; while x >= 0 && x < self.settings.tile_width - && y >= 0 && y < self.settings.tile_height { + && y >= 0 && y < self.settings.tile_height { let tile = self.get_tile(x, y); if tile.is_some() { found = true; @@ -316,7 +334,7 @@ impl<'a> Board<'a> { } if found { - self.get_mut_tile(x, y) + self.get_mut_tile(x, y) } else { None } @@ -350,25 +368,25 @@ impl<'a> Board<'a> { count } - fn render_board(&self, c: &Context, gl: &mut Gl) { + fn render_board(&self, c: &Context, gl: &mut GlGraphics) { Rectangle::new(rgb2rgba(self.settings.label_color)) - .draw([self.settings.board_padding, - self.settings.board_padding + self.settings.board_offset_y, - self.settings.board_size[0], - self.settings.board_size[1]], - default_draw_state(), - c.transform, - gl); - + .draw([self.settings.board_padding, + self.settings.board_padding + self.settings.board_offset_y, + self.settings.board_size[0], + self.settings.board_size[1]], + default_draw_state(), + c.transform, + gl); + let mut x = self.settings.board_padding + self.settings.tile_padding; let mut y = self.settings.board_padding + self.settings.board_offset_y + self.settings.tile_padding; for _ in 0..self.settings.tile_height { for _ in 0..self.settings.tile_width { Rectangle::new(rgb2rgba(self.settings.tiles_colors[0])) - .draw([x, y, self.settings.tile_size, self.settings.tile_size], - default_draw_state(), - c.transform, - gl); + .draw([x, y, self.settings.tile_size, self.settings.tile_size], + default_draw_state(), + c.transform, + gl); x += self.settings.tile_padding + self.settings.tile_size; } @@ -377,7 +395,7 @@ impl<'a> Board<'a> { } } - fn render_tiles(&self, number_renderer: &NumberRenderer, c: &Context, gl: &mut Gl) { + fn render_tiles(&self, number_renderer: &NumberRenderer, c: &Context, gl: &mut GlGraphics) { for tile in self.tiles.iter() { tile.render(number_renderer, c, gl); } diff --git a/src/main.rs b/src/main.rs index db51236..cea4115 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,3 @@ - -#![feature(core,collections,path_ext)] - extern crate rustc_serialize; extern crate rand; @@ -45,19 +42,19 @@ fn main() { for e in window.events() { use piston::event::{ RenderEvent, PressEvent }; - if let Some(ref args) = e.render_args() { app.render(args, &mut gl); } - if let Some(ref args) = e.update_args() { - app.update(args); + if let Some(ref args) = e.update_args() { + // TODO: only update if necessary + // println!("update"); + app.update(args); } - if let Some(ref args) = e.press_args() { app.key_press(args); } - } +} /* for e in GameIterator::new(&mut window, &game_iter_settings) {