MCPcopy Create free account
hub / github.com/defold/defold / GOActionCallback

Function GOActionCallback

engine/engine/src/engine.cpp:1748–1827  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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 }

Callers

nothing calls this directly

Calls 3

MinFunction · 0.85
GetWindowHeightFunction · 0.50
PushMethod · 0.45

Tested by

no test coverage detected