| 1746 | } |
| 1747 | |
| 1748 | static void GOActionCallback(dmhash_t action_id, dmInput::Action* action, void* user_data) |
| 1749 | { |
| 1750 | Engine* engine = (Engine*)user_data; |
| 1751 | int32_t window_height = dmGraphics::GetWindowHeight(engine->m_GraphicsContext); |
| 1752 | window_height -= 1; // mouse position uses [0; size - 1] instead of [1, size] |
| 1753 | dmArray<dmGameObject::InputAction>* input_buffer = &engine->m_InputBuffer; |
| 1754 | dmGameObject::InputAction input_action; |
| 1755 | input_action.m_ActionId = action_id; |
| 1756 | input_action.m_Value = action->m_Value; |
| 1757 | input_action.m_Pressed = action->m_Pressed; |
| 1758 | input_action.m_Released = action->m_Released; |
| 1759 | input_action.m_Repeated = action->m_Repeated; |
| 1760 | input_action.m_PositionSet = action->m_PositionSet; |
| 1761 | input_action.m_AccelerationSet = action->m_AccelerationSet; |
| 1762 | float width_ratio = engine->m_InvPhysicalWidth * engine->m_Width; |
| 1763 | float height_ratio = engine->m_InvPhysicalHeight * engine->m_Height; |
| 1764 | input_action.m_X = (action->m_X + 0.5f) * width_ratio; |
| 1765 | input_action.m_Y = engine->m_Height - (action->m_Y + 0.5f) * height_ratio; |
| 1766 | input_action.m_DX = action->m_DX * width_ratio; |
| 1767 | input_action.m_DY = -action->m_DY * height_ratio; |
| 1768 | input_action.m_ScreenX = action->m_X; |
| 1769 | input_action.m_ScreenY = window_height - action->m_Y; |
| 1770 | input_action.m_ScreenDX = action->m_DX; |
| 1771 | input_action.m_ScreenDY = -action->m_DY; |
| 1772 | input_action.m_AccX = action->m_AccX; |
| 1773 | input_action.m_AccY = action->m_AccY; |
| 1774 | input_action.m_AccZ = action->m_AccZ; |
| 1775 | |
| 1776 | input_action.m_Count = 0; |
| 1777 | |
| 1778 | if (!action->m_HasText && action->m_Count > 0) |
| 1779 | { |
| 1780 | uint32_t touch_count = dmMath::Min((uint32_t) action->m_Count, (uint32_t) dmHID::MAX_TOUCH_COUNT); |
| 1781 | input_action.m_Count = touch_count; |
| 1782 | for (uint32_t i = 0; i < touch_count; ++i) { |
| 1783 | dmHID::Touch& a = action->m_Touch[i]; |
| 1784 | dmHID::Touch& ia = input_action.m_Touch[i]; |
| 1785 | ia = action->m_Touch[i]; |
| 1786 | ia.m_Id = a.m_Id; |
| 1787 | ia.m_X = (a.m_X + 0.5f) * width_ratio; |
| 1788 | ia.m_Y = engine->m_Height - (a.m_Y + 0.5f) * height_ratio; |
| 1789 | ia.m_DX = a.m_DX * width_ratio; |
| 1790 | ia.m_DY = -a.m_DY * height_ratio; |
| 1791 | ia.m_ScreenX = a.m_X; |
| 1792 | ia.m_ScreenY = window_height - a.m_Y; |
| 1793 | ia.m_ScreenDX = a.m_DX; |
| 1794 | ia.m_ScreenDY = -a.m_DY; |
| 1795 | } |
| 1796 | } |
| 1797 | |
| 1798 | input_action.m_HasText = action->m_HasText; |
| 1799 | if (action->m_HasText && action->m_Count > 0) |
| 1800 | { |
| 1801 | uint32_t text_count = dmMath::Min((uint32_t) action->m_Count, (uint32_t) dmHID::MAX_CHAR_COUNT); |
| 1802 | input_action.m_Count = text_count; |
| 1803 | for (uint32_t i = 0; i < text_count; ++i) { |
| 1804 | input_action.m_Text[i] = action->m_Text[i]; |
| 1805 | } |
nothing calls this directly
no test coverage detected