Witam.
Mam obiekty Terrain oraz Water dla każdego z chunków mapy. Chciałbym dodać prefaby wody do palety, tak aby można było je wybrać i rysować tę wodę po terenie. Problem, który napotkałem polega na tym, że wybranie prefabu wody jest również prefabem terenu - set_0_water_sands - set_0_sands_water. Nie wiem jak to pogodzić i jak uporządkować kod. Planuję również w niedalekiej przyszłości rysować shaderem na tym szarym polu. No i właśnie to jest ten problem - jak stworzyć prefabrykaty dla wody ?
Poniżej obrazek przedstawiający kafelki granicze dla terenu
Tak wczytuje prefaby Terenu:
void createTerrainPrefabs() {
terrainGameObjects.clear();
// TO-DO
terrainGameObjects.push_back(new TerrainPrefab("tiles/tile_0_water", 0));
terrainGameObjects.push_back(new TerrainPrefab("tiles/tile_1_sands", 1));
terrainGameObjects.push_back(new TerrainPrefab("tiles/tile_2_grass", 2));
terrainGameObjects.push_back(new TerrainPrefab("tiles/tile_3_gravel",3));
terrainGameObjects.push_back(new TerrainPrefab("tiles/tile_4_steps", 4));
countOfBasicTerrain = 5;
std::vector < string > sets_names;
sets_names.push_back("tiles/set_0_water_sands");
sets_names.push_back("tiles/set_0_sands_water");
sets_names.push_back("tiles/set_1_sands_grass");
sets_names.push_back("tiles/set_1_grass_sands");
short id = countOfBasicTerrain;
for (auto& texture : textures) {
for (auto& name : sets_names) {
if (texture->name.find(name) != std::string::npos) {
TerrainPrefab* tpref = new TerrainPrefab(texture->name, id);
terrainGameObjects.push_back(tpref);
//cout << tpref->name << "\t" << id << "\n";
id += 1;
}
}
}
// create tileset
sf::RenderTexture rtex;
rtex.create(id * 64, 64);
rtex.clear(sf::Color::Transparent);
short offsetX = 0;
for (auto& t : terrainGameObjects) {
sf::Texture tex = *dynamic_cast<TerrainPrefab*>(t)->texture->texture;
sf::Sprite spr(tex);
spr.setPosition(offsetX, 0);
rtex.draw(spr);
offsetX += 64;
}
rtex.display();
tileset = rtex.getTexture();
*getTexture("tiles/0_tileset")->texture = tileset;
}
A tak przypisuję te obiekty do palety:
void setTerrainObjectsToPalette() {
availableGameObjects.clear();
availableGameObjects.push_back(terrainGameObjects[0]);
availableGameObjects.push_back(terrainGameObjects[1]);
availableGameObjects.push_back(terrainGameObjects[2]);
availableGameObjects.push_back(terrainGameObjects[3]);
availableGameObjects.push_back(terrainGameObjects[4]);
availableGameObjects.push_back(nullptr);
availableGameObjects.push_back(nullptr);
availableGameObjects.push_back(nullptr);
availableGameObjects.push_back(nullptr);
availableGameObjects.push_back(nullptr);
// SET - WATER_SANDS
short id = 4;
availableGameObjects.push_back(terrainGameObjects[id + 1]);
availableGameObjects.push_back(terrainGameObjects[id + 2]);
availableGameObjects.push_back(terrainGameObjects[id + 2]);
availableGameObjects.push_back(terrainGameObjects[id + 2]);
availableGameObjects.push_back(terrainGameObjects[id + 3]);
availableGameObjects.push_back(terrainGameObjects[id + 4]);
availableGameObjects.push_back(terrainGameObjects[1]);
availableGameObjects.push_back(terrainGameObjects[1]);
availableGameObjects.push_back(terrainGameObjects[1]);
availableGameObjects.push_back(terrainGameObjects[id + 5]);
availableGameObjects.push_back(terrainGameObjects[id + 4]);
availableGameObjects.push_back(terrainGameObjects[1]);
availableGameObjects.push_back(terrainGameObjects[1]);
availableGameObjects.push_back(terrainGameObjects[1]);
availableGameObjects.push_back(terrainGameObjects[id + 5]);
availableGameObjects.push_back(terrainGameObjects[id + 4]);
availableGameObjects.push_back(terrainGameObjects[1]);
availableGameObjects.push_back(terrainGameObjects[1]);
availableGameObjects.push_back(terrainGameObjects[1]);
availableGameObjects.push_back(terrainGameObjects[id + 5]);
availableGameObjects.push_back(terrainGameObjects[id + 6]);
availableGameObjects.push_back(terrainGameObjects[id + 7]);
availableGameObjects.push_back(terrainGameObjects[id + 7]);
availableGameObjects.push_back(terrainGameObjects[id + 7]);
availableGameObjects.push_back(terrainGameObjects[id + 8]);
availableGameObjects.push_back(nullptr);
availableGameObjects.push_back(nullptr);
availableGameObjects.push_back(nullptr);
availableGameObjects.push_back(nullptr);
availableGameObjects.push_back(nullptr);
// SET - SANDS_WATER
id += 8;
availableGameObjects.push_back(terrainGameObjects[id + 1]);
availableGameObjects.push_back(terrainGameObjects[id + 2]);
availableGameObjects.push_back(terrainGameObjects[id + 2]);
availableGameObjects.push_back(terrainGameObjects[id + 2]);
availableGameObjects.push_back(terrainGameObjects[id + 3]);
availableGameObjects.push_back(terrainGameObjects[id + 4]);
availableGameObjects.push_back(terrainGameObjects[0]);
availableGameObjects.push_back(terrainGameObjects[0]);
availableGameObjects.push_back(terrainGameObjects[0]);
availableGameObjects.push_back(terrainGameObjects[id + 5]);
availableGameObjects.push_back(terrainGameObjects[id + 4]);
availableGameObjects.push_back(terrainGameObjects[0]);
availableGameObjects.push_back(terrainGameObjects[0]);
availableGameObjects.push_back(terrainGameObjects[0]);
availableGameObjects.push_back(terrainGameObjects[id + 5]);
availableGameObjects.push_back(terrainGameObjects[id + 4]);
availableGameObjects.push_back(terrainGameObjects[0]);
availableGameObjects.push_back(terrainGameObjects[0]);
availableGameObjects.push_back(terrainGameObjects[0]);
availableGameObjects.push_back(terrainGameObjects[id + 5]);
availableGameObjects.push_back(terrainGameObjects[id + 6]);
availableGameObjects.push_back(terrainGameObjects[id + 7]);
availableGameObjects.push_back(terrainGameObjects[id + 7]);
availableGameObjects.push_back(terrainGameObjects[id + 7]);
availableGameObjects.push_back(terrainGameObjects[id + 8]);
availableGameObjects.push_back(nullptr);
availableGameObjects.push_back(nullptr);
availableGameObjects.push_back(nullptr);
availableGameObjects.push_back(nullptr);
availableGameObjects.push_back(nullptr);
// SET - GRASS_SANDS
id += 8;
availableGameObjects.push_back(terrainGameObjects[id + 1]);
availableGameObjects.push_back(terrainGameObjects[id + 2]);
availableGameObjects.push_back(terrainGameObjects[id + 2]);
availableGameObjects.push_back(terrainGameObjects[id + 2]);
availableGameObjects.push_back(terrainGameObjects[id + 3]);
availableGameObjects.push_back(terrainGameObjects[id + 4]);
availableGameObjects.push_back(terrainGameObjects[1]);
availableGameObjects.push_back(terrainGameObjects[1]);
availableGameObjects.push_back(terrainGameObjects[1]);
availableGameObjects.push_back(terrainGameObjects[id + 5]);
availableGameObjects.push_back(terrainGameObjects[id + 4]);
availableGameObjects.push_back(terrainGameObjects[1]);
availableGameObjects.push_back(terrainGameObjects[1]);
availableGameObjects.push_back(terrainGameObjects[1]);
availableGameObjects.push_back(terrainGameObjects[id + 5]);
availableGameObjects.push_back(terrainGameObjects[id + 4]);
availableGameObjects.push_back(terrainGameObjects[1]);
availableGameObjects.push_back(terrainGameObjects[1]);
availableGameObjects.push_back(terrainGameObjects[1]);
availableGameObjects.push_back(terrainGameObjects[id + 5]);
availableGameObjects.push_back(terrainGameObjects[id + 6]);
availableGameObjects.push_back(terrainGameObjects[id + 7]);
availableGameObjects.push_back(terrainGameObjects[id + 7]);
availableGameObjects.push_back(terrainGameObjects[id + 7]);
availableGameObjects.push_back(terrainGameObjects[id + 8]);
availableGameObjects.push_back(nullptr);
availableGameObjects.push_back(nullptr);
availableGameObjects.push_back(nullptr);
availableGameObjects.push_back(nullptr);
availableGameObjects.push_back(nullptr);
// SET - GRASS_SANDS
id += 8;
availableGameObjects.push_back(terrainGameObjects[id + 1]);
availableGameObjects.push_back(terrainGameObjects[id + 2]);
availableGameObjects.push_back(terrainGameObjects[id + 2]);
availableGameObjects.push_back(terrainGameObjects[id + 2]);
availableGameObjects.push_back(terrainGameObjects[id + 3]);
availableGameObjects.push_back(terrainGameObjects[id + 4]);
availableGameObjects.push_back(terrainGameObjects[1]);
availableGameObjects.push_back(terrainGameObjects[1]);
availableGameObjects.push_back(terrainGameObjects[1]);
availableGameObjects.push_back(terrainGameObjects[id + 5]);
availableGameObjects.push_back(terrainGameObjects[id + 4]);
availableGameObjects.push_back(terrainGameObjects[1]);
availableGameObjects.push_back(terrainGameObjects[1]);
availableGameObjects.push_back(terrainGameObjects[1]);
availableGameObjects.push_back(terrainGameObjects[id + 5]);
availableGameObjects.push_back(terrainGameObjects[id + 4]);
availableGameObjects.push_back(terrainGameObjects[1]);
availableGameObjects.push_back(terrainGameObjects[1]);
availableGameObjects.push_back(terrainGameObjects[1]);
availableGameObjects.push_back(terrainGameObjects[id + 5]);
availableGameObjects.push_back(terrainGameObjects[id + 6]);
availableGameObjects.push_back(terrainGameObjects[id + 7]);
availableGameObjects.push_back(terrainGameObjects[id + 7]);
availableGameObjects.push_back(terrainGameObjects[id + 7]);
availableGameObjects.push_back(terrainGameObjects[id + 8]);
availableGameObjects.push_back(nullptr);
availableGameObjects.push_back(nullptr);
availableGameObjects.push_back(nullptr);
availableGameObjects.push_back(nullptr);
availableGameObjects.push_back(nullptr);
}
- palette.gif (12 MB) - ściągnięć: 7