1- use  std:: fs:: File ; 
2- use  std:: path:: PathBuf ; 
3- 
41use  item:: Instance ; 
5- use  libycresources:: common :: types :: space :: Elevation ; 
6- use  libycresources:: formats:: { map,  pal } ; 
7- use  libycresources:: formats:: map :: blueprint ; 
2+ use  libycresources:: formats :: map ; 
3+ use  libycresources:: formats:: map:: tiles :: Group ; 
4+ use  libycresources:: formats:: pal :: Palette ; 
85use  libycresources:: formats:: pro:: meta:: info:: flags:: Root :: Flat ; 
96
10- use  crate :: cli:: export:: darkness:: Darkness ; 
117use  crate :: cli:: export:: filter:: Layers ; 
128use  crate :: error:: Error ; 
139use  crate :: traits:: render:: Provider ; 
@@ -21,37 +17,13 @@ mod sprite;
2117mod  grid; 
2218
2319pub ( crate )  fn  map < ' a ,  P :  Provider > ( 
24-     map :  & ' a  map:: Map , 
20+     tiles :  & ' a  Group , 
21+     protos :  Option < & Vec < & map:: blueprint:: prototype:: Instance > > , 
2522    layers :  & Layers , 
26-     darkness :  Option < & Darkness > , 
27-     elevation :  & Elevation , 
23+     darkness :  u8 , 
2824    provider :  & P , 
29-     resources :  & PathBuf , 
25+     palette :  & Palette , 
3026)  -> Result < Option < ( Vec < ( u8 ,  u8 ,  u8 ) > ,  ( usize ,  usize ) ) > ,  Error < ' a > >  { 
31-     let  default = u8:: try_from ( map. darkness ) 
32-         . map_err ( |_| Error :: Corrupted ( "Map darkness value is out of range." ) ) ?; 
33- 
34-     let  darkness = darkness. map_or ( 
35-         default, 
36-         |d| { 
37-             match  d { 
38-                 Darkness :: None  => 1 , 
39-                 Darkness :: Night  => 2 , 
40-                 Darkness :: Dusk  => 3 , 
41-                 Darkness :: Day  => 4 , 
42-             } 
43-         } , 
44-     ) ; 
45- 
46-     let  tiles = map. tiles 
47-         . iter ( ) 
48-         . find ( |e| {  & e. elevation  == elevation } ) ; 
49- 
50-     let  tiles = match  tiles { 
51-         None  => return  Ok ( None ) , 
52-         Some ( value)  => value
53-     } ; 
54- 
5527    let  floors:  Vec < Instance >  = tiles:: convert ( & tiles. floor ,  provider) ?; 
5628    let  ceilings:  Vec < Instance >  = tiles:: convert ( & tiles. ceiling ,  provider) ?; 
5729
@@ -66,51 +38,41 @@ pub(crate) fn map<'a, P: Provider>(
6638    let  mut  pixels = vec ! [ ( u8 :: MIN ,  u8 :: MIN ,  u8 :: MIN ) ;  w *  h] ; 
6739    let  mut  image = ( & mut  pixels,  ( w,  h) ) ; 
6840
69-     let  file = File :: open ( & resources. join ( "COLOR.PAL" ) ) 
70-         . map_err ( |io| Error :: IO ( io,  "Failed to load main palette." ) ) ?; 
71- 
72-     let  mut  reader = std:: io:: BufReader :: with_capacity ( 1  *  1024  *  1024 ,  file) ; 
73-     let  palette = pal:: parse:: palette ( & mut  reader) 
74-         . map_err ( |i| Error :: Internal ( i,  "Failed to parse main palette." ) ) ?; 
75- 
7641    if  layers. floor  || layers. all ( )  { 
7742        println ! ( "Rendering floor..." ) ; 
78-         tiles:: imprint ( & floors,  false ,  & palette,  darkness,  & mut  image) ?; 
43+         tiles:: imprint ( & floors,  false ,  palette,  darkness,  & mut  image) ?; 
7944    } 
8045
8146    if  layers. overlay  || layers. all ( )  { 
8247        println ! ( "Rendering hexagonal tiles' overlay..." ) ; 
8348        hexes:: overlay ( & mut  image) ?; 
8449    } 
8550
86-     println ! ( "Rendering prototypes..." ) ; 
87-     let  flat:  Vec < & blueprint:: prototype:: Instance >  = map. prototypes . iter ( ) 
88-         . filter ( |p| p. patch . meta . flags . contains ( & Flat ) ) . collect ( ) ; 
89- 
90-     let  other:  Vec < & blueprint:: prototype:: Instance >  = map. prototypes . iter ( ) 
91-         . filter ( |p| !p. patch . meta . flags . contains ( & Flat ) ) . collect ( ) ; 
92- 
93-     protos:: imprint ( 
94-         & flat, 
95-         provider, 
96-         & elevation, 
97-         & palette, 
98-         darkness, 
99-         & layers, 
100-         ( tw,  th) , 
101-         & mut  image, 
102-     ) ?; 
103- 
104-     protos:: imprint ( 
105-         & other, 
106-         provider, 
107-         & elevation, 
108-         & palette, 
109-         darkness, 
110-         & layers, 
111-         ( tw,  th) , 
112-         & mut  image, 
113-     ) ?; 
51+     if  let  Some ( protos)  = protos { 
52+         println ! ( "Rendering prototypes..." ) ; 
53+         let  ( flat,  normal)  = protos. iter ( ) 
54+             . partition ( |p| p. patch . meta . flags . contains ( & Flat ) ) ; 
55+ 
56+         protos:: imprint ( 
57+             & flat, 
58+             provider, 
59+             & palette, 
60+             darkness, 
61+             & layers, 
62+             ( tw,  th) , 
63+             & mut  image, 
64+         ) ?; 
65+ 
66+         protos:: imprint ( 
67+             & normal, 
68+             provider, 
69+             & palette, 
70+             darkness, 
71+             & layers, 
72+             ( tw,  th) , 
73+             & mut  image, 
74+         ) ?; 
75+     } 
11476
11577    if  layers. roof  || layers. all ( )  { 
11678        println ! ( "Rendering roofs..." ) ; 
0 commit comments