diff --git a/ArrowTool.cpp b/ArrowTool.cpp index e89c63d..be6ca89 100644 --- a/ArrowTool.cpp +++ b/ArrowTool.cpp @@ -5,6 +5,8 @@ ArrowTool::ArrowTool(void) { lctrlDown = false; rctrlDown = false; + dragging = false; + mouseDown = false; } ArrowTool::~ArrowTool(void) @@ -13,6 +15,7 @@ ArrowTool::~ArrowTool(void) void ArrowTool::onButton1MouseDown(Mouse mouse) { + mouseDown = true; if(!lctrlDown && !rctrlDown) g_selectedInstances.clear(); PartInstance * target = mouse.getTarget(); @@ -22,8 +25,36 @@ void ArrowTool::onButton1MouseDown(Mouse mouse) g_selectedInstances.push_back(g_dataModel); g_usableApp->_propWindow->UpdateSelected(g_selectedInstances[0]); } +void ArrowTool::onButton1MouseUp(Mouse mouse) +{ + if(dragging) + this->setCursor(GetFileInPath("/content/images/ArrowCursor.png")); + mouseDown = false; + dragging = false; +} + void ArrowTool::onMouseMoved(Mouse mouse) { + if(mouseDown) + { + if(!dragging) + { + if(abs(mouse.x-mouseDownStartx) > 5 || abs(mouse.y-mouseDownStarty) > 5) + { + this->setCursor(GetFileInPath("/content/images/GrabRotateCursor.png")); + dragging = true; + } + else return; + } + for(size_t i = 0; i < g_selectedInstances.size(); i++) //This will later decide primary and move all parts according to primary + { + if(PartInstance * part = dynamic_cast(g_selectedInstances[i])) + { + part->setPosition(mouse.getPosition()); + } + } + return; + } PartInstance * target = mouse.getTarget(); if(target == NULL) this->setCursor(GetFileInPath("/content/images/ArrowCursor.png")); diff --git a/ArrowTool.h b/ArrowTool.h index 5eb928c..0da873d 100644 --- a/ArrowTool.h +++ b/ArrowTool.h @@ -8,6 +8,7 @@ public: ArrowTool(void); //OnSelect? ~ArrowTool(void); //OnDeselect? virtual void onButton1MouseDown(Mouse); + virtual void onButton1MouseUp(Mouse); virtual void onMouseMoved(Mouse mouse); virtual void onSelect(Mouse mouse); virtual void onKeyDown(int key); @@ -15,4 +16,8 @@ public: private: bool lctrlDown; bool rctrlDown; + int mouseDownStartx; + int mouseDownStarty; + bool dragging; + bool mouseDown; }; diff --git a/Mouse.cpp b/Mouse.cpp index 2fec28a..b029b33 100644 --- a/Mouse.cpp +++ b/Mouse.cpp @@ -52,14 +52,14 @@ Vector3 Mouse::getPosition() if(G3D::isFinite(testRay.intersectionTime(p->getBox()))) { - if (nearest>testRay.intersectionTime(p->getBox())) + /*if (nearest>testRay.intersectionTime(p->getBox())) { // BROKEN pos = (testRay.closestPoint(p->getPosition()/2)); - } + }*/ - /* // This would be an overall better solution + // This would be an overall better solution for(char i = 0; i < 6; i++) { Vector3 side1; @@ -74,7 +74,7 @@ Vector3 Mouse::getPosition() nearest = newdistance; pos = inter; } - }*/ + } } } return pos;