I am writing simple car racing game. There are two cameras on the scene one connected with car and one FPS. From some time the FPS camera stoped responding to cursor keys. I think it is since i made a keymap table for moving a car. Anybody got this problem?
--
thx
garwen
FPS camera doesn't move
-
Guest
Ok here is my Event receiver class. javascript:emoticon(':)')
Smile
class MyEventReceiver : public IEventReceiver
{
public:
float angle; // stering wheel angle
bool m_key_buf[256];
bool m_key_buf_old[256];
bool m_mouse_button_buf[3];
bool m_mouse_button_buf_old[3];
MyEventReceiver () {
memset(m_key_buf, 0, 256);
memset(m_key_buf_old, 0, 256);
memset(m_mouse_button_buf, 0, 3);
memset(m_mouse_button_buf_old, 0, 3);
}
virtual bool OnEvent(SEvent event)
{
switch(event.EventType)
{
case EET_KEY_INPUT_EVENT: // key event
m_key_buf_old[event.KeyInput.Key] = m_key_buf[event.KeyInput.Key];
m_key_buf[event.KeyInput.Key] = event.KeyInput.PressedDown;
break;
case EET_MOUSE_INPUT_EVENT: // mouse event
if (event.MouseInput.Event < EMIE_MOUSE_MOVED)
{
m_mouse_button_buf_old[event.MouseInput.Event%3] = m_mouse_button_buf[event.MouseInput.Event%3];
m_mouse_button_buf[event.MouseInput.Event%3] = ((event.MouseInput.Event/3)?false:true);
}
break;
}
return true;
}
// functions that return bool value of given key
bool IsKeyDown(int index)
{
return m_key_buf[index];
}
bool IsKeyUpDown(int index)
{
return (m_key_buf[index] && !m_key_buf_old[index]);
}
bool IsKeyDownUp(int index)
{
return (!m_key_buf[index] && m_key_buf_old[index]);
}
bool IsMouseButtonDown(int index)
{
return m_mouse_button_buf[index];
}
bool IsMouseButtonUpDown(int index)
{
return (m_mouse_button_buf[index] && !m_mouse_button_buf_old[index]);
}
bool IsMouseButtonDownUp(int index)
{
return (!m_mouse_button_buf[index] && m_mouse_button_buf_old[index]);
}
void ProcessEvent() {
if (IsKeyDown(KEY_KEY_U)) { // go forward
// rotate node if angle!=0
matrix4 mat;
mat.setRotationDegrees(node->getRotation());
vector3df rp = vector3df(0,angle,0);
matrix4 mp;
mp.setRotationDegrees(rp);
mat *= mp;
node->setRotation(mat.getRotationDegrees());
//now move node forward
vector3df v = node->getPosition();
vector3df Target(0,0,1);
matrix4 mat1;
mat1.setRotationDegrees(node->getRotation());
mat1.transformVect(Target);
Target.normalize();
v+=Target;
node->setPosition(v);
}
if (IsKeyDown(KEY_KEY_G)) { // turn left
angle-=0.01;;
}
if (IsKeyDown(KEY_KEY_J)) { // turn right
angle+=0.01;;
}
if (IsKeyDown(KEY_KEY_B)) { // go back
// rotation if angle!=0
matrix4 mat;
mat.setRotationDegrees(node->getRotation());
vector3df rp = vector3df(0,-angle,0); //turn
matrix4 mp;
mp.setRotationDegrees(rp);
mat *= mp;
node->setRotation(mat.getRotationDegrees()); //rotate node
// now move node backward
vector3df v = node->getPosition();
vector3df Target(0,0,-1);
matrix4 mat1;
mat1.setRotationDegrees(node->getRotation());
mat1.transformVect(Target);
Target.normalize();
v+=Target;
node->setPosition(v);
}
}
};

Smile
class MyEventReceiver : public IEventReceiver
{
public:
float angle; // stering wheel angle
bool m_key_buf[256];
bool m_key_buf_old[256];
bool m_mouse_button_buf[3];
bool m_mouse_button_buf_old[3];
MyEventReceiver () {
memset(m_key_buf, 0, 256);
memset(m_key_buf_old, 0, 256);
memset(m_mouse_button_buf, 0, 3);
memset(m_mouse_button_buf_old, 0, 3);
}
virtual bool OnEvent(SEvent event)
{
switch(event.EventType)
{
case EET_KEY_INPUT_EVENT: // key event
m_key_buf_old[event.KeyInput.Key] = m_key_buf[event.KeyInput.Key];
m_key_buf[event.KeyInput.Key] = event.KeyInput.PressedDown;
break;
case EET_MOUSE_INPUT_EVENT: // mouse event
if (event.MouseInput.Event < EMIE_MOUSE_MOVED)
{
m_mouse_button_buf_old[event.MouseInput.Event%3] = m_mouse_button_buf[event.MouseInput.Event%3];
m_mouse_button_buf[event.MouseInput.Event%3] = ((event.MouseInput.Event/3)?false:true);
}
break;
}
return true;
}
// functions that return bool value of given key
bool IsKeyDown(int index)
{
return m_key_buf[index];
}
bool IsKeyUpDown(int index)
{
return (m_key_buf[index] && !m_key_buf_old[index]);
}
bool IsKeyDownUp(int index)
{
return (!m_key_buf[index] && m_key_buf_old[index]);
}
bool IsMouseButtonDown(int index)
{
return m_mouse_button_buf[index];
}
bool IsMouseButtonUpDown(int index)
{
return (m_mouse_button_buf[index] && !m_mouse_button_buf_old[index]);
}
bool IsMouseButtonDownUp(int index)
{
return (!m_mouse_button_buf[index] && m_mouse_button_buf_old[index]);
}
void ProcessEvent() {
if (IsKeyDown(KEY_KEY_U)) { // go forward
// rotate node if angle!=0
matrix4 mat;
mat.setRotationDegrees(node->getRotation());
vector3df rp = vector3df(0,angle,0);
matrix4 mp;
mp.setRotationDegrees(rp);
mat *= mp;
node->setRotation(mat.getRotationDegrees());
//now move node forward
vector3df v = node->getPosition();
vector3df Target(0,0,1);
matrix4 mat1;
mat1.setRotationDegrees(node->getRotation());
mat1.transformVect(Target);
Target.normalize();
v+=Target;
node->setPosition(v);
}
if (IsKeyDown(KEY_KEY_G)) { // turn left
angle-=0.01;;
}
if (IsKeyDown(KEY_KEY_J)) { // turn right
angle+=0.01;;
}
if (IsKeyDown(KEY_KEY_B)) { // go back
// rotation if angle!=0
matrix4 mat;
mat.setRotationDegrees(node->getRotation());
vector3df rp = vector3df(0,-angle,0); //turn
matrix4 mp;
mp.setRotationDegrees(rp);
mat *= mp;
node->setRotation(mat.getRotationDegrees()); //rotate node
// now move node backward
vector3df v = node->getPosition();
vector3df Target(0,0,-1);
matrix4 mat1;
mat1.setRotationDegrees(node->getRotation());
mat1.transformVect(Target);
Target.normalize();
v+=Target;
node->setPosition(v);
}
}
};