| @@ -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: | ||||