Merge pull request #1218 from divvy81/downstream

1195 Multiplayer kart selection
This commit is contained in:
auriamg 2014-03-05 18:04:03 -05:00
commit 605e4c6dff
16 changed files with 95 additions and 15 deletions

View File

@ -105,7 +105,6 @@ when the border that intersect at this corner are enabled.
left_border="75" right_border="75" top_border="0" bottom_border="15"
hborder_out_portion="0.2" />
<!-- Stateless -->
<element type="squareFocusHalo" image="ocean/glass_square_focused.png"
left_border="6" right_border ="6" top_border="6" bottom_border="6"
@ -132,6 +131,21 @@ when the border that intersect at this corner are enabled.
left_border="110" right_border="110" top_border="0" bottom_border="36"
preserve_h_aspect_ratios="true" hborder_out_portion="0.0" />
<!-- player name spinner color in multiplayer-->
<element type="spinner1" state="neutral" image="ocean/glass_square1.png"
left_border="110" right_border="110" top_border="0" bottom_border="36"
preserve_h_aspect_ratios="true" hborder_out_portion="0.0" />
<element type="spinner2" state="neutral" image="ocean/glass_square2.png"
left_border="110" right_border="110" top_border="0" bottom_border="36"
preserve_h_aspect_ratios="true" hborder_out_portion="0.0" />
<element type="spinner3" state="neutral" image="ocean/glass_square3.png"
left_border="110" right_border="110" top_border="0" bottom_border="36"
preserve_h_aspect_ratios="true" hborder_out_portion="0.0" />
<element type="spinner4" state="neutral" image="ocean/glass_square4.png"
left_border="110" right_border="110" top_border="0" bottom_border="36"
preserve_h_aspect_ratios="true" hborder_out_portion="0.0" />
<!-- This one is a bit special. Only area(s) LEFT and/or RIGHT will be rendered. They will be overlaid
on top of the spinner's background -->
<element type="spinner" state="down" image="ocean/glassspinner_down.png"

View File

