properly detected using the generic SDL driver.legacy
| @@ -22,6 +22,7 @@ liblol_a_SOURCES = \ | |||
| $(xbox_sources) \ | |||
| $(nacl_sources) \ | |||
| $(sdl_sources) \ | |||
| $(d3d9_sources) \ | |||
| $(android_sources) \ | |||
| \ | |||
| thread/threadbase.h thread/thread.h \ | |||
| @@ -51,6 +52,9 @@ sdl_sources = \ | |||
| platform/sdl/sdlapp.cpp platform/sdl/sdlapp.h \ | |||
| platform/sdl/sdlinput.cpp platform/sdl/sdlinput.h | |||
| d3d9_sources = \ | |||
| platform/xbox/xboxinput.cpp platform/xbox/xboxinput.h | |||
| if USE_NACL | |||
| nacl_sources = \ | |||
| platform/nacl/naclapp.cpp platform/nacl/naclapp.h \ | |||
| @@ -0,0 +1,102 @@ | |||
| // | |||
| // Lol Engine | |||
| // | |||
| // Copyright: (c) 2010-2012 Sam Hocevar <sam@hocevar.net> | |||
| // This program is free software; you can redistribute it and/or | |||
| // modify it under the terms of the Do What The Fuck You Want To | |||
| // Public License, Version 2, as published by Sam Hocevar. See | |||
| // http://sam.zoy.org/projects/COPYING.WTFPL for more details. | |||
| // | |||
| #if defined HAVE_CONFIG_H | |||
| # include "config.h" | |||
| #endif | |||
| #if defined USE_D3D9 | |||
| # include <d3d9.h> | |||
| # include <xinput.h> | |||
| #endif | |||
| #include "core.h" | |||
| #include "d3d9input.h" | |||
| namespace lol | |||
| { | |||
| /* | |||
| * D3d9 Input implementation class | |||
| */ | |||
| class D3d9InputData | |||
| { | |||
| friend class D3d9Input; | |||
| private: | |||
| #if defined USE_D3D9 | |||
| Array<int, Stick *> m_joysticks; | |||
| #endif | |||
| }; | |||
| /* | |||
| * Public D3d9Input class | |||
| */ | |||
| D3d9Input::D3d9Input() | |||
| : m_data(new D3d9InputData()) | |||
| { | |||
| #if defined USE_D3D9 | |||
| for (int i = 0; i < XUSER_MAX_COUNT; i++) | |||
| { | |||
| XINPUT_STATE state; | |||
| if (XInputGetState(i, &state) != ERROR_SUCCESS) | |||
| continue; | |||
| Stick *stick = Input::CreateStick(); | |||
| stick->SetAxisCount(4); | |||
| stick->SetButtonCount(0); | |||
| m_data->m_joysticks.Push(i, stick); | |||
| } | |||
| #endif | |||
| m_gamegroup = GAMEGROUP_BEFORE; | |||
| } | |||
| D3d9Input::~D3d9Input() | |||
| { | |||
| #if defined USE_D3D9 | |||
| /* Unregister all the joysticks we added */ | |||
| while (m_data->m_joysticks.Count()) | |||
| { | |||
| Input::DestroyStick(m_data->m_joysticks[0].m2); | |||
| m_data->m_joysticks.Remove(0); | |||
| } | |||
| #endif | |||
| delete m_data; | |||
| } | |||
| void D3d9Input::TickGame(float seconds) | |||
| { | |||
| Entity::TickGame(seconds); | |||
| } | |||
| void D3d9Input::TickDraw(float seconds) | |||
| { | |||
| Entity::TickDraw(seconds); | |||
| #if defined USE_D3D9 | |||
| for (int i = 0; i < m_data->m_joysticks.Count(); i++) | |||
| { | |||
| XINPUT_STATE state; | |||
| if (XInputGetState(m_data->m_joysticks[i].m1, &state) != ERROR_SUCCESS) | |||
| continue; | |||
| m_data->m_joysticks[i].m2->SetAxis(0, (float)state.Gamepad.sThumbLX / 32768.f); | |||
| m_data->m_joysticks[i].m2->SetAxis(1, -(float)state.Gamepad.sThumbLY / 32768.f); | |||
| m_data->m_joysticks[i].m2->SetAxis(2, (float)state.Gamepad.sThumbRX / 32768.f); | |||
| m_data->m_joysticks[i].m2->SetAxis(3, -(float)state.Gamepad.sThumbRY / 32768.f); | |||
| } | |||
| #endif | |||
| } | |||
| } /* namespace lol */ | |||
| @@ -0,0 +1,43 @@ | |||
| // | |||
| // Lol Engine | |||
| // | |||
| // Copyright: (c) 2010-2012 Sam Hocevar <sam@hocevar.net> | |||
| // This program is free software; you can redistribute it and/or | |||
| // modify it under the terms of the Do What The Fuck You Want To | |||
| // Public License, Version 2, as published by Sam Hocevar. See | |||
| // http://sam.zoy.org/projects/COPYING.WTFPL for more details. | |||
| // | |||
| // | |||
| // The D3d9Input class | |||
| // ------------------- | |||
| // | |||
| #if !defined __LOL_D3D9INPUT_H__ | |||
| #define __LOL_D3D9INPUT_H__ | |||
| #include "entity.h" | |||
| namespace lol | |||
| { | |||
| class D3d9InputData; | |||
| class D3d9Input : public Entity | |||
| { | |||
| public: | |||
| D3d9Input(); | |||
| virtual ~D3d9Input(); | |||
| protected: | |||
| virtual void TickGame(float seconds); | |||
| virtual void TickDraw(float seconds); | |||
| private: | |||
| D3d9InputData *m_data; | |||
| }; | |||
| } /* namespace lol */ | |||
| #endif // __LOL_D3D9INPUT_H__ | |||
| @@ -24,6 +24,9 @@ | |||
| #include "lolgl.h" | |||
| #include "platform/sdl/sdlapp.h" | |||
| #include "platform/sdl/sdlinput.h" | |||
| #if defined USE_D3D9 | |||
| # include "platform/d3d9/d3d9input.h" | |||
| #endif | |||
| #if defined USE_SDL && defined USE_D3D9 | |||
| HWND g_hwnd = NULL; | |||
| @@ -86,6 +89,11 @@ SdlApp::SdlApp(char const *title, ivec2 res, float fps) : | |||
| Audio::Setup(2); | |||
| /* Autoreleased objects */ | |||
| # if defined USE_D3D9 | |||
| /* Prefer D3d9 for joysticks on Windows, because the X360 pads are not | |||
| * advertised with the proper number of axes. */ | |||
| new D3d9Input(); | |||
| # endif | |||
| new SdlInput(); | |||
| #endif | |||
| } | |||
| @@ -58,7 +58,11 @@ SdlInput::SdlInput() | |||
| /* Blacklist HDAPS, it's not a real joystick */ | |||
| char const *name = SDL_JoystickName(i); | |||
| if (strstr(name, "HDAPS")) | |||
| if (strstr(name, "HDAPS") | |||
| # if !defined USE_D3D9 | |||
| || strstr(name, "XBOX 360 For Windows") | |||
| # endif | |||
| || true) | |||
| { | |||
| SDL_JoystickClose(sdlstick); | |||
| continue; | |||
| @@ -69,11 +73,8 @@ SdlInput::SdlInput() | |||
| stick->SetButtonCount(SDL_JoystickNumButtons(sdlstick)); | |||
| /* It's possible to remap axes */ | |||
| if (strstr(name, "XBOX 360 For Windows")) | |||
| { | |||
| //stick->RemapAxis(4, 2); | |||
| //stick->RemapAxis(2, 4); | |||
| } | |||
| //stick->RemapAxis(4, 2); | |||
| //stick->RemapAxis(2, 4); | |||
| m_data->m_joysticks.Push(sdlstick, stick); | |||
| } | |||
| @@ -35,8 +35,8 @@ | |||
| <D3d9Includes>$(DXSDK_DIR)\Include</D3d9Includes> | |||
| <D3d9Libs Condition="'$(Platform)'=='Win32'">$(DXSDK_DIR)\Lib\x86</D3d9Libs> | |||
| <D3d9Libs Condition="'$(Platform)'=='x64'">$(DXSDK_DIR)\Lib\x64</D3d9Libs> | |||
| <D3d9Deps Condition="'$(Configuration)'=='Release'">d3d9.lib;d3dx9.lib</D3d9Deps> | |||
| <D3d9Deps Condition="'$(Configuration)'=='Debug'">d3d9.lib;d3dx9d.lib</D3d9Deps> | |||
| <D3d9Deps Condition="'$(Configuration)'=='Release'">d3d9.lib;d3dx9.lib;xinput.lib</D3d9Deps> | |||
| <D3d9Deps Condition="'$(Configuration)'=='Debug'">d3d9.lib;d3dx9d.lib;xinput.lib</D3d9Deps> | |||
| <Win32Defines>HAVE_SDL_H;USE_SDL;USE_GDIPLUS;USE_D3D9</Win32Defines> | |||
| <XboxDefines></XboxDefines> | |||
| @@ -108,6 +108,7 @@ | |||
| <ClCompile Include="..\src\math\trig.cpp" /> | |||
| <ClCompile Include="..\src\math\vector.cpp" /> | |||
| <ClCompile Include="..\src\platform.cpp" /> | |||
| <ClCompile Include="..\src\platform\d3d9\d3d9input.cpp" /> | |||
| <ClCompile Include="..\src\platform\sdl\sdlapp.cpp" /> | |||
| <ClCompile Include="..\src\platform\sdl\sdlinput.cpp" /> | |||
| <ClCompile Include="..\src\platform\xbox\xboxapp.cpp" /> | |||
| @@ -167,6 +168,7 @@ | |||
| <ClInclude Include="..\src\math\trig.h" /> | |||
| <ClInclude Include="..\src\numeric.h" /> | |||
| <ClInclude Include="..\src\platform.h" /> | |||
| <ClInclude Include="..\src\platform\d3d9\d3d9input.h" /> | |||
| <ClInclude Include="..\src\platform\sdl\sdlapp.h" /> | |||
| <ClInclude Include="..\src\platform\sdl\sdlinput.h" /> | |||
| <ClInclude Include="..\src\platform\xbox\xboxapp.h" /> | |||
| @@ -191,4 +193,4 @@ | |||
| <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> | |||
| <ImportGroup Label="ExtensionTargets"> | |||
| </ImportGroup> | |||
| </Project> | |||
| </Project> | |||
| @@ -44,6 +44,9 @@ | |||
| <Filter Include="src\input"> | |||
| <UniqueIdentifier>{94992c0e-ebc5-4185-b766-323b06547dcf}</UniqueIdentifier> | |||
| </Filter> | |||
| <Filter Include="src\platform\d3d9"> | |||
| <UniqueIdentifier>{a914e15d-3201-467a-a9c9-d7c5244b13ee}</UniqueIdentifier> | |||
| </Filter> | |||
| </ItemGroup> | |||
| <ItemGroup> | |||
| <ClCompile Include="..\src\image\image.cpp"> | |||
| @@ -205,6 +208,9 @@ | |||
| <ClCompile Include="..\src\input\stick.cpp"> | |||
| <Filter>src\input</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\src\platform\d3d9\d3d9input.cpp"> | |||
| <Filter>src\platform\d3d9</Filter> | |||
| </ClCompile> | |||
| </ItemGroup> | |||
| <ItemGroup> | |||
| <ClInclude Include="..\src\image\image.h"> | |||
| @@ -387,5 +393,8 @@ | |||
| <ClInclude Include="..\src\input\stick.h"> | |||
| <Filter>src\input</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\src\platform\d3d9\d3d9input.h"> | |||
| <Filter>src\platform\d3d9</Filter> | |||
| </ClInclude> | |||
| </ItemGroup> | |||
| </Project> | |||
| </Project> | |||