diff --git a/Application.cpp b/Application.cpp index 5a72f8b..05da96e 100644 --- a/Application.cpp +++ b/Application.cpp @@ -136,7 +136,7 @@ Application::Application(HWND parentWindow) : _propWindow(NULL) { //: GApp(setti SetWindowLongPtr(_hwndRenderer,GWL_USERDATA,(LONG)this); _propWindow = new PropertyWindow(0, 0, 200, 640, hThisInstance); IEBrowser* webBrowser = new IEBrowser(_hwndToolbox); - //webBrowser->navigateSyncURL(L"http://scottbeebiwan.tk/g3d/toolbox/"); + webBrowser->navigateSyncURL(L"http://androdome.com/g3d/toolbox/"); } diff --git a/Enum.h b/Enum.h index eddf229..68c0755 100644 --- a/Enum.h +++ b/Enum.h @@ -5,13 +5,13 @@ namespace Enum namespace SurfaceType { enum Value { - Smooth, Bumps, Welds, Glue + Smooth, Snaps, Inlets, Glue, Weld, Spawn, Hinge, Motor, Bumps }; } namespace Shape { enum Value { - Block, Sphere, Cylinder + Ball = 0, Block = 1, Cylinder = 2 }; } } \ No newline at end of file diff --git a/Enums.h b/Enums.h index 87e918a..de05182 100644 --- a/Enums.h +++ b/Enums.h @@ -1,3 +1,4 @@ +#ifdef UENUMS #ifndef ENUM_H #define ENUM_H static enum BinType {GameTool, Grab, Clone, Hammer}; @@ -12,3 +13,4 @@ static enum SoundType {NoSound, Boing, Bomb, Break, Click, Clock, Slingshot, Pag static enum PartType {Ball, Block, Cylinder}; static enum KeywordFilterType {Include, Exclude}; #endif +#endif \ No newline at end of file diff --git a/G3DTest.vcproj b/G3DTest.vcproj index b154990..133a046 100644 --- a/G3DTest.vcproj +++ b/G3DTest.vcproj @@ -302,6 +302,10 @@ /> + + diff --git a/Instance.cpp b/Instance.cpp index 02f4d69..996aaac 100644 --- a/Instance.cpp +++ b/Instance.cpp @@ -36,7 +36,7 @@ void Instance::update() { } -PROPGRIDITEM Instance::createPGI(LPSTR catalog, LPSTR propName, LPSTR propDesc, LPARAM curVal, INT type) +PROPGRIDITEM Instance::createPGI(LPSTR catalog, LPSTR propName, LPSTR propDesc, LPARAM curVal, INT type, TCHAR choices[]) { PROPGRIDITEM pItem; PropGrid_ItemInit(pItem); @@ -45,6 +45,8 @@ PROPGRIDITEM Instance::createPGI(LPSTR catalog, LPSTR propName, LPSTR propDesc, pItem.lpszPropDesc=propDesc; pItem.lpCurValue=curVal; pItem.iItemType=type; + if(choices != NULL) + pItem.lpszzCmbItems = choices; return pItem; } diff --git a/Instance.h b/Instance.h index 7044abf..04ea7af 100644 --- a/Instance.h +++ b/Instance.h @@ -30,6 +30,6 @@ public: protected: std::string className; Instance* parent; // Another pointer. - PROPGRIDITEM createPGI(LPSTR catalog, LPSTR propName, LPSTR propDesc, LPARAM curVal, INT type); + PROPGRIDITEM createPGI(LPSTR catalog, LPSTR propName, LPSTR propDesc, LPARAM curVal, INT type, TCHAR choices[] = NULL); }; diff --git a/PartInstance.cpp b/PartInstance.cpp index 6cf1b40..d08e49f 100644 --- a/PartInstance.cpp +++ b/PartInstance.cpp @@ -128,12 +128,27 @@ Vector3 PartInstance::getPosition() { 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) { position = pos; cFrame = CoordinateFrame(pos); changed = true; } + CoordinateFrame PartInstance::getCFrame() { return cFrame; @@ -228,6 +243,114 @@ void PartInstance::addVertex(Vector3 vertexPos,Color3 color) 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) { _debugUniqueVertices.clear(); @@ -273,124 +396,261 @@ void PartInstance::render(RenderDevice* rd) { getBox(); _vertices.clear(); + _normals.clear(); + _indices.clear(); //std::vector(_vertices).swap(_vertices); //Clear the memory Vector3 renderSize = size/2; - // 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) - ); + switch(this->shape) + { + 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); + + - // 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); - - for (unsigned short i=0;i<_vertices.size()/6;i++) { - _indices.push_back(i); - } + for (unsigned short i=0;i<_vertices.size()/6;i++) { + _indices.push_back(i); + } + } + break; + case Enum::Shape::Cylinder: + { + // 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); + + + addPlus(Vector3(-renderSize.x-0.01,0,0)); + addPlus2(Vector3(renderSize.x+0.01,0,0)); + + for (unsigned short i=0;i<_vertices.size()/6;i++) { + _indices.push_back(i); + } + } + break; + } changed=false; glNewList(glList, GL_COMPILE); @@ -497,6 +757,28 @@ char pto[512]; char pto2[512]; #include +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) { if(strcmp(item->lpszPropName, "Color3") == 0) @@ -561,10 +843,16 @@ void PartInstance::PropUpdate(LPPROPGRIDITEM &item) setSize(size); } } - + if(strcmp(item->lpszPropName, "Shape") == 0) + { + printf("%s", enumStr(strEnum((TCHAR*)item->lpCurValue))); + setShape(strEnum((TCHAR*)item->lpCurValue)); + } else PVInstance::PropUpdate(item); } + + std::vector PartInstance::getProperties() { std::vector properties = PVInstance::getProperties(); @@ -594,6 +882,15 @@ std::vector PartInstance::getProperties() (LPARAM)pto2, 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; } + diff --git a/PartInstance.h b/PartInstance.h index bf071f9..74becff 100644 --- a/PartInstance.h +++ b/PartInstance.h @@ -32,6 +32,7 @@ public: CoordinateFrame getCFrameRenderBased(); Vector3 getSize(); void setSize(Vector3); + void setShape(Enum::Shape::Value shape); bool canCollide; bool anchored; Vector3 rotVelocity; @@ -43,6 +44,8 @@ public: void addNormals(Vector3 normal); void addSingularNormal(Vector3 normal); void addTriangle(Vector3 vertexPos,Vector3 vertexPos2, Vector3 vertexPos3); + void addPlus(Vector3 v1); + void addPlus2(Vector3 v1); void debugPrintVertexIDs(RenderDevice* rd, GFontRef font, Matrix3 camRot); void makeFace(int vertex1, int vertex2, int vertex3); bool isUniqueVertex(Vector3 pos); diff --git a/PartType.cpp b/PartType.cpp new file mode 100644 index 0000000..4391cb0 --- /dev/null +++ b/PartType.cpp @@ -0,0 +1,9 @@ +#include "PartType.h" + +PartType::PartType(void) +{ +} + +PartType::~PartType(void) +{ +} diff --git a/ShapeRenderer.cpp b/ShapeRenderer.cpp new file mode 100644 index 0000000..c79b846 --- /dev/null +++ b/ShapeRenderer.cpp @@ -0,0 +1,9 @@ +#include "ShapeRenderer.h" + +ShapeRenderer::ShapeRenderer(void) +{ +} + +ShapeRenderer::~ShapeRenderer(void) +{ +}