use crossterm::style::Color::Rgb;
use crate::core::load_map;
use crate::functions::*;
pub enum RenderInterface {
Default, MapFull, MapLayer(MapLayer), MiniMap, InvPage(InvPage), PlayerParams, InfoWorld, InfoItem }
#[derive(Debug)]
pub enum MapLayer {
Base,
Color,
Trigger,
Wall,
SumObj(Summon),
Explore }
#[derive(Debug)]
pub enum InvPage {
Page1, Page2 }
#[derive(Debug)]
pub enum Summon {
Static, Dynamic, NPC, Enemy }
pub fn render_layer(x1: u16, y1: u16, x2: u16, y2: u16, layer: RenderInterface) {
let j = 1;
let i = 1;
let test_offset_x = 90;
let test_offset_y = 60;
match layer {
RenderInterface::Default => { let _ = printch(i, j, &'.'); },
RenderInterface::MapFull => { render_full_map(x1, y1, x2, y2, test_offset_x, test_offset_y); }, RenderInterface::MapLayer(ref ml) => {
match ml {
MapLayer::Base => { render_map_layer(x1, y1, x2, y2, MapLayer::Base, test_offset_x, test_offset_y); },
MapLayer::Color => { render_map_layer(x1, y1, x2, y2, MapLayer::Color, test_offset_x, test_offset_y); },
MapLayer::Trigger => { render_map_layer(x1, y1, x2, y2, MapLayer::Trigger, 0, 0); },
MapLayer::Wall => { render_map_layer(x1, y1, x2, y2, MapLayer::Wall, 0, 0); },
MapLayer::SumObj(ref object) => {
match object {
Summon::Static => printch(i, j, &'!'),
Summon::Dynamic => printch(i, j, &'@'),
Summon::NPC => printch(i, j, &'#'),
Summon::Enemy => printch(i, j, &'$')
}
}
MapLayer::Explore => { render_map_layer(x1, y1, x2, y2, MapLayer::Explore, 0, 0); }
};
},
RenderInterface::MiniMap => { let _ = printch(i, j, &'3'); },
RenderInterface::InvPage(ref page) => {
match page {
InvPage::Page1 => printch(i, j, &'F'),
InvPage::Page2 => printch(i, j, &'H')
};
},
RenderInterface::PlayerParams => { let _ = printch(i, j, &'5'); },
RenderInterface::InfoWorld => { let _ = printch(i, j, &'6'); },
RenderInterface::InfoItem => { let _ = printch(i, j, &'7'); }
};
}
pub fn render_full_map(x1: u16, y1: u16, x2: u16, y2: u16, x_offset: u16, y_offset: u16) {
let loaded_base = load_map(MapLayer::Base);
let loaded_color = load_map(MapLayer::Color);
let mut x_offset_counter: u16 = 0;
let mut y_offset_counter: u16 = 0;
let mut base_row_counter = 1;
for base_row in &loaded_base {
if y_offset_counter < y_offset { y_offset_counter = y_offset_counter + 1; continue; }
let mut base_col_counter = 1;
let temp_index_row = base_row_counter;
let color_row = match loaded_color.get(temp_index_row - 1 + y_offset_counter as usize) { Some(some_string) => some_string,
None => ""
};
let color_chars_vec: Vec<char> = color_row.chars().collect();
let base_chars_vec: Vec<char> = base_row.chars().collect();
for base_char in base_chars_vec {
if x_offset_counter < x_offset { x_offset_counter = x_offset_counter + 1; continue; }
let temp_index_col = base_col_counter;
let color_char = match color_chars_vec.get(temp_index_col - 1 + x_offset as usize) {
Some(some_char) => some_char,
None => &' '
};
match color_char { '.' => set_color(Rgb { r: 71, g: 107, b: 0 }, Rgb { r: 50, g: 92, b: 12 }),
'#' => set_color(Rgb { r: 96, g: 60, b: 0 }, Rgb { r: 87, g: 92, b: 0 }),
',' => set_color(Rgb { r: 85, g: 56, b: 0 }, Rgb { r: 60, g: 90, b: 0 }),
'H' => set_color(Rgb { r: 71, g: 44, b: 0 }, Rgb { r: 54, g: 33, b: 0 }),
'=' => set_color(Rgb { r: 150, g: 107, b: 76 }, Rgb { r: 92, g: 61, b: 12 }),
_ => ()
}
printch(base_col_counter as u16 + x1 - 1, base_row_counter as u16 + y1 - 1, &base_char);
reset_color();
if base_col_counter >= x2 as usize - 1 { break; } else { base_col_counter = base_col_counter + 1; }
}
x_offset_counter = 0;
if base_row_counter >= y2 as usize { break; } else { base_row_counter = base_row_counter + 1; }
}
}
pub fn render_map_layer(x1: u16, y1: u16, x2: u16, y2: u16, map: MapLayer, x_offset: u16, y_offset: u16) {
let loaded_map_pack = load_map(map); let loaded_map: Vec<String> = loaded_map_pack;
{ let x1 = x1 + x_offset;
let x2 = x2 + x_offset;
let y1 = y1;
let y2 = y2;
let mut row_counter = 0;
let mut y_offset_counter = 0;
for map_row in &loaded_map {
let y2 = if y2 < y1 + 1 {y1+1} else {y2};
if y_offset_counter >= y_offset && row_counter <= y2-y1-1 {
let x2 = if x2 < x1 {x1} else {x2};
let end_x: u16 = if x2-x1+x_offset < map_row.len() as u16 {x2-x1+x_offset} else {map_row.len() as u16};
let end_y: u16 = if y1 + row_counter <= y2 {y1+row_counter} else {y2};
printmsg(x1-x_offset, end_y, &map_row[x_offset as usize..end_x as usize]);
row_counter = row_counter + 1;
} else { y_offset_counter = y_offset_counter + 1; }
}
}
}