2 Commits

Author SHA1 Message Date
DirtPiper
f42c5a4a08 Fixed level loading 2019-10-26 17:19:45 -04:00
DirtPiper
4a82c67fdc Added getMass to part 2019-10-26 15:54:48 -04:00
61 changed files with 2292 additions and 3335 deletions

2
.gitignore vendored
View File

@@ -53,5 +53,3 @@ G3DTest.suo
stderr.txt stderr.txt
desktop.ini desktop.ini
main.cpp main.cpp
*.db
G3DTest.sln

View File

@@ -1,953 +0,0 @@
#include <G3DAll.h>
#include <initguid.h>
#include <iomanip>
#include "Instance.h"
#include "resource.h"
#include "PartInstance.h"
#include "TextButtonInstance.h"
#include "ImageButtonInstance.h"
#include "DataModelInstance.h"
#include "CameraController.h"
#include "AudioPlayer.h"
#include "Globals.h"
#include "Application.h"
#include "win32Defines.h"
#include "WindowFunctions.h"
#include <limits.h>
#include <mshtml.h>
#include <exdisp.h>
#include <vector>
#include <string>
#include "ax.h"
#include <cguid.h>
#include "IEBrowser.h"
#include "PropertyWindow.h"
#include <commctrl.h>
#include "StringFunctions.h"
#include "GuiRoot.h"
#include "GUDButtonListener.h"
#include "ModeSelectionListener.h"
#include "DeleteListener.h"
#include "CameraButtonListener.h"
#include "RotateButtonListener.h"
Ray testRay;
static int cursorid = 0;
static int cursorOvrid = 0;
static int currentcursorid = 0;
static G3D::TextureRef cursor = NULL;
static G3D::TextureRef cursorOvr = NULL;
static bool mouseMovedBeginMotion = false;
static POINT oldGlobalMouse;
Vector2 oldMouse = Vector2(0,0);
float moveRate = 0.5;
void Application::clearInstances()
{
delete _dataModel;
}
PartInstance* Application::makePart()
{
PartInstance* part = new PartInstance();
return part;
}
void Application::setFocus(bool focus)
{
if(_propWindow != NULL)
if(focus)
{
ShowWindow(_propWindow->_hwndProp, SW_SHOW);
SetWindowPos(_propWindow->_hwndProp, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
}
else
{
SetWindowPos(_propWindow->_hwndProp, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
}
}
Application::Application(HWND parentWindow) : _propWindow(NULL) { //: GApp(settings,window) {
std::string tempPath = ((std::string)getenv("temp")) + "/"+g_PlaceholderName;
CreateDirectory(tempPath.c_str(), NULL);
_hWndMain = parentWindow;
HMODULE hThisInstance = GetModuleHandle(NULL);
_hwndToolbox = CreateWindowEx(
WS_EX_ACCEPTFILES,
"AX",
"{8856F961-340A-11D0-A96B-00C04FD705A2}",
WS_CHILD | WS_VISIBLE,
0,
560,
800,
60,
_hWndMain, // parent
NULL, // menu
hThisInstance,
NULL
);
_hwndRenderer = CreateWindowEx(
WS_EX_ACCEPTFILES,
"G3DWindow",
"3D",
WS_CHILD,
CW_USEDEFAULT,
CW_USEDEFAULT,
1,
1,
_hWndMain, // parent
NULL, // menu
hThisInstance,
NULL
);
_settings.window.resizable = true;
_settings.writeLicenseFile = false;
_settings.logFilename = tempPath + "/g3dlog.txt";
_settings.window.center = true;
Win32Window* window = Win32Window::create(_settings.window,_hwndRenderer);
ShowWindow(_hwndRenderer, SW_SHOW);
ShowWindow(_hWndMain, SW_SHOW);
quit=false;
rightButtonHolding=false;
mouseOnScreen=false;
// GApp replacement
renderDevice = new RenderDevice();
if (window != NULL) {
renderDevice->init(window, NULL);
}
else
{
MessageBox(NULL,"Window not found!","Error",MB_OK | MB_ICONSTOP);
return;
}
_window = renderDevice->window();
_window->makeCurrent();
SetWindowLongPtr(_hWndMain,GWL_USERDATA,(LONG)this);
SetWindowLongPtr(_hwndRenderer,GWL_USERDATA,(LONG)this);
_propWindow = new PropertyWindow(0, 0, 200, 640, hThisInstance);
IEBrowser* webBrowser = new IEBrowser(_hwndToolbox);
webBrowser->navigateSyncURL(L"http://androdome.com/g3d/toolbox/");
}
void Application::deleteInstance()
{
if(g_selectedInstances.size() > 0)
{
size_t undeletable = 0;
while(g_selectedInstances.size() > undeletable)
{
if(g_selectedInstances.at(0)->canDelete)
{
AudioPlayer::playSound(GetFileInPath("/content/sounds/pageturn.wav"));
Instance* selectedInstance = g_selectedInstances.at(0);
if(selectedInstance->getParent() != NULL)
selectedInstance->getParent()->removeChild(selectedInstance);
delete selectedInstance;
selectedInstance = NULL;
g_selectedInstances.erase(g_selectedInstances.begin());
}
else
{
undeletable++;
}
}
}
if(g_selectedInstances.size() == 0)
g_usableApp->_propWindow->ClearProperties();
}
void Application::onInit() {
// Called before Application::run() beings
cameraController.setFrame(Vector3(0,2,10));
_dataModel = new DataModelInstance();
_dataModel->setParent(NULL);
_dataModel->name = "undefined";
_dataModel->font = g_fntdominant;
g_dataModel = _dataModel;
//initGUI();
#ifdef LEGACY_LOAD_G3DFUN_LEVEL
PartInstance* test = makePart();
test->setParent(_dataModel->getWorkspace());
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(0),toRadians(0)));
test = makePart();
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->setParent(_dataModel->getWorkspace());
test->color = Color3(.5F,1,.5F);
test->setSize(Vector3(4,1,2));
test->setPosition(Vector3(10,1,0));
test = makePart();
test->setParent(_dataModel->getWorkspace());
test->color = Color3::gray();
test->setSize(Vector3(4,1,2));
test->setPosition(Vector3(7,2,0));
test = makePart();
test->setParent(_dataModel->getWorkspace());
test->color = Color3::gray();
test->setSize(Vector3(4,1,2));
test->setPosition(Vector3(-7,2,0));
test = makePart();
test->setParent(_dataModel->getWorkspace());
test->color = Color3::gray();
test->setSize(Vector3(4,1,2));
test->setPosition(Vector3(4,3,0));
test = makePart();
test->setParent(_dataModel->getWorkspace());
test->color = Color3::gray();
test->setSize(Vector3(4,1,2));
test->setPosition(Vector3(-5,3,0));
test = makePart();
test->setParent(_dataModel->getWorkspace());
test->color = Color3::gray();
test->setSize(Vector3(4,1,2));
test->setPosition(Vector3(1,4,0));
test = makePart();
test->setParent(_dataModel->getWorkspace());
test->color = Color3::gray();
test->setSize(Vector3(4,1,2));
test->setPosition(Vector3(-3,4,0));
test = makePart();
test->setParent(_dataModel->getWorkspace());
test->color = Color3::gray();
test->setSize(Vector3(4,1,2));
test->setPosition(Vector3(-2,5,0));
test = makePart();
test->setParent(_dataModel->getWorkspace());
test->color = Color3::gray();
test->setSize(Vector3(4,1,2));
test->setPosition(Vector3(0,6,0));
test = makePart();
test->setParent(_dataModel->getWorkspace());
test->color = Color3::gray();
test->setSize(Vector3(4,1,2));
test->setPosition(Vector3(2,7,0));
#else
_dataModel->debugGetOpen();
#endif
//setDesiredFrameRate(60);
//GApplet::onInit();
}
void Application::onCleanup() {
clearInstances();
sky->~Sky();
}
void Application::onLogic() {
// Add non-simulation game logic and AI code here
}
void Application::onNetwork() {
// Poll net messages here
}
//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);
//}
std::vector<Instance*> Application::getSelection()
{
return g_selectedInstances;
}
void Application::onSimulation(RealTime rdt, SimTime sdt, SimTime idt) {
_dataModel->getGuiRoot()->update();
if(_dataModel->name != _title)
{
_title = _dataModel->name;
std::string text = "Game \"" + _title + "\"";
SetWindowText(_hWndMain, text.c_str());
}
cameraController.update(this);
}
/*double getOSVersion() {
OSVERSIONINFO osvi;
ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&osvi);
std::string version = Convert(osvi.dwMajorVersion) + "." + Convert(osvi.dwMinorVersion);
return ::atof(version.c_str());
}*/
/*
bool IsHolding(int button)
{
return (GetKeyState(button) >> 1)>0;
}
*/
void Application::onUserInput(UserInput* ui) {
/*
if(GetHoldKeyState(VK_LCONTROL))
{
if(GetHoldKeyState('D'))
{
_messageTime = System::time();
if(debugMode())
_message = "Debug Mode Disabled";
else
_message = "Debug Mode Enabled";
setDebugMode(!debugMode());
}
}
*/
if(GetHoldKeyState(VK_F8))
{
_dataModel->getGuiRoot()->setDebugMessage("FOV Set to 10", System::time());
}
//}
//_dataModel->mousex = ui->getMouseX();
//_dataModel->mousey = ui->getMouseY();
_dataModel->mouseButton1Down = (GetKeyState(VK_LBUTTON) & 0x100) != 0;
if (GetHoldKeyState(VK_LBUTTON)) {
if (_dragging) {
PartInstance* part = NULL;
if(g_selectedInstances.size() > 0)
part = (PartInstance*) g_selectedInstances.at(0);
Ray dragRay = cameraController.getCamera()->worldRay(_dataModel->mousex, _dataModel->mousey, renderDevice->getViewport());
std::vector<Instance*> instances = _dataModel->getWorkspace()->getAllChildren();
for(size_t i = 0; i < instances.size(); i++)
{
if(PartInstance* moveTo = dynamic_cast<PartInstance*>(instances.at(i)))
{
float __time = testRay.intersectionTime(moveTo->getBox());
float __nearest=std::numeric_limits<float>::infinity();
if (__time != inf())
{
if (__nearest>__time)
{
// BROKEN
//Vector3 closest = (dragRay.closestPoint(moveTo->getPosition()) * 2);
//part->setPosition(closest);
//part->setPosition(Vector3(floor(closest.x),part->getPosition().y,floor(closest.z)));
}
}
}
}
Sleep(10);
}
}
// Camera KB Handling {
if (GetKPBool(VK_OEM_COMMA)) //Left
g_usableApp->cameraController.panLeft();
else if (GetKPBool(VK_OEM_PERIOD)) // Right
g_usableApp->cameraController.panRight();
else if (GetKPBool(0x49)) // Zoom In (I)
g_usableApp->cameraController.Zoom(1);
else if (GetKPBool(0x4F)) // Zoom Out (O)
g_usableApp->cameraController.Zoom(-1);
// }
//readMouseGUIInput();
// Add other key handling here
}
void Application::makeFlag(Vector3 &vec, RenderDevice* &rd)
{
Vector3 up = Vector3(vec.x, vec.y+3, vec.z);
rd->setColor(Color3::blue());
rd->beforePrimitive();
glBegin(GL_LINES);
glVertex3f(vec.x, vec.y, vec.z);
glVertex3f(up.x, up.y, up.z);
glEnd();
glBegin( GL_TRIANGLES );
glVertex3f(up.x, up.y-1, up.z);
glVertex3f(up.x, up.y-0.5, up.z-1);
glVertex3f(up.x, up.y, up.z);
glVertex3f(up.x, up.y, up.z);
glVertex3f(up.x, up.y-0.5, up.z-1);
glVertex3f(up.x, up.y-1, up.z);
glEnd();
rd->afterPrimitive();
rd->setColor(Color3::white());
//I know how i will approach this now
}
void Application::setMode(int mode)
{
_mode = mode;
}
int Application::getMode()
{
return _mode;
}
void Application::drawOutline(Vector3 from, Vector3 to, RenderDevice* rd, LightingParameters lighting, Vector3 size, Vector3 pos, CoordinateFrame c)
{
Color3 outline = Color3::cyan();//Color3(0.098F,0.6F,1.0F);
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)
{
rd->setLight(0, NULL);
rd->setAmbientLightColor(Color3(1,1,1));
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);
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;
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/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());
}
rd->setAmbientLightColor(lighting.ambient);
rd->setLight(0, GLight::directional(lighting.lightDirection, lighting.lightColor));
}
}
void Application::exitApplication()
{
//endApplet = true;
//endProgram = true;
}
void Application::onGraphics(RenderDevice* rd) {
G3D::uint8 num = 0;
POINT mousepos;
mouseOnScreen = true;
if (GetCursorPos(&mousepos))
{
POINT pointm = mousepos;
if (ScreenToClient(_hWndMain, &mousepos))
{
//mouseOnScreen = true;
//POINT pointm;
///GetCursorPos(&pointm);
if(_hwndRenderer != WindowFromPoint(pointm)) //OLD: mousepos.x < 1 || mousepos.y < 1 || mousepos.x >= rd->getViewport().width()-1 || mousepos.y >= rd->getViewport().height()-1
{
mouseOnScreen = false;
//ShowCursor(true);
_window->setMouseVisible(true);
//rd->window()->setInputCaptureCount(0);
}
else
{
mouseOnScreen = true;
//SetCursor(NULL);
_window->setMouseVisible(false);
//rd->window()->setInputCaptureCount(1);
}
}
}
if(Globals::useMousePoint)
{
mousepos = Globals::mousepoint;
ScreenToClient(_hWndMain, &mousepos);
}
LightingParameters lighting(G3D::toSeconds(11, 00, 00, AM));
renderDevice->setProjectionAndCameraMatrix(*cameraController.getCamera());
// Cyan background
//renderDevice->setColorClearValue(Color3(0.0f, 0.5f, 1.0f));
renderDevice->clear(sky.isNull(), true, true);
if (sky.notNull()) {
sky->render(renderDevice, lighting);
}
// Setup lighting
renderDevice->enableLighting();
renderDevice->setShadeMode(RenderDevice::SHADE_SMOOTH);
renderDevice->setAmbientLightColor(Color3(1,1,1));
renderDevice->setLight(0, GLight::directional(lighting.lightDirection, lighting.lightColor));
renderDevice->setAmbientLightColor(lighting.ambient);
rd->beforePrimitive();
CoordinateFrame forDraw = rd->getObjectToWorldMatrix();
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
for (unsigned int i = 0; i < _dataModel->getWorkspace()->__pvVector.size(); i++)
{
_dataModel->getWorkspace()->__pvVector[i]->render(rd);
}
//_dataModel->getWorkspace()->render(rd);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
rd->setObjectToWorldMatrix(forDraw);
rd->afterPrimitive();
if(g_selectedInstances.size() > 0)
{
for(size_t i = 0; i < g_selectedInstances.size(); i++)
{
if(PartInstance* part = dynamic_cast<PartInstance*>(g_selectedInstances.at(i)))
{
Vector3 size = part->getSize();
Vector3 pos = part->getPosition();
drawOutline(Vector3(0+size.x/2, 0+size.y/2, 0+size.z/2) ,Vector3(0-size.x/2,0-size.y/2,0-size.z/2), rd, lighting, Vector3(size.x/2, size.y/2, size.z/2), Vector3(pos.x, pos.y, pos.z), part->getCFrameRenderBased());
}
}
}
//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);
//}
renderDevice->disableLighting();
if (sky.notNull()) {
sky->renderLensFlare(renderDevice, lighting);
}
renderDevice->push2D();
_dataModel->getGuiRoot()->renderGUI(renderDevice, m_graphicsWatch.FPS());
rd->pushState();
rd->beforePrimitive();
if(Globals::showMouse && mouseOnScreen)
{
glEnable( GL_TEXTURE_2D );
glEnable(GL_BLEND);// you enable blending function
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
std::vector<Instance*> instances = _dataModel->getWorkspace()->getAllChildren();
currentcursorid = cursorid;
for(size_t i = 0; i < instances.size(); i++)
{
if(PartInstance* test = dynamic_cast<PartInstance*>(instances.at(i)))
{
float time = cameraController.getCamera()->worldRay(_dataModel->mousex, _dataModel->mousey, renderDevice->getViewport()).intersectionTime(test->getBox());
//float time = testRay.intersectionTime(test->getBox());
if (time != inf())
{
currentcursorid = cursorOvrid;
break;
}
}
}
glBindTexture( GL_TEXTURE_2D, currentcursorid);
glBegin( GL_QUADS );
glTexCoord2d(0.0,0.0);
glVertex2f(mousepos.x-64, mousepos.y-64);
glTexCoord2d( 1.0,0.0 );
glVertex2f(mousepos.x+64, mousepos.y-64);
glTexCoord2d(1.0,1.0 );
glVertex2f(mousepos.x+64, mousepos.y+64 );
glTexCoord2d( 0.0,1.0 );
glVertex2f( mousepos.x-64, mousepos.y+64 );
glEnd();
glDisable( GL_TEXTURE_2D );
}
rd->afterPrimitive();
rd->popState();
renderDevice->pop2D();
}
void Application::onKeyPressed(int key)
{
if(key==VK_DELETE)
{
deleteInstance();
}
if (GetHoldKeyState(VK_RCONTROL))
{
if (key=='O')
{
_dataModel->getOpen();
}
}
}
void Application::onKeyUp(int key)
{
}
void Application::onMouseLeftPressed(HWND hwnd,int x,int y)
{
//Removed set focus
std::cout << "Click: " << x << "," << y << std::endl;
bool onGUI = _dataModel->getGuiRoot()->mouseInGUI(renderDevice, x, y);
if(!onGUI)
{
testRay = cameraController.getCamera()->worldRay(_dataModel->mousex, _dataModel->mousey, renderDevice->getViewport());
float nearest=std::numeric_limits<float>::infinity();
Vector3 camPos = cameraController.getCamera()->getCoordinateFrame().translation;
std::vector<Instance*> instances = _dataModel->getWorkspace()->getAllChildren();
bool objFound = false;
for(size_t i = 0; i < instances.size(); i++)
{
if(PartInstance* test = dynamic_cast<PartInstance*>(instances.at(i)))
{
float time = testRay.intersectionTime(test->getBox());
if (time != inf())
{
objFound = true;
if (nearest>time)
{
nearest=time;
bool found = false;
for(size_t i = 0; i < g_selectedInstances.size(); i++)
{
if(g_selectedInstances.at(i) == test)
{
found = true;
//ShowWindow(_propWindow->_hwndProp, SW_SHOW);
//SetActiveWindow(_propWindow->_hwndProp);
//SetForegroundWindow(_propWindow->_hwndProp);
break;
}
}
if(!found)
{
g_selectedInstances.clear();
g_selectedInstances.push_back(test);
}
selectInstance(test, _propWindow);
//_message = "Dragging = true.";
//_messageTime = System::time();
//_dragging = true;
}
}
}
}
if(!objFound)
selectInstance(_dataModel,_propWindow);
}
}
void Application::selectInstance(Instance* selectedInstance, PropertyWindow* propWindow)
{
g_selectedInstances.clear();
g_selectedInstances.push_back(selectedInstance);
propWindow->UpdateSelected(selectedInstance);
}
G3D::RenderDevice* Application::getRenderDevice()
{
return renderDevice;
}
void Application::onMouseLeftUp(G3D::RenderDevice* renderDevice, int x, int y)
{
//std::cout << "Release: " << x << "," << y << std::endl;
_dataModel->getGuiRoot()->onMouseLeftUp(renderDevice, x, y);
_dragging = false;
//_message = "Dragging = false.";
//_messageTime = System::time();
}
void Application::onMouseRightPressed(int x,int y)
{
}
void Application::onMouseRightUp(int x,int y)
{
}
void Application::onMouseMoved(int x,int y)
{
oldMouse = _dataModel->getMousePos();
_dataModel->mousex = x;
_dataModel->mousey = y;
}
void Application::onMouseWheel(int x,int y,short delta)
{
if (mouseOnScreen==true)
if (cameraController.onMouseWheel(x, y, delta))
{
AudioPlayer::playSound(cameraSound);
}
}
void Application::run() {
g_usableApp = this;
//setDebugMode(false);
//debugController.setActive(false);
/*
if (!createWindowClass("ToolWindowClass",ToolProc,GetModuleHandle(0)))
{
return;
}
HWND propertyHWnd = CreateWindowEx(
WS_EX_TOOLWINDOW,"ToolWindowClass", "ToolWindow",
WS_SYSMENU | WS_VISIBLE | WS_CHILD,
0, 0, 800, 64,
hWndMain, NULL, GetModuleHandle(0), NULL);
ShowWindow(propertyHWnd,SW_SHOW);
*/
UpdateWindow(_hWndMain);
// Load objects here=
cursor = Texture::fromFile(GetFileInPath("/content/images/ArrowCursor.png"));
cursorOvr = Texture::fromFile(GetFileInPath("/content/images/DragCursor.png"));
Globals::surface = Texture::fromFile(GetFileInPath("/content/images/surfacebr.png"));
Globals::surfaceId = Globals::surface->getOpenGLID();
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();
currentcursorid = cursorid;
cursorOvrid = cursorOvr->openGLID();
RealTime now=0, lastTime=0;
double simTimeRate = 1.0f;
float fps=3000.0f;
RealTime desiredFrameDuration=1.0/fps;
onInit();
RealTime lastWaitTime=0;
MSG messages;
//RECT cRect;
//GetClientRect(_hWndMain,&cRect);
//renderDevice->notifyResize(cRect.right,cRect.bottom);
//Rect2D viewportRect = Rect2D::xywh(0,0,cRect.right,cRect.bottom);
//renderDevice->setViewport(viewportRect);
//window()->setInputCaptureCount(1);
resizeWithParent(_hWndMain);
while (!quit)
{
lastTime = now;
now = System::getTick();
RealTime timeStep = now - lastTime;
m_userInputWatch.tick();
onUserInput(userInput);
//m_moduleManager->onUserInput(_userInput);
m_userInputWatch.tock();
m_simulationWatch.tick();
//debugController.doSimulation(clamp(timeStep, 0.0, 0.1));
//g3dCamera.setCoordinateFrame
//(debugController.getCoordinateFrame());
double rate = simTimeRate;
RealTime rdt = timeStep;
SimTime sdt = timeStep * rate;
SimTime idt = desiredFrameDuration * rate;
onSimulation(rdt,sdt,idt);
m_simulationWatch.tock();
m_waitWatch.tick();
{
RealTime now = System::time();
// Compute accumulated time
System::sleep(max(0.0, desiredFrameDuration - (now - lastWaitTime)));
lastWaitTime = System::time();
}
m_waitWatch.tock();
m_graphicsWatch.tick();
renderDevice->beginFrame();
renderDevice->pushState();
onGraphics(renderDevice);
renderDevice->popState();
//renderDebugInfo();
renderDevice->endFrame();
//debugText.clear();
m_graphicsWatch.tock();
while (PeekMessage (&messages, NULL, 0, 0,PM_REMOVE))
{
if (IsDialogMessage(_hWndMain, &messages) == 0)
{
TranslateMessage(&messages);
DispatchMessage(&messages);
}
}
}
onCleanup();
}
void Application::resizeWithParent(HWND parentWindow)
{
RECT rect;
GetClientRect(parentWindow,&rect);
SetWindowPos(_hwndRenderer,NULL,0,0,rect.right,rect.bottom-60,SWP_NOMOVE);
SetWindowPos(_hwndToolbox,NULL,0,rect.bottom-60,rect.right,60,SWP_NOACTIVATE | SWP_SHOWWINDOW);
GetClientRect(_hwndRenderer,&rect);
int viewWidth=rect.right;
int viewHeight=rect.bottom;
renderDevice->notifyResize(viewWidth,viewHeight);
Rect2D viewportRect = Rect2D::xywh(0,0,viewWidth,viewHeight);
renderDevice->setViewport(viewportRect);
}
void Application::QuitApp()
{
PostQuitMessage(0);
quit=true;
}
void Application::onCreate(HWND parentWindow)
{
//SetWindowLongPtr(hwndRenderer,GWL_USERDATA,(LONG)this);
//SetWindowLongPtr(hwndToolbox,GWL_USERDATA,(LONG)this);
//SetWindowLongPtr(hwndMain,GWL_USERDATA,(LONG)&app);
}

