summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEugenio Favalli <elvenprogrammer@gmail.com>2006-01-07 10:13:03 +0000
committerEugenio Favalli <elvenprogrammer@gmail.com>2006-01-07 10:13:03 +0000
commit071877484ef493631592d9f10b6c4457097eca29 (patch)
tree2beb3921959350855a140d2e782cfdb4ec9380d6 /src
parent553e1d562af1413b9f28bf1c4b079d301349020e (diff)
downloadmana-071877484ef493631592d9f10b6c4457097eca29.tar.gz
mana-071877484ef493631592d9f10b6c4457097eca29.tar.bz2
mana-071877484ef493631592d9f10b6c4457097eca29.tar.xz
mana-071877484ef493631592d9f10b6c4457097eca29.zip
Removed --skipupdate option from Dev.Cpp project file, splitted the setup window into 3 tabs and added a joystick calibration tool.
Diffstat (limited to 'src')
-rw-r--r--src/game.cpp19
-rw-r--r--src/gui/setup.cpp159
-rw-r--r--src/gui/setup.h7
-rw-r--r--src/main.cpp1
4 files changed, 135 insertions, 51 deletions
diff --git a/src/game.cpp b/src/game.cpp
index ee254d13..aa77847d 100644
--- a/src/game.cpp
+++ b/src/game.cpp
@@ -301,8 +301,6 @@ void do_init()
player_node->setWeapon(player_info->weapon);
- remove("packet.list");
-
// Initialize joypad
SDL_InitSubSystem(SDL_INIT_JOYSTICK);
//SDL_JoystickEventState(SDL_ENABLE);
@@ -423,23 +421,26 @@ void do_input()
// Get the state of the joypad axis/buttons
if (joypad != NULL)
{
- // TODO: one different value of tolerance is needed for each direction
- // This probably means the need for a tuning utility/window
- int tolerance = (int)config.getValue("joytolerance", 100);
+ int lowerTolerance = (int)config.getValue("leftTolerance", -100);
+ int upperTolerance = (int)config.getValue("rightTolerance", 100);
SDL_JoystickUpdate();
- if (SDL_JoystickGetAxis(joypad, 0) > tolerance)
+ int position = SDL_JoystickGetAxis(joypad, 0);
+ if (position >= upperTolerance)
{
joy[JOY_RIGHT] = true;
}
- if (SDL_JoystickGetAxis(joypad, 0) < -tolerance)
+ else if (position <= lowerTolerance)
{
joy[JOY_LEFT] = true;
}
- if (SDL_JoystickGetAxis(joypad, 1) < -tolerance)
+ lowerTolerance = (int)config.getValue("upTolerance", -100);
+ upperTolerance = (int)config.getValue("downTolerance", 100);
+ position = SDL_JoystickGetAxis(joypad, 1);
+ if (position <= lowerTolerance)
{
joy[JOY_UP] = true;
}
- if (SDL_JoystickGetAxis(joypad, 1) > tolerance)
+ else if (position >= upperTolerance)
{
joy[JOY_DOWN] = true;
}
diff --git a/src/gui/setup.cpp b/src/gui/setup.cpp
index d76a0542..2114e635 100644
--- a/src/gui/setup.cpp
+++ b/src/gui/setup.cpp
@@ -26,6 +26,7 @@
#include <iostream>
#include <sstream>
+#include <guichan/widgets/container.hpp>
#include <guichan/widgets/label.hpp>
#include "button.h"
@@ -34,6 +35,7 @@
#include "ok_dialog.h"
#include "scrollarea.h"
#include "slider.h"
+#include "tabbedcontainer.h"
#include "../configuration.h"
#include "../graphics.h"
@@ -50,6 +52,8 @@ extern Graphics *graphics;
#include "skill.h"
#include "status.h"
+extern SDL_Joystick *joypad;
+
ModeListModel::ModeListModel()
{
SDL_Rect **modes;
@@ -68,13 +72,13 @@ ModeListModel::ModeListModel()
}
else{
/* Print valid modes */
- /*logger->log("Available Modes");
+ //logger->log("Available Modes");
for (int i = 0; modes[i]; ++i) {
- logger->log(" %dx%d", modes[i]->w, modes[i]->h);
+ //logger->log(" %dx%d", modes[i]->w, modes[i]->h);
std::stringstream mode;
mode << (int)modes[i]->w << "x" << (int)modes[i]->h;
videoModes.push_back(mode.str());
- }*/
+ }
}
}
@@ -94,9 +98,9 @@ std::string ModeListModel::getElementAt(int i)
Setup::Setup():
- Window("Setup")
+ Window("Setup"), mCalibrating(false), leftTolerance(0), rightTolerance(0),
+ upTolerance(0), downTolerance(0)
{
- videoLabel = new gcn::Label("Video settings");
modeListModel = new ModeListModel();
modeList = new ListBox(modeListModel);
modeList->setEnabled(false);
@@ -109,12 +113,13 @@ Setup::Setup():
customCursorCheckBox = new CheckBox("Custom cursor");
alphaLabel = new gcn::Label("Gui opacity");
alphaSlider = new Slider(0.2, 1.0);
- audioLabel = new gcn::Label("Audio settings");
soundCheckBox = new CheckBox("Sound", false);
sfxSlider = new Slider(0, 128);
musicSlider = new Slider(0, 128);
sfxLabel = new gcn::Label("Sfx volume");
musicLabel = new gcn::Label("Music volume");
+ calibrateLabel = new gcn::Label("Press the button to start calibration");
+ calibrateButton = new Button("Calibrate");
applyButton = new Button("Apply");
cancelButton = new Button("Cancel");
resetWinsToDefault = new Button("Reset Windows");
@@ -127,33 +132,40 @@ Setup::Setup():
sfxSlider->setEventId("sfx");
musicSlider->setEventId("music");
customCursorCheckBox->setEventId("customcursor");
+ calibrateButton->setEventId("calibrate");
// Set dimensions/positions
- setContentSize(240, 246);
+ int width = 230;
+ int height = 185;
+ setContentSize(width, height);
- videoLabel->setPosition(getWidth() - videoLabel->getWidth() - 5, 10);
- scrollArea->setDimension(gcn::Rectangle(10, 30, 90, 50));
+ scrollArea->setDimension(gcn::Rectangle(10, 10, 90, 50));
modeList->setDimension(gcn::Rectangle(0, 0, 60, 50));
- fsCheckBox->setPosition(110, 30);
- openGLCheckBox->setPosition(110, 50);
- customCursorCheckBox->setPosition(110, 70);
- alphaSlider->setDimension(gcn::Rectangle(10, 100, 100, 10));
- alphaLabel->setPosition(20 + alphaSlider->getWidth(), 97);
-
- audioLabel->setPosition(getWidth() - videoLabel->getWidth() - 5, 120);
- soundCheckBox->setPosition(10, 140);
- sfxSlider->setDimension(gcn::Rectangle(10, 160, 100, 10));
- musicSlider->setDimension(gcn::Rectangle(10, 180, 100, 10));
- sfxLabel->setPosition(20 + sfxSlider->getWidth(), 157);
- musicLabel->setPosition(20 + musicSlider->getWidth(), 177);
- resetWinsToDefault->setPosition(20, 197);
+ fsCheckBox->setPosition(110, 10);
+ openGLCheckBox->setPosition(110, 30);
+ customCursorCheckBox->setPosition(110, 50);
+ alphaSlider->setDimension(gcn::Rectangle(10, 80, 100, 10));
+ alphaLabel->setPosition(20 + alphaSlider->getWidth(), alphaSlider->getY());
+
+ soundCheckBox->setPosition(10, 10);
+ sfxSlider->setDimension(gcn::Rectangle(10, 30, 100, 10));
+ musicSlider->setDimension(gcn::Rectangle(10, 50, 100, 10));
+ sfxLabel->setPosition(20 + sfxSlider->getWidth(), 27);
+ musicLabel->setPosition(20 + musicSlider->getWidth(), 47);
+
+ calibrateLabel->setPosition(5, 10);
+ calibrateButton->setPosition(10, 20 + calibrateLabel->getHeight());
+
cancelButton->setPosition(
- getWidth() - 10 - cancelButton->getWidth(),
- getHeight() - 25 - cancelButton->getHeight());
+ width - cancelButton->getWidth() - 5,
+ height - cancelButton->getHeight() - 5);
applyButton->setPosition(
- cancelButton->getX() - 10 - applyButton->getWidth(),
- getHeight() - 25 - applyButton->getHeight());
-
+ cancelButton->getX() - applyButton->getWidth() - 5,
+ cancelButton->getY());
+ resetWinsToDefault->setPosition(
+ applyButton->getX() - resetWinsToDefault->getWidth() - 5,
+ applyButton->getY());
+
// Listen for actions
applyButton->addActionListener(this);
cancelButton->addActionListener(this);
@@ -162,21 +174,38 @@ Setup::Setup():
sfxSlider->addActionListener(this);
musicSlider->addActionListener(this);
customCursorCheckBox->addActionListener(this);
+ calibrateButton->addActionListener(this);
// Assemble dialog
- add(videoLabel);
- add(scrollArea);
- add(fsCheckBox);
- add(openGLCheckBox);
- add(customCursorCheckBox);
- add(audioLabel);
- add(soundCheckBox);
- add(alphaSlider);
- add(alphaLabel);
- add(sfxSlider);
- add(musicSlider);
- add(sfxLabel);
- add(musicLabel);
+ gcn::Container *video = new gcn::Container();
+ video->setOpaque(false);
+ video->add(scrollArea);
+ video->add(fsCheckBox);
+ video->add(openGLCheckBox);
+ video->add(customCursorCheckBox);
+ video->add(alphaSlider);
+ video->add(alphaLabel);
+
+ gcn::Container *audio = new gcn::Container();
+ audio->setOpaque(false);
+ audio->add(soundCheckBox);
+ audio->add(sfxSlider);
+ audio->add(musicSlider);
+ audio->add(sfxLabel);
+ audio->add(musicLabel);
+
+ gcn::Container *input = new gcn::Container();
+ input->setOpaque(false);
+ input->add(calibrateLabel);
+ input->add(calibrateButton);
+
+ TabbedContainer *panel = new TabbedContainer();
+ panel->setDimension(gcn::Rectangle(5, 5, 220, 130));
+ panel->setOpaque(false);
+ panel->addTab(video, "Video");
+ panel->addTab(audio, "Audio");
+ panel->addTab(input, "Input");
+ add(panel);
add(resetWinsToDefault);
add(applyButton);
add(cancelButton);
@@ -237,6 +266,28 @@ void Setup::action(const std::string &eventId)
config.setValue("customcursor",
customCursorCheckBox->isMarked() ? 1 : 0);
}
+ else if (eventId == "calibrate" && joypad != NULL)
+ {
+ if (mCalibrating)
+ {
+ calibrateButton->setCaption("Calibrate");
+ calibrateLabel->setCaption("Press the button to start calibration");
+ config.setValue("leftTolerance", leftTolerance);
+ config.setValue("rightTolerance", rightTolerance);
+ config.setValue("upTolerance", upTolerance);
+ config.setValue("downTolerance", downTolerance);
+ }
+ else
+ {
+ calibrateButton->setCaption("Stop");
+ calibrateLabel->setCaption("Rotate the stick");
+ leftTolerance = 0;
+ rightTolerance = 0;
+ upTolerance = 0;
+ downTolerance = 0;
+ }
+ mCalibrating = !mCalibrating;
+ }
else if (eventId == "apply")
{
setVisible(false);
@@ -353,3 +404,31 @@ void Setup::action(const std::string &eventId)
skillDialog->resetToDefaultSize();
}
}
+
+void Setup::logic()
+{
+ Window::logic();
+ if (mCalibrating)
+ {
+ SDL_JoystickUpdate();
+ int position = SDL_JoystickGetAxis(joypad, 0);
+ if (position > rightTolerance)
+ {
+ rightTolerance = position;
+ }
+ else if (position < leftTolerance)
+ {
+ leftTolerance = position;
+ }
+
+ position = SDL_JoystickGetAxis(joypad, 1);
+ if (position > downTolerance)
+ {
+ downTolerance = position;
+ }
+ else if (position < upTolerance)
+ {
+ upTolerance = position;
+ }
+ }
+}
diff --git a/src/gui/setup.h b/src/gui/setup.h
index b76b9a55..0b62fee6 100644
--- a/src/gui/setup.h
+++ b/src/gui/setup.h
@@ -88,6 +88,8 @@ class Setup : public Window, public gcn::ActionListener
*/
void
action(const std::string& eventId);
+
+ void logic();
private:
ModeListModel *modeListModel;
@@ -95,15 +97,16 @@ class Setup : public Window, public gcn::ActionListener
// Dialog widgets
gcn::ListBox *modeList;
gcn::ScrollArea *scrollArea;
- gcn::Label *videoLabel, *audioLabel;
gcn::Label *alphaLabel;
gcn::Label *sfxLabel, *musicLabel;
+ gcn::Label *calibrateLabel;
gcn::CheckBox *fsCheckBox;
gcn::CheckBox *openGLCheckBox;
gcn::CheckBox *soundCheckBox;
gcn::CheckBox *customCursorCheckBox;
gcn::Slider *alphaSlider;
gcn::Slider *sfxSlider, *musicSlider;
+ gcn::Button *calibrateButton;
gcn::Button *applyButton, *cancelButton;
gcn::Button *resetWinsToDefault;
@@ -114,6 +117,8 @@ class Setup : public Window, public gcn::ActionListener
bool openGLEnabled;
bool customCursorEnabled;
bool soundEnabled;
+ bool mCalibrating;
+ int leftTolerance, rightTolerance, upTolerance, downTolerance;
};
#endif
diff --git a/src/main.cpp b/src/main.cpp
index f0f885e7..f1f7cd4f 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -198,7 +198,6 @@ void init_engine()
config.setValue("updatehost", "http://themanaworld.org/files");
config.setValue("customcursor", 1);
config.setValue("homeDir", homeDir);
- config.setValue("joytolerance", 100);
// Checking if the configuration file exists... otherwise creates it with
// default options !