Merge pull request #3232 from STK-helper/MiniMap

Increase minimap size and reduce its aliasing
This commit is contained in:
hiker
2018-05-09 15:39:19 +10:00
committed by GitHub
5 changed files with 55 additions and 8 deletions

View File

@@ -122,6 +122,13 @@
<replay max-time="600" delta-t="0.05" delta-pos="0.1"
delta-angle="0.5" />
<!-- Determines the minimap related values.
size: The size of the minimap (scaled afterwards) 480 = full screen height)
ai-icon: The size of the icons for the AI karts on the minimap.
player-icon: The size of the icons for the player karts. -->
<minimap size="180.0" ai-icon="16.0" player-icon="20.0"/>
<!-- Skidmark data: maximum number of skid marks, and
time for skidmarks to fade out. Maximum number will over
current number of karts, so the more karts, the less

View File

@@ -154,6 +154,9 @@ void STKConfig::load(const std::string &filename)
CHECK_NEG(m_replay_delta_angle, "replay delta-angle" );
CHECK_NEG(m_replay_delta_pos2, "replay delta-position" );
CHECK_NEG(m_replay_dt, "replay delta-t" );
CHECK_NEG(m_minimap_size, "minimap size" );
CHECK_NEG(m_minimap_ai_icon, "minimap ai_icon" );
CHECK_NEG(m_minimap_player_icon, "minimap player_icon" );
CHECK_NEG(m_smooth_angle_limit, "physics smooth-angle-limit" );
CHECK_NEG(m_default_track_friction, "physics default-track-friction");
CHECK_NEG(m_physics_fps, "physics fps" );
@@ -196,6 +199,9 @@ void STKConfig::init_defaults()
m_replay_delta_angle = -100;
m_replay_delta_pos2 = -100;
m_replay_dt = -100;
m_minimap_size = -100;
m_minimap_ai_icon = -100;
m_minimap_player_icon = -100;
m_network_state_frequeny = -100;
m_title_music = NULL;
m_smooth_normals = false;
@@ -406,6 +412,13 @@ void STKConfig::getAllData(const XMLNode * root)
}
if(const XMLNode *replay_node = root->getNode("minimap"))
{
replay_node->get("size", &m_minimap_size );
replay_node->get("ai-icon", &m_minimap_ai_icon );
replay_node->get("player-icon", &m_minimap_player_icon );
}
if (const XMLNode *fonts_list = root->getNode("fonts-list"))
{
fonts_list->get("normal-ttf", &m_normal_ttf);

View File

@@ -163,6 +163,13 @@ public:
* be generated. */
float m_replay_delta_angle;
/** The minimap size */
float m_minimap_size;
/* The size of icons for AIs and human players, respectively */
float m_minimap_ai_icon;
float m_minimap_player_icon;
/** The field of view for 1, 2, 3, 4 player split screen. */
float m_camera_fov[MAX_PLAYER_COUNT];

View File

@@ -82,9 +82,29 @@ RaceGUI::RaceGUI()
else
m_lap_width = font->getDimension(L"9/9").Width;
float map_size_splitscreen = 1.0f;
// If there are four players or more in splitscreen
// and the map is in a player view, scale down the map
if (race_manager->getNumLocalPlayers() >= 4 && !race_manager->getIfEmptyScreenSpaceExists())
{
// If the resolution is wider than 4:3, we don't have to scaledown the minimap as much
// Uses some margin, in case the game's screen is not exactly 4:3
if ( ((float) irr_driver->getFrameSize().Width / (float) irr_driver->getFrameSize().Height) >
(4.1f/3.0f))
{
if (race_manager->getNumLocalPlayers() == 4)
map_size_splitscreen = 0.75f;
else
map_size_splitscreen = 0.5f;
}
else
map_size_splitscreen = 0.5f;
}
// Originally m_map_height was 100, and we take 480 as minimum res
float scaling = irr_driver->getFrameSize().Height / 480.0f;
const float map_size = 100.0f;
const float map_size = stk_config->m_minimap_size * map_size_splitscreen;
const float top_margin = 3.5f * m_font_height;
if (UserConfigParams::m_multitouch_enabled &&
@@ -107,8 +127,8 @@ RaceGUI::RaceGUI()
// Marker texture has to be power-of-two for (old) OpenGL compliance
//m_marker_rendered_size = 2 << ((int) ceil(1.0 + log(32.0 * scaling)));
m_minimap_ai_size = (int)( 14.0f * scaling);
m_minimap_player_size = (int)( 16.0f * scaling);
m_minimap_ai_size = (int)( stk_config->m_minimap_ai_icon * scaling);
m_minimap_player_size = (int)( stk_config->m_minimap_player_icon * scaling);
m_map_width = (int)(map_size * scaling);
m_map_height = (int)(map_size * scaling);
m_map_left = (int)( 10.0f * scaling);
@@ -209,6 +229,9 @@ void RaceGUI::renderGlobal(float dt)
if(world->getPhase() == World::GOAL_PHASE)
drawGlobalGoal();
// MiniMap is drawn when the players wait for the start countdown to end
drawGlobalMiniMap();
// Timer etc. are not displayed unless the game is actually started.
if(!world->isRacePhase()) return;
if (!m_enabled) return;
@@ -227,8 +250,6 @@ void RaceGUI::renderGlobal(float dt)
}
}
drawGlobalMiniMap();
if (!m_is_tutorial) drawGlobalPlayerIcons(m_map_height);
if(Track::getCurrentTrack()->isSoccer()) drawScores();
#endif

View File

@@ -1118,10 +1118,9 @@ void Track::loadMinimap()
//Create the minimap resizing it as necessary.
m_mini_map_size = World::getWorld()->getRaceGUI()->getMiniMapSize();
core::dimension2du size = m_mini_map_size
.getOptimalSize(!nonpower,!nonsquare);
m_render_target = Graph::get()->makeMiniMap(size, "minimap::" + m_ident, video::SColor(127, 255, 255, 255));
//Use twice the size of the rendered minimap to reduce significantly aliasing
m_render_target = Graph::get()->makeMiniMap(m_mini_map_size*2, "minimap::" + m_ident, video::SColor(127, 255, 255, 255));
if (!m_render_target) return;
core::dimension2du mini_map_texture_size = m_render_target->getTextureSize();