Просмотр исходного кода

Render according to the currently selected frame

Daniele Bartolini 12 лет назад
Родитель
Сommit
a5449b8fb6
2 измененных файлов с 12 добавлено и 1 удалено
  1. 10 1
      engine/Sprite.cpp
  2. 2 0
      engine/Sprite.h

+ 10 - 1
engine/Sprite.cpp

@@ -44,6 +44,7 @@ Sprite::Sprite(RenderWorld& render_world, SceneGraph& sg, int32_t node, const Sp
 	, m_scene_graph(sg)
 	, m_node(node)
 	, m_resource(sr)
+	, m_frame(0)
 {
 	m_vb = sr->vertex_buffer();
 	m_ib = sr->index_buffer();
@@ -108,6 +109,13 @@ void Sprite::set_local_pose(Unit* unit, const Matrix4x4& pose)
 	unit->set_local_pose(m_node, pose);
 }
 
+//-----------------------------------------------------------------------------
+void Sprite::set_frame(uint32_t i)
+{
+	CE_ASSERT(i < m_resource->num_frames(), "Frame out of bounds"); 
+	m_frame = i;
+}
+
 //-----------------------------------------------------------------------------
 void Sprite::set_material(MaterialId mat)
 {
@@ -127,7 +135,8 @@ void Sprite::render(Renderer& r, UniformId uniform)
 		| STATE_BLEND_EQUATION_ADD 
 		| STATE_BLEND_FUNC(STATE_BLEND_FUNC_SRC_ALPHA, STATE_BLEND_FUNC_ONE_MINUS_SRC_ALPHA));
 	r.set_vertex_buffer(m_vb);
-	r.set_index_buffer(m_ib);
+	const uint32_t start_index = m_frame * 6;
+	r.set_index_buffer(m_ib, start_index, 6);
 	r.set_pose(world_pose());
 	r.commit(0);
 }

+ 2 - 0
engine/Sprite.h

@@ -61,6 +61,7 @@ struct Sprite
 	void					set_local_rotation(Unit* unit, const Quaternion& rot);
 	void					set_local_pose(Unit* unit, const Matrix4x4& pose);
 
+	void					set_frame(uint32_t i);
 	void					set_material(MaterialId mat);
 	void					render(Renderer& r, UniformId uniform);
 
@@ -70,6 +71,7 @@ public:
 	SceneGraph&				m_scene_graph;	
 	int32_t					m_node;
 	const SpriteResource*	m_resource;
+	uint32_t				m_frame;
 
 	MaterialId				m_material;
 	VertexBufferId			m_vb;