Esempio n. 1
0
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;
}
Esempio n. 4
0
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;
  }

}