Added part dragging

This commit is contained in:
willemsteller
2018-05-02 09:47:53 +02:00
parent 5232d5e97f
commit 4b580ef5ad

View File

@@ -66,6 +66,7 @@ static const int CURSOR = 0;
static const int ARROWS = 1; static const int ARROWS = 1;
static const int RESIZE = 2; static const int RESIZE = 2;
static int mode = CURSOR; static int mode = CURSOR;
bool dragging = false;
Vector3 cameraPos = Vector3(0,2,10); Vector3 cameraPos = Vector3(0,2,10);
Vector2 oldMouse = Vector2(0,0); Vector2 oldMouse = Vector2(0,0);
float moveRate = 0.5; float moveRate = 0.5;
@@ -1140,6 +1141,9 @@ void Demo::onUserInput(UserInput* ui) {
{ {
nearest=time; nearest=time;
selectedInstance = test; selectedInstance = test;
//message = "Dragging = true.";
//messageTime = System::time();
dragging = true;
} }
} }
} }
@@ -1154,7 +1158,11 @@ void Demo::onUserInput(UserInput* ui) {
if(ui->keyReleased(SDL_LEFT_MOUSE_KEY)) if(ui->keyReleased(SDL_LEFT_MOUSE_KEY))
{ {
dragging = false;
//message = "Dragging = false.";
//messageTime = System::time();
std::vector<Instance*> instances_2D = dataModel->getGuiRoot()->getAllChildren(); std::vector<Instance*> instances_2D = dataModel->getGuiRoot()->getAllChildren();
std::vector<Instance*> instances = dataModel->getWorkspace()->getAllChildren();
for(size_t i = 0; i < instances_2D.size(); i++) for(size_t i = 0; i < instances_2D.size(); i++)
{ {
if(instances_2D.at(i)->getClassName() == "TextButton" || instances_2D.at(i)->getClassName() == "ImageButton") if(instances_2D.at(i)->getClassName() == "TextButton" || instances_2D.at(i)->getClassName() == "ImageButton")
@@ -1168,6 +1176,33 @@ void Demo::onUserInput(UserInput* ui) {
} }
} }
if (ui->keyDown(SDL_LEFT_MOUSE_KEY)) {
if (dragging) {
PhysicalInstance* part = (PhysicalInstance*) selectedInstance;
Ray dragRay = app->debugCamera.worldRay(mousex, mousey, app->renderDevice->getViewport());
std::vector<Instance*> instances = dataModel->getWorkspace()->getAllChildren();
for(size_t i = 0; i < instances.size(); i++)
{
if(instances.at(i)->getClassName() == "Part")
{
PhysicalInstance* moveTo = (PhysicalInstance*)instances.at(i);
float __time = testRay.intersectionTime(moveTo->getBox());
float __nearest=std::numeric_limits<float>::infinity();
if (__time != inf())
{
if (__nearest>__time)
{
Vector3 closest = (dragRay.closestPoint(moveTo->getPosition()) * 2);
part->setPosition(closest);
//part->setPosition(Vector3(floor(closest.x),part->getPosition().y,floor(closest.z)));
}
}
}
}
Sleep(10);
}
}
//readMouseGUIInput(); //readMouseGUIInput();
// Add other key handling here // Add other key handling here