@ -132,6 +132,19 @@ when the border that intersect at this corner are enabled.
left_border="110" right_border="110" top_border="0" bottom_border="36"
preserve_h_aspect_ratios="true" hborder_out_portion="0.0" />
<element type="spinner1" state="neutral" image="peach/glass_square1.png"
left_border="110" right_border="110" top_border="0" bottom_border="36"
preserve_h_aspect_ratios="true" hborder_out_portion="0.0" />
<element type="spinner2" state="neutral" image="peach/glass_square2.png"
left_border="110" right_border="110" top_border="0" bottom_border="36"
preserve_h_aspect_ratios="true" hborder_out_portion="0.0" />
<element type="spinner3" state="neutral" image="peach/glass_square3.png"
left_border="110" right_border="110" top_border="0" bottom_border="36"
preserve_h_aspect_ratios="true" hborder_out_portion="0.0" />
<element type="spinner4" state="neutral" image="peach/glass_square4.png"
left_border="110" right_border="110" top_border="0" bottom_border="36"
preserve_h_aspect_ratios="true" hborder_out_portion="0.0" />
<!-- This one is a bit special. Only area(s) LEFT and/or RIGHT will be rendered. They will be overlaid
on top of the spinner's background -->
<element type="spinner" state="down" image="peach/glassspinner_down.png"

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -1226,7 +1226,42 @@ void Skin::drawSpinnerBody(const core::recti &rect, Widget* widget,
? SkinConfig::m_render_params["spinner::focused"]
: SkinConfig::m_render_params["spinner::neutral"];
if (widget->isFocusedForPlayer(1))
// defining a spinner widget to use the spinner widget class property(getBackgroundColor)
SpinnerWidget* q = dynamic_cast<SpinnerWidget*>(widget);
if(q->getUseBackgroundColor())
{
int player_id=q->getSpinnerWidgetPlayerID();
if(player_id==0)
params=SkinConfig::m_render_params["spinner1::neutral"];
else if(player_id==1)
params=SkinConfig::m_render_params["spinner2::neutral"];
else if(player_id==2)
params=SkinConfig::m_render_params["spinner3::neutral"];
else if(player_id==3)
params=SkinConfig::m_render_params["spinner4::neutral"];
}
else if (focused|| pressed)
{
params=SkinConfig::m_render_params["spinner::focused"];
}
else
{
params=SkinConfig::m_render_params["spinner::neutral"];
}
if (widget->isFocusedForPlayer(0))
{
core::recti rect2 = rect;
rect2.UpperLeftCorner.X += 2;
rect2.UpperLeftCorner.Y -= 3;
rect2.LowerRightCorner.X -= 2;
rect2.LowerRightCorner.Y += 5;
drawBoxFromStretchableTexture(widget, rect2,
SkinConfig::m_render_params["squareFocusHalo::neutral"]);
}
else if (widget->isFocusedForPlayer(1))
{
core::recti rect2 = rect;
rect2.UpperLeftCorner.X += 2;
@ -1284,6 +1319,7 @@ void Skin::drawSpinnerBody(const core::recti &rect, Widget* widget,
// ---- If this spinner is of "gauge" type, draw filling
const SpinnerWidget* w = dynamic_cast<const SpinnerWidget*>(widget);
if (w->isGauge() && !w->m_deactivated)
{
const int handle_size = (int)( widget->m_h*params.m_left_border

View File

@ -132,7 +132,6 @@ using namespace irr;
*/
namespace GUIEngine
{
/**
* In order to avoid calculating render information every frame, it's
* stored in a SkinWidgetContainer for each widget (or each widget part
@ -269,11 +268,8 @@ namespace GUIEngine
video::ITexture* bg_image;
std::vector<Widget*> m_tooltips;
std::vector<bool> m_tooltip_at_mouse;
#ifdef USE_PER_LINE_BACKGROUND
public:
#endif
@ -323,12 +319,12 @@ namespace GUIEngine
void drawTooltip(Widget* widget, bool atMouse);
public:
// dirty way to have dialogs that zoom in
bool m_dialog;
float m_dialog_size;
/**
* \brief load a skin from the file specified in the user configuration file
* \throw std::runtime_error if file cannot be read

View File

@ -45,7 +45,8 @@ SpinnerWidget::SpinnerWidget(const bool gauge) : Widget(WTYPE_SPINNER)
m_check_inside_me = true; //FIXME: not sure this is necessary
m_supports_multiplayer = true;
m_value = -1;
m_use_background_color=false;
m_spinner_widget_player_id=-1;
m_min = 0;
m_max = 999;
}
@ -160,6 +161,7 @@ void SpinnerWidget::add()
{
label->setText(m_labels[m_value].c_str() );
}
}
@ -173,9 +175,10 @@ void SpinnerWidget::add()
m_children[2].m_id = m_children[2].m_element->getID();
// refresh display
setValue(m_value);
}
// -----------------------------------------------------------------------------
ITexture* SpinnerWidget::getTexture()

View File

@ -68,6 +68,10 @@ namespace GUIEngine
* it displays how close the value is to the maximum by filling a line
*/
bool m_gauge;
//for setting background
bool m_use_background_color;
int m_spinner_widget_player_id;
/** \brief Whether to wrap back to the first value when going "beyond" the last value */
bool m_wrap_around;
@ -93,7 +97,7 @@ namespace GUIEngine
/** Call only if this spinner is graphical. Returns the current texture to display */
irr::video::ITexture* getTexture();
public:
LEAK_CHECK()
@ -104,7 +108,15 @@ namespace GUIEngine
void addLabel(irr::core::stringw label);
void clearLabels();
// next four functions are for background colour behind playername in multikart screen selection
void setUseBackgroundColor() {m_use_background_color=true;}
bool getUseBackgroundColor() {return m_use_background_color;}
void setSpinnerWidgetPlayerID(int playerID) {m_spinner_widget_player_id=playerID;}
int getSpinnerWidgetPlayerID() {return m_spinner_widget_player_id;}
void setListener(ISpinnerConfirmListener* listener) { m_listener = listener; }
/** \brief implement method from base class Widget */
@ -166,7 +178,7 @@ namespace GUIEngine
/** Display custom text in spinner */
void setCustomText(const core::stringw& text);
};
}
#endif

View File

@ -134,6 +134,10 @@ PlayerNameSpinner::PlayerNameSpinner(KartSelectionScreen* parent,
m_incorrect = false;
m_red_mark_widget = NULL;
m_parent = parent;
m_use_background_color = true;
setUseBackgroundColor();//except for multiplayer kart selection, this is false
setSpinnerWidgetPlayerID(m_player_id);
} // PlayerNameSpinner
// ------------------------------------------------------------------------
void PlayerNameSpinner::setID(const int m_player_id)
@ -270,6 +274,7 @@ PlayerKartWidget::PlayerKartWidget(KartSelectionScreen* parent,
//m_player_ident_spinner->m_event_handler = this;
m_children.push_back(m_player_ident_spinner);
// ----- Kart model view
@ -410,12 +415,13 @@ void PlayerKartWidget::setPlayerID(const int newPlayerID)
// Change the player ID
m_player_id = newPlayerID;
// restore previous focus, but with new player ID
if (focus != NULL) focus->setFocusForPlayer(m_player_id);
if (m_player_ident_spinner != NULL)
{
m_player_ident_spinner->setID(m_player_id);
}
} // setPlayerID
// ------------------------------------------------------------------------
@ -481,7 +487,7 @@ void PlayerKartWidget::add()
const int player_amount = PlayerManager::get()->getNumPlayers();
for (int n=0; n<player_amount; n++)
{
core::stringw name = PlayerManager::get()->getPlayer(n)->getName();
core::stringw name = PlayerManager::get()->getPlayer(n)->getName();
m_player_ident_spinner->addLabel( translations->fribidize(name) );
}

View File

@ -33,6 +33,7 @@ namespace GUIEngine
class Widget;
class BubbleWidget;
enum EventPropagation;
}
namespace Online
{
@ -203,7 +204,6 @@ class PlayerNameSpinner : public GUIEngine::SpinnerWidget
bool m_incorrect;
irr::gui::IGUIImage* m_red_mark_widget;
KartSelectionScreen* m_parent;
//virtual EventPropagation focused(const int m_playerID) ;
public: