Split screen regression fixes (#3116)
* Fix lapcount * Fix selection box color * Fix messages on screen * Fix scaling * Fix for icons * Styling fixes * fix style issue * Fix calls * Final call fix
This commit is contained in:
@@ -163,7 +163,7 @@ void Camera::setKart(AbstractKart *new_kart)
|
||||
*/
|
||||
void Camera::setupCamera()
|
||||
{
|
||||
m_viewport = irr_driver->GetSplitscreenWindow(m_index);
|
||||
m_viewport = irr_driver->getSplitscreenWindow(m_index);
|
||||
m_aspect = (float)((float)(m_viewport.getWidth()) / (float)(m_viewport.getHeight()));
|
||||
|
||||
m_scaling = core::vector2df(
|
||||
|
||||
@@ -230,7 +230,7 @@ void IrrDriver::updateConfigIfRelevant()
|
||||
}
|
||||
#endif // !SERVER_ONLY
|
||||
} // updateConfigIfRelevant
|
||||
core::recti IrrDriver::GetSplitscreenWindow(int WindowNum)
|
||||
core::recti IrrDriver::getSplitscreenWindow(int WindowNum)
|
||||
{
|
||||
const int playernum = race_manager->getNumLocalPlayers();
|
||||
const float playernum_sqrt = sqrt(playernum);
|
||||
|
||||
@@ -203,7 +203,7 @@ public:
|
||||
void increaseObjectCount();
|
||||
core::array<video::IRenderTarget> &getMainSetup();
|
||||
void updateConfigIfRelevant();
|
||||
core::recti GetSplitscreenWindow(int WindowNum);
|
||||
core::recti getSplitscreenWindow(int WindowNum);
|
||||
void setAllMaterialFlags(scene::IMesh *mesh) const;
|
||||
scene::IAnimatedMesh *getAnimatedMesh(const std::string &name);
|
||||
scene::IMesh *getMesh(const std::string &name);
|
||||
|
||||
@@ -1245,6 +1245,8 @@ void Skin::drawSpinnerBody(const core::recti &rect, Widget* widget,
|
||||
|
||||
BoxRenderParams* params;
|
||||
SpinnerWidget* q = dynamic_cast<SpinnerWidget*>(widget);
|
||||
std::string texture = "squareFocusHalo::neutral";
|
||||
SColorf color_rgb = { 1,1,1,1 };
|
||||
if(q->getUseBackgroundColor())
|
||||
{
|
||||
int player_id=q->getSpinnerWidgetPlayerID();
|
||||
@@ -1252,17 +1254,9 @@ void Skin::drawSpinnerBody(const core::recti &rect, Widget* widget,
|
||||
params = &SkinConfig::m_render_params[
|
||||
"spinner::deactivated"];
|
||||
|
||||
SColorf color_rgb = GetPlayerColor(player_id);
|
||||
|
||||
widget->m_skin_r = color_rgb.r * 255.0F;
|
||||
widget->m_skin_g = color_rgb.g * 255.0F;
|
||||
widget->m_skin_b = color_rgb.b * 255.0F;
|
||||
|
||||
if (player_id == 0)
|
||||
{
|
||||
color_rgb = { 1,1,1,1 };
|
||||
}
|
||||
color_rgb = GetPlayerColor(player_id);
|
||||
|
||||
texture = "squareFocusHaloBW::neutral";
|
||||
}
|
||||
else if (widget->m_deactivated)
|
||||
{
|
||||
@@ -1276,6 +1270,10 @@ void Skin::drawSpinnerBody(const core::recti &rect, Widget* widget,
|
||||
{
|
||||
params=&SkinConfig::m_render_params["spinner::neutral"];
|
||||
}
|
||||
widget->m_skin_r = color_rgb.r * 255.0f;
|
||||
widget->m_skin_g = color_rgb.g * 255.0f;
|
||||
widget->m_skin_b = color_rgb.b * 255.0f;
|
||||
|
||||
for (int i = 1; i < MAX_PLAYER_COUNT + 1; i++)
|
||||
{
|
||||
if (widget->isFocusedForPlayer(i - 1)) {
|
||||
@@ -1287,7 +1285,7 @@ void Skin::drawSpinnerBody(const core::recti &rect, Widget* widget,
|
||||
|
||||
|
||||
drawBoxFromStretchableTexture(widget, rect2,
|
||||
SkinConfig::m_render_params["squareFocusHaloBW::neutral"]);
|
||||
SkinConfig::m_render_params[texture]);
|
||||
//TODO add squarefocushalo0
|
||||
|
||||
}
|
||||
|
||||
@@ -195,7 +195,7 @@ void RaceGUI::renderGlobal(float dt)
|
||||
{
|
||||
static video::SColor black = video::SColor(255,0,0,0);
|
||||
|
||||
GL32_draw2DRectangle(black, irr_driver->GetSplitscreenWindow(
|
||||
GL32_draw2DRectangle(black, irr_driver->getSplitscreenWindow(
|
||||
race_manager->getNumLocalPlayers()));
|
||||
}
|
||||
|
||||
@@ -253,7 +253,15 @@ void RaceGUI::renderPlayerView(const Camera *camera, float dt)
|
||||
|
||||
drawPlungerInFace(camera, dt);
|
||||
|
||||
scaling *= float(viewport.getWidth()) / float(irr_driver->getActualScreenSize().Width); // scale race GUI along screen size
|
||||
if (viewport.getWidth() != irr_driver->getActualScreenSize().Width)
|
||||
{
|
||||
scaling *= float(viewport.getWidth()) / float(irr_driver->getActualScreenSize().Width); // scale race GUI along screen size
|
||||
}
|
||||
else
|
||||
{
|
||||
scaling *= float(viewport.getWidth()) / 800.0f; // scale race GUI along screen size
|
||||
}
|
||||
|
||||
drawAllMessages(kart, viewport, scaling);
|
||||
|
||||
if(!World::getWorld()->isRacePhase()) return;
|
||||
@@ -369,7 +377,7 @@ void RaceGUI::drawGlobalTimer()
|
||||
if (race_manager->getIfEmptyScreenSpaceExists())
|
||||
{
|
||||
pos -= core::vector2d<s32>(0, pos.LowerRightCorner.Y / 2);
|
||||
pos += core::vector2d<s32>(0, irr_driver->getActualScreenSize().Height - irr_driver->GetSplitscreenWindow(0).getHeight());
|
||||
pos += core::vector2d<s32>(0, irr_driver->getActualScreenSize().Height - irr_driver->getSplitscreenWindow(0).getHeight());
|
||||
}
|
||||
|
||||
gui::ScalableFont* font = (use_digit_font ? GUIEngine::getHighresDigitFont() : GUIEngine::getFont());
|
||||
@@ -888,6 +896,8 @@ void RaceGUI::drawLap(const AbstractKart* kart,
|
||||
|
||||
core::recti pos;
|
||||
|
||||
pos.UpperLeftCorner.Y = viewport.UpperLeftCorner.Y + m_font_height;
|
||||
|
||||
// If the time display in the top right is in this viewport,
|
||||
// move the lap/rank display down a little bit so that it is
|
||||
// displayed under the time.
|
||||
@@ -897,10 +907,6 @@ void RaceGUI::drawLap(const AbstractKart* kart,
|
||||
{
|
||||
pos.UpperLeftCorner.Y += m_font_height;
|
||||
}
|
||||
else
|
||||
{
|
||||
pos.UpperLeftCorner.Y = viewport.UpperLeftCorner.Y + m_font_height;
|
||||
}
|
||||
pos.LowerRightCorner.Y = viewport.LowerRightCorner.Y+20;
|
||||
pos.UpperLeftCorner.X = viewport.LowerRightCorner.X
|
||||
- m_lap_width - 10;
|
||||
|
||||
@@ -253,7 +253,7 @@ void RaceGUIBase::drawAllMessages(const AbstractKart* kart,
|
||||
if (race_manager->getNumLocalPlayers() > 2)
|
||||
{
|
||||
font = GUIEngine::getSmallFont();
|
||||
font_height = m_small_font_max_height;
|
||||
y = viewport.getCenter().Y;
|
||||
}
|
||||
|
||||
irr_driver->getVideoDriver()->enableMaterial2D(); // seems like we need to remind irrlicht from time to time to use the Material2D
|
||||
@@ -348,10 +348,10 @@ void RaceGUIBase::drawPowerupIcons(const AbstractKart* kart,
|
||||
|
||||
int nSize = (int)(64.0f * scale);
|
||||
|
||||
int itemSpacing = (int)(scale * 30);
|
||||
int itemSpacing = (int)(scale * 32.0f);
|
||||
|
||||
int x1 = viewport.UpperLeftCorner.X + viewport.getWidth()/2
|
||||
- (n * itemSpacing)/2;
|
||||
int x1 = viewport.UpperLeftCorner.X + (viewport.getWidth()/2)
|
||||
- ((n * itemSpacing)/2);
|
||||
int y1 = viewport.UpperLeftCorner.Y + (int)(20 * scaling.Y);
|
||||
|
||||
int x2 = 0;
|
||||
@@ -364,7 +364,7 @@ void RaceGUIBase::drawPowerupIcons(const AbstractKart* kart,
|
||||
|
||||
for ( int i = 0 ; i < n ; i++ )
|
||||
{
|
||||
x2 = (int)(x1+i*itemSpacing);
|
||||
x2 = (int)((x1+i*itemSpacing) - (itemSpacing / 2));
|
||||
core::rect<s32> pos(x2, y1, x2+nSize, y1+nSize);
|
||||
draw2DImage(t, pos, rect, NULL,
|
||||
NULL, true);
|
||||
@@ -667,7 +667,7 @@ void RaceGUIBase::drawGlobalPlayerIcons(int bottom_margin)
|
||||
// Special case : when 3 players play, use 4th window to display such stuff
|
||||
if (race_manager->getIfEmptyScreenSpaceExists())
|
||||
{
|
||||
irr::core::recti Last_Space = irr_driver->GetSplitscreenWindow(race_manager->getNumLocalPlayers());
|
||||
irr::core::recti Last_Space = irr_driver->getSplitscreenWindow(race_manager->getNumLocalPlayers());
|
||||
x_base = Last_Space.UpperLeftCorner.X;
|
||||
y_base = Last_Space.UpperLeftCorner.Y;
|
||||
y_space = irr_driver->getActualScreenSize().Height - y_base;
|
||||
|
||||
@@ -186,7 +186,7 @@ void RaceGUIOverworld::renderGlobal(float dt)
|
||||
const int rows = ceil(Sqrt);
|
||||
const int cols = round(Sqrt);
|
||||
static video::SColor black = video::SColor(255,0,0,0);
|
||||
GL32_draw2DRectangle(black, irr_driver->GetSplitscreenWindow(
|
||||
GL32_draw2DRectangle(black, irr_driver->getSplitscreenWindow(
|
||||
race_manager->getNumLocalPlayers()));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user