View File

@@ -12,7 +12,7 @@ BaseButtonInstance::BaseButtonInstance(void)
void BaseButtonInstance::render(RenderDevice* rd) void BaseButtonInstance::render(RenderDevice* rd)
{ {
DataModelInstance* dataModel = g_dataModel; DataModelInstance* dataModel = Globals::dataModel;
Vector2 pos = Vector2(dataModel->mousex,dataModel->mousey); Vector2 pos = Vector2(dataModel->mousex,dataModel->mousey);
drawObj(rd, pos, dataModel->mouseButton1Down); drawObj(rd, pos, dataModel->mouseButton1Down);
Instance::render(rd); Instance::render(rd);

View File

@@ -1,10 +1,8 @@
#pragma once #pragma once
#include "instance.h" #include "instance.h"
#pragma once
#include "ButtonListener.h" #include "ButtonListener.h"
class ButtonListener; class ButtonListener;
class Instance;
class BaseButtonInstance : public Instance class BaseButtonInstance : public Instance
{ {
public: public:

View File

@@ -1,4 +1,3 @@
#include "BaseButtonInstance.h"
#include "ButtonListener.h" #include "ButtonListener.h"

View File

@@ -1,12 +1,11 @@
#pragma once #pragma once
//#include "Application.h" #include "Demo.h"
//#include "BaseButtonInstance.h" #include "BaseButtonInstance.h"
class BaseButtonInstance; class BaseButtonInstance;
class ButtonListener class ButtonListener
{ {
public: public:
ButtonListener(); ButtonListener();
~ButtonListener(void); ~ButtonListener(void);
virtual void onButton1MouseClick(BaseButtonInstance*); virtual void onButton1MouseClick(BaseButtonInstance*);

View File

@@ -1,24 +0,0 @@
#include "CameraButtonListener.h"
#include "Globals.h"
#include "AudioPlayer.h"
#include "Application.h"
void CameraButtonListener::onButton1MouseClick(BaseButtonInstance* button)
{
AudioPlayer::playSound(cameraSound);
CoordinateFrame frame = g_usableApp->cameraController.getCamera()->getCoordinateFrame();
if(button->name == "CenterCam" && g_selectedInstances.size() > 0)
g_usableApp->cameraController.centerCamera(g_selectedInstances.at(0));
else if(button->name == "ZoomIn")
g_usableApp->cameraController.Zoom(1);
else if(button->name == "ZoomOut")
g_usableApp->cameraController.Zoom(-1);
else if(button->name == "PanRight")
g_usableApp->cameraController.panRight();
else if(button->name == "PanLeft")
g_usableApp->cameraController.panLeft();
else if(button->name == "TiltUp")
g_usableApp->cameraController.tiltUp();
else if(button->name == "TiltDown")
g_usableApp->cameraController.tiltDown();
}

View File

@@ -1,7 +0,0 @@
#pragma once
#include "ButtonListener.h"
class CameraButtonListener : public ButtonListener {
public:
void onButton1MouseClick(BaseButtonInstance*);
};

View File

@@ -2,7 +2,7 @@
#include "win32Defines.h" #include "win32Defines.h"
#include <iostream> #include <iostream>
#include "PartInstance.h" #include "PartInstance.h"
#include "Application.h" #include "Demo.h"
#include "AudioPlayer.h" #include "AudioPlayer.h"
@@ -140,7 +140,7 @@ void CameraController::centerCamera(Instance* selection)
} }
else if(PartInstance* part = dynamic_cast<PartInstance*>(selection)) else if(PartInstance* part = dynamic_cast<PartInstance*>(selection))
{ {
Vector3 partPos = (part)->getPosition(); Vector3 partPos = (part)->getPosition()/2;
lookAt(partPos); lookAt(partPos);
focusPosition=partPos; focusPosition=partPos;
zoom=((partPos-frame.translation).magnitude()); zoom=((partPos-frame.translation).magnitude());
@@ -152,7 +152,7 @@ void CameraController::centerCamera(Instance* selection)
} }
} }
void CameraController::update(Application* app) void CameraController::update(Demo* demo)
{ {
float offsetSize = 0.05F; float offsetSize = 0.05F;

View File

@@ -8,7 +8,7 @@
#define CAM_ZOOM_MIN 0.1f #define CAM_ZOOM_MIN 0.1f
#define CAM_ZOOM_MAX 100.f #define CAM_ZOOM_MAX 100.f
class Application; class Demo;
class CameraController { class CameraController {
public: public:
@@ -19,7 +19,7 @@ class CameraController {
void lookAt(const Vector3& position); void lookAt(const Vector3& position);
void refreshZoom(const CoordinateFrame& frame); void refreshZoom(const CoordinateFrame& frame);
void pan(CoordinateFrame* frame,float spdX,float spdY); void pan(CoordinateFrame* frame,float spdX,float spdY);
void update(Application* app); void update(Demo* demo);
void centerCamera(Instance* selection); void centerCamera(Instance* selection);
void panLeft(); void panLeft();
void panRight(); void panRight();

View File

@@ -1,11 +1,9 @@
#include <string> #include <string>
#include "GuiRoot.h"
#include "DataModelInstance.h" #include "DataModelInstance.h"
#include <fstream> #include <fstream>
#include <iostream> #include <iostream>
#include <sstream> #include <sstream>
#include <commdlg.h> #include <commdlg.h>
#include "ErrorFunctions.h"
using namespace std; using namespace std;
using namespace rapidxml; using namespace rapidxml;
@@ -15,7 +13,7 @@ DataModelInstance::DataModelInstance(void)
{ {
Instance::Instance(); Instance::Instance();
workspace = new WorkspaceInstance(); workspace = new WorkspaceInstance();
guiRoot = new GuiRoot(); guiRoot = new Instance();
level = new LevelInstance(); level = new LevelInstance();
//children.push_back(workspace); //children.push_back(workspace);
//children.push_back(level); //children.push_back(level);
@@ -29,7 +27,6 @@ DataModelInstance::DataModelInstance(void)
workspace->setParent(this); workspace->setParent(this);
level->setParent(this); level->setParent(this);
_loadedFileName="..//skooter.rbxm"; _loadedFileName="..//skooter.rbxm";
listicon = 5;
} }
@@ -65,7 +62,7 @@ rapidxml::xml_node<>* DataModelInstance::getNode(xml_node<> * node,const char* n
_errMsg = "Expected <"; _errMsg = "Expected <";
_errMsg += name; _errMsg += name;
_errMsg+="> tag."; _errMsg+="> tag.";
_successfulLoad=false; _successfulLoad=true;
return 0; return 0;
} }
return tempNode; return tempNode;
@@ -78,7 +75,7 @@ float DataModelInstance::getFloatValue(xml_node<> * node,const char* name)
_errMsg = "Expected <"; _errMsg = "Expected <";
_errMsg += name; _errMsg += name;
_errMsg+="> tag."; _errMsg+="> tag.";
_successfulLoad=false; _successfulLoad=true;
return 0; return 0;
} }
float newFloat; float newFloat;
@@ -93,149 +90,149 @@ Color3 bcToRGB(short bc)
{ {
switch(bc) switch(bc)
{ {
case 1: return Color3(0.94901967048645F,0.95294123888016F,0.95294123888016F); case 1: return Color3(0.94901967048645,0.95294123888016,0.95294123888016);
case 2: return Color3(0.63137257099152F,0.64705884456635F,0.63529413938522F); case 2: return Color3(0.63137257099152,0.64705884456635,0.63529413938522);
case 3: return Color3(0.9764706492424F,0.91372555494308F,0.60000002384186F); case 3: return Color3(0.9764706492424,0.91372555494308,0.60000002384186);
case 5: return Color3(0.84313732385635F,0.77254909276962F,0.60392159223557F); case 5: return Color3(0.84313732385635,0.77254909276962,0.60392159223557);
case 6: return Color3(0.7607843875885F,0.85490202903748F,0.72156864404678F); case 6: return Color3(0.7607843875885,0.85490202903748,0.72156864404678);
case 9: return Color3(0.90980398654938F,0.7294117808342F,0.78431379795074F); case 9: return Color3(0.90980398654938,0.7294117808342,0.78431379795074);
case 11: return Color3(0.50196081399918F,0.73333334922791F,0.85882359743118F); case 11: return Color3(0.50196081399918,0.73333334922791,0.85882359743118);
case 12: return Color3(0.79607850313187F,0.51764708757401F,0.258823543787F); case 12: return Color3(0.79607850313187,0.51764708757401,0.258823543787);
case 18: return Color3(0.80000007152557F,0.55686277151108F,0.41176474094391F); case 18: return Color3(0.80000007152557,0.55686277151108,0.41176474094391);
case 21: return Color3(0.76862752437592F,0.15686275064945F,0.10980392992496F); case 21: return Color3(0.76862752437592,0.15686275064945,0.10980392992496);
case 22: return Color3(0.76862752437592F,0.43921571969986F,0.62745100259781F); case 22: return Color3(0.76862752437592,0.43921571969986,0.62745100259781);
case 23: return Color3(0.050980396568775F,0.41176474094391F,0.6745098233223F); case 23: return Color3(0.050980396568775,0.41176474094391,0.6745098233223);
case 24: return Color3(0.96078437566757F,0.80392163991928F,0.18823531270027F); case 24: return Color3(0.96078437566757,0.80392163991928,0.18823531270027);
case 25: return Color3(0.38431376218796F,0.27843138575554F,0.19607844948769F); case 25: return Color3(0.38431376218796,0.27843138575554,0.19607844948769);
case 26: return Color3(0.10588236153126F,0.16470588743687F,0.20784315466881F); case 26: return Color3(0.10588236153126,0.16470588743687,0.20784315466881);
case 27: return Color3(0.42745101451874F,0.43137258291245F,0.42352944612503F); case 27: return Color3(0.42745101451874,0.43137258291245,0.42352944612503);
case 28: return Color3(0.15686275064945F,0.49803924560547F,0.27843138575554F); case 28: return Color3(0.15686275064945,0.49803924560547,0.27843138575554);
case 29: return Color3(0.63137257099152F,0.76862752437592F,0.54901963472366F); case 29: return Color3(0.63137257099152,0.76862752437592,0.54901963472366);
case 36: return Color3(0.95294123888016F,0.8117647767067F,0.60784316062927F); case 36: return Color3(0.95294123888016,0.8117647767067,0.60784316062927);
case 37: return Color3(0.29411765933037F,0.59215688705444F,0.29411765933037F); case 37: return Color3(0.29411765933037,0.59215688705444,0.29411765933037);
case 38: return Color3(0.62745100259781F,0.37254902720451F,0.20784315466881F); case 38: return Color3(0.62745100259781,0.37254902720451,0.20784315466881);
case 39: return Color3(0.75686281919479F,0.79215693473816F,0.8705883026123F); case 39: return Color3(0.75686281919479,0.79215693473816,0.8705883026123);
case 40: return Color3(0.92549026012421F,0.92549026012421F,0.92549026012421F); case 40: return Color3(0.92549026012421,0.92549026012421,0.92549026012421);
case 41: return Color3(0.80392163991928F,0.32941177487373F,0.29411765933037F); case 41: return Color3(0.80392163991928,0.32941177487373,0.29411765933037);
case 42: return Color3(0.75686281919479F,0.87450987100601F,0.94117653369904F); case 42: return Color3(0.75686281919479,0.87450987100601,0.94117653369904);
case 43: return Color3(0.48235297203064F,0.71372550725937F,0.90980398654938F); case 43: return Color3(0.48235297203064,0.71372550725937,0.90980398654938);
case 44: return Color3(0.96862751245499F,0.94509810209274F,0.55294120311737F); case 44: return Color3(0.96862751245499,0.94509810209274,0.55294120311737);
case 45: return Color3(0.70588237047195F,0.82352948188782F,0.89411771297455F); case 45: return Color3(0.70588237047195,0.82352948188782,0.89411771297455);
case 47: return Color3(0.85098046064377F,0.52156865596771F,0.42352944612503F); case 47: return Color3(0.85098046064377,0.52156865596771,0.42352944612503);
case 48: return Color3(0.51764708757401F,0.71372550725937F,0.55294120311737F); case 48: return Color3(0.51764708757401,0.71372550725937,0.55294120311737);
case 49: return Color3(0.97254908084869F,0.94509810209274F,0.51764708757401F); case 49: return Color3(0.97254908084869,0.94509810209274,0.51764708757401);
case 50: return Color3(0.92549026012421F,0.90980398654938F,0.8705883026123F); case 50: return Color3(0.92549026012421,0.90980398654938,0.8705883026123);
case 100: return Color3(0.93333339691162F,0.76862752437592F,0.71372550725937F); case 100: return Color3(0.93333339691162,0.76862752437592,0.71372550725937);
case 101: return Color3(0.85490202903748F,0.52549022436142F,0.47843140363693F); case 101: return Color3(0.85490202903748,0.52549022436142,0.47843140363693);
case 102: return Color3(0.43137258291245F,0.60000002384186F,0.79215693473816F); case 102: return Color3(0.43137258291245,0.60000002384186,0.79215693473816);
case 103: return Color3(0.78039222955704F,0.75686281919479F,0.71764707565308F); case 103: return Color3(0.78039222955704,0.75686281919479,0.71764707565308);
case 104: return Color3(0.41960787773132F,0.19607844948769F,0.48627454042435F); case 104: return Color3(0.41960787773132,0.19607844948769,0.48627454042435);
case 105: return Color3(0.88627457618713F,0.60784316062927F,0.25098040699959F); case 105: return Color3(0.88627457618713,0.60784316062927,0.25098040699959);
case 106: return Color3(0.85490202903748F,0.52156865596771F,0.2549019753933F); case 106: return Color3(0.85490202903748,0.52156865596771,0.2549019753933);
case 107: return Color3(0,0.56078433990479F,0.61176472902298F); case 107: return Color3(0,0.56078433990479,0.61176472902298);
case 108: return Color3(0.4078431725502F,0.36078432202339F,0.26274511218071F); case 108: return Color3(0.4078431725502,0.36078432202339,0.26274511218071);
case 110: return Color3(0.26274511218071F,0.32941177487373F,0.57647061347961F); case 110: return Color3(0.26274511218071,0.32941177487373,0.57647061347961);
case 111: return Color3(0.74901962280273F,0.71764707565308F,0.69411766529083F); case 111: return Color3(0.74901962280273,0.71764707565308,0.69411766529083);
case 112: return Color3(0.4078431725502F,0.45490199327469F,0.6745098233223F); case 112: return Color3(0.4078431725502,0.45490199327469,0.6745098233223);
case 113: return Color3(0.89411771297455F,0.678431391716F,0.78431379795074F); case 113: return Color3(0.89411771297455,0.678431391716,0.78431379795074);
case 115: return Color3(0.78039222955704F,0.82352948188782F,0.23529413342476F); case 115: return Color3(0.78039222955704,0.82352948188782,0.23529413342476);
case 116: return Color3(0.33333334326744F,0.64705884456635F,0.68627452850342F); case 116: return Color3(0.33333334326744,0.64705884456635,0.68627452850342);
case 118: return Color3(0.71764707565308F,0.84313732385635F,0.83529418706894F); case 118: return Color3(0.71764707565308,0.84313732385635,0.83529418706894);
case 119: return Color3(0.64313727617264F,0.74117648601532F,0.27843138575554F); case 119: return Color3(0.64313727617264,0.74117648601532,0.27843138575554);
case 120: return Color3(0.85098046064377F,0.89411771297455F,0.65490198135376F); case 120: return Color3(0.85098046064377,0.89411771297455,0.65490198135376);
case 121: return Color3(0.90588241815567F,0.6745098233223F,0.34509804844856F); case 121: return Color3(0.90588241815567,0.6745098233223,0.34509804844856);
case 123: return Color3(0.82745105028152F,0.43529415130615F,0.29803922772408F); case 123: return Color3(0.82745105028152,0.43529415130615,0.29803922772408);
case 124: return Color3(0.57254904508591F,0.22352942824364F,0.47058826684952F); case 124: return Color3(0.57254904508591,0.22352942824364,0.47058826684952);
case 125: return Color3(0.91764712333679F,0.72156864404678F,0.57254904508591F); case 125: return Color3(0.91764712333679,0.72156864404678,0.57254904508591);
case 126: return Color3(0.64705884456635F,0.64705884456635F,0.79607850313187F); case 126: return Color3(0.64705884456635,0.64705884456635,0.79607850313187);
case 127: return Color3(0.86274516582489F,0.73725491762161F,0.50588238239288F); case 127: return Color3(0.86274516582489,0.73725491762161,0.50588238239288);
case 128: return Color3(0.68235296010971F,0.47843140363693F,0.34901961684227F); case 128: return Color3(0.68235296010971,0.47843140363693,0.34901961684227);
case 131: return Color3(0.61176472902298F,0.63921570777893F,0.65882354974747F); case 131: return Color3(0.61176472902298,0.63921570777893,0.65882354974747);
case 133: return Color3(0.83529418706894F,0.45098042488098F,0.23921570181847F); case 133: return Color3(0.83529418706894,0.45098042488098,0.23921570181847);
case 134: return Color3(0.84705889225006F,0.8666667342186F,0.33725491166115F); case 134: return Color3(0.84705889225006,0.8666667342186,0.33725491166115);
case 135: return Color3(0.45490199327469F,0.52549022436142F,0.61568629741669F); case 135: return Color3(0.45490199327469,0.52549022436142,0.61568629741669);
case 136: return Color3(0.52941179275513F,0.48627454042435F,0.56470590829849F); case 136: return Color3(0.52941179275513,0.48627454042435,0.56470590829849);
case 137: return Color3(0.87843143939972F,0.59607845544815F,0.39215689897537F); case 137: return Color3(0.87843143939972,0.59607845544815,0.39215689897537);
case 138: return Color3(0.58431375026703F,0.54117649793625F,0.45098042488098F); case 138: return Color3(0.58431375026703,0.54117649793625,0.45098042488098);
case 140: return Color3(0.12549020349979F,0.22745099663734F,0.33725491166115F); case 140: return Color3(0.12549020349979,0.22745099663734,0.33725491166115);
case 141: return Color3(0.15294118225574F,0.27450981736183F,0.17647059261799F); case 141: return Color3(0.15294118225574,0.27450981736183,0.17647059261799);
case 143: return Color3(0.8117647767067F,0.88627457618713F,0.96862751245499F); case 143: return Color3(0.8117647767067,0.88627457618713,0.96862751245499);
case 145: return Color3(0.47450983524323F,0.53333336114883F,0.63137257099152F); case 145: return Color3(0.47450983524323,0.53333336114883,0.63137257099152);
case 146: return Color3(0.58431375026703F,0.55686277151108F,0.63921570777893F); case 146: return Color3(0.58431375026703,0.55686277151108,0.63921570777893);
case 147: return Color3(0.57647061347961F,0.52941179275513F,0.40392160415649F); case 147: return Color3(0.57647061347961,0.52941179275513,0.40392160415649);
case 148: return Color3(0.34117648005486F,0.34509804844856F,0.34117648005486F); case 148: return Color3(0.34117648005486,0.34509804844856,0.34117648005486);
case 149: return Color3(0.086274512112141F,0.11372549831867F,0.19607844948769F); case 149: return Color3(0.086274512112141,0.11372549831867,0.19607844948769);
case 150: return Color3(0.67058825492859F,0.678431391716F,0.6745098233223F); case 150: return Color3(0.67058825492859,0.678431391716,0.6745098233223);
case 151: return Color3(0.47058826684952F,0.56470590829849F,0.50980395078659F); case 151: return Color3(0.47058826684952,0.56470590829849,0.50980395078659);
case 153: return Color3(0.58431375026703F,0.47450983524323F,0.46666669845581F); case 153: return Color3(0.58431375026703,0.47450983524323,0.46666669845581);
case 154: return Color3(0.48235297203064F,0.1803921610117F,0.1843137294054F); case 154: return Color3(0.48235297203064,0.1803921610117,0.1843137294054);
case 157: return Color3(1,0.96470594406128F,0.48235297203064F); case 157: return Color3(1,0.96470594406128,0.48235297203064);
case 158: return Color3(0.88235300779343F,0.64313727617264F,0.7607843875885F); case 158: return Color3(0.88235300779343,0.64313727617264,0.7607843875885);
case 168: return Color3(0.4588235616684F,0.42352944612503F,0.38431376218796F); case 168: return Color3(0.4588235616684,0.42352944612503,0.38431376218796);
case 176: return Color3(0.59215688705444F,0.41176474094391F,0.35686275362968F); case 176: return Color3(0.59215688705444,0.41176474094391,0.35686275362968);
case 178: return Color3(0.70588237047195F,0.51764708757401F,0.33333334326744F); case 178: return Color3(0.70588237047195,0.51764708757401,0.33333334326744);
case 179: return Color3(0.53725492954254F,0.52941179275513F,0.53333336114883F); case 179: return Color3(0.53725492954254,0.52941179275513,0.53333336114883);
case 180: return Color3(0.84313732385635F,0.66274511814117F,0.29411765933037F); case 180: return Color3(0.84313732385635,0.66274511814117,0.29411765933037);
case 190: return Color3(0.9764706492424F,0.83921575546265F,0.1803921610117F); case 190: return Color3(0.9764706492424,0.83921575546265,0.1803921610117);
case 191: return Color3(0.90980398654938F,0.67058825492859F,0.17647059261799F); case 191: return Color3(0.90980398654938,0.67058825492859,0.17647059261799);
case 192: return Color3(0.41176474094391F,0.25098040699959F,0.15686275064945F); case 192: return Color3(0.41176474094391,0.25098040699959,0.15686275064945);
case 193: return Color3(0.8117647767067F,0.37647062540054F,0.14117647707462F); case 193: return Color3(0.8117647767067,0.37647062540054,0.14117647707462);
case 195: return Color3(0.27450981736183F,0.40392160415649F,0.64313727617264F); case 195: return Color3(0.27450981736183,0.40392160415649,0.64313727617264);
case 196: return Color3(0.13725490868092F,0.27843138575554F,0.54509806632996F); case 196: return Color3(0.13725490868092,0.27843138575554,0.54509806632996);
case 198: return Color3(0.55686277151108F,0.258823543787F,0.52156865596771F); case 198: return Color3(0.55686277151108,0.258823543787,0.52156865596771);
case 199: return Color3(0.38823533058167F,0.37254902720451F,0.38431376218796F); case 199: return Color3(0.38823533058167,0.37254902720451,0.38431376218796);
case 200: return Color3(0.50980395078659F,0.54117649793625F,0.3647058904171F); case 200: return Color3(0.50980395078659,0.54117649793625,0.3647058904171);
case 208: return Color3(0.89803928136826F,0.89411771297455F,0.87450987100601F); case 208: return Color3(0.89803928136826,0.89411771297455,0.87450987100601);
case 209: return Color3(0.69019609689713F,0.55686277151108F,0.26666668057442F); case 209: return Color3(0.69019609689713,0.55686277151108,0.26666668057442);
case 210: return Color3(0.43921571969986F,0.58431375026703F,0.47058826684952F); case 210: return Color3(0.43921571969986,0.58431375026703,0.47058826684952);
case 211: return Color3(0.47450983524323F,0.70980393886566F,0.70980393886566F); case 211: return Color3(0.47450983524323,0.70980393886566,0.70980393886566);
case 212: return Color3(0.6235294342041F,0.76470595598221F,0.91372555494308F); case 212: return Color3(0.6235294342041,0.76470595598221,0.91372555494308);
case 213: return Color3(0.42352944612503F,0.50588238239288F,0.71764707565308F); case 213: return Color3(0.42352944612503,0.50588238239288,0.71764707565308);
case 216: return Color3(0.56078433990479F,0.29803922772408F,0.16470588743687F); case 216: return Color3(0.56078433990479,0.29803922772408,0.16470588743687);
case 217: return Color3(0.48627454042435F,0.36078432202339F,0.27450981736183F); case 217: return Color3(0.48627454042435,0.36078432202339,0.27450981736183);
case 218: return Color3(0.58823531866074F,0.43921571969986F,0.6235294342041F); case 218: return Color3(0.58823531866074,0.43921571969986,0.6235294342041);
case 219: return Color3(0.41960787773132F,0.38431376218796F,0.60784316062927F); case 219: return Color3(0.41960787773132,0.38431376218796,0.60784316062927);
case 220: return Color3(0.65490198135376F,0.66274511814117F,0.80784320831299F); case 220: return Color3(0.65490198135376,0.66274511814117,0.80784320831299);
case 221: return Color3(0.80392163991928F,0.38431376218796F,0.59607845544815F); case 221: return Color3(0.80392163991928,0.38431376218796,0.59607845544815);
case 222: return Color3(0.89411771297455F,0.678431391716F,0.78431379795074F); case 222: return Color3(0.89411771297455,0.678431391716,0.78431379795074);
case 223: return Color3(0.86274516582489F,0.56470590829849F,0.58431375026703F); case 223: return Color3(0.86274516582489,0.56470590829849,0.58431375026703);
case 224: return Color3(0.94117653369904F,0.83529418706894F,0.62745100259781F); case 224: return Color3(0.94117653369904,0.83529418706894,0.62745100259781);
case 225: return Color3(0.9215686917305F,0.72156864404678F,0.49803924560547F); case 225: return Color3(0.9215686917305,0.72156864404678,0.49803924560547);
case 226: return Color3(0.99215692281723F,0.91764712333679F,0.55294120311737F); case 226: return Color3(0.99215692281723,0.91764712333679,0.55294120311737);
case 232: return Color3(0.49019610881805F,0.73333334922791F,0.8666667342186F); case 232: return Color3(0.49019610881805,0.73333334922791,0.8666667342186);
case 268: return Color3(0.2039215862751F,0.16862745583057F,0.4588235616684F); case 268: return Color3(0.2039215862751,0.16862745583057,0.4588235616684);
case 1001: return Color3(0.97254908084869F,0.97254908084869F,0.97254908084869F); case 1001: return Color3(0.97254908084869,0.97254908084869,0.97254908084869);
case 1002: return Color3(0.80392163991928F,0.80392163991928F,0.80392163991928F); case 1002: return Color3(0.80392163991928,0.80392163991928,0.80392163991928);
case 1003: return Color3(0.066666670143604F,0.066666670143604F,0.066666670143604F); case 1003: return Color3(0.066666670143604,0.066666670143604,0.066666670143604);
case 1004: return Color3(1,0,0); case 1004: return Color3(1,0,0);
case 1005: return Color3(1,0.68627452850342F,0); case 1005: return Color3(1,0.68627452850342,0);
case 1006: return Color3(0.70588237047195F,0.50196081399918F,1); case 1006: return Color3(0.70588237047195,0.50196081399918,1);
case 1007: return Color3(0.63921570777893F,0.29411765933037F,0.29411765933037F); case 1007: return Color3(0.63921570777893,0.29411765933037,0.29411765933037);
case 1008: return Color3(0.75686281919479F,0.74509805440903F,0.258823543787F); case 1008: return Color3(0.75686281919479,0.74509805440903,0.258823543787);
case 1009: return Color3(1,1,0); case 1009: return Color3(1,1,0);
case 1010: return Color3(0,0,1); case 1010: return Color3(0,0,1);
case 1011: return Color3(0,0.12549020349979F,0.37647062540054F); case 1011: return Color3(0,0.12549020349979,0.37647062540054);
case 1012: return Color3(0.1294117718935F,0.32941177487373F,0.72549021244049F); case 1012: return Color3(0.1294117718935,0.32941177487373,0.72549021244049);
case 1013: return Color3(0.015686275437474F,0.68627452850342F,0.92549026012421F); case 1013: return Color3(0.015686275437474,0.68627452850342,0.92549026012421);
case 1014: return Color3(0.66666668653488F,0.33333334326744F,0); case 1014: return Color3(0.66666668653488,0.33333334326744,0);
case 1015: return Color3(0.66666668653488F,0,0.66666668653488F); case 1015: return Color3(0.66666668653488,0,0.66666668653488);
case 1016: return Color3(1,0.40000003576279F,0.80000007152557F); case 1016: return Color3(1,0.40000003576279,0.80000007152557);
case 1017: return Color3(1,0.68627452850342F,0); case 1017: return Color3(1,0.68627452850342,0);
case 1018: return Color3(0.070588238537312F,0.93333339691162F,0.83137261867523F); case 1018: return Color3(0.070588238537312,0.93333339691162,0.83137261867523);
case 1019: return Color3(0,1,1); case 1019: return Color3(0,1,1);
case 1020: return Color3(0,1,0); case 1020: return Color3(0,1,0);
case 1021: return Color3(0.22745099663734F,0.49019610881805F,0.082352943718433F); case 1021: return Color3(0.22745099663734,0.49019610881805,0.082352943718433);
case 1022: return Color3(0.49803924560547F,0.55686277151108F,0.39215689897537F); case 1022: return Color3(0.49803924560547,0.55686277151108,0.39215689897537);
case 1023: return Color3(0.54901963472366F,0.35686275362968F,0.6235294342041F); case 1023: return Color3(0.54901963472366,0.35686275362968,0.6235294342041);
case 1024: return Color3(0.68627452850342F,0.8666667342186F,1); case 1024: return Color3(0.68627452850342,0.8666667342186,1);
case 1025: return Color3(1,0.78823536634445F,0.78823536634445F); case 1025: return Color3(1,0.78823536634445,0.78823536634445);
case 1026: return Color3(0.69411766529083F,0.65490198135376F,1); case 1026: return Color3(0.69411766529083,0.65490198135376,1);
case 1027: return Color3(0.6235294342041F,0.95294123888016F,0.91372555494308F); case 1027: return Color3(0.6235294342041,0.95294123888016,0.91372555494308);
case 1028: return Color3(0.80000007152557F,1,0.80000007152557F); case 1028: return Color3(0.80000007152557,1,0.80000007152557);
case 1029: return Color3(1,1,0.80000007152557F); case 1029: return Color3(1,1,0.80000007152557);
case 1030: return Color3(1,0.80000007152557F,0.60000002384186F); case 1030: return Color3(1,0.80000007152557,0.60000002384186);
case 1031: return Color3(0.38431376218796F,0.14509804546833F,0.81960791349411F); case 1031: return Color3(0.38431376218796,0.14509804546833,0.81960791349411);
case 1032: return Color3(1,0,0.74901962280273F); case 1032: return Color3(1,0,0.74901962280273);
default: return Color3::gray(); default: return Color3::gray();
} }
} }
@@ -411,39 +408,17 @@ bool DataModelInstance::load(const char* filename, bool clearObjects)
name = tname; name = tname;
return true; return true;
} }
else
{
std::stringstream msg;
msg << "Failed to load file:" << std::endl << filename << std::endl << strerror(errno);
MessageBoxStr(msg.str());
}
} }
bool DataModelInstance::readXMLFileStream(std::ifstream* file) bool DataModelInstance::readXMLFileStream(std::ifstream* file)
{ {
file->seekg(0,file->end); file->seekg(0,file->end);
int length = file->tellg(); int length = file->tellg();
if (length<0)
{
MessageBoxStr("File is empty");
file->close();
return false;
}
file->seekg(0,file->beg); file->seekg(0,file->beg);
char * buffer = new char[length+1]; char * buffer = new char[length+1];
buffer[length]=0; buffer[length]=0;
file->read(buffer,length); file->read(buffer,length);
file->close(); file->close();
if (!file)
{
stringstream msg;
msg << "Something went wrong." << endl << strerror(errno);
MessageBoxStr(msg.str());
return false;
}
_successfulLoad = true;
xml_document<> doc; xml_document<> doc;
doc.parse<0>(buffer); doc.parse<0>(buffer);
xml_node<> *mainNode = doc.first_node(); xml_node<> *mainNode = doc.first_node();
@@ -527,9 +502,9 @@ void DataModelInstance::drawMessage(RenderDevice* rd)
} }
} }
char brkc[12]; char brkc[12];
sprintf_s(brkc, "%d", brickCount); sprintf(brkc, "%d", brickCount);
char instc[12]; char instc[12];
sprintf_s(instc, "%d", instCount); sprintf(instc, "%d", instCount);
message = "Bricks: "; message = "Bricks: ";
message += brkc; message += brkc;
message += " Snaps: "; message += " Snaps: ";
@@ -564,7 +539,7 @@ void DataModelInstance::setMousePos(Vector2 pos)
mousex=pos.x; mousex=pos.x;
mousey=pos.y; mousey=pos.y;
} }
GuiRoot* DataModelInstance::getGuiRoot() Instance* DataModelInstance::getGuiRoot()
{ {
return guiRoot; return guiRoot;
} }

