/** * Tests whether shift is pressed */ bool SCA_KeyboardSensor::IsShifted(void) { SCA_IInputDevice* inputdev = ((SCA_KeyboardManager *)m_eventmgr)->GetInputDevice(); return (inputdev->GetInput(SCA_IInputDevice::RIGHTSHIFTKEY).Find(SCA_InputEvent::ACTIVE) || inputdev->GetInput(SCA_IInputDevice::LEFTSHIFTKEY).Find(SCA_InputEvent::ACTIVE)); }
bool SCA_MouseSensor::Evaluate() { bool result = false; bool reset = m_reset && m_level; int previousval = m_val; SCA_IInputDevice* mousedev = ((SCA_MouseManager *)m_eventmgr)->GetInputDevice(); m_reset = false; switch (m_mousemode) { case KX_MOUSESENSORMODE_LEFTBUTTON: case KX_MOUSESENSORMODE_MIDDLEBUTTON: case KX_MOUSESENSORMODE_RIGHTBUTTON: case KX_MOUSESENSORMODE_WHEELUP: case KX_MOUSESENSORMODE_WHEELDOWN: { const SCA_InputEvent& mevent = mousedev->GetInput(m_hotkey); if (mevent.Find(SCA_InputEvent::ACTIVE)) { m_val = 1; } else { m_val = 0; } break; } case KX_MOUSESENSORMODE_MOVEMENT: { const SCA_InputEvent& eventX = mousedev->GetInput(SCA_IInputDevice::MOUSEX); const SCA_InputEvent& eventY = mousedev->GetInput(SCA_IInputDevice::MOUSEY); if (eventX.Find(SCA_InputEvent::ACTIVE) || eventY.Find(SCA_InputEvent::ACTIVE)) { m_val = 1; result = true; } else { m_val = 0; } break; } default: ; /* error */ } if (previousval != m_val) { result = true; } if (reset) // force an event result = true; return result; }
bool SCA_KeyboardSensor::Evaluate() { bool result = false; bool reset = m_reset && m_level; SCA_IInputDevice* inputdev = ((SCA_KeyboardManager *)m_eventmgr)->GetInputDevice(); // cerr << "SCA_KeyboardSensor::Eval event, sensing for "<< m_hotkey << " at device " << inputdev << "\n"; /* See if we need to do logging: togPropState exists and is * different from 0 */ CValue* myparent = GetParent(); CValue* togPropState = myparent->GetProperty(m_toggleprop); if (togPropState && (((int)togPropState->GetNumber()) != 0) ) { LogKeystrokes(); } m_reset = false; /* Now see whether events must be bounced. */ if (m_bAllKeys) { bool status = false; bool events = false; for (int i = SCA_IInputDevice::BEGINKEY; i <= SCA_IInputDevice::ENDKEY; ++i) { const SCA_InputEvent& input = inputdev->GetInput((SCA_IInputDevice::SCA_EnumInputs)i); if (input.End(SCA_InputEvent::ACTIVE)) { status = true; break; } } for (int i = SCA_IInputDevice::BEGINKEY; i <= SCA_IInputDevice::ENDKEY; ++i) { const SCA_InputEvent& input = inputdev->GetInput((SCA_IInputDevice::SCA_EnumInputs)i); if (input.m_queue.size() > 0) { events = true; break; } } m_val = status; result = events; } else { bool status[3] = {false, false, false}; bool events[3] = {false, false, false}; const SCA_InputEvent & input = inputdev->GetInput((SCA_IInputDevice::SCA_EnumInputs) m_hotkey); /* Check qualifier keys * - see if the qualifiers we request are pressed - 'qual' true/false * - see if the qualifiers we request changed their state - 'qual_change' true/false */ if (m_qual > 0) { const SCA_InputEvent & qualevent = inputdev->GetInput((SCA_IInputDevice::SCA_EnumInputs) m_qual); status[1] = qualevent.End(SCA_InputEvent::ACTIVE); events[1] = (qualevent.m_queue.size() > 0); } if (m_qual2 > 0) { const SCA_InputEvent & qualevent = inputdev->GetInput((SCA_IInputDevice::SCA_EnumInputs) m_qual2); /* copy of above */ status[2] = qualevent.End(SCA_InputEvent::ACTIVE); events[2] = (qualevent.m_queue.size() > 0); } /* done reading qualifiers */ status[0] = input.End(SCA_InputEvent::ACTIVE); events[0] = (input.m_queue.size() > 0); /* Modify the key state based on qual(s) * Tested carefully. don't touch unless your really sure. * note, this will only change the results if key modifiers are set. * * When all modifiers and keys are positive * - pulse true * * When ANY of the modifiers or main key become inactive, * - pulse false */ // One of the third keys value from last logic frame changed. if (events[0] || events[1] || events[2]) { result = true; } if (!status[0] || (m_qual > 0 && !status[0]) || (m_qual2 > 0 && !status[1])) { /* one of the used qualifiers are not pressed */ m_val = false; /* since one of the qualifiers is not on, set the state to false */ } else { m_val = true; } /* done with key quals */ } if (reset) // force an event result = true; return result; }