diff --git a/BaseButtonInstance.cpp b/BaseButtonInstance.cpp index 5259e99..99dfa46 100644 --- a/BaseButtonInstance.cpp +++ b/BaseButtonInstance.cpp @@ -1,4 +1,5 @@ #include "BaseButtonInstance.h" +#include "Globals.h" bool floatBottom = false; bool floatRight = false; @@ -12,6 +13,14 @@ BaseButtonInstance::BaseButtonInstance(void) listener = NULL; } +void BaseButtonInstance::render(RenderDevice* rd) +{ + DataModelInstance* dataModel = Globals::dataModel; + Vector2 pos = Vector2(dataModel->mousex,dataModel->mousey); + drawObj(rd, pos, dataModel->mouseButton1Down); + Instance::render(rd); +} + BaseButtonInstance::~BaseButtonInstance(void) { delete listener; diff --git a/BaseButtonInstance.h b/BaseButtonInstance.h index 688299c..6322426 100644 --- a/BaseButtonInstance.h +++ b/BaseButtonInstance.h @@ -8,6 +8,7 @@ class BaseButtonInstance : public Instance public: BaseButtonInstance(void); virtual ~BaseButtonInstance(void); + virtual void render(RenderDevice* rd); virtual void drawObj(RenderDevice* rd, Vector2 mousePos, bool mouseDown); virtual bool mouseInButton(float, float, RenderDevice* rd); virtual void onMouseClick(); diff --git a/DataModelInstance.cpp b/DataModelInstance.cpp index d79e5e9..26bdcb2 100644 --- a/DataModelInstance.cpp +++ b/DataModelInstance.cpp @@ -3,6 +3,10 @@ WorkspaceInstance* workspace; Instance* guiRoot; +float mousex; +float mousey; +bool mouseButton1Down; + DataModelInstance::DataModelInstance(void) { @@ -10,6 +14,9 @@ DataModelInstance::DataModelInstance(void) guiRoot = new Instance(); children.push_back(workspace); className = "dataModel"; + mousex = 0; + mousey = 0; + mouseButton1Down = false; } DataModelInstance::~DataModelInstance(void) diff --git a/DataModelInstance.h b/DataModelInstance.h index 9142a57..5c6f887 100644 --- a/DataModelInstance.h +++ b/DataModelInstance.h @@ -10,4 +10,7 @@ public: ~DataModelInstance(void); WorkspaceInstance* getWorkspace(); Instance* getGuiRoot(); + float mousex; + float mousey; + bool mouseButton1Down; }; diff --git a/G3DTest.vcproj b/G3DTest.vcproj index 5a94fc8..f65be02 100644 --- a/G3DTest.vcproj +++ b/G3DTest.vcproj @@ -242,6 +242,10 @@ RelativePath=".\Dialogs.rc" > + + @@ -307,6 +311,10 @@ RelativePath=".\ButtonListener.h" > + + diff --git a/Globals.cpp b/Globals.cpp new file mode 100644 index 0000000..3652356 --- /dev/null +++ b/Globals.cpp @@ -0,0 +1,12 @@ +#include "Globals.h" + +DataModelInstance* Globals::dataModel = NULL; + +Globals::Globals(void) +{ + +} + +Globals::~Globals(void) +{ +} \ No newline at end of file diff --git a/Globals.h b/Globals.h new file mode 100644 index 0000000..78ca48c --- /dev/null +++ b/Globals.h @@ -0,0 +1,10 @@ +#pragma once +#include "DataModelInstance.h" + +class Globals +{ +public: + Globals(void); + ~Globals(void); + static DataModelInstance* dataModel; +}; \ No newline at end of file diff --git a/main.cpp b/main.cpp index 247f378..afc9407 100644 --- a/main.cpp +++ b/main.cpp @@ -19,6 +19,7 @@ #include "ImageButtonInstance.h" #include "DataModelInstance.h" #include "AudioPlayer.h" +#include "Globals.h" #include #if G3D_VER < 61000 @@ -45,11 +46,11 @@ static G3D::TextureRef go = NULL; static G3D::TextureRef go_ovr = NULL; static G3D::TextureRef go_dn = NULL; VARAreaRef varStatic = NULL; -static float mousex = 0; -static float mousey = 0; +//static float dataModel->mousex = 0; +//static float dataModel->mousey = 0; static int cursorid = 0; static G3D::TextureRef cursor = NULL; -static bool mouseButton1Down = false; +//static bool dataModel->mouseButton1Down = false; static bool running = true; static bool mouseMovedBeginMotion = false; static bool showMouse = true; @@ -71,10 +72,7 @@ Vector3 cameraPos = Vector3(0,2,10); Vector2 oldMouse = Vector2(0,0); float moveRate = 0.5; Instance* selectedInstance = NULL; -/** - This simple demo applet uses the debug mode as the regular - rendering mode so you can fly around the scene. - */ + @@ -703,6 +701,8 @@ void Demo::onInit() { dataModel = new DataModelInstance(); dataModel->setParent(NULL); dataModel->name = "undefined"; + + Globals::dataModel = dataModel; initGUI(); @@ -1085,9 +1085,9 @@ void Demo::onUserInput(UserInput* ui) { message = "FPS has been locked at " + Convert(FPSVal[index]); //setDesiredFrameRate(FPSVal[index]); } - mousex = ui->getMouseX(); - mousey = ui->getMouseY(); - mouseButton1Down = ui->keyDown(SDL_LEFT_MOUSE_KEY); + dataModel->mousex = ui->getMouseX(); + dataModel->mousey = ui->getMouseY(); + dataModel->mouseButton1Down = ui->keyDown(SDL_LEFT_MOUSE_KEY); if(ui->keyDown(SDLK_UP)) { forwards = true; @@ -1125,7 +1125,7 @@ void Demo::onUserInput(UserInput* ui) { if(!onGUI) { selectedInstance = NULL; - testRay = app->debugCamera.worldRay(mousex, mousey, app->renderDevice->getViewport()); + testRay = app->debugCamera.worldRay(dataModel->mousex, dataModel->mousey, app->renderDevice->getViewport()); float nearest=std::numeric_limits::infinity(); Vector3 camPos = app->debugCamera.getCoordinateFrame().translation; std::vector instances = dataModel->getWorkspace()->getAllChildren(); @@ -1143,7 +1143,7 @@ void Demo::onUserInput(UserInput* ui) { selectedInstance = test; //message = "Dragging = true."; //messageTime = System::time(); - dragging = true; + //dragging = true; } } } @@ -1179,7 +1179,7 @@ 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()); + Ray dragRay = app->debugCamera.worldRay(dataModel->mousex, dataModel->mousey, app->renderDevice->getViewport()); std::vector instances = dataModel->getWorkspace()->getAllChildren(); for(size_t i = 0; i < instances.size(); i++) { @@ -1246,9 +1246,9 @@ bool mouseInArea(float point1x, float point1y, float point2x, float point2y) { - if(mousex >= point1x && mousey >= point1y) + if(dataModel->mousex >= point1x && dataModel->mousey >= point1y) { - if(mousex < point2x && mousey < point2y) + if(dataModel->mousex < point2x && dataModel->mousey < point2y) { return true; } @@ -1259,16 +1259,17 @@ bool mouseInArea(float point1x, float point1y, float point2x, float point2y) void drawButtons(RenderDevice* rd) { - std::vector instances_2D = dataModel->getGuiRoot()->getChildren(); + dataModel->getGuiRoot()->render(rd); + /*std::vector instances_2D = dataModel->getGuiRoot()->getChildren(); for(size_t i = 0; i < instances_2D.size(); i++) { Instance* instance = instances_2D.at(i); if(instance->getClassName() == "TextButton" || instance->getClassName() == "ImageButton") { BaseButtonInstance* tbi = (BaseButtonInstance*)instance; - tbi->drawObj(rd, Vector2(mousex, mousey), mouseButton1Down); + tbi->drawObj(rd, Vector2(dataModel->mousex, dataModel->mousey), dataModel->mouseButton1Down); } - } + }*/ } void drawOutline(Vector3 from, Vector3 to, RenderDevice* rd, LightingParameters lighting, Vector3 size, Vector3 pos, CoordinateFrame c)