View File

@@ -3,9 +3,6 @@
#include "LevelInstance.h" #include "LevelInstance.h"
#include "PartInstance.h" #include "PartInstance.h"
#include "rapidxml/rapidxml.hpp" #include "rapidxml/rapidxml.hpp"
#include "GuiRoot.h"
class GuiRoot;
class DataModelInstance : class DataModelInstance :
public Instance public Instance
@@ -25,12 +22,12 @@ public:
WorkspaceInstance* workspace; WorkspaceInstance* workspace;
LevelInstance * level; LevelInstance * level;
LevelInstance * getLevel(); LevelInstance * getLevel();
GuiRoot* guiRoot; Instance* guiRoot;
std::string message; std::string message;
std::string _loadedFileName; std::string _loadedFileName;
bool showMessage; bool showMessage;
G3D::GFontRef font; G3D::GFontRef font;
GuiRoot* getGuiRoot(); Instance* getGuiRoot();
float mousex; float mousex;
float mousey; float mousey;
Vector2 getMousePos(); Vector2 getMousePos();

View File

@@ -1,8 +0,0 @@
#include "DeleteListener.h"
#include "Globals.h"
#include "Application.h"
void DeleteListener::onButton1MouseClick(BaseButtonInstance* button)
{
g_usableApp->deleteInstance();
}

View File

@@ -1,6 +0,0 @@
#include "ButtonListener.h"
class DeleteListener : public ButtonListener {
public:
void onButton1MouseClick(BaseButtonInstance*);
};

View File

