1195-Multiplayer kart selection
@ -119,6 +119,7 @@ when the border that intersect at this corner are enabled.
|
||||
<element type="squareFocusHalo4" image="ocean/glass_square_focused4.png"
|
||||
left_border="6" right_border ="6" top_border="6" bottom_border="6"
|
||||
hborder_out_portion="1.0" />
|
||||
|
||||
|
||||
<!-- Stateless. No splitting into 9 areas is done; the image is just resized. -->
|
||||
<element type="selectionHalo" image="ocean/bubble.png" />
|
||||
@ -132,6 +133,22 @@ 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="spinner0" state="neutral" image="ocean/glass_square.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="spinner1" state="neutral" image="ocean/glass_square_2.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_square_3.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_square_4.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"
|
||||
|
@ -119,6 +119,7 @@ when the border that intersect at this corner are enabled.
|
||||
<element type="squareFocusHalo4" image="peach/glass_square_focused4.png"
|
||||
left_border="6" right_border ="6" top_border="6" bottom_border="6"
|
||||
hborder_out_portion="1.0" />
|
||||
|
||||
|
||||
<!-- Stateless. No splitting into 9 areas is done; the image is just resized. -->
|
||||
<element type="selectionHalo" image="peach/bubble.png" />
|
||||
@ -132,6 +133,20 @@ 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="spinner0" state="neutral" image="peach/glass_square.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="spinner1" state="neutral" image="peach/glass_square_2.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_square_3.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_square_4.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"
|
||||
|
BIN
data/skins/ocean/glass_square.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
data/skins/ocean/glass_square_2.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
data/skins/ocean/glass_square_3.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
data/skins/ocean/glass_square_4.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
data/skins/peach/glass_square.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
data/skins/peach/glass_square_2.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
data/skins/peach/glass_square_3.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
data/skins/peach/glass_square_4.png
Normal file
After Width: | Height: | Size: 15 KiB |
@ -1196,6 +1196,30 @@ void Skin::drawRibbonChild(const core::recti &rect, Widget* widget,
|
||||
* the widget is focused for other players is automatically determined)
|
||||
* FIXME: ugly to pass some focuses through parameter and others not xD
|
||||
*/
|
||||
|
||||
/*
|
||||
void Skin::setBackground(const core::recti &rect, Widget* widget,BoxRenderParams& params)
|
||||
{
|
||||
SpinnerWidget* q = dynamic_cast<SpinnerWidget*>(widget);
|
||||
if(q->getBackgroundColor())
|
||||
{
|
||||
core::recti rect3 = rect;
|
||||
rect3.UpperLeftCorner.X -= 2;
|
||||
rect3.UpperLeftCorner.Y += 3;
|
||||
rect3.LowerRightCorner.X += 2;
|
||||
rect3.LowerRightCorner.Y -= 5;
|
||||
int player_id=q->getSpinnerWidgetPlayerID();
|
||||
if(player_id==0)
|
||||
params=SkinConfig::m_render_params["spinner0::neutral"];
|
||||
if(player_id==1)
|
||||
params=SkinConfig::m_render_params["spinner1::neutral"];
|
||||
if(player_id==2)
|
||||
params=SkinConfig::m_render_params["spinner2::neutral"];
|
||||
if(player_id==3)
|
||||
params=SkinConfig::m_render_params["spinner3::neutral"];
|
||||
}
|
||||
return params;
|
||||
}*/
|
||||
void Skin::drawSpinnerBody(const core::recti &rect, Widget* widget,
|
||||
const bool pressed, bool focused)
|
||||
{
|
||||
@ -1221,20 +1245,48 @@ void Skin::drawSpinnerBody(const core::recti &rect, Widget* widget,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// defining params and spinner widget to use spinner widget functions
|
||||
SpinnerWidget* q = dynamic_cast<SpinnerWidget*>(widget);
|
||||
BoxRenderParams params;
|
||||
if (focused|| pressed)
|
||||
{
|
||||
params=SkinConfig::m_render_params["spinner::focused"];
|
||||
}
|
||||
else if(q->getBackgroundColor()==1)
|
||||
{
|
||||
|
||||
int player_id=q->getSpinnerWidgetPlayerID();
|
||||
// printf("player id=%d",player_idd);
|
||||
if(player_id==0)
|
||||
params=SkinConfig::m_render_params["spinner0::neutral"];
|
||||
if(player_id==1)
|
||||
params=SkinConfig::m_render_params["spinner1::neutral"];
|
||||
if(player_id==2)
|
||||
params=SkinConfig::m_render_params["spinner2::neutral"];
|
||||
if(player_id==3)
|
||||
params=SkinConfig::m_render_params["spinner3::neutral"];
|
||||
}
|
||||
else
|
||||
{
|
||||
params=SkinConfig::m_render_params["spinner::neutral"];
|
||||
}
|
||||
|
||||
BoxRenderParams& params = (focused || pressed)
|
||||
? SkinConfig::m_render_params["spinner::focused"]
|
||||
: SkinConfig::m_render_params["spinner::neutral"];
|
||||
|
||||
|
||||
|
||||
if (widget->isFocusedForPlayer(1))
|
||||
{
|
||||
core::recti rect2 = rect;
|
||||
core::recti rect2 = rect;
|
||||
rect2.UpperLeftCorner.X += 2;
|
||||
rect2.UpperLeftCorner.Y -= 3;
|
||||
rect2.LowerRightCorner.X -= 2;
|
||||
rect2.LowerRightCorner.Y += 5;
|
||||
//setBackground(rect,widget,pressed,focused,1);
|
||||
drawBoxFromStretchableTexture(widget, rect2,
|
||||
SkinConfig::m_render_params["squareFocusHalo2::neutral"]);
|
||||
|
||||
|
||||
}
|
||||
else if (widget->isFocusedForPlayer(2))
|
||||
{
|
||||
@ -1256,7 +1308,7 @@ void Skin::drawSpinnerBody(const core::recti &rect, Widget* widget,
|
||||
drawBoxFromStretchableTexture(widget, rect2,
|
||||
SkinConfig::m_render_params["squareFocusHalo4::neutral"]);
|
||||
}
|
||||
|
||||
|
||||
core::recti sized_rect = rect;
|
||||
if (m_dialog && m_dialog_size < 1.0f && widget->m_parent != NULL &&
|
||||
widget->m_parent->getType() == gui::EGUIET_WINDOW)
|
||||
@ -1281,9 +1333,10 @@ void Skin::drawSpinnerBody(const core::recti &rect, Widget* widget,
|
||||
drawBoxFromStretchableTexture(widget, sized_rect, params,
|
||||
widget->m_deactivated);
|
||||
|
||||
|
||||
|
||||
// ---- 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
|
||||
|
@ -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
|
||||
@ -322,13 +318,14 @@ namespace GUIEngine
|
||||
const bool pressed, const bool bottomArrow);
|
||||
|
||||
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
|
||||
@ -409,6 +406,9 @@ namespace GUIEngine
|
||||
virtual void setSize (gui::EGUI_DEFAULT_SIZE which, s32 size);
|
||||
virtual void setSpriteBank (gui::IGUISpriteBank *bank);
|
||||
|
||||
// BoxRenderParams& setBackground(const core::recti &rect, Widget* widget,BoxRenderParams& params);
|
||||
|
||||
|
||||
void drawTooltips();
|
||||
|
||||
video::ITexture* getImage(const char* name);
|
||||
|
@ -45,6 +45,9 @@ 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_backgroundcolor=0;
|
||||
// background_color_image="glass_square.jpg";
|
||||
m_spinner_widget_player_id=-1;
|
||||
|
||||
m_min = 0;
|
||||
m_max = 999;
|
||||
@ -107,9 +110,10 @@ void SpinnerWidget::add()
|
||||
rect<s32> widget_size = rect<s32>(m_x, m_y, m_x + m_w, m_y + m_h);
|
||||
IGUIButton * btn = GUIEngine::getGUIEnv()->addButton(widget_size, m_parent, widgetID, L"");
|
||||
m_element = btn;
|
||||
|
||||
|
||||
m_element->setTabOrder( m_element->getID() );
|
||||
|
||||
|
||||
// left arrow
|
||||
rect<s32> subsize_left_arrow = rect<s32>(0 ,0, m_h, m_h);
|
||||
IGUIButton * left_arrow = GUIEngine::getGUIEnv()->addButton(subsize_left_arrow, btn, getNewNoFocusID(), L" ");
|
||||
@ -118,9 +122,9 @@ void SpinnerWidget::add()
|
||||
m_children[0].m_event_handler = this;
|
||||
m_children[0].m_properties[PROP_ID] = "left";
|
||||
m_children[0].m_id = m_children[0].m_element->getID();
|
||||
|
||||
|
||||
m_badge_x_shift = subsize_left_arrow.getWidth();
|
||||
|
||||
// setBackgroundColor(); // setting background
|
||||
// label
|
||||
if (m_graphical)
|
||||
{
|
||||
@ -160,8 +164,9 @@ void SpinnerWidget::add()
|
||||
{
|
||||
label->setText(m_labels[m_value].c_str() );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
// right arrow
|
||||
rect<s32> subsize_right_arrow = rect<s32>(m_w - m_h, 0, m_w, m_h);
|
||||
@ -173,11 +178,29 @@ void SpinnerWidget::add()
|
||||
m_children[2].m_id = m_children[2].m_element->getID();
|
||||
|
||||
// refresh display
|
||||
|
||||
|
||||
setValue(m_value);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void SpinnerWidget::setBackgroundColor()
|
||||
{
|
||||
|
||||
m_backgroundcolor=1;
|
||||
}
|
||||
int SpinnerWidget::getBackgroundColor()
|
||||
{
|
||||
return m_backgroundcolor;
|
||||
}
|
||||
void SpinnerWidget::setSpinnerWidgetPlayerID(int playerID)
|
||||
{
|
||||
|
||||
m_spinner_widget_player_id=playerID;
|
||||
printf("spinnerwidgetplayerid=%d",m_spinner_widget_player_id);
|
||||
}
|
||||
int SpinnerWidget::getSpinnerWidgetPlayerID()
|
||||
{
|
||||
return m_spinner_widget_player_id;
|
||||
}
|
||||
ITexture* SpinnerWidget::getTexture()
|
||||
{
|
||||
assert(m_graphical);
|
||||
@ -365,6 +388,8 @@ stringw SpinnerWidget::getStringValue() const
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void SpinnerWidget::setValue(irr::core::stringw new_value)
|
||||
|
@ -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
|
||||
int m_backgroundcolor;
|
||||
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,6 +97,8 @@ namespace GUIEngine
|
||||
|
||||
/** Call only if this spinner is graphical. Returns the current texture to display */
|
||||
irr::video::ITexture* getTexture();
|
||||
// to set the background image
|
||||
// irr::video::ITexture* getBackgroundColor();
|
||||
|
||||
public:
|
||||
|
||||
@ -104,7 +110,13 @@ namespace GUIEngine
|
||||
|
||||
void addLabel(irr::core::stringw label);
|
||||
void clearLabels();
|
||||
|
||||
// next four functions are for background colour behind playername in multikart screen selection
|
||||
void setBackgroundColor();
|
||||
int getBackgroundColor();
|
||||
void setSpinnerWidgetPlayerID(int playerID);
|
||||
int getSpinnerWidgetPlayerID();
|
||||
|
||||
|
||||
void setListener(ISpinnerConfirmListener* listener) { m_listener = listener; }
|
||||
|
||||
/** \brief implement method from base class Widget */
|
||||
@ -165,6 +177,7 @@ namespace GUIEngine
|
||||
|
||||
/** Display custom text in spinner */
|
||||
void setCustomText(const core::stringw& text);
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
@ -134,11 +134,18 @@ PlayerNameSpinner::PlayerNameSpinner(KartSelectionScreen* parent,
|
||||
m_incorrect = false;
|
||||
m_red_mark_widget = NULL;
|
||||
m_parent = parent;
|
||||
m_backgroundcolor = true;
|
||||
// printf("m_player_id=%d",m_player_id);
|
||||
setBackgroundColor();
|
||||
setSpinnerWidgetPlayerID(m_player_id);
|
||||
} // PlayerNameSpinner
|
||||
// ------------------------------------------------------------------------
|
||||
void PlayerNameSpinner::setID(const int m_player_id)
|
||||
{
|
||||
PlayerNameSpinner::m_player_id = m_player_id;
|
||||
// printf("m_player_id=%d",m_player_id);
|
||||
|
||||
|
||||
} // setID
|
||||
// ------------------------------------------------------------------------
|
||||
/** Add a red mark on the spinner to mean "invalid choice" */
|
||||
@ -229,6 +236,8 @@ PlayerKartWidget::PlayerKartWidget(KartSelectionScreen* parent,
|
||||
m_player_ident_spinner->m_y = player_name_y;
|
||||
m_player_ident_spinner->m_w = player_name_w;
|
||||
m_player_ident_spinner->m_h = player_name_h;
|
||||
//m_player_ident_spinner->setBgimage(m_player_id);
|
||||
|
||||
|
||||
if (parent->m_multiplayer && associated_player)
|
||||
{
|
||||
@ -270,6 +279,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 +420,14 @@ void PlayerKartWidget::setPlayerID(const int newPlayerID)
|
||||
|
||||
// Change the player ID
|
||||
m_player_id = newPlayerID;
|
||||
|
||||
// m_player_ident_spinner->setBgimage(m_player_id);
|
||||
// restore previous focus, but with new player ID
|
||||
if (focus != NULL) focus->setFocusForPlayer(m_player_id);
|
||||
|
||||
if (m_player_ident_spinner != NULL)
|
||||
if (m_player_ident_spinner != NULL){
|
||||
m_player_ident_spinner->setID(m_player_id);
|
||||
//m_player_ident_spinner->setBgimage(m_player_id);
|
||||
}
|
||||
} // setPlayerID
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
@ -482,6 +494,7 @@ void PlayerKartWidget::add()
|
||||
for (int n=0; n<player_amount; n++)
|
||||
{
|
||||
core::stringw name = PlayerManager::get()->getPlayer(n)->getName();
|
||||
|
||||
m_player_ident_spinner->addLabel( translations->fribidize(name) );
|
||||
}
|
||||
|
||||
@ -1829,6 +1842,7 @@ bool KartSelectionScreen::validateIdentChoices()
|
||||
// perform actual checking
|
||||
for (int n=0; n<amount; n++)
|
||||
{
|
||||
|
||||
// skip players that took a guest account, they can be many on the
|
||||
// same identity in this case
|
||||
if (m_kart_widgets[n].getAssociatedPlayer()->getProfile()
|
||||
@ -2090,6 +2104,8 @@ EventPropagation FocusDispatcher::focused(const int playerID)
|
||||
const int amount = m_parent->m_kart_widgets.size();
|
||||
for (int n=0; n<amount; n++)
|
||||
{
|
||||
|
||||
|
||||
if (m_parent->m_kart_widgets[n].getPlayerID() == playerID)
|
||||
{
|
||||
// If player is done, don't do anything with focus
|
||||
|
@ -21,6 +21,7 @@
|
||||
|
||||
#include <string>
|
||||
#include "guiengine/screen.hpp"
|
||||
#include "guiengine/skin.hpp"
|
||||
#include "guiengine/widgets/dynamic_ribbon_widget.hpp"
|
||||
#include "guiengine/widgets/label_widget.hpp"
|
||||
#include "guiengine/widgets/model_view_widget.hpp"
|
||||
@ -33,6 +34,7 @@ namespace GUIEngine
|
||||
class Widget;
|
||||
class BubbleWidget;
|
||||
enum EventPropagation;
|
||||
|
||||
}
|
||||
namespace Online
|
||||
{
|
||||
@ -202,6 +204,8 @@ class PlayerNameSpinner : public GUIEngine::SpinnerWidget
|
||||
int m_player_id;
|
||||
bool m_incorrect;
|
||||
irr::gui::IGUIImage* m_red_mark_widget;
|
||||
irr::gui::IGUIImage* m_red_image;
|
||||
//Skin* m_background;
|
||||
KartSelectionScreen* m_parent;
|
||||
|
||||
//virtual EventPropagation focused(const int m_playerID) ;
|
||||
@ -217,6 +221,8 @@ public:
|
||||
// ------------------------------------------------------------------------
|
||||
/** Remove any red mark set with 'markAsIncorrect' */
|
||||
void markAsCorrect();
|
||||
//-- me --
|
||||
|
||||
};
|
||||
|
||||
/** A widget representing the kart selection for a player (i.e. the player's
|
||||
|