From 74e423e9f87a2566b93a8e756d0f55aa1e76c167 Mon Sep 17 00:00:00 2001 From: andreja6 Date: Wed, 25 Apr 2018 21:32:28 -0700 Subject: [PATCH 01/49] Added code to unlock mouse on message box --- main.cpp | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 69 insertions(+), 4 deletions(-) diff --git a/main.cpp b/main.cpp index 9472e70..1f379e5 100644 --- a/main.cpp +++ b/main.cpp @@ -55,11 +55,14 @@ static bool backwards = false; static bool left = false; static bool right = false; static bool centerCam = false; +static bool panRight = false; +static bool tiltUp = false; static const int CURSOR = 0; static const int ARROWS = 1; static const int RESIZE = 2; static int mode = CURSOR; Vector3 cameraPos = Vector3(0,2,10); +Vector3 focalPointT = Vector3(0,0,0); Vector2 oldMouse = Vector2(0,0); float moveRate = 0.5; Instance* selectedInstance = NULL; @@ -172,6 +175,8 @@ void clearInstances() void OnError(int err, std::string msg = "") { + usableApp->window()->setInputCaptureCount(0); + usableApp->window()->setMouseVisible(true); std::string emsg = "An unexpected error has occured and DUOM 5 has to quit. We're sorry!" + msg; clearInstances(); //DialogBox(NULL, MAKEINTRESOURCE(IDD_DIALOG1), NULL, NULL); @@ -248,6 +253,10 @@ void CameraButtonListener::onButton1MouseClick(BaseButtonInstance* button) cameraPos = Vector3(cameraPos.x, cameraPos.y, cameraPos.z) + frame.lookVector()*2; else if(button->name == "ZoomOut") cameraPos = Vector3(cameraPos.x, cameraPos.y, cameraPos.z) - frame.lookVector()*2; + else if(button->name == "PanRight") + panRight = true; + else if(button->name == "TiltUp") + tiltUp = true; } @@ -742,6 +751,37 @@ void Demo::onSimulation(RealTime rdt, SimTime sdt, SimTime idt) { app->debugController.setCoordinateFrame(frame); centerCam = false; } + + if(panRight) + { + panRight = false; + CoordinateFrame frame = CoordinateFrame(app->debugCamera.getCoordinateFrame().rotation, app->debugCamera.getCoordinateFrame().translation); + Vector3 camerapoint = frame.translation; + Vector3 angles; + float radian = 0; + frame.rotation.toAxisAngle(angles, radian); + message = Convert(angles.x) + ", " + Convert(angles.y) + ", " + Convert(angles.z) + ", " + Convert(radian); + + messageTime = System::time(); + } + if(tiltUp) + { + tiltUp = false; + CoordinateFrame frame = CoordinateFrame(app->debugCamera.getCoordinateFrame().rotation, app->debugCamera.getCoordinateFrame().translation); + Vector3 camerapoint = frame.translation; + + Vector3 focalPoint = camerapoint + frame.lookVector() * 25; + float distance = pow(pow((double)focalPoint.x - (double)camerapoint.x, 2) + pow((double)camerapoint.y - (double)camerapoint.y, 2) + pow((double)focalPoint.z - (double)camerapoint.z, 2), 0.5); + float x = distance * cos(22.5 * G3D::pi() / 180) + focalPoint.x; + float z = distance * sin(22.5 * G3D::pi() / 180) + focalPoint.z; + camerapoint = Vector3(camerapoint.x, camerapoint.y+2, camerapoint.z); + + CoordinateFrame newFrame = CoordinateFrame(camerapoint); + newFrame.lookAt(focalPoint); + cameraPos = camerapoint; + app->debugController.setCoordinateFrame(newFrame); + + } } @@ -1020,9 +1060,10 @@ void Demo::exitApplication() app->endProgram = true; } -void Demo::onGraphics(RenderDevice* rd) { - + + +void Demo::onGraphics(RenderDevice* rd) { Vector2 mousepos = Vector2(0,0); G3D::uint8 num = 0; @@ -1056,7 +1097,7 @@ void Demo::onGraphics(RenderDevice* rd) { } - + // Setup lighting app->renderDevice->enableLighting(); @@ -1065,10 +1106,15 @@ void Demo::onGraphics(RenderDevice* rd) { makeFlag(Vector3(-1, 3.5, 0), rd); + //Vector3 vector = app->debugCamera.getCoordinateFrame().translation + app->debugCamera.getCoordinateFrame().lookVector()*20; + Draw::axes(CoordinateFrame(focalPointT) , rd); app->renderDevice->setLight(0, GLight::directional(lighting.lightDirection, lighting.lightColor)); app->renderDevice->setAmbientLightColor(lighting.ambient); + //app->renderDevice->pushState(); + //app->renderDevice->popState(); + for(size_t i = 0; i < instances.size(); i++) { Instance* instance = instances.at(i); @@ -1283,6 +1329,25 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) SetWindowPos(g3DWind, NULL, 0, 0, width, height, NULL); } break; + case WM_MOUSEMOVE: + { + if(app != 0) + { + POINT p; + if(GetCursorPos(&p)) + { + HWND wnd = WindowFromPoint(p); + if(wnd != app->getHWND()) + { + app->window()->setInputCaptureCount(0); + } + else + { + app->window()->setInputCaptureCount(200); + } + } + } + } default: { return DefWindowProc(hwnd, msg, wParam, lParam); @@ -1301,7 +1366,7 @@ int main(int argc, char** argv) { settings.writeLicenseFile = false; settings.window.center = true; //Using the damned SDL window now - SDLWindow* wnd = new SDLWindow(settings.window); + G3D::SDLWindow* wnd = new SDLWindow(settings.window); //wnd->setInputCaptureCount(200); wnd->setMouseVisible(false); From 0371836dc893eae4236116ee025e8a32bb11a931 Mon Sep 17 00:00:00 2001 From: andreja6 Date: Thu, 26 Apr 2018 11:15:41 -0700 Subject: [PATCH 02/49] Attempted to make bevel code --- main.cpp | 51 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 49 insertions(+), 2 deletions(-) diff --git a/main.cpp b/main.cpp index 1f379e5..b96bb9c 100644 --- a/main.cpp +++ b/main.cpp @@ -41,6 +41,7 @@ static int SCOREVAL = 0; 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 int cursorid = 0; @@ -161,6 +162,7 @@ HWND App::getMainHWND() Demo::Demo(App* _app) : GApplet(_app), app(_app) { + varStatic = VARArea::create(1024 * 1024); } @@ -1060,7 +1062,25 @@ void Demo::exitApplication() app->endProgram = true; } - +void makeBeveledBox(Box box, RenderDevice* rd, Color4 color, CoordinateFrame cFrame) +{ + Vector3 v0, v1, v2, v3; + //glDiffuse(); + rd->setColor(color); + rd->setObjectToWorldMatrix(CoordinateFrame()); + rd->beginPrimitive(RenderDevice::QUADS); + for (int f = 0; f < 6; ++f) { + box.getFaceCorners(f, v0, v1, v2, v3); + glShadeModel(GL_SMOOTH); + //rd->setNormal((v1 - v0).cross(v3 - v0).direction()); + rd->sendVertex(v0); + rd->sendVertex(v1); + rd->sendVertex(v2); + rd->sendVertex(v3); + } + rd->setColor(Color3::white()); + rd->endPrimitive(); +} void Demo::onGraphics(RenderDevice* rd) { @@ -1128,6 +1148,33 @@ void Demo::onGraphics(RenderDevice* rd) { Vector3 pos3 = Vector3((pos.x+size.x/2)/2,(pos.y+size.y/2)/2,(pos.z+size.z/2)/2); Box box = Box(Vector3(0+size.x/4, 0+size.y/4, 0+size.z/4) ,Vector3(0-size.x/4,0-size.y/4,0-size.z/4)); CoordinateFrame c = CoordinateFrame(part->getCFrame().rotation,Vector3(part->getCFrame().translation.x/2, part->getCFrame().translation.y/2, part->getCFrame().translation.z/2)); + //Box wsb = c.toWorldSpace(box); + //makeBeveledBox(c.toWorldSpace(box), app->renderDevice, part->color, part->getCFrame()); + //G3D::MeshBuilder builder = G3D::MeshBuilder(); + //for(int i = 0; i < 6; i++) + //{ + // Vector3 v1, v2, v3, v4; + // wsb.getFaceCorners(i, v1, v2, v3, v4); + // builder.addQuad(v1, v2, v3, v4); + //} + //std::string str; + //G3D::Array arrayInd; + //G3D::Array arrayVector; + //builder.commit(str, arrayInd, arrayVector); + + + //IFSModel::save(ExePath() + "/content/model.ifs", str, arrayInd, arrayVector, NULL); + //IFSModelRef model = IFSModel::create(ExePath() + "/content/model.ifs"); + //app->renderDevice->setLight(0, GLight::directional(lighting.lightDirection, lighting.lightColor)); + app->renderDevice->setShadeMode(RenderDevice::SHADE_SMOOTH); + //app->renderDevice->beginIndexedPrimitives(); + //{ + // app->renderDevice->setNormalArray(G3D::VAR(arrayVector, varStatic)); + //app->renderDevice->setVertexArray(G3D::VAR(arrayVector, varStatic)); + //app->renderDevice->sendIndices(RenderDevice::TRIANGLES, arrayInd); + //} + //app->renderDevice->endIndexedPrimitives(); + Draw::box(c.toWorldSpace(box), app->renderDevice, part->color, Color4::clear()); if(selectedInstance == part) { @@ -1362,7 +1409,7 @@ int main(int argc, char** argv) { GAppSettings settings; settings.window.resizable = true; - settings.window.fsaaSamples = 8; + //settings.window.fsaaSamples = 8; settings.writeLicenseFile = false; settings.window.center = true; //Using the damned SDL window now From 09fcd72e43d3773cdea794510e35c6111f2167f3 Mon Sep 17 00:00:00 2001 From: andreja6 Date: Thu, 26 Apr 2018 11:17:54 -0700 Subject: [PATCH 03/49] Changed shade mode --- main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/main.cpp b/main.cpp index b96bb9c..2e0d263 100644 --- a/main.cpp +++ b/main.cpp @@ -1121,6 +1121,7 @@ void Demo::onGraphics(RenderDevice* rd) { // Setup lighting app->renderDevice->enableLighting(); + app->renderDevice->setShadeMode(RenderDevice::SHADE_SMOOTH); app->renderDevice->setAmbientLightColor(Color3(1,1,1)); Draw::axes(CoordinateFrame(Vector3(0, 0, 0)), app->renderDevice); @@ -1166,7 +1167,7 @@ void Demo::onGraphics(RenderDevice* rd) { //IFSModel::save(ExePath() + "/content/model.ifs", str, arrayInd, arrayVector, NULL); //IFSModelRef model = IFSModel::create(ExePath() + "/content/model.ifs"); //app->renderDevice->setLight(0, GLight::directional(lighting.lightDirection, lighting.lightColor)); - app->renderDevice->setShadeMode(RenderDevice::SHADE_SMOOTH); + //app->renderDevice->beginIndexedPrimitives(); //{ // app->renderDevice->setNormalArray(G3D::VAR(arrayVector, varStatic)); From 811ac871a33e87d059374d6e1553e5ccf1ce4962 Mon Sep 17 00:00:00 2001 From: andreja6 Date: Thu, 26 Apr 2018 11:57:04 -0700 Subject: [PATCH 04/49] Added delete functionality --- main.cpp | 68 ++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 59 insertions(+), 9 deletions(-) diff --git a/main.cpp b/main.cpp index 1f379e5..42dfd9b 100644 --- a/main.cpp +++ b/main.cpp @@ -260,6 +260,29 @@ void CameraButtonListener::onButton1MouseClick(BaseButtonInstance* button) } +class DeleteListener : public ButtonListener { +public: + void onButton1MouseClick(BaseButtonInstance*); +}; + +void DeleteListener::onButton1MouseClick(BaseButtonInstance* button) +{ + if(selectedInstance != NULL) + { + for(size_t i = 0; i < instances.size(); i++) + { + if(instances.at(i) == selectedInstance) + { + Instance* deleting = instances.at(i); + instances.erase(instances.begin() + i); + delete deleting; + selectedInstance == NULL; + } + + } + } +} + class ModeSelectionListener : public ButtonListener { public: void onButton1MouseClick(BaseButtonInstance*); @@ -481,15 +504,8 @@ void initGUI() instance->size = Vector2(40,46); instance->position = Vector2(20, 284); instance->parent = dataModel; - - instance = makeImageButton( - Texture::fromFile(GetFileInPath("/content/images/Delete.png")), - Texture::fromFile(GetFileInPath("/content/images/Delete_ovr.png")), - Texture::fromFile(GetFileInPath("/content/images/Delete_dn.png")), - Texture::fromFile(GetFileInPath("/content/images/Delete_ds.png"))); - instance->size = Vector2(40,46); - instance->position = Vector2(20, 284); - instance->parent = dataModel; + instance->name = "Delete"; + instance->setButtonListener(new DeleteListener()); instance = makeImageButton( Texture::fromFile(GetFileInPath("/content/images/CameraZoomIn.png")), @@ -703,6 +719,19 @@ void Demo::onCleanup() { void Demo::onLogic() { // Add non-simulation game logic and AI code here + for(size_t i = 0; i < instances_2D.size(); i++) + { + if(instances_2D.at(i)->name == "Delete") + { + ImageButtonInstance* button = (ImageButtonInstance*)instances_2D.at(i); + if(selectedInstance == NULL) + button->disabled = true; + else + button->disabled = false; + + } + } + } @@ -901,6 +930,27 @@ void Demo::onUserInput(UserInput* ui) { right = true; } + if(ui->keyPressed(SDL_LEFT_MOUSE_KEY)) + { + bool onGUI = false; + for(size_t i = 0; i < instances_2D.size(); i++) + { + if(instances_2D.at(i)->className == "TextButton" || instances_2D.at(i)->className == "ImageButton") + { + BaseButtonInstance* button = (BaseButtonInstance*)instances_2D.at(i); + if(button->mouseInButton(ui->mouseXY().x, ui->mouseXY().y, app->renderDevice)) + { + onGUI = true; + break; + } + } + } + if(!onGUI) + { + selectedInstance = NULL; + } + } + if(ui->keyReleased(SDL_LEFT_MOUSE_KEY)) { From 9e61c9e4d296a3ba5029dfcba883a2e10b2f3892 Mon Sep 17 00:00:00 2001 From: andreja6 Date: Thu, 26 Apr 2018 13:36:57 -0700 Subject: [PATCH 05/49] Fixed bad operator --- main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.cpp b/main.cpp index b7471a5..52e23a5 100644 --- a/main.cpp +++ b/main.cpp @@ -278,7 +278,7 @@ void DeleteListener::onButton1MouseClick(BaseButtonInstance* button) Instance* deleting = instances.at(i); instances.erase(instances.begin() + i); delete deleting; - selectedInstance == NULL; + selectedInstance = NULL; } } From e777f3ccc46229e64c55625feb9a9157d8eca9e4 Mon Sep 17 00:00:00 2001 From: andreja6 Date: Thu, 26 Apr 2018 20:01:37 -0700 Subject: [PATCH 06/49] Added sound system Added delete sound --- AudioPlayer.cpp | 99 ++++++++++++++++++++++++++++++++++++ AudioPlayer.h | 10 ++++ G3DTest.vcproj | 8 +++ content/sounds/pageturn.wav | Bin 0 -> 25548 bytes main.cpp | 7 +++ 5 files changed, 124 insertions(+) create mode 100644 AudioPlayer.cpp create mode 100644 AudioPlayer.h create mode 100644 content/sounds/pageturn.wav diff --git a/AudioPlayer.cpp b/AudioPlayer.cpp new file mode 100644 index 0000000..47ac2d5 --- /dev/null +++ b/AudioPlayer.cpp @@ -0,0 +1,99 @@ +#include "AudioPlayer.h" +#include "SDL.h" +#include "SDL_audio.h" +#include +#include +#include +#define NUM_SOUNDS 2 +SDL_AudioSpec fmt; + +AudioPlayer::AudioPlayer(void) +{ + extern void mixaudio(void *unused, Uint8 *stream, int len); + fmt.freq = 22050; + fmt.format = AUDIO_S16; + fmt.channels = 2; + fmt.samples = 1024; /* A good value for games */ + fmt.callback = mixaudio; + fmt.userdata = NULL; + + /* Open the audio device and start playing sound! */ + if ( SDL_OpenAudio(&fmt, NULL) < 0 ) { + fprintf(stderr, "Unable to open audio: %s\n", SDL_GetError()); + exit(1); + } + SDL_PauseAudio(0); +} + +AudioPlayer::~AudioPlayer(void) +{ + SDL_CloseAudio(); +} + +struct sample { + Uint8 *data; + Uint32 dpos; + Uint32 dlen; +} sounds[NUM_SOUNDS]; + +void mixaudio(void *unused, Uint8 *stream, int len) +{ + int i; + Uint32 amount; + + for ( i=0; i (Uint32)len ) { + amount = len; + } + SDL_MixAudio(stream, &sounds[i].data[sounds[i].dpos], amount, SDL_MIX_MAXVOLUME); + sounds[i].dpos += amount; + } +} + +void AudioPlayer::PlaySound(std::string fileString) +{ + + char *file = new char[fileString.length() + 1]; + strcpy(file, fileString.c_str()); + + + int index; + SDL_AudioSpec wave; + Uint8 *data; + Uint32 dlen; + SDL_AudioCVT cvt; + + /* Look for an empty (or finished) sound slot */ + for ( index=0; index +#pragma once + +class AudioPlayer +{ +public: + AudioPlayer(void); + ~AudioPlayer(void); + void PlaySound(std::string); +}; diff --git a/G3DTest.vcproj b/G3DTest.vcproj index 79a70d6..3f6d76b 100644 --- a/G3DTest.vcproj +++ b/G3DTest.vcproj @@ -230,6 +230,10 @@ Name="Source Files" Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" > + + @@ -283,6 +287,10 @@ Name="Header Files" Filter="h;hpp;hxx;hm;inl" > + + diff --git a/content/sounds/pageturn.wav b/content/sounds/pageturn.wav new file mode 100644 index 0000000000000000000000000000000000000000..7070da531a528c072130e9697960915856bed7fd GIT binary patch literal 25548 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 Date: Thu, 26 Apr 2018 20:07:19 -0700 Subject: [PATCH 07/49] Added camera click --- content/sounds/SWITCH3.wav | Bin 0 -> 4628 bytes main.cpp | 5 +++++ 2 files changed, 5 insertions(+) create mode 100644 content/sounds/SWITCH3.wav diff --git a/content/sounds/SWITCH3.wav b/content/sounds/SWITCH3.wav new file mode 100644 index 0000000000000000000000000000000000000000..195138e013c413d77b7d683aa4f0160409eb29e3 GIT binary patch literal 4628 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 hfOF>AB_4!SFrJ{|86z;KTp` literal 0 HcmV?d00001 diff --git a/main.cpp b/main.cpp index 4e827cd..3893fcd 100644 --- a/main.cpp +++ b/main.cpp @@ -37,6 +37,7 @@ static G3D::RealTime messageTime = 0; static G3D::RealTime inputTime = 0; static int FPSVal[8] = {10, 20, 30, 60, 120, 240, INT_MAX,1}; static int index = 2; +static std::string cameraSound = ""; static float TIMERVAL = 60.0F; static int SCOREVAL = 0; static AudioPlayer soundSystem; @@ -250,6 +251,7 @@ public: void CameraButtonListener::onButton1MouseClick(BaseButtonInstance* button) { + soundSystem.PlaySound(cameraSound); CoordinateFrame frame = usableApp->debugCamera.getCoordinateFrame(); if(button->name == "CenterCam") centerCam = true; @@ -878,11 +880,13 @@ void Demo::onUserInput(UserInput* ui) { if(ui->keyPressed(SDL_MOUSE_WHEEL_UP_KEY)) { + soundSystem.PlaySound(cameraSound); CoordinateFrame frame = app->debugCamera.getCoordinateFrame(); cameraPos = cameraPos + frame.lookVector()*2; } if(ui->keyPressed(SDL_MOUSE_WHEEL_DOWN_KEY)) { + soundSystem.PlaySound(cameraSound); CoordinateFrame frame = app->debugCamera.getCoordinateFrame(); cameraPos = cameraPos - frame.lookVector()*2; } @@ -1371,6 +1375,7 @@ void App::main() { cursor = Texture::fromFile(GetFileInPath("/content/cursor2.png")); fntdominant = GFont::fromFile(GetFileInPath("/content/font/dominant.fnt")); fntlighttrek = GFont::fromFile(GetFileInPath("/content/font/lighttrek.fnt")); + cameraSound = GetFileInPath("/content/sounds/SWITCH3.wav"); sky = Sky::create(NULL, ExePath() + "/content/sky/"); cursorid = cursor->openGLID(); applet->run(); From 1ed434c858478058c65b1f6a8c041e292ca3a9a7 Mon Sep 17 00:00:00 2001 From: andreja6 Date: Thu, 26 Apr 2018 20:11:36 -0700 Subject: [PATCH 08/49] removed useless arial fonts --- AudioPlayer.cpp | 2 +- content/font/arial-small.fnt | Bin 6736 -> 0 bytes content/font/arial.fnt | Bin 15722 -> 0 bytes content/font/arialblack-small.fnt | Bin 5538 -> 0 bytes content/font/arialblack.fnt | Bin 12613 -> 0 bytes content/font/arialround.fnt | Bin 16421 -> 0 bytes content/font/ariaround-small.fnt | Bin 6967 -> 0 bytes 7 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 content/font/arial-small.fnt delete mode 100644 content/font/arial.fnt delete mode 100644 content/font/arialblack-small.fnt delete mode 100644 content/font/arialblack.fnt delete mode 100644 content/font/arialround.fnt delete mode 100644 content/font/ariaround-small.fnt diff --git a/AudioPlayer.cpp b/AudioPlayer.cpp index 47ac2d5..b111763 100644 --- a/AudioPlayer.cpp +++ b/AudioPlayer.cpp @@ -4,7 +4,7 @@ #include #include #include -#define NUM_SOUNDS 2 +#define NUM_SOUNDS 10 SDL_AudioSpec fmt; AudioPlayer::AudioPlayer(void) diff --git a/content/font/arial-small.fnt b/content/font/arial-small.fnt deleted file mode 100644 index cb57eb653fd4d218ef2a5eeac394183f22d48024..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6736 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 df3M>#J0Wi!#eIW>&jNmr1fO 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 SEONd3pR-{97*M5~kp2O#%6(G+ diff --git a/content/font/arialblack.fnt b/content/font/arialblack.fnt deleted file mode 100644 index cb2554fc121698139dec33b4fafced54f6cb9de6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12613 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 D7_30r diff --git a/content/font/arialround.fnt b/content/font/arialround.fnt deleted file mode 100644 index 3785fc053c05b1ae6ad8aa47c6b8e317d5664f5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16421 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

    I``kp`K#lH~0EYs}uor)5z+eh`jQ%91 z%Pq@K!riG)uRW|+h9y5zen@k})6yC`t>QULk{n>Xb#SxXF9ixC#5`3^Dgi`}1Ac>U zaAX~MpWAIbT%h)aj8z)Wuus2$ScFE6e>W6E?vZ z1?rJLAAM{aRRb*hmsVo*D*P`;DjPh^zMY3*PE>> zXAaEIh;5>?K7a&2D?>0Ndgn}3fh4T@4U}AL(=tQ+$jmQ+t4wCAq@<(v9nlJDAk$|eJOUQ947bvlGcl;sjt_-)ZfhzE4qz$s(<8fBWjJv;h#j! z)s2x3L7zwRztFR_AS-(J)Yb)|H3B-qQs? zNb;$&H@;I4nY4l4z-xqphObk<-MDs*U3&vaX#NXQLG6fgXfl;+g?a@ZeI+=fd(7yu zplrd#b%yN#r0F??{C)yaWBcr>_}|EiT&WGMQ}qX89G}Bby{Z@AJS9kUBb5cQ`)J>O lGw8a@n%|<71Y510plm7glDgPs!T$kXRAmNK_d>P6 diff --git a/content/font/ariaround-small.fnt b/content/font/ariaround-small.fnt deleted file mode 100644 index a33c123e988b779361f381994e2f18ac08acc68f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6967 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 Date: Thu, 26 Apr 2018 21:28:22 -0700 Subject: [PATCH 09/49] changed how bitrate is set --- AudioPlayer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AudioPlayer.cpp b/AudioPlayer.cpp index b111763..c7dc53f 100644 --- a/AudioPlayer.cpp +++ b/AudioPlayer.cpp @@ -79,7 +79,7 @@ void AudioPlayer::PlaySound(std::string fileString) return; } SDL_BuildAudioCVT(&cvt, wave.format, wave.channels, wave.freq, - AUDIO_S16, 2, 22050); + AUDIO_S16, 2, fmt.freq); cvt.buf = (Uint8*)malloc(dlen*cvt.len_mult); memcpy(cvt.buf, data, dlen); cvt.len = dlen; From 6d49e266dd43e0f5452327d91c68c9433a1754db Mon Sep 17 00:00:00 2001 From: andreja6 Date: Thu, 26 Apr 2018 21:41:07 -0700 Subject: [PATCH 10/49] Made AudioPlayer's play and init method static --- AudioPlayer.cpp | 19 ++++++++++++------- AudioPlayer.h | 3 ++- main.cpp | 11 +++++------ 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/AudioPlayer.cpp b/AudioPlayer.cpp index c7dc53f..6f4010d 100644 --- a/AudioPlayer.cpp +++ b/AudioPlayer.cpp @@ -5,9 +5,19 @@ #include #include #define NUM_SOUNDS 10 -SDL_AudioSpec fmt; +static SDL_AudioSpec fmt; AudioPlayer::AudioPlayer(void) +{ + +} + +AudioPlayer::~AudioPlayer(void) +{ + SDL_CloseAudio(); +} + +void AudioPlayer::init() { extern void mixaudio(void *unused, Uint8 *stream, int len); fmt.freq = 22050; @@ -25,12 +35,7 @@ AudioPlayer::AudioPlayer(void) SDL_PauseAudio(0); } -AudioPlayer::~AudioPlayer(void) -{ - SDL_CloseAudio(); -} - -struct sample { +static struct sample { Uint8 *data; Uint32 dpos; Uint32 dlen; diff --git a/AudioPlayer.h b/AudioPlayer.h index 2821ff4..772accc 100644 --- a/AudioPlayer.h +++ b/AudioPlayer.h @@ -6,5 +6,6 @@ class AudioPlayer public: AudioPlayer(void); ~AudioPlayer(void); - void PlaySound(std::string); + static void PlaySound(std::string); + static void init(); }; diff --git a/main.cpp b/main.cpp index 3893fcd..3f0270f 100644 --- a/main.cpp +++ b/main.cpp @@ -40,7 +40,6 @@ static int index = 2; static std::string cameraSound = ""; static float TIMERVAL = 60.0F; static int SCOREVAL = 0; -static AudioPlayer soundSystem; static G3D::TextureRef go = NULL; static G3D::TextureRef go_ovr = NULL; static G3D::TextureRef go_dn = NULL; @@ -251,7 +250,7 @@ public: void CameraButtonListener::onButton1MouseClick(BaseButtonInstance* button) { - soundSystem.PlaySound(cameraSound); + AudioPlayer::PlaySound(cameraSound); CoordinateFrame frame = usableApp->debugCamera.getCoordinateFrame(); if(button->name == "CenterCam") centerCam = true; @@ -285,7 +284,7 @@ void DeleteListener::onButton1MouseClick(BaseButtonInstance* button) instances.erase(instances.begin() + i); delete deleting; selectedInstance = NULL; - soundSystem.PlaySound(GetFileInPath("/content/sounds/pageturn.wav")); + AudioPlayer::PlaySound(GetFileInPath("/content/sounds/pageturn.wav")); } @@ -880,13 +879,13 @@ void Demo::onUserInput(UserInput* ui) { if(ui->keyPressed(SDL_MOUSE_WHEEL_UP_KEY)) { - soundSystem.PlaySound(cameraSound); + AudioPlayer::PlaySound(cameraSound); CoordinateFrame frame = app->debugCamera.getCoordinateFrame(); cameraPos = cameraPos + frame.lookVector()*2; } if(ui->keyPressed(SDL_MOUSE_WHEEL_DOWN_KEY)) { - soundSystem.PlaySound(cameraSound); + AudioPlayer::PlaySound(cameraSound); CoordinateFrame frame = app->debugCamera.getCoordinateFrame(); cameraPos = cameraPos - frame.lookVector()*2; } @@ -1469,7 +1468,7 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) int main(int argc, char** argv) { //_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); //_CrtSetBreakAlloc(1279); - + AudioPlayer::init(); GAppSettings settings; settings.window.resizable = true; //settings.window.fsaaSamples = 8; From e9c7607a4b9e31528efb384ab5fb7c03926f7f5e Mon Sep 17 00:00:00 2001 From: andreja6 Date: Fri, 27 Apr 2018 00:04:04 -0700 Subject: [PATCH 11/49] Added init check --- AudioPlayer.cpp | 85 +++++++++++++++++++++++++++---------------------- 1 file changed, 47 insertions(+), 38 deletions(-) diff --git a/AudioPlayer.cpp b/AudioPlayer.cpp index 6f4010d..bfbc2c1 100644 --- a/AudioPlayer.cpp +++ b/AudioPlayer.cpp @@ -6,6 +6,7 @@ #include #define NUM_SOUNDS 10 static SDL_AudioSpec fmt; +static bool initiated = false; AudioPlayer::AudioPlayer(void) { @@ -19,6 +20,7 @@ AudioPlayer::~AudioPlayer(void) void AudioPlayer::init() { + initiated = true; extern void mixaudio(void *unused, Uint8 *stream, int len); fmt.freq = 22050; fmt.format = AUDIO_S16; @@ -59,46 +61,53 @@ void mixaudio(void *unused, Uint8 *stream, int len) void AudioPlayer::PlaySound(std::string fileString) { - char *file = new char[fileString.length() + 1]; - strcpy(file, fileString.c_str()); - + if(initiated) + { + char *file = new char[fileString.length() + 1]; + strcpy(file, fileString.c_str()); + - int index; - SDL_AudioSpec wave; - Uint8 *data; - Uint32 dlen; - SDL_AudioCVT cvt; + int index; + SDL_AudioSpec wave; + Uint8 *data; + Uint32 dlen; + SDL_AudioCVT cvt; - /* Look for an empty (or finished) sound slot */ - for ( index=0; index Date: Fri, 27 Apr 2018 09:18:48 -0700 Subject: [PATCH 12/49] Added try/catch --- main.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/main.cpp b/main.cpp index 3f0270f..13cc659 100644 --- a/main.cpp +++ b/main.cpp @@ -1468,6 +1468,7 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) int main(int argc, char** argv) { //_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); //_CrtSetBreakAlloc(1279); + try{ AudioPlayer::init(); GAppSettings settings; settings.window.resizable = true; @@ -1560,5 +1561,10 @@ int main(int argc, char** argv) { //messageTime = G3D::System::time(); app.run(); + } + catch(std::exception) + { + OnError(-1); + } return 0; } From 4094631f306bec270584bac842fc056ade1d4274 Mon Sep 17 00:00:00 2001 From: andreja6 Date: Fri, 27 Apr 2018 12:19:49 -0700 Subject: [PATCH 13/49] Made most fake buttons actual buttons --- content/sounds/electronicpingshort.wav | Bin 0 -> 162264 bytes main.cpp | 67 +++++++++++++++++++++++-- 2 files changed, 64 insertions(+), 3 deletions(-) create mode 100644 content/sounds/electronicpingshort.wav diff --git a/content/sounds/electronicpingshort.wav b/content/sounds/electronicpingshort.wav new file mode 100644 index 0000000000000000000000000000000000000000..2ec39887f9b5d064526566562f083661eb87c9e5 GIT binary patch literal 162264 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%0AD;A_jKVI>PDK?)Spt?N!oMNoa(x9 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 DqH}It literal 0 HcmV?d00001 diff --git a/main.cpp b/main.cpp index 13cc659..8317a0c 100644 --- a/main.cpp +++ b/main.cpp @@ -38,6 +38,7 @@ static G3D::RealTime inputTime = 0; static int FPSVal[8] = {10, 20, 30, 60, 120, 240, INT_MAX,1}; static int index = 2; static std::string cameraSound = ""; +static std::string dingSound = ""; static float TIMERVAL = 60.0F; static int SCOREVAL = 0; static G3D::TextureRef go = NULL; @@ -264,6 +265,23 @@ void CameraButtonListener::onButton1MouseClick(BaseButtonInstance* button) tiltUp = true; } +class GUDButtonListener : public ButtonListener { +public: + void onButton1MouseClick(BaseButtonInstance*); +}; + +void GUDButtonListener::onButton1MouseClick(BaseButtonInstance* button) +{ + if(selectedInstance != NULL) + { + AudioPlayer::PlaySound(dingSound); + if(button->name == "Duplicate") + { + + } + } + +} class DeleteListener : public ButtonListener { public: @@ -449,6 +467,51 @@ void initGUI() button->fontLocationRelativeTo = Vector2(10, 0); button->setAllColorsSame(); + + + button = makeTextButton(); + button->boxBegin = Vector2(0,215); + button->boxEnd = Vector2(80,235); + button->textOutlineColor = Color4(0.5F,0.5F,0.5F,0.5F); + button->textColor = Color3::white(); + button->boxColor = Color4::clear(); + button->textSize = 12; + button->title = "Group"; + button->setAllColorsSame(); + button->font = fntlighttrek; + button->fontLocationRelativeTo = Vector2(10, 0); + button->parent = dataModel; + + + button = makeTextButton(); + button->boxBegin = Vector2(0,240); + button->boxEnd = Vector2(80,260); + button->textOutlineColor = Color4(0.5F,0.5F,0.5F,0.5F); + button->textColor = Color3::white(); + button->boxColor = Color4::clear(); + button->textSize = 12; + button->title = "UnGroup"; + button->setAllColorsSame(); + button->font = fntlighttrek; + button->fontLocationRelativeTo = Vector2(10, 0); + button->parent = dataModel; + + button = makeTextButton(); + button->boxBegin = Vector2(0,265); + button->boxEnd = Vector2(80,285); + button->textOutlineColor = Color4(0.5F,0.5F,0.5F,0.5F); + button->textColor = Color3::white(); + button->boxColor = Color4::clear(); + button->textSize = 12; + button->title = "Duplicate"; + button->setAllColorsSame(); + button->font = fntlighttrek; + button->fontLocationRelativeTo = Vector2(10, 0); + button->parent = dataModel; + button->name = "Duplicate"; + button->setButtonListener(new GUDButtonListener()); + + ImageButtonInstance* instance = makeImageButton(go, go_ovr, go_dn); instance->name = "go"; instance->size = Vector2(65,65); @@ -1307,9 +1370,6 @@ void Demo::onGraphics(RenderDevice* rd) { //Tools menu Draw::box(G3D::Box(Vector3(5, 185+offset,0),Vector3(75, 185+offset,0)),rd,Color4(0.6F,0.6F,0.6F,0.4F), Color4(0.6F,0.6F,0.6F,0.4F)); - fntlighttrek->draw2D(rd,"Group", Vector2(10,190+offset), 12, Color3::white(), Color4(0.5F,0.5F,0.5F,0.5F)); - fntlighttrek->draw2D(rd,"UnGroup", Vector2(10,215+offset), 12, Color3::white(), Color4(0.5F,0.5F,0.5F,0.5F)); - fntlighttrek->draw2D(rd,"Duplicate", Vector2(10,240+offset), 12, Color3::white(), Color4(0.5F,0.5F,0.5F,0.5F)); fntlighttrek->draw2D(rd,"MENU", Vector2(10,307+offset), 14, Color3::white(), Color4(0.5F,0.5F,0.5F,0.5F)); //G3D::GFont::draw2D("Debug Mode Enabled", Vector2(0,30), 20, Color3::white(), Color3::black()); //app->debugFont->draw2D("Dynamica 2004-2005 Simulation Client version " + VERSION + str, Vector2(0,0), 20, Color3::white(), Color3::black()); @@ -1375,6 +1435,7 @@ void App::main() { fntdominant = GFont::fromFile(GetFileInPath("/content/font/dominant.fnt")); fntlighttrek = GFont::fromFile(GetFileInPath("/content/font/lighttrek.fnt")); cameraSound = GetFileInPath("/content/sounds/SWITCH3.wav"); + dingSound = GetFileInPath("/content/sounds/electronicpingshort.wav"); sky = Sky::create(NULL, ExePath() + "/content/sky/"); cursorid = cursor->openGLID(); applet->run(); From 50f8c7ec1031e31719b92e776fbc1bef2869d469 Mon Sep 17 00:00:00 2001 From: DarkKnight64 Date: Fri, 27 Apr 2018 20:28:40 +0100 Subject: [PATCH 14/49] create README --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..91f0b11 --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +# G3D-Fun + +Despite its name, this is actually a recreation of ROBLOX as it was in 2005. Early development. Uses roughly time-accurate development tools. + +# COMPILE WITH + +Graphics3D 6.10 (Released July 21, 2006) +Visual Studio 2005 + From fcb1ad05fdce257b836d6e01cbc95d2795da7001 Mon Sep 17 00:00:00 2001 From: andreja6 Date: Fri, 27 Apr 2018 15:05:51 -0700 Subject: [PATCH 15/49] Changed how boxes are rendered PhysicalInstance now has a getBox() method that returns a Box the same way it would have been rendered, also added is a getCFrameRenderBased() which returns the CFrame that would have been used in the render pass --- PhysicalInstance.cpp | 11 +++++++++++ PhysicalInstance.h | 2 ++ main.cpp | 40 ++++------------------------------------ 3 files changed, 17 insertions(+), 36 deletions(-) diff --git a/PhysicalInstance.cpp b/PhysicalInstance.cpp index 247dc49..5c7632c 100644 --- a/PhysicalInstance.cpp +++ b/PhysicalInstance.cpp @@ -42,6 +42,17 @@ void PhysicalInstance::setCFrame(CoordinateFrame coordinateFrame) position = coordinateFrame.translation; } +CoordinateFrame PhysicalInstance::getCFrameRenderBased() +{ + return CoordinateFrame(getCFrame().rotation,Vector3(getCFrame().translation.x/2, getCFrame().translation.y/2, getCFrame().translation.z/2)); +} + +Box PhysicalInstance::getBox() +{ + Box box = Box(Vector3(0+size.x/4, 0+size.y/4, 0+size.z/4) ,Vector3(0-size.x/4,0-size.y/4,0-size.z/4)); + CoordinateFrame c = getCFrameRenderBased(); + return c.toWorldSpace(box); +} PhysicalInstance::~PhysicalInstance(void) { diff --git a/PhysicalInstance.h b/PhysicalInstance.h index 4dd9cfe..bc3f859 100644 --- a/PhysicalInstance.h +++ b/PhysicalInstance.h @@ -16,6 +16,8 @@ public: void setPosition(Vector3); CoordinateFrame getCFrame(); void setCFrame(CoordinateFrame); + Box getBox(); + CoordinateFrame getCFrameRenderBased(); private: Vector3 position; }; diff --git a/main.cpp b/main.cpp index 8317a0c..348ae81 100644 --- a/main.cpp +++ b/main.cpp @@ -1265,44 +1265,12 @@ void Demo::onGraphics(RenderDevice* rd) { if(instance->className == "Part" && instance->parent != NULL) { PhysicalInstance* part = (PhysicalInstance*)instance; - Vector3 size = part->size; - Vector3 pos = part->getCFrame().translation; - rd->setObjectToWorldMatrix(CoordinateFrame()); - Vector3 pos2 = Vector3((pos.x-size.x/2)/2,(pos.y-size.y/2)/2,(pos.z-size.z/2)/2); - Vector3 pos3 = Vector3((pos.x+size.x/2)/2,(pos.y+size.y/2)/2,(pos.z+size.z/2)/2); - Box box = Box(Vector3(0+size.x/4, 0+size.y/4, 0+size.z/4) ,Vector3(0-size.x/4,0-size.y/4,0-size.z/4)); - CoordinateFrame c = CoordinateFrame(part->getCFrame().rotation,Vector3(part->getCFrame().translation.x/2, part->getCFrame().translation.y/2, part->getCFrame().translation.z/2)); - //Box wsb = c.toWorldSpace(box); - //makeBeveledBox(c.toWorldSpace(box), app->renderDevice, part->color, part->getCFrame()); - //G3D::MeshBuilder builder = G3D::MeshBuilder(); - //for(int i = 0; i < 6; i++) - //{ - // Vector3 v1, v2, v3, v4; - // wsb.getFaceCorners(i, v1, v2, v3, v4); - // builder.addQuad(v1, v2, v3, v4); - //} - //std::string str; - //G3D::Array arrayInd; - //G3D::Array arrayVector; - //builder.commit(str, arrayInd, arrayVector); - - - //IFSModel::save(ExePath() + "/content/model.ifs", str, arrayInd, arrayVector, NULL); - //IFSModelRef model = IFSModel::create(ExePath() + "/content/model.ifs"); - //app->renderDevice->setLight(0, GLight::directional(lighting.lightDirection, lighting.lightColor)); - - //app->renderDevice->beginIndexedPrimitives(); - //{ - // app->renderDevice->setNormalArray(G3D::VAR(arrayVector, varStatic)); - //app->renderDevice->setVertexArray(G3D::VAR(arrayVector, varStatic)); - //app->renderDevice->sendIndices(RenderDevice::TRIANGLES, arrayInd); - //} - //app->renderDevice->endIndexedPrimitives(); - - Draw::box(c.toWorldSpace(box), app->renderDevice, part->color, Color4::clear()); + Draw::box(part->getBox(), app->renderDevice, part->color, Color4::clear()); if(selectedInstance == part) { - drawOutline(Vector3(0+size.x/4, 0+size.y/4, 0+size.z/4) ,Vector3(0-size.x/4,0-size.y/4,0-size.z/4), rd, lighting, Vector3(size.x/2, size.y/2, size.z/2), Vector3(pos.x/2, pos.y/2, pos.z/2), c); + Vector3 size = part->size; + Vector3 pos = part->getCFrame().translation; + drawOutline(Vector3(0+size.x/4, 0+size.y/4, 0+size.z/4) ,Vector3(0-size.x/4,0-size.y/4,0-size.z/4), rd, lighting, Vector3(size.x/2, size.y/2, size.z/2), Vector3(pos.x/2, pos.y/2, pos.z/2), part->getCFrameRenderBased()); } } From a99f58b62f3643cac2d599dbb8ffc8334cb9772a Mon Sep 17 00:00:00 2001 From: andreja6 Date: Fri, 27 Apr 2018 15:27:02 -0700 Subject: [PATCH 16/49] "Delete" key also deletes --- PhysicalInstance.cpp | 14 +++++++++++--- main.cpp | 33 ++++++++++++++++++++++----------- 2 files changed, 33 insertions(+), 14 deletions(-) diff --git a/PhysicalInstance.cpp b/PhysicalInstance.cpp index 5c7632c..96a8bd4 100644 --- a/PhysicalInstance.cpp +++ b/PhysicalInstance.cpp @@ -8,6 +8,8 @@ Vector3 velocity; Vector3 rotVelocity; CoordinateFrame cFrame; Color3 color; +bool changed = true; +Box itemBox = Box(); PhysicalInstance::PhysicalInstance(void) { @@ -31,6 +33,7 @@ void PhysicalInstance::setPosition(Vector3 pos) { position = pos; cFrame = CoordinateFrame(pos); + changed = true; } CoordinateFrame PhysicalInstance::getCFrame() { @@ -40,6 +43,7 @@ void PhysicalInstance::setCFrame(CoordinateFrame coordinateFrame) { cFrame = coordinateFrame; position = coordinateFrame.translation; + changed = true; } CoordinateFrame PhysicalInstance::getCFrameRenderBased() @@ -49,9 +53,13 @@ CoordinateFrame PhysicalInstance::getCFrameRenderBased() Box PhysicalInstance::getBox() { - Box box = Box(Vector3(0+size.x/4, 0+size.y/4, 0+size.z/4) ,Vector3(0-size.x/4,0-size.y/4,0-size.z/4)); - CoordinateFrame c = getCFrameRenderBased(); - return c.toWorldSpace(box); + if(changed) + { + Box box = Box(Vector3(0+size.x/4, 0+size.y/4, 0+size.z/4) ,Vector3(0-size.x/4,0-size.y/4,0-size.z/4)); + CoordinateFrame c = getCFrameRenderBased(); + itemBox = c.toWorldSpace(box); + } + return itemBox; } PhysicalInstance::~PhysicalInstance(void) diff --git a/main.cpp b/main.cpp index 348ae81..253b18f 100644 --- a/main.cpp +++ b/main.cpp @@ -283,15 +283,9 @@ void GUDButtonListener::onButton1MouseClick(BaseButtonInstance* button) } -class DeleteListener : public ButtonListener { -public: - void onButton1MouseClick(BaseButtonInstance*); -}; -void DeleteListener::onButton1MouseClick(BaseButtonInstance* button) +void deleteInstance() { - - if(selectedInstance != NULL) { for(size_t i = 0; i < instances.size(); i++) @@ -303,19 +297,31 @@ void DeleteListener::onButton1MouseClick(BaseButtonInstance* button) delete deleting; selectedInstance = NULL; AudioPlayer::PlaySound(GetFileInPath("/content/sounds/pageturn.wav")); - - } - } } } + +class DeleteListener : public ButtonListener { +public: + void onButton1MouseClick(BaseButtonInstance*); +}; + +void DeleteListener::onButton1MouseClick(BaseButtonInstance* button) +{ + deleteInstance(); +} + + + + class ModeSelectionListener : public ButtonListener { public: void onButton1MouseClick(BaseButtonInstance*); }; + void ModeSelectionListener::onButton1MouseClick(BaseButtonInstance* button) { CoordinateFrame frame = usableApp->debugCamera.getCoordinateFrame(); @@ -953,6 +959,11 @@ void Demo::onUserInput(UserInput* ui) { cameraPos = cameraPos - frame.lookVector()*2; } + if(ui->keyPressed(SDLK_DELETE)) + { + deleteInstance(); + } + if(ui->keyDown(SDLK_LCTRL)) { if(ui->keyPressed('d')) @@ -1207,7 +1218,6 @@ void makeBeveledBox(Box box, RenderDevice* rd, Color4 color, CoordinateFrame cFr void Demo::onGraphics(RenderDevice* rd) { - Vector2 mousepos = Vector2(0,0); G3D::uint8 num = 0; rd->window()->getRelativeMouseState(mousepos, num); @@ -1264,6 +1274,7 @@ void Demo::onGraphics(RenderDevice* rd) { Instance* instance = instances.at(i); if(instance->className == "Part" && instance->parent != NULL) { + PhysicalInstance* part = (PhysicalInstance*)instance; Draw::box(part->getBox(), app->renderDevice, part->color, Color4::clear()); if(selectedInstance == part) From 70d9aded4296a7db29185c0e4bb4b8bc2015ed89 Mon Sep 17 00:00:00 2001 From: andreja6 Date: Sat, 28 Apr 2018 19:57:51 -0700 Subject: [PATCH 17/49] Attempted pan left, what Camera makes no sence --- PhysicalInstance.cpp | 1 - content/sounds/electronicpingshort.wav | Bin 162264 -> 10317 bytes main.cpp | 57 ++++++++++++++++++++++--- 3 files changed, 51 insertions(+), 7 deletions(-) diff --git a/PhysicalInstance.cpp b/PhysicalInstance.cpp index 96a8bd4..faa740a 100644 --- a/PhysicalInstance.cpp +++ b/PhysicalInstance.cpp @@ -1,5 +1,4 @@ #include "PhysicalInstance.h" - bool canCollide = true; bool anchored = false; Vector3 size; diff --git a/content/sounds/electronicpingshort.wav b/content/sounds/electronicpingshort.wav index 2ec39887f9b5d064526566562f083661eb87c9e5..2f82ae26e5a2c9ad767e00680029e03a20f10666 100644 GIT binary patch literal 10317 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 literal 162264 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%0AD;A_jKVI>PDK?)Spt?N!oMNoa(x9 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 DqH}It diff --git a/main.cpp b/main.cpp index 253b18f..355717b 100644 --- a/main.cpp +++ b/main.cpp @@ -31,9 +31,11 @@ static std::vector instances_2D; static Instance* dataModel; GFontRef fntdominant = NULL; GFontRef fntlighttrek = NULL; +Ray testRay; static bool democ = true; static std::string message = ""; static G3D::RealTime messageTime = 0; +static std::string tempPath = ""; static G3D::RealTime inputTime = 0; static int FPSVal[8] = {10, 20, 30, 60, 120, 240, INT_MAX,1}; static int index = 2; @@ -745,6 +747,7 @@ void Demo::onInit() { test->color = Color3::gray(); test->size = Vector3(4,1,2); test->setPosition(Vector3(2,5,0)); + @@ -757,7 +760,7 @@ void Demo::onInit() { test = makePart(); test->parent = dataModel; test->color = Color3::gray(); - test->size = Vector3(4,1,2); + test->size = Vector3(-4,-1,-2); test->setPosition(Vector3(-2,7,0)); @@ -819,6 +822,11 @@ void Demo::onNetwork() { } +double getVectorDistance(Vector3 vector1, Vector3 vector2) +{ + 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); +} + void Demo::onSimulation(RealTime rdt, SimTime sdt, SimTime idt) { if(dataModel->name != title) { @@ -865,12 +873,32 @@ void Demo::onSimulation(RealTime rdt, SimTime sdt, SimTime idt) { panRight = false; CoordinateFrame frame = CoordinateFrame(app->debugCamera.getCoordinateFrame().rotation, app->debugCamera.getCoordinateFrame().translation); Vector3 camerapoint = frame.translation; - Vector3 angles; - float radian = 0; - frame.rotation.toAxisAngle(angles, radian); - message = Convert(angles.x) + ", " + Convert(angles.y) + ", " + Convert(angles.z) + ", " + Convert(radian); + Vector3 focalPoint = camerapoint + frame.lookVector() * 25; + float angle, x, z; + frame.rotation.toEulerAnglesXYZ(x, angle, z); + angle = toDegrees(angle); + angle = angle + 5; + if(camerapoint.z < focalPoint.z) + { + angle = angle + 5; + } + + + message = Convert(angle); messageTime = System::time(); + + float distc = getVectorDistance(Vector3(focalPoint.x, camerapoint.y, focalPoint.z), camerapoint); + + camerapoint = Vector3(sin(toRadians(angle))*distc,0,cos(toRadians(angle))*distc); + CoordinateFrame newFrame = CoordinateFrame(camerapoint); + newFrame.lookAt(focalPoint); + cameraPos = camerapoint; + app->debugController.setCoordinateFrame(newFrame); + + //float xang, yang, zang; + //app->debugCamera.getCoordinateFrame().rotation.toEulerAnglesXYZ(xang, yang, zang); + } if(tiltUp) { @@ -889,6 +917,7 @@ void Demo::onSimulation(RealTime rdt, SimTime sdt, SimTime idt) { cameraPos = camerapoint; app->debugController.setCoordinateFrame(newFrame); + } } @@ -910,6 +939,7 @@ double getOSVersion() { return ::atof(version.c_str()); } +//User Input void Demo::onUserInput(UserInput* ui) { if (ui->keyPressed(SDLK_ESCAPE)) { @@ -1034,6 +1064,7 @@ void Demo::onUserInput(UserInput* ui) { if(!onGUI) { selectedInstance = NULL; + testRay = app->debugCamera.worldRay(mousex, mousey, app->renderDevice->getViewport()); } } @@ -1218,6 +1249,13 @@ void makeBeveledBox(Box box, RenderDevice* rd, Color4 color, CoordinateFrame cFr void Demo::onGraphics(RenderDevice* rd) { + + float angle, x, z; + app->debugCamera.getCoordinateFrame().rotation.toEulerAnglesXYZ(x, angle, z); + message = Convert(toDegrees(angle)) + " X: " + Convert(app->debugCamera.getCoordinateFrame().translation.x) + " Z: " + Convert(app->debugCamera.getCoordinateFrame().translation.z); + messageTime = System::time(); + + CoordinateFrame frame = CoordinateFrame(app->debugCamera.getCoordinateFrame().rotation, app->debugCamera.getCoordinateFrame().translation); Vector2 mousepos = Vector2(0,0); G3D::uint8 num = 0; rd->window()->getRelativeMouseState(mousepos, num); @@ -1287,8 +1325,9 @@ void Demo::onGraphics(RenderDevice* rd) { } } - + Box box; + //Draw::ray(testRay, rd, Color3::orange(), 1); Vector3 gamepoint = Vector3(0, 5, 0); Vector3 camerapoint = rd->getCameraToWorldMatrix().translation; @@ -1509,11 +1548,17 @@ int main(int argc, char** argv) { //_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); //_CrtSetBreakAlloc(1279); try{ + tempPath = ((std::string)getenv("temp")) + "/Dynamica"; + CreateDirectory(tempPath.c_str(), NULL); + + message = tempPath; + messageTime = System::time(); AudioPlayer::init(); GAppSettings settings; settings.window.resizable = true; //settings.window.fsaaSamples = 8; settings.writeLicenseFile = false; + settings.logFilename = tempPath + "/g3dlog.txt"; settings.window.center = true; //Using the damned SDL window now G3D::SDLWindow* wnd = new SDLWindow(settings.window); From 9ba0db1ab9d2cb8099a3e58fb5a61c1a5dcc4878 Mon Sep 17 00:00:00 2001 From: andreja6 Date: Sat, 28 Apr 2018 20:09:51 -0700 Subject: [PATCH 18/49] semi-working pan right --- main.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/main.cpp b/main.cpp index 355717b..3609bd6 100644 --- a/main.cpp +++ b/main.cpp @@ -878,8 +878,13 @@ void Demo::onSimulation(RealTime rdt, SimTime sdt, SimTime idt) { float angle, x, z; frame.rotation.toEulerAnglesXYZ(x, angle, z); angle = toDegrees(angle); - angle = angle + 5; + if(camerapoint.z < focalPoint.z) + { + float angleadd = abs(angle - 90); + angle = angleadd + 5 + 90; + } + else { angle = angle + 5; } @@ -888,9 +893,9 @@ void Demo::onSimulation(RealTime rdt, SimTime sdt, SimTime idt) { message = Convert(angle); messageTime = System::time(); - float distc = getVectorDistance(Vector3(focalPoint.x, camerapoint.y, focalPoint.z), camerapoint); + float distc = abs(((float)(getVectorDistance(Vector3(focalPoint.x, camerapoint.y, focalPoint.z), camerapoint)))); - camerapoint = Vector3(sin(toRadians(angle))*distc,0,cos(toRadians(angle))*distc); + camerapoint = Vector3(sin(toRadians(angle))*distc,camerapoint.y,cos(toRadians(angle))*distc); CoordinateFrame newFrame = CoordinateFrame(camerapoint); newFrame.lookAt(focalPoint); cameraPos = camerapoint; From c3b9e1f6c8407777b41041adbf350868d8b7cc5c Mon Sep 17 00:00:00 2001 From: andreja6 Date: Sat, 28 Apr 2018 20:16:48 -0700 Subject: [PATCH 19/49] Removed unnecessary code --- main.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/main.cpp b/main.cpp index 3609bd6..8477f30 100644 --- a/main.cpp +++ b/main.cpp @@ -901,9 +901,6 @@ void Demo::onSimulation(RealTime rdt, SimTime sdt, SimTime idt) { cameraPos = camerapoint; app->debugController.setCoordinateFrame(newFrame); - //float xang, yang, zang; - //app->debugCamera.getCoordinateFrame().rotation.toEulerAnglesXYZ(xang, yang, zang); - } if(tiltUp) { From fb48c4d85daae887de4979ad0238ddc9503b11b6 Mon Sep 17 00:00:00 2001 From: andreja6 Date: Sat, 28 Apr 2018 23:22:54 -0700 Subject: [PATCH 20/49] Changed how camera pan works --- main.cpp | 54 +++++++++++++++++++++++++++++++++--------------------- 1 file changed, 33 insertions(+), 21 deletions(-) diff --git a/main.cpp b/main.cpp index 8477f30..98ffaed 100644 --- a/main.cpp +++ b/main.cpp @@ -871,31 +871,43 @@ void Demo::onSimulation(RealTime rdt, SimTime sdt, SimTime idt) { if(panRight) { panRight = false; - CoordinateFrame frame = CoordinateFrame(app->debugCamera.getCoordinateFrame().rotation, app->debugCamera.getCoordinateFrame().translation); + CoordinateFrame frame = app->debugCamera.getCoordinateFrame(); Vector3 camerapoint = frame.translation; Vector3 focalPoint = camerapoint + frame.lookVector() * 25; - float angle, x, z; - frame.rotation.toEulerAnglesXYZ(x, angle, z); - angle = toDegrees(angle); - - if(camerapoint.z < focalPoint.z) - { - float angleadd = abs(angle - 90); - angle = angleadd + 5 + 90; - } - else - { - angle = angle + 5; - } - - message = Convert(angle); + float distb = getVectorDistance(Vector3(focalPoint.x, camerapoint.y, focalPoint.z), Vector3(camerapoint.x, camerapoint.y, focalPoint.z)); + float distc = abs(((float)getVectorDistance(Vector3(focalPoint.x, camerapoint.y, focalPoint.z), camerapoint))); + + + + float angle = toRadians(90); + + + //message = Convert(angle); + messageTime = System::time(); + //frame.rotation.toEulerAnglesXYZ(x, angle, z); + //angle = toDegrees(angle); + +// if(camerapoint.z < focalPoint.z) +// { +// float angleadd = abs(angle - 90); +// angle = angleadd + 5 + 90; +// } +// else +// { +// angle = angle + 5; +// } + + messageTime = System::time(); - float distc = abs(((float)(getVectorDistance(Vector3(focalPoint.x, camerapoint.y, focalPoint.z), camerapoint)))); - - camerapoint = Vector3(sin(toRadians(angle))*distc,camerapoint.y,cos(toRadians(angle))*distc); + //abs(((float)(getVectorDistance(Vector3(focalPoint.x, camerapoint.y, focalPoint.z), camerapoint)))); + float x = distc * cos(angle-toRadians(2)) + focalPoint.x; + float z = distc * sin(angle-toRadians(2)) + focalPoint.z; + message = "NOT 0, " + Convert(x) + ", " + Convert(z); + //camerapoint = Vector3(sin(angle)*distc,camerapoint.y,cos(angle)*distc); + camerapoint = Vector3(x,camerapoint.y,z); CoordinateFrame newFrame = CoordinateFrame(camerapoint); newFrame.lookAt(focalPoint); cameraPos = camerapoint; @@ -1254,8 +1266,8 @@ void Demo::onGraphics(RenderDevice* rd) { float angle, x, z; app->debugCamera.getCoordinateFrame().rotation.toEulerAnglesXYZ(x, angle, z); - message = Convert(toDegrees(angle)) + " X: " + Convert(app->debugCamera.getCoordinateFrame().translation.x) + " Z: " + Convert(app->debugCamera.getCoordinateFrame().translation.z); - messageTime = System::time(); + //message = Convert(toDegrees(angle)) + " X: " + Convert(app->debugCamera.getCoordinateFrame().translation.x) + " Z: " + Convert(app->debugCamera.getCoordinateFrame().translation.z); + //messageTime = System::time(); CoordinateFrame frame = CoordinateFrame(app->debugCamera.getCoordinateFrame().rotation, app->debugCamera.getCoordinateFrame().translation); Vector2 mousepos = Vector2(0,0); From 5659a1e13cba9aa72a6fd63193cef445e3f2217c Mon Sep 17 00:00:00 2001 From: andreja6 Date: Sat, 28 Apr 2018 23:26:17 -0700 Subject: [PATCH 21/49] Changed README.md --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 91f0b11..a8fe0e9 100644 --- a/README.md +++ b/README.md @@ -5,5 +5,10 @@ Despite its name, this is actually a recreation of ROBLOX as it was in 2005. Ear # COMPILE WITH Graphics3D 6.10 (Released July 21, 2006) -Visual Studio 2005 +SDL 1.2.7 (1.2.9 could work as well) +Visual Studio 2005 Professional or Visual Studio 2005 Express with Platform SDK +# NOTE + +Please know that there currently is no documentation and minimal commenting. As such, it may be confusing to follow the code. +Code for this project is written quickly at random intervals, where each individual thinks of a solution to a problem and adds it. \ No newline at end of file From b7d14dcf2ad232b165e62aca6e2c93cb69d65d9e Mon Sep 17 00:00:00 2001 From: andreja6 Date: Sun, 29 Apr 2018 01:54:02 -0700 Subject: [PATCH 22/49] Added part selection --- main.cpp | 61 ++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 39 insertions(+), 22 deletions(-) diff --git a/main.cpp b/main.cpp index 98ffaed..9ce564e 100644 --- a/main.cpp +++ b/main.cpp @@ -690,27 +690,22 @@ void Demo::onInit() { test->parent = dataModel; test->color = Color3(0.2F,0.3F,1); test->size = Vector3(24,1,24); - test->setCFrame(CoordinateFrame(Matrix3::fromEulerAnglesXYZ(toRadians(90),toRadians(45),toRadians(45)), Vector3(0,0,0))); - selectedInstance = test; + test->setPosition(Vector3(0,0,0)); + test->setCFrame(test->getCFrame() * Matrix3::fromEulerAnglesXYZ(0,toRadians(90),0)); + //selectedInstance = test; - test = makePart(); - test->parent = dataModel; - test->color = Color3(.5F,1,.5F); - test->size = Vector3(4,1,2); - test->setPosition(Vector3(10,1,0)); test = makePart(); test->parent = dataModel; test->color = Color3(.5F,1,.5F); test->size = Vector3(4,1,2); test->setPosition(Vector3(-10,1,0)); - test = makePart(); test->parent = dataModel; - test->color = Color3::gray(); + test->color = Color3(.5F,1,.5F); test->size = Vector3(4,1,2); - test->setPosition(Vector3(-7,2,0)); + test->setPosition(Vector3(10,1,0)); test = makePart(); test->parent = dataModel; @@ -722,31 +717,37 @@ void Demo::onInit() { test->parent = dataModel; test->color = Color3::gray(); test->size = Vector3(4,1,2); - test->setPosition(Vector3(-4,3,0)); + test->setPosition(Vector3(-7,2,0)); test = makePart(); test->parent = dataModel; test->color = Color3::gray(); test->size = Vector3(4,1,2); - test->setPosition(Vector3(5,3,0)); + test->setPosition(Vector3(4,3,0)); test = makePart(); test->parent = dataModel; test->color = Color3::gray(); test->size = Vector3(4,1,2); - test->setPosition(Vector3(-1,4,0)); + test->setPosition(Vector3(-5,3,0)); test = makePart(); test->parent = dataModel; test->color = Color3::gray(); test->size = Vector3(4,1,2); - test->setPosition(Vector3(3,4,0)); + test->setPosition(Vector3(1,4,0)); test = makePart(); test->parent = dataModel; test->color = Color3::gray(); test->size = Vector3(4,1,2); - test->setPosition(Vector3(2,5,0)); + test->setPosition(Vector3(-3,4,0)); + + test = makePart(); + test->parent = dataModel; + test->color = Color3::gray(); + test->size = Vector3(4,1,2); + test->setPosition(Vector3(-2,5,0)); @@ -761,7 +762,7 @@ void Demo::onInit() { test->parent = dataModel; test->color = Color3::gray(); test->size = Vector3(-4,-1,-2); - test->setPosition(Vector3(-2,7,0)); + test->setPosition(Vector3(2,7,0)); @@ -1079,6 +1080,23 @@ void Demo::onUserInput(UserInput* ui) { { selectedInstance = NULL; testRay = app->debugCamera.worldRay(mousex, mousey, app->renderDevice->getViewport()); + for(size_t i = 0; i < instances.size(); i++) + { + if(instances.at(i)->className == "Part" && instances.at(i)->parent == dataModel) + { + PhysicalInstance* test = (PhysicalInstance*)instances.at(i); + + if (testRay.intersectionTime(test->getBox()) != inf()) + { + selectedInstance = test; + } + } + } + + + + //message = Convert(closest); + } } @@ -1308,12 +1326,10 @@ void Demo::onGraphics(RenderDevice* rd) { app->renderDevice->setShadeMode(RenderDevice::SHADE_SMOOTH); app->renderDevice->setAmbientLightColor(Color3(1,1,1)); - Draw::axes(CoordinateFrame(Vector3(0, 0, 0)), app->renderDevice); - - makeFlag(Vector3(-1, 3.5, 0), rd); + //Draw::axes(CoordinateFrame(Vector3(0, 0, 0)), app->renderDevice); + //makeFlag(Vector3(-1, 3.5, 0), rd); //Vector3 vector = app->debugCamera.getCoordinateFrame().translation + app->debugCamera.getCoordinateFrame().lookVector()*20; - Draw::axes(CoordinateFrame(focalPointT) , rd); app->renderDevice->setLight(0, GLight::directional(lighting.lightDirection, lighting.lightColor)); app->renderDevice->setAmbientLightColor(lighting.ambient); @@ -1343,7 +1359,7 @@ void Demo::onGraphics(RenderDevice* rd) { //Draw::ray(testRay, rd, Color3::orange(), 1); - Vector3 gamepoint = Vector3(0, 5, 0); + /*Vector3 gamepoint = Vector3(0, 5, 0); Vector3 camerapoint = rd->getCameraToWorldMatrix().translation; float distance = pow(pow((double)gamepoint.x - (double)camerapoint.x, 2) + pow((double)gamepoint.y - (double)camerapoint.y, 2) + pow((double)gamepoint.z - (double)camerapoint.z, 2), 0.5); if(distance < 50 && distance > -50) @@ -1352,7 +1368,8 @@ void Demo::onGraphics(RenderDevice* rd) { if(distance < 0) distance = distance*-1; fntdominant->draw3D(rd, "Testing", CoordinateFrame(rd->getCameraToWorldMatrix().rotation, gamepoint), 0.04*distance, Color3::yellow(), Color3::black(), G3D::GFont::XALIGN_CENTER, G3D::GFont::YALIGN_CENTER); - } + }*/ + app->renderDevice->disableLighting(); if (app->sky.notNull()) { From f281103ca1b0a9c0f7c7c24b7a1f94c8b22bb666 Mon Sep 17 00:00:00 2001 From: andreja6 Date: Sun, 29 Apr 2018 11:40:35 -0700 Subject: [PATCH 23/49] Rotation and Selection --- main.cpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/main.cpp b/main.cpp index 9ce564e..c9fa0d1 100644 --- a/main.cpp +++ b/main.cpp @@ -285,6 +285,27 @@ void GUDButtonListener::onButton1MouseClick(BaseButtonInstance* button) } +class RotateButtonListener : public ButtonListener { +public: + void onButton1MouseClick(BaseButtonInstance*); +}; + +void RotateButtonListener::onButton1MouseClick(BaseButtonInstance* button) +{ + if(selectedInstance != NULL) + { + if(selectedInstance->className == "Part") + { + PhysicalInstance* part = (PhysicalInstance*) selectedInstance; + if(button->name == "Tilt") + part->setCFrame(part->getCFrame()*Matrix3::fromEulerAnglesXYZ(toRadians(90),0,0)); + else if(button->name == "Rotate") + part->setCFrame(part->getCFrame()*Matrix3::fromEulerAnglesXYZ(0,toRadians(90),0)); + } + } + +} + void deleteInstance() { @@ -566,6 +587,8 @@ void initGUI() instance->size = Vector2(30,30); instance->position = Vector2(10, 175); instance->parent = dataModel; + instance->name = "Rotate"; + instance->setButtonListener(new RotateButtonListener()); instance = makeImageButton( Texture::fromFile(GetFileInPath("/content/images/SelectionTilt.png")), @@ -575,6 +598,8 @@ void initGUI() instance->size = Vector2(30,30); instance->position = Vector2(40, 175); instance->parent = dataModel; + instance->name = "Tilt"; + instance->setButtonListener(new RotateButtonListener()); instance = makeImageButton( From 739f1168954e496862c6023aaca915dcf87d38e9 Mon Sep 17 00:00:00 2001 From: andreja6 Date: Sun, 29 Apr 2018 12:00:30 -0700 Subject: [PATCH 24/49] Added rotate sound Next required thing: Collision check --- content/sounds/switch.wav | Bin 0 -> 13498 bytes main.cpp | 3 +++ 2 files changed, 3 insertions(+) create mode 100644 content/sounds/switch.wav diff --git a/content/sounds/switch.wav b/content/sounds/switch.wav new file mode 100644 index 0000000000000000000000000000000000000000..4268c8157483fe56d306eb66fb743e17b44e69b2 GIT binary patch literal 13498 zcmeH`yKYob3`HFXFY#0)Xg~)@5$|mp+ZGYqys--iZ5Ex|_6%{>A~N0B<}2Rvq<#4vaWaShsB@n~lPgi2 zvT0njh_@CI+nn7!saF>9)FLih#5J1+?^T|jUm~8{G(K9yC5zCGo^{`^Eh4^>Z}tMA zIo8E_=GXASrg79FK3jyo2hVH2boU+n ze?brRaGv|}F61r!y_voI4)k9nM-O_-gPFRV6XrQ^PP&}uy=X6<3G2kv(D|`W%yZFh z+Ql>LdI!&X_zvPc(?j1G=PO^S(VtP<7!|cu8lQZ;CZ8Xs&8-R zT;@$**2PmVtE*74~%*0byoM-aVV_lqQ@|+XaJ9y3>)+?+z*6FLdXZC0ZX7=(-#B*MpXKKj1s*}$! zwOA+L!kS~BxFNZk6Hg6sRc7xHtn*{8<}%N!S3GCLRk>#eYS4q<40&PB5vyM1p5APS zjB~Gw*Br%orNO$mA-S3(-@@`?pSXE) zrbn)Y=kfm6Y|Gc{ny-3Q_pFE9tXNu}rIB&;Wv^y>^AHdAWSE|+XPno_3u|U?J>xUZ zb$TB8a*kXJ_jvX6wtTrSbvZ|VRxCZvi>oqw7lkYDj30A{OrIRR$j^#1y^Nbx|6p!0 zC%`+(@M2tRRqjxC^;f7X+@qqIv2)K3-aF>g>%Hv#+1YSs)-#^mtT^)^x8IoWvESYY zev3PSWxH4I)56uMXs)U+ikGkFd7njTQMU)r`##lt&kjAk^wS)4T%W!M{p#FcIK=uugTh!ZD9^{3&gE-I2@Nl0VJm&879aFbQtF;5` cJ(xT6%&}J*(^b literal 0 HcmV?d00001 diff --git a/main.cpp b/main.cpp index c9fa0d1..4a94c71 100644 --- a/main.cpp +++ b/main.cpp @@ -40,6 +40,7 @@ static G3D::RealTime inputTime = 0; static int FPSVal[8] = {10, 20, 30, 60, 120, 240, INT_MAX,1}; static int index = 2; static std::string cameraSound = ""; +static std::string clickSound = ""; static std::string dingSound = ""; static float TIMERVAL = 60.0F; static int SCOREVAL = 0; @@ -294,6 +295,7 @@ void RotateButtonListener::onButton1MouseClick(BaseButtonInstance* button) { if(selectedInstance != NULL) { + AudioPlayer::PlaySound(clickSound); if(selectedInstance->className == "Part") { PhysicalInstance* part = (PhysicalInstance*) selectedInstance; @@ -1509,6 +1511,7 @@ void App::main() { fntdominant = GFont::fromFile(GetFileInPath("/content/font/dominant.fnt")); fntlighttrek = GFont::fromFile(GetFileInPath("/content/font/lighttrek.fnt")); cameraSound = GetFileInPath("/content/sounds/SWITCH3.wav"); + clickSound = GetFileInPath("/content/sounds/switch.wav"); dingSound = GetFileInPath("/content/sounds/electronicpingshort.wav"); sky = Sky::create(NULL, ExePath() + "/content/sky/"); cursorid = cursor->openGLID(); From f45e8afb3765abf7ee69a4e211db0792200bb7be Mon Sep 17 00:00:00 2001 From: MusicalProgrammer <38636805+MusicalProgrammer@users.noreply.github.com> Date: Sun, 29 Apr 2018 18:49:57 -0400 Subject: [PATCH 25/49] Quick part selection fix A Part in front of the camera can now be selected if other parts are behind it. --- main.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/main.cpp b/main.cpp index c9fa0d1..39b806b 100644 --- a/main.cpp +++ b/main.cpp @@ -17,7 +17,7 @@ #include "TextButtonInstance.h" #include "ImageButtonInstance.h" #include "AudioPlayer.h" - +#include #if G3D_VER < 61000 #error Requires G3D 6.10 @@ -1105,15 +1105,21 @@ void Demo::onUserInput(UserInput* ui) { { selectedInstance = NULL; testRay = app->debugCamera.worldRay(mousex, mousey, app->renderDevice->getViewport()); + float nearest=std::numeric_limits::infinity(); + Vector3 camPos = app->debugCamera.getCoordinateFrame().translation; for(size_t i = 0; i < instances.size(); i++) { if(instances.at(i)->className == "Part" && instances.at(i)->parent == dataModel) { PhysicalInstance* test = (PhysicalInstance*)instances.at(i); - if (testRay.intersectionTime(test->getBox()) != inf()) { - selectedInstance = test; + float distanceFromPart = (camPos-test->getPosition()).magnitude(); + if (nearest>distanceFromPart) + { + nearest=distanceFromPart; + selectedInstance = test; + } } } } From 3108021007a806ddbeafa0a87035012a63774023 Mon Sep 17 00:00:00 2001 From: andreja6 Date: Sun, 29 Apr 2018 18:33:13 -0700 Subject: [PATCH 26/49] Made part selection better --- main.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/main.cpp b/main.cpp index 2b7be88..fb1f1a2 100644 --- a/main.cpp +++ b/main.cpp @@ -1114,12 +1114,12 @@ void Demo::onUserInput(UserInput* ui) { if(instances.at(i)->className == "Part" && instances.at(i)->parent == dataModel) { PhysicalInstance* test = (PhysicalInstance*)instances.at(i); - if (testRay.intersectionTime(test->getBox()) != inf()) + float time = testRay.intersectionTime(test->getBox()); + if (time != inf()) { - float distanceFromPart = (camPos-test->getPosition()).magnitude(); - if (nearest>distanceFromPart) + if (nearest>time) { - nearest=distanceFromPart; + nearest=time; selectedInstance = test; } } From 09c6a73e80152d3567a5ff4bc57fdcf51aebf0d4 Mon Sep 17 00:00:00 2001 From: andreja6 Date: Sun, 29 Apr 2018 18:58:22 -0700 Subject: [PATCH 27/49] Made rotation closer to real --- main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.cpp b/main.cpp index fb1f1a2..2259083 100644 --- a/main.cpp +++ b/main.cpp @@ -300,7 +300,7 @@ void RotateButtonListener::onButton1MouseClick(BaseButtonInstance* button) { PhysicalInstance* part = (PhysicalInstance*) selectedInstance; if(button->name == "Tilt") - part->setCFrame(part->getCFrame()*Matrix3::fromEulerAnglesXYZ(toRadians(90),0,0)); + part->setCFrame(part->getCFrame()*Matrix3::fromEulerAnglesXYZ(0,0,toRadians(90))); else if(button->name == "Rotate") part->setCFrame(part->getCFrame()*Matrix3::fromEulerAnglesXYZ(0,toRadians(90),0)); } From f0f16a3a691f609608d26624eaa0addf55b78c8a Mon Sep 17 00:00:00 2001 From: andreja6 Date: Sun, 29 Apr 2018 20:00:00 -0700 Subject: [PATCH 28/49] Tried changing how window starts --- main.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/main.cpp b/main.cpp index 2259083..0bd2be5 100644 --- a/main.cpp +++ b/main.cpp @@ -1700,12 +1700,14 @@ int main(int argc, char** argv) { SetWindowPos(hwndMain, NULL, 0, 0, 800, 600, NULL); - HMONITOR monitor = MonitorFromWindow(hwndMain, MONITOR_DEFAULTTONEAREST); - MONITORINFO lpmi; - GetMonitorInfo( monitor, &lpmi); - int widthMON = lpmi.rcMonitor.bottom; - int heightMON = lpmi.rcMonitor.right; + + if(GetClientRect(hwndMain, &rect)) + { + width = rect.right - rect.left; + height = rect.bottom - rect.top; + } + SetWindowPos(hwnd, NULL, 0, 0, width, height, NULL); //message = Convert(widthMON) + ", " + Convert(heightMON); //messageTime = G3D::System::time(); From 4bdb1d69394ad4cb480076735009490be18a83c7 Mon Sep 17 00:00:00 2001 From: andreja6 Date: Sun, 29 Apr 2018 23:55:53 -0700 Subject: [PATCH 29/49] Changed how panning works --- main.cpp | 41 +++++++++++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/main.cpp b/main.cpp index 0bd2be5..3496796 100644 --- a/main.cpp +++ b/main.cpp @@ -63,6 +63,7 @@ static bool left = false; static bool right = false; static bool centerCam = false; static bool panRight = false; +static bool panLeft = false; static bool tiltUp = false; static const int CURSOR = 0; static const int ARROWS = 1; @@ -264,6 +265,8 @@ void CameraButtonListener::onButton1MouseClick(BaseButtonInstance* button) cameraPos = Vector3(cameraPos.x, cameraPos.y, cameraPos.z) - frame.lookVector()*2; else if(button->name == "PanRight") panRight = true; + else if(button->name == "PanLeft") + panLeft = true; else if(button->name == "TiltUp") tiltUp = true; } @@ -900,7 +903,17 @@ void Demo::onSimulation(RealTime rdt, SimTime sdt, SimTime idt) { { panRight = false; CoordinateFrame frame = app->debugCamera.getCoordinateFrame(); - Vector3 camerapoint = frame.translation; + float y = frame.translation.y; + CoordinateFrame frame2 = CoordinateFrame(frame.rotation, frame.translation + frame.lookVector()*25); + Vector3 focus = frame.translation+frame.lookVector()*25; + frame2 = frame2 * Matrix3::fromEulerAnglesXYZ(0,toRadians(45),0); + frame2 = frame2 - frame2.lookVector()*25; + cameraPos = Vector3(frame2.translation.x, y, frame2.translation.z); + CoordinateFrame newFrame = CoordinateFrame(frame2.rotation, Vector3(frame2.translation.x, y, frame2.translation.z)); + newFrame.lookAt(focus); + app->debugController.setCoordinateFrame(newFrame); + + /*Vector3 camerapoint = frame.translation; Vector3 focalPoint = camerapoint + frame.lookVector() * 25; @@ -909,7 +922,8 @@ void Demo::onSimulation(RealTime rdt, SimTime sdt, SimTime idt) { - float angle = toRadians(90); + + float angle = atan2(camerapoint.z - focalPoint.z, focalPoint.x - camerapoint.x); //message = Convert(angle); @@ -927,21 +941,36 @@ void Demo::onSimulation(RealTime rdt, SimTime sdt, SimTime idt) { // angle = angle + 5; // } + messageTime = System::time(); //abs(((float)(getVectorDistance(Vector3(focalPoint.x, camerapoint.y, focalPoint.z), camerapoint)))); - float x = distc * cos(angle-toRadians(2)) + focalPoint.x; - float z = distc * sin(angle-toRadians(2)) + focalPoint.z; - message = "NOT 0, " + Convert(x) + ", " + Convert(z); + float x = distc * cos(angle + toRadians(2)) + focalPoint.x; + float z = distc * sin(angle + toRadians(2)) + focalPoint.z; + message = "NOT 0, " + Convert(toDegrees(angle)) + ", " + Convert(toDegrees(angle + toRadians(2))); //camerapoint = Vector3(sin(angle)*distc,camerapoint.y,cos(angle)*distc); camerapoint = Vector3(x,camerapoint.y,z); CoordinateFrame newFrame = CoordinateFrame(camerapoint); newFrame.lookAt(focalPoint); cameraPos = camerapoint; - app->debugController.setCoordinateFrame(newFrame); + app->debugController.setCoordinateFrame(newFrame);*/ } + if(panLeft) + { + panLeft = false; + CoordinateFrame frame = app->debugCamera.getCoordinateFrame(); + float y = frame.translation.y; + CoordinateFrame frame2 = CoordinateFrame(frame.rotation, frame.translation + frame.lookVector()*25); + Vector3 focus = frame.translation+frame.lookVector()*25; + frame2 = frame2 * Matrix3::fromEulerAnglesXYZ(0,toRadians(-45),0); + frame2 = frame2 - frame2.lookVector()*25; + cameraPos = Vector3(frame2.translation.x, y, frame2.translation.z); + CoordinateFrame newFrame = CoordinateFrame(frame2.rotation, Vector3(frame2.translation.x, y, frame2.translation.z)); + newFrame.lookAt(focus); + app->debugController.setCoordinateFrame(newFrame); + } if(tiltUp) { tiltUp = false; From 8dff73d5f5e1d4eaf19f645113a46febacdfa339 Mon Sep 17 00:00:00 2001 From: andreja6 Date: Mon, 30 Apr 2018 01:07:23 -0700 Subject: [PATCH 30/49] added test squares to resize and arrows --- main.cpp | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 54 insertions(+), 5 deletions(-) diff --git a/main.cpp b/main.cpp index 3496796..ba06964 100644 --- a/main.cpp +++ b/main.cpp @@ -1284,12 +1284,38 @@ void drawOutline(Vector3 from, Vector3 to, RenderDevice* rd, LightingParameters Draw::arrow(pos, Vector3(0, (-1)-max, 0), rd); Draw::arrow(pos, Vector3((-1)-max, 0, 0), rd); Draw::arrow(pos, Vector3(0, 0, (-1)-max), rd); + + + Vector3 gamepoint = pos; + Vector3 camerapoint = rd->getCameraToWorldMatrix().translation; + float distance = pow(pow((double)gamepoint.x - (double)camerapoint.x, 2) + pow((double)gamepoint.y - (double)camerapoint.y, 2) + pow((double)gamepoint.z - (double)camerapoint.z, 2), 0.5); + if(distance < 0) + distance = distance*-1; + CoordinateFrame frame = CoordinateFrame(rd->getCameraToWorldMatrix().rotation, Vector3(pos.x, pos.y+max+0.8, pos.z)); + Box icon = Box(Vector3(0-distance/128, 0-distance/128, 0-distance/128), Vector3(distance/128, distance/128, distance/128)); + Draw::box(frame.toWorldSpace(icon), rd, Color3::orange(), Color4::clear()); + frame = CoordinateFrame(rd->getCameraToWorldMatrix().rotation, Vector3(pos.x+max+0.8, pos.y, pos.z)); + icon = Box(Vector3(0-distance/128, 0-distance/128, 0-distance/128), Vector3(distance/128, distance/128, distance/128)); + Draw::box(frame.toWorldSpace(icon), rd, Color3::orange(), Color4::clear()); + frame = CoordinateFrame(rd->getCameraToWorldMatrix().rotation, Vector3(pos.x, pos.y, pos.z+(max+0.8))); + icon = Box(Vector3(0-distance/128, 0-distance/128, 0-distance/128), Vector3(distance/128, distance/128, distance/128)); + Draw::box(frame.toWorldSpace(icon), rd, Color3::orange(), Color4::clear()); + frame = CoordinateFrame(rd->getCameraToWorldMatrix().rotation, Vector3(pos.x, pos.y-(max+0.8), pos.z)); + icon = Box(Vector3(0-distance/128, 0-distance/128, 0-distance/128), Vector3(distance/128, distance/128, distance/128)); + Draw::box(frame.toWorldSpace(icon), rd, Color3::orange(), Color4::clear()); + frame = CoordinateFrame(rd->getCameraToWorldMatrix().rotation, Vector3(pos.x-(max+0.8), pos.y, pos.z)); + icon = Box(Vector3(0-distance/128, 0-distance/128, 0-distance/128), Vector3(distance/128, distance/128, distance/128)); + Draw::box(frame.toWorldSpace(icon), rd, Color3::orange(), Color4::clear()); + frame = CoordinateFrame(rd->getCameraToWorldMatrix().rotation, Vector3(pos.x, pos.y, pos.z-(max+0.8))); + icon = Box(Vector3(0-distance/128, 0-distance/128, 0-distance/128), Vector3(distance/128, distance/128, distance/128)); + Draw::box(frame.toWorldSpace(icon), rd, Color3::orange(), Color4::clear()); + rd->setAmbientLightColor(lighting.ambient); rd->setLight(0, GLight::directional(lighting.lightDirection, lighting.lightColor)); } else if(mode == RESIZE) { - + Color3 sphereColor = outline; rd->setLight(0, NULL); rd->setAmbientLightColor(Color3(1,1,1)); Vector3 gamepoint = pos; @@ -1297,7 +1323,7 @@ void drawOutline(Vector3 from, Vector3 to, RenderDevice* rd, LightingParameters float distance = pow(pow((double)gamepoint.x - (double)camerapoint.x, 2) + pow((double)gamepoint.y - (double)camerapoint.y, 2) + pow((double)gamepoint.z - (double)camerapoint.z, 2), 0.5); if(distance < 200) { - Color3 sphereColor = outline; + float multiplier = distance * 0.025F/2; if(multiplier < 0.25F) multiplier = 0.25F; @@ -1307,8 +1333,31 @@ void drawOutline(Vector3 from, Vector3 to, RenderDevice* rd, LightingParameters Draw::sphere(Sphere(Vector3(pos.x + (size.x/2 + 1), pos.y, pos.z), multiplier), rd, sphereColor, Color4::clear()); Draw::sphere(Sphere(Vector3(pos.x - (size.x/2 + 1), pos.y, pos.z), multiplier), rd, sphereColor, Color4::clear()); Draw::sphere(Sphere(Vector3(pos.x, pos.y, pos.z + (size.z/2 + 1)), multiplier), rd, sphereColor, Color4::clear()); - Draw::sphere(Sphere(Vector3(pos.x, pos.y, pos.z - (size.z/2 + 1)), multiplier), rd, sphereColor, Color4::clear()); + Draw::sphere(Sphere(Vector3(pos.x, pos.y, pos.z - (size.z/2 + 1)), multiplier), rd, sphereColor, Color4::clear()); + + } + distance = pow(pow((double)gamepoint.x - (double)camerapoint.x, 2) + pow((double)gamepoint.y - (double)camerapoint.y, 2) + pow((double)gamepoint.z - (double)camerapoint.z, 2), 0.5); + if(distance < 0) + distance = distance*-1; + CoordinateFrame frame = CoordinateFrame(rd->getCameraToWorldMatrix().rotation, Vector3(pos.x, pos.y+size.y/2+1, pos.z)); + Box icon = Box(Vector3(0-distance/128, 0-distance/128, 0-distance/128), Vector3(distance/128, distance/128, distance/128)); + Draw::box(frame.toWorldSpace(icon), rd, sphereColor, Color4::clear()); + frame = CoordinateFrame(rd->getCameraToWorldMatrix().rotation, Vector3(pos.x+size.x/2+1, pos.y, pos.z)); + icon = Box(Vector3(0-distance/128, 0-distance/128, 0-distance/128), Vector3(distance/128, distance/128, distance/128)); + Draw::box(frame.toWorldSpace(icon), rd, sphereColor , Color4::clear()); + frame = CoordinateFrame(rd->getCameraToWorldMatrix().rotation, Vector3(pos.x, pos.y, pos.z+(size.z/2+1))); + icon = Box(Vector3(0-distance/128, 0-distance/128, 0-distance/128), Vector3(distance/128, distance/128, distance/128)); + Draw::box(frame.toWorldSpace(icon), rd, sphereColor, Color4::clear()); + frame = CoordinateFrame(rd->getCameraToWorldMatrix().rotation, Vector3(pos.x, pos.y-(size.y/2+1), pos.z)); + icon = Box(Vector3(0-distance/128, 0-distance/128, 0-distance/128), Vector3(distance/128, distance/128, distance/128)); + Draw::box(frame.toWorldSpace(icon), rd, sphereColor, Color4::clear()); + frame = CoordinateFrame(rd->getCameraToWorldMatrix().rotation, Vector3(pos.x-(size.x/2+1), pos.y, pos.z)); + icon = Box(Vector3(0-distance/128, 0-distance/128, 0-distance/128), Vector3(distance/128, distance/128, distance/128)); + Draw::box(frame.toWorldSpace(icon), rd, sphereColor, Color4::clear()); + frame = CoordinateFrame(rd->getCameraToWorldMatrix().rotation, Vector3(pos.x, pos.y, pos.z-(size.z/2+1))); + icon = Box(Vector3(0-distance/128, 0-distance/128, 0-distance/128), Vector3(distance/128, distance/128, distance/128)); + Draw::box(frame.toWorldSpace(icon), rd, sphereColor, Color4::clear()); rd->setAmbientLightColor(lighting.ambient); rd->setLight(0, GLight::directional(lighting.lightDirection, lighting.lightColor)); } @@ -1421,7 +1470,7 @@ void Demo::onGraphics(RenderDevice* rd) { //Draw::ray(testRay, rd, Color3::orange(), 1); - /*Vector3 gamepoint = Vector3(0, 5, 0); + Vector3 gamepoint = Vector3(0, 5, 0); Vector3 camerapoint = rd->getCameraToWorldMatrix().translation; float distance = pow(pow((double)gamepoint.x - (double)camerapoint.x, 2) + pow((double)gamepoint.y - (double)camerapoint.y, 2) + pow((double)gamepoint.z - (double)camerapoint.z, 2), 0.5); if(distance < 50 && distance > -50) @@ -1430,7 +1479,7 @@ void Demo::onGraphics(RenderDevice* rd) { if(distance < 0) distance = distance*-1; fntdominant->draw3D(rd, "Testing", CoordinateFrame(rd->getCameraToWorldMatrix().rotation, gamepoint), 0.04*distance, Color3::yellow(), Color3::black(), G3D::GFont::XALIGN_CENTER, G3D::GFont::YALIGN_CENTER); - }*/ + } app->renderDevice->disableLighting(); From faaa59f58bc7f85ec52735b385b6e538be8fa5da Mon Sep 17 00:00:00 2001 From: zmxhawrhbg Date: Mon, 30 Apr 2018 08:12:30 -0700 Subject: [PATCH 31/49] add some sort of building instructions --- buildingfirsttime.md | 69 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 buildingfirsttime.md diff --git a/buildingfirsttime.md b/buildingfirsttime.md new file mode 100644 index 0000000..f4b63e4 --- /dev/null +++ b/buildingfirsttime.md @@ -0,0 +1,69 @@ +# Building Setup + +##### G3D is super delicate, meaning that you have to go about building in a special way + +1. Install Visual Studio 2005. [This link here](http://download.microsoft.com/download/8/3/a/83aad8f9-38ba-4503-b3cd-ba28c360c27b/ENU/vcsetup.exe) is a web installer, but it works. + +2. Download and install G3D from [this link here](https://sourceforge.net/projects/g3d/files/g3d-cpp/6.10/g3d-6_10_win32.exe/download). + +3. Make sure G3D is included under your build directories by going under Tools -> Options -> Projects and Solutions -> VC++ Directories and check and see if + +* `g3d-6_10\bin` is under executable files + +* `g3d-6_10\include` is under include files + +* `g3d-6_10\bin` is under executable files + +* `g3d-6_10\win32-vc8-lib` is under library files + +* Ex: `C:\libraries\g3d-6_10\bin` + +4. Download SDL version 1.2.7 from [this link](http://www.libsdl.org/release/SDL-devel-1.2.7-VC6.zip) + +5. Extract the file to a folder on your computer. Keep note of this folder. + +6. Include the extracted files by going to Tools -> Options -> Projects and Solutions -> VC++ Directories and adding the following links: + +* Include files - extractpath\`include` + +* Library files - extractpath\`lib` + +* Ex: `C:\libraries\SDL-1.2.7\bin` + +(The steps 7-11 are optional if you have installed Visual Studio Professional. If you used the link above, you are using express, but check step 9 if it doesn't work) + +7. Download and install the [platform SDK](https://www.microsoft.com/en-us/download/details.aspx?id=6510). + +8. Put the platform SDK into your directories (Tools -> Options -> Projects and Solutions -> VC++ Directories) by replacing all mentions of $(VCInstallDir)PlatformSDK with the actual path. +Ex: `$(VCInstallDir)PlatformSDK\include` -> `C:\Program Files\Microsoft Platform SDK\Include` + +9. Right click Source files -> Dialogs.rc -> View Code + +10. Edit line 10 to say +``` +#include "WinResrc.h" +#define IDC_STATIC -1 +``` + +instead of + +`#include "afxres.h"` + +11. Right click the project -> Properties -> Configuration Properties -> Linker -> Input, and add `AdvAPI32.lib` under Additional Dependencies. + +(Continue back here if you're skipping steps 7-11) + +12. Right click the project -> Properties -> Configuration Properties -> Linker -> General, and make sure Additional Library Directories is blank. + +13. Try building using Build -> Build G3DTest. + + +## Error stuff + +`c:\libraries\g3d-6_10\include\G3D/platform.h(235) : fatal error C1083: Cannot open include file: 'windows.h': No such file or directory` -> Download and install platform SDK (lines 7-8) + +`G3D-debug.lib(RegistryUtil.obj) : error LNK2019: unresolved external symbol __imp__RegCloseKey@4 referenced in function "public: static bool __cdecl G3D::RegistryUtil::keyExists(class std::basic_string,class std::allocator > const &)" (?keyExists@RegistryUtil@G3D@@SA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)` -> Add AdvAPI32.lib under Additional Dependencies (step 11) + +`.\Dialogs.rc(10) : fatal error RC1015: cannot open include file 'afxres.h'.` -> Perform steps 9-10 + +Enjoy! From ce66ec6f5d8b0bd213634a8d5d634254ff778b93 Mon Sep 17 00:00:00 2001 From: zmxhawrhbg Date: Mon, 30 Apr 2018 08:23:18 -0700 Subject: [PATCH 32/49] do some stuff to the file now it can properly exist --- buildingfirsttime.md => building.md | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) rename buildingfirsttime.md => building.md (59%) diff --git a/buildingfirsttime.md b/building.md similarity index 59% rename from buildingfirsttime.md rename to building.md index f4b63e4..93f11de 100644 --- a/buildingfirsttime.md +++ b/building.md @@ -2,11 +2,15 @@ ##### G3D is super delicate, meaning that you have to go about building in a special way +#### Skip to steps 7-13 if you have already built this program + 1. Install Visual Studio 2005. [This link here](http://download.microsoft.com/download/8/3/a/83aad8f9-38ba-4503-b3cd-ba28c360c27b/ENU/vcsetup.exe) is a web installer, but it works. +* The above link is for Visual Studio Express, which is faster to download and install. If you'd like to skip some steps, but have a slower download, get [Visual Studio Professional](https://archive.org/details/Microsoft_Visual_Studio_2005_180-Days_Trial) and skip steps 7-11. + 2. Download and install G3D from [this link here](https://sourceforge.net/projects/g3d/files/g3d-cpp/6.10/g3d-6_10_win32.exe/download). -3. Make sure G3D is included under your build directories by going under Tools -> Options -> Projects and Solutions -> VC++ Directories and check and see if +3. Make sure G3D is included under your build directories by going under Tools -> Options -> Projects and Solutions -> VC++ Directories and check and see if: * `g3d-6_10\bin` is under executable files @@ -30,7 +34,7 @@ * Ex: `C:\libraries\SDL-1.2.7\bin` -(The steps 7-11 are optional if you have installed Visual Studio Professional. If you used the link above, you are using express, but check step 9 if it doesn't work) +#### Steps 7-11 are optional if you are using Visual Studio Professional. Check the Error stuff section if it doesn't work, most reference steps from here. 7. Download and install the [platform SDK](https://www.microsoft.com/en-us/download/details.aspx?id=6510). @@ -40,18 +44,20 @@ Ex: `$(VCInstallDir)PlatformSDK\include` -> `C:\Program Files\Microsoft Platform 9. Right click Source files -> Dialogs.rc -> View Code 10. Edit line 10 to say -``` +```cpp #include "WinResrc.h" #define IDC_STATIC -1 ``` instead of -`#include "afxres.h"` +```cpp +#include "afxres.h" +``` 11. Right click the project -> Properties -> Configuration Properties -> Linker -> Input, and add `AdvAPI32.lib` under Additional Dependencies. -(Continue back here if you're skipping steps 7-11) +### Continue back here if you're skipping steps 7-11 12. Right click the project -> Properties -> Configuration Properties -> Linker -> General, and make sure Additional Library Directories is blank. @@ -60,10 +66,12 @@ instead of ## Error stuff -`c:\libraries\g3d-6_10\include\G3D/platform.h(235) : fatal error C1083: Cannot open include file: 'windows.h': No such file or directory` -> Download and install platform SDK (lines 7-8) +```c:\libraries\g3d-6_10\include\G3D/platform.h(235) : fatal error C1083: Cannot open include file: 'windows.h': No such file or directory``` > Download and install platform SDK (lines 7-8) -`G3D-debug.lib(RegistryUtil.obj) : error LNK2019: unresolved external symbol __imp__RegCloseKey@4 referenced in function "public: static bool __cdecl G3D::RegistryUtil::keyExists(class std::basic_string,class std::allocator > const &)" (?keyExists@RegistryUtil@G3D@@SA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)` -> Add AdvAPI32.lib under Additional Dependencies (step 11) +```G3D-debug.lib(RegistryUtil.obj) : error LNK2019: unresolved external symbol __imp__RegCloseKey@4 referenced in function "public: static bool __cdecl G3D::RegistryUtil::keyExists(class std::basic_string,class std::allocator > const &)" (?keyExists@RegistryUtil@G3D@@SA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)``` > Add AdvAPI32.lib under Additional Dependencies (step 11) -`.\Dialogs.rc(10) : fatal error RC1015: cannot open include file 'afxres.h'.` -> Perform steps 9-10 +```.\Dialogs.rc(10) : fatal error RC1015: cannot open include file 'afxres.h'.``` > Perform steps 9-10 Enjoy! + +please report unfriendliness of this page From d810c213f6eae90e9185e4f147a42727fb134886 Mon Sep 17 00:00:00 2001 From: zmxhawrhbg Date: Mon, 30 Apr 2018 11:27:53 -0700 Subject: [PATCH 33/49] remove linkes --- building.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/building.md b/building.md index 93f11de..2d0c619 100644 --- a/building.md +++ b/building.md @@ -4,9 +4,7 @@ #### Skip to steps 7-13 if you have already built this program -1. Install Visual Studio 2005. [This link here](http://download.microsoft.com/download/8/3/a/83aad8f9-38ba-4503-b3cd-ba28c360c27b/ENU/vcsetup.exe) is a web installer, but it works. - -* The above link is for Visual Studio Express, which is faster to download and install. If you'd like to skip some steps, but have a slower download, get [Visual Studio Professional](https://archive.org/details/Microsoft_Visual_Studio_2005_180-Days_Trial) and skip steps 7-11. +1. Install Visual Studio 2005. Google where to find it. Make note of which version you downloaded. 2. Download and install G3D from [this link here](https://sourceforge.net/projects/g3d/files/g3d-cpp/6.10/g3d-6_10_win32.exe/download). From 529821ab9fb4a700e7be13fed5cdb2e55f5cda64 Mon Sep 17 00:00:00 2001 From: andreja6 Date: Mon, 30 Apr 2018 18:05:14 -0700 Subject: [PATCH 34/49] Made size getters and setters --- PhysicalInstance.cpp | 32 ++++++++++++++++++++++++++++++++ PhysicalInstance.h | 5 ++++- main.cpp | 26 +++++++++++++------------- 3 files changed, 49 insertions(+), 14 deletions(-) diff --git a/PhysicalInstance.cpp b/PhysicalInstance.cpp index faa740a..3a9891b 100644 --- a/PhysicalInstance.cpp +++ b/PhysicalInstance.cpp @@ -10,6 +10,7 @@ Color3 color; bool changed = true; Box itemBox = Box(); + PhysicalInstance::PhysicalInstance(void) { name = "Default PhysicalInstance"; @@ -23,7 +24,38 @@ PhysicalInstance::PhysicalInstance(void) velocity = Vector3(0,0,0); rotVelocity = Vector3(0,0,0); } +void PhysicalInstance::setSize(Vector3 newSize) +{ + int minsize = 1; + int maxsize = 512; + changed = true; + int sizex = (int)newSize.x; + if(sizex <= 0) + sizex = 1; + if(sizex > 512) + sizex = 512; + int sizey = (int)newSize.y; + if(sizey <= 0) + sizey = 1; + if(sizey > 512) + sizey = 512; + + int sizez = (int)newSize.z; + if(sizez <= 0) + sizez = 1; + if(sizez > 512) + sizez = 512; + + size = Vector3(sizex, sizey, sizez); + + + +} +Vector3 PhysicalInstance::getSize() +{ + return size; +} Vector3 PhysicalInstance::getPosition() { return position; diff --git a/PhysicalInstance.h b/PhysicalInstance.h index bc3f859..66381db 100644 --- a/PhysicalInstance.h +++ b/PhysicalInstance.h @@ -7,7 +7,7 @@ class PhysicalInstance : public: PhysicalInstance(void); ~PhysicalInstance(void); - Vector3 size; + Vector3 velocity; Vector3 rotvelocity; CoordinateFrame cFrame; @@ -18,6 +18,9 @@ public: void setCFrame(CoordinateFrame); Box getBox(); CoordinateFrame getCFrameRenderBased(); + Vector3 getSize(); + void setSize(Vector3); private: Vector3 position; + Vector3 size; }; diff --git a/main.cpp b/main.cpp index ba06964..2d4f3e2 100644 --- a/main.cpp +++ b/main.cpp @@ -719,7 +719,7 @@ void Demo::onInit() { PhysicalInstance* test = makePart(); test->parent = dataModel; test->color = Color3(0.2F,0.3F,1); - test->size = Vector3(24,1,24); + test->setSize(Vector3(24,1,24)); test->setPosition(Vector3(0,0,0)); test->setCFrame(test->getCFrame() * Matrix3::fromEulerAnglesXYZ(0,toRadians(90),0)); //selectedInstance = test; @@ -729,54 +729,54 @@ void Demo::onInit() { test = makePart(); test->parent = dataModel; test->color = Color3(.5F,1,.5F); - test->size = Vector3(4,1,2); + test->setSize(Vector3(4,1,2)); test->setPosition(Vector3(-10,1,0)); test = makePart(); test->parent = dataModel; test->color = Color3(.5F,1,.5F); - test->size = Vector3(4,1,2); + test->setSize(Vector3(4,1,2)); test->setPosition(Vector3(10,1,0)); test = makePart(); test->parent = dataModel; test->color = Color3::gray(); - test->size = Vector3(4,1,2); + test->setSize(Vector3(4,1,2)); test->setPosition(Vector3(7,2,0)); test = makePart(); test->parent = dataModel; test->color = Color3::gray(); - test->size = Vector3(4,1,2); + test->setSize(Vector3(4,1,2)); test->setPosition(Vector3(-7,2,0)); test = makePart(); test->parent = dataModel; test->color = Color3::gray(); - test->size = Vector3(4,1,2); + test->setSize(Vector3(4,1,2)); test->setPosition(Vector3(4,3,0)); test = makePart(); test->parent = dataModel; test->color = Color3::gray(); - test->size = Vector3(4,1,2); + test->setSize(Vector3(4,1,2)); test->setPosition(Vector3(-5,3,0)); test = makePart(); test->parent = dataModel; test->color = Color3::gray(); - test->size = Vector3(4,1,2); + test->setSize(Vector3(4,1,2)); test->setPosition(Vector3(1,4,0)); test = makePart(); test->parent = dataModel; test->color = Color3::gray(); - test->size = Vector3(4,1,2); + test->setSize(Vector3(4,1,2)); test->setPosition(Vector3(-3,4,0)); test = makePart(); test->parent = dataModel; test->color = Color3::gray(); - test->size = Vector3(4,1,2); + test->setSize(Vector3(4,1,2)); test->setPosition(Vector3(-2,5,0)); @@ -785,13 +785,13 @@ void Demo::onInit() { test = makePart(); test->parent = dataModel; test->color = Color3::gray(); - test->size = Vector3(4,1,2); + test->setSize(Vector3(4,1,2)); test->setPosition(Vector3(0,6,0)); test = makePart(); test->parent = dataModel; test->color = Color3::gray(); - test->size = Vector3(-4,-1,-2); + test->setSize(Vector3(4,1,2)); test->setPosition(Vector3(2,7,0)); @@ -1458,7 +1458,7 @@ void Demo::onGraphics(RenderDevice* rd) { Draw::box(part->getBox(), app->renderDevice, part->color, Color4::clear()); if(selectedInstance == part) { - Vector3 size = part->size; + Vector3 size = part->getSize(); Vector3 pos = part->getCFrame().translation; drawOutline(Vector3(0+size.x/4, 0+size.y/4, 0+size.z/4) ,Vector3(0-size.x/4,0-size.y/4,0-size.z/4), rd, lighting, Vector3(size.x/2, size.y/2, size.z/2), Vector3(pos.x/2, pos.y/2, pos.z/2), part->getCFrameRenderBased()); } From 9986f2ee5f172b6068198b302e7b47a0bbd0061d Mon Sep 17 00:00:00 2001 From: andreja6 Date: Mon, 30 Apr 2018 21:43:02 -0700 Subject: [PATCH 35/49] Made class name getter, can not be set outside of class --- Instance.cpp | 10 ++++++++-- Instance.h | 3 +++ main.cpp | 12 ++++++------ 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/Instance.cpp b/Instance.cpp index b981f8b..4d72d43 100644 --- a/Instance.cpp +++ b/Instance.cpp @@ -4,12 +4,13 @@ std::string name; Instance* parent; -static std::string className = "DataModel"; +std::vector children; +static std::string className = "BaseInstance"; Instance::Instance(void) { name = "Default Game Instance"; - className = "DataModel"; + className = "BaseInstance"; } Instance::~Instance(void) @@ -17,6 +18,11 @@ Instance::~Instance(void) name = "Default Game Instance"; } +std::string Instance::getClassName() +{ + return className; +} + diff --git a/Instance.h b/Instance.h index 8a58954..b718a3e 100644 --- a/Instance.h +++ b/Instance.h @@ -8,5 +8,8 @@ public: virtual ~Instance(void); std::string name; Instance* parent; // Another pointer. + std::vector children; // All children. + std::string getClassName(); +protected: std::string className; }; diff --git a/main.cpp b/main.cpp index 2d4f3e2..3e5c58a 100644 --- a/main.cpp +++ b/main.cpp @@ -299,7 +299,7 @@ void RotateButtonListener::onButton1MouseClick(BaseButtonInstance* button) if(selectedInstance != NULL) { AudioPlayer::PlaySound(clickSound); - if(selectedInstance->className == "Part") + if(selectedInstance->getClassName() == "Part") { PhysicalInstance* part = (PhysicalInstance*) selectedInstance; if(button->name == "Tilt") @@ -1122,7 +1122,7 @@ void Demo::onUserInput(UserInput* ui) { bool onGUI = false; for(size_t i = 0; i < instances_2D.size(); i++) { - if(instances_2D.at(i)->className == "TextButton" || instances_2D.at(i)->className == "ImageButton") + if(instances_2D.at(i)->getClassName() == "TextButton" || instances_2D.at(i)->getClassName() == "ImageButton") { BaseButtonInstance* button = (BaseButtonInstance*)instances_2D.at(i); if(button->mouseInButton(ui->mouseXY().x, ui->mouseXY().y, app->renderDevice)) @@ -1140,7 +1140,7 @@ void Demo::onUserInput(UserInput* ui) { Vector3 camPos = app->debugCamera.getCoordinateFrame().translation; for(size_t i = 0; i < instances.size(); i++) { - if(instances.at(i)->className == "Part" && instances.at(i)->parent == dataModel) + if(instances.at(i)->getClassName() == "Part" && instances.at(i)->parent == dataModel) { PhysicalInstance* test = (PhysicalInstance*)instances.at(i); float time = testRay.intersectionTime(test->getBox()); @@ -1167,7 +1167,7 @@ void Demo::onUserInput(UserInput* ui) { for(size_t i = 0; i < instances_2D.size(); i++) { - if(instances_2D.at(i)->className == "TextButton" || instances_2D.at(i)->className == "ImageButton") + if(instances_2D.at(i)->getClassName() == "TextButton" || instances_2D.at(i)->getClassName() == "ImageButton") { BaseButtonInstance* button = (BaseButtonInstance*)instances_2D.at(i); if(button->mouseInButton(ui->mouseXY().x, ui->mouseXY().y, app->renderDevice)) @@ -1237,7 +1237,7 @@ void drawButtons(RenderDevice* rd) for(size_t i = 0; i < instances_2D.size(); i++) { Instance* instance = instances_2D.at(i); - if((instance->className == "TextButton" || instance->className == "ImageButton") && instance->parent == dataModel) + if((instance->getClassName() == "TextButton" || instance->getClassName() == "ImageButton") && instance->parent == dataModel) { BaseButtonInstance* tbi = (BaseButtonInstance*)instance; tbi->drawObj(rd, Vector2(mousex, mousey), mouseButton1Down); @@ -1451,7 +1451,7 @@ void Demo::onGraphics(RenderDevice* rd) { for(size_t i = 0; i < instances.size(); i++) { Instance* instance = instances.at(i); - if(instance->className == "Part" && instance->parent != NULL) + if(instance->getClassName() == "Part" && instance->parent != NULL) { PhysicalInstance* part = (PhysicalInstance*)instance; From 388962a5e7b126d33baf88706c9a4738dd775c9e Mon Sep 17 00:00:00 2001 From: andreja6 Date: Tue, 1 May 2018 11:33:24 -0700 Subject: [PATCH 36/49] Finished base for new datamodel --- Instance.cpp | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++- Instance.h | 7 ++++++ 2 files changed, 71 insertions(+), 1 deletion(-) diff --git a/Instance.cpp b/Instance.cpp index 4d72d43..1d3fe47 100644 --- a/Instance.cpp +++ b/Instance.cpp @@ -15,7 +15,10 @@ Instance::Instance(void) Instance::~Instance(void) { - name = "Default Game Instance"; + for(size_t i = 0; i < children.size(); i++) + { + delete children.at(i); + } } std::string Instance::getClassName() @@ -23,6 +26,66 @@ std::string Instance::getClassName() return className; } +std::vector Instance::getChildren() +{ + return children; +} +std::vector Instance::getAllChildren() +{ + std::vector totalchildren = children; + for(size_t i = 0; i < children.size(); i++) + { + std::vector subchildren = children.at(i)->getAllChildren(); + totalchildren.insert(totalchildren.end(), subchildren.begin(), subchildren.end()); + } + return totalchildren; +} +void Instance::setParent(Instance* newParent) +{ + if(parent != NULL) + { + parent->removeChild(this); + } + parent = newParent; + if(newParent != NULL) + { + newParent->addChild(this); + } +} +Instance* Instance::getParent() +{ + return parent; +} + +void Instance::addChild(Instance* newChild) +{ + children.push_back(newChild); +} + +void Instance::removeChild(Instance* oldChild) +{ + for(size_t i = 0; i < children.size(); i++) + { + if(children.at(i) == oldChild) + { + children.erase(children.begin() + i); + } + } +} + +Instance* Instance::findFirstChild(std::string name) +{ + Instance* child = NULL; + for(size_t i = 0; i < children.size(); i++) + { + if(children.at(i)->name == name) + { + child = children.at(i); + break; + } + } + return child; +} diff --git a/Instance.h b/Instance.h index b718a3e..be3f943 100644 --- a/Instance.h +++ b/Instance.h @@ -10,6 +10,13 @@ public: Instance* parent; // Another pointer. std::vector children; // All children. std::string getClassName(); + Instance* findFirstChild(std::string); + std::vector getChildren(); + std::vector getAllChildren(); + void setParent(Instance*); + void addChild(Instance*); + void removeChild(Instance*); + Instance* getParent(); protected: std::string className; }; From c875454b40c72587ed14037247e872e5cbe505e7 Mon Sep 17 00:00:00 2001 From: andreja6 Date: Tue, 1 May 2018 11:47:23 -0700 Subject: [PATCH 37/49] Created bare workspace and datamodel classes --- DataModelInstance.cpp | 10 ++++++++++ DataModelInstance.h | 10 ++++++++++ G3DTest.vcproj | 8 ++++++++ WorkspaceInstance.cpp | 10 ++++++++++ WorkspaceInstance.h | 10 ++++++++++ 5 files changed, 48 insertions(+) create mode 100644 DataModelInstance.cpp create mode 100644 DataModelInstance.h create mode 100644 WorkspaceInstance.cpp create mode 100644 WorkspaceInstance.h diff --git a/DataModelInstance.cpp b/DataModelInstance.cpp new file mode 100644 index 0000000..0d12f30 --- /dev/null +++ b/DataModelInstance.cpp @@ -0,0 +1,10 @@ +#include "DataModelInstance.h" + +DataModelInstance::DataModelInstance(void) +{ + className = "DataModel"; +} + +DataModelInstance::~DataModelInstance(void) +{ +} diff --git a/DataModelInstance.h b/DataModelInstance.h new file mode 100644 index 0000000..5215f05 --- /dev/null +++ b/DataModelInstance.h @@ -0,0 +1,10 @@ +#pragma once +#include "instance.h" + +class DataModelInstance : + public Instance +{ +public: + DataModelInstance(void); + ~DataModelInstance(void); +}; diff --git a/G3DTest.vcproj b/G3DTest.vcproj index 3f6d76b..4839a34 100644 --- a/G3DTest.vcproj +++ b/G3DTest.vcproj @@ -242,6 +242,10 @@ RelativePath=".\ButtonListener.cpp" > + + @@ -299,6 +303,10 @@ RelativePath=".\ButtonListener.h" > + + diff --git a/WorkspaceInstance.cpp b/WorkspaceInstance.cpp new file mode 100644 index 0000000..e86a021 --- /dev/null +++ b/WorkspaceInstance.cpp @@ -0,0 +1,10 @@ +#include "WorkspaceInstance.h" + +WorkspaceInstance::WorkspaceInstance(void) +{ + className = "Workspace"; +} + +WorkspaceInstance::~WorkspaceInstance(void) +{ +} diff --git a/WorkspaceInstance.h b/WorkspaceInstance.h new file mode 100644 index 0000000..c6c45b0 --- /dev/null +++ b/WorkspaceInstance.h @@ -0,0 +1,10 @@ +#pragma once +#include "instance.h" + +class WorkspaceInstance : + public Instance +{ +public: + WorkspaceInstance(void); + ~WorkspaceInstance(void); +}; From e6ca1cd502fe867a4a51be57f7cc3b606b851848 Mon Sep 17 00:00:00 2001 From: andreja6 Date: Tue, 1 May 2018 12:14:54 -0700 Subject: [PATCH 38/49] changed AudioPlayer::PlaySound() to AudioPlayer::playSound() --- AudioPlayer.cpp | 2 +- AudioPlayer.h | 2 +- G3DTest.vcproj | 108 +++++++++++++++++++++++++++--------------------- main.cpp | 12 +++--- 4 files changed, 70 insertions(+), 54 deletions(-) diff --git a/AudioPlayer.cpp b/AudioPlayer.cpp index bfbc2c1..92556c1 100644 --- a/AudioPlayer.cpp +++ b/AudioPlayer.cpp @@ -58,7 +58,7 @@ void mixaudio(void *unused, Uint8 *stream, int len) } } -void AudioPlayer::PlaySound(std::string fileString) +void AudioPlayer::playSound(std::string fileString) { if(initiated) diff --git a/AudioPlayer.h b/AudioPlayer.h index 772accc..7467064 100644 --- a/AudioPlayer.h +++ b/AudioPlayer.h @@ -6,6 +6,6 @@ class AudioPlayer public: AudioPlayer(void); ~AudioPlayer(void); - static void PlaySound(std::string); + static void playSound(std::string); static void init(); }; diff --git a/G3DTest.vcproj b/G3DTest.vcproj index 4839a34..5a94fc8 100644 --- a/G3DTest.vcproj +++ b/G3DTest.vcproj @@ -234,30 +234,14 @@ RelativePath=".\AudioPlayer.cpp" > - - - - - - - - @@ -278,14 +262,38 @@ /> - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + + + + debugCamera.getCoordinateFrame(); if(button->name == "CenterCam") centerCam = true; @@ -280,7 +280,7 @@ void GUDButtonListener::onButton1MouseClick(BaseButtonInstance* button) { if(selectedInstance != NULL) { - AudioPlayer::PlaySound(dingSound); + AudioPlayer::playSound(dingSound); if(button->name == "Duplicate") { @@ -298,7 +298,7 @@ void RotateButtonListener::onButton1MouseClick(BaseButtonInstance* button) { if(selectedInstance != NULL) { - AudioPlayer::PlaySound(clickSound); + AudioPlayer::playSound(clickSound); if(selectedInstance->getClassName() == "Part") { PhysicalInstance* part = (PhysicalInstance*) selectedInstance; @@ -324,7 +324,7 @@ void deleteInstance() instances.erase(instances.begin() + i); delete deleting; selectedInstance = NULL; - AudioPlayer::PlaySound(GetFileInPath("/content/sounds/pageturn.wav")); + AudioPlayer::playSound(GetFileInPath("/content/sounds/pageturn.wav")); } } } @@ -1049,13 +1049,13 @@ void Demo::onUserInput(UserInput* ui) { if(ui->keyPressed(SDL_MOUSE_WHEEL_UP_KEY)) { - AudioPlayer::PlaySound(cameraSound); + AudioPlayer::playSound(cameraSound); CoordinateFrame frame = app->debugCamera.getCoordinateFrame(); cameraPos = cameraPos + frame.lookVector()*2; } if(ui->keyPressed(SDL_MOUSE_WHEEL_DOWN_KEY)) { - AudioPlayer::PlaySound(cameraSound); + AudioPlayer::playSound(cameraSound); CoordinateFrame frame = app->debugCamera.getCoordinateFrame(); cameraPos = cameraPos - frame.lookVector()*2; } From 930aee06dcba8a24b08e8c87333b4fba47e8a7ac Mon Sep 17 00:00:00 2001 From: andreja6 Date: Tue, 1 May 2018 15:02:04 -0700 Subject: [PATCH 39/49] Finished new datamodel Not very efficient, but its somewhere --- DataModelInstance.cpp | 10 ++++ DataModelInstance.h | 2 + Instance.cpp | 3 +- Instance.h | 3 +- main.cpp | 125 +++++++++++++++++++++--------------------- 5 files changed, 77 insertions(+), 66 deletions(-) diff --git a/DataModelInstance.cpp b/DataModelInstance.cpp index 0d12f30..eeaab1b 100644 --- a/DataModelInstance.cpp +++ b/DataModelInstance.cpp @@ -1,10 +1,20 @@ #include "DataModelInstance.h" + +WorkspaceInstance* workspace; + DataModelInstance::DataModelInstance(void) { + workspace = new WorkspaceInstance(); + children.push_back(workspace); className = "DataModel"; } DataModelInstance::~DataModelInstance(void) { } + +WorkspaceInstance* DataModelInstance::getWorkspace() +{ + return workspace; +} diff --git a/DataModelInstance.h b/DataModelInstance.h index 5215f05..400a71d 100644 --- a/DataModelInstance.h +++ b/DataModelInstance.h @@ -1,5 +1,6 @@ #pragma once #include "instance.h" +#include "WorkspaceInstance.h" class DataModelInstance : public Instance @@ -7,4 +8,5 @@ class DataModelInstance : public: DataModelInstance(void); ~DataModelInstance(void); + WorkspaceInstance* getWorkspace(); }; diff --git a/Instance.cpp b/Instance.cpp index 1d3fe47..b50c024 100644 --- a/Instance.cpp +++ b/Instance.cpp @@ -3,12 +3,13 @@ #include "Instance.h" std::string name; -Instance* parent; +Instance* parent = NULL; std::vector children; static std::string className = "BaseInstance"; Instance::Instance(void) { + parent = NULL; name = "Default Game Instance"; className = "BaseInstance"; } diff --git a/Instance.h b/Instance.h index be3f943..d1ded43 100644 --- a/Instance.h +++ b/Instance.h @@ -7,7 +7,7 @@ public: Instance(void); virtual ~Instance(void); std::string name; - Instance* parent; // Another pointer. + std::vector children; // All children. std::string getClassName(); Instance* findFirstChild(std::string); @@ -19,4 +19,5 @@ public: Instance* getParent(); protected: std::string className; + Instance* parent; // Another pointer. }; diff --git a/main.cpp b/main.cpp index 4250f63..7323ae2 100644 --- a/main.cpp +++ b/main.cpp @@ -16,6 +16,7 @@ #include "PhysicalInstance.h" #include "TextButtonInstance.h" #include "ImageButtonInstance.h" +#include "DataModelInstance.h" #include "AudioPlayer.h" #include @@ -26,9 +27,9 @@ HWND hwnd; static const float VNUM = 0.01F; static std::string title = ""; static const std::string VERSION = "PRE-ALPHA "; -static std::vector instances; +//static std::vector instances; static std::vector instances_2D; -static Instance* dataModel; +static DataModelInstance* dataModel; GFontRef fntdominant = NULL; GFontRef fntlighttrek = NULL; Ray testRay; @@ -175,10 +176,10 @@ Demo::Demo(App* _app) : GApplet(_app), app(_app) { void clearInstances() { - for(size_t i = 0; i < instances.size(); i++) - { - delete instances.at(i); - } + //for(size_t i = 0; i < instances.size(); i++) + //{ + // delete instances.at(i); + //} delete dataModel; } @@ -226,14 +227,14 @@ std::string Convert (float number){ PhysicalInstance* makePart() { PhysicalInstance* part = new PhysicalInstance(); - instances.push_back(part); +// instances.push_back(part); return part; } TextButtonInstance* makeTextButton() { TextButtonInstance* part = new TextButtonInstance(); - instances.push_back(part); +// instances.push_back(part); instances_2D.push_back(part); return part; } @@ -241,7 +242,7 @@ TextButtonInstance* makeTextButton() ImageButtonInstance* makeImageButton(G3D::TextureRef newImage = NULL, G3D::TextureRef overImage = NULL, G3D::TextureRef downImage = NULL, G3D::TextureRef disableImage = NULL) { ImageButtonInstance* part = new ImageButtonInstance(newImage,overImage, downImage, disableImage); - instances.push_back(part); +// instances.push_back(part); instances_2D.push_back(part); return part; } @@ -316,17 +317,11 @@ void deleteInstance() { if(selectedInstance != NULL) { - for(size_t i = 0; i < instances.size(); i++) - { - if(instances.at(i) == selectedInstance) - { - Instance* deleting = instances.at(i); - instances.erase(instances.begin() + i); - delete deleting; - selectedInstance = NULL; - AudioPlayer::playSound(GetFileInPath("/content/sounds/pageturn.wav")); - } - } + if(selectedInstance->getParent() != NULL) + selectedInstance->getParent()->removeChild(selectedInstance); + delete selectedInstance; + selectedInstance = NULL; + AudioPlayer::playSound(GetFileInPath("/content/sounds/pageturn.wav")); } } @@ -380,7 +375,7 @@ void initGUI() button->boxBegin = Vector2(0, -24); button->boxEnd = Vector2(80, 0); button->floatBottom = true; - button->parent = dataModel; + button->setParent(dataModel); button->font = fntlighttrek; button->textColor = Color3(0,255,255); button->textOutlineColor = Color4::clear(); @@ -392,7 +387,7 @@ void initGUI() button->boxBegin = Vector2(0, -48); button->boxEnd = Vector2(80, -24); button->floatBottom = true; - button->parent = dataModel; + button->setParent(dataModel); button->font = fntlighttrek; button->textColor = Color3(0,255,255); button->textOutlineColor = Color4::clear(); @@ -404,7 +399,7 @@ void initGUI() button->boxBegin = Vector2(0, -72); button->boxEnd = Vector2(80, -48); button->floatBottom = true; - button->parent = dataModel; + button->setParent(dataModel); button->font = fntlighttrek; button->textColor = Color3(0,255,255); button->textOutlineColor = Color4::clear(); @@ -416,7 +411,7 @@ void initGUI() button->boxBegin = Vector2(0, -96); button->boxEnd = Vector2(80, -72); button->floatBottom = true; - button->parent = dataModel; + button->setParent(dataModel); button->font = fntlighttrek; button->textColor = Color3(0,255,255); button->textOutlineColor = Color4::clear(); @@ -428,7 +423,7 @@ void initGUI() button->boxBegin = Vector2(0, -120); button->boxEnd = Vector2(80, -96); button->floatBottom = true; - button->parent = dataModel; + button->setParent(dataModel); button->font = fntlighttrek; button->textColor = Color3(0,255,255); button->boxOutlineColor = Color3(0,255,255); @@ -439,7 +434,7 @@ void initGUI() button = makeTextButton(); button->boxBegin = Vector2(0, 0); button->boxEnd = Vector2(125, 25); - button->parent = dataModel; + button->setParent(dataModel); button->font = fntlighttrek; button->textColor = Color3::white(); button->boxColor = Color4::clear(); @@ -452,7 +447,7 @@ void initGUI() button = makeTextButton(); button->boxBegin = Vector2(125, 0); button->boxEnd = Vector2(250, 25); - button->parent = dataModel; + button->setParent(dataModel); button->font = fntlighttrek; button->textColor = Color3::white(); button->boxColor = Color4::clear(); @@ -465,7 +460,7 @@ void initGUI() button = makeTextButton(); button->boxBegin = Vector2(250, 0); button->boxEnd = Vector2(375, 25); - button->parent = dataModel; + button->setParent(dataModel); button->font = fntlighttrek; button->textColor = Color3::white(); button->boxColor = Color4::clear(); @@ -478,7 +473,7 @@ void initGUI() button = makeTextButton(); button->boxBegin = Vector2(375, 0); button->boxEnd = Vector2(500, 25); - button->parent = dataModel; + button->setParent(dataModel); button->font = fntlighttrek; button->textColor = Color3::white(); button->boxColor = Color4::clear(); @@ -491,7 +486,7 @@ void initGUI() button = makeTextButton(); button->boxBegin = Vector2(500, 0); button->boxEnd = Vector2(625, 25); - button->parent = dataModel; + button->setParent(dataModel); button->font = fntlighttrek; button->textColor = Color3::white(); button->boxColor = Color4::clear(); @@ -514,7 +509,7 @@ void initGUI() button->setAllColorsSame(); button->font = fntlighttrek; button->fontLocationRelativeTo = Vector2(10, 0); - button->parent = dataModel; + button->setParent(dataModel); button = makeTextButton(); @@ -528,7 +523,7 @@ void initGUI() button->setAllColorsSame(); button->font = fntlighttrek; button->fontLocationRelativeTo = Vector2(10, 0); - button->parent = dataModel; + button->setParent(dataModel); button = makeTextButton(); button->boxBegin = Vector2(0,265); @@ -541,7 +536,7 @@ void initGUI() button->setAllColorsSame(); button->font = fntlighttrek; button->fontLocationRelativeTo = Vector2(10, 0); - button->parent = dataModel; + button->setParent(dataModel); button->name = "Duplicate"; button->setButtonListener(new GUDButtonListener()); @@ -550,7 +545,7 @@ void initGUI() instance->name = "go"; instance->size = Vector2(65,65); instance->position = Vector2(6.5, 25); - instance->parent = dataModel; + instance->setParent(dataModel); @@ -561,14 +556,14 @@ void initGUI() Texture::fromFile(GetFileInPath("/content/images/ArrowTool_ds.png"))); instance->size = Vector2(50,50); instance->position = Vector2(15, 90); - instance->parent = dataModel; + instance->setParent(dataModel); instance->name = "Cursor"; instance->setButtonListener(new ModeSelectionListener()); instance = makeImageButton(Texture::fromFile(GetFileInPath("/content/images/ScaleTool.png")),Texture::fromFile(GetFileInPath("/content/images/ScaleTool_ovr.png")),Texture::fromFile(GetFileInPath("/content/images/ScaleTool_dn.png")),Texture::fromFile(GetFileInPath("/content/images/ScaleTool_ds.png"))); instance->size = Vector2(40,40); instance->position = Vector2(0, 140); - instance->parent = dataModel; + instance->setParent(dataModel); instance->name = "Resize"; instance->setButtonListener(new ModeSelectionListener()); @@ -580,7 +575,7 @@ void initGUI() Texture::fromFile(GetFileInPath("/content/images/MoveTool_ds.png"))); instance->size = Vector2(40,40); instance->position = Vector2(40, 140); - instance->parent = dataModel; + instance->setParent(dataModel); instance->name = "Arrows"; instance->setButtonListener(new ModeSelectionListener()); @@ -591,7 +586,7 @@ void initGUI() Texture::fromFile(GetFileInPath("/content/images/SelectionRotate_ds.png"))); instance->size = Vector2(30,30); instance->position = Vector2(10, 175); - instance->parent = dataModel; + instance->setParent(dataModel); instance->name = "Rotate"; instance->setButtonListener(new RotateButtonListener()); @@ -602,7 +597,7 @@ void initGUI() Texture::fromFile(GetFileInPath("/content/images/SelectionTilt_ds.png"))); instance->size = Vector2(30,30); instance->position = Vector2(40, 175); - instance->parent = dataModel; + instance->setParent(dataModel); instance->name = "Tilt"; instance->setButtonListener(new RotateButtonListener()); @@ -614,7 +609,7 @@ void initGUI() Texture::fromFile(GetFileInPath("/content/images/Delete_ds.png"))); instance->size = Vector2(40,46); instance->position = Vector2(20, 284); - instance->parent = dataModel; + instance->setParent(dataModel); instance->name = "Delete"; instance->setButtonListener(new DeleteListener()); @@ -626,7 +621,7 @@ void initGUI() instance->floatBottom = true; instance->floatRight = true; instance->position = Vector2(-77, -90); - instance->parent = dataModel; + instance->setParent(dataModel); instance->name = "ZoomIn"; instance->setButtonListener(new CameraButtonListener()); @@ -638,7 +633,7 @@ void initGUI() instance->floatBottom = true; instance->floatRight = true; instance->position = Vector2(-77, -31); - instance->parent = dataModel; + instance->setParent(dataModel); instance->name = "ZoomOut"; instance->setButtonListener(new CameraButtonListener()); @@ -650,7 +645,7 @@ void initGUI() instance->floatBottom = true; instance->floatRight = true; instance->position = Vector2(-110, -50); - instance->parent = dataModel; + instance->setParent(dataModel); instance->name = "PanLeft"; instance->setButtonListener(new CameraButtonListener()); @@ -662,7 +657,7 @@ void initGUI() instance->floatBottom = true; instance->floatRight = true; instance->position = Vector2(-45, -50); - instance->parent = dataModel; + instance->setParent(dataModel); instance->name = "PanRight"; instance->setButtonListener(new CameraButtonListener()); @@ -674,7 +669,7 @@ void initGUI() instance->floatBottom = true; instance->floatRight = true; instance->position = Vector2(-77, -60); - instance->parent = dataModel; + instance->setParent(dataModel); instance->name = "CenterCam"; instance->setButtonListener(new CameraButtonListener()); @@ -686,7 +681,7 @@ void initGUI() instance->floatBottom = true; instance->floatRight = true; instance->position = Vector2(-105, -75); - instance->parent = dataModel; + instance->setParent(dataModel); instance->name = "TiltUp"; instance->setButtonListener(new CameraButtonListener()); @@ -698,7 +693,7 @@ void initGUI() instance->floatBottom = true; instance->floatRight = true; instance->position = Vector2(-40, -75); - instance->parent = dataModel; + instance->setParent(dataModel); instance->name = "TiltDown"; instance->setButtonListener(new CameraButtonListener()); } @@ -709,15 +704,15 @@ void Demo::onInit() { // Called before Demo::run() beings - dataModel = new Instance(); - dataModel->parent = NULL; + dataModel = new DataModelInstance(); + dataModel->setParent(NULL); dataModel->name = "undefined"; initGUI(); PhysicalInstance* test = makePart(); - test->parent = dataModel; + test->setParent(dataModel->getWorkspace()); test->color = Color3(0.2F,0.3F,1); test->setSize(Vector3(24,1,24)); test->setPosition(Vector3(0,0,0)); @@ -727,54 +722,54 @@ void Demo::onInit() { test = makePart(); - test->parent = dataModel; + test->setParent(dataModel->getWorkspace()); test->color = Color3(.5F,1,.5F); test->setSize(Vector3(4,1,2)); test->setPosition(Vector3(-10,1,0)); test = makePart(); - test->parent = dataModel; + test->setParent(dataModel->getWorkspace()); test->color = Color3(.5F,1,.5F); test->setSize(Vector3(4,1,2)); test->setPosition(Vector3(10,1,0)); test = makePart(); - test->parent = dataModel; + test->setParent(dataModel->getWorkspace()); test->color = Color3::gray(); test->setSize(Vector3(4,1,2)); test->setPosition(Vector3(7,2,0)); test = makePart(); - test->parent = dataModel; + test->setParent(dataModel->getWorkspace()); test->color = Color3::gray(); test->setSize(Vector3(4,1,2)); test->setPosition(Vector3(-7,2,0)); test = makePart(); - test->parent = dataModel; + test->setParent(dataModel->getWorkspace()); test->color = Color3::gray(); test->setSize(Vector3(4,1,2)); test->setPosition(Vector3(4,3,0)); test = makePart(); - test->parent = dataModel; + test->setParent(dataModel->getWorkspace()); test->color = Color3::gray(); test->setSize(Vector3(4,1,2)); test->setPosition(Vector3(-5,3,0)); test = makePart(); - test->parent = dataModel; + test->setParent(dataModel->getWorkspace()); test->color = Color3::gray(); test->setSize(Vector3(4,1,2)); test->setPosition(Vector3(1,4,0)); test = makePart(); - test->parent = dataModel; + test->setParent(dataModel->getWorkspace()); test->color = Color3::gray(); test->setSize(Vector3(4,1,2)); test->setPosition(Vector3(-3,4,0)); test = makePart(); - test->parent = dataModel; + test->setParent(dataModel->getWorkspace()); test->color = Color3::gray(); test->setSize(Vector3(4,1,2)); test->setPosition(Vector3(-2,5,0)); @@ -783,13 +778,13 @@ void Demo::onInit() { test = makePart(); - test->parent = dataModel; + test->setParent(dataModel->getWorkspace()); test->color = Color3::gray(); test->setSize(Vector3(4,1,2)); test->setPosition(Vector3(0,6,0)); test = makePart(); - test->parent = dataModel; + test->setParent(dataModel->getWorkspace()); test->color = Color3::gray(); test->setSize(Vector3(4,1,2)); test->setPosition(Vector3(2,7,0)); @@ -1138,9 +1133,10 @@ void Demo::onUserInput(UserInput* ui) { testRay = app->debugCamera.worldRay(mousex, mousey, app->renderDevice->getViewport()); float nearest=std::numeric_limits::infinity(); Vector3 camPos = app->debugCamera.getCoordinateFrame().translation; + std::vector instances = dataModel->getWorkspace()->getAllChildren(); for(size_t i = 0; i < instances.size(); i++) { - if(instances.at(i)->getClassName() == "Part" && instances.at(i)->parent == dataModel) + if(instances.at(i)->getClassName() == "Part") { PhysicalInstance* test = (PhysicalInstance*)instances.at(i); float time = testRay.intersectionTime(test->getBox()); @@ -1237,7 +1233,7 @@ void drawButtons(RenderDevice* rd) for(size_t i = 0; i < instances_2D.size(); i++) { Instance* instance = instances_2D.at(i); - if((instance->getClassName() == "TextButton" || instance->getClassName() == "ImageButton") && instance->parent == dataModel) + if((instance->getClassName() == "TextButton" || instance->getClassName() == "ImageButton") && instance->getParent() == dataModel) { BaseButtonInstance* tbi = (BaseButtonInstance*)instance; tbi->drawObj(rd, Vector2(mousex, mousey), mouseButton1Down); @@ -1448,10 +1444,11 @@ void Demo::onGraphics(RenderDevice* rd) { //app->renderDevice->pushState(); //app->renderDevice->popState(); + std::vector instances = dataModel->getWorkspace()->getAllChildren(); for(size_t i = 0; i < instances.size(); i++) { Instance* instance = instances.at(i); - if(instance->getClassName() == "Part" && instance->parent != NULL) + if(instance->getClassName() == "Part") { PhysicalInstance* part = (PhysicalInstance*)instance; From 9999eb62e422b7997251f75c479b59d1408bcc60 Mon Sep 17 00:00:00 2001 From: andreja6 Date: Tue, 1 May 2018 19:58:58 -0700 Subject: [PATCH 40/49] Changed how render works --- Instance.cpp | 23 ++++++++++++++++++----- Instance.h | 2 +- PhysicalInstance.cpp | 13 +++++++++++++ PhysicalInstance.h | 2 +- main.cpp | 19 +++++++++++++------ 5 files changed, 46 insertions(+), 13 deletions(-) diff --git a/Instance.cpp b/Instance.cpp index b50c024..3872eba 100644 --- a/Instance.cpp +++ b/Instance.cpp @@ -14,6 +14,14 @@ Instance::Instance(void) className = "BaseInstance"; } +void Instance::render(RenderDevice* rd) +{ + for(size_t i = 0; i < children.size(); i++) + { + children.at(i)->render(rd); + } +} + Instance::~Instance(void) { for(size_t i = 0; i < children.size(); i++) @@ -34,13 +42,18 @@ std::vector Instance::getChildren() std::vector Instance::getAllChildren() { - std::vector totalchildren = children; - for(size_t i = 0; i < children.size(); i++) + if(!children.empty()) { - std::vector subchildren = children.at(i)->getAllChildren(); - totalchildren.insert(totalchildren.end(), subchildren.begin(), subchildren.end()); + std::vector totalchildren = children; + for(size_t i = 0; i < children.size(); i++) + { + std::vector subchildren = children.at(i)->getAllChildren(); + if(!subchildren.empty()) + totalchildren.insert(totalchildren.end(), subchildren.begin(), subchildren.end()); + } + return totalchildren; } - return totalchildren; + return children; } void Instance::setParent(Instance* newParent) diff --git a/Instance.h b/Instance.h index d1ded43..f379d63 100644 --- a/Instance.h +++ b/Instance.h @@ -7,7 +7,7 @@ public: Instance(void); virtual ~Instance(void); std::string name; - + virtual void render(RenderDevice*); std::vector children; // All children. std::string getClassName(); Instance* findFirstChild(std::string); diff --git a/PhysicalInstance.cpp b/PhysicalInstance.cpp index 3a9891b..416551e 100644 --- a/PhysicalInstance.cpp +++ b/PhysicalInstance.cpp @@ -93,6 +93,19 @@ Box PhysicalInstance::getBox() return itemBox; } +void PhysicalInstance::render(RenderDevice* rd) +{ + Draw::box(getBox(), rd, color, Color4::clear()); + if(!children.empty()) + { + for(size_t i = 0; i < children.size(); i++) + { + children.at(i)->render(rd); + } + } + +} + PhysicalInstance::~PhysicalInstance(void) { } diff --git a/PhysicalInstance.h b/PhysicalInstance.h index 66381db..8731067 100644 --- a/PhysicalInstance.h +++ b/PhysicalInstance.h @@ -7,7 +7,7 @@ class PhysicalInstance : public: PhysicalInstance(void); ~PhysicalInstance(void); - + virtual void render(RenderDevice*); Vector3 velocity; Vector3 rotvelocity; CoordinateFrame cFrame; diff --git a/main.cpp b/main.cpp index 7323ae2..316197f 100644 --- a/main.cpp +++ b/main.cpp @@ -1032,7 +1032,6 @@ void Demo::onUserInput(UserInput* ui) { showMouse = true; app->debugController.setActive(false); } - if(ui->keyPressed(SDLK_LSHIFT) || ui->keyPressed(SDLK_RSHIFT)) { moveRate = 1; @@ -1443,16 +1442,24 @@ void Demo::onGraphics(RenderDevice* rd) { //app->renderDevice->pushState(); //app->renderDevice->popState(); - - std::vector instances = dataModel->getWorkspace()->getAllChildren(); + dataModel->getWorkspace()->render(rd); + if(selectedInstance != NULL) + { + PhysicalInstance* part = (PhysicalInstance*)selectedInstance; + Vector3 size = part->getSize(); + Vector3 pos = part->getPosition(); + drawOutline(Vector3(0+size.x/4, 0+size.y/4, 0+size.z/4) ,Vector3(0-size.x/4,0-size.y/4,0-size.z/4), rd, lighting, Vector3(size.x/2, size.y/2, size.z/2), Vector3(pos.x/2, pos.y/2, pos.z/2), part->getCFrameRenderBased()); + } + /*std::vector instances = dataModel->getWorkspace()->getAllChildren(); for(size_t i = 0; i < instances.size(); i++) { Instance* instance = instances.at(i); if(instance->getClassName() == "Part") { - + instance->render(rd); PhysicalInstance* part = (PhysicalInstance*)instance; - Draw::box(part->getBox(), app->renderDevice, part->color, Color4::clear()); + //part->render(rd); + //Draw::box(part->getBox(), app->renderDevice, part->color, Color4::clear()); if(selectedInstance == part) { Vector3 size = part->getSize(); @@ -1463,7 +1470,7 @@ void Demo::onGraphics(RenderDevice* rd) { } } - Box box; + Box box;*/ //Draw::ray(testRay, rd, Color3::orange(), 1); From 57b407c894d2ba515d29d1c8f894d1ef23e47885 Mon Sep 17 00:00:00 2001 From: andreja6 Date: Tue, 1 May 2018 20:10:52 -0700 Subject: [PATCH 41/49] Made timer and score a part of Workspace --- WorkspaceInstance.cpp | 4 ++++ WorkspaceInstance.h | 2 ++ main.cpp | 14 ++++++-------- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/WorkspaceInstance.cpp b/WorkspaceInstance.cpp index e86a021..09a1c50 100644 --- a/WorkspaceInstance.cpp +++ b/WorkspaceInstance.cpp @@ -1,8 +1,12 @@ #include "WorkspaceInstance.h" +float timer = 60.0F; +int score = 0; WorkspaceInstance::WorkspaceInstance(void) { className = "Workspace"; + timer = 60.0F; + score = 0; } WorkspaceInstance::~WorkspaceInstance(void) diff --git a/WorkspaceInstance.h b/WorkspaceInstance.h index c6c45b0..fdb4b78 100644 --- a/WorkspaceInstance.h +++ b/WorkspaceInstance.h @@ -5,6 +5,8 @@ class WorkspaceInstance : public Instance { public: + float timer; + int score; WorkspaceInstance(void); ~WorkspaceInstance(void); }; diff --git a/main.cpp b/main.cpp index 316197f..b6cfe3c 100644 --- a/main.cpp +++ b/main.cpp @@ -11,6 +11,7 @@ @author Morgan McGuire, matrix@graphics3d.com */ #include +#include #include "Instance.h" #include "resource.h" #include "PhysicalInstance.h" @@ -24,10 +25,8 @@ #error Requires G3D 6.10 #endif HWND hwnd; -static const float VNUM = 0.01F; + static std::string title = ""; -static const std::string VERSION = "PRE-ALPHA "; -//static std::vector instances; static std::vector instances_2D; static DataModelInstance* dataModel; GFontRef fntdominant = NULL; @@ -43,8 +42,6 @@ static int index = 2; static std::string cameraSound = ""; static std::string clickSound = ""; static std::string dingSound = ""; -static float TIMERVAL = 60.0F; -static int SCOREVAL = 0; static G3D::TextureRef go = NULL; static G3D::TextureRef go_ovr = NULL; static G3D::TextureRef go_dn = NULL; @@ -71,7 +68,6 @@ static const int ARROWS = 1; static const int RESIZE = 2; static int mode = CURSOR; Vector3 cameraPos = Vector3(0,2,10); -Vector3 focalPointT = Vector3(0,0,0); Vector2 oldMouse = Vector2(0,0); float moveRate = 0.5; Instance* selectedInstance = NULL; @@ -1505,8 +1501,10 @@ void Demo::onGraphics(RenderDevice* rd) { fntdominant->draw2D(rd, message, Vector2((rd->getWidth()/2)-(fntdominant->get2DStringBounds(message, 20).x/2),(rd->getHeight()/2)-(fntdominant->get2DStringBounds(message, 20).y/2)), 20, Color3::yellow(), Color3::black()); } - fntdominant->draw2D(rd, "Timer: " + Convert(TIMERVAL), Vector2(rd->getWidth() - 120, 0+offset), 20, Color3::fromARGB(0x81C518), Color3::black()); - fntdominant->draw2D(rd, "Score: " + Convert(SCOREVAL), Vector2(rd->getWidth() - 120, 25+offset), 20, Color3::fromARGB(0x81C518), Color3::black()); + std::stringstream stream; + stream << std::fixed << std::setprecision(1) << dataModel->getWorkspace()->timer; + fntdominant->draw2D(rd, "Timer: " + stream.str(), Vector2(rd->getWidth() - 120, 0+offset), 20, Color3::fromARGB(0x81C518), Color3::black()); + fntdominant->draw2D(rd, "Score: " + Convert(dataModel->getWorkspace()->score), Vector2(rd->getWidth() - 120, 25+offset), 20, Color3::fromARGB(0x81C518), Color3::black()); //GUI Boxes From 3ee06b6c6220e4f3a01e769f5aeca02ea506abaa Mon Sep 17 00:00:00 2001 From: andreja6 Date: Tue, 1 May 2018 21:00:46 -0700 Subject: [PATCH 42/49] Made guiroot a child of datamodel --- DataModelInstance.cpp | 9 ++++- DataModelInstance.h | 1 + main.cpp | 88 +++++++++++++++++++++---------------------- 3 files changed, 53 insertions(+), 45 deletions(-) diff --git a/DataModelInstance.cpp b/DataModelInstance.cpp index eeaab1b..d79e5e9 100644 --- a/DataModelInstance.cpp +++ b/DataModelInstance.cpp @@ -2,12 +2,14 @@ WorkspaceInstance* workspace; +Instance* guiRoot; DataModelInstance::DataModelInstance(void) { workspace = new WorkspaceInstance(); + guiRoot = new Instance(); children.push_back(workspace); - className = "DataModel"; + className = "dataModel"; } DataModelInstance::~DataModelInstance(void) @@ -18,3 +20,8 @@ WorkspaceInstance* DataModelInstance::getWorkspace() { return workspace; } + +Instance* DataModelInstance::getGuiRoot() +{ + return guiRoot; +} diff --git a/DataModelInstance.h b/DataModelInstance.h index 400a71d..9142a57 100644 --- a/DataModelInstance.h +++ b/DataModelInstance.h @@ -9,4 +9,5 @@ public: DataModelInstance(void); ~DataModelInstance(void); WorkspaceInstance* getWorkspace(); + Instance* getGuiRoot(); }; diff --git a/main.cpp b/main.cpp index b6cfe3c..1a37e68 100644 --- a/main.cpp +++ b/main.cpp @@ -27,7 +27,6 @@ HWND hwnd; static std::string title = ""; -static std::vector instances_2D; static DataModelInstance* dataModel; GFontRef fntdominant = NULL; GFontRef fntlighttrek = NULL; @@ -231,7 +230,7 @@ TextButtonInstance* makeTextButton() { TextButtonInstance* part = new TextButtonInstance(); // instances.push_back(part); - instances_2D.push_back(part); +// instances_2D.push_back(part); return part; } @@ -239,7 +238,7 @@ ImageButtonInstance* makeImageButton(G3D::TextureRef newImage = NULL, G3D::Textu { ImageButtonInstance* part = new ImageButtonInstance(newImage,overImage, downImage, disableImage); // instances.push_back(part); - instances_2D.push_back(part); +// instances_2D.push_back(part); return part; } @@ -345,7 +344,7 @@ void ModeSelectionListener::onButton1MouseClick(BaseButtonInstance* button) { CoordinateFrame frame = usableApp->debugCamera.getCoordinateFrame(); - + std::vector instances_2D = dataModel->getGuiRoot()->getAllChildren(); for(size_t i = 0; i < instances_2D.size(); i++) { if(instances_2D.at(i)->name == "Cursor" || instances_2D.at(i)->name == "Resize" || instances_2D.at(i)->name == "Arrows") @@ -371,7 +370,7 @@ void initGUI() button->boxBegin = Vector2(0, -24); button->boxEnd = Vector2(80, 0); button->floatBottom = true; - button->setParent(dataModel); + button->setParent(dataModel->getGuiRoot()); button->font = fntlighttrek; button->textColor = Color3(0,255,255); button->textOutlineColor = Color4::clear(); @@ -383,7 +382,7 @@ void initGUI() button->boxBegin = Vector2(0, -48); button->boxEnd = Vector2(80, -24); button->floatBottom = true; - button->setParent(dataModel); + button->setParent(dataModel->getGuiRoot()); button->font = fntlighttrek; button->textColor = Color3(0,255,255); button->textOutlineColor = Color4::clear(); @@ -395,7 +394,7 @@ void initGUI() button->boxBegin = Vector2(0, -72); button->boxEnd = Vector2(80, -48); button->floatBottom = true; - button->setParent(dataModel); + button->setParent(dataModel->getGuiRoot()); button->font = fntlighttrek; button->textColor = Color3(0,255,255); button->textOutlineColor = Color4::clear(); @@ -407,7 +406,7 @@ void initGUI() button->boxBegin = Vector2(0, -96); button->boxEnd = Vector2(80, -72); button->floatBottom = true; - button->setParent(dataModel); + button->setParent(dataModel->getGuiRoot()); button->font = fntlighttrek; button->textColor = Color3(0,255,255); button->textOutlineColor = Color4::clear(); @@ -419,7 +418,7 @@ void initGUI() button->boxBegin = Vector2(0, -120); button->boxEnd = Vector2(80, -96); button->floatBottom = true; - button->setParent(dataModel); + button->setParent(dataModel->getGuiRoot()); button->font = fntlighttrek; button->textColor = Color3(0,255,255); button->boxOutlineColor = Color3(0,255,255); @@ -430,7 +429,7 @@ void initGUI() button = makeTextButton(); button->boxBegin = Vector2(0, 0); button->boxEnd = Vector2(125, 25); - button->setParent(dataModel); + button->setParent(dataModel->getGuiRoot()); button->font = fntlighttrek; button->textColor = Color3::white(); button->boxColor = Color4::clear(); @@ -443,7 +442,7 @@ void initGUI() button = makeTextButton(); button->boxBegin = Vector2(125, 0); button->boxEnd = Vector2(250, 25); - button->setParent(dataModel); + button->setParent(dataModel->getGuiRoot()); button->font = fntlighttrek; button->textColor = Color3::white(); button->boxColor = Color4::clear(); @@ -456,7 +455,7 @@ void initGUI() button = makeTextButton(); button->boxBegin = Vector2(250, 0); button->boxEnd = Vector2(375, 25); - button->setParent(dataModel); + button->setParent(dataModel->getGuiRoot()); button->font = fntlighttrek; button->textColor = Color3::white(); button->boxColor = Color4::clear(); @@ -469,7 +468,7 @@ void initGUI() button = makeTextButton(); button->boxBegin = Vector2(375, 0); button->boxEnd = Vector2(500, 25); - button->setParent(dataModel); + button->setParent(dataModel->getGuiRoot()); button->font = fntlighttrek; button->textColor = Color3::white(); button->boxColor = Color4::clear(); @@ -482,7 +481,7 @@ void initGUI() button = makeTextButton(); button->boxBegin = Vector2(500, 0); button->boxEnd = Vector2(625, 25); - button->setParent(dataModel); + button->setParent(dataModel->getGuiRoot()); button->font = fntlighttrek; button->textColor = Color3::white(); button->boxColor = Color4::clear(); @@ -505,7 +504,7 @@ void initGUI() button->setAllColorsSame(); button->font = fntlighttrek; button->fontLocationRelativeTo = Vector2(10, 0); - button->setParent(dataModel); + button->setParent(dataModel->getGuiRoot()); button = makeTextButton(); @@ -519,7 +518,7 @@ void initGUI() button->setAllColorsSame(); button->font = fntlighttrek; button->fontLocationRelativeTo = Vector2(10, 0); - button->setParent(dataModel); + button->setParent(dataModel->getGuiRoot()); button = makeTextButton(); button->boxBegin = Vector2(0,265); @@ -532,7 +531,7 @@ void initGUI() button->setAllColorsSame(); button->font = fntlighttrek; button->fontLocationRelativeTo = Vector2(10, 0); - button->setParent(dataModel); + button->setParent(dataModel->getGuiRoot()); button->name = "Duplicate"; button->setButtonListener(new GUDButtonListener()); @@ -541,7 +540,7 @@ void initGUI() instance->name = "go"; instance->size = Vector2(65,65); instance->position = Vector2(6.5, 25); - instance->setParent(dataModel); + instance->setParent(dataModel->getGuiRoot()); @@ -552,14 +551,14 @@ void initGUI() Texture::fromFile(GetFileInPath("/content/images/ArrowTool_ds.png"))); instance->size = Vector2(50,50); instance->position = Vector2(15, 90); - instance->setParent(dataModel); + instance->setParent(dataModel->getGuiRoot()); instance->name = "Cursor"; instance->setButtonListener(new ModeSelectionListener()); instance = makeImageButton(Texture::fromFile(GetFileInPath("/content/images/ScaleTool.png")),Texture::fromFile(GetFileInPath("/content/images/ScaleTool_ovr.png")),Texture::fromFile(GetFileInPath("/content/images/ScaleTool_dn.png")),Texture::fromFile(GetFileInPath("/content/images/ScaleTool_ds.png"))); instance->size = Vector2(40,40); instance->position = Vector2(0, 140); - instance->setParent(dataModel); + instance->setParent(dataModel->getGuiRoot()); instance->name = "Resize"; instance->setButtonListener(new ModeSelectionListener()); @@ -571,7 +570,7 @@ void initGUI() Texture::fromFile(GetFileInPath("/content/images/MoveTool_ds.png"))); instance->size = Vector2(40,40); instance->position = Vector2(40, 140); - instance->setParent(dataModel); + instance->setParent(dataModel->getGuiRoot()); instance->name = "Arrows"; instance->setButtonListener(new ModeSelectionListener()); @@ -582,7 +581,7 @@ void initGUI() Texture::fromFile(GetFileInPath("/content/images/SelectionRotate_ds.png"))); instance->size = Vector2(30,30); instance->position = Vector2(10, 175); - instance->setParent(dataModel); + instance->setParent(dataModel->getGuiRoot()); instance->name = "Rotate"; instance->setButtonListener(new RotateButtonListener()); @@ -593,7 +592,7 @@ void initGUI() Texture::fromFile(GetFileInPath("/content/images/SelectionTilt_ds.png"))); instance->size = Vector2(30,30); instance->position = Vector2(40, 175); - instance->setParent(dataModel); + instance->setParent(dataModel->getGuiRoot()); instance->name = "Tilt"; instance->setButtonListener(new RotateButtonListener()); @@ -605,7 +604,7 @@ void initGUI() Texture::fromFile(GetFileInPath("/content/images/Delete_ds.png"))); instance->size = Vector2(40,46); instance->position = Vector2(20, 284); - instance->setParent(dataModel); + instance->setParent(dataModel->getGuiRoot()); instance->name = "Delete"; instance->setButtonListener(new DeleteListener()); @@ -617,7 +616,7 @@ void initGUI() instance->floatBottom = true; instance->floatRight = true; instance->position = Vector2(-77, -90); - instance->setParent(dataModel); + instance->setParent(dataModel->getGuiRoot()); instance->name = "ZoomIn"; instance->setButtonListener(new CameraButtonListener()); @@ -629,7 +628,7 @@ void initGUI() instance->floatBottom = true; instance->floatRight = true; instance->position = Vector2(-77, -31); - instance->setParent(dataModel); + instance->setParent(dataModel->getGuiRoot()); instance->name = "ZoomOut"; instance->setButtonListener(new CameraButtonListener()); @@ -641,7 +640,7 @@ void initGUI() instance->floatBottom = true; instance->floatRight = true; instance->position = Vector2(-110, -50); - instance->setParent(dataModel); + instance->setParent(dataModel->getGuiRoot()); instance->name = "PanLeft"; instance->setButtonListener(new CameraButtonListener()); @@ -653,7 +652,7 @@ void initGUI() instance->floatBottom = true; instance->floatRight = true; instance->position = Vector2(-45, -50); - instance->setParent(dataModel); + instance->setParent(dataModel->getGuiRoot()); instance->name = "PanRight"; instance->setButtonListener(new CameraButtonListener()); @@ -665,7 +664,7 @@ void initGUI() instance->floatBottom = true; instance->floatRight = true; instance->position = Vector2(-77, -60); - instance->setParent(dataModel); + instance->setParent(dataModel->getGuiRoot()); instance->name = "CenterCam"; instance->setButtonListener(new CameraButtonListener()); @@ -677,7 +676,7 @@ void initGUI() instance->floatBottom = true; instance->floatRight = true; instance->position = Vector2(-105, -75); - instance->setParent(dataModel); + instance->setParent(dataModel->getGuiRoot()); instance->name = "TiltUp"; instance->setButtonListener(new CameraButtonListener()); @@ -689,7 +688,7 @@ void initGUI() instance->floatBottom = true; instance->floatRight = true; instance->position = Vector2(-40, -75); - instance->setParent(dataModel); + instance->setParent(dataModel->getGuiRoot()); instance->name = "TiltDown"; instance->setButtonListener(new CameraButtonListener()); } @@ -823,19 +822,18 @@ void Demo::onCleanup() { void Demo::onLogic() { // Add non-simulation game logic and AI code here - for(size_t i = 0; i < instances_2D.size(); i++) + + Instance* obj = dataModel->getGuiRoot()->findFirstChild("Delete"); + if(obj != NULL) { - if(instances_2D.at(i)->name == "Delete") - { - ImageButtonInstance* button = (ImageButtonInstance*)instances_2D.at(i); - if(selectedInstance == NULL) - button->disabled = true; - else - button->disabled = false; - - } + ImageButtonInstance* button = (ImageButtonInstance*)obj; + if(selectedInstance == NULL) + button->disabled = true; + else + button->disabled = false; } + } @@ -1110,6 +1108,7 @@ void Demo::onUserInput(UserInput* ui) { if(ui->keyPressed(SDL_LEFT_MOUSE_KEY)) { bool onGUI = false; + std::vector instances_2D = dataModel->getGuiRoot()->getAllChildren(); for(size_t i = 0; i < instances_2D.size(); i++) { if(instances_2D.at(i)->getClassName() == "TextButton" || instances_2D.at(i)->getClassName() == "ImageButton") @@ -1155,7 +1154,7 @@ void Demo::onUserInput(UserInput* ui) { if(ui->keyReleased(SDL_LEFT_MOUSE_KEY)) { - + std::vector instances_2D = dataModel->getGuiRoot()->getAllChildren(); for(size_t i = 0; i < instances_2D.size(); i++) { if(instances_2D.at(i)->getClassName() == "TextButton" || instances_2D.at(i)->getClassName() == "ImageButton") @@ -1225,10 +1224,11 @@ bool mouseInArea(float point1x, float point1y, float point2x, float point2y) void drawButtons(RenderDevice* 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") && instance->getParent() == dataModel) + if(instance->getClassName() == "TextButton" || instance->getClassName() == "ImageButton") { BaseButtonInstance* tbi = (BaseButtonInstance*)instance; tbi->drawObj(rd, Vector2(mousex, mousey), mouseButton1Down); @@ -1794,7 +1794,7 @@ int main(int argc, char** argv) { app.run(); } - catch(std::exception) + catch(...) { OnError(-1); } From 60c7a386f07c89735c3283c9c8bd19b4754ffb9e Mon Sep 17 00:00:00 2001 From: andreja6 Date: Tue, 1 May 2018 21:43:18 -0700 Subject: [PATCH 43/49] Changed how selection boxes work --- main.cpp | 103 +++++++++++++++++++++---------------------------------- 1 file changed, 39 insertions(+), 64 deletions(-) diff --git a/main.cpp b/main.cpp index 1a37e68..07e6b4d 100644 --- a/main.cpp +++ b/main.cpp @@ -711,7 +711,7 @@ void Demo::onInit() { test->color = Color3(0.2F,0.3F,1); test->setSize(Vector3(24,1,24)); test->setPosition(Vector3(0,0,0)); - test->setCFrame(test->getCFrame() * Matrix3::fromEulerAnglesXYZ(0,toRadians(90),0)); + test->setCFrame(test->getCFrame() * Matrix3::fromEulerAnglesXYZ(0,toRadians(40),toRadians(40))); //selectedInstance = test; @@ -1238,6 +1238,7 @@ void drawButtons(RenderDevice* rd) void drawOutline(Vector3 from, Vector3 to, RenderDevice* rd, LightingParameters lighting, Vector3 size, Vector3 pos, CoordinateFrame c) { + //rd->setLight(0, NULL); //rd->setAmbientLightColor(Color3(1,1,1)); Color3 outline = Color3::cyan();//Color3(0.098F,0.6F,1.0F); @@ -1263,49 +1264,32 @@ void drawOutline(Vector3 from, Vector3 to, RenderDevice* rd, LightingParameters { rd->setLight(0, NULL); rd->setAmbientLightColor(Color3(1,1,1)); - float max = size.x; - if(abs(size.y) > max) - max = size.y; - if(abs(size.z) > max) - max = size.z; - max = max / 2; - Draw::arrow(pos, Vector3(0, 1+max, 0), rd); - Draw::arrow(pos, Vector3(1+max, 0, 0), rd); - Draw::arrow(pos, Vector3(0, 0, 1+max), rd); - Draw::arrow(pos, Vector3(0, (-1)-max, 0), rd); - Draw::arrow(pos, Vector3((-1)-max, 0, 0), rd); - Draw::arrow(pos, Vector3(0, 0, (-1)-max), rd); + + AABox box; + c.toWorldSpace(Box(from, to)).getBounds(box); + float max = box.high().y - pos.y; + + Draw::arrow(pos, Vector3(0, 1.5+max, 0), rd); + Draw::arrow(pos, Vector3(0, (-1.5)-max, 0), rd); + + max = box.high().x - pos.x; + + Draw::arrow(pos, Vector3(1.5+max, 0, 0), rd); + Draw::arrow(pos, Vector3((-1.5)-max, 0, 0), rd); + + max = box.high().z - pos.z; + + Draw::arrow(pos, Vector3(0, 0, 1.5+max), rd); + Draw::arrow(pos, Vector3(0, 0, (-1.5)-max), rd); - Vector3 gamepoint = pos; - Vector3 camerapoint = rd->getCameraToWorldMatrix().translation; - float distance = pow(pow((double)gamepoint.x - (double)camerapoint.x, 2) + pow((double)gamepoint.y - (double)camerapoint.y, 2) + pow((double)gamepoint.z - (double)camerapoint.z, 2), 0.5); - if(distance < 0) - distance = distance*-1; - CoordinateFrame frame = CoordinateFrame(rd->getCameraToWorldMatrix().rotation, Vector3(pos.x, pos.y+max+0.8, pos.z)); - Box icon = Box(Vector3(0-distance/128, 0-distance/128, 0-distance/128), Vector3(distance/128, distance/128, distance/128)); - Draw::box(frame.toWorldSpace(icon), rd, Color3::orange(), Color4::clear()); - frame = CoordinateFrame(rd->getCameraToWorldMatrix().rotation, Vector3(pos.x+max+0.8, pos.y, pos.z)); - icon = Box(Vector3(0-distance/128, 0-distance/128, 0-distance/128), Vector3(distance/128, distance/128, distance/128)); - Draw::box(frame.toWorldSpace(icon), rd, Color3::orange(), Color4::clear()); - frame = CoordinateFrame(rd->getCameraToWorldMatrix().rotation, Vector3(pos.x, pos.y, pos.z+(max+0.8))); - icon = Box(Vector3(0-distance/128, 0-distance/128, 0-distance/128), Vector3(distance/128, distance/128, distance/128)); - Draw::box(frame.toWorldSpace(icon), rd, Color3::orange(), Color4::clear()); - frame = CoordinateFrame(rd->getCameraToWorldMatrix().rotation, Vector3(pos.x, pos.y-(max+0.8), pos.z)); - icon = Box(Vector3(0-distance/128, 0-distance/128, 0-distance/128), Vector3(distance/128, distance/128, distance/128)); - Draw::box(frame.toWorldSpace(icon), rd, Color3::orange(), Color4::clear()); - frame = CoordinateFrame(rd->getCameraToWorldMatrix().rotation, Vector3(pos.x-(max+0.8), pos.y, pos.z)); - icon = Box(Vector3(0-distance/128, 0-distance/128, 0-distance/128), Vector3(distance/128, distance/128, distance/128)); - Draw::box(frame.toWorldSpace(icon), rd, Color3::orange(), Color4::clear()); - frame = CoordinateFrame(rd->getCameraToWorldMatrix().rotation, Vector3(pos.x, pos.y, pos.z-(max+0.8))); - icon = Box(Vector3(0-distance/128, 0-distance/128, 0-distance/128), Vector3(distance/128, distance/128, distance/128)); - Draw::box(frame.toWorldSpace(icon), rd, Color3::orange(), Color4::clear()); rd->setAmbientLightColor(lighting.ambient); rd->setLight(0, GLight::directional(lighting.lightDirection, lighting.lightColor)); } else if(mode == RESIZE) { + //Box box = c.toWorldSpace(Box(from, to)) Color3 sphereColor = outline; rd->setLight(0, NULL); rd->setAmbientLightColor(Color3(1,1,1)); @@ -1318,37 +1302,28 @@ void drawOutline(Vector3 from, Vector3 to, RenderDevice* rd, LightingParameters float multiplier = distance * 0.025F/2; if(multiplier < 0.25F) multiplier = 0.25F; - - Draw::sphere(Sphere(Vector3(pos.x, pos.y + (size.y/2 + 1), pos.z), multiplier), rd, sphereColor, Color4::clear()); - Draw::sphere(Sphere(Vector3(pos.x, pos.y - (size.y/2 + 1), pos.z), multiplier), rd, sphereColor, Color4::clear()); - Draw::sphere(Sphere(Vector3(pos.x + (size.x/2 + 1), pos.y, pos.z), multiplier), rd, sphereColor, Color4::clear()); - Draw::sphere(Sphere(Vector3(pos.x - (size.x/2 + 1), pos.y, pos.z), multiplier), rd, sphereColor, Color4::clear()); - Draw::sphere(Sphere(Vector3(pos.x, pos.y, pos.z + (size.z/2 + 1)), multiplier), rd, sphereColor, Color4::clear()); - Draw::sphere(Sphere(Vector3(pos.x, pos.y, pos.z - (size.z/2 + 1)), multiplier), rd, sphereColor, Color4::clear()); + Vector3 position = pos + (c.lookVector()*((size.z/2)+1)); + Draw::sphere(Sphere(position, multiplier), rd, sphereColor, Color4::clear()); + position = pos - (c.lookVector()*((size.z/2)+1)); + Draw::sphere(Sphere(position, multiplier), rd, sphereColor, Color4::clear()); + + position = pos + (c.rightVector()*((size.x/2)+1)); + Draw::sphere(Sphere(position, multiplier), rd, sphereColor, Color4::clear()); + position = pos - (c.rightVector()*((size.x/2)+1)); + Draw::sphere(Sphere(position, multiplier), rd, sphereColor, Color4::clear()); + + position = pos + (c.upVector()*((size.y/2)+1)); + Draw::sphere(Sphere(position, multiplier), rd, sphereColor, Color4::clear()); + position = pos - (c.upVector()*((size.y/2)+1)); + Draw::sphere(Sphere(position, multiplier), rd, sphereColor, Color4::clear()); + //Draw::sphere(Sphere(Vector3(pos.x, pos.y - (size.y/2 + 1), pos.z), multiplier), rd, sphereColor, Color4::clear()); + //Draw::sphere(Sphere(Vector3(pos.x + (size.x/2 + 1), pos.y, pos.z), multiplier), rd, sphereColor, Color4::clear()); + //Draw::sphere(Sphere(Vector3(pos.x - (size.x/2 + 1), pos.y, pos.z), multiplier), rd, sphereColor, Color4::clear()); + //Draw::sphere(Sphere(Vector3(pos.x, pos.y, pos.z + (size.z/2 + 1)), multiplier), rd, sphereColor, Color4::clear()); + //Draw::sphere(Sphere(Vector3(pos.x, pos.y, pos.z - (size.z/2 + 1)), multiplier), rd, sphereColor, Color4::clear()); } - distance = pow(pow((double)gamepoint.x - (double)camerapoint.x, 2) + pow((double)gamepoint.y - (double)camerapoint.y, 2) + pow((double)gamepoint.z - (double)camerapoint.z, 2), 0.5); - if(distance < 0) - distance = distance*-1; - CoordinateFrame frame = CoordinateFrame(rd->getCameraToWorldMatrix().rotation, Vector3(pos.x, pos.y+size.y/2+1, pos.z)); - Box icon = Box(Vector3(0-distance/128, 0-distance/128, 0-distance/128), Vector3(distance/128, distance/128, distance/128)); - Draw::box(frame.toWorldSpace(icon), rd, sphereColor, Color4::clear()); - frame = CoordinateFrame(rd->getCameraToWorldMatrix().rotation, Vector3(pos.x+size.x/2+1, pos.y, pos.z)); - icon = Box(Vector3(0-distance/128, 0-distance/128, 0-distance/128), Vector3(distance/128, distance/128, distance/128)); - Draw::box(frame.toWorldSpace(icon), rd, sphereColor , Color4::clear()); - frame = CoordinateFrame(rd->getCameraToWorldMatrix().rotation, Vector3(pos.x, pos.y, pos.z+(size.z/2+1))); - icon = Box(Vector3(0-distance/128, 0-distance/128, 0-distance/128), Vector3(distance/128, distance/128, distance/128)); - Draw::box(frame.toWorldSpace(icon), rd, sphereColor, Color4::clear()); - frame = CoordinateFrame(rd->getCameraToWorldMatrix().rotation, Vector3(pos.x, pos.y-(size.y/2+1), pos.z)); - icon = Box(Vector3(0-distance/128, 0-distance/128, 0-distance/128), Vector3(distance/128, distance/128, distance/128)); - Draw::box(frame.toWorldSpace(icon), rd, sphereColor, Color4::clear()); - frame = CoordinateFrame(rd->getCameraToWorldMatrix().rotation, Vector3(pos.x-(size.x/2+1), pos.y, pos.z)); - icon = Box(Vector3(0-distance/128, 0-distance/128, 0-distance/128), Vector3(distance/128, distance/128, distance/128)); - Draw::box(frame.toWorldSpace(icon), rd, sphereColor, Color4::clear()); - frame = CoordinateFrame(rd->getCameraToWorldMatrix().rotation, Vector3(pos.x, pos.y, pos.z-(size.z/2+1))); - icon = Box(Vector3(0-distance/128, 0-distance/128, 0-distance/128), Vector3(distance/128, distance/128, distance/128)); - Draw::box(frame.toWorldSpace(icon), rd, sphereColor, Color4::clear()); rd->setAmbientLightColor(lighting.ambient); rd->setLight(0, GLight::directional(lighting.lightDirection, lighting.lightColor)); } From 5232d5e97f931b85573c04ef9f46dfb939019804 Mon Sep 17 00:00:00 2001 From: andreja6 Date: Tue, 1 May 2018 23:56:32 -0700 Subject: [PATCH 44/49] No longer exit on audio failure --- AudioPlayer.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/AudioPlayer.cpp b/AudioPlayer.cpp index 92556c1..5c5e595 100644 --- a/AudioPlayer.cpp +++ b/AudioPlayer.cpp @@ -32,7 +32,6 @@ void AudioPlayer::init() /* Open the audio device and start playing sound! */ if ( SDL_OpenAudio(&fmt, NULL) < 0 ) { fprintf(stderr, "Unable to open audio: %s\n", SDL_GetError()); - exit(1); } SDL_PauseAudio(0); } From 4b580ef5adba195e34cdbdc78953a1cd5ce50b55 Mon Sep 17 00:00:00 2001 From: willemsteller Date: Wed, 2 May 2018 09:47:53 +0200 Subject: [PATCH 45/49] Added part dragging --- main.cpp | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/main.cpp b/main.cpp index 07e6b4d..247f378 100644 --- a/main.cpp +++ b/main.cpp @@ -66,6 +66,7 @@ static const int CURSOR = 0; static const int ARROWS = 1; static const int RESIZE = 2; static int mode = CURSOR; +bool dragging = false; Vector3 cameraPos = Vector3(0,2,10); Vector2 oldMouse = Vector2(0,0); float moveRate = 0.5; @@ -1140,6 +1141,9 @@ void Demo::onUserInput(UserInput* ui) { { nearest=time; selectedInstance = test; + //message = "Dragging = true."; + //messageTime = System::time(); + dragging = true; } } } @@ -1154,7 +1158,11 @@ void Demo::onUserInput(UserInput* ui) { if(ui->keyReleased(SDL_LEFT_MOUSE_KEY)) { + dragging = false; + //message = "Dragging = false."; + //messageTime = System::time(); std::vector instances_2D = dataModel->getGuiRoot()->getAllChildren(); + std::vector instances = dataModel->getWorkspace()->getAllChildren(); for(size_t i = 0; i < instances_2D.size(); i++) { if(instances_2D.at(i)->getClassName() == "TextButton" || instances_2D.at(i)->getClassName() == "ImageButton") @@ -1168,6 +1176,33 @@ 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()); + std::vector instances = dataModel->getWorkspace()->getAllChildren(); + for(size_t i = 0; i < instances.size(); i++) + { + if(instances.at(i)->getClassName() == "Part") + { + PhysicalInstance* moveTo = (PhysicalInstance*)instances.at(i); + float __time = testRay.intersectionTime(moveTo->getBox()); + float __nearest=std::numeric_limits::infinity(); + if (__time != inf()) + { + if (__nearest>__time) + { + Vector3 closest = (dragRay.closestPoint(moveTo->getPosition()) * 2); + part->setPosition(closest); + //part->setPosition(Vector3(floor(closest.x),part->getPosition().y,floor(closest.z))); + } + } + } + } + Sleep(10); + } + } + //readMouseGUIInput(); // Add other key handling here From e04f53c071b8cd8483d9ceb5dc0cf22c914fe8e8 Mon Sep 17 00:00:00 2001 From: andreja6 Date: Wed, 2 May 2018 16:47:14 -0700 Subject: [PATCH 46/49] Changed how buttons render --- BaseButtonInstance.cpp | 9 +++++++++ BaseButtonInstance.h | 1 + DataModelInstance.cpp | 7 +++++++ DataModelInstance.h | 3 +++ G3DTest.vcproj | 8 ++++++++ Globals.cpp | 12 ++++++++++++ Globals.h | 10 ++++++++++ main.cpp | 37 +++++++++++++++++++------------------ 8 files changed, 69 insertions(+), 18 deletions(-) create mode 100644 Globals.cpp create mode 100644 Globals.h 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) From 29dad6bd8d5d935b5ba7d810c2f091575f87d0ec Mon Sep 17 00:00:00 2001 From: andreja6 Date: Wed, 2 May 2018 17:04:36 -0700 Subject: [PATCH 47/49] Cleaned up useless code and comments --- Globals.cpp | 1 + main.cpp | 418 ++++++++++++++-------------------------------------- 2 files changed, 112 insertions(+), 307 deletions(-) diff --git a/Globals.cpp b/Globals.cpp index 3652356..6d2fde1 100644 --- a/Globals.cpp +++ b/Globals.cpp @@ -2,6 +2,7 @@ DataModelInstance* Globals::dataModel = NULL; + Globals::Globals(void) { diff --git a/main.cpp b/main.cpp index afc9407..878d934 100644 --- a/main.cpp +++ b/main.cpp @@ -73,11 +73,6 @@ Vector2 oldMouse = Vector2(0,0); float moveRate = 0.5; Instance* selectedInstance = NULL; - - - - - class Demo : public GApplet { public: @@ -170,10 +165,6 @@ Demo::Demo(App* _app) : GApplet(_app), app(_app) { void clearInstances() { - //for(size_t i = 0; i < instances.size(); i++) - //{ - // delete instances.at(i); - //} delete dataModel; } @@ -183,7 +174,6 @@ void OnError(int err, std::string msg = "") usableApp->window()->setMouseVisible(true); std::string emsg = "An unexpected error has occured and DUOM 5 has to quit. We're sorry!" + msg; clearInstances(); - //DialogBox(NULL, MAKEINTRESOURCE(IDD_DIALOG1), NULL, NULL); MessageBox(NULL, emsg.c_str(),"Dynamica Crash", MB_OK); exit(err); } @@ -221,15 +211,12 @@ std::string Convert (float number){ PhysicalInstance* makePart() { PhysicalInstance* part = new PhysicalInstance(); -// instances.push_back(part); return part; } TextButtonInstance* makeTextButton() { TextButtonInstance* part = new TextButtonInstance(); -// instances.push_back(part); -// instances_2D.push_back(part); return part; } @@ -713,7 +700,6 @@ void Demo::onInit() { test->setSize(Vector3(24,1,24)); test->setPosition(Vector3(0,0,0)); test->setCFrame(test->getCFrame() * Matrix3::fromEulerAnglesXYZ(0,toRadians(40),toRadians(40))); - //selectedInstance = test; @@ -843,10 +829,10 @@ void Demo::onNetwork() { } -double getVectorDistance(Vector3 vector1, Vector3 vector2) -{ - 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); -} +//double getVectorDistance(Vector3 vector1, Vector3 vector2) +//{ +// 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); +//} void Demo::onSimulation(RealTime rdt, SimTime sdt, SimTime idt) { if(dataModel->name != title) @@ -903,49 +889,6 @@ void Demo::onSimulation(RealTime rdt, SimTime sdt, SimTime idt) { newFrame.lookAt(focus); app->debugController.setCoordinateFrame(newFrame); - /*Vector3 camerapoint = frame.translation; - Vector3 focalPoint = camerapoint + frame.lookVector() * 25; - - - float distb = getVectorDistance(Vector3(focalPoint.x, camerapoint.y, focalPoint.z), Vector3(camerapoint.x, camerapoint.y, focalPoint.z)); - float distc = abs(((float)getVectorDistance(Vector3(focalPoint.x, camerapoint.y, focalPoint.z), camerapoint))); - - - - - float angle = atan2(camerapoint.z - focalPoint.z, focalPoint.x - camerapoint.x); - - - //message = Convert(angle); - messageTime = System::time(); - //frame.rotation.toEulerAnglesXYZ(x, angle, z); - //angle = toDegrees(angle); - -// if(camerapoint.z < focalPoint.z) -// { -// float angleadd = abs(angle - 90); -// angle = angleadd + 5 + 90; -// } -// else -// { -// angle = angle + 5; -// } - - - - messageTime = System::time(); - - //abs(((float)(getVectorDistance(Vector3(focalPoint.x, camerapoint.y, focalPoint.z), camerapoint)))); - float x = distc * cos(angle + toRadians(2)) + focalPoint.x; - float z = distc * sin(angle + toRadians(2)) + focalPoint.z; - message = "NOT 0, " + Convert(toDegrees(angle)) + ", " + Convert(toDegrees(angle + toRadians(2))); - //camerapoint = Vector3(sin(angle)*distc,camerapoint.y,cos(angle)*distc); - camerapoint = Vector3(x,camerapoint.y,z); - CoordinateFrame newFrame = CoordinateFrame(camerapoint); - newFrame.lookAt(focalPoint); - cameraPos = camerapoint; - app->debugController.setCoordinateFrame(newFrame);*/ - } if(panLeft) { @@ -983,13 +926,7 @@ void Demo::onSimulation(RealTime rdt, SimTime sdt, SimTime idt) { } - -//void readMouseGUIInput() -//{ - -//} - -double getOSVersion() { +/*double getOSVersion() { OSVERSIONINFO osvi; ZeroMemory(&osvi, sizeof(OSVERSIONINFO)); @@ -998,7 +935,7 @@ double getOSVersion() { GetVersionEx(&osvi); std::string version = Convert(osvi.dwMajorVersion) + "." + Convert(osvi.dwMinorVersion); return ::atof(version.c_str()); -} +}*/ //User Input void Demo::onUserInput(UserInput* ui) { @@ -1066,25 +1003,12 @@ void Demo::onUserInput(UserInput* ui) { app->setDebugMode(!app->debugMode()); } } - if(ui->keyDown(SDLK_LCTRL)) - { - if(ui->keyPressed('v')) - { - messageTime = System::time(); - message = Convert(getOSVersion()); - } - } - if(ui->keyPressed(SDLK_F8)) - { - //index++; - //if(index >= 7) - //{ - // index = 0; - //} - messageTime = System::time(); - message = "FPS has been locked at " + Convert(FPSVal[index]); + //if(ui->keyPressed(SDLK_F8)) + //{ + // messageTime = System::time(); + // message = "FPS has been locked at " + Convert(FPSVal[index]); //setDesiredFrameRate(FPSVal[index]); - } + //} dataModel->mousex = ui->getMouseX(); dataModel->mousey = ui->getMouseY(); dataModel->mouseButton1Down = ui->keyDown(SDL_LEFT_MOUSE_KEY); @@ -1216,7 +1140,6 @@ void makeFlag(Vector3 &vec, RenderDevice* &rd) { Vector3 up = Vector3(vec.x, vec.y+3, vec.z); - //Draw::lineSegment(G3D::LineSegment::fromTwoPoints(vec, up), rd, Color3::blue(), 3); rd->setColor(Color3::blue()); rd->beforePrimitive(); @@ -1260,23 +1183,11 @@ bool mouseInArea(float point1x, float point1y, float point2x, float point2y) void drawButtons(RenderDevice* rd) { 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(dataModel->mousex, dataModel->mousey), dataModel->mouseButton1Down); - } - }*/ } void drawOutline(Vector3 from, Vector3 to, RenderDevice* rd, LightingParameters lighting, Vector3 size, Vector3 pos, CoordinateFrame c) { - - //rd->setLight(0, NULL); - //rd->setAmbientLightColor(Color3(1,1,1)); + Color3 outline = Color3::cyan();//Color3(0.098F,0.6F,1.0F); float offsetSize = 0.05F; //X @@ -1325,7 +1236,6 @@ void drawOutline(Vector3 from, Vector3 to, RenderDevice* rd, LightingParameters } else if(mode == RESIZE) { - //Box box = c.toWorldSpace(Box(from, to)) Color3 sphereColor = outline; rd->setLight(0, NULL); rd->setAmbientLightColor(Color3(1,1,1)); @@ -1352,13 +1262,6 @@ void drawOutline(Vector3 from, Vector3 to, RenderDevice* rd, LightingParameters Draw::sphere(Sphere(position, multiplier), rd, sphereColor, Color4::clear()); position = pos - (c.upVector()*((size.y/2)+1)); Draw::sphere(Sphere(position, multiplier), rd, sphereColor, Color4::clear()); - //Draw::sphere(Sphere(Vector3(pos.x, pos.y - (size.y/2 + 1), pos.z), multiplier), rd, sphereColor, Color4::clear()); - //Draw::sphere(Sphere(Vector3(pos.x + (size.x/2 + 1), pos.y, pos.z), multiplier), rd, sphereColor, Color4::clear()); - //Draw::sphere(Sphere(Vector3(pos.x - (size.x/2 + 1), pos.y, pos.z), multiplier), rd, sphereColor, Color4::clear()); - //Draw::sphere(Sphere(Vector3(pos.x, pos.y, pos.z + (size.z/2 + 1)), multiplier), rd, sphereColor, Color4::clear()); - //Draw::sphere(Sphere(Vector3(pos.x, pos.y, pos.z - (size.z/2 + 1)), multiplier), rd, sphereColor, Color4::clear()); - - } rd->setAmbientLightColor(lighting.ambient); rd->setLight(0, GLight::directional(lighting.lightDirection, lighting.lightColor)); @@ -1372,35 +1275,9 @@ void Demo::exitApplication() app->endProgram = true; } -void makeBeveledBox(Box box, RenderDevice* rd, Color4 color, CoordinateFrame cFrame) -{ - Vector3 v0, v1, v2, v3; - //glDiffuse(); - rd->setColor(color); - rd->setObjectToWorldMatrix(CoordinateFrame()); - rd->beginPrimitive(RenderDevice::QUADS); - for (int f = 0; f < 6; ++f) { - box.getFaceCorners(f, v0, v1, v2, v3); - glShadeModel(GL_SMOOTH); - //rd->setNormal((v1 - v0).cross(v3 - v0).direction()); - rd->sendVertex(v0); - rd->sendVertex(v1); - rd->sendVertex(v2); - rd->sendVertex(v3); - } - rd->setColor(Color3::white()); - rd->endPrimitive(); -} - void Demo::onGraphics(RenderDevice* rd) { - float angle, x, z; - app->debugCamera.getCoordinateFrame().rotation.toEulerAnglesXYZ(x, angle, z); - //message = Convert(toDegrees(angle)) + " X: " + Convert(app->debugCamera.getCoordinateFrame().translation.x) + " Z: " + Convert(app->debugCamera.getCoordinateFrame().translation.z); - //messageTime = System::time(); - - CoordinateFrame frame = CoordinateFrame(app->debugCamera.getCoordinateFrame().rotation, app->debugCamera.getCoordinateFrame().translation); Vector2 mousepos = Vector2(0,0); G3D::uint8 num = 0; rd->window()->getRelativeMouseState(mousepos, num); @@ -1425,7 +1302,7 @@ void Demo::onGraphics(RenderDevice* rd) { // Cyan background - app->renderDevice->setColorClearValue(Color3(0.0f, 0.5f, 1.0f)); + //app->renderDevice->setColorClearValue(Color3(0.0f, 0.5f, 1.0f)); app->renderDevice->clear(app->sky.isNull(), true, true); if (app->sky.notNull()) { @@ -1439,16 +1316,11 @@ void Demo::onGraphics(RenderDevice* rd) { app->renderDevice->setShadeMode(RenderDevice::SHADE_SMOOTH); app->renderDevice->setAmbientLightColor(Color3(1,1,1)); - //Draw::axes(CoordinateFrame(Vector3(0, 0, 0)), app->renderDevice); - //makeFlag(Vector3(-1, 3.5, 0), rd); - - //Vector3 vector = app->debugCamera.getCoordinateFrame().translation + app->debugCamera.getCoordinateFrame().lookVector()*20; app->renderDevice->setLight(0, GLight::directional(lighting.lightDirection, lighting.lightColor)); app->renderDevice->setAmbientLightColor(lighting.ambient); - //app->renderDevice->pushState(); - //app->renderDevice->popState(); + dataModel->getWorkspace()->render(rd); if(selectedInstance != NULL) { @@ -1457,40 +1329,18 @@ void Demo::onGraphics(RenderDevice* rd) { Vector3 pos = part->getPosition(); drawOutline(Vector3(0+size.x/4, 0+size.y/4, 0+size.z/4) ,Vector3(0-size.x/4,0-size.y/4,0-size.z/4), rd, lighting, Vector3(size.x/2, size.y/2, size.z/2), Vector3(pos.x/2, pos.y/2, pos.z/2), part->getCFrameRenderBased()); } - /*std::vector instances = dataModel->getWorkspace()->getAllChildren(); - for(size_t i = 0; i < instances.size(); i++) - { - Instance* instance = instances.at(i); - if(instance->getClassName() == "Part") - { - instance->render(rd); - PhysicalInstance* part = (PhysicalInstance*)instance; - //part->render(rd); - //Draw::box(part->getBox(), app->renderDevice, part->color, Color4::clear()); - if(selectedInstance == part) - { - Vector3 size = part->getSize(); - Vector3 pos = part->getCFrame().translation; - drawOutline(Vector3(0+size.x/4, 0+size.y/4, 0+size.z/4) ,Vector3(0-size.x/4,0-size.y/4,0-size.z/4), rd, lighting, Vector3(size.x/2, size.y/2, size.z/2), Vector3(pos.x/2, pos.y/2, pos.z/2), part->getCFrameRenderBased()); - } - - } - - } - Box box;*/ - //Draw::ray(testRay, rd, Color3::orange(), 1); - Vector3 gamepoint = Vector3(0, 5, 0); - Vector3 camerapoint = rd->getCameraToWorldMatrix().translation; - float distance = pow(pow((double)gamepoint.x - (double)camerapoint.x, 2) + pow((double)gamepoint.y - (double)camerapoint.y, 2) + pow((double)gamepoint.z - (double)camerapoint.z, 2), 0.5); - if(distance < 50 && distance > -50) + //Vector3 gamepoint = Vector3(0, 5, 0); + //Vector3 camerapoint = rd->getCameraToWorldMatrix().translation; + //float distance = pow(pow((double)gamepoint.x - (double)camerapoint.x, 2) + pow((double)gamepoint.y - (double)camerapoint.y, 2) + pow((double)gamepoint.z - (double)camerapoint.z, 2), 0.5); + //if(distance < 50 && distance > -50) - { - if(distance < 0) - distance = distance*-1; - fntdominant->draw3D(rd, "Testing", CoordinateFrame(rd->getCameraToWorldMatrix().rotation, gamepoint), 0.04*distance, Color3::yellow(), Color3::black(), G3D::GFont::XALIGN_CENTER, G3D::GFont::YALIGN_CENTER); - } + //{ + // if(distance < 0) + // distance = distance*-1; + // fntdominant->draw3D(rd, "Testing", CoordinateFrame(rd->getCameraToWorldMatrix().rotation, gamepoint), 0.04*distance, Color3::yellow(), Color3::black(), G3D::GFont::XALIGN_CENTER, G3D::GFont::YALIGN_CENTER); + //} app->renderDevice->disableLighting(); @@ -1499,13 +1349,7 @@ void Demo::onGraphics(RenderDevice* rd) { } app->renderDevice->push2D(); - //std::string str = ; - int offset = 25; - if(app->debugMode()) - { - offset = 60; - } if(System::time() - 3 < messageTime) { @@ -1514,39 +1358,21 @@ void Demo::onGraphics(RenderDevice* rd) { std::stringstream stream; stream << std::fixed << std::setprecision(1) << dataModel->getWorkspace()->timer; - fntdominant->draw2D(rd, "Timer: " + stream.str(), Vector2(rd->getWidth() - 120, 0+offset), 20, Color3::fromARGB(0x81C518), Color3::black()); - fntdominant->draw2D(rd, "Score: " + Convert(dataModel->getWorkspace()->score), Vector2(rd->getWidth() - 120, 25+offset), 20, Color3::fromARGB(0x81C518), Color3::black()); + fntdominant->draw2D(rd, "Timer: " + stream.str(), Vector2(rd->getWidth() - 120, 25), 20, Color3::fromARGB(0x81C518), Color3::black()); + fntdominant->draw2D(rd, "Score: " + Convert(dataModel->getWorkspace()->score), Vector2(rd->getWidth() - 120, 50), 20, Color3::fromARGB(0x81C518), Color3::black()); //GUI Boxes - Draw::box(G3D::Box(Vector3(0,offset,0),Vector3(80,330+offset,0)),rd,Color4(0.6F,0.6F,0.6F,0.4F), Color4(0,0,0,0)); - //Draw::box(G3D::Box(Vector3(0,rd->getHeight() - 120,0),Vector3(80,rd->getHeight(),0)),rd,Color4(0.6F,0.6F,0.6F,0.4F), Color4(0,0,0,0)); + Draw::box(G3D::Box(Vector3(0,25,0),Vector3(80,355,0)),rd,Color4(0.6F,0.6F,0.6F,0.4F), Color4(0,0,0,0)); Draw::box(G3D::Box(Vector3(rd->getWidth() - 120,rd->getHeight() - 120,0),Vector3(rd->getWidth(),rd->getHeight(),0)),rd,Color4(0.6F,0.6F,0.6F,0.4F), Color4(0,0,0,0)); - //Camera menu title - - - fntlighttrek->draw2D(rd, "CameraMenu", Vector2(rd->getWidth()-(fntlighttrek->get2DStringBounds("CameraMenu", 14).x+1),rd->getHeight() - 120), 14, Color3::white(), Color4(0.5F,0.5F,0.5F,0.5F)); - - /* - fntlighttrek->draw2D(rd, "Model", Vector2(10,rd->getHeight() - (120 - spacing*0)), 12, Color3(0,255,255), Color4(0,0,0,0)); - fntlighttrek->draw2D(rd, "Surface", Vector2(10,rd->getHeight() - (120 - spacing*1)), 12, Color3(0,255,255), Color4(0,0,0,0)); - fntlighttrek->draw2D(rd, "Color", Vector2(10,rd->getHeight() - (120 - spacing*2)), 12, Color3(0,255,255), Color4(0,0,0,0)); - fntlighttrek->draw2D(rd, "Controller", Vector2(10,rd->getHeight() - (120 - spacing*3)), 12, Color3(0,255,255), Color4(0,0,0,0)); - fntlighttrek->draw2D(rd, "Hopper", Vector2(10,rd->getHeight() - (120 - spacing*4)), 12, Color3(0,255,255), Color4(0,0,0,0)); - */ - - //Tools menu - Draw::box(G3D::Box(Vector3(5, 185+offset,0),Vector3(75, 185+offset,0)),rd,Color4(0.6F,0.6F,0.6F,0.4F), Color4(0.6F,0.6F,0.6F,0.4F)); - fntlighttrek->draw2D(rd,"MENU", Vector2(10,307+offset), 14, Color3::white(), Color4(0.5F,0.5F,0.5F,0.5F)); - //G3D::GFont::draw2D("Debug Mode Enabled", Vector2(0,30), 20, Color3::white(), Color3::black()); - //app->debugFont->draw2D("Dynamica 2004-2005 Simulation Client version " + VERSION + str, Vector2(0,0), 20, Color3::white(), Color3::black()); - //app->debugFont->draw2D("Debug Mode Enabled", Vector2(0,30), 20, Color3::white(), Color3::black()); + Draw::box(G3D::Box(Vector3(5, 210,0),Vector3(75, 210,0)),rd,Color4(0.6F,0.6F,0.6F,0.4F), Color4(0.6F,0.6F,0.6F,0.4F)); + fntlighttrek->draw2D(rd,"MENU", Vector2(10,332), 14, Color3::white(), Color4(0.5F,0.5F,0.5F,0.5F)); drawButtons(rd); @@ -1615,12 +1441,6 @@ void App::main() { applet->run(); } - - -//App::App(const GAppSettings& settings, GWindow* wnd) : GApp(settings, wnd) { -// applet = new Demo(this); -//} - App::App(const GAppSettings& settings, GWindow* wnd,HWND tempMainHWnd, SDLWindow* wndSDL) : GApp(settings, wnd) { applet = new Demo(this); hwnd = wndSDL->win32HWND(); @@ -1651,9 +1471,7 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) HWND g3DWind = app->getHWND(); app->applet->exitApplication(); - //DestroyWindow(hwnd); } - //DestroyWindow(hwnd); break; case WM_DESTROY: PostQuitMessage(0); @@ -1701,109 +1519,95 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) } int main(int argc, char** argv) { - //_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); - //_CrtSetBreakAlloc(1279); try{ tempPath = ((std::string)getenv("temp")) + "/Dynamica"; - CreateDirectory(tempPath.c_str(), NULL); - - message = tempPath; - messageTime = System::time(); - AudioPlayer::init(); - GAppSettings settings; - settings.window.resizable = true; - //settings.window.fsaaSamples = 8; - settings.writeLicenseFile = false; - settings.logFilename = tempPath + "/g3dlog.txt"; - settings.window.center = true; - //Using the damned SDL window now - G3D::SDLWindow* wnd = new SDLWindow(settings.window); - //wnd->setInputCaptureCount(200); - wnd->setMouseVisible(false); - + CreateDirectory(tempPath.c_str(), NULL); + + message = tempPath; + messageTime = System::time(); + AudioPlayer::init(); + GAppSettings settings; + settings.window.resizable = true; + settings.writeLicenseFile = false; + settings.logFilename = tempPath + "/g3dlog.txt"; + settings.window.center = true; + G3D::SDLWindow* wnd = new SDLWindow(settings.window); + wnd->setMouseVisible(false); + - WNDCLASSEX wc; - HINSTANCE hInstance = GetModuleHandle(NULL); - wc.cbSize = sizeof(WNDCLASSEX); - wc.style = 0; - wc.lpfnWndProc = WndProc; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - wc.hInstance = hInstance; - wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); - wc.hCursor = LoadCursor(NULL, IDC_ARROW); - wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); - wc.lpszMenuName = NULL; - wc.lpszClassName = "containerHWND"; - wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); - - if (!RegisterClassEx (&wc)) - return false; + WNDCLASSEX wc; + HINSTANCE hInstance = GetModuleHandle(NULL); + wc.cbSize = sizeof(WNDCLASSEX); + wc.style = 0; + wc.lpfnWndProc = WndProc; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + wc.hInstance = hInstance; + wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); + wc.hCursor = LoadCursor(NULL, IDC_ARROW); + wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); + wc.lpszMenuName = NULL; + wc.lpszClassName = "containerHWND"; + wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); + + if (!RegisterClassEx (&wc)) + return false; - HMODULE hThisInstance = GetModuleHandle(NULL); - HWND hwnd = wnd->win32HWND(); - HWND hwndMain = CreateWindowEx( - WS_EX_ACCEPTFILES | WS_EX_CLIENTEDGE, - "containerHWND", - "Main test", - WS_OVERLAPPEDWINDOW, - CW_USEDEFAULT, - CW_USEDEFAULT, - 800, - 600, - NULL, // parent - NULL, // menu - hThisInstance, - NULL - ); - ShowWindow(hwndMain, SW_SHOW); - if(hwndMain == NULL) - { - MessageBox(NULL, "Failed to create HWND","Dynamica Crash", MB_OK); - return 0; - } - SetParent(hwnd, hwndMain); - App app = App(settings, wnd, hwndMain, wnd); - RECT rect; - int width = 640; - int height = 480; - if(GetClientRect(hwndMain, &rect)) - { - width = rect.right - rect.left; - height = rect.bottom - rect.top; - } - SetWindowPos(hwnd, NULL, 0, 0, width, height, NULL); - - LONG lStyle = GetWindowLong(hwnd, GWL_STYLE); - lStyle &= ~(WS_CAPTION | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_SYSMENU); - SetWindowLong(hwnd, GWL_STYLE, lStyle); + HMODULE hThisInstance = GetModuleHandle(NULL); + HWND hwnd = wnd->win32HWND(); + HWND hwndMain = CreateWindowEx( + WS_EX_ACCEPTFILES | WS_EX_CLIENTEDGE, + "containerHWND", + "Main test", + WS_OVERLAPPEDWINDOW, + CW_USEDEFAULT, + CW_USEDEFAULT, + 800, + 600, + NULL, // parent + NULL, // menu + hThisInstance, + NULL + ); + ShowWindow(hwndMain, SW_SHOW); + if(hwndMain == NULL) + { + MessageBox(NULL, "Failed to create HWND","Dynamica Crash", MB_OK); + return 0; + } + SetParent(hwnd, hwndMain); + App app = App(settings, wnd, hwndMain, wnd); + RECT rect; + int width = 640; + int height = 480; + if(GetClientRect(hwndMain, &rect)) + { + width = rect.right - rect.left; + height = rect.bottom - rect.top; + } + SetWindowPos(hwnd, NULL, 0, 0, width, height, NULL); + + LONG lStyle = GetWindowLong(hwnd, GWL_STYLE); + lStyle &= ~(WS_CAPTION | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_SYSMENU); + SetWindowLong(hwnd, GWL_STYLE, lStyle); - LONG lExStyle = GetWindowLong(hwnd, GWL_EXSTYLE); - lExStyle &= ~(WS_EX_DLGMODALFRAME | WS_EX_CLIENTEDGE | WS_EX_STATICEDGE); - SetWindowLong(hwnd, GWL_EXSTYLE, lExStyle); - - //SetWindowLong(hwnd, GWL_STYLE, WS_VISIBLE | WS_CHILD); - SetWindowLongPtr(hwndMain, GWL_USERDATA, (LONG)&app); - HICON hicon = (HICON)LoadImage(GetModuleHandleW(NULL), (LPCSTR)MAKEINTRESOURCEW(IDI_ICON1), IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR | LR_DEFAULTSIZE); - SendMessage(hwndMain, WM_SETICON, ICON_BIG, (LPARAM)hicon); - - - - SetWindowPos(hwndMain, NULL, 0, 0, 800, 600, NULL); - - - if(GetClientRect(hwndMain, &rect)) - { - width = rect.right - rect.left; - height = rect.bottom - rect.top; - } - SetWindowPos(hwnd, NULL, 0, 0, width, height, NULL); - - //message = Convert(widthMON) + ", " + Convert(heightMON); - //messageTime = G3D::System::time(); - - app.run(); + LONG lExStyle = GetWindowLong(hwnd, GWL_EXSTYLE); + lExStyle &= ~(WS_EX_DLGMODALFRAME | WS_EX_CLIENTEDGE | WS_EX_STATICEDGE); + SetWindowLong(hwnd, GWL_EXSTYLE, lExStyle); + SetWindowLongPtr(hwndMain, GWL_USERDATA, (LONG)&app); + HICON hicon = (HICON)LoadImage(GetModuleHandleW(NULL), (LPCSTR)MAKEINTRESOURCEW(IDI_ICON1), IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR | LR_DEFAULTSIZE); + SendMessage(hwndMain, WM_SETICON, ICON_BIG, (LPARAM)hicon); + SetWindowPos(hwndMain, NULL, 0, 0, 800, 600, NULL); + + + if(GetClientRect(hwndMain, &rect)) + { + width = rect.right - rect.left; + height = rect.bottom - rect.top; + } + SetWindowPos(hwnd, NULL, 0, 0, width, height, NULL); + app.run(); } catch(...) { From 4fea98467d46bffaf8ab91a6949dba77a0d4f4a9 Mon Sep 17 00:00:00 2001 From: andreja6 Date: Wed, 2 May 2018 17:09:18 -0700 Subject: [PATCH 48/49] Added versioning --- Globals.cpp | 5 ++++- Globals.h | 4 ++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Globals.cpp b/Globals.cpp index 6d2fde1..0d56133 100644 --- a/Globals.cpp +++ b/Globals.cpp @@ -1,7 +1,10 @@ #include "Globals.h" DataModelInstance* Globals::dataModel = NULL; - +int const Globals::gen = 0; +int const Globals::major = 0; +int const Globals::minor = 4; +int const Globals::patch = 2; Globals::Globals(void) { diff --git a/Globals.h b/Globals.h index 78ca48c..8c6e277 100644 --- a/Globals.h +++ b/Globals.h @@ -7,4 +7,8 @@ public: Globals(void); ~Globals(void); static DataModelInstance* dataModel; + static const int gen; + static const int major; + static const int minor; + static const int patch; }; \ No newline at end of file From 512655b4481e9e4b8bcf3c1a5d09743ce5a5178a Mon Sep 17 00:00:00 2001 From: andreja6 Date: Wed, 2 May 2018 17:10:29 -0700 Subject: [PATCH 49/49] Changed spacing --- Globals.cpp | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/Globals.cpp b/Globals.cpp index 0d56133..3cc0e67 100644 --- a/Globals.cpp +++ b/Globals.cpp @@ -6,11 +6,6 @@ int const Globals::major = 0; int const Globals::minor = 4; int const Globals::patch = 2; -Globals::Globals(void) -{ +Globals::Globals(void){} -} - -Globals::~Globals(void) -{ -} \ No newline at end of file +Globals::~Globals(void){}