|  | @@ -1,6 +1,7 @@
 | 
	
		
			
			| 1 | 1 |  use ggez;
 | 
	
		
			
			| 2 | 2 |  use ggez::event;
 | 
	
		
			
			| 3 | 3 |  use ggez::graphics;
 | 
	
		
			
			|  | 4 | +use ggez::graphics::{DrawMode, MeshBuilder};
 | 
	
		
			
			| 4 | 5 |  use ggez::nalgebra as na;
 | 
	
		
			
			| 5 | 6 |  use ggez::timer::check_update_time;
 | 
	
		
			
			| 6 | 7 |  use ggez::{Context, GameResult};
 | 
	
	
		
			
			|  | @@ -33,8 +34,6 @@ struct SpriteInfo {
 | 
	
		
			
			| 33 | 34 |      tile_count: u16,
 | 
	
		
			
			| 34 | 35 |      tile_width: f32,
 | 
	
		
			
			| 35 | 36 |      tile_height: f32,
 | 
	
		
			
			| 36 |  | -    half_tile_width: f32,
 | 
	
		
			
			| 37 |  | -    half_tile_height: f32,
 | 
	
		
			
			| 38 | 37 |  }
 | 
	
		
			
			| 39 | 38 |  
 | 
	
		
			
			| 40 | 39 |  impl SpriteInfo {
 | 
	
	
		
			
			|  | @@ -53,19 +52,8 @@ impl SpriteInfo {
 | 
	
		
			
			| 53 | 52 |              tile_count,
 | 
	
		
			
			| 54 | 53 |              tile_width,
 | 
	
		
			
			| 55 | 54 |              tile_height,
 | 
	
		
			
			| 56 |  | -            half_tile_width: tile_width / 2.0,
 | 
	
		
			
			| 57 |  | -            half_tile_height: tile_height / 2.0,
 | 
	
		
			
			| 58 | 55 |          }
 | 
	
		
			
			| 59 | 56 |      }
 | 
	
		
			
			| 60 |  | -
 | 
	
		
			
			| 61 |  | -    pub fn as_draw_param(&self, current_frame: f32) -> graphics::DrawParam {
 | 
	
		
			
			| 62 |  | -        graphics::DrawParam::new().src(graphics::Rect::new(
 | 
	
		
			
			| 63 |  | -            current_frame as f32 * self.relative_tile_width,
 | 
	
		
			
			| 64 |  | -            self.relative_start_y,
 | 
	
		
			
			| 65 |  | -            self.relative_tile_width,
 | 
	
		
			
			| 66 |  | -            self.relative_tile_height,
 | 
	
		
			
			| 67 |  | -        ))
 | 
	
		
			
			| 68 |  | -    }
 | 
	
		
			
			| 69 | 57 |  }
 | 
	
		
			
			| 70 | 58 |  
 | 
	
		
			
			| 71 | 59 |  enum SpriteType {
 | 
	
	
		
			
			|  | @@ -129,12 +117,17 @@ impl SceneItem {
 | 
	
		
			
			| 129 | 117 |          }
 | 
	
		
			
			| 130 | 118 |      }
 | 
	
		
			
			| 131 | 119 |  
 | 
	
		
			
			| 132 |  | -    pub fn position_with_tile_decal(&self) -> na::Point2<f32> {
 | 
	
		
			
			|  | 120 | +    pub fn as_draw_param(&self, current_frame: f32) -> graphics::DrawParam {
 | 
	
		
			
			| 133 | 121 |          let sprite_info = self.sprite_info();
 | 
	
		
			
			| 134 |  | -        na::Point2::new(
 | 
	
		
			
			| 135 |  | -            self.position.x - sprite_info.half_tile_width,
 | 
	
		
			
			| 136 |  | -            self.position.y - sprite_info.half_tile_height,
 | 
	
		
			
			| 137 |  | -        )
 | 
	
		
			
			|  | 122 | +        graphics::DrawParam::new()
 | 
	
		
			
			|  | 123 | +            .src(graphics::Rect::new(
 | 
	
		
			
			|  | 124 | +                current_frame as f32 * sprite_info.relative_tile_width,
 | 
	
		
			
			|  | 125 | +                sprite_info.relative_start_y,
 | 
	
		
			
			|  | 126 | +                sprite_info.relative_tile_width,
 | 
	
		
			
			|  | 127 | +                sprite_info.relative_tile_height,
 | 
	
		
			
			|  | 128 | +            ))
 | 
	
		
			
			|  | 129 | +            .rotation(90.0f32.to_radians())
 | 
	
		
			
			|  | 130 | +            .offset(na::Point2::new(0.5, 0.5))
 | 
	
		
			
			| 138 | 131 |      }
 | 
	
		
			
			| 139 | 132 |  }
 | 
	
		
			
			| 140 | 133 |  
 | 
	
	
		
			
			|  | @@ -168,7 +161,7 @@ impl MainState {
 | 
	
		
			
			| 168 | 161 |                  };
 | 
	
		
			
			| 169 | 162 |  
 | 
	
		
			
			| 170 | 163 |                  scene_items.push(SceneItem::new(
 | 
	
		
			
			| 171 |  | -                    na::Point2::new(x as f32 * 24.0, y as f32 * 24.0),
 | 
	
		
			
			|  | 164 | +                    na::Point2::new((x as f32 * 24.0) + 100.0, (y as f32 * 24.0) + 100.0),
 | 
	
		
			
			| 172 | 165 |                      ItemState::new(current_behavior),
 | 
	
		
			
			| 173 | 166 |                  ));
 | 
	
		
			
			| 174 | 167 |              }
 | 
	
	
		
			
			|  | @@ -255,8 +248,7 @@ impl MainState {
 | 
	
		
			
			| 255 | 248 |  impl event::EventHandler for MainState {
 | 
	
		
			
			| 256 | 249 |      fn update(&mut self, ctx: &mut Context) -> GameResult {
 | 
	
		
			
			| 257 | 250 |          while check_update_time(ctx, TARGET_FPS) {
 | 
	
		
			
			| 258 |  | -            // FIXME: gérer ici la maj des physics, animate, meta etc
 | 
	
		
			
			| 259 |  | -            // meta: calculer par ex qui voit qui (soldat voit un ennemi: ajouter l'event a vu
 | 
	
		
			
			|  | 251 | +            // TODO: meta: calculer par ex qui voit qui (soldat voit un ennemi: ajouter l'event a vu
 | 
	
		
			
			| 260 | 252 |              // ennemi, dans animate il se mettra a tirer)
 | 
	
		
			
			| 261 | 253 |              let tick_sprite = self.frame_i % SPRITE_EACH == 0;
 | 
	
		
			
			| 262 | 254 |              let tick_animate = self.frame_i % ANIMATE_EACH == 0;
 | 
	
	
		
			
			|  | @@ -299,19 +291,34 @@ impl event::EventHandler for MainState {
 | 
	
		
			
			| 299 | 291 |      fn draw(&mut self, ctx: &mut Context) -> GameResult {
 | 
	
		
			
			| 300 | 292 |          graphics::clear(ctx, graphics::BLACK);
 | 
	
		
			
			| 301 | 293 |  
 | 
	
		
			
			|  | 294 | +        let mut mesh_builder = MeshBuilder::new();
 | 
	
		
			
			|  | 295 | +
 | 
	
		
			
			| 302 | 296 |          for scene_item in self.scene_items.iter() {
 | 
	
		
			
			| 303 | 297 |              self.scene_items_sprite_batch.add(
 | 
	
		
			
			| 304 | 298 |                  scene_item
 | 
	
		
			
			| 305 |  | -                    .sprite_info()
 | 
	
		
			
			| 306 | 299 |                      .as_draw_param(scene_item.current_frame as f32)
 | 
	
		
			
			| 307 |  | -                    .dest(scene_item.position_with_tile_decal()),
 | 
	
		
			
			|  | 300 | +                    .dest(scene_item.position.clone()),
 | 
	
		
			
			|  | 301 | +            );
 | 
	
		
			
			|  | 302 | +            mesh_builder.circle(
 | 
	
		
			
			|  | 303 | +                DrawMode::fill(),
 | 
	
		
			
			|  | 304 | +                scene_item.position.clone(),
 | 
	
		
			
			|  | 305 | +                2.0,
 | 
	
		
			
			|  | 306 | +                2.0,
 | 
	
		
			
			|  | 307 | +                graphics::WHITE,
 | 
	
		
			
			| 308 | 308 |              );
 | 
	
		
			
			| 309 | 309 |          }
 | 
	
		
			
			|  | 310 | +
 | 
	
		
			
			|  | 311 | +        let mesh = mesh_builder.build(ctx)?;
 | 
	
		
			
			| 310 | 312 |          graphics::draw(
 | 
	
		
			
			| 311 | 313 |              ctx,
 | 
	
		
			
			| 312 | 314 |              &self.scene_items_sprite_batch,
 | 
	
		
			
			| 313 | 315 |              graphics::DrawParam::new().dest(na::Point2::new(0.0, 0.0)),
 | 
	
		
			
			| 314 | 316 |          )?;
 | 
	
		
			
			|  | 317 | +        graphics::draw(
 | 
	
		
			
			|  | 318 | +            ctx,
 | 
	
		
			
			|  | 319 | +            &mesh,
 | 
	
		
			
			|  | 320 | +            graphics::DrawParam::new().dest(na::Point2::new(0.0, 0.0)),
 | 
	
		
			
			|  | 321 | +        )?;
 | 
	
		
			
			| 315 | 322 |  
 | 
	
		
			
			| 316 | 323 |          self.scene_items_sprite_batch.clear();
 | 
	
		
			
			| 317 | 324 |          graphics::present(ctx)?;
 |