[DEV] Remove automatic key respown on X11
This commit is contained in:
parent
57c22f93ef
commit
95c94a9c9e
@ -21,7 +21,7 @@ void game::Camera::Update(void)
|
||||
m_matrix.Rotate(vec3(0,0,1), m_angles.z );
|
||||
vec3 tmpp = m_position * -1;
|
||||
m_matrix.Translate(tmpp);
|
||||
EWOL_DEBUG("camera: pos=" << m_position << " angle=" << m_angles);
|
||||
//EWOL_DEBUG("camera: pos=" << m_position << " angle=" << m_angles);
|
||||
}
|
||||
|
||||
game::Camera::Camera(vec3 pos, vec3 angles) :
|
||||
|
@ -157,6 +157,7 @@ void ewolProcessEvents(void)
|
||||
tmpWidget->OnEventKb(ewol::keyEvent::statusUp, data.keyboardChar);
|
||||
}
|
||||
} else { // THREAD_KEYBORAD_MOVE
|
||||
EWOL_DEBUG("THREAD_KEYBORAD_MOVE" << data.keyboardMove << " " << data.stateIsDown);
|
||||
if(true == data.stateIsDown) {
|
||||
tmpWidget->OnEventKbMove(ewol::keyEvent::statusDown, data.keyboardMove);
|
||||
} else {
|
||||
|
@ -760,6 +760,20 @@ void X11_Run(void)
|
||||
break;
|
||||
case KeyPress:
|
||||
case KeyRelease:
|
||||
// filter repeate key :
|
||||
if( event.type == KeyRelease
|
||||
&& XEventsQueued(m_display, QueuedAfterReading)) {
|
||||
XEvent nev;
|
||||
XPeekEvent(m_display, &nev);
|
||||
if( nev.type == KeyPress
|
||||
&& nev.xkey.time == event.xkey.time
|
||||
&& nev.xkey.keycode == event.xkey.keycode) {
|
||||
// Key was not actually released
|
||||
// remove next event too ...
|
||||
XNextEvent(m_display, &nev);
|
||||
break;
|
||||
}
|
||||
}
|
||||
#ifdef DEBUG_X11_EVENT
|
||||
EWOL_INFO("X11 event : " << event.type << " = \"KeyPress/KeyRelease\" ");
|
||||
#endif
|
||||
|
@ -86,38 +86,6 @@ void widget::Scene::OnDraw(ewol::DrawProperty& displayProp)
|
||||
|
||||
void widget::Scene::PeriodicCall(int64_t localTime)
|
||||
{
|
||||
if (m_walk!=0) {
|
||||
if ( (m_walk&(WALK_FLAG_FORWARD|WALK_FLAG_BACK))!=0) {
|
||||
// request back and forward in the same time ... this is really bad ....
|
||||
} else if ( (m_walk&WALK_FLAG_FORWARD)!=0) {
|
||||
vec3 angles = m_camera.GetAngle();
|
||||
angles.x = cosf(angles.z);
|
||||
angles.y = sinf(angles.z);
|
||||
angles.z = 0;
|
||||
vec3 pos = m_camera.GetPosition();
|
||||
pos += angles;
|
||||
EWOL_DEBUG("walk = " << angles);
|
||||
m_camera.SetPosition(pos);
|
||||
} else if ( (m_walk&WALK_FLAG_BACK)!=0) {
|
||||
vec3 angles = m_camera.GetAngle();
|
||||
angles.x = cosf(angles.z);
|
||||
angles.y = sinf(angles.z);
|
||||
angles.z = 0;
|
||||
vec3 pos = m_camera.GetPosition();
|
||||
pos -= angles;
|
||||
EWOL_DEBUG("walk = " << angles*-1);
|
||||
m_camera.SetPosition(pos);
|
||||
}
|
||||
|
||||
if ( (m_walk&(WALK_FLAG_LEFT|WALK_FLAG_RIGHT))!=0) {
|
||||
// request left and right in the same time ... this is really bad ....
|
||||
} else if ( (m_walk&WALK_FLAG_LEFT)!=0) {
|
||||
|
||||
} else if ( (m_walk&WALK_FLAG_RIGHT)!=0) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
double curentTime=(double)localTime/1000000.0;
|
||||
// small hack to change speed ...
|
||||
if (m_ratioTime != 1) {
|
||||
@ -145,6 +113,54 @@ void widget::Scene::PeriodicCall(int64_t localTime)
|
||||
}
|
||||
m_lastCallTime = curentTime;
|
||||
MarkToRedraw();
|
||||
|
||||
if (m_walk!=0) {
|
||||
if( (m_walk&WALK_FLAG_FORWARD)!=0
|
||||
&& (m_walk&WALK_FLAG_BACK)!=0) {
|
||||
// request back and forward in the same time ... this is really bad ....
|
||||
} else if ( (m_walk&WALK_FLAG_FORWARD)!=0) {
|
||||
vec3 angles = m_camera.GetAngle();
|
||||
angles.x = cosf(angles.z);
|
||||
angles.y = sinf(angles.z);
|
||||
angles.z = 0;
|
||||
vec3 pos = m_camera.GetPosition();
|
||||
// walk is 6 km/h
|
||||
pos += angles*0.001666f/deltaTime;
|
||||
m_camera.SetPosition(pos);
|
||||
} else if ( (m_walk&WALK_FLAG_BACK)!=0) {
|
||||
vec3 angles = m_camera.GetAngle();
|
||||
angles.x = cosf(angles.z);
|
||||
angles.y = sinf(angles.z);
|
||||
angles.z = 0;
|
||||
vec3 pos = m_camera.GetPosition();
|
||||
// walk is 6 km/h
|
||||
pos -= angles*0.001666f/deltaTime;
|
||||
m_camera.SetPosition(pos);
|
||||
}
|
||||
|
||||
if( (m_walk&WALK_FLAG_LEFT)!=0
|
||||
&& (m_walk&WALK_FLAG_RIGHT)!=0) {
|
||||
// request left and right in the same time ... this is really bad ....
|
||||
} else if ( (m_walk&WALK_FLAG_LEFT)!=0) {
|
||||
vec3 angles = m_camera.GetAngle();
|
||||
angles.x = cosf(angles.z+M_PI/2.0);
|
||||
angles.y = sinf(angles.z+M_PI/2.0);
|
||||
angles.z = 0;
|
||||
vec3 pos = m_camera.GetPosition();
|
||||
// lateral walk is 4 km/h
|
||||
pos += angles*0.0011f/deltaTime;
|
||||
m_camera.SetPosition(pos);
|
||||
} else if ( (m_walk&WALK_FLAG_RIGHT)!=0) {
|
||||
vec3 angles = m_camera.GetAngle();
|
||||
angles.x = cosf(angles.z+M_PI/2.0);
|
||||
angles.y = sinf(angles.z+M_PI/2.0);
|
||||
angles.z = 0;
|
||||
vec3 pos = m_camera.GetPosition();
|
||||
// lateral walk is 4 km/h
|
||||
pos -= angles*0.0011f/deltaTime;
|
||||
m_camera.SetPosition(pos);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user