| 614 | } |
| 615 | |
| 616 | void UpdateBinding(HBinding binding, float dt) |
| 617 | { |
| 618 | DM_PROFILE(__FUNCTION__); |
| 619 | binding->m_Actions.Iterate<void>(ClearAction, 0x0); |
| 620 | |
| 621 | dmHID::HContext hid_context = binding->m_Context->m_HidContext; |
| 622 | if (binding->m_KeyboardBinding != 0x0) |
| 623 | { |
| 624 | KeyboardBinding* keyboard_binding = binding->m_KeyboardBinding; |
| 625 | dmHID::KeyboardPacket* packet = &keyboard_binding->m_Packet; |
| 626 | dmHID::KeyboardPacket* prev_packet = &keyboard_binding->m_PreviousPacket; |
| 627 | if (dmHID::GetKeyboardPacket(keyboard_binding->m_Keyboard, packet)) |
| 628 | { |
| 629 | const dmArray<KeyTrigger>& triggers = keyboard_binding->m_Triggers; |
| 630 | for (uint32_t i = 0; i < triggers.Size(); ++i) |
| 631 | { |
| 632 | const KeyTrigger& trigger = triggers[i]; |
| 633 | float v = dmHID::GetKey(packet, KEY_MAP[trigger.m_Input]) ? 1.0f : 0.0f; |
| 634 | Action* action = binding->m_Actions.Get(trigger.m_ActionId); |
| 635 | if (action != 0x0) |
| 636 | { |
| 637 | if (dmMath::Abs(action->m_Value) < v) |
| 638 | { |
| 639 | action->m_Value = v; |
| 640 | } |
| 641 | UpdateActionPressedReleasedRepeated(action, binding->m_Context, dt); |
| 642 | } |
| 643 | } |
| 644 | *prev_packet = *packet; |
| 645 | } |
| 646 | } |
| 647 | if (binding->m_TextBinding != 0x0) |
| 648 | { |
| 649 | TextBinding* text_binding = binding->m_TextBinding; |
| 650 | |
| 651 | dmHID::TextPacket* text_packet = &text_binding->m_TextPacket; |
| 652 | if (dmHID::GetTextPacket(hid_context, text_packet)) |
| 653 | { |
| 654 | const dmArray<TextTrigger>& triggers = text_binding->m_Triggers; |
| 655 | for (uint32_t i = 0; i < triggers.Size(); ++i) |
| 656 | { |
| 657 | const TextTrigger& trigger = triggers[i]; |
| 658 | if (trigger.m_Input == dmInputDDF::TEXT) |
| 659 | { |
| 660 | Action* action = binding->m_Actions.Get(trigger.m_ActionId); |
| 661 | if (action != 0x0) |
| 662 | { |
| 663 | for (uint32_t i = 0; i < text_packet->m_Size; ++i) { |
| 664 | action->m_Text[i] = text_packet->m_Text[i]; |
| 665 | } |
| 666 | action->m_Count = text_packet->m_Size; |
| 667 | action->m_HasText = action->m_Count > 0; |
| 668 | } |
| 669 | } |
| 670 | } |
| 671 | } |
| 672 | |
| 673 | dmHID::MarkedTextPacket* marked_packet = &text_binding->m_MarkedTextPacket; |