void ScriptInput::onButtonUp(const ButtonEvent& ev) { if (PlayInEditorManager::instance().getState() != PlayInEditorState::Playing) return; MonoUtil::invokeThunk(OnButtonReleasedThunk, ev.buttonCode, ev.deviceIdx, ev.isUsed()); }
EventResult InputEventHandler::ReceiveEvent(InputEvent ** evns, InputEventDispatcher * dispatcher) { // Function is called periodically, if no buttons pressed/held *evns == NULL if (! *evns) return kEvent_Continue; for (InputEvent * e = *evns; e; e = e->next) { switch(e->eventType) { case InputEvent::kEventType_Button: { ButtonEvent * t = DYNAMIC_CAST(e, InputEvent, ButtonEvent); UInt32 keyCode; UInt32 deviceType = t->deviceType; UInt32 keyMask = t->keyMask; // Mouse if (deviceType == kDeviceType_Mouse) keyCode = InputMap::kMacro_MouseButtonOffset + keyMask; // Gamepad else if (deviceType == kDeviceType_Gamepad) keyCode = InputMap::GamepadMaskToKeycode(keyMask); // Keyboard else keyCode = keyMask; // Valid scancode? if (keyCode >= InputMap::kMaxMacros) continue; BSFixedString control = *t->GetControlID(); float timer = t->timer; bool isDown = t->flags != 0 && timer == 0.0; bool isUp = t->flags == 0 && timer != 0; if (isDown) { // Used by scaleform skse.GetLastControl SetLastControlDown(control.data, keyCode); g_inputKeyEventRegs.ForEach( keyCode, EventQueueFunctor1<SInt32>(BSFixedString("OnKeyDown"), (SInt32)keyCode) ); g_inputControlEventRegs.ForEach( control, EventQueueFunctor1<BSFixedString>(BSFixedString("OnControlDown"), control) ); } else if (isUp) { SetLastControlUp(control.data, keyCode); g_inputKeyEventRegs.ForEach( keyCode, EventQueueFunctor2<SInt32, float>(BSFixedString("OnKeyUp"), (SInt32)keyCode, timer) ); g_inputControlEventRegs.ForEach( control, EventQueueFunctor2<BSFixedString, float>(BSFixedString("OnControlUp"), control, timer) ); } } break; /*case InputEvent::kEventType_Thumbstick: { ThumbstickEvent * t = DYNAMIC_CAST(e, InputEvent, ThumbstickEvent); _MESSAGE("Moved %s Stick X: %f Y: %f", t->keyMask == 0x0B ? "Left" : "Right", t->x, t->y); } break;*/ } } return kEvent_Continue; }
void ScriptEditorInput::onButtonUp(const ButtonEvent& ev) { MonoUtil::invokeThunk(OnButtonReleasedThunk, ev.buttonCode, ev.deviceIdx, ev.isUsed()); }