int GraphicsManager::drawFrame(Position world_pos, Frame frame,bool centered, int color) { string str = frame.getString(); if (str == "") { return -1; //Empty frame } int x_offset, y_offset; if (centered) { x_offset = frame.getWidth() /2; y_offset = frame.getHeight() /2; } else { x_offset = 0; y_offset = 0; } int z = color; //Draw characters for (int y = 0; y < frame.getHeight(); y++) { for (int x = 0; x < frame.getWidth(); x++) { Position temp_pos(world_pos.getX() - x_offset + x, world_pos.getY() - y_offset + y); drawCh(temp_pos, str[y * frame.getWidth() + x], z); } } return 0; }
// Draw single sprite frame at screen location (x,y) with color. // If centered true then center frame at (x,y). // Return 0 if ok, else -1. int df::GraphicsManager::drawFrame(df::Position world_pos, df::Frame frame, bool centered, Color color) const{ // Error check empty string. if (frame.getString().compare("") == 0){ return -1; } int x_offset, y_offset; // Centered? Then offset (x,y) by 1/2 (width,height). if (centered){ x_offset = frame.getWidth() / 2; y_offset = frame.getHeight() / 2; } else{ x_offset = 0; y_offset = 0; } // Frame data stored in string. std::string str = frame.getString(); // Draw row by row, character by character. for (int y = 0; y < frame.getHeight(); y++){ for (int x = 0; x < frame.getWidth(); x++){ Position temp_pos(world_pos.getX() - x_offset + x, world_pos.getY() - y_offset + y); drawCh(temp_pos, str[y * frame.getWidth() + x], color); }// x }// y }
// Draw string at screen location (x,y) with color. // Justified LEFT, CENTER or RIGHT. // Return 0 if ok, else -1. int df::GraphicsManager::drawString(Position world_pos, std::string str, Justification just, Color color) const{ // Get starting position. Position starting_pos = world_pos; switch (just){ case CENTER_JUSTIFIED: starting_pos.setX(world_pos.getX() - str.size() / 2); break; case RIGHT_JUSTIFIED: starting_pos.setX(world_pos.getX() - str.size()); break; case LEFT_JUSTIFIED: break; default: break; } int ret; // Draw string character by character. for (int i = 0; i < str.size(); i++){ Position temp_pos(starting_pos.getX() + i, starting_pos.getY()); ret = df::GraphicsManager::getInstance().drawCh(temp_pos, str[i], color); } return ret; }
void GameOver::draw() { df::Frame frame = this->getSprite()->getFrame(0); int width = frame.getWidth(); int height = frame.getHeight(); std::string framestr = frame.getString(); df::GraphicsManager &graphics_manager = df::GraphicsManager::getInstance(); for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { char char_to_draw = framestr[i*width + j]; if (char_to_draw != this->getTransparency()) { df::Position temp_pos(1 + j, 1 + i); graphics_manager.drawCh(temp_pos, char_to_draw, this->getColor(), true); } } } }
void Gaussian_lookups::set_lookup_tables(Array2 <doublevar> & latvec, Array1 <doublevar> & origin, Array1 <Center> & centers) { int ncenters=centers.GetDim(0); // int nbasis=basis.GetDim(0); //Find the centers that are within the cell Pbc_enforcer pbc; pbc.init(latvec); pbc.setOrigin(origin); Array1 <int> center_in_cell(ncenters); int ncenters_inequivalent=0; Array1 <int> inequiv_centers(ncenters); for(int cen=0; cen< ncenters; cen++) { center_in_cell(cen)=pbc.isInside(centers(cen).pos); if(center_in_cell(cen)==1) { inequiv_centers(ncenters_inequivalent++) = cen; } } //cout << "There are " << ncenters << " total centers, of which " // << ncenters_inequivalent << " are in the simulation cell." << endl; //For the centers that aren't in the cell, find their equivalent //one within. equivalent_center.Resize(ncenters); Array1 <doublevar> temp_pos(3); for(int cen=0; cen < ncenters; cen++) { if(!center_in_cell(cen)) { temp_pos=centers(cen).pos; pbc.enforcePbc(temp_pos); //cout << "reduced position "; //for(int d=0; d < 3; d++) cout << temp_pos(d) << " "; //cout << endl; int found_ecen=0; for(int j=0; j< ncenters_inequivalent; j++) { int cen2=inequiv_centers(j); doublevar test_sum=0; for(int d=0; d< 3; d++) test_sum+=fabs(temp_pos(d)-centers(cen2).pos(d)); //cout << cen2 << " test sum " << test_sum << endl; const doublevar threshold=1e-3; if(test_sum < threshold) { equivalent_center(cen)=cen2; found_ecen=1; //cout << "center " << cen << " equiv to " << cen2 << endl; break; } } if(!found_ecen) error("Couldn't find equivalent center for center ", cen); } else { equivalent_center(cen)=cen; //cout << "center " << cen << " in the box " << endl; } } Array1 <int> cenbasis(ncenters); int totbasis=0; for(int c=0; c < ncenters_inequivalent; c++) { int cen=inequiv_centers(c); cenbasis(cen)=centers(cen).basis.GetDim(0); totbasis+=cenbasis(cen); } //cout << totbasis << " total basis functions " << endl; //Lookup tables to get the center and basis for //the absolute basis function order //Array1 <int> totbasis2cen(totbasis); //Array1 <int> totbasis2bas(totbasis); //Array1 <int> center_start(ncenters); //Array1 <int> center_end(ncenters); totbasis2cen.Resize(totbasis); totbasis2bas.Resize(totbasis); center_start.Resize(ncenters); center_end.Resize(ncenters); center_start=0; center_end=0; int counter=0; for(int c=0; c < ncenters_inequivalent; c++) { int cen=inequiv_centers(c); center_start(cen)=counter; for(int bas=0; bas < centers(cen).basis.GetDim(0); bas++) { totbasis2bas(counter)=centers(cen).basis(bas); totbasis2cen(counter)=cen; counter++; } center_end(cen)=counter; //cout << "center " << cen << " start " << center_start(cen) // << " end " << center_end(cen) // << endl; } }