+ for( int y = 0; y < map.y; y ++ )
+ {
+ for( int x = 0; x < map.x; x ++ )
+ {
+ glm_mat4_identity( m_mdl );
+ glm_translate( m_mdl,
+ (vec3){
+ map.origin[0] + (float)x + 0.5f,
+ 0.f,
+ map.origin[2] + (float)y + 0.5f
+ }
+ );
+ glUniformMatrix4fv( SHADER_UNIFORM( colour_shader, "uMdl" ), 1, GL_FALSE, (float *)m_mdl );
+
+ struct cell *cell = &map.cells[ y*map.x+x ];
+
+ if( map.selected != cell )
+ {
+ if( cell->flags & CELL_FLAG_INPUT )
+ glUniform4f( SHADER_UNIFORM( colour_shader, "uColour" ), 0.9f, 0.5f, 0.5f, 1.0f );
+ else if( cell->flags & CELL_FLAG_OUTPUT )
+ glUniform4f( SHADER_UNIFORM( colour_shader, "uColour" ), 0.5f, 0.9f, 0.5f, 1.0f );
+ else if( cell->flags & CELL_FLAG_WALL )
+ glUniform4f( SHADER_UNIFORM( colour_shader, "uColour" ), 0.1f, 0.1f, 0.1f, 1.0f );
+ else
+ glUniform4f( SHADER_UNIFORM( colour_shader, "uColour" ), 0.7f, 0.7f, 0.7f, 1.0f );
+ }
+ else
+ {
+ float flash = sinf( vg_time*2.5f ) * 0.25f + 0.75f;
+ glUniform4f( SHADER_UNIFORM( colour_shader, "uColour" ), flash,flash,flash, 1.0f );
+ }
+
+ glDrawArrays( GL_TRIANGLES, 0, 6 );
+ }
+ }