Moved selection to be a service

This commit is contained in:
Vulpovile
2022-10-03 19:30:24 -07:00
parent b2db375ecf
commit f46e24d8f1
18 changed files with 177 additions and 140 deletions

View File

@@ -154,19 +154,19 @@ void Application::navigateToolbox(std::string path)
void Application::deleteInstance()
{
if(g_selectedInstances.size() > 0)
if(_dataModel->getSelectionService()->getSelection().size() > 0)
{
size_t undeletable = 0;
while(g_selectedInstances.size() > undeletable)
while(_dataModel->getSelectionService()->getSelection().size() > undeletable)
{
if(g_selectedInstances.at(0)->canDelete)
if(_dataModel->getSelectionService()->getSelection()[0]->canDelete)
{
AudioPlayer::playSound(GetFileInPath("/content/sounds/pageturn.wav"));
Instance* selectedInstance = g_selectedInstances.at(0);
Instance* selectedInstance = g_dataModel->getSelectionService()->getSelection()[0];
_dataModel->getSelectionService()->removeChild(selectedInstance);
selectedInstance->setParent(NULL);
delete selectedInstance;
selectedInstance = NULL;
g_selectedInstances.erase(g_selectedInstances.begin());
}
else
{
@@ -174,8 +174,8 @@ void Application::deleteInstance()
}
}
}
if(g_selectedInstances.size() == 0)
g_usableApp->_propWindow->UpdateSelected(g_dataModel);
if(_dataModel->getSelectionService()->getSelection().size() == 0)
_dataModel->getSelectionService()->addSelected(_dataModel);
}
@@ -280,6 +280,8 @@ void Application::onInit() {
_dataModel->debugGetOpen();
#endif
_dataModel->getSelectionService()->clearSelection();
_dataModel->getSelectionService()->addSelected(_dataModel);
@@ -311,10 +313,6 @@ void Application::onNetwork() {
// return pow(pow((double)vector1.x - (double)vector2.x, 2) + pow((double)vector1.y - (double)vector2.y, 2) + pow((double)vector1.z - (double)vector2.z, 2), 0.5);
//}
std::vector<Instance*> Application::getSelection()
{
return g_selectedInstances;
}
void Application::onSimulation(RealTime rdt, SimTime sdt, SimTime idt) {
if(_dataModel->isRunning())
@@ -331,25 +329,13 @@ void Application::onSimulation(RealTime rdt, SimTime sdt, SimTime idt) {
else
_dataModel->getEngine()->createBody(partInstance);
}
bool a = false;
while(toDelete.size() > 0)
{
PartInstance * p = toDelete.back();
toDelete.pop_back();
if(std::find(g_selectedInstances.begin(), g_selectedInstances.end(), p) != g_selectedInstances.end())
{
g_selectedInstances.erase(std::remove(g_selectedInstances.begin(), g_selectedInstances.end(), p), g_selectedInstances.end());
a = true;
}
g_dataModel->getSelectionService()->removeSelected(p);
p->setParent(NULL);
delete p;
}
if(a)
{
if(g_selectedInstances.size() == 0)
g_usableApp->_propWindow->UpdateSelected(g_dataModel);
else if(g_selectedInstances.size() == 1)
g_usableApp->_propWindow->UpdateSelected(g_selectedInstances[0]);
}
for(int i = 0; i < 6; i++)
{
@@ -603,17 +589,15 @@ void Application::onGraphics(RenderDevice* rd) {
//Draw::box(G3D::Box(mouse.getPosition()-Vector3(2,0.5F,1),mouse.getPosition()+Vector3(2,0.5F,1)), rd, Color3::cyan(), Color4::clear());
if(g_selectedInstances.size() > 0)
for(size_t i = 0; i < _dataModel->getSelectionService()->getSelection().size(); i++)
{
for(size_t i = 0; i < g_selectedInstances.size(); i++)
if(PartInstance* part = dynamic_cast<PartInstance*>(g_dataModel->getSelectionService()->getSelection()[i]))
{
if(PartInstance* part = dynamic_cast<PartInstance*>(g_selectedInstances.at(i)))
{
Vector3 size = part->getSize();
Vector3 pos = part->getPosition();
drawOutline(Vector3(0+size.x/2, 0+size.y/2, 0+size.z/2) ,Vector3(0-size.x/2,0-size.y/2,0-size.z/2), rd, lighting, Vector3(size.x/2, size.y/2, size.z/2), Vector3(pos.x, pos.y, pos.z), part->getCFrame());
}
}
Vector3 size = part->getSize();
Vector3 pos = part->getPosition();
drawOutline(Vector3(0+size.x/2, 0+size.y/2, 0+size.z/2) ,Vector3(0-size.x/2,0-size.y/2,0-size.z/2), rd, lighting, Vector3(size.x/2, size.y/2, size.z/2), Vector3(pos.x, pos.y, pos.z), part->getCFrame());
}
}
@@ -702,12 +686,6 @@ void Application::onKeyUp(int key)
void Application::onMouseLeftPressed(HWND hwnd,int x,int y)
{
//Removed set focus
//std::cout << "Click: " << x << "," << y << std::endl;
bool onGUI = _dataModel->getGuiRoot()->mouseInGUI(renderDevice, x, y);
@@ -717,19 +695,6 @@ void Application::onMouseLeftPressed(HWND hwnd,int x,int y)
}
}
void Application::selectInstance(Instance* selectedInstance, PropertyWindow* propWindow)
{
if(!GetHoldKeyState(VK_RCONTROL) && !GetHoldKeyState(VK_LCONTROL))
{
printf("No control key hold \n");
g_selectedInstances.clear();
}
else printf("Control held\n");
if(std::find(g_selectedInstances.begin(), g_selectedInstances.end(),selectedInstance)==g_selectedInstances.end())
g_selectedInstances.push_back(selectedInstance);
propWindow->UpdateSelected(selectedInstance);
}
G3D::RenderDevice* Application::getRenderDevice()
{
return renderDevice;
@@ -737,13 +702,9 @@ G3D::RenderDevice* Application::getRenderDevice()
void Application::onMouseLeftUp(G3D::RenderDevice* renderDevice, int x, int y)
{
//std::cout << "Release: " << x << "," << y << std::endl;
_dataModel->getGuiRoot()->onMouseLeftUp(renderDevice, x, y);
_dragging = false;
tool->onButton1MouseUp(mouse);
//_message = "Dragging = false.";
//_messageTime = System::time();
}
void Application::onMouseRightPressed(int x,int y)
@@ -763,8 +724,6 @@ void Application::onMouseMoved(int x,int y)
mouse.y = y;
//tool->onMouseMoved(mouse);
mouseMoveState = true;
//_dataModel->mousex = x;
//_dataModel->mousey = y;
}
void Application::onMouseWheel(int x,int y,short delta)