- // Update camera
- float ratio = (float)vg_window_y / (float)vg_window_x;
- float const size = 7.5f;
- glm_ortho( -size, size, -size*ratio, size*ratio, 0.1f, 100.f, m_projection );
-
- glm_mat4_identity( m_view );
- glm_translate_z( m_view, -10.f );
- glm_rotate_x( m_view, 1.0f, m_view );
-
- glm_mat4_mul( m_projection, m_view, vg_pv );
-
- // Get mouse ray
- vec3 ray_origin;
- vec3 ray_dir;
-
- mat4 pv_inverse;
- vec4 vp = { 0.f, 0.f, vg_window_x, vg_window_y };
- glm_mat4_inv( vg_pv, pv_inverse );
- glm_unprojecti( (vec3){ vg_mouse_x, vg_window_y-vg_mouse_y, -1.f }, pv_inverse, vp, ray_dir );
- glm_unprojecti( (vec3){ vg_mouse_x, vg_window_y-vg_mouse_y, 0.f }, pv_inverse, vp, ray_origin );
- glm_vec3_sub( ray_dir, ray_origin, ray_dir );
-
- // Get floor tile intersection
- float ray_t = -ray_origin[1] / ray_dir[1];
-
- vec3 tile_pos;
- glm_vec3_copy( ray_origin, tile_pos );
- glm_vec3_muladds( ray_dir, ray_t, tile_pos );
- glm_vec3_sub( tile_pos, map.origin, tile_pos );
-
- int tile_x = floorf( tile_pos[0] );
- int tile_y = floorf( tile_pos[2] );
-
- map.selected = map_tile_at( (int [2]){tile_x, tile_y} );
-
- vg_line2( (vec3){0.f,0.f,0.f}, (vec3){0.f,3.f,0.f}, 0xff0000ff, 0xff00ff00 );