From 0ac516618a471b82b7ddc0177d822b6cb2284eb5 Mon Sep 17 00:00:00 2001
From: Modnark <66146584+Modnark@users.noreply.github.com>
Date: Wed, 12 Oct 2022 13:47:39 -0400
Subject: [PATCH] Add LightingInstance
Still need to work on PropertyGrid for it
---
Blocks3D.vcproj | 8 +
ThumbnailGeneratorInstance.cpp | 2 +-
src/include/Application.h | 4 -
src/include/DataModelV2/DataModelInstance.h | 4 +-
src/include/DataModelV2/LightingInstance.h | 44 ++++
src/source/Application.cpp | 146 +----------
src/source/DataModelV2/DataModelInstance.cpp | 13 +
src/source/DataModelV2/LevelInstance.cpp | 1 +
src/source/DataModelV2/LightingInstance.cpp | 260 +++++++++++++++++++
src/source/DataModelV2/PartInstance.cpp | 6 +-
10 files changed, 338 insertions(+), 150 deletions(-)
create mode 100644 src/include/DataModelV2/LightingInstance.h
create mode 100644 src/source/DataModelV2/LightingInstance.cpp
diff --git a/Blocks3D.vcproj b/Blocks3D.vcproj
index c123448..5634c0d 100644
--- a/Blocks3D.vcproj
+++ b/Blocks3D.vcproj
@@ -457,6 +457,10 @@
/>
+
+
@@ -874,6 +878,10 @@
RelativePath=".\src\include\DataModelV2\LevelInstance.h"
>
+
+
diff --git a/ThumbnailGeneratorInstance.cpp b/ThumbnailGeneratorInstance.cpp
index 209cc76..b2c078f 100644
--- a/ThumbnailGeneratorInstance.cpp
+++ b/ThumbnailGeneratorInstance.cpp
@@ -39,7 +39,7 @@ std::string ThumbnailGeneratorInstance::click(std::string fileType, int cx, int
g_usableApp->resize3DView(cx, cy);
if(hideSky)
- g_usableApp->toggleSky();
+ g_dataModel->getLighting()->suppressSky(true);
g_usableApp->onGraphics(rd);
rd->screenshotPic(imgBuffer, true, hideSky);
diff --git a/src/include/Application.h b/src/include/Application.h
index d72fd0f..fc84aeb 100644
--- a/src/include/Application.h
+++ b/src/include/Application.h
@@ -48,7 +48,6 @@ class Application { // : public GApp {
int getMode();
void unSetMode();
- void toggleSky();
CameraController cameraController;
UserInput* userInput;
PropertyWindow* _propWindow;
@@ -56,7 +55,6 @@ class Application { // : public GApp {
RenderDevice* getRenderDevice();
void selectInstance(Instance* selectedInstance,PropertyWindow* propWindow);
void setMode(int mode);
- SkyRef getSky();
void resize3DView(int w, int h);
Tool * tool;
@@ -68,7 +66,6 @@ class Application { // : public GApp {
RenderDevice* renderDevice;
//void initGUI();
HWND _hWndMain;
- SkyRef sky;
bool quit;
bool mouseOnScreen;
bool rightButtonHolding;
@@ -85,7 +82,6 @@ class Application { // : public GApp {
GAppSettings _settings;
double lightProjX, lightProjY, lightProjNear, lightProjFar;
IEBrowser* webBrowser;
- bool _hideSky;
protected:
Stopwatch m_graphicsWatch;
Stopwatch m_logicWatch;
diff --git a/src/include/DataModelV2/DataModelInstance.h b/src/include/DataModelV2/DataModelInstance.h
index bae7bd4..aceaf86 100644
--- a/src/include/DataModelV2/DataModelInstance.h
+++ b/src/include/DataModelV2/DataModelInstance.h
@@ -9,6 +9,7 @@
#include "ThumbnailGeneratorInstance.h"
#include "XplicitNgine/XplicitNgine.h"
#include "SoundService.h"
+#include "LightingInstance.h"
// Libraries
#include "rapidxml/rapidxml.hpp"
@@ -36,6 +37,7 @@ public:
XplicitNgine* getEngine();
ThumbnailGeneratorInstance* getThumbnailGenerator();
SoundService* getSoundService();
+ LightingInstance* getLighting();
std::string message;
std::string _loadedFileName;
@@ -69,7 +71,7 @@ private:
ThumbnailGeneratorInstance* thumbnailGenerator;
XplicitNgine* xplicitNgine;
SoundService* soundService;
-
+ LightingInstance* lightingInstance;
bool running;
};
diff --git a/src/include/DataModelV2/LightingInstance.h b/src/include/DataModelV2/LightingInstance.h
new file mode 100644
index 0000000..588b2ad
--- /dev/null
+++ b/src/include/DataModelV2/LightingInstance.h
@@ -0,0 +1,44 @@
+#pragma once
+#include "Instance.h"
+
+class LightingInstance :
+ public Instance
+{
+public:
+ LightingInstance(void);
+ ~LightingInstance(void);
+
+ // Getters
+ G3D::Color3 getTopAmbient();
+ G3D::Color3 getBottomAmbient();
+ G3D::Color3 getSpotLight();
+ G3D::Color4 getClearColor();
+ G3D::SkyRef getSky();
+ G3D::LightingParameters getLightingParameters();
+
+ // Setters
+ void setTopAmbient(G3D::Color3 newValue);
+ void setBottomAmbient(G3D::Color3 newValue);
+ void setSpotLight(G3D::Color3 newValue);
+ void setClearColor(G3D::Color4 clearColor);
+
+ // Functions
+ void drawSky();
+ void suppressSky(bool doSuppress);
+ void update();
+ void drawEffects();
+ void drawOutlines(Vector3 from, Vector3 to, RenderDevice* rd, Vector3 size, Vector3 pos, CoordinateFrame c);
+
+ // Properties
+ void PropUpdate(LPPROPGRIDITEM &pItem);
+ std::vector getProperties();
+
+private:
+ G3D::Color3 topAmbient;
+ G3D::Color3 bottomAmbient;
+ G3D::Color3 spotLight;
+ G3D::Color4 clearColor;
+ G3D::SkyRef sky;
+ G3D::LightingParameters lighting;
+ bool _hideSky;
+};
diff --git a/src/source/Application.cpp b/src/source/Application.cpp
index 0e61e31..9f4818b 100644
--- a/src/source/Application.cpp
+++ b/src/source/Application.cpp
@@ -71,7 +71,6 @@ Application::Application(HWND parentWindow) : _propWindow(NULL) { //: GApp(setti
CreateDirectory(tempPath.c_str(), NULL);
_hWndMain = parentWindow;
- _hideSky = false;
HMODULE hThisInstance = GetModuleHandle(NULL);
@@ -296,7 +295,6 @@ void Application::onInit() {
void Application::onCleanup() {
clearInstances();
- sky->~Sky();
}
void Application::onLogic() {
@@ -409,90 +407,10 @@ int Application::getMode()
return _mode;
}
-
-void Application::drawOutline(Vector3 from, Vector3 to, RenderDevice* rd, LightingParameters lighting, Vector3 size, Vector3 pos, CoordinateFrame c)
-{
- rd->disableLighting();
- Color3 outline = Color3::cyan();
- float offsetSize = 0.05F;
- //X
- Draw::box(c.toWorldSpace(Box(Vector3(from.x - offsetSize, from.y + offsetSize, from.z + offsetSize), Vector3(to.x + offsetSize, from.y - offsetSize, from.z - offsetSize))), rd, outline, Color4::clear());
- Draw::box(c.toWorldSpace(Box(Vector3(from.x - offsetSize, to.y + offsetSize, from.z + offsetSize), Vector3(to.x + offsetSize, to.y - offsetSize, from.z - offsetSize))), rd, outline, Color4::clear());
- Draw::box(c.toWorldSpace(Box(Vector3(from.x - offsetSize, to.y + offsetSize, to.z + offsetSize), Vector3(to.x + offsetSize, to.y - offsetSize, to.z - offsetSize))), rd, outline, Color4::clear());
- Draw::box(c.toWorldSpace(Box(Vector3(from.x - offsetSize, from.y + offsetSize, to.z + offsetSize), Vector3(to.x + offsetSize, from.y - offsetSize, to.z - offsetSize))), rd, outline, Color4::clear());
- //Y
- Draw::box(c.toWorldSpace(Box(Vector3(from.x + offsetSize, from.y - offsetSize + 0.1, from.z + offsetSize), Vector3(from.x - offsetSize, to.y + offsetSize - 0.1, from.z - offsetSize))), rd, outline, Color4::clear());
- Draw::box(c.toWorldSpace(Box(Vector3(to.x + offsetSize, from.y - offsetSize + 0.1, from.z + offsetSize), Vector3(to.x - offsetSize, to.y + offsetSize - 0.1, from.z - offsetSize))), rd, outline, Color4::clear());
- Draw::box(c.toWorldSpace(Box(Vector3(to.x + offsetSize, from.y - offsetSize + 0.1, to.z + offsetSize), Vector3(to.x - offsetSize, to.y + offsetSize-0.1, to.z - offsetSize))), rd, outline, Color4::clear());
- Draw::box(c.toWorldSpace(Box(Vector3(from.x + offsetSize, from.y - offsetSize + 0.1, to.z + offsetSize), Vector3(from.x - offsetSize, to.y + offsetSize - 0.1, to.z - offsetSize))), rd, outline, Color4::clear());
-
- //Z
- Draw::box(c.toWorldSpace(Box(Vector3(from.x + offsetSize, from.y + offsetSize, from.z - offsetSize), Vector3(from.x - offsetSize, from.y - offsetSize, to.z + offsetSize))), rd, outline, Color4::clear());
- Draw::box(c.toWorldSpace(Box(Vector3(from.x + offsetSize, to.y + offsetSize, from.z - offsetSize), Vector3(from.x - offsetSize, to.y - offsetSize, to.z + offsetSize))), rd, outline, Color4::clear());
- Draw::box(c.toWorldSpace(Box(Vector3(to.x + offsetSize, from.y + offsetSize, from.z - offsetSize), Vector3(to.x - offsetSize, from.y - offsetSize, to.z + offsetSize))), rd, outline, Color4::clear());
- Draw::box(c.toWorldSpace(Box(Vector3(to.x + offsetSize, to.y + offsetSize, from.z - offsetSize), Vector3(to.x - offsetSize, to.y - offsetSize, to.z + offsetSize))), rd, outline, Color4::clear());
-
- if(_mode == ARROWS)
- {
-
- 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);
-
-
-
- }
- else if(_mode == RESIZE)
- {
- Color3 sphereColor = outline;
- 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 < 200)
- {
-
- float multiplier = distance * 0.025F/2;
- if(multiplier < 0.25F)
- multiplier = 0.25F;
- Vector3 position = pos + (c.lookVector()*((size.z)+1));
- Draw::sphere(Sphere(position, multiplier), rd, sphereColor, Color4::clear());
- position = pos - (c.lookVector()*((size.z)+1));
- Draw::sphere(Sphere(position, multiplier), rd, sphereColor, Color4::clear());
-
- position = pos + (c.rightVector()*((size.x)+1));
- Draw::sphere(Sphere(position, multiplier), rd, sphereColor, Color4::clear());
- position = pos - (c.rightVector()*((size.x)+1));
- Draw::sphere(Sphere(position, multiplier), rd, sphereColor, Color4::clear());
-
- position = pos + (c.upVector()*((size.y)+1));
- Draw::sphere(Sphere(position, multiplier), rd, sphereColor, Color4::clear());
- position = pos - (c.upVector()*((size.y)+1));
- Draw::sphere(Sphere(position, multiplier), rd, sphereColor, Color4::clear());
- }
- }
- rd->enableLighting();
-}
-
void Application::exitApplication()
{
}
-
-
-
void Application::onGraphics(RenderDevice* rd) {
G3D::uint8 num = 0;
@@ -521,57 +439,11 @@ void Application::onGraphics(RenderDevice* rd) {
ScreenToClient(_hWndMain, &mousepos);
}
- LightingParameters lighting(G3D::toSeconds(2, 00, 00, PM));
- lighting.ambient = Color3(0.6F,0.6F,0.6F);
- renderDevice->setProjectionAndCameraMatrix(*cameraController.getCamera());
+ renderDevice->setProjectionAndCameraMatrix(*cameraController.getCamera());
- // TODO: stick this into its own rendering thing
- if(!_hideSky) {
- renderDevice->clear(sky.isNull(), true, true);
- if (sky.notNull()) sky->render(renderDevice, lighting);
- } else {
- rd->setColorClearValue(Color4(0.0f, 0.0f, 0.0f, 0.0f));
- renderDevice->clear(true, true, true);
- toggleSky();
- }
-
- // Setup lighting
- renderDevice->enableLighting();
+ // Moved a lot of code to lighting
+ g_dataModel->getLighting()->update();
- renderDevice->setShadeMode(RenderDevice::SHADE_SMOOTH);
- renderDevice->setAmbientLightColor(Color3(1,1,1));
-
- renderDevice->setLight(0, GLight::directional(lighting.lightDirection, lighting.lightColor, true, true));
- renderDevice->setAmbientLightColor(lighting.ambient);
-
- rd->beforePrimitive();
- CoordinateFrame forDraw = rd->getObjectToWorldMatrix();
- glEnableClientState(GL_VERTEX_ARRAY);
- glEnableClientState(GL_COLOR_ARRAY);
- glEnableClientState(GL_NORMAL_ARRAY);
- _dataModel->getWorkspace()->render(rd);
- _dataModel->getWorkspace()->renderName(rd);
- glDisableClientState(GL_VERTEX_ARRAY);
- glDisableClientState(GL_COLOR_ARRAY);
- glDisableClientState(GL_NORMAL_ARRAY);
- rd->setObjectToWorldMatrix(forDraw);
- rd->afterPrimitive();
-
- for(size_t i = 0; i < _dataModel->getSelectionService()->getSelection().size(); i++)
- {
- if(PartInstance* part = dynamic_cast(g_dataModel->getSelectionService()->getSelection()[i]))
- {
- Vector3 size = part->getSize();
- Vector3 pos = part->getPosition();
- drawOutline(Vector3(0+size.x/2, 0+size.y/2, 0+size.z/2) ,Vector3(0-size.x/2,0-size.y/2,0-size.z/2), rd, lighting, Vector3(size.x/2, size.y/2, size.z/2), Vector3(pos.x, pos.y, pos.z), part->getCFrame());
- }
- }
-
- renderDevice->disableLighting();
-
- if (sky.notNull()) {
- sky->renderLensFlare(renderDevice, lighting);
- }
renderDevice->push2D();
_dataModel->getGuiRoot()->renderGUI(renderDevice, m_graphicsWatch.FPS());
renderDevice->pop2D();
@@ -655,7 +527,6 @@ void Application::run() {
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/");
RealTime now=0, lastTime=0;
double simTimeRate = 1.0f;
float fps=30.0f;
@@ -734,17 +605,6 @@ void Application::resizeWithParent(HWND parentWindow)
}
-// These should be moved into a "Lighting" class
-G3D::SkyRef Application::getSky()
-{
- return sky;
-}
-
-void Application::toggleSky()
-{
- _hideSky = !_hideSky;
-}
-
void Application::resize3DView(int w, int h)
{
Rect2D newViewport = Rect2D::xywh(0, 0, w, h);
diff --git a/src/source/DataModelV2/DataModelInstance.cpp b/src/source/DataModelV2/DataModelInstance.cpp
index 7eef1f9..79f0c84 100644
--- a/src/source/DataModelV2/DataModelInstance.cpp
+++ b/src/source/DataModelV2/DataModelInstance.cpp
@@ -1,8 +1,12 @@
#include
+
+// Instances
#include "DataModelV2/GuiRootInstance.h"
#include "DataModelV2/ToggleImageButtonInstance.h"
#include "DataModelV2/DataModelInstance.h"
#include "DataModelV2/ThumbnailGeneratorInstance.h"
+#include "DataModelV2/LightingInstance.h"
+
#include
#include
#include
@@ -23,6 +27,7 @@ DataModelInstance::DataModelInstance(void)
level = new LevelInstance();
thumbnailGenerator = new ThumbnailGeneratorInstance();
soundService = new SoundService();
+ lightingInstance = new LightingInstance();
selectionService = new SelectionService();
selectionService->setPropertyWindow(g_usableApp->_propWindow);
@@ -30,9 +35,12 @@ DataModelInstance::DataModelInstance(void)
showMessage = false;
canDelete = false;
_modY=0;
+
+ // Parent stuff
workspace->setParent(this);
level->setParent(this);
soundService->setParent(this);
+ lightingInstance->setParent(this);
_loadedFileName="..//skooter.rbxm";
listicon = 5;
@@ -662,4 +670,9 @@ ThumbnailGeneratorInstance* DataModelInstance::getThumbnailGenerator()
SoundService* DataModelInstance::getSoundService()
{
return soundService;
+}
+
+LightingInstance* DataModelInstance::getLighting()
+{
+ return lightingInstance;
}
\ No newline at end of file
diff --git a/src/source/DataModelV2/LevelInstance.cpp b/src/source/DataModelV2/LevelInstance.cpp
index 9aea060..53c20a4 100644
--- a/src/source/DataModelV2/LevelInstance.cpp
+++ b/src/source/DataModelV2/LevelInstance.cpp
@@ -140,6 +140,7 @@ std::vector LevelInstance::getProperties()
));
return properties;
}
+
void LevelInstance::PropUpdate(LPPROPGRIDITEM &pItem)
{
if(strcmp(pItem->lpszPropName, "InitialTimerValue") == 0)
diff --git a/src/source/DataModelV2/LightingInstance.cpp b/src/source/DataModelV2/LightingInstance.cpp
new file mode 100644
index 0000000..489ff9a
--- /dev/null
+++ b/src/source/DataModelV2/LightingInstance.cpp
@@ -0,0 +1,260 @@
+#include "DataModelV2/LightingInstance.h"
+#include "Application.h"
+#include "Globals.h"
+#include "StringFunctions.h"
+#include "Listener/ModeSelectionListener.h"
+
+LightingInstance::LightingInstance(void)
+{
+ Instance::Instance();
+ name = "Lighting";
+ className = "Lighting";
+ listicon = 10;
+ canDelete = false;
+
+ _hideSky = false;
+
+ lighting.setTime(G3D::toSeconds(2, 00, 00, PM));
+
+ // Maybe this is Top and Bottom Ambient?
+ lighting.ambient = Color3(0.5F, 0.5F, 0.5F);
+ lighting.lightColor = Color3(0.8F, 0.8F, 0.8F);
+
+ sky = Sky::create(NULL, ExePath() + "/content/sky/");
+ clearColor = Color4(0.0F, 0.0F, 0.0F, 0.0F);
+}
+
+LightingInstance::~LightingInstance(void)
+{
+ sky->~Sky();
+}
+
+// Getters
+G3D::SkyRef LightingInstance::getSky()
+{
+ return sky;
+}
+
+G3D::LightingParameters LightingInstance::getLightingParameters()
+{
+ return lighting;
+}
+
+std::vector LightingInstance::getProperties()
+{
+ std::vector properties = Instance::getProperties();
+
+ properties.push_back(createPGI("Appearance",
+ "TopAmbient",
+ "The color of the TopAmbient for 3D Objects",
+ RGB((topAmbient.r*255),(topAmbient.g*255),(topAmbient.b*255)),
+ PIT_COLOR
+ ));
+
+ properties.push_back(createPGI("Appearance",
+ "BottomAmbient",
+ "The color of the BottomAmbient for 3D Objects",
+ RGB((bottomAmbient.r*255),(bottomAmbient.g*255),(bottomAmbient.b*255)),
+ PIT_COLOR
+ ));
+
+ properties.push_back(createPGI("Appearance",
+ "SpotLight",
+ "The color of the SpotLight",
+ RGB((spotLight.r*255),(spotLight.g*255),(spotLight.b*255)),
+ PIT_COLOR
+ ));
+
+ properties.push_back(createPGI("Appearance",
+ "ClearColor",
+ "",
+ RGB((clearColor.r*255),(clearColor.g*255),(clearColor.b*255)),
+ PIT_COLOR
+ ));
+ return properties;
+}
+
+
+void LightingInstance::PropUpdate(LPPROPGRIDITEM &item)
+{
+ if(strcmp(item->lpszPropName, "TopAmbient") == 0)
+ {
+ topAmbient = Color3(
+ GetRValue(item->lpCurValue)/255.0F,
+ GetGValue(item->lpCurValue)/255.0F,
+ GetBValue(item->lpCurValue)/255.0F
+ );
+ }
+ if(strcmp(item->lpszPropName, "BottomAmbient") == 0)
+ {
+ bottomAmbient = Color3(
+ GetRValue(item->lpCurValue)/255.0F,
+ GetGValue(item->lpCurValue)/255.0F,
+ GetBValue(item->lpCurValue)/255.0F
+ );
+ }
+ if(strcmp(item->lpszPropName, "SpotLight") == 0)
+ {
+ spotLight = Color3(
+ GetRValue(item->lpCurValue)/255.0F,
+ GetGValue(item->lpCurValue)/255.0F,
+ GetBValue(item->lpCurValue)/255.0F
+ );
+ }
+ if(strcmp(item->lpszPropName, "ClearColor") == 0)
+ {
+ clearColor = Color3(
+ GetRValue(item->lpCurValue)/255.0F,
+ GetGValue(item->lpCurValue)/255.0F,
+ GetBValue(item->lpCurValue)/255.0F
+ );
+ }
+
+ else
+ Instance::PropUpdate(item);
+}
+
+
+// Functions
+void LightingInstance::suppressSky(bool doSuppress)
+{
+ _hideSky = doSuppress;
+}
+
+void LightingInstance::update()
+{
+ RenderDevice* rd = g_usableApp->getRenderDevice();
+
+
+ if(!_hideSky) {
+ rd->clear(sky.isNull(), true, true);
+ if (sky.notNull()) sky->render(rd, lighting);
+ } else {
+ rd->setColorClearValue(clearColor);
+ rd->clear(true, true, true);
+ suppressSky(false);
+ }
+
+ // Setup lighting
+ rd->enableLighting();
+
+ rd->setShadeMode(RenderDevice::SHADE_SMOOTH);
+ rd->setAmbientLightColor(Color3(1,1,1));
+
+ rd->setLight(0, GLight::directional(lighting.lightDirection, lighting.lightColor, true, true));
+ rd->setAmbientLightColor(lighting.ambient);
+
+ rd->beforePrimitive();
+ CoordinateFrame forDraw = rd->getObjectToWorldMatrix();
+ glEnableClientState(GL_VERTEX_ARRAY);
+ glEnableClientState(GL_COLOR_ARRAY);
+ glEnableClientState(GL_NORMAL_ARRAY);
+ g_dataModel->getWorkspace()->render(rd);
+ g_dataModel->getWorkspace()->renderName(rd);
+ glDisableClientState(GL_VERTEX_ARRAY);
+ glDisableClientState(GL_COLOR_ARRAY);
+ glDisableClientState(GL_NORMAL_ARRAY);
+ rd->setObjectToWorldMatrix(forDraw);
+ rd->afterPrimitive();
+
+ // Draw outlines
+ for(size_t i = 0; i < g_dataModel->getSelectionService()->getSelection().size(); i++)
+ {
+ if(PartInstance* part = dynamic_cast(g_dataModel->getSelectionService()->getSelection()[i]))
+ {
+ Vector3 size = part->getSize();
+ Vector3 pos = part->getPosition();
+ drawOutlines(
+ Vector3(0+size.x/2, 0+size.y/2, 0+size.z/2) ,
+ Vector3(0-size.x/2,0-size.y/2,0-size.z/2),
+ rd,
+ Vector3(size.x/2, size.y/2, size.z/2),
+ Vector3(pos.x, pos.y, pos.z),
+ part->getCFrame()
+ );
+ }
+ }
+
+ rd->disableLighting();
+
+ drawEffects();
+}
+
+void LightingInstance::drawEffects()
+{
+ RenderDevice* rd = g_usableApp->getRenderDevice();
+ if (sky.notNull()) {
+ sky->renderLensFlare(rd, lighting);
+ }
+}
+
+void LightingInstance::drawOutlines(Vector3 from, Vector3 to, RenderDevice* rd, Vector3 size, Vector3 pos, CoordinateFrame c)
+{
+ Color3 outline = Color3::cyan();
+ float offsetSize = 0.05F;
+
+ //X
+ Draw::box(c.toWorldSpace(Box(Vector3(from.x - offsetSize, from.y + offsetSize, from.z + offsetSize), Vector3(to.x + offsetSize, from.y - offsetSize, from.z - offsetSize))), rd, outline, Color4::clear());
+ Draw::box(c.toWorldSpace(Box(Vector3(from.x - offsetSize, to.y + offsetSize, from.z + offsetSize), Vector3(to.x + offsetSize, to.y - offsetSize, from.z - offsetSize))), rd, outline, Color4::clear());
+ Draw::box(c.toWorldSpace(Box(Vector3(from.x - offsetSize, to.y + offsetSize, to.z + offsetSize), Vector3(to.x + offsetSize, to.y - offsetSize, to.z - offsetSize))), rd, outline, Color4::clear());
+ Draw::box(c.toWorldSpace(Box(Vector3(from.x - offsetSize, from.y + offsetSize, to.z + offsetSize), Vector3(to.x + offsetSize, from.y - offsetSize, to.z - offsetSize))), rd, outline, Color4::clear());
+ //Y
+ Draw::box(c.toWorldSpace(Box(Vector3(from.x + offsetSize, from.y - offsetSize + 0.1, from.z + offsetSize), Vector3(from.x - offsetSize, to.y + offsetSize - 0.1, from.z - offsetSize))), rd, outline, Color4::clear());
+ Draw::box(c.toWorldSpace(Box(Vector3(to.x + offsetSize, from.y - offsetSize + 0.1, from.z + offsetSize), Vector3(to.x - offsetSize, to.y + offsetSize - 0.1, from.z - offsetSize))), rd, outline, Color4::clear());
+ Draw::box(c.toWorldSpace(Box(Vector3(to.x + offsetSize, from.y - offsetSize + 0.1, to.z + offsetSize), Vector3(to.x - offsetSize, to.y + offsetSize-0.1, to.z - offsetSize))), rd, outline, Color4::clear());
+ Draw::box(c.toWorldSpace(Box(Vector3(from.x + offsetSize, from.y - offsetSize + 0.1, to.z + offsetSize), Vector3(from.x - offsetSize, to.y + offsetSize - 0.1, to.z - offsetSize))), rd, outline, Color4::clear());
+
+ //Z
+ Draw::box(c.toWorldSpace(Box(Vector3(from.x + offsetSize, from.y + offsetSize, from.z - offsetSize), Vector3(from.x - offsetSize, from.y - offsetSize, to.z + offsetSize))), rd, outline, Color4::clear());
+ Draw::box(c.toWorldSpace(Box(Vector3(from.x + offsetSize, to.y + offsetSize, from.z - offsetSize), Vector3(from.x - offsetSize, to.y - offsetSize, to.z + offsetSize))), rd, outline, Color4::clear());
+ Draw::box(c.toWorldSpace(Box(Vector3(to.x + offsetSize, from.y + offsetSize, from.z - offsetSize), Vector3(to.x - offsetSize, from.y - offsetSize, to.z + offsetSize))), rd, outline, Color4::clear());
+ Draw::box(c.toWorldSpace(Box(Vector3(to.x + offsetSize, to.y + offsetSize, from.z - offsetSize), Vector3(to.x - offsetSize, to.y - offsetSize, to.z + offsetSize))), rd, outline, Color4::clear());
+
+ if(g_usableApp->getMode() == ARROWS)
+ {
+ 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);
+ }
+ else if(g_usableApp->getMode() == RESIZE)
+ {
+ Color3 sphereColor = outline;
+ 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 < 200)
+ {
+
+ float multiplier = distance * 0.025F/2;
+ if(multiplier < 0.25F)
+ multiplier = 0.25F;
+ Vector3 position = pos + (c.lookVector()*((size.z)+1));
+ Draw::sphere(Sphere(position, multiplier), rd, sphereColor, Color4::clear());
+ position = pos - (c.lookVector()*((size.z)+1));
+ Draw::sphere(Sphere(position, multiplier), rd, sphereColor, Color4::clear());
+
+ position = pos + (c.rightVector()*((size.x)+1));
+ Draw::sphere(Sphere(position, multiplier), rd, sphereColor, Color4::clear());
+ position = pos - (c.rightVector()*((size.x)+1));
+ Draw::sphere(Sphere(position, multiplier), rd, sphereColor, Color4::clear());
+
+ position = pos + (c.upVector()*((size.y)+1));
+ Draw::sphere(Sphere(position, multiplier), rd, sphereColor, Color4::clear());
+ position = pos - (c.upVector()*((size.y)+1));
+ Draw::sphere(Sphere(position, multiplier), rd, sphereColor, Color4::clear());
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/source/DataModelV2/PartInstance.cpp b/src/source/DataModelV2/PartInstance.cpp
index df70ce1..8463f2b 100644
--- a/src/source/DataModelV2/PartInstance.cpp
+++ b/src/source/DataModelV2/PartInstance.cpp
@@ -593,7 +593,11 @@ void PartInstance::PropUpdate(LPPROPGRIDITEM &item)
setChanged();
if(strcmp(item->lpszPropName, "Color3") == 0)
{
- color = Color3(GetRValue(item->lpCurValue)/255.0F,GetGValue(item->lpCurValue)/255.0F,GetBValue(item->lpCurValue)/255.0F);
+ color = Color3(
+ GetRValue(item->lpCurValue)/255.0F,
+ GetGValue(item->lpCurValue)/255.0F,
+ GetBValue(item->lpCurValue)/255.0F
+ );
}
else if(strcmp(item->lpszPropName, "Anchored") == 0)
{