An easy way to make bitmaps to be drawn on a Nokia N5110 lcd display
Dependencies: N5110_fordrawings
Dependents: DCGame el14m2l_Dungeon_Crawler_Game
drawings.cpp
- Committer:
- Martyrtle
- Date:
- 2016-05-05
- Revision:
- 0:9fcda3ae181c
File content as of revision 0:9fcda3ae181c:
/** @file drawings.cpp @brief Member functions implementations */ #include "drawings.h" extern Screen screen; void Screen::init() { for(int i=0; i<3; i++) { for(int j=0; j<48; j++) { for(int k=0; k<84; k++) { layers[j][k][i]=0; } } } } void Screen::set_pixel(int x, int y, int layer) { layers[y][x][layer]=1; } void Screen::clear_pixel(int x, int y, int layer) { layers[y][x][layer]=2; } void Screen::clear_layer(int layer) { for(int i=0; i<48; i++) { for(int j=0; j<84; j++) { layers[i][j][layer]=0; } } } void Screen::clear() { for(int i=0; i<3; i++) { clear_layer(i); } } void Screen::draw_layer(int layer) { for(int i=0; i<48; i++) { for(int j=0; j<84; j++) { switch(layers[i][j][layer]) { case 1: lcd.setPixel(j,i); break; case 2: lcd.clearPixel(j,i); break; default: break; } } } } void Screen::draw() { for(int i=0; i<3; i++) { draw_layer(i); } } bool Screen::get_pixel(int x, int y, int layer) { return layers[y][x][layer]; } void object::fill(const char array[][3]) { for(int i=0; i<height; i++) { for(int j=0; j<width; j++) { line[i][j] = array[i][j]; } } } void object::fill(const char array[][5]) { for(int i=0; i<height; i++) { for(int j=0; j<width; j++) { line[i][j] = array[i][j]; } } } void object::fill(const char array[][6]) { for(int i=0; i<height; i++) { for(int j=0; j<width; j++) { line[i][j] = array[i][j]; } } } void object::fill(const char array[][13]) { for(int i=0; i<height; i++) { for(int j=0; j<width; j++) { line[i][j] = array[i][j]; } } } void object::fill(const char array[][25]) { for(int i=0; i<height; i++) { for(int j=0; j<width; j++) { line[i][j] = array[i][j]; } } } void object::draw(int x,int y) { for(int i=0; i < height; i++) { for(int j=0; j < width; j++) { switch(line[i][j]) { case 1: lcd.setPixel(x+j,y-i); break; case 2: lcd.clearPixel(x+j,y-i); break; default: break; } } } } void object::draw_screen(int x,int y, int layer) { for(int i=0; i < height; i++) { for(int j=0; j < width; j++) { switch(line[i][j]) { case 1: screen.set_pixel(x+j,y-i,layer); break; case 2: screen.clear_pixel(x+j,y-i,layer); break; default: break; } } } } void object::set(int _width,int _height) { width = _width; height = _height; line = new char*[height]; for(int i=0; i<height; i++) { line[i] = new char[width]; } } bool object::check_collision(int x, int y) { for(int j=0; j<width; j++) { if(screen.get_pixel(x+j,y-height,GAME)) { return 1; } } return 0; } void animation::draw(int x,int y) { switch(state) { case 0: state1.draw(x,y); if(counter == divider) { counter = 0; if(next == 0) { state = 1; break; } else { state = 2; break; } } else { counter++; break; } case 1: state2.draw(x,y); if(counter == divider) { counter = 0; state = 0; next = 1; break; } else { counter++; break; } case 2: state3.draw(x,y); if(counter == divider) { counter = 0; state = 0; next = 0; break; } else { counter++; break; } } } void animation::draw_screen(int x,int y, int layer) { switch(state) { case 0: state1.draw_screen(x,y,layer); if(counter == divider) { counter = 0; if(next == 0) { state = 1; break; } else { state = 2; break; } } else { counter++; break; } case 1: state2.draw_screen(x,y,layer); if(counter == divider) { counter = 0; state = 0; next = 1; break; } else { counter++; break; } case 2: state3.draw_screen(x,y,layer); if(counter == divider) { counter = 0; state = 0; next = 0; break; } else { counter++; break; } } } void Background::init() { for(int i=0; i<48; i++) { for(int j=0; j<84; j++) { wall[i][j]=0; } } //sets the mark_ver's mark_hor_obj.draw_screen(21,22,BG); mark_ver_obj.draw_screen(36,36,BG); mark_ver_obj.draw_screen(55,12,BG); mark_hor_obj.draw_screen(68,18,BG); mark_ver_obj.draw_screen(81,28,BG); //sets the mark_hor's mark_hor_obj.draw_screen(7,14,BG); mark_hor_obj.draw_screen(18,23,BG); mark_hor_obj.draw_screen(31,24,BG); mark_ver_obj.draw_screen(42,11,BG); mark_ver_obj.draw_screen(76,37,BG); //sets the rocks' rocks_obj.draw_screen(13,42,BG); rocks_obj.draw_screen(38,42,BG); rocks_obj.draw_screen(65,42,BG); } void Background::fill(char array[48][84][3]) { for(int i=0; i<48; i++) { for(int j=0; j<84; j++) { wall[i][j] = array[i][j][BG]; } } } void Background::draw() { int x; for(int i=83; i>-1; i--) { for(int j=0; j<48; j++) { switch(wall[j][i]) { case 1: if((i-counter)>=0) { x=i-counter; } else { x=84+(i-counter); } lcd.setPixel(x,j); break; case 2: if((i-counter)>=0) { x=i-counter; } else { x=84+(i-counter); } lcd.clearPixel(x,j); break; default: break; } } } counter++; if(counter>84) { counter=0; } } void Background::draw_screen(int layer) { int x; for(int i=83; i>-1; i--) { for(int j=0; j<48; j++) { switch(wall[j][i]) { case 1: if((i-counter)>=0) { x=i-counter; } else { x=84+(i-counter); } screen.set_pixel(x,j,layer); break; case 2: if((i-counter)>=0) { x=i-counter; } else { x=84+(i-counter); } screen.clear_pixel(x,j,layer); break; default: break; } } } counter++; if(counter>84) { counter=0; } }