Code: Select all
#include "includes.h"
enum class EnemyType
{
blob,
cactus,
bird,
numEnemy
};
struct Enemy : public sf::Drawable, public sf::Transformable
{
int m_hitpoints;
int ID;
EnemyType m_type;
sf::Vertex m_quad[4];
sf::Texture m_texture;
Enemy()
{
}
private:
virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const
{
states.transform *= getTransform();
states.texture = &m_texture;
target.draw(m_quad, 4, sf::Quads, states);
};
};
class EnemyTable
{
Vec2f m_size = { 64.0f,64.0f };
sf::Texture m_texture;
std::vector<int> m_indices;
public:
EnemyTable(std::string textureFileName,float tileSize)
{
m_texture.loadFromFile(textureFileName);
m_indices.resize((m_texture.getSize().x / tileSize)*(m_texture.getSize().y / tileSize));
m_entity.resize((int)EnemyType::numEnemy);
for (int c = 0; c < m_indices.size(); c++)
m_indices[c] = c;
m_entity[(int)EnemyType::blob].m_hitpoints = 10;
m_entity[(int)EnemyType::blob].m_type = EnemyType::blob;
m_entity[(int)EnemyType::blob].m_texture = m_texture;
m_entity[(int)EnemyType::blob].m_quad[0].texCoords = Vec2f(m_indices[0]*tileSize, m_indices[0] * tileSize);
m_entity[(int)EnemyType::blob].m_quad[1].texCoords = Vec2f(m_indices[0]+1 * tileSize, m_indices[0] * tileSize);
m_entity[(int)EnemyType::blob].m_quad[2].texCoords = Vec2f(m_indices[0]+1 * tileSize, m_indices[0]+1 * tileSize);
m_entity[(int)EnemyType::blob].m_quad[3].texCoords = Vec2f(m_indices[0] * tileSize, m_indices[0]+1 * tileSize);
m_entity[(int)EnemyType::cactus].m_hitpoints = 10;
m_entity[(int)EnemyType::cactus].m_type = EnemyType::cactus;
m_entity[(int)EnemyType::cactus].m_texture = m_texture;
m_entity[(int)EnemyType::cactus].m_quad[0].texCoords = Vec2f(m_indices[1] * tileSize, m_indices[1] * tileSize);
m_entity[(int)EnemyType::cactus].m_quad[1].texCoords = Vec2f(m_indices[1] + 1 * tileSize, m_indices[1] * tileSize);
m_entity[(int)EnemyType::cactus].m_quad[2].texCoords = Vec2f(m_indices[1] + 1 * tileSize, m_indices[1] + 1 * tileSize);
m_entity[(int)EnemyType::cactus].m_quad[3].texCoords = Vec2f(m_indices[1] * tileSize, m_indices[1] + 1 * tileSize);
m_entity[(int)EnemyType::bird].m_hitpoints = 15;
m_entity[(int)EnemyType::bird].m_texture = m_texture;
m_entity[(int)EnemyType::bird].m_type = EnemyType::bird;
m_entity[(int)EnemyType::bird].m_quad[0].texCoords = Vec2f(m_indices[2] * tileSize, m_indices[2] * tileSize);
m_entity[(int)EnemyType::bird].m_quad[1].texCoords = Vec2f(m_indices[2] + 1 * tileSize, m_indices[2] * tileSize);
m_entity[(int)EnemyType::bird].m_quad[2].texCoords = Vec2f(m_indices[2] + 1 * tileSize, m_indices[2] + 1 * tileSize);
m_entity[(int)EnemyType::bird].m_quad[3].texCoords = Vec2f(m_indices[2] * tileSize, m_indices[2] + 1 * tileSize);
}
public:
Enemy operator ()(EnemyType m_type,Vec2f position)
{
Enemy e = m_entity[(int)m_type];
e.m_quad[0].position = Vec2f(position.x, position.y);
e.m_quad[1].position = Vec2f(position.x + m_size.x, position.y);
e.m_quad[2].position = Vec2f(position.x + m_size.x, position.y + m_size.y);
e.m_quad[3].position = Vec2f(position.x, position.y + m_size.y);
return e;
};
private:
std::vector<Enemy> m_entity;
};
EnemyTable table("image.png",64.0f);
Enemy e = table(EnemyType::blob,Vec2f(100.0f,100.0f));