History

move JoystickManager to JoystickScriptingInterface, add Joystick class for SDL Joystick

Stephen Birarda committed 12 years ago

Commit 00b08061 parent 900daf413 files · +216 −218Browse files

Showing the changes to interface/src/scripting/JoystickScriptingInterface.cpp (1 of 13 files). Show all

Unified · Split

interface/src/scripting/JoystickScriptingInterface.cpp+82−0
@@ -0,0 +1,82 @@
1//
2// JoystickManager.cpp
3// interface/src/devices
4//
5// Created by Andrzej Kapolka on 5/15/14.
6// Copyright 2014 High Fidelity, Inc.
7//
8// Distributed under the Apache License, Version 2.0.
9// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
10//
11
12#include <QtDebug>
13
14#ifdef HAVE_SDL
15#include <SDL.h>
16#undef main
17#endif
18
19#include <PerfStat.h>
20
21#include "JoystickScriptingInterface.h"
22
23JoystickScriptingInterface& JoystickScriptingInterface::getInstance() {
24 static JoystickScriptingInterface sharedInstance;
25 return sharedInstance;
26}
27
28JoystickScriptingInterface::JoystickScriptingInterface() :
29 _openJoysticks(),
30 _availableDeviceNames()
31{
32#ifdef HAVE_SDL
33 SDL_Init(SDL_INIT_JOYSTICK);
34
35 int joystickCount = SDL_NumJoysticks();
36
37 for (int i = 0; i < joystickCount; i++) {
38 _availableDeviceNames << SDL_JoystickName(i);
39 }
40#endif
41}
42
43JoystickScriptingInterface::~JoystickScriptingInterface() {
44 qDeleteAll(_openJoysticks);
45
46#ifdef HAVE_SDL
47 SDL_Quit();
48#endif
49}
50
51void JoystickScriptingInterface::update() {
52#ifdef HAVE_SDL
53 PerformanceTimer perfTimer("JoystickScriptingInterface::update");
54 SDL_JoystickUpdate();
55
56 foreach(Joystick* joystick, _openJoysticks) {
57 joystick->update();
58 }
59
60#endif
61}
62
63Joystick* JoystickScriptingInterface::joystickWithName(const QString& name) {
64 Joystick* matchingJoystick = _openJoysticks.value(name);
65 if (!matchingJoystick) {
66 // we haven't opened a joystick with this name yet - enumerate our SDL devices and see if it exists
67 int joystickCount = SDL_NumJoysticks();
68
69 for (int i = 0; i < joystickCount; i++) {
70 if (SDL_JoystickName(i) == name) {
71 matchingJoystick = _openJoysticks.insert(name, new Joystick(name, SDL_JoystickOpen(i))).value();
72 break;
73 }
74 }
75
76 qDebug() << "No matching joystick found with name" << name << "- returning NULL pointer.";
77 }
78
79 return matchingJoystick;
80}
81
82