Line |
Branch |
Exec |
Source |
1 |
|
|
// This file is part of INSTINCT, the INS Toolkit for Integrated |
2 |
|
|
// Navigation Concepts and Training by the Institute of Navigation of |
3 |
|
|
// the University of Stuttgart, Germany. |
4 |
|
|
// |
5 |
|
|
// This Source Code Form is subject to the terms of the Mozilla Public |
6 |
|
|
// License, v. 2.0. If a copy of the MPL was not distributed with this |
7 |
|
|
// file, You can obtain one at https://mozilla.org/MPL/2.0/. |
8 |
|
|
|
9 |
|
|
#include "TouchTracker.hpp" |
10 |
|
|
|
11 |
|
|
#include <map> |
12 |
|
|
|
13 |
|
|
namespace NAV::gui |
14 |
|
|
{ |
15 |
|
|
|
16 |
|
|
/// @brief Comparison operator for node Ids |
17 |
|
|
struct NodeIdLess |
18 |
|
|
{ |
19 |
|
|
/// @brief Smaller comparison operator for node Ids |
20 |
|
|
/// @param[in] lhs Left-hand-side of the operator |
21 |
|
|
/// @param[in] rhs Right-hand-side of the operator |
22 |
|
|
/// @return Whether lhs < rhs |
23 |
|
✗ |
bool operator()(const ax::NodeEditor::NodeId& lhs, const ax::NodeEditor::NodeId& rhs) const |
24 |
|
|
{ |
25 |
|
✗ |
return lhs.AsPointer() < rhs.AsPointer(); |
26 |
|
|
} |
27 |
|
|
}; |
28 |
|
|
|
29 |
|
|
namespace |
30 |
|
|
{ |
31 |
|
|
const float m_TouchTime = 1.0F; |
32 |
|
|
std::map<ax::NodeEditor::NodeId, float, NodeIdLess> m_NodeTouchTime; |
33 |
|
|
|
34 |
|
|
} // namespace |
35 |
|
|
} // namespace NAV::gui |
36 |
|
|
|
37 |
|
|
/// @brief Trigger a touch event on the specified node |
38 |
|
|
/// @param[in] id Id of the node to trigger the event on |
39 |
|
✗ |
void NAV::gui::TouchNode(ax::NodeEditor::NodeId id) |
40 |
|
|
{ |
41 |
|
✗ |
m_NodeTouchTime[id] = m_TouchTime; |
42 |
|
✗ |
} |
43 |
|
|
|
44 |
|
|
/// @brief Get the Touch Progress for the specified node |
45 |
|
|
/// @param[in] id Id of the Node to check |
46 |
|
|
/// @return The Touch progress towards the touch time |
47 |
|
✗ |
float NAV::gui::GetTouchProgress(ax::NodeEditor::NodeId id) |
48 |
|
|
{ |
49 |
|
✗ |
auto it = m_NodeTouchTime.find(id); |
50 |
|
✗ |
if (it != m_NodeTouchTime.end() && it->second > 0.0F) |
51 |
|
|
{ |
52 |
|
✗ |
return (m_TouchTime - it->second) / m_TouchTime; |
53 |
|
|
} |
54 |
|
|
|
55 |
|
✗ |
return 0.0F; |
56 |
|
|
} |
57 |
|
|
|
58 |
|
|
/// @brief Updates the touch events for all nodes |
59 |
|
|
/// @param[in] deltaTime Time elapsed since last frame, in [seconds] |
60 |
|
✗ |
void NAV::gui::UpdateTouch(float deltaTime) |
61 |
|
|
{ |
62 |
|
✗ |
for (auto& entry : m_NodeTouchTime) |
63 |
|
|
{ |
64 |
|
✗ |
if (entry.second > 0.0F) |
65 |
|
|
{ |
66 |
|
✗ |
entry.second -= deltaTime; |
67 |
|
|
} |
68 |
|
|
} |
69 |
|
✗ |
} |
70 |
|
|
|