Hey guys,
I am thinking about making a game with Ogre that uses the Xbox360 controller. I was wondering if there was a way that I could integrate the controllers d-pad (or the arrow buttons on the computer's keyboard) with CEGUI.
I only have like three menus so I was thinking that I could just have an array that contained each button. Then I would intially have the top button "hovered over", but I don't know if you can do this without a mouse. When the player hits the down arrow then the next button in the array would be "hovering".
Any ideas would be appreciated.
CEGUI sans mouse input Problem
Moderators: CEGUI MVP, CEGUI Team
Hey guys,
I wrote some code to let me do what I want. I am putting it up so that someone else can use it if they need to or they can make it better.
and here is the cpp
By the way in order to use this class, you have to add the button name strings with the add function. Then I have it so when you press the arrow keys it either calls nextBtn or prevBtn.
Let me know if this helps anyone.
I wrote some code to let me do what I want. I am putting it up so that someone else can use it if they need to or they can make it better.
Code: Select all
class ButtonContainerClass
{
public:
void addBtn(CEGUI::String); // Add a button to the container
void nextBtn(); // Move the selection to the next button
void prevBtn(); // Move the selection to the prev button
int getSize();
ButtonContainerClass(bool);
~ButtonContainerClass(void);
private:
void updateSelection();
std::vector<CEGUI::String> buttons; // Buttons are id'ed by name string
int cur_btn; // Index of current button
bool loop; // True if selection should go to beginning after the end
};
and here is the cpp
Code: Select all
ButtonContainerClass::ButtonContainerClass(bool loop_selection)
{
loop = loop_selection;
cur_btn = 0;
}
ButtonContainerClass::~ButtonContainerClass()
{
}
void ButtonContainerClass::addBtn(CEGUI::String btn_str)
{
buttons.push_back(btn_str);
if(buttons.size() == 1)
{
updateSelection();
}
}
int ButtonContainerClass::getSize()
{
return buttons.size();
}
void ButtonContainerClass::nextBtn()
{
if(cur_btn == buttons.size() - 1) // end of list
{
if(loop)
{
cur_btn = 0;
updateSelection();
}
}
else
{
cur_btn++;
updateSelection();
}
return;
}
void ButtonContainerClass::prevBtn()
{
if(cur_btn == 0) // start of list
{
if(loop)
{
cur_btn = buttons.size() - 1;
updateSelection();
}
}
else
{
cur_btn--;
updateSelection();
}
return;
}
void ButtonContainerClass::updateSelection()
{
CEGUI::Point pos = getWindow(buttons[cur_btn])->getPosition(CEGUI::MetricsMode::Absolute);
CEGUI::System::getSingleton().injectMousePosition(pos.d_x, pos.d_y);
return;
}
By the way in order to use this class, you have to add the button name strings with the add function. Then I have it so when you press the arrow keys it either calls nextBtn or prevBtn.
Let me know if this helps anyone.
Return to “Modifications / Integrations / Customisations”
Who is online
Users browsing this forum: No registered users and 3 guests