void CreateTreeTool::doPress(int x, int y, int flags, float pressure) { Vector3 from; if (!m_view->traceWorld(x, y, from, SelectPart::All)) { return; } m_actor = new SpeedTree(); m_view->getContext()->setSelection(m_actor); m_actor->setProperty("tree", m_mapContext->getMapState()->treeFilename); if (m_mapContext->getMapState()->isSnapToGrid) { from = Internal::snap(from, m_mapContext->getMapState()->snapToGrid); } m_actor->bindToGame(); GroupHis* grouphis = new GroupHis(m_context, "Create SpeedTree"); ActorList actorlist; actorlist.push_back(m_actor); UndeleteHis* undelhis = new UndeleteHis(m_context, "Create SpeedTree", actorlist); History* selhis = m_view->getContext()->setSelectionHistoried(actorlist); grouphis->append(undelhis); grouphis->append(selhis); m_context->addHistory(grouphis); doDrag(x, y, flags, pressure); }
void TerrainRaiseTool::doPress(int x, int y, int flags, float pressure) { if (!m_isValid) return; m_brushRadius = m_mapContext->getMapState()->terrainBrushSize; m_brushSoftness = m_mapContext->getMapState()->terrainBrushSoftness; m_brushStrength = m_mapContext->getMapState()->terrainBrushStrength; m_editedRect.clear(); if (flags & Input::Event::ControlModifier) m_brushStrength = -m_brushStrength; doDrag(x, y, flags, pressure); }
void TerrainPaintTool::doPress(int x, int y, int flags, float pressure) { if (!m_isValid) return; m_brushRadius = m_mapContext->getMapState()->terrainBrushSize; m_brushSoftness = m_mapContext->getMapState()->terrainBrushSoftness; m_brushStrength = m_mapContext->getMapState()->terrainBrushStrength; m_layerGen = m_terrain->getLayerGenById(m_mapContext->getMapState()->terrainCurLayerId); m_editedRect.clear(); if (flags & Input::Event::ControlModifier) m_brushStrength = -m_brushStrength; SafeDelete(m_oldPixel); doDrag(x, y, flags, pressure); }
bool CWindowMan::work(HWND hWnd, CKeyMan &keyMan) { bool bPressWindow = false; getMousePos(hWnd, m_iClientX, m_iClientY); if(m_bInDrag) { doDrag(hWnd, keyMan); } else { //不是拖曳動作 if(keyMan.isPress(KEY_LBUTTON)) { //壓下去的瞬間 std::list<CWindow *>::iterator it = m_pWindowList->begin(); while(it != m_pWindowList->end ()) { if((*it)->checkPoint(m_iClientX, m_iClientY)) { int tx = m_iClientX; int ty = m_iClientY; if((*it)->canDrag(tx - (*it)->x, ty - (*it)->y)) { //可以拖曳 m_bInDrag = true; } else { //不可以拖曳 (*it)->onLClick(tx, ty); } //有按到 bPressWindow = true; m_iDragX = m_iClientX; m_iDragY = m_iClientY; m_pWindowList->push_front(*it); m_pWindowList->erase(it); m_pDragWnd = m_pWindowList->front(); break ; } it++; } } else if(keyMan.isPress(KEY_RBUTTON)) { //壓下去的瞬間 std::list<CWindow *>::iterator it = m_pWindowList->begin(); while(it != m_pWindowList->end()) { if((*it)->checkPoint(m_iClientX, m_iClientY)) { int tx = m_iClientX; int ty = m_iClientY; m_bInDrag = false; (*it)->onRClick(tx, ty); //有按到 bPressWindow = true; break; } it++; } } else if(keyMan.isPress(KEY_P)) { bool bPlayerInfoWndVisible = false; std::list<CWindow *>::iterator it = m_pWindowList->begin(); while(it != m_pWindowList->end()) { if((*it)->getClassType() == WND_PLAYERINFO) { (*it)->show(!(*it)->isVisible()); bPlayerInfoWndVisible = (*it)->isVisible(); break; } it++; } it = m_pWindowList->begin(); while(it != m_pWindowList->end()) { if((*it)->getClassType() == WND_BACKPACK) { (*it)->show(bPlayerInfoWndVisible); break; } it++; } } else if(keyMan.isPress(KEY_B)) { std::list<CWindow *>::iterator it = m_pWindowList->begin(); while(it != m_pWindowList->end()) { if((*it)->getClassType() == WND_BACKPACK) { (*it)->show(!(*it)->isVisible()); break; } it++; } } else if(keyMan.isPress(KEY_K)) { std::list<CWindow *>::iterator it = m_pWindowList->begin(); while(it != m_pWindowList->end()) { if((*it)->getClassType() == WND_SKILL) { (*it)->show(!(*it)->isVisible()); break; } it++; } } } return bPressWindow ; }