void CScutFrame::calTextureTileCount(int count) { CCTexture2D* textures[32] = {NULL}; int tileCount[256] = {0}; CScutTile* pTile = NULL; int i = 0; for (; i < count; i++) { pTile = getTileByIndex(i); m_pTexture = m_ScutAniGroup->getTextureByTile(pTile).pTex; if (m_pTexture == NULL) { continue; } for (int j = 0; j < count; j++) { if (textures[j] == m_pTexture) { tileCount[j] += 1; m_mapTextureCount[m_pTexture] = tileCount[j]; break; } else if (textures[j] == NULL) { m_nTexCount++; textures[j] = m_pTexture; tileCount[j] += 1; m_mapTextureCount[m_pTexture] = tileCount[j]; break; } } } i = 0; int nMaxCount = 0; for (; i < m_nTexCount; i++) { if (tileCount[i] > nMaxCount) { nMaxCount = tileCount[i]; m_nMaxIndex = i; } } for (map_TextureCount_it itCnt = m_mapTextureCount.begin(); itCnt != m_mapTextureCount.end(); itCnt++) { if ((*itCnt).second == nMaxCount) { m_nMaxTexture = (*itCnt).first; break; } } }
void CScutFrame::initQuads(int nTotalCount) { int indexVBO = 0; for (map_TextureCount_it itCnt = m_mapTextureCount.begin(); itCnt != m_mapTextureCount.end(); itCnt++, indexVBO++) { int count = (*itCnt).second; m_pTexture = (*itCnt).first; m_pQuads = (ccV3F_T2F_Quad*)calloc( sizeof(ccV3F_T2F_Quad) * count, 1 ); CScutTile* pTile = NULL; int indexQuad = 0; for (int i = 0; i < nTotalCount; i++, indexQuad++) { pTile = getTileByIndex(i); if (m_ScutAniGroup->getTextureByTile(pTile).pTex != m_pTexture) { indexQuad--; continue; } ccV3F_T2F_Quad pQuad; pQuad.bl.vertices.x = pTile->vertices[0]; pQuad.bl.vertices.y = pTile->vertices[1]; pQuad.bl.vertices.z = pTile->vertices[2]; pQuad.bl.texCoords.u = pTile->m_tt.texCoord[0]; pQuad.bl.texCoords.v = pTile->m_tt.texCoord[1]; pQuad.br.vertices.x = pTile->vertices[3]; pQuad.br.vertices.y = pTile->vertices[4]; pQuad.br.vertices.z = pTile->vertices[5]; pQuad.br.texCoords.u = pTile->m_tt.texCoord[2]; pQuad.br.texCoords.v = pTile->m_tt.texCoord[3]; pQuad.tl.vertices.x = pTile->vertices[6]; pQuad.tl.vertices.y = pTile->vertices[7]; pQuad.tl.vertices.z = pTile->vertices[8]; pQuad.tl.texCoords.u = pTile->m_tt.texCoord[4]; pQuad.tl.texCoords.v = pTile->m_tt.texCoord[5]; pQuad.tr.vertices.x = pTile->vertices[9]; pQuad.tr.vertices.y = pTile->vertices[10]; pQuad.tr.vertices.z = pTile->vertices[11]; pQuad.tr.texCoords.u = pTile->m_tt.texCoord[6]; pQuad.tr.texCoords.v = pTile->m_tt.texCoord[7]; m_pQuads[indexQuad] = pQuad; } m_mapTexture[m_pTexture] = m_pQuads; } }
Tile* TileMap::getTileByPos(float x, float y) { sf::Vector2i ind = getTileIndex(x, y); return getTileByIndex(ind.x, ind.y); }