@@ -1,21 +1,13 @@
#pragma once #pragma once
#include <G3DAll.h> #include <G3DAll.h>
#include "PropertyWindow.h"
#include "TextButtonInstance.h"
#include "ImageButtonInstance.h"
#include "CameraController.h" #include "CameraController.h"
//#include "GuiRoot.h" #include "PropertyWindow.h"
class TextButtonInstance; class Demo { // : public GApp {
class ImageButtonInstance;
class PartInstance;
class CameraController;
class Application { // : public GApp {
public: public:
Application(HWND parentWindow); Demo(const GAppSettings& settings,HWND parentWindow);
void Boop(); void Boop();
virtual ~Application() {} virtual ~Demo() {}
virtual void exitApplication(); virtual void exitApplication();
virtual void onInit(); virtual void onInit();
virtual void onLogic(); virtual void onLogic();
@@ -24,13 +16,8 @@ class Application { // : public GApp {
virtual void onGraphics(RenderDevice* rd); virtual void onGraphics(RenderDevice* rd);
virtual void onUserInput(UserInput* ui); virtual void onUserInput(UserInput* ui);
virtual void onCleanup(); virtual void onCleanup();
void clearInstances();
PartInstance* makePart();
void drawButtons(RenderDevice* rd);
void drawOutline(Vector3 from, Vector3 to, RenderDevice* rd, LightingParameters lighting, Vector3 size, Vector3 pos, CoordinateFrame c);
void makeFlag(Vector3 &vec, RenderDevice* &rd);
std::vector<Instance*> getSelection(); std::vector<Instance*> getSelection();
void deleteInstance();
void run(); void run();
void QuitApp(); void QuitApp();
void resizeWithParent(HWND parentWindow); void resizeWithParent(HWND parentWindow);
@@ -38,23 +25,19 @@ class Application { // : public GApp {
void onKeyPressed(int key); void onKeyPressed(int key);
void onKeyUp(int key); void onKeyUp(int key);
void onMouseLeftPressed(HWND hwnd,int x, int y); void onMouseLeftPressed(HWND hwnd,int x, int y);
void onMouseLeftUp(RenderDevice* renderDevice, int x, int y); void onMouseLeftUp(int x, int y);
void onMouseRightPressed(int x, int y); void onMouseRightPressed(int x, int y);
void onMouseRightUp(int x, int y); void onMouseRightUp(int x, int y);
void onMouseMoved(int x, int y); void onMouseMoved(int x, int y);
void onMouseWheel(int x, int y, short delta); void onMouseWheel(int x, int y, short delta);
void setFocus(bool isFocused);
int getMode();
CameraController cameraController; CameraController cameraController;
RenderDevice* renderDevice;
UserInput* userInput; UserInput* userInput;
PropertyWindow* _propWindow; PropertyWindow* _propWindow;
void generateShadowMap(const CoordinateFrame& lightViewMatrix) const; void generateShadowMap(const CoordinateFrame& lightViewMatrix) const;
RenderDevice* getRenderDevice();
void selectInstance(Instance* selectedInstance,PropertyWindow* propWindow);
void setMode(int mode);
private: private:
RenderDevice* renderDevice; void initGUI();
//void initGUI();
HWND _hWndMain; HWND _hWndMain;
SkyRef sky; SkyRef sky;
bool quit; bool quit;
@@ -65,12 +48,7 @@ class Application { // : public GApp {
HWND _hwndToolbox; HWND _hwndToolbox;
HWND _buttonTest; HWND _buttonTest;
HWND _hwndRenderer; HWND _hwndRenderer;
DataModelInstance* _dataModel;
G3D::TextureRef shadowMap; G3D::TextureRef shadowMap;
std::string _title;
bool _dragging;
int _mode;
GAppSettings _settings;
double lightProjX, lightProjY, lightProjNear, lightProjFar; double lightProjX, lightProjY, lightProjNear, lightProjFar;
protected: protected:
Stopwatch m_graphicsWatch; Stopwatch m_graphicsWatch;

View File

@@ -1,43 +1,91 @@
// Generated by ResEdit 1.6.6 // Microsoft Visual C++ generated resource script.
// Copyright (C) 2006-2015 //
// http://www.resedit.net
#include <windows.h>
#include <commctrl.h>
#include <richedit.h>
#include "resource.h" #include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// //
// Bitmap resources // Generated from the TEXTINCLUDE 2 resource.
// //
#include "windows.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE
BEGIN
"#include ""windows.h""\r\n"
"\0"
END
3 TEXTINCLUDE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
#endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// English (Canada) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENC)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_CAN LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_CAN
IDB_BITMAP1 BITMAP "Parts.bmp" #pragma code_page(1252)
#endif //_WIN32
/////////////////////////////////////////////////////////////////////////////
// //
// Dialog resources // Icon
// //
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
IDD_DIALOG1 DIALOG 0, 0, 295, 43
STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SETFOREGROUND | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU
EXSTYLE WS_EX_WINDOWEDGE
CAPTION "Insert Object"
FONT 8, "Ms Shell Dlg"
{
EDITTEXT IDE_EDIT, 35, 6, 195, 14, ES_AUTOHSCROLL, WS_EX_LEFT
LTEXT "Class:", 0, 10, 9, 20, 9, SS_LEFT, WS_EX_LEFT
PUSHBUTTON "Cancel", IDCANCEL, 237, 24, 50, 14, 0, WS_EX_LEFT
DEFPUSHBUTTON "OK", IDOK, 237, 6, 50, 14, 0, WS_EX_LEFT
}
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
//
// Icon resources
//
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_CAN
IDI_ICON1 ICON "icon1.ico" IDI_ICON1 ICON "icon1.ico"
/////////////////////////////////////////////////////////////////////////////
//
// Bitmap
//
IDB_BITMAP1 BITMAP "Parts.bmp"
#endif // English (Canada) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

View File

@@ -1,13 +0,0 @@
<html>
<head>
<title> RBX05R Documentation </title>
<meta charset="utf-8">
</head>
<body>
<div class="content" style="text-align:center;">
<h1> ROBLOX 2005 Recreation documentation </h1>
<br>
<h4> Current for: r360 </h4>
</div>
</body>
</html>

4
Enum.h
View File

@@ -5,13 +5,13 @@ namespace Enum
namespace SurfaceType namespace SurfaceType
{ {
enum Value { enum Value {
Smooth, Snaps, Inlets, Glue, Weld, Spawn, Hinge, Motor, Bumps Smooth, Bumps, Welds, Glue
}; };
} }
namespace Shape namespace Shape
{ {
enum Value { enum Value {
Ball = 0, Block = 1, Cylinder = 2 Block, Sphere, Cylinder
}; };
} }
} }

View File

@@ -1,4 +1,3 @@
#ifdef UENUMS
#ifndef ENUM_H #ifndef ENUM_H
#define ENUM_H #define ENUM_H
static enum BinType {GameTool, Grab, Clone, Hammer}; static enum BinType {GameTool, Grab, Clone, Hammer};
@@ -13,4 +12,3 @@ static enum SoundType {NoSound, Boing, Bomb, Break, Click, Clock, Slingshot, Pag
static enum PartType {Ball, Block, Cylinder}; static enum PartType {Ball, Block, Cylinder};
static enum KeywordFilterType {Include, Exclude}; static enum KeywordFilterType {Include, Exclude};
#endif #endif
#endif

View File

@@ -1,29 +0,0 @@
#include <sstream>
#include "ErrorFunctions.h"
#include "Globals.h"
void OnError(int err, std::string msg)
{
//g_usableApp->window()->setInputCaptureCount(0);
//g_usableApp->window()->setMouseVisible(true);
std::string emsg = "An unexpected error has occured and "+g_PlaceholderName+" has to quit. We're sorry!" + msg;
std::string title = g_PlaceholderName+"Crash";
//clearInstances();
MessageBox(NULL, emsg.c_str(), title.c_str(), MB_OK);
exit(err);
}
void MessageBoxStr(std::string msg)
{
std::string title = g_PlaceholderName;
MessageBox(NULL, msg.c_str(), title.c_str(), MB_OK);
}
void MessageBoxStream(std::stringstream msg)
{
std::string strMsg = msg.str();
std::string title = g_PlaceholderName;
MessageBox(NULL, strMsg.c_str(), title.c_str(), MB_OK);
}

View File

@@ -1,6 +0,0 @@
#pragma once
#include <string>
void OnError(int err, std::string msg = "");
void MessageBoxStr(std::string msg);
void MessageBoxStream(std::stringstream msg);

View File

@@ -1,6 +1,6 @@
 
Microsoft Visual Studio Solution File, Format Version 9.00 Microsoft Visual Studio Solution File, Format Version 9.00
# Visual C++ Express 2005 # Visual Studio 2005
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "G3DTest", "G3DTest.vcproj", "{6C4D6EEF-B1D1-456A-B850-92CAB17124BE}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "G3DTest", "G3DTest.vcproj", "{6C4D6EEF-B1D1-456A-B850-92CAB17124BE}"
EndProject EndProject
Global Global

View File

@@ -3,7 +3,7 @@
ProjectType="Visual C++" ProjectType="Visual C++"
Version="8.00" Version="8.00"
Name="G3DTest" Name="G3DTest"
ProjectGUID="{6C4D6EEF-B1D1-456A-B850-92CAB17124BE}" ProjectGUID="{277D185B-AEBA-4F75-A7FC-F1EBE787C200}"
RootNamespace="G3DTest" RootNamespace="G3DTest"
> >
<Platforms> <Platforms>
@@ -234,10 +234,6 @@
Name="Source Files" Name="Source Files"
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
> >
<File
RelativePath=".\Application.cpp"
>
</File>
<File <File
RelativePath=".\AudioPlayer.cpp" RelativePath=".\AudioPlayer.cpp"
> >
@@ -258,10 +254,6 @@
RelativePath=".\CameraController.cpp" RelativePath=".\CameraController.cpp"
> >
</File> </File>
<File
RelativePath=".\ErrorFunctions.cpp"
>
</File>
<File <File
RelativePath=".\Globals.cpp" RelativePath=".\Globals.cpp"
> >
@@ -270,18 +262,22 @@
RelativePath=".\GroupInstance.cpp" RelativePath=".\GroupInstance.cpp"
> >
</File> </File>
<File
RelativePath=".\GuiRoot.cpp"
>
</File>
<File <File
RelativePath=".\IEBrowser.cpp" RelativePath=".\IEBrowser.cpp"
> >
</File> </File>
<File
RelativePath=".\IEBrowser.h"
>
</File>
<File <File
RelativePath=".\IEDispatcher.cpp" RelativePath=".\IEDispatcher.cpp"
> >
</File> </File>
<File
RelativePath=".\LevelInstance.cpp"
>
</File>
<File <File
RelativePath="main.cpp" RelativePath="main.cpp"
> >
@@ -302,6 +298,10 @@
/> />
</FileConfiguration> </FileConfiguration>
</File> </File>
<File
RelativePath=".\PartInstance.cpp"
>
</File>
<File <File
RelativePath=".\propertyGrid.cpp" RelativePath=".\propertyGrid.cpp"
> >
@@ -311,7 +311,7 @@
> >
</File> </File>
<File <File
RelativePath=".\StringFunctions.cpp" RelativePath=".\PVInstance.cpp"
> >
</File> </File>
<File <File
@@ -337,18 +337,6 @@
RelativePath=".\Instance.cpp" RelativePath=".\Instance.cpp"
> >
</File> </File>
<File
RelativePath=".\LevelInstance.cpp"
>
</File>
<File
RelativePath=".\PartInstance.cpp"
>
</File>
<File
RelativePath=".\PVInstance.cpp"
>
</File>
<File <File
RelativePath=".\TextButtonInstance.cpp" RelativePath=".\TextButtonInstance.cpp"
> >
@@ -358,39 +346,11 @@
> >
</File> </File>
</Filter> </Filter>
<Filter
Name="Listeners"
>
<File
RelativePath=".\CameraButtonListener.cpp"
>
</File>
<File
RelativePath=".\DeleteListener.cpp"
>
</File>
<File
RelativePath=".\GUDButtonListener.cpp"
>
</File>
<File
RelativePath=".\ModeSelectionListener.cpp"
>
</File>
<File
RelativePath=".\RotateButtonListener.cpp"
>
</File>
</Filter>
</Filter> </Filter>
<Filter <Filter
Name="Header Files" Name="Header Files"
Filter="h;hpp;hxx;hm;inl" Filter="h;hpp;hxx;hm;inl"
> >
<File
RelativePath=".\Application.h"
>
</File>
<File <File
RelativePath=".\AudioPlayer.h" RelativePath=".\AudioPlayer.h"
> >
@@ -403,6 +363,10 @@
RelativePath=".\BrowserCallHandler.h" RelativePath=".\BrowserCallHandler.h"
> >
</File> </File>
<File
RelativePath=".\ButtonListener.h"
>
</File>
<File <File
RelativePath=".\CameraController.h" RelativePath=".\CameraController.h"
> >
@@ -419,20 +383,12 @@
RelativePath=".\Enums.h" RelativePath=".\Enums.h"
> >
</File> </File>
<File
RelativePath=".\ErrorFunctions.h"
>
</File>
<File <File
RelativePath=".\Globals.h" RelativePath=".\Globals.h"
> >
</File> </File>
<File <File
RelativePath=".\GuiRoot.h" RelativePath=".\GroupInstance.h"
>
</File>
<File
RelativePath=".\IEBrowser.h"
> >
</File> </File>
<File <File
@@ -443,6 +399,10 @@
RelativePath=".\LevelInstance.h" RelativePath=".\LevelInstance.h"
> >
</File> </File>
<File
RelativePath=".\PartInstance.h"
>
</File>
<File <File
RelativePath=".\propertyGrid.h" RelativePath=".\propertyGrid.h"
> >
@@ -451,6 +411,10 @@
RelativePath=".\PropertyWindow.h" RelativePath=".\PropertyWindow.h"
> >
</File> </File>
<File
RelativePath=".\PVInstance.h"
>
</File>
<File <File
RelativePath=".\rapidxml\rapidxml.hpp" RelativePath=".\rapidxml\rapidxml.hpp"
> >
@@ -471,14 +435,6 @@
RelativePath=".\resource.h" RelativePath=".\resource.h"
> >
</File> </File>
<File
RelativePath=".\RotateButtonListener.h"
>
</File>
<File
RelativePath=".\StringFunctions.h"
>
</File>
<File <File
RelativePath=".\win32Defines.h" RelativePath=".\win32Defines.h"
> >
@@ -498,10 +454,6 @@
RelativePath=".\DataModelInstance.h" RelativePath=".\DataModelInstance.h"
> >
</File> </File>
<File
RelativePath=".\GroupInstance.h"
>
</File>
<File <File
RelativePath=".\ImageButtonInstance.h" RelativePath=".\ImageButtonInstance.h"
> >
@@ -510,14 +462,6 @@
RelativePath=".\Instance.h" RelativePath=".\Instance.h"
> >
</File> </File>
<File
RelativePath=".\PartInstance.h"
>
</File>
<File
RelativePath=".\PVInstance.h"
>
</File>
<File <File
RelativePath=".\TextButtonInstance.h" RelativePath=".\TextButtonInstance.h"
> >
@@ -527,30 +471,6 @@
> >
</File> </File>
</Filter> </Filter>
<Filter
Name="Listeners"
>
<File
RelativePath=".\ButtonListener.h"
>
</File>
<File
RelativePath=".\CameraButtonListener.h"
>
</File>
<File
RelativePath=".\DeleteListener.h"
>
</File>
<File
RelativePath=".\GUDButtonListener.h"
>
</File>
<File
RelativePath=".\ModeSelectionListener.h"
>
</File>
</Filter>
</Filter> </Filter>
<Filter <Filter
Name="Resource Files" Name="Resource Files"

View File

@@ -1,40 +0,0 @@
#include <G3DAll.h>
#include "Application.h"
#include "Globals.h"
#include "AudioPlayer.h"
#include "GUDButtonListener.h"
void GUDButtonListener::onButton1MouseClick(BaseButtonInstance* button)
{
bool cont = false;
for(size_t i = 0; i < g_selectedInstances.size(); i++)
if(g_selectedInstances.at(i)->canDelete)
{
cont = true;
break;
}
if(cont)
{
AudioPlayer::playSound(dingSound);
if(button->name == "Duplicate")
{
std::vector<Instance*> newinst;
for(size_t i = 0; i < g_selectedInstances.size(); i++)
{
if(g_selectedInstances.at(i)->canDelete)
{
Instance* tempinst = g_selectedInstances.at(i);
Instance* clonedInstance = g_selectedInstances.at(i)->clone();
newinst.push_back(tempinst);
}
/*tempinst->setPosition(Vector3(tempPos.x, tempPos.y + tempSize.y, tempPos.z));
g_usableApp->cameraController.centerCamera(g_selectedInstances.at(0));*/
}
g_selectedInstances = newinst;
if(g_selectedInstances.size() > 0)
g_usableApp->_propWindow->UpdateSelected(newinst.at(0));
}
}
}

View File

@@ -1,7 +0,0 @@
#pragma once
#include "ButtonListener.h"
class GUDButtonListener : public ButtonListener {
public:
void onButton1MouseClick(BaseButtonInstance*);
};

View File

@@ -1,6 +1,6 @@
#include "Globals.h" #include "Globals.h"
#include "Application.h"
DataModelInstance* Globals::dataModel = NULL;
int const Globals::gen = 0; int const Globals::gen = 0;
int const Globals::major = 0; int const Globals::major = 0;
int const Globals::minor = 4; int const Globals::minor = 4;
@@ -9,23 +9,11 @@ int Globals::surfaceId = 2;
bool Globals::showMouse = true; bool Globals::showMouse = true;
bool Globals::useMousePoint = false; bool Globals::useMousePoint = false;
std::vector<Instance*> postRenderStack = std::vector<Instance*>(); std::vector<Instance*> postRenderStack = std::vector<Instance*>();
const std::string Globals::PlaceholderName = "Dynamica";
std::vector<Instance*> g_selectedInstances = std::vector<Instance*>(); std::vector<Instance*> g_selectedInstances = std::vector<Instance*>();
DataModelInstance* g_dataModel = NULL;
bool running = false; bool running = false;
G3D::TextureRef Globals::surface; G3D::TextureRef Globals::surface;
POINT Globals::mousepoint; POINT Globals::mousepoint;
GFontRef g_fntdominant = NULL;
GFontRef g_fntlighttrek = NULL;
Globals::Globals(void){} Globals::Globals(void){}
Globals::~Globals(void){} Globals::~Globals(void){}
std::string cameraSound="";
std::string clickSound="";
std::string dingSound="";
Application *g_usableApp = NULL;

View File

@@ -2,8 +2,6 @@
#include "DataModelInstance.h" #include "DataModelInstance.h"
#include <G3DAll.h> #include <G3DAll.h>
class Application;
class Globals class Globals
{ {
public: public:
@@ -19,19 +17,9 @@ public:
static const int patch; static const int patch;
static G3D::TextureRef surface; static G3D::TextureRef surface;
static int surfaceId; static int surfaceId;
static const std::string g_PlaceholderName; static const std::string PlaceholderName;
}; };
extern std::vector<Instance*> postRenderStack; extern std::vector<Instance*> postRenderStack;
extern std::vector<Instance*> g_selectedInstances; extern std::vector<Instance*> g_selectedInstances;
extern bool running; extern bool running;
extern DataModelInstance* g_dataModel;
extern Application* g_usableApp;
extern GFontRef g_fntdominant;
extern GFontRef g_fntlighttrek;
extern std::string cameraSound;
extern std::string clickSound;
extern std::string dingSound;
const std::string g_PlaceholderName = "HyperCube";

View File

@@ -4,21 +4,17 @@ GroupInstance::GroupInstance(void)
{ {
PVInstance::PVInstance(); PVInstance::PVInstance();
className = "GroupInstance"; className = "GroupInstance";
listicon = 12;
} }
GroupInstance::GroupInstance(const GroupInstance &oinst) GroupInstance::GroupInstance(const GroupInstance &oinst)
{ {
PVInstance::PVInstance(oinst); PVInstance::PVInstance(oinst);
listicon = 12;
} }
GroupInstance::~GroupInstance(void) GroupInstance::~GroupInstance(void)
{ {
} }
std::vector<PROPGRIDITEM> GroupInstance::getProperties() std::vector<PROPGRIDITEM> GroupInstance::getProperties()
{ {
std::vector<PROPGRIDITEM> properties = PVInstance::getProperties(); std::vector<PROPGRIDITEM> properties = PVInstance::getProperties();

View File

@@ -10,5 +10,4 @@ public:
GroupInstance(const GroupInstance &oinst); GroupInstance(const GroupInstance &oinst);
virtual std::vector<PROPGRIDITEM> getProperties(); virtual std::vector<PROPGRIDITEM> getProperties();
virtual void PropUpdate(LPPROPGRIDITEM &pItem); virtual void PropUpdate(LPPROPGRIDITEM &pItem);
}; };

View File

@@ -1,491 +0,0 @@
#include <iomanip>
#include <sstream>
#include "G3DAll.h"
#include "BaseButtonInstance.h"
#include "TextButtonInstance.h"
#include "ImageButtonInstance.h"
#include "GuiRoot.h"
#include "Globals.h"
#include "StringFunctions.h"
#include "GUDButtonListener.h"
#include "ModeSelectionListener.h"
#include "RotateButtonListener.h"
#include "CameraButtonListener.h"
#include "DeleteListener.h"
#include "ImageButtonInstance.h"
ImageButtonInstance* GuiRoot::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_2D.push_back(part);
return part;
}
TextButtonInstance* GuiRoot::makeTextButton()
{
TextButtonInstance* part = new TextButtonInstance();
return part;
}
GuiRoot::GuiRoot() : _message(""), _messageTime(0)
{
g_fntdominant = GFont::fromFile(GetFileInPath("/content/font/dominant.fnt"));
g_fntlighttrek = GFont::fromFile(GetFileInPath("/content/font/lighttrek.fnt"));
TextButtonInstance* button = makeTextButton();
button->boxBegin = Vector2(0, -24);
button->boxEnd = Vector2(80, 0);
button->floatBottom = true;
button->setParent(this);
button->font = g_fntlighttrek;
button->textColor = Color3(0,255,255);
button->textOutlineColor = Color4::clear();
button->title = "Hopper";
button->fontLocationRelativeTo = Vector2(10, 3);
button->setAllColorsSame();
button = makeTextButton();
button->boxBegin = Vector2(0, -48);
button->boxEnd = Vector2(80, -24);
button->floatBottom = true;
button->setParent(this);
button->font = g_fntlighttrek;
button->textColor = Color3(0,255,255);
button->textOutlineColor = Color4::clear();
button->title = "Controller";
button->fontLocationRelativeTo = Vector2(10, 3);
button->setAllColorsSame();
button = makeTextButton();
button->boxBegin = Vector2(0, -72);
button->boxEnd = Vector2(80, -48);
button->floatBottom = true;
button->setParent(this);
button->font = g_fntlighttrek;
button->textColor = Color3(0,255,255);
button->textOutlineColor = Color4::clear();
button->title = "Color";
button->fontLocationRelativeTo = Vector2(10, 3);
button->setAllColorsSame();
button = makeTextButton();
button->boxBegin = Vector2(0, -96);
button->boxEnd = Vector2(80, -72);
button->floatBottom = true;
button->setParent(this);
button->font = g_fntlighttrek;
button->textColor = Color3(0,255,255);
button->textOutlineColor = Color4::clear();
button->title = "Surface";
button->fontLocationRelativeTo = Vector2(10, 3);
button->setAllColorsSame();
button = makeTextButton();
button->boxBegin = Vector2(0, -120);
button->boxEnd = Vector2(80, -96);
button->floatBottom = true;
button->setParent(this);
button->font = g_fntlighttrek;
button->textColor = Color3(0,255,255);
button->boxOutlineColor = Color3(0,255,255);
button->title = "Model";
button->fontLocationRelativeTo = Vector2(10, 3);
button->setAllColorsSame();
button = makeTextButton();
button->boxBegin = Vector2(0, 0);
button->boxEnd = Vector2(125, 25);
button->setParent(this);
button->font = g_fntlighttrek;
button->textColor = Color3::white();
button->boxColor = Color4::clear();
button->textOutlineColor = Color4(0.5F,0.5F,0.5F,0.5F);
button->title = "File";
button->textSize = 16;
button->fontLocationRelativeTo = Vector2(10, 0);
button->setAllColorsSame();
button = makeTextButton();
button->boxBegin = Vector2(125, 0);
button->boxEnd = Vector2(250, 25);
button->setParent(this);
button->font = g_fntlighttrek;
button->textColor = Color3::white();
button->boxColor = Color4::clear();
button->textOutlineColor = Color4(0.5F,0.5F,0.5F,0.5F);
button->title = "Edit";
button->textSize = 16;
button->fontLocationRelativeTo = Vector2(10, 0);
button->setAllColorsSame();
button = makeTextButton();
button->boxBegin = Vector2(250, 0);
button->boxEnd = Vector2(375, 25);
button->setParent(this);
button->font = g_fntlighttrek;
button->textColor = Color3::white();
button->boxColor = Color4::clear();
button->textOutlineColor = Color4(0.5F,0.5F,0.5F,0.5F);
button->title = "View";
button->textSize = 16;
button->fontLocationRelativeTo = Vector2(10, 0);
button->setAllColorsSame();
button = makeTextButton();
button->boxBegin = Vector2(375, 0);
button->boxEnd = Vector2(500, 25);
button->setParent(this);
button->font = g_fntlighttrek;
button->textColor = Color3::white();
button->boxColor = Color4::clear();
button->textOutlineColor = Color4(0.5F,0.5F,0.5F,0.5F);
button->title = "Insert";
button->textSize = 16;
button->fontLocationRelativeTo = Vector2(10, 0);
button->setAllColorsSame();
button = makeTextButton();
button->boxBegin = Vector2(500, 0);
button->boxEnd = Vector2(625, 25);
button->setParent(this);
button->font = g_fntlighttrek;
button->textColor = Color3::white();
button->boxColor = Color4::clear();
button->textOutlineColor = Color4(0.5F,0.5F,0.5F,0.5F);
button->title = "Format";
button->textSize = 16;
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->name = "Group";
button->setAllColorsSame();
button->textColorDis = Color3(0.8F,0.8F,0.8F);
button->font = g_fntlighttrek;
button->fontLocationRelativeTo = Vector2(10, 0);
button->setParent(this);
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->name = "UnGroup";
button->setAllColorsSame();
button->textColorDis = Color3(0.8F,0.8F,0.8F);
button->font = g_fntlighttrek;
button->fontLocationRelativeTo = Vector2(10, 0);
button->setParent(this);
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->textColorDis = Color3(0.8F,0.8F,0.8F);
button->font = g_fntlighttrek;
button->fontLocationRelativeTo = Vector2(10, 0);
button->setParent(this);
button->name = "Duplicate";
button->setButtonListener(new GUDButtonListener());
ImageButtonInstance* instance = makeImageButton(
Texture::fromFile(GetFileInPath("/content/images/Run.png")),
Texture::fromFile(GetFileInPath("/content/images/Run_ovr.png")),
Texture::fromFile(GetFileInPath("/content/images/Run_dn.png")));
instance->name = "go";
instance->size = Vector2(65,65);
instance->position = Vector2(6.5, 25);
instance->setParent(this);
instance = makeImageButton(
Texture::fromFile(GetFileInPath("/content/images/ArrowTool.png")),
Texture::fromFile(GetFileInPath("/content/images/ArrowTool_ovr.png")),
Texture::fromFile(GetFileInPath("/content/images/ArrowTool_dn.png")),
Texture::fromFile(GetFileInPath("/content/images/ArrowTool_ds.png")));
instance->size = Vector2(50,50);
instance->position = Vector2(15, 90);
instance->setParent(this);
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(this);
instance->name = "Resize";
instance->setButtonListener(new ModeSelectionListener());
instance = makeImageButton(
Texture::fromFile(GetFileInPath("/content/images/MoveTool.png")),
Texture::fromFile(GetFileInPath("/content/images/MoveTool_ovr.png")),
Texture::fromFile(GetFileInPath("/content/images/MoveTool_dn.png")),
Texture::fromFile(GetFileInPath("/content/images/MoveTool_ds.png")));
instance->size = Vector2(40,40);
instance->position = Vector2(40, 140);
instance->setParent(this);
instance->name = "Arrows";
instance->setButtonListener(new ModeSelectionListener());
instance = makeImageButton(
Texture::fromFile(GetFileInPath("/content/images/SelectionRotate.png")),
Texture::fromFile(GetFileInPath("/content/images/SelectionRotate_ovr.png")),
NULL,
Texture::fromFile(GetFileInPath("/content/images/SelectionRotate_ds.png")));
instance->size = Vector2(30,30);
instance->position = Vector2(10, 175);
instance->setParent(this);
instance->name = "Rotate";
instance->setButtonListener(new RotateButtonListener());
instance = makeImageButton(
Texture::fromFile(GetFileInPath("/content/images/SelectionTilt.png")),
Texture::fromFile(GetFileInPath("/content/images/SelectionTilt_ovr.png")),
NULL,
Texture::fromFile(GetFileInPath("/content/images/SelectionTilt_ds.png")));
instance->size = Vector2(30,30);
instance->position = Vector2(40, 175);
instance->setParent(this);
instance->name = "Tilt";
instance->setButtonListener(new RotateButtonListener());
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->setParent(this);
instance->name = "Delete";
instance->setButtonListener(new DeleteListener());
instance = makeImageButton(
Texture::fromFile(GetFileInPath("/content/images/CameraZoomIn.png")),
Texture::fromFile(GetFileInPath("/content/images/CameraZoomIn_ovr.png")),
Texture::fromFile(GetFileInPath("/content/images/CameraZoomIn_dn.png")));
instance->size = Vector2(34,25);
instance->floatBottom = true;
instance->floatRight = true;
instance->position = Vector2(-77, -90);
instance->setParent(this);
instance->name = "ZoomIn";
instance->setButtonListener(new CameraButtonListener());
instance = makeImageButton(
Texture::fromFile(GetFileInPath("/content/images/CameraZoomOut.png")),
Texture::fromFile(GetFileInPath("/content/images/CameraZoomOut_ovr.png")),
Texture::fromFile(GetFileInPath("/content/images/CameraZoomOut_dn.png")));
instance->size = Vector2(34,26);
instance->floatBottom = true;
instance->floatRight = true;
instance->position = Vector2(-77, -31);
instance->setParent(this);
instance->name = "ZoomOut";
instance->setButtonListener(new CameraButtonListener());
instance = makeImageButton(
Texture::fromFile(GetFileInPath("/content/images/CameraPanLeft.png")),
Texture::fromFile(GetFileInPath("/content/images/CameraPanLeft_ovr.png")),
Texture::fromFile(GetFileInPath("/content/images/CameraPanLeft_dn.png")));
instance->size = Vector2(34,34);
instance->floatBottom = true;
instance->floatRight = true;
instance->position = Vector2(-110, -50);
instance->setParent(this);
instance->name = "PanLeft";
instance->setButtonListener(new CameraButtonListener());
instance = makeImageButton(
Texture::fromFile(GetFileInPath("/content/images/CameraPanRight.png")),
Texture::fromFile(GetFileInPath("/content/images/CameraPanRight_ovr.png")),
Texture::fromFile(GetFileInPath("/content/images/CameraPanRight_dn.png")));
instance->size = Vector2(34,34);
instance->floatBottom = true;
instance->floatRight = true;
instance->position = Vector2(-45, -50);
instance->setParent(this);
instance->name = "PanRight";
instance->setButtonListener(new CameraButtonListener());
instance = makeImageButton(
Texture::fromFile(GetFileInPath("/content/images/CameraCenter.png")),
Texture::fromFile(GetFileInPath("/content/images/CameraCenter_ovr.png")),
Texture::fromFile(GetFileInPath("/content/images/CameraCenter_dn.png")));
instance->size = Vector2(34,20);
instance->floatBottom = true;
instance->floatRight = true;
instance->position = Vector2(-77, -60);
instance->setParent(this);
instance->name = "CenterCam";
instance->setButtonListener(new CameraButtonListener());
instance = makeImageButton(
Texture::fromFile(GetFileInPath("/content/images/CameraTiltUp.png")),
Texture::fromFile(GetFileInPath("/content/images/CameraTiltUp_ovr.png")),
Texture::fromFile(GetFileInPath("/content/images/CameraTiltUp_dn.png")));
instance->size = Vector2(24,24);
instance->floatBottom = true;
instance->floatRight = true;
instance->position = Vector2(-105, -75);
instance->setParent(this);
instance->name = "TiltUp";
instance->setButtonListener(new CameraButtonListener());
instance = makeImageButton(
Texture::fromFile(GetFileInPath("/content/images/CameraTiltDown.png")),
Texture::fromFile(GetFileInPath("/content/images/CameraTiltDown_ovr.png")),
Texture::fromFile(GetFileInPath("/content/images/CameraTiltDown_dn.png")));
instance->size = Vector2(24,24);
instance->floatBottom = true;
instance->floatRight = true;
instance->position = Vector2(-40, -75);
instance->setParent(this);
instance->name = "TiltDown";
instance->setButtonListener(new CameraButtonListener());
}
void GuiRoot::drawButtons(RenderDevice* rd)
{
rd->pushState();
rd->beforePrimitive();
this->render(rd);
rd->afterPrimitive();
rd->popState();
}
void GuiRoot::setDebugMessage(std::string msg, G3D::RealTime msgTime)
{
_messageTime = msgTime;
_message = msg;
}
//void GuiRoot::render(G3D::RenderDevice* renderDevice) {}
void GuiRoot::renderGUI(G3D::RenderDevice* rd, double fps)
{
//TODO--Move these to their own instance
std::stringstream stream;
stream << std::fixed << std::setprecision(1) << g_dataModel->getLevel()->timer;
g_fntdominant->draw2D(rd, "Timer: " + stream.str(), Vector2(rd->getWidth() - 120, 25), 20, Color3::fromARGB(0x81C518), Color3::black());
g_fntdominant->draw2D(rd, "Score: " + Convert(g_dataModel->getLevel()->score), Vector2(rd->getWidth() - 120, 50), 20, Color3::fromARGB(0x81C518), Color3::black());
//FPS
#ifdef _DEBUG
stream.str("");
stream.clear();
stream << std::fixed << std::setprecision(3) << fps;
g_fntdominant->draw2D(rd, "FPS: " + stream.str(), Vector2(120, 25), 10, Color3::fromARGB(0xFFFF00), Color3::black());
#endif
//GUI Boxes
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
g_fntlighttrek->draw2D(rd, "CameraMenu", Vector2(rd->getWidth()-(g_fntlighttrek->get2DStringBounds("CameraMenu", 14).x+1),rd->getHeight() - 120), 14, Color3::white(), Color4(0.5F,0.5F,0.5F,0.5F));
//Tools menu
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));
g_fntlighttrek->draw2D(rd,"MENU", Vector2(10,332), 14, Color3::white(), Color4(0.5F,0.5F,0.5F,0.5F));
drawButtons(rd);
if(System::time() - 3 < _messageTime)
{
g_fntdominant->draw2D(rd, _message, Vector2((rd->getWidth()/2)-(g_fntdominant->get2DStringBounds(_message, 20).x/2),(rd->getHeight()/2)-(g_fntdominant->get2DStringBounds(_message, 20).y/2)), 20, Color3::yellow(), Color3::black());
}
g_dataModel->drawMessage(rd);
render(rd);
}
bool GuiRoot::mouseInGUI(G3D::RenderDevice* renderDevice,int x,int y)
{
std::vector<Instance*> instances_2D = g_dataModel->getGuiRoot()->getAllChildren();
for(size_t i = 0; i < instances_2D.size(); i++)
{
if(BaseButtonInstance* button = dynamic_cast<BaseButtonInstance*>(instances_2D.at(i)))
{
if(button->mouseInButton(x,y, renderDevice))
{
return true;
}
}
}
return false;
}
void GuiRoot::update()
{
Instance * obj6 = this->findFirstChild("Delete");
Instance * obj = this->findFirstChild("Duplicate");
Instance * obj2 = this->findFirstChild("Group");
Instance * obj3 = this->findFirstChild("UnGroup");
Instance * obj4 = this->findFirstChild("Rotate");
Instance * obj5 = this->findFirstChild("Tilt");
if(obj != NULL && obj2 != NULL && obj3 != NULL && obj4 !=NULL && obj5 != NULL && obj6 != NULL)
{
BaseButtonInstance* button = (BaseButtonInstance*)obj;
BaseButtonInstance* button2 = (BaseButtonInstance*)obj2;
BaseButtonInstance* button3 = (BaseButtonInstance*)obj3;
BaseButtonInstance* button4 = (BaseButtonInstance*)obj4;
BaseButtonInstance* button5 = (BaseButtonInstance*)obj5;
BaseButtonInstance* button6 = (BaseButtonInstance*)obj6;
button->disabled = true;
button2->disabled = true;
button3->disabled = true;
button4->disabled = true;
button5->disabled = true;
button6->disabled = true;
for(size_t i = 0; i < g_selectedInstances.size(); i++)
if(g_selectedInstances.at(i)->canDelete)
{
button->disabled = false;
button2->disabled = false;
button3->disabled = false;
button4->disabled = false;
button5->disabled = false;
button6->disabled = false;
break;
}
}
}
void GuiRoot::onMouseLeftUp(G3D::RenderDevice* renderDevice, int x,int y)
{
std::vector<Instance*> instances_2D = this->getAllChildren();
for(size_t i = 0; i < instances_2D.size(); i++)
{
if(BaseButtonInstance* button = dynamic_cast<BaseButtonInstance*>(instances_2D[i]))
{
if(button->mouseInButton(x, y, renderDevice))
{
button->onMouseClick();
}
}
}
}

View File

@@ -1,23 +0,0 @@
#pragma once
#include "Instance.h"
class ImageButtonInstance;
class TextButtonInstance;
class GuiRoot : public Instance
{
public:
GuiRoot();
TextButtonInstance* makeTextButton();
void drawButtons(RenderDevice* rd);
ImageButtonInstance* makeImageButton(G3D::TextureRef newImage, G3D::TextureRef overImage, G3D::TextureRef downImage, G3D::TextureRef disableImage);
void renderGUI(G3D::RenderDevice* rd, double fps);
void setDebugMessage(std::string msg, G3D::RealTime msgTime);
void update();
bool mouseInGUI(G3D::RenderDevice* renderDevice,int x,int y);
void onMouseLeftUp(G3D::RenderDevice* renderDevice, int x,int y);
private:
std::string _message;
G3D::RealTime _messageTime;
};

View File

@@ -2,13 +2,11 @@
#define WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN
#endif #endif
#include <windows.h> #include <windows.h>
#include "IEBrowser.h" #include "IEBrowser.h"
#include "Globals.h" #include "Globals.h"
#include "ax.h" #include "ax.h"
//#include "IEDispatcher.h"
void IEBrowser::Boop(char* test) void IEBrowser::Boop(char* test)
{ {
@@ -38,12 +36,6 @@ IEBrowser::~IEBrowser(void) {
} }
} }
// Something goes here
int IEBrowser::setExternal(IDispatch** ext)
{
return 1;
}
bool IEBrowser::navigateSyncURL(wchar_t* url) bool IEBrowser::navigateSyncURL(wchar_t* url)
{ {
MSG messages; MSG messages;
@@ -60,46 +52,17 @@ bool IEBrowser::navigateSyncURL(wchar_t* url)
DispatchMessage(&messages); DispatchMessage(&messages);
} }
} }
Sleep(30); Sleep(30);
HRESULT hresult = webBrowser->get_Document(&spDocument); HRESULT hresult = webBrowser->get_Document(&spDocument);
if (SUCCEEDED(hresult) && (spDocument != 0)) if (&spDocument!=0)
{ {
IOleObject* spOleObject;
if (SUCCEEDED(spDocument->QueryInterface(IID_IOleObject,(void**)&spOleObject)))
{
IOleClientSite* spClientSite;
hresult = spOleObject->GetClientSite(&spClientSite);
if (SUCCEEDED(hresult) && spClientSite)
{
m_spDefaultDocHostUIHandler = spClientSite;
ICustomDoc* spCustomDoc;
//IEDispatcher* spIEDispatcher;
if (SUCCEEDED(m_spDefaultDocHostUIHandler->QueryInterface(IID_IDocHostUIHandler,(void**)&m_spHandler)))
{
if (SUCCEEDED(spDocument->QueryInterface(IID_ICustomDoc,(void**)&spCustomDoc)))
{
spCustomDoc->SetUIHandler(m_spHandler);
m_spHandler->GetExternal(&m_spExternal);
}
}
}
}
return true; return true;
} }
} }
} }
else else
{ {
MessageBox(NULL,"Cannot read IWebBrowser2...",(g_PlaceholderName+" Crash").c_str(),MB_OK); MessageBox(NULL,"Cannot read IWebBrowser2...",(Globals::PlaceholderName+" Crash").c_str(),MB_OK);
} }
return false; return false;
} }

