3
* (c) 2006 by Bram Stolk
5
* LICENSED ACCORDING TO THE GPL
13
#include "controller.h"
16
ControllerKey::ControllerKey(const std::string &map_fname) :
25
name = "keyboard controller";
26
axes[0]=axes[1]=axes[2]=0.0;
28
FILE *f = fopen(map_fname.c_str(), "r");
35
s = fgets(line, sizeof(line), f);
40
int rv=sscanf(line, "%d %s", &ascii, func);
42
mapping[ascii] = func;
45
fprintf(stderr, "Custom key mapping in %s contains %d entries\n", map_fname.c_str(), (int) mapping.size());
46
assert(mapping.size()>=6);
50
fprintf(stderr, "Cannot open %s\n", map_fname.c_str());
51
mapping['a'] = "ACCEL";
52
mapping['z'] = "BRAKE";
53
mapping['y'] = "BRAKE";
54
mapping[','] = "LEFT";
55
mapping['.'] = "RIGHT";
56
mapping[' '] = "ACTION";
57
mapping['\t']= "EBRAKE";
58
mapping['b'] = "EBRAKE";
63
ControllerKey::~ControllerKey()
68
void ControllerKey::Sustain(float dt)
71
if (key_steerl) axes[0] -= 0.7;
72
if (key_steerr) axes[0] += 0.7;
73
axes[1] = (key_accel)?0.9:0.0;
74
axes[2] = (key_brake)?0.9:0.0;
78
float ControllerKey::GetAxisValue(int nr) const
85
bool ControllerKey::GetButtonValue(int nr) const
95
void ControllerKey::FeedKey(unsigned char k, bool down)
97
std::map<unsigned char, std::string>::const_iterator ip = mapping.find(k);
98
if (ip != mapping.end())
99
FeedAction((*ip).second, down);
103
void ControllerKey::FeedAction(const std::string &action, bool down)
105
if (action=="ACCEL") { key_accel = down; return; }
106
if (action=="BRAKE") { key_brake = down; return; }
107
if (action=="LEFT") { key_steerl = down; return; }
108
if (action=="RIGHT") { key_steerr = down; return; }
109
if (action=="ACTION"){ key_action = down; return; }
110
if (action=="EBRAKE"){ key_ebrake = down; return; }