Browse Source

scene: allow to rotate sprites around the Z axis.

undefined
Sam Hocevar 11 years ago
parent
commit
32143b8bb4
8 changed files with 13 additions and 9 deletions
  1. +1
    -1
      demos/tutorial/06_sprite.cpp
  2. +1
    -1
      src/emitter.cpp
  3. +1
    -1
      src/font.cpp
  4. +4
    -2
      src/scene.cpp
  5. +1
    -1
      src/scene.h
  6. +1
    -1
      src/sprite.cpp
  7. +3
    -1
      src/tileset.cpp
  8. +1
    -1
      src/tileset.h

+ 1
- 1
demos/tutorial/06_sprite.cpp View File

@@ -78,7 +78,7 @@ public:
int frame = (int)(m_sprites[i].m2 * FRAME_COUNT);
// m_sprites[i].m1.z = 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);
}
}



+ 1
- 1
src/emitter.cpp View File

@@ -74,7 +74,7 @@ void Emitter::TickDraw(float seconds)

for (int i = 0; i < data->nparticles; 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)


+ 1
- 1
src/font.cpp View File

@@ -89,7 +89,7 @@ void Font::Print(vec3 pos, char const *str, vec2 scale)
break;
default:
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;
break;
}


+ 4
- 2
src/scene.cpp View File

@@ -44,6 +44,7 @@ struct Tile
uint32_t prio;
vec3 pos;
vec2 scale;
float angle;
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));
}

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());

@@ -181,6 +182,7 @@ void Scene::AddTile(TileSet *tileset, int id, vec3 pos, int o, vec2 scale)
t.pos = pos;
t.o = o;
t.scale = scale;
t.angle = angle;

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[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));
}



+ 1
- 1
src/scene.h View File

@@ -52,7 +52,7 @@ public:

/* FIXME: this should be deprecated -- it doesn't really match
* 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 SetLineMask(int new_mask=0xFFFFFFFF);
void SetLineSegmentSize(float new_segment_size=100000.f);


+ 1
- 1
src/sprite.cpp View File

@@ -50,7 +50,7 @@ void Sprite::TickDraw(float 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()


+ 3
- 1
src/tileset.cpp View File

@@ -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)
{
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_y = 0.5f * vec3(0.f, dy, dz);
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)
{


+ 1
- 1
src/tileset.h View File

@@ -52,7 +52,7 @@ public:
ShaderTexture GetTexture() const;
void Bind();
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);

private:


Loading…
Cancel
Save