Ejemplo n.º 1
0
// ------------------------------------------------------------------
// Name : get3DCoords
// ------------------------------------------------------------------
Coords3D DisplayEngine::get3DCoords(CoordsScreen screenCoords, DisplayModeState modeState)
{
    switch (modeState)
    {
    case DMS_2D:
        return Coords3D((double)screenCoords.x, (double)screenCoords.y, screenCoords.z);
    case DMS_3DCamIndependant:
    {
        if (m_pClientParams == NULL)
            return Coords3D();
        Coords3D d3Coords(((double)screenCoords.x * X2X / (double)m_pClientParams->screenXSize) - M1X, ((double)screenCoords.y * X2Y / (double)m_pClientParams->screenYSize) - M1Y, screenCoords.z);
//      Coords3D d3Coords(((float)screenCoords.x * 2.0f / (float)m_pClientParams->screenXSize) - 1.0f, 1.0f - ((float)screenCoords.y * 2.0f / (float)m_pClientParams->screenYSize), screenCoords.z);
        return d3Coords;
    }
    case DMS_3D:
    default:
    {
        if (m_pClientParams == NULL)
            return Coords3D();
        double fX = ((double)screenCoords.x * X2X / (double)m_pClientParams->screenXSize) - M1X;
        double fY = ((double)screenCoords.y * X2Y / (double)m_pClientParams->screenYSize) - M1Y;
//      float fX = ((float)screenCoords.x * 2.0f / (float)m_pClientParams->screenXSize) - 1.0f;
//      float fY = 1.0f - ((float)screenCoords.y * 2.0f / (float)m_pClientParams->screenYSize);
        Coords3D d3Coords(m_f3CamPos.x + fX * (screenCoords.z - m_f3CamPos.z) / NEARPLANE, m_f3CamPos.y + fY * (screenCoords.z - m_f3CamPos.z) / NEARPLANE, 0.0f);
        return d3Coords;
    }
    }
}
Ejemplo n.º 2
0
// -----------------------------------------------------------------
// Name : displayObjects
// -----------------------------------------------------------------
void Map::displayObjects(PlayerManager * pPlayerMngr)
{
    DisplayEngine * pDisplay = m_pTombGeometry->getDisplay();
    for (int x = 0; x < m_iWidth; x++)
    {
        for (int y = 0; y < m_iHeight; y++)
        {
            Coords3D pos3D = pDisplay->get3DCoords(CoordsMap(x, y), BOARDPLANE);
            MapObject * mapObj = m_pTiles[x][y]->getFirstMapObject(GOTYPE_TOWN);
            if (mapObj != NULL)
                mapObj->display();
            mapObj = m_pTiles[x][y]->getFirstMapObject(GOTYPE_TEMPLE);
            if (mapObj != NULL)
                mapObj->display();
            mapObj = m_pTiles[x][y]->getFirstMapObject(GOTYPE_DEAD_UNIT);
            if (mapObj != NULL)
                m_pTombGeometry->display(pos3D + Coords3D(0.6f, 0.1f), F_RGBA_NULL);
            mapObj = m_pTiles[x][y]->getFirstMapObject(GOTYPE_UNIT);
            if (mapObj != NULL)
            {
                mapObj->display();
                Player * pPlayer = pPlayerMngr->findPlayer(mapObj->getOwner());
                assert(pPlayer != NULL);
                pPlayer->m_pBannerGeometry->display(pos3D + Coords3D(0.7f, 0.0f), pPlayer->m_Color);
            }
            Player * pPlayer = pPlayerMngr->getActiveLocalPlayer();
            if (pPlayer != NULL)
            {
                if (m_pTiles[x][y]->m_pNbAlliesGeo != NULL)
                {
//          float fy = 0.31f;
                    if (m_pTiles[x][y]->m_pNbFoesGeo == NULL)
                    {
//            fy = 0.62f;
                        m_pCountUnitsBgGeometry1L->display(pos3D + Coords3D(-0.1f, 0.0f), F_RGBA_NULL);
                    }
                    else
                        m_pCountUnitsBgGeometry2L->display(pos3D + Coords3D(-0.1f, 0.0f), F_RGBA_NULL);
                    pPlayer->m_pBannerGeometry->display(pos3D + Coords3D(-0.1f, 0.0f), pPlayer->m_Color);
                    m_pTiles[x][y]->m_pNbAlliesGeo->display(pos3D + Coords3D(0.15f, 0.0f), F_RGBA_NULL);
                }
                if (m_pTiles[x][y]->m_pNbFoesGeo != NULL)
                {
                    float fy = 0.31f;
                    if (m_pTiles[x][y]->m_pNbAlliesGeo == NULL)
                    {
                        fy = 0.0f;
                        m_pCountUnitsBgGeometry1L->display(pos3D + Coords3D(-0.1f, 0.0f), F_RGBA_NULL);
                    }
                    m_pFoeBannerGeometry->display(pos3D + Coords3D(-0.1f, fy), rgb(0, 0, 0));
                    m_pTiles[x][y]->m_pNbFoesGeo->display(pos3D + Coords3D(0.15f, fy), F_RGBA_NULL);
                }
            }
        }
    }
}
Ejemplo n.º 3
0
// ------------------------------------------------------------------
// Name : get3DCoords
// ------------------------------------------------------------------
Coords3D DisplayEngine::get3DCoords(CoordsMap mapCoords, double fZPlane)
{
    if (m_iMapWidth == 0 || m_iMapHeight == 0)
        return Coords3D();
    Coords3D d3Coords((double)(mapCoords.x - m_iMapWidth/2), (double)(mapCoords.y - m_iMapHeight/2), fZPlane);
//  Coords3D d3Coords((float)(mapCoords.x - m_pServerParams->mapXSize/2), (float)(m_pServerParams->mapYSize/2 - mapCoords.y), fZPlane);
    return d3Coords;
}
Ejemplo n.º 4
0
// ------------------------------------------------------------------
// Name : get3DDistance
// ------------------------------------------------------------------
Coords3D DisplayEngine::get3DDistance(CoordsScreen screenDist, DisplayModeState modeState)
{
    switch (modeState)
    {
    case DMS_2D:
        return Coords3D((double)screenDist.x, (double)screenDist.y, screenDist.z);
    case DMS_3D:
    default:
    {
        if (m_pClientParams == NULL)
            return Coords3D();
        double fX = -(double)screenDist.x * X2X / (double)m_pClientParams->screenXSize;
        double fY = -(double)screenDist.y * X2Y / (double)m_pClientParams->screenYSize;
//      float fX = -(float)screenDist.x * 2.0f / (float)m_pClientParams->screenXSize;
//      float fY = (float)screenDist.y * 2.0f / (float)m_pClientParams->screenYSize;
        Coords3D d3Coords(fX * (screenDist.z - m_f3CamPos.z) / NEARPLANE, fY * (screenDist.z - m_f3CamPos.z) / NEARPLANE, 0.0f);
        return d3Coords;
    }
    }
}
Ejemplo n.º 5
0
// ------------------------------------------------------------------
// Name : Init
// ------------------------------------------------------------------
void DisplayEngine::Init(Parameters * clientParams, DebugManager * pDebug)
{
    m_pClientParams = clientParams;
    m_pDebug = pDebug;

    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA | GLUT_STENCIL | GLUT_ALPHA);
    m_f3CamPos = Coords3D(0.0f, 0.0f, 0.0f);

    initGlutWindow();

    m_pTexEngine = new TextureEngine(pDebug);
    m_pFntEngine = new FontEngine(this, pDebug);
}
Ejemplo n.º 6
0
Reper::
Reper(unsigned int _num, unsigned int _height, unsigned int _width)
  : num(_num)
  , height(_height)
  , width(_width)
{
  if (0==num) {
    throw std::runtime_error("Reper with 0 dimension");
  }
  for (size_t i=0; i<num; ++i) {
      vectors.push_back(std::make_pair(width*(i-num/2)+((num%2)?0:width/2), -height));
      double angle=2*M_PI*((i-num/2.0)/num);
      vectors3d.push_back(Coords3D(width*sin(angle)*COEFF_3D,-height, width*cos(angle)*COEFF_3D));
  }
}