Cześć Wszystkim!
Próbuję napisać auto-tiling. I nie wiem jak edytować dane bity. Normalnie do kafelka odnoszę się w ten sposób:
class Terrain : public sf::Drawable, public sf::Transformable {
public:
short width, height; // normal is a 16x16
sf::Vector2i coords; // multiply by 16x16
sf::VertexArray vertexes; // vertexes of tiles
SingleTexture* tileset; // main texture
std::vector < short > tiles;// tile values
// etc..
};
void Terrain::edit(sf::Vector2f worldMousePosition, short value) {
// edycja kafelka
short coord_x = (worldMousePosition.x - coords.x * 16) / 16;
short coord_y = (worldMousePosition.y - coords.y * 16) / 16;
if (coord_x < 0 || coord_x >= width || coord_y < 0 || coord_y >= height)
return;
tiles[coord_y * width + coord_x] = short(value); // chciałbym przypisywać bity
sf::Vertex* quad = &vertexes[(coord_y * width + coord_x) * 4];
// edycja vertex-array
short tu = (short(abs(coord_x) * tileSide) % 64) + (value * 64);
short tv = (short(abs(coord_y) * tileSide) % 64);
//cout << "tu: " << tu << ", tv: " << tv << "\n";
quad[0].texCoords = sf::Vector2f(tu + 1, tv + 1);
quad[1].texCoords = sf::Vector2f(tu + tileSide - 1, tv + 1);
quad[2].texCoords = sf::Vector2f(tu + tileSide - 1, tv + tileSide - 1);
quad[3].texCoords = sf::Vector2f(tu + 1, tv + tileSide - 1);
}
Chciałbym przerobić tak klasę Terrain by zamiast std::vector < short > tiles
miała std::vector < char > tile_bits
class Terrain : public sf::Drawable, public sf::Transformable {
public:
short width, height; // normal is a 16x16
sf::Vector2i coords; // multiply by 16x16
std::vector < char > tile_bits; // np. 0000 - 0 - czerwony, 0001 - 1 - lewy-górny szary, 0010 - 2 prawy-górny szary, 1111 - 15 - szary
sf::VertexArray vertexes; // vertexes of tiles
SingleTexture* tileset; // main texture
// ... etc.
};
I taki tile_bits zawierał by dane binarne o kafelku. Tak jak na załączonym screenie. Jak odnieść się do takiego bitu ?
U mnie kafelki bazowe mają rozmiar 64x64 stąd:
short tu = (short(abs(coord_x) * tileSide) % 64) + (value * 64);
short tv = (short(abs(coord_y) * tileSide) % 64);
- 00_info1.png (9 KB) - ściągnięć: 3
- 00_info.png (29 KB) - ściągnięć: 8