|  | @@ -7,8 +7,8 @@ use ggez::input::keyboard::KeyCode;
 | 
	
		
			
			| 7 | 7 |  use ggez::timer::check_update_time;
 | 
	
		
			
			| 8 | 8 |  use ggez::{event, graphics, input, Context, GameResult};
 | 
	
		
			
			| 9 | 9 |  
 | 
	
		
			
			| 10 |  | -use crate::behavior::ItemBehavior;
 | 
	
		
			
			| 11 | 10 |  use crate::behavior::order::Order;
 | 
	
		
			
			|  | 11 | +use crate::behavior::ItemBehavior;
 | 
	
		
			
			| 12 | 12 |  use crate::config::{
 | 
	
		
			
			| 13 | 13 |      ANIMATE_EACH, DEBUG, DEFAULT_SELECTED_SQUARE_SIDE, DEFAULT_SELECTED_SQUARE_SIDE_HALF,
 | 
	
		
			
			| 14 | 14 |      DISPLAY_OFFSET_BY, DISPLAY_OFFSET_BY_SPEED, MAX_FRAME_I, META_EACH, PHYSICS_EACH,
 | 
	
	
		
			
			|  | @@ -63,16 +63,16 @@ impl MainState {
 | 
	
		
			
			| 63 | 63 |          let mut scene_items = vec![];
 | 
	
		
			
			| 64 | 64 |          for x in 0..1 {
 | 
	
		
			
			| 65 | 65 |              for y in 0..4 {
 | 
	
		
			
			| 66 |  | -                let current_behavior = if y % 2 == 0 {
 | 
	
		
			
			| 67 |  | -                    ItemBehavior::Walking(util::vec_from_angle(90.0))
 | 
	
		
			
			| 68 |  | -                } else {
 | 
	
		
			
			| 69 |  | -                    ItemBehavior::Crawling
 | 
	
		
			
			| 70 |  | -                };
 | 
	
		
			
			|  | 66 | +                // let current_behavior = if y % 2 == 0 {
 | 
	
		
			
			|  | 67 | +                //     ItemBehavior::WalkingTo(util::vec_from_angle(90.0))
 | 
	
		
			
			|  | 68 | +                // } else {
 | 
	
		
			
			|  | 69 | +                //     ItemBehavior::CrawlingTo()
 | 
	
		
			
			|  | 70 | +                // };
 | 
	
		
			
			| 71 | 71 |  
 | 
	
		
			
			| 72 | 72 |                  scene_items.push(SceneItem::new(
 | 
	
		
			
			| 73 | 73 |                      SceneItemType::Soldier,
 | 
	
		
			
			| 74 | 74 |                      ScenePoint::new((x as f32 * 24.0) + 100.0, (y as f32 * 24.0) + 100.0),
 | 
	
		
			
			| 75 |  | -                    ItemState::new(current_behavior),
 | 
	
		
			
			|  | 75 | +                    ItemState::new(ItemBehavior::Standing(0)),
 | 
	
		
			
			| 76 | 76 |                  ));
 | 
	
		
			
			| 77 | 77 |              }
 | 
	
		
			
			| 78 | 78 |          }
 | 
	
	
		
			
			|  | @@ -167,13 +167,6 @@ impl MainState {
 | 
	
		
			
			| 167 | 167 |                  SceneItemPrepareOrder::Move(scene_item_usize) => {
 | 
	
		
			
			| 168 | 168 |                      let mut scene_item = self.get_scene_item_mut(*scene_item_usize);
 | 
	
		
			
			| 169 | 169 |                      scene_item.next_order = Some(Order::MoveTo(scene_position));
 | 
	
		
			
			| 170 |  | -
 | 
	
		
			
			| 171 |  | -                    // TODO: remove this code when used in right place
 | 
	
		
			
			| 172 |  | -                    let angle = f32::atan2(
 | 
	
		
			
			| 173 |  | -                        scene_position.y - scene_item.position.y,
 | 
	
		
			
			| 174 |  | -                        scene_position.x - scene_item.position.x,
 | 
	
		
			
			| 175 |  | -                    ) + FRAC_PI_2;
 | 
	
		
			
			| 176 |  | -                    println!("{:?}", angle);
 | 
	
		
			
			| 177 | 170 |                  }
 | 
	
		
			
			| 178 | 171 |              }
 | 
	
		
			
			| 179 | 172 |  
 | 
	
	
		
			
			|  | @@ -241,11 +234,14 @@ impl MainState {
 | 
	
		
			
			| 241 | 234 |          // Scene items movements
 | 
	
		
			
			| 242 | 235 |          for scene_item in self.scene_items.iter_mut() {
 | 
	
		
			
			| 243 | 236 |              match scene_item.state.current_behavior {
 | 
	
		
			
			| 244 |  | -                ItemBehavior::Walking(move_vector) => {
 | 
	
		
			
			|  | 237 | +                ItemBehavior::WalkingTo(scene_point) => {
 | 
	
		
			
			|  | 238 | +                    // FIXME BS NOW: velocity
 | 
	
		
			
			|  | 239 | +                    let move_vector = (scene_point - scene_item.position).normalize() * 1.0;
 | 
	
		
			
			| 245 | 240 |                      // TODO ici il faut calculer le déplacement réél (en fonction des ticks, etc ...)
 | 
	
		
			
			| 246 | 241 |                      scene_item.position.x += move_vector.x;
 | 
	
		
			
			| 247 | 242 |                      scene_item.position.y += move_vector.y;
 | 
	
		
			
			| 248 |  | -                    scene_item.grid_position = util::grid_position_from_scene_point(&scene_item.position);
 | 
	
		
			
			|  | 243 | +                    scene_item.grid_position =
 | 
	
		
			
			|  | 244 | +                        util::grid_position_from_scene_point(&scene_item.position);
 | 
	
		
			
			| 249 | 245 |                  }
 | 
	
		
			
			| 250 | 246 |                  _ => {}
 | 
	
		
			
			| 251 | 247 |              }
 | 
	
	
		
			
			|  | @@ -273,13 +269,13 @@ impl MainState {
 | 
	
		
			
			| 273 | 269 |          // TODO: ici il faut reflechir a comment organiser les comportements
 | 
	
		
			
			| 274 | 270 |  
 | 
	
		
			
			| 275 | 271 |          for scene_item in self.scene_items.iter_mut() {
 | 
	
		
			
			| 276 |  | -            for meta_event in &scene_item.meta_events {
 | 
	
		
			
			| 277 |  | -                match meta_event {
 | 
	
		
			
			| 278 |  | -                    MetaEvent::FeelExplosion => {
 | 
	
		
			
			| 279 |  | -                        scene_item.state = ItemState::new(ItemBehavior::Standing(self.frame_i));
 | 
	
		
			
			| 280 |  | -                    }
 | 
	
		
			
			| 281 |  | -                }
 | 
	
		
			
			| 282 |  | -            }
 | 
	
		
			
			|  | 272 | +            // for meta_event in &scene_item.meta_events {
 | 
	
		
			
			|  | 273 | +            //     match meta_event {
 | 
	
		
			
			|  | 274 | +            //         MetaEvent::FeelExplosion => {
 | 
	
		
			
			|  | 275 | +            //             scene_item.state = ItemState::new(ItemBehavior::Standing(self.frame_i));
 | 
	
		
			
			|  | 276 | +            //         }
 | 
	
		
			
			|  | 277 | +            //     }
 | 
	
		
			
			|  | 278 | +            // }
 | 
	
		
			
			| 283 | 279 |  
 | 
	
		
			
			| 284 | 280 |              // match scene_item.state.current_behavior {
 | 
	
		
			
			| 285 | 281 |              //     ItemBehavior::Crawling => {
 | 
	
	
		
			
			|  | @@ -300,13 +296,10 @@ impl MainState {
 | 
	
		
			
			| 300 | 296 |              scene_item.meta_events.drain(..);
 | 
	
		
			
			| 301 | 297 |  
 | 
	
		
			
			| 302 | 298 |              if let Some(next_order) = &scene_item.next_order {
 | 
	
		
			
			| 303 |  | -                // Compute here if it possible (fear, compatible with current order, etc)
 | 
	
		
			
			|  | 299 | +                // TODO: Compute here if it possible (fear, compatible with current order, etc)
 | 
	
		
			
			| 304 | 300 |                  match next_order {
 | 
	
		
			
			| 305 | 301 |                      Order::MoveTo(move_to_scene_point) => {
 | 
	
		
			
			| 306 | 302 |                          scene_item.current_order = Some(Order::MoveTo(*move_to_scene_point));
 | 
	
		
			
			| 307 |  | -                        // FIXME BS NOW: velocity
 | 
	
		
			
			| 308 |  | -                        let move_vector = (*move_to_scene_point - scene_item.position).normalize() * 1.0;
 | 
	
		
			
			| 309 |  | -                        scene_item.state = ItemState::new(ItemBehavior::Walking(move_vector));
 | 
	
		
			
			| 310 | 303 |                      }
 | 
	
		
			
			| 311 | 304 |                  }
 | 
	
		
			
			| 312 | 305 |                  scene_item.next_order = None;
 | 
	
	
		
			
			|  | @@ -316,11 +309,43 @@ impl MainState {
 | 
	
		
			
			| 316 | 309 |              if let Some(current_order) = &scene_item.current_order {
 | 
	
		
			
			| 317 | 310 |                  match current_order {
 | 
	
		
			
			| 318 | 311 |                      Order::MoveTo(move_to_scene_point) => {
 | 
	
		
			
			| 319 |  | -                        let move_vector = (*move_to_scene_point - scene_item.position).normalize() * 1.0;
 | 
	
		
			
			| 320 |  | -                        println!("{:?}", move_vector);
 | 
	
		
			
			|  | 312 | +                        let change_to_walk = match scene_item.state.current_behavior {
 | 
	
		
			
			|  | 313 | +                            ItemBehavior::Standing(_) => true,
 | 
	
		
			
			|  | 314 | +                            ItemBehavior::CrawlingTo(_) => true,
 | 
	
		
			
			|  | 315 | +                            ItemBehavior::WalkingTo(_) => false,
 | 
	
		
			
			|  | 316 | +                        };
 | 
	
		
			
			|  | 317 | +
 | 
	
		
			
			|  | 318 | +                        if change_to_walk {
 | 
	
		
			
			|  | 319 | +                            scene_item.state =
 | 
	
		
			
			|  | 320 | +                                ItemState::new(ItemBehavior::WalkingTo(*move_to_scene_point));
 | 
	
		
			
			|  | 321 | +                        }
 | 
	
		
			
			| 321 | 322 |                      }
 | 
	
		
			
			| 322 | 323 |                  }
 | 
	
		
			
			| 323 | 324 |              }
 | 
	
		
			
			|  | 325 | +
 | 
	
		
			
			|  | 326 | +            match scene_item.state.current_behavior {
 | 
	
		
			
			|  | 327 | +                ItemBehavior::Standing(_) => {}
 | 
	
		
			
			|  | 328 | +                ItemBehavior::CrawlingTo(scene_point) => {
 | 
	
		
			
			|  | 329 | +                    let angle = f32::atan2(
 | 
	
		
			
			|  | 330 | +                        scene_point.y - scene_item.position.y,
 | 
	
		
			
			|  | 331 | +                        scene_point.x - scene_item.position.x,
 | 
	
		
			
			|  | 332 | +                    ) + FRAC_PI_2;
 | 
	
		
			
			|  | 333 | +                    scene_item.display_angle = angle;
 | 
	
		
			
			|  | 334 | +
 | 
	
		
			
			|  | 335 | +                    let move_vector = (scene_point - scene_item.position).normalize() * 1.0;
 | 
	
		
			
			|  | 336 | +                    println!("{:?}", move_vector);
 | 
	
		
			
			|  | 337 | +                }
 | 
	
		
			
			|  | 338 | +                ItemBehavior::WalkingTo(scene_point) => {
 | 
	
		
			
			|  | 339 | +                    let angle = f32::atan2(
 | 
	
		
			
			|  | 340 | +                        scene_point.y - scene_item.position.y,
 | 
	
		
			
			|  | 341 | +                        scene_point.x - scene_item.position.x,
 | 
	
		
			
			|  | 342 | +                    ) + FRAC_PI_2;
 | 
	
		
			
			|  | 343 | +                    scene_item.display_angle = angle;
 | 
	
		
			
			|  | 344 | +
 | 
	
		
			
			|  | 345 | +                    let move_vector = (scene_point - scene_item.position).normalize() * 1.0;
 | 
	
		
			
			|  | 346 | +                    println!("{:?}", move_vector);
 | 
	
		
			
			|  | 347 | +                }
 | 
	
		
			
			|  | 348 | +            }
 | 
	
		
			
			| 324 | 349 |          }
 | 
	
		
			
			| 325 | 350 |      }
 | 
	
		
			
			| 326 | 351 |  
 |