started removing SDL from STK. Gamepad input broken, maybe keyboard a bit too. Default bindings changed because some keys on mac are ignored by irrlicht (known bug, fixed in enxt version IIRC)
git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/irrlicht@3421 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
parent
f21c7e9aa9
commit
87a274fc77
@ -23,6 +23,9 @@
|
||||
#include <stdexcept>
|
||||
#include <algorithm>
|
||||
|
||||
#include <SDL/SDL.h>
|
||||
#include <SDL/SDL_endian.h>
|
||||
|
||||
#ifdef __APPLE__
|
||||
# include <OpenAL/al.h>
|
||||
# include <OpenAL/alc.h>
|
||||
|
@ -26,8 +26,6 @@
|
||||
#else
|
||||
# include <AL/al.h>
|
||||
#endif
|
||||
#include <SDL/SDL.h>
|
||||
#include <SDL/SDL_endian.h>
|
||||
|
||||
#include "lisp/lisp.hpp"
|
||||
#include "utils/vec3.hpp"
|
||||
|
@ -404,8 +404,8 @@ void IrrDriver::update(float dt)
|
||||
// instead of calling run(), we only update the irrlicht timer (which is
|
||||
// necessary to get animations to work) - that's the only other operation
|
||||
// happening in run.
|
||||
//if(!m_device->run()) return;
|
||||
m_device->getTimer()->tick();
|
||||
if(!m_device->run()) return;
|
||||
//m_device->getTimer()->tick();
|
||||
m_device->getVideoDriver()->beginScene(true, true, video::SColor(255,100,101,140));
|
||||
m_scene_manager->drawAll();
|
||||
|
||||
|
@ -7,6 +7,7 @@
|
||||
#include "gui/widget.hpp"
|
||||
#include "io/file_manager.hpp"
|
||||
#include "gui/state_manager.hpp"
|
||||
#include "input/input_manager.hpp"
|
||||
|
||||
namespace GUIEngine
|
||||
{
|
||||
@ -27,6 +28,29 @@ namespace GUIEngine
|
||||
{
|
||||
return dt;
|
||||
}
|
||||
|
||||
class IrrlichtEventCore : public IEventReceiver
|
||||
{
|
||||
public:
|
||||
IrrlichtEventCore()
|
||||
{
|
||||
}
|
||||
~IrrlichtEventCore()
|
||||
{
|
||||
}
|
||||
bool OnEvent (const SEvent &event)
|
||||
{
|
||||
if(event.EventType == EET_GUI_EVENT || !StateManager::isGameState())
|
||||
{
|
||||
if(g_current_screen == NULL) return false;
|
||||
g_current_screen->OnEvent(event);
|
||||
}
|
||||
else
|
||||
input_manager->input(event);
|
||||
return false;
|
||||
}
|
||||
};
|
||||
IrrlichtEventCore* g_irrlicht_event_core = NULL;
|
||||
// -----------------------------------------------------------------------------
|
||||
IrrlichtDevice* getDevice()
|
||||
{
|
||||
@ -55,7 +79,7 @@ void clear()
|
||||
}
|
||||
|
||||
void switchToScreen(const char* screen_name)
|
||||
{
|
||||
{
|
||||
// clean what was left by the previous screen
|
||||
g_env->clear();
|
||||
if(g_current_screen != NULL) g_current_screen->elementsWereDeleted();
|
||||
@ -80,8 +104,16 @@ void switchToScreen(const char* screen_name)
|
||||
g_current_screen = new_screen;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// show screen
|
||||
g_current_screen->addWidgets();
|
||||
|
||||
// set event listener
|
||||
if(g_irrlicht_event_core == NULL) g_irrlicht_event_core = new IrrlichtEventCore();
|
||||
g_device->setEventReceiver(g_irrlicht_event_core);
|
||||
//g_env->setUserEventReceiver(g_irrlicht_event_core);
|
||||
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
/** to be called after e.g. a resolution switch */
|
||||
|
@ -7,6 +7,7 @@
|
||||
#include "gui/screen.hpp"
|
||||
#include "gui/engine.hpp"
|
||||
#include "gui/widget.hpp"
|
||||
#include "gui/state_manager.hpp"
|
||||
#include "io/file_manager.hpp"
|
||||
|
||||
using namespace irr;
|
||||
@ -190,9 +191,6 @@ void Screen::addWidgets()
|
||||
if(!m_loaded) loadFromFile();
|
||||
|
||||
addWidgetsRecursively( m_widgets );
|
||||
|
||||
// And tell the device to use our custom event receiver.
|
||||
GUIEngine::getDevice()->setEventReceiver(this);
|
||||
|
||||
// select the first widget
|
||||
Widget* w = getFirstWidget();
|
||||
@ -356,13 +354,16 @@ bool Screen::OnEvent(const SEvent& event)
|
||||
assert(transmitEvent != NULL);
|
||||
//if (event.EventType != EET_GUI_EVENT) return false;
|
||||
|
||||
|
||||
if(event.EventType == EET_KEY_INPUT_EVENT && event.KeyInput.PressedDown)
|
||||
{
|
||||
const int key = event.KeyInput.Key;
|
||||
|
||||
switch(key)
|
||||
{
|
||||
case KEY_ESCAPE :
|
||||
StateManager::escapePressed();
|
||||
break;
|
||||
|
||||
case KEY_SPACE :
|
||||
break;
|
||||
case KEY_LEFT:
|
||||
@ -408,12 +409,12 @@ bool Screen::OnEvent(const SEvent& event)
|
||||
IGUIElement *el, *first=NULL, *closest=NULL;
|
||||
el = GUIEngine::getGUIEnv()->getFocus();
|
||||
|
||||
Widget* w = getWidget( el->getID() );
|
||||
Widget* w = (el == NULL) ? NULL : getWidget( el->getID() );
|
||||
|
||||
// list widgets are a bit special, because up/down keys are also used
|
||||
// to navigate between various list items, not only to navigate between
|
||||
// components
|
||||
if(w->m_type == WTYPE_LIST)
|
||||
if(w != NULL && w->m_type == WTYPE_LIST)
|
||||
{
|
||||
IGUIListBox* list = dynamic_cast<IGUIListBox*>(w->m_element);
|
||||
assert(list != NULL);
|
||||
@ -429,6 +430,7 @@ bool Screen::OnEvent(const SEvent& event)
|
||||
{
|
||||
// select the first widget
|
||||
Widget* w = getLastWidget();
|
||||
|
||||
if(w != NULL) GUIEngine::getGUIEnv()->setFocus( w->m_element );
|
||||
}
|
||||
return true;
|
||||
@ -438,13 +440,13 @@ bool Screen::OnEvent(const SEvent& event)
|
||||
{
|
||||
IGUIElement *el, *first = NULL, *closest = NULL;
|
||||
el = GUIEngine::getGUIEnv()->getFocus();
|
||||
|
||||
Widget* w = getWidget( el->getID() );
|
||||
|
||||
Widget* w = (el == NULL) ? NULL : getWidget( el->getID() );
|
||||
|
||||
// list widgets are a bit special, because up/down keys are also used
|
||||
// to navigate between various list items, not only to navigate between
|
||||
// components
|
||||
if(w->m_type == WTYPE_LIST)
|
||||
if(w != NULL && w->m_type == WTYPE_LIST)
|
||||
{
|
||||
IGUIListBox* list = dynamic_cast<IGUIListBox*>(w->m_element);
|
||||
assert(list != NULL);
|
||||
@ -459,7 +461,7 @@ bool Screen::OnEvent(const SEvent& event)
|
||||
else
|
||||
{
|
||||
// select the first widget
|
||||
Widget* w = getFirstWidget();
|
||||
Widget* w = getFirstWidget();
|
||||
if(w != NULL) GUIEngine::getGUIEnv()->setFocus( w->m_element );
|
||||
}
|
||||
return true;
|
||||
@ -494,7 +496,7 @@ bool Screen::OnEvent(const SEvent& event)
|
||||
}
|
||||
else if(event.EventType == EET_GUI_EVENT)
|
||||
{
|
||||
s32 id = event.GUIEvent.Caller->getID();
|
||||
const s32 id = event.GUIEvent.Caller->getID();
|
||||
|
||||
switch(event.GUIEvent.EventType)
|
||||
{
|
||||
@ -558,7 +560,7 @@ bool Screen::OnEvent(const SEvent& event)
|
||||
{
|
||||
Widget* el = getWidget(id);
|
||||
if(el == NULL) break;
|
||||
|
||||
|
||||
el->focused();
|
||||
|
||||
break;
|
||||
|
@ -223,6 +223,8 @@
|
||||
95C65DAA0F532FD400BE7BA7 /* shadow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C65DA00F532FD400BE7BA7 /* shadow.cpp */; };
|
||||
95C65DAB0F532FD400BE7BA7 /* nitro.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C65DA10F532FD400BE7BA7 /* nitro.cpp */; };
|
||||
95CA59F80F82FCB7003323DB /* physical_object.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95CA59F70F82FCB7003323DB /* physical_object.cpp */; };
|
||||
95D464890FA37B1B00F50CA2 /* libIrrlicht.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 95D464880FA37B1B00F50CA2 /* libIrrlicht.a */; };
|
||||
95D464D30FA3801E00F50CA2 /* libSDL-1.2.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 95D464D20FA3801E00F50CA2 /* libSDL-1.2.0.dylib */; };
|
||||
95F423130E26E3DC00692113 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95F423120E26E3DC00692113 /* OpenGL.framework */; };
|
||||
95F4231F0E26E44800692113 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95F4231E0E26E44800692113 /* Cocoa.framework */; };
|
||||
95F423410E26E65B00692113 /* GLUT.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95F423400E26E65B00692113 /* GLUT.framework */; };
|
||||
@ -736,6 +738,8 @@
|
||||
95C65DA10F532FD400BE7BA7 /* nitro.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = nitro.cpp; path = ../../graphics/nitro.cpp; sourceTree = SOURCE_ROOT; };
|
||||
95CA59F60F82FCB7003323DB /* physical_object.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = physical_object.hpp; path = ../../physics/physical_object.hpp; sourceTree = SOURCE_ROOT; };
|
||||
95CA59F70F82FCB7003323DB /* physical_object.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = physical_object.cpp; path = ../../physics/physical_object.cpp; sourceTree = SOURCE_ROOT; };
|
||||
95D464880FA37B1B00F50CA2 /* libIrrlicht.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libIrrlicht.a; path = /usr/local/lib/libIrrlicht.a; sourceTree = "<absolute>"; };
|
||||
95D464D20FA3801E00F50CA2 /* libSDL-1.2.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libSDL-1.2.0.dylib"; path = "/usr/local/lib/libSDL-1.2.0.dylib"; sourceTree = "<absolute>"; };
|
||||
95D538840F69D61C00B4062E /* aabbox3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = aabbox3d.h; path = /usr/local/include/irrlicht/aabbox3d.h; sourceTree = "<absolute>"; };
|
||||
95D538850F69D61C00B4062E /* CDynamicMeshBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDynamicMeshBuffer.h; path = /usr/local/include/irrlicht/CDynamicMeshBuffer.h; sourceTree = "<absolute>"; };
|
||||
95D538860F69D61C00B4062E /* CIndexBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CIndexBuffer.h; path = /usr/local/include/irrlicht/CIndexBuffer.h; sourceTree = "<absolute>"; };
|
||||
@ -1142,6 +1146,8 @@
|
||||
950557580F6968860056E88C /* Carbon.framework in Frameworks */,
|
||||
950557600F6968A50056E88C /* QuickTime.framework in Frameworks */,
|
||||
950557650F6968BE0056E88C /* IOKit.framework in Frameworks */,
|
||||
95D464890FA37B1B00F50CA2 /* libIrrlicht.a in Frameworks */,
|
||||
95D464D30FA3801E00F50CA2 /* libSDL-1.2.0.dylib in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@ -1151,6 +1157,8 @@
|
||||
08FB7794FE84155DC02AAC07 /* STK_XCode */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
95D464880FA37B1B00F50CA2 /* libIrrlicht.a */,
|
||||
95D464D20FA3801E00F50CA2 /* libSDL-1.2.0.dylib */,
|
||||
95D538830F69D61C00B4062E /* irrlicht */,
|
||||
95C2ABA60F29653F000D3E5D /* src */,
|
||||
9513B40E0F0EDE80005D29F6 /* Frameworks */,
|
||||
@ -2795,10 +2803,6 @@
|
||||
"$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)",
|
||||
"$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_4)",
|
||||
);
|
||||
LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(DEVELOPER_DIR)/games/supertuxkart/src/bullet/Demos/OpenGL\"";
|
||||
LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(DEVELOPER_DIR)/games/supertuxkart/src/bullet/src\"";
|
||||
LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3 = "\"$(DEVELOPER_DIR)/games/supertuxkart/src/enet\"";
|
||||
LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_4 = "\"$(DEVELOPER_DIR)/games/supertuxkart/src\"";
|
||||
OTHER_CFLAGS = (
|
||||
"-Wall",
|
||||
"-DHAVE_OGGVORBIS=1",
|
||||
@ -2838,7 +2842,6 @@
|
||||
"-lplibsg",
|
||||
"-lplibul",
|
||||
"-lplibssgaux",
|
||||
"-lirrlicht",
|
||||
"-L/usr/local/lib",
|
||||
"-lopenal",
|
||||
"-lvorbisfile",
|
||||
@ -2849,7 +2852,6 @@
|
||||
PRODUCT_NAME = SuperTuxKart;
|
||||
SDKROOT = "";
|
||||
WARNING_CFLAGS = "";
|
||||
ZERO_LINK = NO;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
|
@ -142,6 +142,8 @@ bool DeviceManager::deserialize()
|
||||
*/
|
||||
bool DeviceManager::checkForGamePad(const int sdl_id)
|
||||
{
|
||||
// FIXME - replace with non-SDL code
|
||||
/*
|
||||
std::string name = SDL_JoystickName(sdl_id);
|
||||
|
||||
std::cout << "trying to find gamepad " << name.c_str() << std::endl;
|
||||
@ -161,7 +163,7 @@ bool DeviceManager::checkForGamePad(const int sdl_id)
|
||||
std::cout << "couldn't find this joystick, so creating a new one" << std::endl;
|
||||
add(new GamePadDevice(sdl_id));
|
||||
return true;
|
||||
|
||||
*/
|
||||
}
|
||||
|
||||
void DeviceManager::serialize()
|
||||
|
@ -109,6 +109,7 @@ KeyboardDevice::KeyboardDevice(irr::io::IrrXMLReader* xml)
|
||||
// -----------------------------------------------------------------------------
|
||||
void KeyboardDevice::loadDefaults()
|
||||
{
|
||||
/*
|
||||
m_bindings[PA_NITRO].id = SDLK_SPACE;
|
||||
m_bindings[PA_ACCEL].id = SDLK_UP;
|
||||
m_bindings[PA_BRAKE].id = SDLK_DOWN;
|
||||
@ -118,6 +119,17 @@ void KeyboardDevice::loadDefaults()
|
||||
m_bindings[PA_RESCUE].id = SDLK_ESCAPE;
|
||||
m_bindings[PA_FIRE].id = SDLK_LALT;
|
||||
m_bindings[PA_LOOK_BACK].id = SDLK_b;
|
||||
*/
|
||||
|
||||
m_bindings[PA_NITRO].id = KEY_KEY_N;
|
||||
m_bindings[PA_ACCEL].id = KEY_UP;
|
||||
m_bindings[PA_BRAKE].id = KEY_DOWN;
|
||||
m_bindings[PA_LEFT].id = KEY_LEFT;
|
||||
m_bindings[PA_RIGHT].id = KEY_RIGHT;
|
||||
m_bindings[PA_DRIFT].id = KEY_KEY_V;
|
||||
m_bindings[PA_RESCUE].id = KEY_ESCAPE;
|
||||
m_bindings[PA_FIRE].id = KEY_SPACE;
|
||||
m_bindings[PA_LOOK_BACK].id = KEY_KEY_B ;
|
||||
|
||||
m_bindings[PA_NITRO].type = Input::IT_KEYBOARD;
|
||||
m_bindings[PA_ACCEL].type = Input::IT_KEYBOARD;
|
||||
@ -159,7 +171,8 @@ bool KeyboardDevice::hasBinding(const int key_id, PlayerAction* action /* out */
|
||||
GamePadDevice::GamePadDevice(irr::io::IrrXMLReader* xml)
|
||||
{
|
||||
m_type = DT_GAMEPAD;
|
||||
m_sdlJoystick = NULL;
|
||||
// FIXME - replace with non-SDL code
|
||||
// m_sdlJoystick = NULL;
|
||||
m_prevAxisDirections = NULL;
|
||||
m_deadzone = DEADZONE_JOYSTICK;
|
||||
|
||||
@ -186,16 +199,17 @@ GamePadDevice::GamePadDevice(int sdlIndex)
|
||||
|
||||
open(sdlIndex);
|
||||
|
||||
m_name = SDL_JoystickName(sdlIndex);
|
||||
// FIXME - replace with non-SDL code
|
||||
// m_name = SDL_JoystickName(sdlIndex);
|
||||
|
||||
loadDefaults();
|
||||
} // GamePadDevice
|
||||
// -----------------------------------------------------------------------------
|
||||
void GamePadDevice::open(const int sdl_id)
|
||||
{
|
||||
m_sdlJoystick = SDL_JoystickOpen(sdl_id);
|
||||
|
||||
const int count = SDL_JoystickNumAxes(m_sdlJoystick);
|
||||
// FIXME - replace with non-SDL code
|
||||
// m_sdlJoystick = SDL_JoystickOpen(sdl_id);
|
||||
const int count = 1; // SDL_JoystickNumAxes(m_sdlJoystick);
|
||||
m_prevAxisDirections = new Input::AxisDirection[count];
|
||||
|
||||
std::cout << "(i) This gamepad has " << count << " axes\n";
|
||||
@ -355,5 +369,6 @@ GamePadDevice::~GamePadDevice()
|
||||
{
|
||||
delete[] m_prevAxisDirections;
|
||||
|
||||
SDL_JoystickClose(m_sdlJoystick);
|
||||
// FIXME - replace with non-SDL code
|
||||
// SDL_JoystickClose(m_sdlJoystick);
|
||||
} // ~GamePadDevice
|
||||
|
@ -1,7 +1,6 @@
|
||||
#ifndef INPUT_DEVICE_HPP
|
||||
#define INPUT_DEVICE_HPP
|
||||
|
||||
#include <SDL/SDL.h>
|
||||
#include <string>
|
||||
#include "input/input.hpp"
|
||||
#include <iostream>
|
||||
@ -59,7 +58,8 @@ class GamePadDevice : public InputDevice
|
||||
{
|
||||
void resetAxisDirection(const int axis, Input::AxisDirection direction, const int player);
|
||||
public:
|
||||
SDL_Joystick *m_sdlJoystick;
|
||||
// FIXME - replace with non-SDL code
|
||||
// SDL_Joystick *m_sdlJoystick;
|
||||
int m_deadzone;
|
||||
int m_index;
|
||||
Input::AxisDirection *m_prevAxisDirections;
|
||||
|
@ -27,8 +27,6 @@
|
||||
#include <sstream>
|
||||
#include <algorithm>
|
||||
|
||||
#include <SDL/SDL.h>
|
||||
|
||||
#include "input/input.hpp"
|
||||
//#include "actionmap.hpp"
|
||||
#include "user_config.hpp"
|
||||
@ -48,7 +46,7 @@
|
||||
InputManager *input_manager;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
/** Initialise SDL.
|
||||
/** Initialise input
|
||||
*/
|
||||
InputManager::InputManager()
|
||||
: m_sensed_input(0),
|
||||
@ -75,9 +73,9 @@ m_mode(BOOTSTRAP), m_mouse_val_x(0), m_mouse_val_y(0)
|
||||
}
|
||||
|
||||
// Prepare a list of connected joysticks.
|
||||
const int numSticks = SDL_NumJoysticks();
|
||||
|
||||
std::cout << "SDL detects " << numSticks << " gamepads" << std::endl;
|
||||
// FIXME - replace with non-SDL code
|
||||
const int numSticks = 0; //SDL_NumJoysticks();
|
||||
// std::cout << "SDL detects " << numSticks << " gamepads" << std::endl;
|
||||
|
||||
// TODO - detect if device is currently known and has an entry in the config
|
||||
// the constructor below should only be used if not
|
||||
@ -195,13 +193,7 @@ InputManager::~InputManager()
|
||||
{
|
||||
|
||||
delete m_device_manager;
|
||||
|
||||
//const int NUM_STICKS = SDL_NumJoysticks();
|
||||
//for (int i = 0; i < NUM_STICKS; i++)
|
||||
// delete m_stick_infos[i];
|
||||
|
||||
//delete [] m_stick_infos;
|
||||
|
||||
|
||||
// FIXME LEAK: delete m_action_map if defined
|
||||
|
||||
} // ~InputManager
|
||||
@ -234,7 +226,7 @@ void InputManager::handleStaticAction(int key, int value)
|
||||
switch (key)
|
||||
{
|
||||
#ifdef DEBUG
|
||||
case SDLK_F1:
|
||||
case KEY_F1:
|
||||
if (race_manager->getNumPlayers() ==1 )
|
||||
{
|
||||
Kart* kart = RaceManager::getWorld()->getLocalPlayerKart(0);
|
||||
@ -242,14 +234,14 @@ void InputManager::handleStaticAction(int key, int value)
|
||||
kart->attach(ATTACH_ANVIL, 5);
|
||||
}
|
||||
break;
|
||||
case SDLK_F2:
|
||||
case KEY_F2:
|
||||
if (race_manager->getNumPlayers() ==1 )
|
||||
{
|
||||
Kart* kart = RaceManager::getPlayerKart(0);
|
||||
kart->setPowerup(POWERUP_PLUNGER, 10000);
|
||||
}
|
||||
break;
|
||||
case SDLK_F3:
|
||||
case KEY_F3:
|
||||
if (race_manager->getNumPlayers() ==1 )
|
||||
{
|
||||
Kart* kart = RaceManager::getPlayerKart(0);
|
||||
@ -257,14 +249,14 @@ void InputManager::handleStaticAction(int key, int value)
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
case SDLK_F12:
|
||||
case KEY_F12:
|
||||
user_config->m_display_fps = !user_config->m_display_fps;
|
||||
if(user_config->m_display_fps)
|
||||
{
|
||||
getRaceGUI()->resetFPSCounter();
|
||||
}
|
||||
break;
|
||||
case SDLK_F11:
|
||||
case KEY_F11:
|
||||
glPolygonMode(GL_FRONT_AND_BACK, isWireframe ? GL_FILL : GL_LINE);
|
||||
isWireframe = ! isWireframe;
|
||||
break;
|
||||
@ -272,16 +264,16 @@ void InputManager::handleStaticAction(int key, int value)
|
||||
// For now disable F9 toggling fullscreen, since windows requires
|
||||
// to reload all textures, display lists etc. Fullscreen can
|
||||
// be toggled from the main menu (options->display).
|
||||
case SDLK_F9:
|
||||
case KEY_F9:
|
||||
SDLManager::toggleFullscreen(false); // 0: do not reset textures
|
||||
// Fall through to put the game into pause mode.
|
||||
#endif
|
||||
case SDLK_ESCAPE:
|
||||
case KEY_ESCAPE:
|
||||
// TODO - show race menu
|
||||
// RaceManager::getWorld()->pause();
|
||||
//menu_manager->pushMenu(MENUID_RACEMENU);
|
||||
break;
|
||||
case SDLK_F10:
|
||||
case KEY_F10:
|
||||
history->Save();
|
||||
break;
|
||||
default:
|
||||
@ -308,142 +300,67 @@ void InputManager::handleStaticAction(int key, int value)
|
||||
void InputManager::input(Input::InputType type, int id0, int id1, int id2,
|
||||
int value)
|
||||
{
|
||||
int player;
|
||||
PlayerAction action;
|
||||
|
||||
// menu navigation. TODO : enable navigation with gamepads
|
||||
if(!StateManager::isGameState())
|
||||
{
|
||||
irr::SEvent::SKeyInput evt;
|
||||
|
||||
if(type == Input::IT_KEYBOARD)
|
||||
{
|
||||
if(id0 == SDLK_RETURN)
|
||||
evt.Key = irr::KEY_RETURN;
|
||||
else if(id0 == SDLK_UP)
|
||||
evt.Key = irr::KEY_UP;
|
||||
else if(id0 == SDLK_DOWN)
|
||||
evt.Key = irr::KEY_DOWN;
|
||||
else if(id0 == SDLK_RIGHT)
|
||||
evt.Key = irr::KEY_RIGHT;
|
||||
else if(id0 == SDLK_LEFT)
|
||||
evt.Key = irr::KEY_LEFT;
|
||||
else
|
||||
return; // only those keys are accepted in menus for now.
|
||||
|
||||
evt.PressedDown = value > MAX_VALUE/2;
|
||||
}
|
||||
else // allow menu navigation with gamepads and other devices too
|
||||
{
|
||||
int player;
|
||||
PlayerAction action;
|
||||
|
||||
const bool action_found = m_device_manager->mapInputToPlayerAndAction( type, id0, id1, id2, value, &player, &action );
|
||||
if(!action_found) return;
|
||||
|
||||
evt.PressedDown = abs(value) > MAX_VALUE/2;
|
||||
|
||||
if(action == PA_FIRE || action == PA_NITRO)
|
||||
evt.Key = irr::KEY_RETURN;
|
||||
else if(action == PA_ACCEL)
|
||||
evt.Key = irr::KEY_UP;
|
||||
else if(action == PA_BRAKE)
|
||||
evt.Key = irr::KEY_DOWN;
|
||||
else if(action == PA_RIGHT)
|
||||
evt.Key = irr::KEY_RIGHT;
|
||||
else if(action == PA_LEFT)
|
||||
evt.Key = irr::KEY_LEFT;
|
||||
else if(action == PA_RESCUE)
|
||||
{
|
||||
// escape (or 'rescue' on gamepad) is a little special
|
||||
if(evt.PressedDown) StateManager::escapePressed();
|
||||
return;
|
||||
}
|
||||
else
|
||||
return; // only those bindings are accepted in menus for now.
|
||||
|
||||
if(type == Input::IT_STICKMOTION)
|
||||
{
|
||||
if(m_timer_in_use) return; // time between keys not elapsed yet
|
||||
|
||||
if(evt.PressedDown)
|
||||
{
|
||||
// minimum time between two gamepad events in menu
|
||||
m_timer_in_use = true;
|
||||
m_timer = 0.25;
|
||||
}
|
||||
} // end if (gamepad input type)
|
||||
} // end if (keyboard vs gamepad)
|
||||
|
||||
// send event to irrLicht
|
||||
irr::SEvent wrapper;
|
||||
wrapper.KeyInput = evt;
|
||||
wrapper.EventType = EET_KEY_INPUT_EVENT;
|
||||
|
||||
GUIEngine::getDevice()->postEventFromUser(wrapper);
|
||||
|
||||
}
|
||||
// in-game event handling
|
||||
else
|
||||
{
|
||||
int player;
|
||||
PlayerAction action;
|
||||
|
||||
const bool action_found = m_device_manager->mapInputToPlayerAndAction( type, id0, id1, id2, value, &player, &action );
|
||||
|
||||
//GameAction ga = m_action_map->getEntry(type, id0, id1, id2);
|
||||
const bool action_found = m_device_manager->mapInputToPlayerAndAction( type, id0, id1, id2, value, &player, &action );
|
||||
|
||||
std::cout << "Input code=" << id0 << " found=" << action_found << std::endl;
|
||||
|
||||
//GameAction ga = m_action_map->getEntry(type, id0, id1, id2);
|
||||
#if 0 // TODO - input sensing
|
||||
// Act different in input sensing mode.
|
||||
if (m_mode >= INPUT_SENSE_PREFER_AXIS &&
|
||||
m_mode <= INPUT_SENSE_PREFER_BUTTON)
|
||||
// Act different in input sensing mode.
|
||||
if (m_mode >= INPUT_SENSE_PREFER_AXIS &&
|
||||
m_mode <= INPUT_SENSE_PREFER_BUTTON)
|
||||
{
|
||||
// Input sensing should be canceled.
|
||||
if (ga == GA_LEAVE && m_sensed_input->type==Input::IT_KEYBOARD)
|
||||
{
|
||||
// Input sensing should be canceled.
|
||||
if (ga == GA_LEAVE && m_sensed_input->type==Input::IT_KEYBOARD)
|
||||
handleGameAction(GA_SENSE_CANCEL, value);
|
||||
}
|
||||
// Stores the sensed input when the button/key/axes/<whatever> is
|
||||
// released only and is not used in a fixed mapping.
|
||||
else if (!user_config->isFixedInput(type, id0, id1, id2) )
|
||||
{
|
||||
// See if the new input should be stored. This happens if:
|
||||
// 1) the value is larger
|
||||
// 2) nothing has been saved yet
|
||||
// 3) the new event has the preferred type
|
||||
// The latter is necessary since some gamepads have analog
|
||||
// buttons that can return two different events when pressed
|
||||
bool store_new = abs(value) > m_max_sensed_input ||
|
||||
m_max_sensed_type == Input::IT_NONE ||
|
||||
( m_mode == INPUT_SENSE_PREFER_AXIS &&
|
||||
type == Input::IT_STICKMOTION &&
|
||||
m_max_sensed_type != Input::IT_STICKMOTION ) ||
|
||||
( m_mode == INPUT_SENSE_PREFER_BUTTON &&
|
||||
type == Input::IT_STICKBUTTON &&
|
||||
m_max_sensed_type != Input::IT_STICKBUTTON );
|
||||
if(store_new)
|
||||
{
|
||||
handleGameAction(GA_SENSE_CANCEL, value);
|
||||
m_sensed_input->type = type;
|
||||
m_sensed_input->id0 = id0;
|
||||
m_sensed_input->id1 = id1;
|
||||
m_sensed_input->id2 = id2;
|
||||
m_max_sensed_input = abs(value);
|
||||
m_max_sensed_type = type;
|
||||
}
|
||||
// Stores the sensed input when the button/key/axes/<whatever> is
|
||||
// released only and is not used in a fixed mapping.
|
||||
else if (!user_config->isFixedInput(type, id0, id1, id2) )
|
||||
{
|
||||
// See if the new input should be stored. This happens if:
|
||||
// 1) the value is larger
|
||||
// 2) nothing has been saved yet
|
||||
// 3) the new event has the preferred type
|
||||
// The latter is necessary since some gamepads have analog
|
||||
// buttons that can return two different events when pressed
|
||||
bool store_new = abs(value) > m_max_sensed_input ||
|
||||
m_max_sensed_type == Input::IT_NONE ||
|
||||
( m_mode == INPUT_SENSE_PREFER_AXIS &&
|
||||
type == Input::IT_STICKMOTION &&
|
||||
m_max_sensed_type != Input::IT_STICKMOTION ) ||
|
||||
( m_mode == INPUT_SENSE_PREFER_BUTTON &&
|
||||
type == Input::IT_STICKBUTTON &&
|
||||
m_max_sensed_type != Input::IT_STICKBUTTON );
|
||||
if(store_new)
|
||||
{
|
||||
m_sensed_input->type = type;
|
||||
m_sensed_input->id0 = id0;
|
||||
m_sensed_input->id1 = id1;
|
||||
m_sensed_input->id2 = id2;
|
||||
m_max_sensed_input = abs(value);
|
||||
m_max_sensed_type = type;
|
||||
}
|
||||
// Notify the completion of the input sensing if the key/stick/
|
||||
// ... is released.
|
||||
if(value==0)
|
||||
handleGameAction(GA_SENSE_COMPLETE, 0);
|
||||
}
|
||||
} // if m_mode==INPUT_SENSE_PREFER_{AXIS,BUTTON}
|
||||
else
|
||||
// Notify the completion of the input sensing if the key/stick/
|
||||
// ... is released.
|
||||
if(value==0)
|
||||
handleGameAction(GA_SENSE_COMPLETE, 0);
|
||||
}
|
||||
} // if m_mode==INPUT_SENSE_PREFER_{AXIS,BUTTON}
|
||||
else
|
||||
#endif
|
||||
if (action_found)
|
||||
{
|
||||
RaceManager::getWorld()->getLocalPlayerKart(player)->action(action, abs(value));
|
||||
}
|
||||
else if(type == Input::IT_KEYBOARD)
|
||||
{
|
||||
// keyboard press not handled by device manager / bindings. Check static bindings...
|
||||
handleStaticAction( id0, value );
|
||||
}
|
||||
if (action_found)
|
||||
{
|
||||
RaceManager::getWorld()->getLocalPlayerKart(player)->action(action, abs(value));
|
||||
}
|
||||
else if(type == Input::IT_KEYBOARD)
|
||||
{
|
||||
// keyboard press not handled by device manager / bindings. Check static bindings...
|
||||
handleStaticAction( id0, value );
|
||||
}
|
||||
} // input
|
||||
|
||||
@ -465,6 +382,81 @@ void InputManager::input(Input::InputType type, int id0, int id1, int id2,
|
||||
* flexibility (= treat 4 directions as four buttons).
|
||||
*
|
||||
*/
|
||||
void InputManager::input(const SEvent& event)
|
||||
{
|
||||
std::cout << "input event\n";
|
||||
|
||||
if(event.EventType == EET_JOYSTICK_INPUT_EVENT)
|
||||
{
|
||||
std::cout << "x=" << event.JoystickEvent.Axis[SEvent::SJoystickEvent::AXIS_X]
|
||||
<< " y=" << event.JoystickEvent.Axis[SEvent::SJoystickEvent::AXIS_Y]
|
||||
<< " 1=" << event.JoystickEvent.IsButtonPressed(0)
|
||||
<< " 2=" << event.JoystickEvent.IsButtonPressed(1)
|
||||
<< " 3=" << event.JoystickEvent.IsButtonPressed(2)
|
||||
<< " 4=" << event.JoystickEvent.IsButtonPressed(3) << std::endl;
|
||||
}
|
||||
else if(event.EventType == EET_KEY_INPUT_EVENT)
|
||||
{
|
||||
const int key = event.KeyInput.Key;
|
||||
|
||||
if(event.KeyInput.PressedDown)
|
||||
{
|
||||
// escape is a little special
|
||||
if(key == KEY_ESCAPE)
|
||||
{
|
||||
StateManager::escapePressed();
|
||||
return;
|
||||
}
|
||||
|
||||
input(Input::IT_KEYBOARD, key,
|
||||
#ifdef HAVE_IRRLICHT
|
||||
// FIXME: not sure why this happens: with plib the unicode
|
||||
// value is 0. Since all values defined in user_config
|
||||
// assume that the unicode value is 0, it does not work
|
||||
// with irrlicht, which has proper unicode values defined
|
||||
// (keydown is not recognised, but keyup is). So for now
|
||||
// (till user_config is migrated to full irrlicht support)
|
||||
// we pass the 0 here artifically so that keyboard handling
|
||||
// works.
|
||||
0,
|
||||
#else
|
||||
ev.key.keysym.unicode,
|
||||
#endif
|
||||
0, MAX_VALUE);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
input(Input::IT_KEYBOARD, key, 0, 0, 0);
|
||||
}
|
||||
}
|
||||
#if 0 // in case we ever use mouse in-game...
|
||||
else if(event.EventType == EET_MOUSE_INPUT_EVENT)
|
||||
{
|
||||
const int type = event.MouseInput.Event;
|
||||
|
||||
if(type == EMIE_MOUSE_MOVED)
|
||||
{
|
||||
// m_mouse_x = event.MouseInput.X;
|
||||
// m_mouse_y = event.MouseInput.Y;
|
||||
//const int wheel = event.MouseInput.Wheel;
|
||||
}
|
||||
|
||||
/*
|
||||
EMIE_LMOUSE_PRESSED_DOWN Left mouse button was pressed down.
|
||||
EMIE_RMOUSE_PRESSED_DOWN Right mouse button was pressed down.
|
||||
EMIE_MMOUSE_PRESSED_DOWN Middle mouse button was pressed down.
|
||||
EMIE_LMOUSE_LEFT_UP Left mouse button was left up.
|
||||
EMIE_RMOUSE_LEFT_UP Right mouse button was left up.
|
||||
EMIE_MMOUSE_LEFT_UP Middle mouse button was left up.
|
||||
EMIE_MOUSE_MOVED The mouse cursor changed its position.
|
||||
EMIE_MOUSE_WHEEL The mouse wheel was moved. Use Wheel value in event data to find out in what direction and how fast.
|
||||
*/
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
void InputManager::input()
|
||||
{
|
||||
SDL_Event ev;
|
||||
@ -606,6 +598,7 @@ void InputManager::input()
|
||||
m_mouse_val_y = 0;
|
||||
|
||||
} // input
|
||||
*/
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
/** Retrieves the Input instance that has been prepared in the input sense
|
||||
@ -701,7 +694,7 @@ void InputManager::setMode(InputDriverMode new_mode)
|
||||
case LOWLEVEL:
|
||||
// Leaving lowlevel mode.
|
||||
|
||||
SDL_EnableUNICODE(SDL_DISABLE);
|
||||
// SDL_EnableUNICODE(SDL_DISABLE);
|
||||
|
||||
SDLManager::showPointer();
|
||||
|
||||
@ -751,7 +744,7 @@ void InputManager::setMode(InputDriverMode new_mode)
|
||||
// We must be in menu mode now in order to switch.
|
||||
assert (m_mode == MENU);
|
||||
|
||||
SDL_EnableUNICODE(SDL_ENABLE);
|
||||
// SDL_EnableUNICODE(SDL_ENABLE);
|
||||
|
||||
SDLManager::hidePointer();
|
||||
|
||||
|
@ -24,7 +24,7 @@
|
||||
#include <vector>
|
||||
#include <irrlicht.h>
|
||||
|
||||
#include <SDL/SDL.h>
|
||||
// #include <SDL/SDL.h>
|
||||
|
||||
#include "input/input.hpp"
|
||||
|
||||
@ -75,7 +75,10 @@ public:
|
||||
InputManager();
|
||||
~InputManager();
|
||||
void initGamePadDevices();
|
||||
void input();
|
||||
|
||||
//void input();
|
||||
void input(const irr::SEvent& event);
|
||||
|
||||
void setMode(InputDriverMode);
|
||||
bool isInMode(InputDriverMode);
|
||||
|
||||
|
10
src/main.cpp
10
src/main.cpp
@ -18,12 +18,6 @@
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
#ifdef __APPLE__
|
||||
// Necessary for Macs when using SDL without Xwindows: this include
|
||||
// will rename main to SDLmain, and a new main program will be linked
|
||||
// in from the library, causing a correct framework to be set up
|
||||
# include "SDL/SDL.h"
|
||||
#endif
|
||||
|
||||
#ifdef WIN32
|
||||
# ifdef __CYGWIN__
|
||||
@ -506,10 +500,6 @@ void CleanTuxKart()
|
||||
|
||||
//=============================================================================
|
||||
|
||||
// FIXME - temporary, move
|
||||
void eventCallback(GUIEngine::Widget* widget, std::string& name)
|
||||
{
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[] )
|
||||
{
|
||||
|
@ -19,7 +19,7 @@
|
||||
|
||||
#include "main_loop.hpp"
|
||||
|
||||
#include <SDL/SDL.h>
|
||||
// #include <SDL/SDL.h>
|
||||
#include <assert.h>
|
||||
#include "history.hpp"
|
||||
#include "input/input_manager.hpp"
|
||||
@ -43,10 +43,10 @@ int maxFPS = 0;
|
||||
|
||||
MainLoop::MainLoop() :
|
||||
m_abort(false),
|
||||
m_frame_count(0),
|
||||
m_curr_time(m_prev_time),
|
||||
m_prev_time(SDL_GetTicks())
|
||||
m_frame_count(0)
|
||||
{
|
||||
m_curr_time = 0;
|
||||
m_prev_time = 0;
|
||||
} // MainLoop
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
@ -54,39 +54,26 @@ MainLoop::~MainLoop()
|
||||
{
|
||||
} // ~MainLoop
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
void MainLoop::loadBackgroundImages()
|
||||
{
|
||||
#ifndef HAVE_IRRLICHT
|
||||
int ind = user_config->getBackgroundIndex();
|
||||
const std::string &main = stk_config->getMainMenuPicture(ind);
|
||||
m_title_screen_texture = material_manager->getMaterial(main)->getState()->getTextureHandle();
|
||||
|
||||
const std::string &background = stk_config->getBackgroundPicture(ind);
|
||||
m_bg_texture = material_manager->getMaterial(background)->getState()->getTextureHandle();
|
||||
#endif
|
||||
} // loadBackgroundImages
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
/** Run the actual main loop.
|
||||
*/
|
||||
void MainLoop::run()
|
||||
{
|
||||
loadBackgroundImages();
|
||||
IrrlichtDevice* device = GUIEngine::getDevice();
|
||||
|
||||
bool music_on = false;
|
||||
m_curr_time = SDL_GetTicks();
|
||||
m_curr_time = device->getTimer()->getRealTime(); // SDL_GetTicks();
|
||||
float dt;
|
||||
while(!m_abort)
|
||||
{
|
||||
input_manager->input();
|
||||
// input_manager->input();
|
||||
|
||||
m_prev_time = m_curr_time;
|
||||
|
||||
while( 1 )
|
||||
{
|
||||
m_curr_time = SDL_GetTicks();
|
||||
dt =(float)(m_curr_time - m_prev_time);
|
||||
m_curr_time = device->getTimer()->getRealTime();
|
||||
dt = (float)(m_curr_time - m_prev_time);
|
||||
|
||||
// don't allow the game to run slower than a certain amount.
|
||||
// when the computer can't keep it up, slow down the shown time instead
|
||||
@ -102,7 +89,8 @@ void MainLoop::run()
|
||||
//it might limit the frames to even 55 frames. On some cases,
|
||||
//SDL_Delay(1) will just cause the program to give up the
|
||||
//rest of it's timeslice.
|
||||
SDL_Delay(1);
|
||||
// FIXME - implement with non-SDL code
|
||||
// SDL_Delay(1);
|
||||
}
|
||||
else break;
|
||||
}
|
||||
@ -155,8 +143,8 @@ void MainLoop::run()
|
||||
//FIXME: SDL_GetTicks() includes the loading time,
|
||||
//so the FPS will be skewed for now.
|
||||
printf("Number of frames: %d time %f, Average FPS: %f\n",
|
||||
m_frame_count, SDL_GetTicks() * 0.001,
|
||||
(float)m_frame_count/(SDL_GetTicks() * 0.001));
|
||||
m_frame_count, device->getTimer()->getRealTime()*0.001,
|
||||
(float)m_frame_count/(device->getTimer()->getRealTime()));
|
||||
if(!history->replayHistory()) history->Save();
|
||||
std::exit(-2);
|
||||
} // if profile finished
|
||||
|
@ -41,15 +41,15 @@ private:
|
||||
int m_frame_count;
|
||||
Uint32 m_curr_time;
|
||||
Uint32 m_prev_time;
|
||||
GLuint m_title_screen_texture;
|
||||
GLuint m_bg_texture;
|
||||
// GLuint m_title_screen_texture;
|
||||
// GLuint m_bg_texture;
|
||||
|
||||
public:
|
||||
MainLoop();
|
||||
~MainLoop();
|
||||
void run();
|
||||
void abort();
|
||||
void loadBackgroundImages();
|
||||
// void loadBackgroundImages();
|
||||
}; // MainLoop
|
||||
|
||||
extern MainLoop* main_loop;
|
||||
|
@ -1,6 +1,6 @@
|
||||
|
||||
#include "sdl_manager.hpp"
|
||||
#include <SDL/SDL.h>
|
||||
// #include <SDL/SDL.h>
|
||||
#include "user_config.hpp"
|
||||
#include "input/input_manager.hpp"
|
||||
#include "gui/state_manager.hpp"
|
||||
@ -26,6 +26,7 @@ namespace SDLManager
|
||||
|
||||
void init()
|
||||
{
|
||||
/*
|
||||
if (SDL_Init(SDL_INIT_JOYSTICK | SDL_INIT_TIMER) < 0)
|
||||
{
|
||||
fprintf(stderr, "SDL_Init failed: %s\n", SDL_GetError());
|
||||
@ -70,6 +71,7 @@ namespace SDLManager
|
||||
// setVideoMode(false);
|
||||
|
||||
SDL_JoystickEventState(SDL_ENABLE);
|
||||
*/
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
@ -77,7 +79,8 @@ namespace SDLManager
|
||||
*/
|
||||
void showPointer()
|
||||
{
|
||||
SDL_ShowCursor(SDL_ENABLE);
|
||||
GUIEngine::getDevice()->getCursorControl()->setVisible(true);
|
||||
// SDL_ShowCursor(SDL_ENABLE);
|
||||
} // showPointer
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
@ -85,7 +88,8 @@ namespace SDLManager
|
||||
*/
|
||||
void hidePointer()
|
||||
{
|
||||
SDL_ShowCursor(SDL_DISABLE);
|
||||
GUIEngine::getDevice()->getCursorControl()->setVisible(true);
|
||||
// SDL_ShowCursor(SDL_DISABLE);
|
||||
} // hidePointer
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
@ -93,6 +97,8 @@ namespace SDLManager
|
||||
*/
|
||||
void toggleFullscreen(bool resetTextures)
|
||||
{
|
||||
// TODO
|
||||
/*
|
||||
user_config->m_fullscreen = !user_config->m_fullscreen;
|
||||
|
||||
m_flags = SDL_OPENGL | SDL_HWSURFACE;
|
||||
@ -113,6 +119,7 @@ namespace SDLManager
|
||||
hidePointer();
|
||||
|
||||
// setVideoMode(resetTextures);
|
||||
*/
|
||||
} // toggleFullscreen
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
@ -33,7 +33,7 @@
|
||||
# include <direct.h>
|
||||
#endif
|
||||
|
||||
#include <SDL/SDL.h>
|
||||
// #include <SDL/SDL.h>
|
||||
#define _WINSOCKAPI_
|
||||
#include <plib/ul.h>
|
||||
|
||||
@ -588,7 +588,9 @@ std::string UserConfig::getInputAsString(const Input &input)
|
||||
s = _("not set");
|
||||
break;
|
||||
case Input::IT_KEYBOARD:
|
||||
s = SDL_GetKeyName((SDLKey) input.id0);
|
||||
// TODO - implement with non-SDL code
|
||||
// s = SDL_GetKeyName((SDLKey) input.id0);
|
||||
s = "some key";
|
||||
break;
|
||||
case Input::IT_STICKMOTION:
|
||||
s = StringUtils::insert_values( _("joy %d axis %d %s"), input.id0,
|
||||
|
Loading…
Reference in New Issue
Block a user