From fcab9a8871ce0943a47421181715ba4bc521f19f Mon Sep 17 00:00:00 2001 From: Modnark <66146584+Modnark@users.noreply.github.com> Date: Thu, 30 Mar 2023 14:45:56 -0400 Subject: [PATCH] kinda add RunService --- Blocks3D.vcproj | 8 +++++ src/include/DataModelV2/DataModelInstance.h | 6 +++- src/include/DataModelV2/RunServiceInstance.h | 14 ++++++++ src/include/DataModelV2/WorkspaceInstance.h | 1 + src/source/Application.cpp | 2 ++ src/source/DataModelV2/DataModelInstance.cpp | 17 ++++++--- src/source/DataModelV2/LevelInstance.cpp | 8 ++--- src/source/DataModelV2/RunServiceInstance.cpp | 36 +++++++++++++++++++ src/source/Listener/MenuButtonListener.cpp | 8 +++-- 9 files changed, 89 insertions(+), 11 deletions(-) create mode 100644 src/include/DataModelV2/RunServiceInstance.h create mode 100644 src/source/DataModelV2/RunServiceInstance.cpp diff --git a/Blocks3D.vcproj b/Blocks3D.vcproj index e7315b6..57370f1 100644 --- a/Blocks3D.vcproj +++ b/Blocks3D.vcproj @@ -509,6 +509,10 @@ /> + + @@ -902,6 +906,10 @@ RelativePath=".\src\include\DataModelV2\PVInstance.h" > + + diff --git a/src/include/DataModelV2/DataModelInstance.h b/src/include/DataModelV2/DataModelInstance.h index aceaf86..132c6d3 100644 --- a/src/include/DataModelV2/DataModelInstance.h +++ b/src/include/DataModelV2/DataModelInstance.h @@ -10,6 +10,7 @@ #include "XplicitNgine/XplicitNgine.h" #include "SoundService.h" #include "LightingInstance.h" +#include "RunServiceInstance.h" // Libraries #include "rapidxml/rapidxml.hpp" @@ -38,6 +39,7 @@ public: ThumbnailGeneratorInstance* getThumbnailGenerator(); SoundService* getSoundService(); LightingInstance* getLighting(); + RunService* getRunService(); std::string message; std::string _loadedFileName; @@ -47,7 +49,7 @@ public: SelectionService* getSelectionService(); PartInstance* makePart(); void clearLevel(); - void toggleRun(); + void toggleRun(bool doRun); bool isRunning(); void resetEngine(); #if _DEBUG @@ -72,6 +74,8 @@ private: XplicitNgine* xplicitNgine; SoundService* soundService; LightingInstance* lightingInstance; + RunService* runService; + bool running; }; diff --git a/src/include/DataModelV2/RunServiceInstance.h b/src/include/DataModelV2/RunServiceInstance.h new file mode 100644 index 0000000..9c32075 --- /dev/null +++ b/src/include/DataModelV2/RunServiceInstance.h @@ -0,0 +1,14 @@ +#pragma once +#include "Instance.h" + +class RunService : + public Instance +{ +public: + RunService(void); + ~RunService(void); + + void run(); + void pause(); + void reset(); +}; diff --git a/src/include/DataModelV2/WorkspaceInstance.h b/src/include/DataModelV2/WorkspaceInstance.h index 459f144..12a3fa9 100644 --- a/src/include/DataModelV2/WorkspaceInstance.h +++ b/src/include/DataModelV2/WorkspaceInstance.h @@ -12,3 +12,4 @@ public: void zoomToExtents(); std::vector partObjects; }; + diff --git a/src/source/Application.cpp b/src/source/Application.cpp index 2d92505..f6e015d 100644 --- a/src/source/Application.cpp +++ b/src/source/Application.cpp @@ -192,6 +192,8 @@ void Application::onInit() { tool = new Tool(); // Called before Application::run() beings cameraController.setFrame(Vector3(0,2,10)); + cameraController.Zoom(-1); + _dataModel = new DataModelInstance(); _dataModel->setParent(NULL); _dataModel->setName("undefined"); diff --git a/src/source/DataModelV2/DataModelInstance.cpp b/src/source/DataModelV2/DataModelInstance.cpp index 79f0c84..c90f46d 100644 --- a/src/source/DataModelV2/DataModelInstance.cpp +++ b/src/source/DataModelV2/DataModelInstance.cpp @@ -25,7 +25,10 @@ DataModelInstance::DataModelInstance(void) workspace = new WorkspaceInstance(); guiRoot = new GuiRootInstance(); level = new LevelInstance(); - thumbnailGenerator = new ThumbnailGeneratorInstance(); + runService = new RunService(); + + //thumbnailGenerator = new ThumbnailGeneratorInstance(); + soundService = new SoundService(); lightingInstance = new LightingInstance(); @@ -67,9 +70,10 @@ XplicitNgine * DataModelInstance::getEngine() return xplicitNgine; } -void DataModelInstance::toggleRun() +// Please use RunService->run(); & RunService->pause(); instead +void DataModelInstance::toggleRun(bool doRun) { - running = !running; + running = doRun; //if(!running) //resetEngine(); } @@ -90,7 +94,6 @@ void DataModelInstance::modXMLLevel(float modY) _modY += modY; clearLevel(); debugGetOpen(); - } #endif @@ -642,6 +645,7 @@ void DataModelInstance::drawMessage(RenderDevice* rd) } } +// Instance getters WorkspaceInstance* DataModelInstance::getWorkspace() { return workspace; @@ -675,4 +679,9 @@ SoundService* DataModelInstance::getSoundService() LightingInstance* DataModelInstance::getLighting() { return lightingInstance; +} + +RunService* DataModelInstance::getRunService() +{ + return runService; } \ No newline at end of file diff --git a/src/source/DataModelV2/LevelInstance.cpp b/src/source/DataModelV2/LevelInstance.cpp index 53c20a4..07af089 100644 --- a/src/source/DataModelV2/LevelInstance.cpp +++ b/src/source/DataModelV2/LevelInstance.cpp @@ -183,26 +183,26 @@ void LevelInstance::winCondition() { DataModelInstance* DataModel = (DataModelInstance*)getParent(); //If level parent gets changed to something other than Datamodel it could cause nasty data corruption bugs DataModel->setMessage(winMessage); - DataModel->toggleRun(); + DataModel->getRunService()->pause(); } void LevelInstance::loseCondition() { DataModelInstance* DataModel = (DataModelInstance*)getParent(); DataModel->setMessage(loseMessage); - DataModel->toggleRun(); + DataModel->getRunService()->pause(); } void LevelInstance::pauseCondition() { DataModelInstance* DataModel = (DataModelInstance*)getParent(); - DataModel->toggleRun(); + DataModel->getRunService()->pause(); } void LevelInstance::drawCondition() { DataModelInstance* DataModel = (DataModelInstance*)getParent(); - DataModel->toggleRun(); + DataModel->getRunService()->pause(); } void LevelInstance::Step(SimTime sdt) diff --git a/src/source/DataModelV2/RunServiceInstance.cpp b/src/source/DataModelV2/RunServiceInstance.cpp new file mode 100644 index 0000000..d4ed6d3 --- /dev/null +++ b/src/source/DataModelV2/RunServiceInstance.cpp @@ -0,0 +1,36 @@ +#include "DataModelV2/RunServiceInstance.h" +#include "DataModelV2/ToggleImageButtonInstance.h" +#include "Globals.h" + +RunService::RunService() +{ + // Run Service, not RunService, because Roblox themselves did it. Why? IDK! + name = "Run Service"; + className = "RunService"; + canDelete = false; +} + +RunService::~RunService(void) +{ +} + +void RunService::run() +{ + // Tell GUI that we are running + Instance* go = g_dataModel->getGuiRoot()->findFirstChild("go"); + g_dataModel->toggleRun(true); + ((ToggleImageButtonInstance*)go)->checked = true; +} + +void RunService::pause() +{ + // Tell GUI that we paused + Instance* go = g_dataModel->getGuiRoot()->findFirstChild("go"); + g_dataModel->toggleRun(false); + ((ToggleImageButtonInstance*)go)->checked = false; +} + +void RunService::reset() +{ + // Can't really implement right now +} diff --git a/src/source/Listener/MenuButtonListener.cpp b/src/source/Listener/MenuButtonListener.cpp index fbd6d67..1af8458 100644 --- a/src/source/Listener/MenuButtonListener.cpp +++ b/src/source/Listener/MenuButtonListener.cpp @@ -6,8 +6,12 @@ void MenuButtonListener::onButton1MouseClick(BaseButtonInstance* button) { if(button->name == "go") { - g_dataModel->toggleRun(); - ((ToggleImageButtonInstance*)button)->checked = g_dataModel->isRunning(); + bool isRunning = g_dataModel->isRunning(); + if(isRunning) + g_dataModel->getRunService()->pause(); + else + g_dataModel->getRunService()->run(); + //((ToggleImageButtonInstance*)button)->checked = !isRunning; } else if(button->name == "file") {