Added surface selector, made faces reflect G3D faces

This commit is contained in:
Vulpovile
2021-03-15 10:12:45 -07:00
parent 0e3968acd4
commit bfcb3f83ab
10 changed files with 102 additions and 19 deletions

View File

@@ -1,7 +1,6 @@
#include "Tool/SurfaceTool.h"
#include "Application.h"
SurfaceTool::SurfaceTool(Enum::SurfaceType::Value theSurface, int extraParam)
SurfaceTool::SurfaceTool(int theSurface, int extraParam)
{
surface = theSurface;
param = extraParam;
@@ -11,9 +10,53 @@ SurfaceTool::~SurfaceTool(void)
{
}
std::vector<G3D::Box> getSurfaces(PartInstance * part)
{
std::vector<G3D::Box> planes;
G3D::Box box = part->getBox();
G3D::Vector3 v0;
G3D::Vector3 v1;
G3D::Vector3 v2;
G3D::Vector3 v3;
box.getFaceCorners(0,v0,v1,v2,v3);
planes.push_back(G3D::Box(v0, v2));
box.getFaceCorners(1,v0,v1,v2,v3);
planes.push_back(G3D::Box(v0, v2));
box.getFaceCorners(2,v0,v1,v2,v3);
planes.push_back(G3D::Box(v0, v2));
box.getFaceCorners(3,v0,v1,v2,v3);
planes.push_back(G3D::Box(v0, v2));
box.getFaceCorners(4,v0,v1,v2,v3);
planes.push_back(G3D::Box(v0, v2));
box.getFaceCorners(5,v0,v1,v2,v3);
planes.push_back(G3D::Box(v0, v2));
return planes;
}
void SurfaceTool::onButton1MouseDown(Mouse mouse)
{
AudioPlayer::playSound(dingSound);
PartInstance * target = mouse.getTarget();
G3D::Ray ray = mouse.getLastRay();
std::vector<G3D::Box> surfacesHit = getSurfaces(target);
int closest;
float nearValue = G3D::inf();
for(size_t i = 0; i < surfacesHit.size(); i++)
{
float newTime = ray.intersectionTime(surfacesHit[i]);
if(nearValue > newTime)
{
nearValue = newTime;
closest = (int)i;
}
}
if(G3D::isFinite(nearValue))
{
printf("\n%d\n", closest);
target->setSurface(closest, Enum::SurfaceType::Value(surface));
}
g_usableApp->changeTool(NULL);
}
void SurfaceTool::onButton1MouseUp(Mouse mouse)
{
@@ -25,6 +68,7 @@ void SurfaceTool::onMouseMoved(Mouse mouse)
}
void SurfaceTool::onSelect(Mouse mouse)
{
AudioPlayer::playSound(dingSound);
}
void SurfaceTool::onKeyDown(int key)