View File

@@ -2,7 +2,7 @@
#pragma once #pragma once
#include <mshtml.h> #include <mshtml.h>
#include <exdisp.h> #include <exdisp.h>
#include <Mshtmhst.h> //#include <Mshtmhst.h>
class IEBrowser { class IEBrowser {
public: public:
@@ -14,10 +14,4 @@ class IEBrowser {
IWebBrowser2* webBrowser; IWebBrowser2* webBrowser;
HWND hwnd; HWND hwnd;
IDispatch* spDocument; IDispatch* spDocument;
IHTMLDocument* spDocument2;
IDocHostUIHandler* m_spHandler;
IDispatch* m_spExternal;
IDispatch* m_newExternal;
IOleClientSite* m_spDefaultDocHostUIHandler;
int setExternal(IDispatch** ext);
}; };

View File

@@ -33,6 +33,7 @@ HRESULT STDMETHODCALLTYPE IEDispatcher::GetIDsOfNames(const IID &, LPOLESTR *, U
return NULL; return NULL;
} }
HRESULT STDMETHODCALLTYPE IEDispatcher::Invoke(DISPID, const IID &, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT *) HRESULT STDMETHODCALLTYPE IEDispatcher::Invoke(DISPID, const IID &, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT *)
{ {
return NULL; return NULL;
} }

