@@ -78,7 +78,7 @@ public: | |||||
int frame = (int)(m_sprites[i].m2 * FRAME_COUNT); | int frame = (int)(m_sprites[i].m2 * FRAME_COUNT); | ||||
// m_sprites[i].m1.z = frame; | // m_sprites[i].m1.z = frame; | ||||
g_scene->AddTile(m_tileset, frame, | g_scene->AddTile(m_tileset, frame, | ||||
(ivec3)m_sprites[i].m1, 0, vec2(2.f)); | |||||
(ivec3)m_sprites[i].m1, 0, vec2(2.f), 0.f); | |||||
} | } | ||||
} | } | ||||
@@ -74,7 +74,7 @@ void Emitter::TickDraw(float seconds) | |||||
for (int i = 0; i < data->nparticles; i++) | for (int i = 0; i < data->nparticles; i++) | ||||
g_scene->AddTile(data->tileset, data->particles[i], | g_scene->AddTile(data->tileset, data->particles[i], | ||||
data->positions[i], 0, vec2(1.0f)); | |||||
data->positions[i], 0, vec2(1.0f), 0.0f); | |||||
} | } | ||||
void Emitter::AddParticle(int id, vec3 pos, vec3 vel) | void Emitter::AddParticle(int id, vec3 pos, vec3 vel) | ||||
@@ -89,7 +89,7 @@ void Font::Print(vec3 pos, char const *str, vec2 scale) | |||||
break; | break; | ||||
default: | default: | ||||
if (ch != ' ') | if (ch != ' ') | ||||
g_scene->AddTile(data->tileset, ch & 255, pos, 0, scale); | |||||
g_scene->AddTile(data->tileset, ch & 255, pos, 0, scale, 0.0f); | |||||
pos.x += data->size.x * scale.x; | pos.x += data->size.x * scale.x; | ||||
break; | break; | ||||
} | } | ||||
@@ -44,6 +44,7 @@ struct Tile | |||||
uint32_t prio; | uint32_t prio; | ||||
vec3 pos; | vec3 pos; | ||||
vec2 scale; | vec2 scale; | ||||
float angle; | |||||
int id, o; | int id, o; | ||||
}; | }; | ||||
@@ -169,7 +170,7 @@ void Scene::AddPrimitive(Mesh *mesh, Shader *shader, mat4 const &matrix) | |||||
data->m_primitives.Push(Primitive(mesh, shader, matrix)); | data->m_primitives.Push(Primitive(mesh, shader, matrix)); | ||||
} | } | ||||
void Scene::AddTile(TileSet *tileset, int id, vec3 pos, int o, vec2 scale) | |||||
void Scene::AddTile(TileSet *tileset, int id, vec3 pos, int o, vec2 scale, float angle) | |||||
{ | { | ||||
ASSERT(id < tileset->GetTileCount()); | ASSERT(id < tileset->GetTileCount()); | ||||
@@ -181,6 +182,7 @@ void Scene::AddTile(TileSet *tileset, int id, vec3 pos, int o, vec2 scale) | |||||
t.pos = pos; | t.pos = pos; | ||||
t.o = o; | t.o = o; | ||||
t.scale = scale; | t.scale = scale; | ||||
t.angle = angle; | |||||
data->m_tiles.Push(t); | data->m_tiles.Push(t); | ||||
} | } | ||||
@@ -310,7 +312,7 @@ void Scene::RenderTiles() // XXX: rename to Blit() | |||||
{ | { | ||||
data->m_tiles[i].tileset->BlitTile(data->m_tiles[j].id, | data->m_tiles[i].tileset->BlitTile(data->m_tiles[j].id, | ||||
data->m_tiles[j].pos, data->m_tiles[j].o, | data->m_tiles[j].pos, data->m_tiles[j].o, | ||||
data->m_tiles[j].scale, | |||||
data->m_tiles[j].scale, data->m_tiles[j].angle, | |||||
vertex + 6 * (j - i), texture + 6 * (j - i)); | vertex + 6 * (j - i), texture + 6 * (j - i)); | ||||
} | } | ||||
@@ -52,7 +52,7 @@ public: | |||||
/* FIXME: this should be deprecated -- it doesn't really match | /* FIXME: this should be deprecated -- it doesn't really match | ||||
* the architecture we want to build */ | * the architecture we want to build */ | ||||
void AddTile(TileSet *tileset, int id, vec3 pos, int o, vec2 scale); | |||||
void AddTile(TileSet *tileset, int id, vec3 pos, int o, vec2 scale, float angle); | |||||
void SetLineTime(float new_time=-1.f); | void SetLineTime(float new_time=-1.f); | ||||
void SetLineMask(int new_mask=0xFFFFFFFF); | void SetLineMask(int new_mask=0xFFFFFFFF); | ||||
void SetLineSegmentSize(float new_segment_size=100000.f); | void SetLineSegmentSize(float new_segment_size=100000.f); | ||||
@@ -50,7 +50,7 @@ void Sprite::TickDraw(float seconds) | |||||
{ | { | ||||
Entity::TickDraw(seconds); | Entity::TickDraw(seconds); | ||||
g_scene->AddTile(data->tileset, data->id, m_position, 0, vec2(1.0f)); | |||||
g_scene->AddTile(data->tileset, data->id, m_position, 0, vec2(1.0f), 0.0f); | |||||
} | } | ||||
Sprite::~Sprite() | Sprite::~Sprite() | ||||
@@ -196,7 +196,7 @@ void TileSet::Unbind() | |||||
; | ; | ||||
} | } | ||||
void TileSet::BlitTile(uint32_t id, vec3 pos, int o, vec2 scale, | |||||
void TileSet::BlitTile(uint32_t id, vec3 pos, int o, vec2 scale, float angle, | |||||
vec3 *vertex, vec2 *texture) | vec3 *vertex, vec2 *texture) | ||||
{ | { | ||||
ibox2 pixels = m_data->m_tiles[id].m1; | ibox2 pixels = m_data->m_tiles[id].m1; | ||||
@@ -231,6 +231,8 @@ void TileSet::BlitTile(uint32_t id, vec3 pos, int o, vec2 scale, | |||||
vec3 extent_x = 0.5f * vec3(dx, 0.f, 0.f); | vec3 extent_x = 0.5f * vec3(dx, 0.f, 0.f); | ||||
vec3 extent_y = 0.5f * vec3(0.f, dy, dz); | vec3 extent_y = 0.5f * vec3(0.f, dy, dz); | ||||
vec3 center = pos + extent_x + extent_y; | vec3 center = pos + extent_x + extent_y; | ||||
extent_x = mat3::rotate(angle, vec3::axis_z) * extent_x; | |||||
extent_y = mat3::rotate(angle, vec3::axis_z) * extent_y; | |||||
if (!m_data->m_image && m_data->m_texture) | if (!m_data->m_image && m_data->m_texture) | ||||
{ | { | ||||
@@ -52,7 +52,7 @@ public: | |||||
ShaderTexture GetTexture() const; | ShaderTexture GetTexture() const; | ||||
void Bind(); | void Bind(); | ||||
void Unbind(); | void Unbind(); | ||||
void BlitTile(uint32_t id, vec3 pos, int o, vec2 scale, | |||||
void BlitTile(uint32_t id, vec3 pos, int o, vec2 scale, float angle, | |||||
vec3 *vertex, vec2 *texture); | vec3 *vertex, vec2 *texture); | ||||
private: | private: | ||||