Пример #1
0
Pos2D projectShadow(const Pos3D &p)
{
#ifdef SHADOW_DOWN
  return Pos2D(p.x,p.z);
#else
  //return Pos2D((int)(p*Pos3D(0,0,1)),(int)(p*Pos3D(1,1,0)));
  //  return Pos2D((int)(p.z),(int)(VOXELHEIGHT-p.y-p.x-1));
  return Pos2D((int)(p*Pos3D(1,0,-1)),(int)(p*Pos3D(1,1,1)));
  //  return Pos2D((int)(p.z-p.x),(int)(VOXELHEIGHT-p.y-p.x-1));
#endif
}
Пример #2
0
VoxelImage::VoxelImage(const std::string &pFilename):
    AVItem(Pos3D(0,0,0))
{
    mTexture=getTextureCache()->get(TILEDIR+pFilename+".png");
    // FIXME: Check this

    Pos2D c=getVoxelID()->getCenter(pFilename);
    if(c==Pos2D(0,0))
    {
        c=Pos2D(mTexture.width()/2,mTexture.height()-mTexture.width()/4);
    }

    setCenter(c);//Pos2D(mTexture.width()/2,mTexture.height()-mTexture.width()/4)+c);
}
Пример #3
0
Pos2D VoxelImageData::getCenter(const std::string &pFilename)
{
    std::map<std::string,Pos2D>::const_iterator i=mPositions.find(pFilename);
    if(i==mPositions.end())
        return Pos2D(0,0);
    return i->second;
}
Пример #4
0
void MiniMap::update()
{
//  CTRACE;
  mustUpdate=true;
  AGSurfacePainter p(mSurface);
  float zoom=2;
  float mx,my;
  
  Pos2D maxPos=mMap->getMaxPos();
  
  for(int x=0;x<mSurface.width();x++)
  {
    for(int y=0;y<mSurface.height();y++)
    {
      mx=float(x)/mSurface.width()*maxPos.x;
      my=float(y)/mSurface.height()*maxPos.y;
      Pos3D normal=mMap->getNormal(mx,my);
      float l=normal*Pos3D(1,1,-1).normalized();
      l+=3;
      l*=0.25;
      
      
      if(mMap->getHeight(Pos2D(mx,my))<10)
        p.putPixel(x,mSurface.height()-1-y,AGColor(0,0,(int)(0xFF*l),MINIMAP_ALPHA));
      else
        p.putPixel(x,mSurface.height()-1-y,AGColor(0,(int)(MINIMAP_GREEN*l),0,MINIMAP_ALPHA));
    }
  }
}
Пример #5
0
// returns diff from uppper left corner
void VoxelImage::cutBorders()
{
    AGPainter p(mSurface);
    int minx,miny,maxx,maxy;
    bool found=false;

    minx=maxx=miny=maxy=0;

    cdebug(mSurface.width()<<"///"<<mSurface.height());
    for(int x=0; x<mSurface.width(); x++)
        for(int y=0; y<mSurface.height(); y++)
        {
            AGColor c=p.getPixel(x,y);
            if(c.a>0)
            {
                if(found)
                {
                    minx=std::min(minx,x);
                    miny=std::min(miny,y);
                    maxx=std::max(maxx,x);
                    maxy=std::max(maxy,y);
                    //cdebug("x:"<<x<<" y:"<<y);
                    //cdebug(minx<<"/"<<maxx<<","<<miny<<",m:"<<maxy);
                }
                else
                {
                    minx=maxx=x;
                    miny=maxy=y;
                    found=true;
                }
            }

        }

    cdebug(minx<<";"<<maxx<<";"<<miny<<";"<<maxy);
    cdebug(mSurface.width()<<"///"<<mSurface.height());

    if(!found)
    {
        maxx=maxy=5;
        minx=miny=0;
    }
    int w=maxx-minx+1;
    int h=maxy-miny+1;

    w=std::max(10,w); // workaround for bad libpng calls
    h=std::max(10,h);

    if(w<=0 || h<=0)
        std::cerr<<"Error cutting! "<<w<<","<<h<<std::endl;

    AGSurface ns(w,h);
    AGPainter p2(ns);
    p2.blit(mSurface,AGRect(0,0,w,h),AGRect(minx,miny,w,h));
    mSurface=ns;
    mCenter=mCenter-Pos2D(minx,miny);

    if(w==0 || h==0)
        mSurface=AGSurface(1,1); // FIXME: this is some workaround
}
Пример #6
0
Pos2D IsoView::getTilePos(const IVTile &t)
{
  int mx=t.x;
  int my=t.y;

  return Pos2D(mx*TILE_WIDTH/POINTS_PER_TILE,my*TILE_WIDTH/POINTS_PER_TILE);
}
Пример #7
0
void EditIsoView::init()
{
  mOldPoint=0;
  mPoints.clear();
  if(!mEditing)
    {
      CompleteIsoView::init();
      return;
    }
  //CTRACE;
  CompleteIsoView::init();


  if(!mShowPoints)
    return;
  // add pins

  int mw=width()/64+2;
  int mh=height()/16+4;


  mw*=2;
  mh*=2;

  int sx=0;
  int sy=0;

  sx=(int)(mPos.x/(TILE_WIDTH/2));
  if(sx<0)
    sx=0;

  sy=(int)(mPos.y/(TILE_WIDTH/4));
  if(sy<0)
    sy=0;

  for(int y=-1+sy;y<mh+sy;y++)
    {
      for(int x=-1+sx;x<mw+sx;x++)
        {
          int mx=x;
          int my=y;

          mx*=TILE_WIDTH/POINTS_PER_TILE;
          my*=TILE_WIDTH/POINTS_PER_TILE;

          //mx-=TILE_WIDTH/2;
          //my-=TILE_WIDTH/2;

          Pos3D mp(mx,getMap()->getHeight(Pos2D(mx,my)),my); // start one into zeroness
          VoxelImage *i=new VoxelImage("white_pin");
          i->setPosition(mp);
          i->setVirtualY(150);

          insert(i);
          mPoints.push_back(i);
        }
    }
}
Пример #8
0
void VoxelImageData::loadXML(const xmlpp::Node &n)
{
    mPositions.clear();
    xmlpp::Node::const_iterator i=n.begin();
    for(; i!=n.end(); i++)
    {
        mPositions.insert(std::make_pair((*i)->get("name"),Pos2D((*i)->get("pos"))));
    }
}
Пример #9
0
VoxelImage::VoxelImage(AGSurface pSurface,Pos3D pPos):
    AVItem(pPos)
{
    mSurface=pSurface;
    //  SDL_SaveBMP(pSurface.surface(),"hupe3.bmp");
    //  SDL_SaveBMP(mSurface.surface(),"hupe4.bmp");
    mTexture=AGTexture(mSurface);
    //  mSurface=SDL_DisplayFormatAlpha(pSurface.surface());
    setCenter(Pos2D(mSurface.width()/2,mSurface.height()-mSurface.width()/4));
}
Пример #10
0
bool EditIsoView::eventMouseClick(const AGEvent *m)
{
  if(!mEditing)
    return CompleteIsoView::eventMouseClick(m);
  const AGSDLEvent *e=reinterpret_cast<const AGSDLEvent*>(m);
  if(e)
    {
      if(getScreenRect().contains(e->getMousePosition()))
        {
          if(e->getButton()==SDL_BUTTON_LEFT||e->getButton()==SDL_BUTTON_RIGHT)
            {
              if(mOldPoint)
              {
                Pos3D p=mOldPoint->getPosition();
		
		editMarkClicked(Pos2D(p.x,p.z),e);
		/*
                Pos3D p=mOldPoint->getPosition();
                if(mAddEntity=="")
                  editAt(p,e->getButton()==SDL_BUTTON_LEFT);
                else if(mAddEntity=="rubber")
                {
                  // getEntity and delete
                  std::vector<AntEntity *> es=getEntity(e->getMousePosition());
                  if(es.size())
                  {
                    for(std::vector<AntEntity*>::iterator i=es.begin();i!=es.end();i++)
                      getMap()->removeEntity(*i);
                  }
                }
                else if(mAddEntity=="tree")
                  getMap()->insertEntity(new AntTree(Pos2D(p.x,p.z),rand()%11));
                else if(mAddEntity=="stones")
                  getMap()->insertEntity(new AntDeco(Pos2D(p.x,p.z),rand()%2));
		else if(mAddEntity=="tower")
		  getMap()->insertEntity(new AntHouse(Pos2D(p.x,p.z),"tower2"));
		*/
              }

              update();
              return true;
            }
        }
    }
  return false;
}
Пример #11
0
Pos2D Rect2D::get10() const
{
  return Pos2D(x+w-1,y);
}
Panel::Panel(Uint id) :
currentPriority(backgroundPriority), zIndex(0),
description("Empty Panel"), name("Panel 0"),
panelDimensions(Pos2D(10, 10)), panelCenter(Pos2D(10, 10)),
panelId(id), panelColor(FV3(0, 0, 0))
{}
Пример #13
0
Pos2D Pos2D::operator*(float f) const
{
  return Pos2D(x*f,y*f);
}
Пример #14
0
Pos2D projectView(const Pos3D &p)
{
  //  cdebug(VOXELHEIGHT);
  return Pos2D((int)(p.x),(int)(VOXELHEIGHT-p.y-p.z/2-1));
}
Пример #15
0
Pos2D Pos2D::operator/(float f) const
{
  return Pos2D(x/f,y/f);
}
Пример #16
0
Pos2D AntargisMap::truncPos(const Pos2D &p) const
{
  Pos2D maxPos=getMaxPos();
  return Pos2D(std::max(0.0f,std::min(maxPos.x,p.x)),
               std::max(0.0f,std::min(maxPos.y,p.y)));
}
Пример #17
0
Pos2D AntargisMap::getMaxPos() const
{
  return Pos2D(mW*TILE_WIDTH/POINTS_PER_TILE-2,mH*TILE_WIDTH/POINTS_PER_TILE-2);
}
Пример #18
0
Pos2D CTerrainData::getCellPosByVertexIndex(unsigned long uVertexIndex)const
{
	return Pos2D(uVertexIndex%m_nVertexXCount,uVertexIndex/m_nVertexXCount);
}
Пример #19
0
Pos2D Rect2D::get11() const
{
  return Pos2D(x+w-1,y+h-1);
}
Пример #20
0
Pos2D Pos2D::operator-(const Pos2D &p) const
{
  return Pos2D(x-p.x,y-p.y);
}
Пример #21
0
Pos2D Rect2D::get00() const
{
  return Pos2D(x,y);
}
Пример #22
0
void VoxelImage::setTexture(const std::string &pFilename)
{
    mTexture=getTextureCache()->get(pFilename+".png");
    // FIXME: Check this
    setCenter(Pos2D(mTexture.width()/2,mTexture.height()-mTexture.width()/4));
}
Пример #23
0
Pos2D Rect2D::get01() const
{
  return Pos2D(x,y+h-1);
}
Пример #24
0
Pos2D Pos2D::operator+(const Pos2D &p) const
{
  return Pos2D(x+p.x,y+p.y);
}