void Rekd2D::Core::RunnableWindow::Render(unsigned int time) { m_DefaultShader->Bind(); MouseState state = Mouse::GetState(); KeyboardState ks = Keyboard::GetState(); bool hit = false; for (std::vector<IComponent*>::iterator it = m_Components.begin(); it != m_Components.end(); ++it) { if ((*it)->GetBounds().Collides(Vector2F(state.X, state.Y))) { if (!state.MouseButtons[1] && m_OldState.MouseButtons[1]) { (*it)->Click(1); if ((ComponentFlag::Focusable & (*it)->GetFlags()) == ComponentFlag::Focusable) { Unfocus(); (*it)->SetFlag(ComponentFlag::Focusable, 1); } else hit = true; } } if ((ComponentFlag::Pushable & (*it)->GetFlags()) == ComponentFlag::Pushable) (*it)->SetFlag(ComponentFlag::Pushable, (*it)->GetBounds().Collides(Vector2F(state.X, state.Y)) && state.MouseButtons[1]); if ((ComponentFlag::Hoverable & (*it)->GetFlags()) == ComponentFlag::Hoverable) (*it)->SetFlag(ComponentFlag::Hoverable, (*it)->GetBounds().Collides(Vector2F(state.X, state.Y))); if ((ComponentFlag::HookKeyboard & (*it)->GetFlags()) == ComponentFlag::HookKeyboard) { (*it)->OnKeyboard(ks, m_OldKeyState); } (*it)->Render(m_Renderer); } if (hit) Unfocus(); m_OldKeyState = ks; m_OldState = state; }
// TODO: cleanup LinkedInputResponseType LinkedOptionsMenu::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI, LinkedOptionsMenu *&pFocusedMenu ) { LinkedInputResponseType resp; if ( MenuI.button == MENU_BUTTON_LEFT ) { pFocusedMenu = this; resp = MoveRow( -1 ); if ( resp == LIRT_FORWARDED_PREV ) { Unfocus(); LinkedOptionsMenu *pMenu = GetPrevMenu(); pMenu->Focus(); pMenu->SetChoiceIndex( pMenu->GetChoiceCount()-1 ); pFocusedMenu = pMenu; } return resp; } else if ( MenuI.button == MENU_BUTTON_RIGHT ) { pFocusedMenu = this; resp = MoveRow( 1 ); if ( resp == LIRT_FORWARDED_NEXT ) { Unfocus(); LinkedOptionsMenu *pMenu = GetNextMenu(); pMenu->Focus(); pMenu->SetChoiceIndex( 0 ); pFocusedMenu = pMenu; } return resp; } else if ( MenuI.button == MENU_BUTTON_SELECT ) { Unfocus(); LinkedOptionsMenu *pMenu = GetNextMenu(); pMenu->Focus(); pFocusedMenu = pMenu; if ( pMenu == this ) return LIRT_STOP; else { m_SoundSwitchMenu.Play(); return LIRT_FORWARDED_NEXT; } } return LIRT_INVALID; }
void CheckboxComponent::CheckMouseCollision() { Vector2f diff = g_input->GetMousePosition() - m_object->GetGlobalPos(); float alpha = -m_object->GetGlobalRotation() * (float)PI / 180.f; Vector2f rotatedDiff = Vector2f(diff.x * cos(alpha) - diff.y * sin(alpha), diff.x * sin(alpha) + diff.y * cos(alpha)); if (rotatedDiff.x >= 0 && rotatedDiff.y >= 0 && rotatedDiff.x <= m_size.x && rotatedDiff.y <= m_size.y) { Focus(); if (g_input->WasPressedThisTurn(MOUSE_LEFT)) { if (m_selected) { UnSelect(); } else { Select(); } } } else { Unfocus(); } }
LinkedOptionsMenu* LinkedOptionsMenu::SwitchToPrevMenu() { LinkedOptionsMenu *pRet = GetPrevMenu(); Unfocus(); pRet->Focus(); m_SoundSwitchMenu.Play(); return pRet; }
void TextEntry::OnRawMouseDown(MouseButtonEvent *e) { if (!m_justFocused) Unfocus(); }