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:
Ben Krajancic
2018-02-08 10:52:53 +11:00
committed by auriamg
parent 0e5b7b532c
commit d96b6b92ce
7 changed files with 32 additions and 28 deletions

View File

@@ -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(

View File

@@ -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);

View File

@@ -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);

View File

@@ -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
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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()));
}