bool DebugGuiWindowDebugProp::processInputEvent( const InputEvent& inputEvent, const DebugGuiInputState& state ) { if ( ( inputEvent.eventType == InputEventType_Mouse_ButtonDown || inputEvent.eventType == InputEventType_Mouse_ButtonUp ) && inputEvent.data.mouseButton.button == MouseButton_Left ) { TreeNode* pNearestNode = findNearestNode( state.mousePosition, true, nullptr ); if ( inputEvent.eventType == InputEventType_Mouse_ButtonDown ) { m_pInputNode = pNearestNode; } else if ( inputEvent.eventType == InputEventType_Mouse_ButtonUp && m_pInputNode == pNearestNode ) { m_pSelectedNode = m_pInputNode; } } else if ( inputEvent.eventType == InputEventType_Keyboard_Down ) { m_inputTimer = 0.0; switch ( inputEvent.data.keybaordKey.key ) { case KeyboardKey_Up: m_inputAction = InputAction_MoveUp; break; case KeyboardKey_Down: m_inputAction = InputAction_MoveDown; break; case KeyboardKey_Left: if ( m_pSelectedNode != nullptr ) { m_inputAction = InputAction_Decrese; } break; case KeyboardKey_Right: if ( m_pSelectedNode != nullptr ) { m_inputAction = InputAction_Increse; } break; default: break; } } else if ( inputEvent.eventType == InputEventType_Keyboard_Up ) { m_inputAction = InputAction_Invalid; m_inputTimer = 0.0; m_holdTimer = 0.0; } return DebugGuiWindow::processInputEvent( inputEvent, state ); }
void Bot::updateNearestNode() { float minDist = slm::distance(position, nearestNode->position); if(minDist > 2*map->distance) { findNearestNode(); return; } AIMap_Node* newNearest = nearestNode; for(int i = 0; i < nearestNode->neighbours.size(); i++) { float tmpDist = slm::distance(position, nearestNode->neighbours[i]->position); if(tmpDist < minDist) { minDist = tmpDist; newNearest = nearestNode->neighbours[i]; } } nearestNode = newNearest; }
void DebugGuiWindowDebugProp::update( double elapsedTime ) { if ( m_inputAction != InputAction_Invalid ) { m_inputTimer -= elapsedTime; m_holdTimer += elapsedTime; if ( m_inputTimer < 0.0 ) { switch ( m_inputAction ) { case InputAction_MoveUp: case InputAction_MoveDown: { const bool up = ( m_inputAction == InputAction_MoveUp ); if ( m_pSelectedNode != nullptr ) { m_pSelectedNode = findNearestNode( m_pSelectedNode->nodeLayout.getRectangle().getXY(), up, m_pSelectedNode ); } if ( m_pSelectedNode == nullptr ) { const float multiplier = ( up ? 1.0f : -1.0f ); m_pSelectedNode = findNearestNode( vector::create( 0.0f, 100000.0f * multiplier ), up, nullptr ); } } break; case InputAction_Decrese: { if ( m_pSelectedNode == nullptr ) { break; } else if ( m_pSelectedNode->type == TreeNodeType_Folder ) { collapseFolderNode( *(TreeFolderNode*)m_pSelectedNode ); } else if ( m_pSelectedNode->type == TreeNodeType_Property ) { changePropNode( *(TreePropNode*)m_pSelectedNode, false ); } } break; case InputAction_Increse: { if ( m_pSelectedNode == nullptr ) { break; } else if ( m_pSelectedNode->type == TreeNodeType_Folder ) { expandFolderNode( *(TreeFolderNode*)m_pSelectedNode ); } else if ( m_pSelectedNode->type == TreeNodeType_Property ) { changePropNode( *(TreePropNode*)m_pSelectedNode, true ); } } break; default: break; } m_inputTimer = 0.35 / TIKI_MAX( 1.0, m_holdTimer ); } } DebugGuiWindow::update( elapsedTime ); }