View File

@@ -1,19 +1,8 @@
#pragma once #pragma once
#include "oaidl.h" #include "oaidl.h"
//DEFINE_GUID(CLSID_G3d, 0xB323F8E0L, 0x2E68, 0x11D0, 0x90, 0xEA, 0x00, 0xAA, 0x00, 0x60, 0xF8, 0x6F);
/*
class IEDispatcher : public IDispatch class IEDispatcher : public IDispatch
{ {
*/
EXTERN_C const IID IID_IDispatch;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("B323F8E0-2E68-11D0-90EA-00AA0060F86F")
IEDispatcher : public IDispatch
{
public: public:
IEDispatcher(void); IEDispatcher(void);
~IEDispatcher(void); ~IEDispatcher(void);
@@ -26,5 +15,3 @@ public:
HRESULT STDMETHODCALLTYPE IEDispatcher::Invoke(DISPID, const IID &, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT *); HRESULT STDMETHODCALLTYPE IEDispatcher::Invoke(DISPID, const IID &, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT *);
}; };
#endif

View File

@@ -1,8 +1,5 @@
#pragma once #pragma once
#include "BaseButtonInstance.h" #include "BaseButtonInstance.h"
class BaseButtonInstance;
class ImageButtonInstance : public BaseButtonInstance class ImageButtonInstance : public BaseButtonInstance
{ {
public: public:

View File

@@ -8,7 +8,7 @@ Instance::Instance(void)
parent = NULL; parent = NULL;
name = "Default Game Instance"; name = "Default Game Instance";
className = "BaseInstance"; className = "BaseInstance";
listicon = 1; listicon = 0;
canDelete = true; canDelete = true;
} }
@@ -18,7 +18,6 @@ Instance::Instance(const Instance &oinst)
name = oinst.name; name = oinst.name;
className = oinst.className; className = oinst.className;
canDelete = oinst.canDelete; canDelete = oinst.canDelete;
listicon = oinst.listicon;
//setParent(oinst.parent); //setParent(oinst.parent);
} }
@@ -26,17 +25,22 @@ Instance::Instance(const Instance &oinst)
void Instance::render(RenderDevice* rd) void Instance::render(RenderDevice* rd)
{ {
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
for(size_t i = 0; i < children.size(); i++) for(size_t i = 0; i < children.size(); i++)
{ {
children[i]->render(rd); children.at(i)->render(rd);
} }
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
} }
void Instance::update()
{
}
PROPGRIDITEM Instance::createPGI(LPSTR catalog, LPSTR propName, LPSTR propDesc, LPARAM curVal, INT type, TCHAR choices[])
PROPGRIDITEM Instance::createPGI(LPSTR catalog, LPSTR propName, LPSTR propDesc, LPARAM curVal, INT type)
{ {
PROPGRIDITEM pItem; PROPGRIDITEM pItem;
PropGrid_ItemInit(pItem); PropGrid_ItemInit(pItem);
@@ -45,8 +49,6 @@ PROPGRIDITEM Instance::createPGI(LPSTR catalog, LPSTR propName, LPSTR propDesc,
pItem.lpszPropDesc=propDesc; pItem.lpszPropDesc=propDesc;
pItem.lpCurValue=curVal; pItem.lpCurValue=curVal;
pItem.iItemType=type; pItem.iItemType=type;
if(choices != NULL)
pItem.lpszzCmbItems = choices;
return pItem; return pItem;
} }
@@ -114,21 +116,6 @@ std::vector<Instance* > Instance::getAllChildren()
return children; return children;
} }
std::vector<Instance* > Instance::compileAndGetPVVector()
{
std::vector<Instance* > totalchildren;
if(!children.empty())
{
for(size_t i = 0; i < children.size(); i++)
{
std::vector<Instance* > subchildren = children.at(i)->compileAndGetPVVector();
if(!subchildren.empty())
totalchildren.insert(totalchildren.end(), subchildren.begin(), subchildren.end());
}
}
return totalchildren;
}
void Instance::setParent(Instance* newParent) void Instance::setParent(Instance* newParent)
{ {
if(parent != NULL) if(parent != NULL)

View File

@@ -1,7 +1,7 @@
#pragma once #pragma once
#include <G3DAll.h> #include <G3DAll.h>
#include "propertyGrid.h" #include "propertyGrid.h"
class Instance class Instance
{ {
public: public:
@@ -11,13 +11,12 @@ public:
virtual ~Instance(void); virtual ~Instance(void);
std::string name; std::string name;
virtual void render(RenderDevice*); virtual void render(RenderDevice*);
virtual void update(); std::vector<Instance*> children; // All children.
std::string getClassName(); std::string getClassName();
Instance* findFirstChild(std::string); Instance* findFirstChild(std::string);
std::vector<Instance* > getChildren(); std::vector<Instance* > getChildren();
std::vector<Instance* > getAllChildren(); std::vector<Instance* > getAllChildren();
std::vector<Instance* > compileAndGetPVVector(); void setParent(Instance*);
virtual void setParent(Instance*);
void setName(std::string newName); void setName(std::string newName);
void addChild(Instance*); void addChild(Instance*);
void removeChild(Instance*); void removeChild(Instance*);
@@ -28,9 +27,8 @@ public:
virtual void PropUpdate(LPPROPGRIDITEM &pItem); virtual void PropUpdate(LPPROPGRIDITEM &pItem);
int listicon; int listicon;
protected: protected:
std::vector<Instance*> children; // All children.
std::string className; std::string className;
Instance* parent; // Another pointer. Instance* parent; // Another pointer.
PROPGRIDITEM createPGI(LPSTR catalog, LPSTR propName, LPSTR propDesc, LPARAM curVal, INT type, TCHAR choices[] = NULL); PROPGRIDITEM createPGI(LPSTR catalog, LPSTR propName, LPSTR propDesc, LPARAM curVal, INT type);
}; };

339
LICENSE
View File

@@ -1,339 +0,0 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

View File

@@ -36,8 +36,8 @@ std::vector<PROPGRIDITEM> LevelInstance::getProperties()
PIT_EDIT)); PIT_EDIT));
sprintf_s(timerTxt, "%g", timer); sprintf(timerTxt, "%g", timer);
sprintf_s(scoreTxt, "%d", score); sprintf(scoreTxt, "%d", score);
properties.push_back(createPGI("Gameplay", properties.push_back(createPGI("Gameplay",
"InitialTimerValue", "InitialTimerValue",
"The ammount of time in seconds the player has to complete this level.\r\n\r\nPut 0 if time is limitless.", "The ammount of time in seconds the player has to complete this level.\r\n\r\nPut 0 if time is limitless.",

View File

@@ -1,28 +0,0 @@
#include "Globals.h"
#include "Instance.h"
#include "ModeSelectionListener.h"
#include "Application.h"
void ModeSelectionListener::onButton1MouseClick(BaseButtonInstance* button)
{
//CoordinateFrame frame = g_usableApp->g3dCamera.getCoordinateFrame();
int mode = g_usableApp->getMode();
std::vector<Instance*> instances_2D = g_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")
{
BaseButtonInstance* button = (BaseButtonInstance*)instances_2D.at(i);
button->selected = false;
}
}
button->selected = true;
if(button->name == "Cursor")
g_usableApp->setMode(CURSOR);
else if(button->name == "Resize")
g_usableApp->setMode(RESIZE);
else if(button->name == "Arrows")
g_usableApp->setMode(ARROWS);
}

View File

@@ -1,11 +0,0 @@
#pragma once
#include "ButtonListener.h"
#define CURSOR 0
#define ARROWS 1
#define RESIZE 2
class ModeSelectionListener : public ButtonListener {
public:
void onButton1MouseClick(BaseButtonInstance*);
};

View File

@@ -1,12 +1,10 @@
#include "PVInstance.h" #include "PVInstance.h"
#include "WorkspaceInstance.h"
PVInstance::PVInstance(void) PVInstance::PVInstance(void)
{ {
Instance::Instance(); Instance::Instance();
nameShown = false; nameShown = false;
className = "PVInstance"; className = "PVInstance";
listicon = 0;
} }
PVInstance::PVInstance(const PVInstance &oinst) PVInstance::PVInstance(const PVInstance &oinst)
@@ -22,43 +20,6 @@ void PVInstance::postRender(RenderDevice* rd)
{ {
} }
void PVInstance::render(RenderDevice* rd)
{
}
void PVInstance::setParent(Instance* newParent)
{
if(parent != NULL)
{
Instance* workspace = parent;
while(workspace != NULL)
{
if(WorkspaceInstance* wsp = dynamic_cast<WorkspaceInstance*>(workspace))
{
wsp->removeFromPVector(this);
break;
}
workspace = workspace->getParent();
}
parent->removeChild(this);
}
parent = newParent;
if(newParent != NULL)
{
Instance* workspace = parent;
while(workspace != NULL)
{
if(WorkspaceInstance* wsp = dynamic_cast<WorkspaceInstance*>(workspace))
{
wsp->addToPVector(this);
break;
}
workspace = workspace->getParent();
}
newParent->addChild(this);
}
}
std::vector<PROPGRIDITEM> PVInstance::getProperties() std::vector<PROPGRIDITEM> PVInstance::getProperties()
{ {
std::vector<PROPGRIDITEM> properties = Instance::getProperties(); std::vector<PROPGRIDITEM> properties = Instance::getProperties();

View File

@@ -9,9 +9,7 @@ public:
~PVInstance(void); ~PVInstance(void);
PVInstance(const PVInstance &oinst); PVInstance(const PVInstance &oinst);
virtual void postRender(RenderDevice* rd); virtual void postRender(RenderDevice* rd);
virtual void setParent(Instance* newParent);
virtual std::vector<PROPGRIDITEM> getProperties(); virtual std::vector<PROPGRIDITEM> getProperties();
virtual void PropUpdate(LPPROPGRIDITEM &pItem); virtual void PropUpdate(LPPROPGRIDITEM &pItem);
virtual void render(RenderDevice* rd);
bool nameShown; bool nameShown;
}; };

View File

@@ -128,27 +128,12 @@ Vector3 PartInstance::getPosition()
{ {
return position; return position;
} }
void PartInstance::setShape(Enum::Shape::Value shape)
{
switch(shape)
{
case Enum::Shape::Block:
this->shape = shape;
break;
default:
this->shape = shape;
this->setSize(this->getSize());
}
changed = true;
}
void PartInstance::setPosition(Vector3 pos) void PartInstance::setPosition(Vector3 pos)
{ {
position = pos; position = pos;
cFrame = CoordinateFrame(pos); cFrame = CoordinateFrame(pos);
changed = true; changed = true;
} }
CoordinateFrame PartInstance::getCFrame() CoordinateFrame PartInstance::getCFrame()
{ {
return cFrame; return cFrame;
@@ -162,8 +147,20 @@ void PartInstance::setCFrame(CoordinateFrame coordinateFrame)
// Can probably be deleted // Can probably be deleted
CoordinateFrame PartInstance::getCFrameRenderBased() CoordinateFrame PartInstance::getCFrameRenderBased()
{ {
return CoordinateFrame(getCFrame().rotation,Vector3(getCFrame().translation.x, getCFrame().translation.y, getCFrame().translation.z)); return cFrame;//CoordinateFrame(getCFrame().rotation,Vector3(getCFrame().translation.x, getCFrame().translation.y, getCFrame().translation.z));
} }
// Start Physics stuff
float PartInstance::getMass()
{
if(shape == Enum::Shape::Sphere || shape == Enum::Shape::Cylinder){
return (4/3) * 3.1415926535 * pow(size.x/2, 3);
}
return size.x * size.y * size.z;
}
#ifdef NEW_BOX_RENDER #ifdef NEW_BOX_RENDER
Box PartInstance::getBox() Box PartInstance::getBox()
{ {
@@ -209,7 +206,7 @@ bool PartInstance::collides(Box box)
{ {
return CollisionDetection::fixedSolidBoxIntersectsFixedSolidBox(getBox(), box); return CollisionDetection::fixedSolidBoxIntersectsFixedSolidBox(getBox(), box);
} }
#ifdef NEW_BOX_RENDER
void PartInstance::addVertex(Vector3 vertexPos,Color3 color) void PartInstance::addVertex(Vector3 vertexPos,Color3 color)
{ {
_vertices.push_back(vertexPos.x); _vertices.push_back(vertexPos.x);
@@ -242,126 +239,6 @@ void PartInstance::addVertex(Vector3 vertexPos,Color3 color)
addSingularNormal(cross(v2-v1,v3-v1).direction()); addSingularNormal(cross(v2-v1,v3-v1).direction());
addSingularNormal(cross(v3-v2,v1-v2).direction()); addSingularNormal(cross(v3-v2,v1-v2).direction());
addSingularNormal(cross(v1-v3,v2-v3).direction()); addSingularNormal(cross(v1-v3,v2-v3).direction());
}
void PartInstance::addSmoothTriangle(Vector3 v1,Vector3 v2,Vector3 v3)
{
addVertex(v1,color);
addVertex(v2,color);
addVertex(v3,color);
//addNormals(cross(v2-v1,v3-v1).direction());
addSingularNormal(cross(v2-v1,v3-v1).direction());
addSingularNormal(cross(v3-v2,v1-v2).direction());
addSingularNormal(cross(v1-v3,v2-v3).direction());
}
void PartInstance::addPlus(Vector3 v1)
{
float renderY = size.y/2 - 0.25f;
Vector3 vx1 = v1 + Vector3(0, -renderY, -0.1f);
Vector3 vx2 = v1 + Vector3(0, -renderY, 0.1f);
Vector3 vx3 = v1 + Vector3(0, renderY, 0.1f);
addVertex(vx1,Color3::WHITE);
addVertex(vx2,Color3::WHITE);
addVertex(vx3,Color3::WHITE);
//addNormals(cross(v2-v1,v3-v1).direction());
addSingularNormal(cross(vx2-vx1,vx3-vx1).direction());
addSingularNormal(cross(vx3-vx2,vx1-vx2).direction());
addSingularNormal(cross(vx1-vx3,vx2-vx3).direction());
vx1 = v1 + Vector3(0, renderY, 0.1f);
vx2 = v1 + Vector3(0, renderY, -0.1f);
vx3 = v1 + Vector3(0, -renderY, -0.1f);
addVertex(vx1,Color3::WHITE);
addVertex(vx2,Color3::WHITE);
addVertex(vx3,Color3::WHITE);
//addNormals(cross(v2-v1,v3-v1).direction());
addSingularNormal(cross(vx2-vx1,vx3-vx1).direction());
addSingularNormal(cross(vx3-vx2,vx1-vx2).direction());
addSingularNormal(cross(vx1-vx3,vx2-vx3).direction());
vx3 = v1 + Vector3(0, -0.1f, -renderY);
vx2 = v1 + Vector3(0, 0.1f, -renderY);
vx1 = v1 + Vector3(0, 0.1f, renderY);
addVertex(vx1,Color3::WHITE);
addVertex(vx2,Color3::WHITE);
addVertex(vx3,Color3::WHITE);
//addNormals(cross(v2-v1,v3-v1).direction());
addSingularNormal(cross(vx2-vx1,vx3-vx1).direction());
addSingularNormal(cross(vx3-vx2,vx1-vx2).direction());
addSingularNormal(cross(vx1-vx3,vx2-vx3).direction());
vx3 = v1 + Vector3(0, 0.1f, renderY);
vx2 = v1 + Vector3(0, -0.1f, renderY);
vx1 = v1 + Vector3(0, -0.1f, -renderY);
addVertex(vx1,Color3::WHITE);
addVertex(vx2,Color3::WHITE);
addVertex(vx3,Color3::WHITE);
//addNormals(cross(v2-v1,v3-v1).direction());
addSingularNormal(cross(vx2-vx1,vx3-vx1).direction());
addSingularNormal(cross(vx3-vx2,vx1-vx2).direction());
addSingularNormal(cross(vx1-vx3,vx2-vx3).direction());
}
void PartInstance::addPlus2(Vector3 v1)
{
float renderY = max(size.z, max(size.x, size.y))/2 - 0.25f;
Vector3 vx3 = v1 + Vector3(0, -renderY, -0.1f);
Vector3 vx2 = v1 + Vector3(0, -renderY, 0.1f);
Vector3 vx1 = v1 + Vector3(0, renderY, 0.1f);
addVertex(vx1,Color3::WHITE);
addVertex(vx2,Color3::WHITE);
addVertex(vx3,Color3::WHITE);
//addNormals(cross(v2-v1,v3-v1).direction());
addSingularNormal(cross(vx2-vx1,vx3-vx1).direction());
addSingularNormal(cross(vx3-vx2,vx1-vx2).direction());
addSingularNormal(cross(vx1-vx3,vx2-vx3).direction());
vx3 = v1 + Vector3(0, renderY, 0.1f);
vx2 = v1 + Vector3(0, renderY, -0.1f);
vx1 = v1 + Vector3(0, -renderY, -0.1f);
addVertex(vx1,Color3::WHITE);
addVertex(vx2,Color3::WHITE);
addVertex(vx3,Color3::WHITE);
//addNormals(cross(v2-v1,v3-v1).direction());
addSingularNormal(cross(vx2-vx1,vx3-vx1).direction());
addSingularNormal(cross(vx3-vx2,vx1-vx2).direction());
addSingularNormal(cross(vx1-vx3,vx2-vx3).direction());
vx1 = v1 + Vector3(0, -0.1f, -renderY);
vx2 = v1 + Vector3(0, 0.1f, -renderY);
vx3 = v1 + Vector3(0, 0.1f, renderY);
addVertex(vx1,Color3::WHITE);
addVertex(vx2,Color3::WHITE);
addVertex(vx3,Color3::WHITE);
//addNormals(cross(v2-v1,v3-v1).direction());
addSingularNormal(cross(vx2-vx1,vx3-vx1).direction());
addSingularNormal(cross(vx3-vx2,vx1-vx2).direction());
addSingularNormal(cross(vx1-vx3,vx2-vx3).direction());
vx1 = v1 + Vector3(0, 0.1f, renderY);
vx2 = v1 + Vector3(0, -0.1f, renderY);
vx3 = v1 + Vector3(0, -0.1f, -renderY);
addVertex(vx1,Color3::WHITE);
addVertex(vx2,Color3::WHITE);
addVertex(vx3,Color3::WHITE);
//addNormals(cross(v2-v1,v3-v1).direction());
addSingularNormal(cross(vx2-vx1,vx3-vx1).direction());
addSingularNormal(cross(vx3-vx2,vx1-vx2).direction());
addSingularNormal(cross(vx1-vx3,vx2-vx3).direction());
} }
void PartInstance::debugPrintVertexIDs(RenderDevice* rd,GFontRef font,Matrix3 rot) void PartInstance::debugPrintVertexIDs(RenderDevice* rd,GFontRef font,Matrix3 rot)
{ {
@@ -388,12 +265,6 @@ void PartInstance::addPlus2(Vector3 v1)
Vector3(_vertices[vertex2],_vertices[vertex2+1],_vertices[vertex2+2]), Vector3(_vertices[vertex2],_vertices[vertex2+1],_vertices[vertex2+2]),
Vector3(_vertices[vertex3],_vertices[vertex3+1],_vertices[vertex3+2])); Vector3(_vertices[vertex3],_vertices[vertex3+1],_vertices[vertex3+2]));
} }
void PartInstance::makeSmoothFace(int vertex1,int vertex2, int vertex3)
{
addSmoothTriangle(Vector3(_vertices[vertex1],_vertices[vertex1+1],_vertices[vertex1+2]),
Vector3(_vertices[vertex2],_vertices[vertex2+1],_vertices[vertex2+2]),
Vector3(_vertices[vertex3],_vertices[vertex3+1],_vertices[vertex3+2]));
}
bool PartInstance::isUniqueVertex(Vector3 pos) bool PartInstance::isUniqueVertex(Vector3 pos)
{ {
for (unsigned int i=0;i<_debugUniqueVertices.size();i+=1) for (unsigned int i=0;i<_debugUniqueVertices.size();i+=1)
@@ -406,259 +277,15 @@ bool PartInstance::isUniqueVertex(Vector3 pos)
return true; return true;
} }
#ifdef NEW_BOX_RENDER
void PartInstance::render(RenderDevice* rd) { void PartInstance::render(RenderDevice* rd) {
//if(nameShown) if(nameShown)
//postRenderStack.push_back(this); postRenderStack.push_back(this);
if (changed) if (changed)
{ {
getBox(); getBox();
_vertices.clear(); _vertices.clear();
_normals.clear();
_indices.clear();
//std::vector<GLfloat>(_vertices).swap(_vertices); //Clear the memory
Vector3 renderSize = size/2; Vector3 renderSize = size/2;
switch(this->shape)
{
case Enum::Shape::Ball:
{
int obv = _bevelSize;
_bevelSize = this->size.y / 3.14159F;
// Front
addSmoothTriangle(Vector3(renderSize.x-_bevelSize,renderSize.y-_bevelSize,renderSize.z),
Vector3(-renderSize.x+_bevelSize,-renderSize.y+_bevelSize,renderSize.z),
Vector3(renderSize.x-_bevelSize,-renderSize.y+_bevelSize,renderSize.z)
);
addSmoothTriangle(Vector3(-renderSize.x+_bevelSize,renderSize.y-_bevelSize,renderSize.z),
Vector3(-renderSize.x+_bevelSize,-renderSize.y+_bevelSize,renderSize.z),
Vector3(renderSize.x-_bevelSize,renderSize.y-_bevelSize,renderSize.z)
);
// Top
addSmoothTriangle(Vector3(renderSize.x-_bevelSize,renderSize.y,renderSize.z-_bevelSize),
Vector3(renderSize.x-_bevelSize,renderSize.y,-renderSize.z+_bevelSize),
Vector3(-renderSize.x+_bevelSize,renderSize.y,renderSize.z-_bevelSize)
);
addSmoothTriangle(Vector3(-renderSize.x+_bevelSize,renderSize.y,renderSize.z-_bevelSize),
Vector3(renderSize.x-_bevelSize,renderSize.y,-renderSize.z+_bevelSize),
Vector3(-renderSize.x+_bevelSize,renderSize.y,-renderSize.z+_bevelSize)
);
// Back
addSmoothTriangle(Vector3(renderSize.x-_bevelSize,renderSize.y-_bevelSize,-renderSize.z),
Vector3(renderSize.x-_bevelSize,-renderSize.y+_bevelSize,-renderSize.z),
Vector3(-renderSize.x+_bevelSize,-renderSize.y+_bevelSize,-renderSize.z)
);
addSmoothTriangle(Vector3(renderSize.x-_bevelSize,renderSize.y-_bevelSize,-renderSize.z),
Vector3(-renderSize.x+_bevelSize,-renderSize.y+_bevelSize,-renderSize.z),
Vector3(-renderSize.x+_bevelSize,renderSize.y-_bevelSize,-renderSize.z)
);
// Bottom
addSmoothTriangle(Vector3(renderSize.x-_bevelSize,-renderSize.y,-renderSize.z+_bevelSize),
Vector3(renderSize.x-_bevelSize,-renderSize.y,renderSize.z-_bevelSize),
Vector3(-renderSize.x+_bevelSize,-renderSize.y,renderSize.z-_bevelSize)
);
addSmoothTriangle(Vector3(-renderSize.x+_bevelSize,-renderSize.y,renderSize.z-_bevelSize),
Vector3(-renderSize.x+_bevelSize,-renderSize.y,-renderSize.z+_bevelSize),
Vector3(renderSize.x-_bevelSize,-renderSize.y,-renderSize.z+_bevelSize)
);
// Left
addSmoothTriangle(Vector3(-renderSize.x,renderSize.y-_bevelSize,-renderSize.z+_bevelSize),
Vector3(-renderSize.x,-renderSize.y+_bevelSize,renderSize.z-_bevelSize),
Vector3(-renderSize.x,renderSize.y-_bevelSize,renderSize.z-_bevelSize)
);
addSmoothTriangle(Vector3(-renderSize.x,-renderSize.y+_bevelSize,renderSize.z-_bevelSize),
Vector3(-renderSize.x,renderSize.y-_bevelSize,-renderSize.z+_bevelSize),
Vector3(-renderSize.x,-renderSize.y+_bevelSize,-renderSize.z+_bevelSize)
);
// Right
addSmoothTriangle(Vector3(renderSize.x,renderSize.y-_bevelSize,renderSize.z-_bevelSize),
Vector3(renderSize.x,-renderSize.y+_bevelSize,renderSize.z-_bevelSize),
Vector3(renderSize.x,renderSize.y-_bevelSize,-renderSize.z+_bevelSize)
);
addSmoothTriangle(Vector3(renderSize.x,-renderSize.y+_bevelSize,-renderSize.z+_bevelSize),
Vector3(renderSize.x,renderSize.y-_bevelSize,-renderSize.z+_bevelSize),
Vector3(renderSize.x,-renderSize.y+_bevelSize,renderSize.z-_bevelSize)
);
// Bevel Top Front
makeSmoothFace(0,36,48);
makeSmoothFace(48,18,0);
// Bevel Left Front Corner
makeSmoothFace(18,156,162);
makeSmoothFace(24,18,162);
// Bevel Left Front Top Corner
makeSmoothFace(48,156,18);
// Bevel Left Front Bottom Corner
makeSmoothFace(120,6,150);
// Bevel Left Top
makeSmoothFace(48,66,156);
makeSmoothFace(144,156,66);
// Bevel Bottom
makeSmoothFace(6,120,114);
makeSmoothFace(114,12,6);
// Left Bottom
makeSmoothFace(120,150,174);
makeSmoothFace(174,132,120);
// Right Front Top Corner
makeSmoothFace(36,0,180);
// Right Front Corner
makeSmoothFace(180,0,12);
makeSmoothFace(186,180,12);
// Right Front Bottom Corner
makeSmoothFace(186,12,114);
// Right Bottom
makeSmoothFace(186,114,108);
makeSmoothFace(108,198,186);
// Right Top Corner
makeSmoothFace(180,192,36);
makeSmoothFace(192,42,36);
// Right Back Top Corner
makeSmoothFace(72,42,192);
// Right Back Bottom Corner
makeSmoothFace(78,198,108);
// Right Back Corner
makeSmoothFace(72,192,198);
makeSmoothFace(198,78,72);
// Back Bottom Corner
makeSmoothFace(78,108,132);
makeSmoothFace(132,84,78);
// Back Top
makeSmoothFace(42,72,102);
makeSmoothFace(102,66,42);
// Back Left Top Corner
makeSmoothFace(144,66,102);
// Back Left Corner
makeSmoothFace(144,102,84);
makeSmoothFace(84,174,144);
// Back Left Bottom Corner
makeSmoothFace(174,84,132);
_bevelSize = obv;
}
break;
case Enum::Shape::Block:
{
// Front
addTriangle(Vector3(renderSize.x-_bevelSize,renderSize.y-_bevelSize,renderSize.z),
Vector3(-renderSize.x+_bevelSize,-renderSize.y+_bevelSize,renderSize.z),
Vector3(renderSize.x-_bevelSize,-renderSize.y+_bevelSize,renderSize.z)
);
addTriangle(Vector3(-renderSize.x+_bevelSize,renderSize.y-_bevelSize,renderSize.z),
Vector3(-renderSize.x+_bevelSize,-renderSize.y+_bevelSize,renderSize.z),
Vector3(renderSize.x-_bevelSize,renderSize.y-_bevelSize,renderSize.z)
);
// Top
addTriangle(Vector3(renderSize.x-_bevelSize,renderSize.y,renderSize.z-_bevelSize),
Vector3(renderSize.x-_bevelSize,renderSize.y,-renderSize.z+_bevelSize),
Vector3(-renderSize.x+_bevelSize,renderSize.y,renderSize.z-_bevelSize)
);
addTriangle(Vector3(-renderSize.x+_bevelSize,renderSize.y,renderSize.z-_bevelSize),
Vector3(renderSize.x-_bevelSize,renderSize.y,-renderSize.z+_bevelSize),
Vector3(-renderSize.x+_bevelSize,renderSize.y,-renderSize.z+_bevelSize)
);
// Back
addTriangle(Vector3(renderSize.x-_bevelSize,renderSize.y-_bevelSize,-renderSize.z),
Vector3(renderSize.x-_bevelSize,-renderSize.y+_bevelSize,-renderSize.z),
Vector3(-renderSize.x+_bevelSize,-renderSize.y+_bevelSize,-renderSize.z)
);
addTriangle(Vector3(renderSize.x-_bevelSize,renderSize.y-_bevelSize,-renderSize.z),
Vector3(-renderSize.x+_bevelSize,-renderSize.y+_bevelSize,-renderSize.z),
Vector3(-renderSize.x+_bevelSize,renderSize.y-_bevelSize,-renderSize.z)
);
// Bottom
addTriangle(Vector3(renderSize.x-_bevelSize,-renderSize.y,-renderSize.z+_bevelSize),
Vector3(renderSize.x-_bevelSize,-renderSize.y,renderSize.z-_bevelSize),
Vector3(-renderSize.x+_bevelSize,-renderSize.y,renderSize.z-_bevelSize)
);
addTriangle(Vector3(-renderSize.x+_bevelSize,-renderSize.y,renderSize.z-_bevelSize),
Vector3(-renderSize.x+_bevelSize,-renderSize.y,-renderSize.z+_bevelSize),
Vector3(renderSize.x-_bevelSize,-renderSize.y,-renderSize.z+_bevelSize)
);
// Left
addTriangle(Vector3(-renderSize.x,renderSize.y-_bevelSize,-renderSize.z+_bevelSize),
Vector3(-renderSize.x,-renderSize.y+_bevelSize,renderSize.z-_bevelSize),
Vector3(-renderSize.x,renderSize.y-_bevelSize,renderSize.z-_bevelSize)
);
addTriangle(Vector3(-renderSize.x,-renderSize.y+_bevelSize,renderSize.z-_bevelSize),
Vector3(-renderSize.x,renderSize.y-_bevelSize,-renderSize.z+_bevelSize),
Vector3(-renderSize.x,-renderSize.y+_bevelSize,-renderSize.z+_bevelSize)
);
// Right
addTriangle(Vector3(renderSize.x,renderSize.y-_bevelSize,renderSize.z-_bevelSize),
Vector3(renderSize.x,-renderSize.y+_bevelSize,renderSize.z-_bevelSize),
Vector3(renderSize.x,renderSize.y-_bevelSize,-renderSize.z+_bevelSize)
);
addTriangle(Vector3(renderSize.x,-renderSize.y+_bevelSize,-renderSize.z+_bevelSize),
Vector3(renderSize.x,renderSize.y-_bevelSize,-renderSize.z+_bevelSize),
Vector3(renderSize.x,-renderSize.y+_bevelSize,renderSize.z-_bevelSize)
);
// Bevel Top Front
makeFace(0,36,48);
makeFace(48,18,0);
// Bevel Left Front Corner
makeFace(18,156,162);
makeFace(24,18,162);
// Bevel Left Front Top Corner
makeFace(48,156,18);
// Bevel Left Front Bottom Corner
makeFace(120,6,150);
// Bevel Left Top
makeFace(48,66,156);
makeFace(144,156,66);
// Bevel Bottom
makeFace(6,120,114);
makeFace(114,12,6);
// Left Bottom
makeFace(120,150,174);
makeFace(174,132,120);
// Right Front Top Corner
makeFace(36,0,180);
// Right Front Corner
makeFace(180,0,12);
makeFace(186,180,12);
// Right Front Bottom Corner
makeFace(186,12,114);
// Right Bottom
makeFace(186,114,108);
makeFace(108,198,186);
// Right Top Corner
makeFace(180,192,36);
makeFace(192,42,36);
// Right Back Top Corner
makeFace(72,42,192);
// Right Back Bottom Corner
makeFace(78,198,108);
// Right Back Corner
makeFace(72,192,198);
makeFace(198,78,72);
// Back Bottom Corner
makeFace(78,108,132);
makeFace(132,84,78);
// Back Top
makeFace(42,72,102);
makeFace(102,66,42);
// Back Left Top Corner
makeFace(144,66,102);
// Back Left Corner
makeFace(144,102,84);
makeFace(84,174,144);
// Back Left Bottom Corner
makeFace(174,84,132);
}
break;
case Enum::Shape::Cylinder:
{
// Front // Front
addTriangle(Vector3(renderSize.x-_bevelSize,renderSize.y-_bevelSize,renderSize.z), addTriangle(Vector3(renderSize.x-_bevelSize,renderSize.y-_bevelSize,renderSize.z),
Vector3(-renderSize.x+_bevelSize,-renderSize.y+_bevelSize,renderSize.z), Vector3(-renderSize.x+_bevelSize,-renderSize.y+_bevelSize,renderSize.z),
@@ -718,7 +345,6 @@ void PartInstance::render(RenderDevice* rd) {
Vector3(renderSize.x,-renderSize.y+_bevelSize,renderSize.z-_bevelSize) Vector3(renderSize.x,-renderSize.y+_bevelSize,renderSize.z-_bevelSize)
); );
// Bevel Top Front // Bevel Top Front
makeFace(0,36,48); makeFace(0,36,48);
makeFace(48,18,0); makeFace(48,18,0);
@@ -772,14 +398,6 @@ void PartInstance::render(RenderDevice* rd) {
// Back Left Bottom Corner // Back Left Bottom Corner
makeFace(174,84,132); makeFace(174,84,132);
addPlus(Vector3(-renderSize.x-0.01,0,0));
addPlus2(Vector3(renderSize.x+0.01,0,0));
}
break;
}
for (unsigned short i=0;i<_vertices.size()/6;i++) { for (unsigned short i=0;i<_vertices.size()/6;i++) {
_indices.push_back(i); _indices.push_back(i);
} }
@@ -797,7 +415,6 @@ void PartInstance::render(RenderDevice* rd) {
} }
rd->setObjectToWorldMatrix(cFrame); rd->setObjectToWorldMatrix(cFrame);
glCallList(glList); glCallList(glList);
postRender(rd);
//rd->setObjectToWorldMatrix(cFrame); //rd->setObjectToWorldMatrix(cFrame);
} }
@@ -806,10 +423,8 @@ void PartInstance::render(RenderDevice* rd)
{ {
if(changed) if(changed)
{
Box box = getBox(); Box box = getBox();
changed = false;
glNewList(glList, GL_COMPILE);
glColor(color); glColor(color);
/*glEnable( GL_TEXTURE_2D ); /*glEnable( GL_TEXTURE_2D );
glEnable(GL_BLEND);// you enable blending function glEnable(GL_BLEND);// you enable blending function
@@ -818,7 +433,7 @@ void PartInstance::render(RenderDevice* rd)
glBegin(GL_QUADS);*/ glBegin(GL_QUADS);*/
for(int i = 0; i < 96; i+=16) for(int i = 0; i < 96; i+=16)
{ {
/*double add = 0.8; double add = 0.8;
Enum::SurfaceType::Value face; Enum::SurfaceType::Value face;
if(i == 0)//Back if(i == 0)//Back
face = back; face = back;
@@ -849,26 +464,25 @@ void PartInstance::render(RenderDevice* rd)
glTexCoord2f(0.0F,0.25F); glTexCoord2f(0.0F,0.25F);
glVertex3fv(v3);*/ glVertex3fv(v3);*/
glEnable( GL_TEXTURE_2D );
glEnable(GL_BLEND);// you enable blending function glEnable(GL_BLEND);// you enable blending function
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glBindTexture( GL_TEXTURE_2D, Globals::surfaceId);
glBegin( GL_QUADS ); glBegin( GL_QUADS );
glNormal3fv((v1 - v0).cross(v3 - v0).direction()); glNormal3fv((v1 - v0).cross(v3 - v0).direction());
//glTexCoord2d(0.0,0.0+add); glTexCoord2d(0.0,0.0+add);
glVertex3fv(v0); glVertex3fv(v0);
//glTexCoord2d( 1.0,0.0+add); glTexCoord2d( 1.0,0.0+add);
glVertex3fv(v1); glVertex3fv(v1);
//glTexCoord2d(1.0,0.2+add); glTexCoord2d(1.0,0.2+add);
glVertex3f(_vertices[i+6], _vertices[i+7], _vertices[i+8]); glVertex3f(_vertices[i+6], _vertices[i+7], _vertices[i+8]);
//glTexCoord2d( 0.0,0.2+add); glTexCoord2d( 0.0,0.2+add);
glVertex3fv(v3); glVertex3fv(v3);
glEnd(); glEnd();
//glDisable( GL_TEXTURE_2D ); glDisable( GL_TEXTURE_2D );
} }
glEndList();
/*glEnd(); /*glEnd();
glDisable(GL_TEXTURE_2D);*/ glDisable(GL_TEXTURE_2D);*/
}
glCallList(glList);
glColor(Color3::white()); glColor(Color3::white());
if(!children.empty()) if(!children.empty())
{ {
@@ -889,28 +503,6 @@ char pto[512];
char pto2[512]; char pto2[512];
#include <sstream> #include <sstream>
static Enum::Shape::Value strEnum(TCHAR* shape)
{
if(strcmp("Block", shape) == 0)
return Enum::Shape::Block;
if(strcmp("Cylinder", shape) == 0)
return Enum::Shape::Cylinder;
return Enum::Shape::Ball;
}
static TCHAR* enumStr(int shape)
{
switch(shape)
{
case Enum::Shape::Block:
return "Block";
case Enum::Shape::Ball:
return "Ball";
case Enum::Shape::Cylinder:
return "Cylinder";
}
}
void PartInstance::PropUpdate(LPPROPGRIDITEM &item) void PartInstance::PropUpdate(LPPROPGRIDITEM &item)
{ {
if(strcmp(item->lpszPropName, "Color3") == 0) if(strcmp(item->lpszPropName, "Color3") == 0)
@@ -933,14 +525,13 @@ void PartInstance::PropUpdate(LPPROPGRIDITEM &item)
ss.ignore(); ss.ignore();
} }
//if(vect.size() != 3) if(vect.size() != 3)
//{ {
//sprintf(pto, "%g, %g, %g", cFrame.translation.x, cFrame.translation.y, cFrame.translation.z, "what"); sprintf(pto, "%g, %g, %g", cFrame.translation.x, cFrame.translation.y, cFrame.translation.z, "what");
//LPCSTR str = LPCSTR(pto); LPCSTR str = LPCSTR(pto);
//item->lpCurValue = (LPARAM)str; item->lpCurValue = (LPARAM)str;
//} }
//else else
if(vect.size() == 3)
{ {
Vector3 pos(vect.at(0),vect.at(1),vect.at(2)); Vector3 pos(vect.at(0),vect.at(1),vect.at(2));
setPosition(pos); setPosition(pos);
@@ -962,29 +553,22 @@ void PartInstance::PropUpdate(LPPROPGRIDITEM &item)
ss.ignore(); ss.ignore();
} }
/*if(vect.size() != 3) if(vect.size() != 3)
{ {
sprintf(pto, "%g, %g, %g", cFrame.translation.x, cFrame.translation.y, cFrame.translation.z, "what"); sprintf(pto, "%g, %g, %g", cFrame.translation.x, cFrame.translation.y, cFrame.translation.z, "what");
LPCSTR str = LPCSTR(pto); LPCSTR str = LPCSTR(pto);
item->lpCurValue = (LPARAM)str; item->lpCurValue = (LPARAM)str;
} }
else*/ else
if(vect.size() == 3)
{ {
Vector3 size(vect.at(0),vect.at(1),vect.at(2)); Vector3 size(vect.at(0),vect.at(1),vect.at(2));
setSize(size); setSize(size);
} }
} }
if(strcmp(item->lpszPropName, "Shape") == 0)
{
printf("%s", enumStr(strEnum((TCHAR*)item->lpCurValue)));
setShape(strEnum((TCHAR*)item->lpCurValue));
}
else PVInstance::PropUpdate(item); else PVInstance::PropUpdate(item);
} }
std::vector<PROPGRIDITEM> PartInstance::getProperties() std::vector<PROPGRIDITEM> PartInstance::getProperties()
{ {
std::vector<PROPGRIDITEM> properties = PVInstance::getProperties(); std::vector<PROPGRIDITEM> properties = PVInstance::getProperties();
@@ -998,7 +582,7 @@ std::vector<PROPGRIDITEM> PartInstance::getProperties()
PIT_COLOR PIT_COLOR
)); ));
sprintf_s(pto, "%g, %g, %g", cFrame.translation.x, cFrame.translation.y, cFrame.translation.z); sprintf(pto, "%g, %g, %g", cFrame.translation.x, cFrame.translation.y, cFrame.translation.z);
properties.push_back(createPGI( properties.push_back(createPGI(
"Item", "Item",
"Offset", "Offset",
@@ -1006,7 +590,7 @@ std::vector<PROPGRIDITEM> PartInstance::getProperties()
(LPARAM)pto, (LPARAM)pto,
PIT_EDIT PIT_EDIT
)); ));
sprintf_s(pto2, "%g, %g, %g", size.x, size.y, size.z); sprintf(pto2, "%g, %g, %g", size.x, size.y, size.z);
properties.push_back(createPGI( properties.push_back(createPGI(
"Item", "Item",
"Size", "Size",
@@ -1014,15 +598,6 @@ std::vector<PROPGRIDITEM> PartInstance::getProperties()
(LPARAM)pto2, (LPARAM)pto2,
PIT_EDIT PIT_EDIT
)); ));
properties.push_back(createPGI(
"Item",
"Shape",
"The shape of the object in the workspace",
(LPARAM)enumStr(shape),
PIT_COMBO,
TEXT("Ball\0Block\0Cylinder\0")
));
return properties; return properties;
} }

View File

@@ -32,26 +32,20 @@ public:
CoordinateFrame getCFrameRenderBased(); CoordinateFrame getCFrameRenderBased();
Vector3 getSize(); Vector3 getSize();
void setSize(Vector3); void setSize(Vector3);
void setShape(Enum::Shape::Value shape);
bool canCollide; bool canCollide;
bool anchored; bool anchored;
Vector3 rotVelocity; Vector3 rotVelocity;
bool collides(Box); bool collides(Box);
virtual std::vector<PROPGRIDITEM> getProperties(); virtual std::vector<PROPGRIDITEM> getProperties();
virtual void PropUpdate(LPPROPGRIDITEM &pItem); virtual void PropUpdate(LPPROPGRIDITEM &pItem);
#ifdef NEW_BOX_RENDER
void addVertex(Vector3 vertexPos,Color3 color); void addVertex(Vector3 vertexPos,Color3 color);
void addNormals(Vector3 normal); void addNormals(Vector3 normal);
void addSingularNormal(Vector3 normal); void addSingularNormal(Vector3 normal);
void addTriangle(Vector3 vertexPos,Vector3 vertexPos2, Vector3 vertexPos3); void addTriangle(Vector3 vertexPos,Vector3 vertexPos2, Vector3 vertexPos3);
void addSmoothTriangle(Vector3 vertexPos,Vector3 vertexPos2, Vector3 vertexPos3);
void makeSmoothFace(int vertex1, int vertex2, int vertex3);
void addPlus(Vector3 v1);
void addPlus2(Vector3 v1);
void debugPrintVertexIDs(RenderDevice* rd, GFontRef font, Matrix3 camRot); void debugPrintVertexIDs(RenderDevice* rd, GFontRef font, Matrix3 camRot);
void makeFace(int vertex1, int vertex2, int vertex3); void makeFace(int vertex1, int vertex2, int vertex3);
bool isUniqueVertex(Vector3 pos); bool isUniqueVertex(Vector3 pos);
#endif float getMass();
private: private:
Vector3 position; Vector3 position;
Vector3 size; Vector3 size;

BIN
Parts.bmp

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 26 KiB

View File

@@ -5,8 +5,6 @@
#include "PropertyWindow.h" #include "PropertyWindow.h"
#include "Globals.h" #include "Globals.h"
#include "strsafe.h" #include "strsafe.h"
#include "Application.h"
/*typedef struct typPRGP { /*typedef struct typPRGP {
Instance* instance; // Declare member types Instance* instance; // Declare member types
Property &prop; Property &prop;
@@ -19,49 +17,6 @@ Instance * parent = NULL;
const int CX_BITMAP = 16; const int CX_BITMAP = 16;
const int CY_BITMAP = 16; const int CY_BITMAP = 16;
HBITMAP CreateBitmapMask(HBITMAP hbmColour, COLORREF crTransparent)
{
HDC hdcMem, hdcMem2;
HBITMAP hbmMask;
BITMAP bm;
// Create monochrome (1 bit) mask bitmap.
GetObject(hbmColour, sizeof(BITMAP), &bm);
hbmMask = CreateBitmap(bm.bmWidth, bm.bmHeight, 1, 1, NULL);
// Get some HDCs that are compatible with the display driver
hdcMem = CreateCompatibleDC(0);
hdcMem2 = CreateCompatibleDC(0);
SelectObject(hdcMem, hbmColour);
SelectObject(hdcMem2, hbmMask);
// Set the background colour of the colour image to the colour
// you want to be transparent.
SetBkColor(hdcMem, crTransparent);
// Copy the bits from the colour image to the B+W mask... everything
// with the background colour ends up white while everythig else ends up
// black...Just what we wanted.
BitBlt(hdcMem2, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCCOPY);
// Take our new mask and use it to turn the transparent colour in our
// original colour image to black so the transparency effect will
// work right.
BitBlt(hdcMem, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem2, 0, 0, SRCINVERT);
// Clean up.
DeleteDC(hdcMem);
DeleteDC(hdcMem2);
return hbmMask;
}
LRESULT CALLBACK PropProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) LRESULT CALLBACK PropProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{ {
TCHAR achTemp[256]; TCHAR achTemp[256];
@@ -95,7 +50,7 @@ LRESULT CALLBACK PropProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
// Get the food icon from the item data. // Get the food icon from the item data.
HBITMAP hbmIcon = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP1)); HBITMAP hbmIcon = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP1));
HBITMAP hbmMask = CreateBitmapMask(hbmIcon, RGB(255, 0, 220)); HBITMAP hbmMask = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP1));
// The colors depend on whether the item is selected. // The colors depend on whether the item is selected.
clrForeground = SetTextColor(lpdis->hDC, clrForeground = SetTextColor(lpdis->hDC,
GetSysColor(lpdis->itemState & ODS_SELECTED ? GetSysColor(lpdis->itemState & ODS_SELECTED ?
@@ -111,17 +66,8 @@ LRESULT CALLBACK PropProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
x = LOWORD(GetDialogBaseUnits()) / 4; x = LOWORD(GetDialogBaseUnits()) / 4;
// Get and display the text for the list item. // Get and display the text for the list item.
int mul = 0;
SendMessage(lpdis->hwndItem, CB_GETLBTEXT, lpdis->itemID, (LPARAM) achTemp); SendMessage(lpdis->hwndItem, CB_GETLBTEXT, lpdis->itemID, (LPARAM) achTemp);
if(lpdis->itemID >= 0)
{
mul = children[lpdis->itemID]->listicon;
}
//else mul = children[lpdis->itemID-1]->listicon;
//mul = children[lpdis->itemID]->listicon;
hr = StringCchLength(achTemp, 256, &cch); hr = StringCchLength(achTemp, 256, &cch);
if (FAILED(hr)) if (FAILED(hr))
{ {
@@ -142,12 +88,12 @@ LRESULT CALLBACK PropProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
break; break;
SelectObject(hdc, hbmMask); SelectObject(hdc, hbmMask);
BitBlt(lpdis->hDC, x, lpdis->rcItem.top, BitBlt(lpdis->hDC, x, lpdis->rcItem.top + 1,
CX_BITMAP, CY_BITMAP, hdc, mul*16, 0, SRCAND); CX_BITMAP, CY_BITMAP, hdc, 0, 0, SRCAND);
SelectObject(hdc, hbmIcon); SelectObject(hdc, hbmIcon);
BitBlt(lpdis->hDC, x, lpdis->rcItem.top, BitBlt(lpdis->hDC, x, lpdis->rcItem.top + 1,
CX_BITMAP, CY_BITMAP, hdc, mul*16, 0, SRCPAINT); CX_BITMAP, CY_BITMAP, hdc, 0, 0, SRCPAINT);
DeleteDC(hdc); DeleteDC(hdc);
@@ -177,8 +123,32 @@ LRESULT CALLBACK PropProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
int ItemIndex = SendMessage((HWND) lParam, (UINT) CB_GETCURSEL, (WPARAM) 0, (LPARAM) 0); int ItemIndex = SendMessage((HWND) lParam, (UINT) CB_GETCURSEL, (WPARAM) 0, (LPARAM) 0);
CHAR ListItem[256]; CHAR ListItem[256];
SendMessage((HWND) lParam, (UINT) CB_GETLBTEXT, (WPARAM) ItemIndex, (LPARAM) ListItem); SendMessage((HWND) lParam, (UINT) CB_GETLBTEXT, (WPARAM) ItemIndex, (LPARAM) ListItem);
if(ItemIndex != 0)
{
propWind->ClearProperties(); propWind->ClearProperties();
g_usableApp->selectInstance(children.at(ItemIndex),propWind); while(g_selectedInstances.size() != 0)
g_selectedInstances.erase(g_selectedInstances.begin());
if(parent != NULL)
{
std::cout << ItemIndex << std::endl;
if(ItemIndex == 1)
{
g_selectedInstances.push_back(parent);
propWind->SetProperties(parent);
}
else
{
g_selectedInstances.push_back(children.at(ItemIndex+2));
propWind->SetProperties(children.at(ItemIndex+2));
}
}
else
{
g_selectedInstances.push_back(children.at(ItemIndex-1));
propWind->SetProperties(children.at(ItemIndex-1));
}
}
} }
} }
break; break;
@@ -194,7 +164,7 @@ LRESULT CALLBACK PropProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
LPNMPROPGRID lpnmp = (LPNMPROPGRID)pnm; LPNMPROPGRID lpnmp = (LPNMPROPGRID)pnm;
LPPROPGRIDITEM item = PropGrid_GetItemData(pnm->hwndFrom,lpnmp->iIndex); LPPROPGRIDITEM item = PropGrid_GetItemData(pnm->hwndFrom,lpnmp->iIndex);
selectedInstance->PropUpdate(item); selectedInstance->PropUpdate(item);
//propWind->UpdateSelected(selectedInstance); //propWind->SetProperties(selectedInstance);
} }
} }
break; break;
@@ -208,35 +178,28 @@ LRESULT CALLBACK PropProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
return 0; return 0;
} }
void PropertyWindow::refreshExplorer(Instance* selectedInstance) void PropertyWindow::refreshExplorer()
{ {
SendMessage(_explorerComboBox,CB_RESETCONTENT,0,0); SendMessage(_explorerComboBox,CB_RESETCONTENT,0,0);
parent = NULL; parent = NULL;
children.clear(); for (unsigned int i=0;i<g_selectedInstances.size();i++) {
//g_selectedInstances.clear();
//for (unsigned int i=0;i<g_selectedInstances.size();i++) { SendMessage(_explorerComboBox,CB_ADDSTRING, 0,(LPARAM)g_selectedInstances[i]->name.c_str());
children.push_back(selectedInstance); if(g_selectedInstances[i]->getParent() != NULL)
SendMessage(_explorerComboBox, CB_ADDSTRING, 0, (LPARAM)selectedInstance->name.c_str());
if(selectedInstance->getParent() != NULL)
{ {
std::string title = ".. ("; std::string title = ".. (";
title += selectedInstance->getParent()->name; title += g_selectedInstances[i]->getParent()->name;
title += ")"; title += ")";
SendMessage(_explorerComboBox,CB_ADDSTRING, 0,(LPARAM)title.c_str()); SendMessage(_explorerComboBox,CB_ADDSTRING, 0,(LPARAM)title.c_str());
parent = selectedInstance->getParent(); parent = g_selectedInstances[i]->getParent();
children.push_back(selectedInstance->getParent());
} }
//children = g_selectedInstances[i]->getChildren(); children = g_selectedInstances[i]->getChildren();
for(size_t z = 0; z < children.size(); z++)
std::vector<Instance*> selectedChildren = selectedInstance->getChildren();
for(size_t z = 0; z < selectedChildren.size(); z++)
{ {
children.push_back(selectedChildren.at(z)); SendMessage(_explorerComboBox,CB_ADDSTRING, 0,(LPARAM)children.at(z)->name.c_str());
SendMessage(_explorerComboBox,CB_ADDSTRING, 0,(LPARAM)selectedChildren.at(z)->name.c_str());
} }
//g_usableApp->selectInstance(selectedInstance, this);
SendMessage(_explorerComboBox,CB_SETCURSEL,0,(LPARAM)0); SendMessage(_explorerComboBox,CB_SETCURSEL,0,(LPARAM)0);
//} }
} }
bool PropertyWindow::onCreate(int x, int y, int sx, int sy, HMODULE hThisInstance) { bool PropertyWindow::onCreate(int x, int y, int sx, int sy, HMODULE hThisInstance) {
@@ -262,7 +225,7 @@ bool PropertyWindow::onCreate(int x, int y, int sx, int sy, HMODULE hThisInstanc
NULL, NULL,
"COMBOBOX", "COMBOBOX",
"Combo", "Combo",
WS_VISIBLE | WS_CHILD | CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_HASSTRINGS , WS_VISIBLE | WS_CHILD | CBS_DROPDOWNLIST,
0, 0,
0, 0,
0, 0,
@@ -320,7 +283,7 @@ bool PropertyWindow::onCreate(int x, int y, int sx, int sy, HMODULE hThisInstanc
SetWindowLongPtr(_hwndProp,GWL_USERDATA,(LONG)this); SetWindowLongPtr(_hwndProp,GWL_USERDATA,(LONG)this);
//refreshExplorer(); refreshExplorer();
_resize(); _resize();
return true; return true;
@@ -343,12 +306,10 @@ void PropertyWindow::_resize()
SetWindowPos(_explorerComboBox, NULL, 0, 0, rect.right, 400, SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE); SetWindowPos(_explorerComboBox, NULL, 0, 0, rect.right, 400, SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE);
} }
void PropertyWindow::UpdateSelected(Instance * instance) void PropertyWindow::SetProperties(Instance * instance)
{ {
PropGrid_ResetContent(_propGrid); PropGrid_ResetContent(_propGrid);
prop = instance->getProperties(); prop = instance->getProperties();
if (selectedInstance != instance)
{
selectedInstance = instance; selectedInstance = instance;
for(size_t i = 0; i < prop.size(); i++) for(size_t i = 0; i < prop.size(); i++)
{ {
@@ -361,9 +322,8 @@ void PropertyWindow::UpdateSelected(Instance * instance)
PropGrid_ExpandAllCatalogs(_propGrid); PropGrid_ExpandAllCatalogs(_propGrid);
//SetWindowLongPtr(_propGrid,GWL_USERDATA,(LONG)this); //SetWindowLongPtr(_propGrid,GWL_USERDATA,(LONG)this);
refreshExplorer(instance); refreshExplorer();
_resize(); _resize();
}
} }
void PropertyWindow::ClearProperties() void PropertyWindow::ClearProperties()

View File

@@ -1,14 +1,13 @@
#pragma once #pragma once
#include "Instance.h" #include "Instance.h"
class PropertyWindow { class PropertyWindow {
public: public:
PropertyWindow(int x, int y, int sx, int sy, HMODULE hThisInstance); PropertyWindow(int x, int y, int sx, int sy, HMODULE hThisInstance);
bool onCreate(int x, int y, int sx, int sy, HMODULE hThisInstance); bool onCreate(int x, int y, int sx, int sy, HMODULE hThisInstance);
void UpdateSelected(Instance *); void SetProperties(Instance *);
void ClearProperties(); void ClearProperties();
void onResize(); void onResize();
void refreshExplorer(Instance* selectedInstance); void refreshExplorer();
HWND _hwndProp; HWND _hwndProp;
private: private:
HWND _propGrid; HWND _propGrid;

View File

@@ -1,21 +0,0 @@
#include "BaseButtonInstance.h"
#include "RotateButtonListener.h"
#include "Globals.h"
#include "AudioPlayer.h"
void RotateButtonListener::onButton1MouseClick(BaseButtonInstance* button)
{
if(g_selectedInstances.size() > 0)
{
Instance* selectedInstance = g_selectedInstances.at(0);
AudioPlayer::playSound(clickSound);
if(PartInstance* part = dynamic_cast<PartInstance*>(selectedInstance))
{
if(button->name == "Tilt")
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));
}
}
}

View File

@@ -1,7 +0,0 @@
#pragma once
#include "ButtonListener.h"
class RotateButtonListener : public ButtonListener {
public:
void onButton1MouseClick(BaseButtonInstance*);
};

View File

@@ -1,9 +0,0 @@
#include "ShapeRenderer.h"
ShapeRenderer::ShapeRenderer(void)
{
}
ShapeRenderer::~ShapeRenderer(void)
{
}

View File

@@ -1,34 +0,0 @@
#include <G3DAll.h>
#include <sstream>
#include "ErrorFunctions.h"
#include "StringFunctions.h"
#include <windows.h>
std::string Convert (float number)
{
std::ostringstream buff;
buff<<number;
return buff.str();
}
std::string ExePath() {
char buffer[MAX_PATH];
GetModuleFileName( NULL, buffer, MAX_PATH );
std::string::size_type pos = std::string( buffer ).find_last_of( "\\/" );
return std::string( buffer ).substr( 0, pos);
}
std::string GetFileInPath(std::string file)
{
std::string name = ExePath() + file;
struct stat buf;
if (stat(name.c_str(), &buf) != -1)
{
return name;
}
else
OnError(202, " \r\nFile not found: " + name);
return NULL;
}

View File

@@ -1,6 +0,0 @@
#pragma once
#include <string>
std::string Convert (float number);
std::string ExePath();
std::string GetFileInPath(std::string file);

View File

@@ -12,12 +12,3 @@ WorkspaceInstance::WorkspaceInstance(void)
WorkspaceInstance::~WorkspaceInstance(void) WorkspaceInstance::~WorkspaceInstance(void)
{ {
} }
void WorkspaceInstance::removeFromPVector(PVInstance * instance)
{
__pvVector.erase(std::remove(__pvVector.begin(), __pvVector.end(), instance), __pvVector.end());
}
void WorkspaceInstance::addToPVector(PVInstance * instance)
{
__pvVector.push_back(instance);
}

View File

@@ -1,6 +1,5 @@
#pragma once #pragma once
#include "GroupInstance.h" #include "GroupInstance.h"
#include <set>
class WorkspaceInstance : class WorkspaceInstance :
public GroupInstance public GroupInstance
@@ -8,8 +7,4 @@ class WorkspaceInstance :
public: public:
WorkspaceInstance(void); WorkspaceInstance(void);
~WorkspaceInstance(void); ~WorkspaceInstance(void);
void removeFromPVector(PVInstance *);
void addToPVector(PVInstance *);
std::vector<PVInstance*> __pvVector;
std::vector<PVInstance*>* getPVVector();
}; };

Binary file not shown.

BIN
content/font/comics.fnt Normal file

Binary file not shown.

1764
main.cpp

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,18 @@
#define IDC_PROPERTYGRID 2000 //{{NO_DEPENDENCIES}}
#define IDC_STATIC 2 // Microsoft Visual C++ generated include file.
// Used by Dialogs.rc
#define IDE_EDIT 105 //
#define IDI_ICON1 102 #define IDI_ICON1 102
#define IDB_BITMAP1 103 #define IDB_BITMAP1 103
#define IDD_DIALOG1 104 #define IDC_PROPERTYGRID 2000
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 104
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1001
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

View File

@@ -2,4 +2,3 @@
#include <windows.h> #include <windows.h>
#define GetHoldKeyState(nVirtKey) (GetKeyState(nVirtKey)>>1) #define GetHoldKeyState(nVirtKey) (GetKeyState(nVirtKey)>>1)
#define GetKPBool(nVirtKey) (GetKeyState(nVirtKey) & 0x8000)