188 lines
6.2 KiB
C++
Executable File
188 lines
6.2 KiB
C++
Executable File
/***************************************************************************
|
|
* Copyright (C) 2001-2023 by Tom Hicks *
|
|
* headhunter3@gmail.com *
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
* This program is distributed in the hope that it will be useful, *
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
* GNU General Public License for more details. *
|
|
* *
|
|
* You should have received a copy of the GNU General Public License *
|
|
* along with this program; if not, write to the *
|
|
* Free Software Foundation, Inc., *
|
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
|
***************************************************************************/
|
|
#include "ctrls.h"
|
|
|
|
#include "strmanip.h"
|
|
using std::endl;
|
|
using std::ostream;
|
|
using std::string;
|
|
|
|
namespace OpenArena {
|
|
void ControlScheme::LoadDefaultControlScheme() {
|
|
Bind(OpenArena::KEY_LBUTTON, ACTION_FORWARD);
|
|
Bind(OpenArena::KEY_RBUTTON, ACTION_BACKWARD);
|
|
Bind(OpenArena::KEY_LEFT, ACTION_LOOKLEFT);
|
|
Bind(OpenArena::KEY_RIGHT, ACTION_LOOKRIGHT);
|
|
Bind(OpenArena::KEY_UP, ACTION_LOOKUP);
|
|
Bind(OpenArena::KEY_DOWN, ACTION_LOOKDOWN);
|
|
Bind(OpenArena::KEY_S, ACTION_MOVELEFT);
|
|
Bind(OpenArena::KEY_D, ACTION_MOVERIGHT);
|
|
Bind(OpenArena::KEY_SPACE, ACTION_MOVEUP);
|
|
Bind(OpenArena::KEY_A, ACTION_MOVEDOWN);
|
|
Bind(OpenArena::KEY_F, ACTION_FIREPRIMARY);
|
|
Bind(OpenArena::KEY_G, ACTION_FIRESECONDARY);
|
|
Bind(OpenArena::KEY_T, ACTION_WEAPONNEXT);
|
|
Bind(OpenArena::KEY_R, ACTION_WEAPONPREV);
|
|
Bind(OpenArena::KEY_L, ACTION_TOGGLE_LIGHTS);
|
|
Bind(OpenArena::KEY_P, ACTION_TOGGLE_FPS);
|
|
Bind(OpenArena::KEY_OEM_3, ACTION_TOGGLE_CONSOLE);
|
|
Bind(OpenArena::KEY_M, ACTION_TOGGLE_MOUSELOOK);
|
|
Bind(OpenArena::KEY_Q, ACTION_QUICKMOUSELOOK);
|
|
Bind(OpenArena::KEY_W, ACTION_ROLLLEFT);
|
|
Bind(OpenArena::KEY_E, ACTION_ROLLRIGHT);
|
|
}
|
|
|
|
void ControlScheme::UnBindAll() {
|
|
OpenArena::Keys key;
|
|
for (key = (OpenArena::Keys)0; key < (OpenArena::Keys)256; key = (OpenArena::Keys)(key + 1)) {
|
|
UnBind(key);
|
|
}
|
|
}
|
|
|
|
void ControlScheme::UnBind(OpenArena::Keys key) {
|
|
keyActions[key] = ACTION_NONE;
|
|
}
|
|
|
|
void ControlScheme::Bind(OpenArena::Keys key, Action action) {
|
|
keyActions[key] = action;
|
|
}
|
|
|
|
void ControlScheme::WriteToStream(std::ostream& output) {
|
|
// output << " bind " << action << keyname << endl;
|
|
OpenArena::Keys key;
|
|
for (key = (OpenArena::Keys)0; key < (OpenArena::Keys)256; key = (OpenArena::Keys)(key + 1)) {
|
|
if (keyActions[key] != ACTION_NONE) {
|
|
output << " bind " << ActionName(keyActions[key]) << GetKeyName(key) << endl;
|
|
}
|
|
}
|
|
}
|
|
|
|
ControlScheme::Action ControlScheme::GetAction(const char* actionName) {
|
|
string str = actionName;
|
|
str = tolower(str);
|
|
if (str == "none") {
|
|
return ACTION_NONE;
|
|
} else if (str == "forward") {
|
|
return ACTION_FORWARD;
|
|
} else if (str == "backward") {
|
|
return ACTION_BACKWARD;
|
|
} else if (str == "lookleft") {
|
|
return ACTION_LOOKLEFT;
|
|
} else if (str == "lookright") {
|
|
return ACTION_LOOKRIGHT;
|
|
} else if (str == "lookup") {
|
|
return ACTION_LOOKUP;
|
|
} else if (str == "lookdown") {
|
|
return ACTION_LOOKDOWN;
|
|
} else if (str == "moveleft") {
|
|
return ACTION_MOVELEFT;
|
|
} else if (str == "moveright") {
|
|
return ACTION_MOVERIGHT;
|
|
} else if (str == "moveup") {
|
|
return ACTION_MOVEUP;
|
|
} else if (str == "movedown") {
|
|
return ACTION_MOVEDOWN;
|
|
} else if (str == "rollleft") {
|
|
return ACTION_ROLLLEFT;
|
|
} else if (str == "rollright") {
|
|
return ACTION_ROLLRIGHT;
|
|
} else if (str == "fireprimary") {
|
|
return ACTION_FIREPRIMARY;
|
|
} else if (str == "firesecondary") {
|
|
return ACTION_FIRESECONDARY;
|
|
} else if (str == "weaponnext") {
|
|
return ACTION_WEAPONNEXT;
|
|
} else if (str == "weaponprev") {
|
|
return ACTION_WEAPONPREV;
|
|
} else if (str == "togglelights") {
|
|
return ACTION_TOGGLE_LIGHTS;
|
|
} else if (str == "togglefps") {
|
|
return ACTION_TOGGLE_FPS;
|
|
} else if (str == "toggleconsole") {
|
|
return ACTION_TOGGLE_CONSOLE;
|
|
} else if (str == "togglemouselook") {
|
|
return ACTION_TOGGLE_MOUSELOOK;
|
|
} else if (str == "quickmouselook") {
|
|
return ACTION_QUICKMOUSELOOK;
|
|
} else {
|
|
return ACTION_NONE;
|
|
}
|
|
}
|
|
|
|
string ControlScheme::ActionName(Action action) {
|
|
switch (action) {
|
|
case ACTION_NONE:
|
|
return "none";
|
|
case ACTION_FORWARD:
|
|
return "forward";
|
|
case ACTION_BACKWARD:
|
|
return "backward";
|
|
case ACTION_LOOKLEFT:
|
|
return "lookleft";
|
|
case ACTION_LOOKRIGHT:
|
|
return "lookright";
|
|
case ACTION_LOOKUP:
|
|
return "lookup";
|
|
case ACTION_LOOKDOWN:
|
|
return "lookdown";
|
|
case ACTION_MOVELEFT:
|
|
return "moveleft";
|
|
case ACTION_MOVERIGHT:
|
|
return "moveright";
|
|
case ACTION_MOVEUP:
|
|
return "moveup";
|
|
case ACTION_MOVEDOWN:
|
|
return "movedown";
|
|
case ACTION_ROLLLEFT:
|
|
return "rollleft";
|
|
case ACTION_ROLLRIGHT:
|
|
return "rollright";
|
|
case ACTION_FIREPRIMARY:
|
|
return "fireprimary";
|
|
case ACTION_FIRESECONDARY:
|
|
return "firesecondary";
|
|
case ACTION_WEAPONNEXT:
|
|
return "weaponnext";
|
|
case ACTION_WEAPONPREV:
|
|
return "weaponprev";
|
|
case ACTION_TOGGLE_LIGHTS:
|
|
return "togglelights";
|
|
case ACTION_TOGGLE_FPS:
|
|
return "togglefps";
|
|
case ACTION_TOGGLE_CONSOLE:
|
|
return "toggleconsole";
|
|
case ACTION_TOGGLE_MOUSELOOK:
|
|
return "togglemouselook";
|
|
case ACTION_QUICKMOUSELOOK:
|
|
return "quickmouselook";
|
|
default:
|
|
return "unknown";
|
|
};
|
|
}
|
|
|
|
bool ControlScheme::IsBound(OpenArena::Keys key, Action action) {
|
|
if (keyActions[key] == action) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
} // End namespace OpenArena
|