Quick part selection fix

A Part in front of the camera can now be selected if other parts are behind it.
This commit is contained in:
MusicalProgrammer
2018-04-29 18:49:57 -04:00
parent f281103ca1
commit f45e8afb37

View File

@@ -17,7 +17,7 @@
#include "TextButtonInstance.h" #include "TextButtonInstance.h"
#include "ImageButtonInstance.h" #include "ImageButtonInstance.h"
#include "AudioPlayer.h" #include "AudioPlayer.h"
#include <limits.h>
#if G3D_VER < 61000 #if G3D_VER < 61000
#error Requires G3D 6.10 #error Requires G3D 6.10
@@ -1105,18 +1105,24 @@ void Demo::onUserInput(UserInput* ui) {
{ {
selectedInstance = NULL; selectedInstance = NULL;
testRay = app->debugCamera.worldRay(mousex, mousey, app->renderDevice->getViewport()); testRay = app->debugCamera.worldRay(mousex, mousey, app->renderDevice->getViewport());
float nearest=std::numeric_limits<float>::infinity();
Vector3 camPos = app->debugCamera.getCoordinateFrame().translation;
for(size_t i = 0; i < instances.size(); i++) for(size_t i = 0; i < instances.size(); i++)
{ {
if(instances.at(i)->className == "Part" && instances.at(i)->parent == dataModel) if(instances.at(i)->className == "Part" && instances.at(i)->parent == dataModel)
{ {
PhysicalInstance* test = (PhysicalInstance*)instances.at(i); PhysicalInstance* test = (PhysicalInstance*)instances.at(i);
if (testRay.intersectionTime(test->getBox()) != inf()) if (testRay.intersectionTime(test->getBox()) != inf())
{ {
float distanceFromPart = (camPos-test->getPosition()).magnitude();
if (nearest>distanceFromPart)
{
nearest=distanceFromPart;
selectedInstance = test; selectedInstance = test;
} }
} }
} }
}