1+ //! # Simulation Module
2+ //! Dron simulasyon nesnelerini oluşturan, yöneten modül enstrümanlarını içerir
3+ //!
4+ //! ## Structs
5+ //! * `SimulationController`
6+
17use crate :: data:: * ;
28use crate :: model:: * ;
9+ use rand:: Rng ;
10+ use std:: fs:: File ;
11+ use std:: io:: Write ;
312
413#[ allow( dead_code) ]
514pub struct SimulationController < ' a > {
@@ -11,19 +20,39 @@ impl SimulationController<'_> {
1120 pub fn new ( ) -> Self {
1221 SimulationController { drones : Vec :: new ( ) }
1322 }
23+
24+ /// # Drone Yükleme Fonksiyonu
25+ ///
26+ /// Sahaya parametre olarak verilen sayıda drone ekler.
27+ ///
28+ /// ## Arguments
29+ /// * `drone_count: i32` türünden drone sayısını ifade eder
30+ ///
31+ /// ## Returns
32+ /// * `bool:` İşlemin başarılı olup olmadığı bilgisidir
33+ ///
34+ /// ## Examples
35+ /// ```rust
36+ /// use crate::controller::SimulationController;
37+ ///
38+ /// let mut simulator = SimulationController::new();
39+ /// let load_result = simulator.load(10);
40+ /// ```
1441 pub fn load ( & mut self , drone_count : i32 ) -> bool {
42+ let mut rng = rand:: rng ( ) ;
43+
1544 for i in 0 ..drone_count {
16- let model = DRONE_MODELS [ get_random_number ( DRONE_MODELS . len ( ) ) ] ;
45+ let model = DRONE_MODELS [ rng . random_range ( 0 .. DRONE_MODELS . len ( ) ) ] ;
1746 self . drones . push ( Drone {
1847 id : i as u32 ,
1948 energy_level : 100.0 ,
2049 model,
2150 is_alive : true ,
2251 location : Location {
23- x : get_random_between ( 1 , 100 ) as f32 ,
24- y : get_random_between ( 1 , 100 ) as f32 ,
25- z : get_random_between ( 1 , 100 ) as f32 ,
26- caption : "" ,
52+ x : rng . random_range ( 0 .. 100 ) as f32 ,
53+ y : rng . random_range ( 0 .. 100 ) as f32 ,
54+ z : rng . random_range ( 0 .. 100 ) as f32 ,
55+ caption : LOCATION_CAPTIONS [ rng . random_range ( 0 .. LOCATION_CAPTIONS . len ( ) ) ] ,
2756 } ,
2857 } )
2958 }
@@ -33,6 +62,29 @@ impl SimulationController<'_> {
3362 self . drones . len ( )
3463 }
3564 pub fn get_random ( & self ) -> Drone {
36- self . drones [ 0 ]
65+ let mut rng = rand:: rng ( ) ;
66+ self . drones [ rng. random_range ( 0 ..self . drones . len ( ) ) ]
67+ }
68+
69+ pub fn save ( & self , path : & str ) -> std:: io:: Result < u32 > {
70+ let mut content = String :: new ( ) ;
71+ for drone in & self . drones {
72+ content. push_str ( format ! ( "{}\n " , & drone. to_string( ) ) . as_str ( ) ) ;
73+ }
74+
75+ let mut f = File :: create ( path) ?;
76+ // let mut f = OpenOptions::new().append(true).write(true).open(path)?;
77+ f. write_all ( content. as_bytes ( ) ) ?;
78+ Ok ( content. len ( ) as u32 )
79+ }
80+
81+ pub fn load_from ( path : & str ) -> std:: io:: Result < ( ) > {
82+ //todo@buraksenyurt Aşağıdaki maddeler tamamlanmalı
83+
84+ // Dosya gerçekten var mı kontrolü?
85+ // Dosya içeriği dolu mu?
86+ // Dosya satırları gerçekten Drone verisi mi içeriyor mu? (Satır bazında yapılabilir)
87+ // Dosya satırlarını Drone türünden nesneler çevirip self üstünde vektöre eklemek lazım
88+ Ok ( ( ) )
3789 }
3890}
0 commit comments