@@ -457,6 +457,10 @@
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\source\DataModelV2\LightingInstance.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\source\DataModelV2\PartInstance.cpp"
|
||||
>
|
||||
@@ -505,6 +509,14 @@
|
||||
RelativePath=".\src\source\DataModel\SelectionService.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\source\DataModelV2\SoundInstance.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\source\DataModelV2\SoundService.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\ThumbnailGeneratorInstance.cpp"
|
||||
>
|
||||
@@ -866,6 +878,10 @@
|
||||
RelativePath=".\src\include\DataModelV2\LevelInstance.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\include\DataModelV2\LightingInstance.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\include\DataModelV2\PartInstance.h"
|
||||
>
|
||||
@@ -878,6 +894,14 @@
|
||||
RelativePath=".\src\include\DataModelV2\SelectionService.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\include\DataModelV2\SoundInstance.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\include\DataModelV2\SoundService.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\include\DataModelV2\ThumbnailGeneratorInstance.h"
|
||||
>
|
||||
|
||||
@@ -21,9 +21,15 @@ ThumbnailGeneratorInstance::~ThumbnailGeneratorInstance(void) {}
|
||||
*/
|
||||
std::string ThumbnailGeneratorInstance::click(std::string fileType, int cx, int cy, bool hideSky)
|
||||
{
|
||||
if(!G3D::GImage::supportedFormat(fileType)) {
|
||||
printf("%s is not a valid fileType.", fileType);
|
||||
return "";
|
||||
}
|
||||
|
||||
RenderDevice* rd = g_usableApp->getRenderDevice();
|
||||
GuiRootInstance* guiRoot = g_dataModel->getGuiRoot();
|
||||
const G3D::GImage::Format format = G3D::GImage::stringToFormat(fileType);
|
||||
|
||||
int prevWidth = rd->width();
|
||||
int prevHeight = rd->height();
|
||||
G3D::GImage imgBuffer(cx, cy, 4);
|
||||
@@ -33,7 +39,7 @@ std::string ThumbnailGeneratorInstance::click(std::string fileType, int cx, int
|
||||
g_usableApp->resize3DView(cx, cy);
|
||||
|
||||
if(hideSky)
|
||||
g_usableApp->toggleSky();
|
||||
g_dataModel->getLighting()->suppressSky(true);
|
||||
|
||||
g_usableApp->onGraphics(rd);
|
||||
rd->screenshotPic(imgBuffer, true, hideSky);
|
||||
|
||||
BIN
content/sounds/bass.wav
Normal file
BIN
content/sounds/bass.wav
Normal file
Binary file not shown.
BIN
content/sounds/collide.wav
Normal file
BIN
content/sounds/collide.wav
Normal file
Binary file not shown.
BIN
content/sounds/glassbreak.wav
Normal file
BIN
content/sounds/glassbreak.wav
Normal file
Binary file not shown.
BIN
content/sounds/snap.wav
Normal file
BIN
content/sounds/snap.wav
Normal file
Binary file not shown.
BIN
content/sounds/splat.wav
Normal file
BIN
content/sounds/splat.wav
Normal file
Binary file not shown.
BIN
content/sounds/swoosh.wav
Normal file
BIN
content/sounds/swoosh.wav
Normal file
Binary file not shown.
BIN
content/sounds/victory.wav
Normal file
BIN
content/sounds/victory.wav
Normal file
Binary file not shown.
@@ -48,7 +48,6 @@ class Application { // : public GApp {
|
||||
int getMode();
|
||||
void unSetMode();
|
||||
|
||||
void toggleSky();
|
||||
CameraController cameraController;
|
||||
UserInput* userInput;
|
||||
PropertyWindow* _propWindow;
|
||||
@@ -56,7 +55,6 @@ class Application { // : public GApp {
|
||||
RenderDevice* getRenderDevice();
|
||||
void selectInstance(Instance* selectedInstance,PropertyWindow* propWindow);
|
||||
void setMode(int mode);
|
||||
SkyRef getSky();
|
||||
void resize3DView(int w, int h);
|
||||
|
||||
Tool * tool;
|
||||
@@ -68,7 +66,6 @@ class Application { // : public GApp {
|
||||
RenderDevice* renderDevice;
|
||||
//void initGUI();
|
||||
HWND _hWndMain;
|
||||
SkyRef sky;
|
||||
bool quit;
|
||||
bool mouseOnScreen;
|
||||
bool rightButtonHolding;
|
||||
@@ -85,7 +82,6 @@ class Application { // : public GApp {
|
||||
GAppSettings _settings;
|
||||
double lightProjX, lightProjY, lightProjNear, lightProjFar;
|
||||
IEBrowser* webBrowser;
|
||||
bool _hideSky;
|
||||
protected:
|
||||
Stopwatch m_graphicsWatch;
|
||||
Stopwatch m_logicWatch;
|
||||
|
||||
@@ -6,6 +6,7 @@ class AudioPlayer
|
||||
public:
|
||||
AudioPlayer(void);
|
||||
~AudioPlayer(void);
|
||||
static void playSound(std::string);
|
||||
|
||||
static void init();
|
||||
static void playSound(std::string);
|
||||
};
|
||||
|
||||
@@ -1,12 +1,18 @@
|
||||
#pragma once
|
||||
|
||||
// Instances
|
||||
#include "WorkspaceInstance.h"
|
||||
#include "LevelInstance.h"
|
||||
#include "PartInstance.h"
|
||||
#include "ThumbnailGeneratorInstance.h"
|
||||
#include "SelectionService.h"
|
||||
#include "rapidxml/rapidxml.hpp"
|
||||
#include "GuiRootInstance.h"
|
||||
#include "ThumbnailGeneratorInstance.h"
|
||||
#include "XplicitNgine/XplicitNgine.h"
|
||||
#include "SoundService.h"
|
||||
#include "LightingInstance.h"
|
||||
|
||||
// Libraries
|
||||
#include "rapidxml/rapidxml.hpp"
|
||||
|
||||
class GuiRootInstance;
|
||||
|
||||
@@ -25,10 +31,13 @@ public:
|
||||
bool readXMLFileStream(std::ifstream* file);
|
||||
void drawMessage(RenderDevice*);
|
||||
|
||||
// Instance getters
|
||||
WorkspaceInstance* getWorkspace();
|
||||
LevelInstance* getLevel();
|
||||
XplicitNgine* getEngine();
|
||||
ThumbnailGeneratorInstance* getThumbnailGenerator();
|
||||
SoundService* getSoundService();
|
||||
LightingInstance* getLighting();
|
||||
|
||||
std::string message;
|
||||
std::string _loadedFileName;
|
||||
@@ -53,11 +62,16 @@ private:
|
||||
std::string _errMsg;
|
||||
bool _legacyLoad;
|
||||
float _modY;
|
||||
|
||||
// Instances
|
||||
WorkspaceInstance* workspace;
|
||||
LevelInstance* level;
|
||||
GuiRootInstance* guiRoot;
|
||||
SelectionService* selectionService;
|
||||
ThumbnailGeneratorInstance * thumbnailGenerator;
|
||||
ThumbnailGeneratorInstance* thumbnailGenerator;
|
||||
XplicitNgine* xplicitNgine;
|
||||
SoundService* soundService;
|
||||
LightingInstance* lightingInstance;
|
||||
bool running;
|
||||
XplicitNgine * xplicitNgine;
|
||||
|
||||
};
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
#include <G3DAll.h>
|
||||
#include "propertyGrid.h"
|
||||
#include "map"
|
||||
//#include "Properties/BoolProperty.h"
|
||||
|
||||
class Instance
|
||||
{
|
||||
|
||||
44
src/include/DataModelV2/LightingInstance.h
Normal file
44
src/include/DataModelV2/LightingInstance.h
Normal file
@@ -0,0 +1,44 @@
|
||||
#pragma once
|
||||
#include "Instance.h"
|
||||
|
||||
class LightingInstance :
|
||||
public Instance
|
||||
{
|
||||
public:
|
||||
LightingInstance(void);
|
||||
~LightingInstance(void);
|
||||
|
||||
// Getters
|
||||
G3D::Color3 getTopAmbient();
|
||||
G3D::Color3 getBottomAmbient();
|
||||
G3D::Color3 getSpotLight();
|
||||
G3D::Color4 getClearColor();
|
||||
G3D::SkyRef getSky();
|
||||
G3D::LightingParameters getLightingParameters();
|
||||
|
||||
// Setters
|
||||
void setTopAmbient(G3D::Color3 newValue);
|
||||
void setBottomAmbient(G3D::Color3 newValue);
|
||||
void setSpotLight(G3D::Color3 newValue);
|
||||
void setClearColor(G3D::Color4 clearColor);
|
||||
|
||||
// Functions
|
||||
void drawSky();
|
||||
void suppressSky(bool doSuppress);
|
||||
void update();
|
||||
void drawEffects();
|
||||
void drawOutlines(Vector3 from, Vector3 to, RenderDevice* rd, Vector3 size, Vector3 pos, CoordinateFrame c);
|
||||
|
||||
// Properties
|
||||
void PropUpdate(LPPROPGRIDITEM &pItem);
|
||||
std::vector<PROPGRIDITEM> getProperties();
|
||||
|
||||
private:
|
||||
G3D::Color3 topAmbient;
|
||||
G3D::Color3 bottomAmbient;
|
||||
G3D::Color3 spotLight;
|
||||
G3D::Color4 clearColor;
|
||||
G3D::SkyRef sky;
|
||||
G3D::LightingParameters lighting;
|
||||
bool _hideSky;
|
||||
};
|
||||
@@ -17,7 +17,7 @@ public:
|
||||
virtual void PartInstance::postRender(RenderDevice* rd);
|
||||
virtual void render(RenderDevice*);
|
||||
virtual void renderName(RenderDevice*);
|
||||
|
||||
|
||||
//Surfaces
|
||||
Enum::SurfaceType::Value top;
|
||||
Enum::SurfaceType::Value front;
|
||||
@@ -25,8 +25,14 @@ public:
|
||||
Enum::SurfaceType::Value back;
|
||||
Enum::SurfaceType::Value left;
|
||||
Enum::SurfaceType::Value bottom;
|
||||
|
||||
//Shapes
|
||||
Enum::Shape::Value shape;
|
||||
|
||||
//OnTocuh
|
||||
Enum::ActionType::Value OnTouchAction;
|
||||
Enum::Sound::Value OnTouchSound;
|
||||
|
||||
//Variables
|
||||
Color3 color;
|
||||
bool canCollide;
|
||||
@@ -43,6 +49,13 @@ public:
|
||||
Box getScaledBox();
|
||||
CoordinateFrame getCFrame();
|
||||
|
||||
//OnTouch Getters
|
||||
bool isSingleShot();
|
||||
int getTouchesToTrigger();
|
||||
int getUniqueObjectsToTrigger();
|
||||
int getChangeScore();
|
||||
float getChangeTimer();
|
||||
|
||||
//Setters
|
||||
void setParent(Instance* parent);
|
||||
void setPosition(Vector3);
|
||||
@@ -64,6 +77,9 @@ public:
|
||||
bool collides(PartInstance * part);
|
||||
bool collides(Box);
|
||||
|
||||
// onTouch
|
||||
void onTouch();
|
||||
|
||||
//Properties
|
||||
virtual std::vector<PROPGRIDITEM> getProperties();
|
||||
virtual void PropUpdate(LPPROPGRIDITEM &pItem);
|
||||
@@ -77,4 +93,12 @@ private:
|
||||
bool dragging;
|
||||
Box itemBox;
|
||||
GLuint glList;
|
||||
};
|
||||
|
||||
// OnTouch
|
||||
bool singleShot;
|
||||
int touchesToTrigger;
|
||||
int uniqueObjectsToTrigger;
|
||||
int changeScore;
|
||||
float changeTimer;
|
||||
bool _touchedOnce;
|
||||
};
|
||||
30
src/include/DataModelV2/SoundInstance.h
Normal file
30
src/include/DataModelV2/SoundInstance.h
Normal file
@@ -0,0 +1,30 @@
|
||||
#pragma once
|
||||
#include "Instance.h"
|
||||
|
||||
class SoundInstance :
|
||||
public Instance
|
||||
{
|
||||
public:
|
||||
SoundInstance(void);
|
||||
~SoundInstance(void);
|
||||
|
||||
// Getters
|
||||
float getSoundVolume();
|
||||
std::string getSoundId();
|
||||
bool isPlayedOnRemove();
|
||||
bool isLooped();
|
||||
|
||||
// Setters
|
||||
void setSoundVolume(float newVolume);
|
||||
void setSoundId(std::string newSoundId);
|
||||
void setIsPlayedOnRemove(bool isPlayed);
|
||||
void setIsLooped(bool isLooped);
|
||||
|
||||
// Functions
|
||||
void play();
|
||||
private:
|
||||
float soundVolume;
|
||||
std::string soundId;
|
||||
bool playOnRemove;
|
||||
bool looped;
|
||||
};
|
||||
16
src/include/DataModelV2/SoundService.h
Normal file
16
src/include/DataModelV2/SoundService.h
Normal file
@@ -0,0 +1,16 @@
|
||||
#pragma once
|
||||
#include "Instance.h"
|
||||
#include "SoundInstance.h"
|
||||
|
||||
class SoundService :
|
||||
public Instance
|
||||
{
|
||||
public:
|
||||
SoundService(void);
|
||||
~SoundService(void);
|
||||
|
||||
float getMusicVolume();
|
||||
void playSound(Instance* sound);
|
||||
private:
|
||||
float musicVolume;
|
||||
};
|
||||
@@ -32,4 +32,12 @@ namespace Enum
|
||||
NoChange = 0, Increase = 1, Decrease = 2
|
||||
};
|
||||
}
|
||||
namespace Sound
|
||||
{
|
||||
enum Value {
|
||||
NoSound = 0, Victory = 1, Boing = 2, Bomb = 3,
|
||||
Ping = 4, Break = 5, Splat = 6, Swoosh = 7,
|
||||
Snap = 8, Page = 9
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -71,7 +71,6 @@ Application::Application(HWND parentWindow) : _propWindow(NULL) { //: GApp(setti
|
||||
CreateDirectory(tempPath.c_str(), NULL);
|
||||
|
||||
_hWndMain = parentWindow;
|
||||
_hideSky = false;
|
||||
|
||||
HMODULE hThisInstance = GetModuleHandle(NULL);
|
||||
|
||||
@@ -130,6 +129,8 @@ Application::Application(HWND parentWindow) : _propWindow(NULL) { //: GApp(setti
|
||||
return;
|
||||
}
|
||||
|
||||
AudioPlayer::init();
|
||||
|
||||
_window = renderDevice->window();
|
||||
_window->makeCurrent();
|
||||
|
||||
@@ -294,7 +295,6 @@ void Application::onInit() {
|
||||
|
||||
void Application::onCleanup() {
|
||||
clearInstances();
|
||||
sky->~Sky();
|
||||
}
|
||||
|
||||
void Application::onLogic() {
|
||||
@@ -407,90 +407,10 @@ int Application::getMode()
|
||||
return _mode;
|
||||
}
|
||||
|
||||
|
||||
void Application::drawOutline(Vector3 from, Vector3 to, RenderDevice* rd, LightingParameters lighting, Vector3 size, Vector3 pos, CoordinateFrame c)
|
||||
{
|
||||
rd->disableLighting();
|
||||
Color3 outline = Color3::cyan();
|
||||
float offsetSize = 0.05F;
|
||||
//X
|
||||
Draw::box(c.toWorldSpace(Box(Vector3(from.x - offsetSize, from.y + offsetSize, from.z + offsetSize), Vector3(to.x + offsetSize, from.y - offsetSize, from.z - offsetSize))), rd, outline, Color4::clear());
|
||||
Draw::box(c.toWorldSpace(Box(Vector3(from.x - offsetSize, to.y + offsetSize, from.z + offsetSize), Vector3(to.x + offsetSize, to.y - offsetSize, from.z - offsetSize))), rd, outline, Color4::clear());
|
||||
Draw::box(c.toWorldSpace(Box(Vector3(from.x - offsetSize, to.y + offsetSize, to.z + offsetSize), Vector3(to.x + offsetSize, to.y - offsetSize, to.z - offsetSize))), rd, outline, Color4::clear());
|
||||
Draw::box(c.toWorldSpace(Box(Vector3(from.x - offsetSize, from.y + offsetSize, to.z + offsetSize), Vector3(to.x + offsetSize, from.y - offsetSize, to.z - offsetSize))), rd, outline, Color4::clear());
|
||||
//Y
|
||||
Draw::box(c.toWorldSpace(Box(Vector3(from.x + offsetSize, from.y - offsetSize + 0.1, from.z + offsetSize), Vector3(from.x - offsetSize, to.y + offsetSize - 0.1, from.z - offsetSize))), rd, outline, Color4::clear());
|
||||
Draw::box(c.toWorldSpace(Box(Vector3(to.x + offsetSize, from.y - offsetSize + 0.1, from.z + offsetSize), Vector3(to.x - offsetSize, to.y + offsetSize - 0.1, from.z - offsetSize))), rd, outline, Color4::clear());
|
||||
Draw::box(c.toWorldSpace(Box(Vector3(to.x + offsetSize, from.y - offsetSize + 0.1, to.z + offsetSize), Vector3(to.x - offsetSize, to.y + offsetSize-0.1, to.z - offsetSize))), rd, outline, Color4::clear());
|
||||
Draw::box(c.toWorldSpace(Box(Vector3(from.x + offsetSize, from.y - offsetSize + 0.1, to.z + offsetSize), Vector3(from.x - offsetSize, to.y + offsetSize - 0.1, to.z - offsetSize))), rd, outline, Color4::clear());
|
||||
|
||||
//Z
|
||||
Draw::box(c.toWorldSpace(Box(Vector3(from.x + offsetSize, from.y + offsetSize, from.z - offsetSize), Vector3(from.x - offsetSize, from.y - offsetSize, to.z + offsetSize))), rd, outline, Color4::clear());
|
||||
Draw::box(c.toWorldSpace(Box(Vector3(from.x + offsetSize, to.y + offsetSize, from.z - offsetSize), Vector3(from.x - offsetSize, to.y - offsetSize, to.z + offsetSize))), rd, outline, Color4::clear());
|
||||
Draw::box(c.toWorldSpace(Box(Vector3(to.x + offsetSize, from.y + offsetSize, from.z - offsetSize), Vector3(to.x - offsetSize, from.y - offsetSize, to.z + offsetSize))), rd, outline, Color4::clear());
|
||||
Draw::box(c.toWorldSpace(Box(Vector3(to.x + offsetSize, to.y + offsetSize, from.z - offsetSize), Vector3(to.x - offsetSize, to.y - offsetSize, to.z + offsetSize))), rd, outline, Color4::clear());
|
||||
|
||||
if(_mode == ARROWS)
|
||||
{
|
||||
|
||||
AABox box;
|
||||
c.toWorldSpace(Box(from, to)).getBounds(box);
|
||||
float max = box.high().y - pos.y;
|
||||
|
||||
Draw::arrow(pos, Vector3(0, 1.5+max, 0), rd);
|
||||
Draw::arrow(pos, Vector3(0, (-1.5)-max, 0), rd);
|
||||
|
||||
max = box.high().x - pos.x;
|
||||
|
||||
Draw::arrow(pos, Vector3(1.5+max, 0, 0), rd);
|
||||
Draw::arrow(pos, Vector3((-1.5)-max, 0, 0), rd);
|
||||
|
||||
max = box.high().z - pos.z;
|
||||
|
||||
Draw::arrow(pos, Vector3(0, 0, 1.5+max), rd);
|
||||
Draw::arrow(pos, Vector3(0, 0, (-1.5)-max), rd);
|
||||
|
||||
|
||||
|
||||
}
|
||||
else if(_mode == RESIZE)
|
||||
{
|
||||
Color3 sphereColor = outline;
|
||||
Vector3 gamepoint = pos;
|
||||
Vector3 camerapoint = rd->getCameraToWorldMatrix().translation;
|
||||
float distance = pow(pow((double)gamepoint.x - (double)camerapoint.x, 2) + pow((double)gamepoint.y - (double)camerapoint.y, 2) + pow((double)gamepoint.z - (double)camerapoint.z, 2), 0.5);
|
||||
if(distance < 200)
|
||||
{
|
||||
|
||||
float multiplier = distance * 0.025F/2;
|
||||
if(multiplier < 0.25F)
|
||||
multiplier = 0.25F;
|
||||
Vector3 position = pos + (c.lookVector()*((size.z)+1));
|
||||
Draw::sphere(Sphere(position, multiplier), rd, sphereColor, Color4::clear());
|
||||
position = pos - (c.lookVector()*((size.z)+1));
|
||||
Draw::sphere(Sphere(position, multiplier), rd, sphereColor, Color4::clear());
|
||||
|
||||
position = pos + (c.rightVector()*((size.x)+1));
|
||||
Draw::sphere(Sphere(position, multiplier), rd, sphereColor, Color4::clear());
|
||||
position = pos - (c.rightVector()*((size.x)+1));
|
||||
Draw::sphere(Sphere(position, multiplier), rd, sphereColor, Color4::clear());
|
||||
|
||||
position = pos + (c.upVector()*((size.y)+1));
|
||||
Draw::sphere(Sphere(position, multiplier), rd, sphereColor, Color4::clear());
|
||||
position = pos - (c.upVector()*((size.y)+1));
|
||||
Draw::sphere(Sphere(position, multiplier), rd, sphereColor, Color4::clear());
|
||||
}
|
||||
}
|
||||
rd->enableLighting();
|
||||
}
|
||||
|
||||
void Application::exitApplication()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void Application::onGraphics(RenderDevice* rd) {
|
||||
|
||||
G3D::uint8 num = 0;
|
||||
@@ -519,57 +439,11 @@ void Application::onGraphics(RenderDevice* rd) {
|
||||
ScreenToClient(_hWndMain, &mousepos);
|
||||
}
|
||||
|
||||
LightingParameters lighting(G3D::toSeconds(2, 00, 00, PM));
|
||||
lighting.ambient = Color3(0.6F,0.6F,0.6F);
|
||||
renderDevice->setProjectionAndCameraMatrix(*cameraController.getCamera());
|
||||
renderDevice->setProjectionAndCameraMatrix(*cameraController.getCamera());
|
||||
|
||||
// TODO: stick this into its own rendering thing
|
||||
if(!_hideSky) {
|
||||
renderDevice->clear(sky.isNull(), true, true);
|
||||
if (sky.notNull()) sky->render(renderDevice, lighting);
|
||||
} else {
|
||||
rd->setColorClearValue(Color4(0.0f, 0.0f, 0.0f, 0.0f));
|
||||
renderDevice->clear(true, true, true);
|
||||
toggleSky();
|
||||
}
|
||||
|
||||
// Setup lighting
|
||||
renderDevice->enableLighting();
|
||||
// Moved a lot of code to lighting
|
||||
g_dataModel->getLighting()->update();
|
||||
|
||||
renderDevice->setShadeMode(RenderDevice::SHADE_SMOOTH);
|
||||
renderDevice->setAmbientLightColor(Color3(1,1,1));
|
||||
|
||||
renderDevice->setLight(0, GLight::directional(lighting.lightDirection, lighting.lightColor, true, true));
|
||||
renderDevice->setAmbientLightColor(lighting.ambient);
|
||||
|
||||
rd->beforePrimitive();
|
||||
CoordinateFrame forDraw = rd->getObjectToWorldMatrix();
|
||||
glEnableClientState(GL_VERTEX_ARRAY);
|
||||
glEnableClientState(GL_COLOR_ARRAY);
|
||||
glEnableClientState(GL_NORMAL_ARRAY);
|
||||
_dataModel->getWorkspace()->render(rd);
|
||||
_dataModel->getWorkspace()->renderName(rd);
|
||||
glDisableClientState(GL_VERTEX_ARRAY);
|
||||
glDisableClientState(GL_COLOR_ARRAY);
|
||||
glDisableClientState(GL_NORMAL_ARRAY);
|
||||
rd->setObjectToWorldMatrix(forDraw);
|
||||
rd->afterPrimitive();
|
||||
|
||||
for(size_t i = 0; i < _dataModel->getSelectionService()->getSelection().size(); i++)
|
||||
{
|
||||
if(PartInstance* part = dynamic_cast<PartInstance*>(g_dataModel->getSelectionService()->getSelection()[i]))
|
||||
{
|
||||
Vector3 size = part->getSize();
|
||||
Vector3 pos = part->getPosition();
|
||||
drawOutline(Vector3(0+size.x/2, 0+size.y/2, 0+size.z/2) ,Vector3(0-size.x/2,0-size.y/2,0-size.z/2), rd, lighting, Vector3(size.x/2, size.y/2, size.z/2), Vector3(pos.x, pos.y, pos.z), part->getCFrame());
|
||||
}
|
||||
}
|
||||
|
||||
renderDevice->disableLighting();
|
||||
|
||||
if (sky.notNull()) {
|
||||
sky->renderLensFlare(renderDevice, lighting);
|
||||
}
|
||||
renderDevice->push2D();
|
||||
_dataModel->getGuiRoot()->renderGUI(renderDevice, m_graphicsWatch.FPS());
|
||||
renderDevice->pop2D();
|
||||
@@ -653,7 +527,6 @@ void Application::run() {
|
||||
cameraSound = GetFileInPath("/content/sounds/SWITCH3.wav");
|
||||
clickSound = GetFileInPath("/content/sounds/switch.wav");
|
||||
dingSound = GetFileInPath("/content/sounds/electronicpingshort.wav");
|
||||
sky = Sky::create(NULL, ExePath() + "/content/sky/");
|
||||
RealTime now=0, lastTime=0;
|
||||
double simTimeRate = 1.0f;
|
||||
float fps=30.0f;
|
||||
@@ -732,17 +605,6 @@ void Application::resizeWithParent(HWND parentWindow)
|
||||
|
||||
}
|
||||
|
||||
// These should be moved into a "Lighting" class
|
||||
G3D::SkyRef Application::getSky()
|
||||
{
|
||||
return sky;
|
||||
}
|
||||
|
||||
void Application::toggleSky()
|
||||
{
|
||||
_hideSky = !_hideSky;
|
||||
}
|
||||
|
||||
void Application::resize3DView(int w, int h)
|
||||
{
|
||||
Rect2D newViewport = Rect2D::xywh(0, 0, w, h);
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#include <stdlib.h>
|
||||
#include <malloc.h>
|
||||
#include <string.h>
|
||||
#define NUM_SOUNDS 10
|
||||
#define NUM_SOUNDS 32
|
||||
static SDL_AudioSpec fmt;
|
||||
static bool initiated = false;
|
||||
|
||||
@@ -23,7 +23,7 @@ void AudioPlayer::init()
|
||||
initiated = true;
|
||||
extern void mixaudio(void *unused, Uint8 *stream, int len);
|
||||
fmt.freq = 22050;
|
||||
fmt.format = AUDIO_S16;
|
||||
fmt.format = AUDIO_S16LSB;
|
||||
fmt.channels = 2;
|
||||
fmt.samples = 1024; /* A good value for games */
|
||||
fmt.callback = mixaudio;
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
#include <string>
|
||||
|
||||
// Instances
|
||||
#include "DataModelV2/GuiRootInstance.h"
|
||||
#include "DataModelV2/ToggleImageButtonInstance.h"
|
||||
#include "DataModelV2/DataModelInstance.h"
|
||||
#include "DataModelV2/ThumbnailGeneratorInstance.h"
|
||||
#include "DataModelV2/LightingInstance.h"
|
||||
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
@@ -14,14 +18,16 @@
|
||||
using namespace std;
|
||||
using namespace rapidxml;
|
||||
|
||||
|
||||
DataModelInstance::DataModelInstance(void)
|
||||
{
|
||||
// Instances
|
||||
Instance::Instance();
|
||||
workspace = new WorkspaceInstance();
|
||||
guiRoot = new GuiRootInstance();
|
||||
level = new LevelInstance();
|
||||
thumbnailGenerator = new ThumbnailGeneratorInstance();
|
||||
soundService = new SoundService();
|
||||
lightingInstance = new LightingInstance();
|
||||
|
||||
selectionService = new SelectionService();
|
||||
selectionService->setPropertyWindow(g_usableApp->_propWindow);
|
||||
@@ -29,8 +35,13 @@ DataModelInstance::DataModelInstance(void)
|
||||
showMessage = false;
|
||||
canDelete = false;
|
||||
_modY=0;
|
||||
|
||||
// Parent stuff
|
||||
workspace->setParent(this);
|
||||
level->setParent(this);
|
||||
soundService->setParent(this);
|
||||
lightingInstance->setParent(this);
|
||||
|
||||
_loadedFileName="..//skooter.rbxm";
|
||||
listicon = 5;
|
||||
running = false;
|
||||
@@ -655,3 +666,13 @@ ThumbnailGeneratorInstance* DataModelInstance::getThumbnailGenerator()
|
||||
{
|
||||
return thumbnailGenerator;
|
||||
}
|
||||
|
||||
SoundService* DataModelInstance::getSoundService()
|
||||
{
|
||||
return soundService;
|
||||
}
|
||||
|
||||
LightingInstance* DataModelInstance::getLighting()
|
||||
{
|
||||
return lightingInstance;
|
||||
}
|
||||
@@ -157,6 +157,8 @@ GuiRootInstance::GuiRootInstance() : _message(""), _messageTime(0)
|
||||
button->fontLocationRelativeTo = Vector2(10, 0);
|
||||
button->setAllColorsSame();
|
||||
button->boxColorOvr = Color4(0.6F,0.6F,0.6F,0.4F);
|
||||
button->name = "edit";
|
||||
button->setButtonListener(menuListener);
|
||||
|
||||
button = makeTextButton();
|
||||
button->boxBegin = Vector2(250, 0);
|
||||
@@ -171,6 +173,8 @@ GuiRootInstance::GuiRootInstance() : _message(""), _messageTime(0)
|
||||
button->fontLocationRelativeTo = Vector2(10, 0);
|
||||
button->setAllColorsSame();
|
||||
button->boxColorOvr = Color4(0.6F,0.6F,0.6F,0.4F);
|
||||
button->name = "view";
|
||||
button->setButtonListener(menuListener);
|
||||
|
||||
button = makeTextButton();
|
||||
button->boxBegin = Vector2(375, 0);
|
||||
@@ -185,6 +189,8 @@ GuiRootInstance::GuiRootInstance() : _message(""), _messageTime(0)
|
||||
button->fontLocationRelativeTo = Vector2(10, 0);
|
||||
button->setAllColorsSame();
|
||||
button->boxColorOvr = Color4(0.6F,0.6F,0.6F,0.4F);
|
||||
button->name = "insert";
|
||||
button->setButtonListener(menuListener);
|
||||
|
||||
button = makeTextButton();
|
||||
button->boxBegin = Vector2(500, 0);
|
||||
@@ -199,7 +205,8 @@ GuiRootInstance::GuiRootInstance() : _message(""), _messageTime(0)
|
||||
button->fontLocationRelativeTo = Vector2(10, 0);
|
||||
button->setAllColorsSame();
|
||||
button->boxColorOvr = Color4(0.6F,0.6F,0.6F,0.4F);
|
||||
|
||||
button->name = "format";
|
||||
button->setButtonListener(menuListener);
|
||||
|
||||
//Menu
|
||||
button = makeTextButton();
|
||||
|
||||
@@ -20,11 +20,8 @@ Instance::Instance(const Instance &oinst)
|
||||
className = oinst.className;
|
||||
canDelete = oinst.canDelete;
|
||||
listicon = oinst.listicon;
|
||||
//setParent(oinst.parent);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Instance::render(RenderDevice* rd)
|
||||
{
|
||||
for(size_t i = 0; i < children.size(); i++)
|
||||
|
||||
@@ -123,7 +123,7 @@ std::vector<PROPGRIDITEM> LevelInstance::getProperties()
|
||||
(LPARAM)scoreTxt,
|
||||
PIT_EDIT));
|
||||
|
||||
properties.push_back(createPGI("Gameplay",
|
||||
properties.push_back(createPGI("Gameplay",
|
||||
"TimerUpAction",
|
||||
"Some temporary string here",
|
||||
(LPARAM)strActionType(TimerUpAction),
|
||||
@@ -131,7 +131,7 @@ std::vector<PROPGRIDITEM> LevelInstance::getProperties()
|
||||
TEXT("Nothing\0Pause\0Lose\0Draw\0Win\0")
|
||||
));
|
||||
|
||||
properties.push_back(createPGI("Gameplay",
|
||||
properties.push_back(createPGI("Gameplay",
|
||||
"TimerAffectsScore",
|
||||
"Some temporary string here",
|
||||
(LPARAM)strAffectType(TimerAffectsScore),
|
||||
@@ -140,6 +140,7 @@ std::vector<PROPGRIDITEM> LevelInstance::getProperties()
|
||||
));
|
||||
return properties;
|
||||
}
|
||||
|
||||
void LevelInstance::PropUpdate(LPPROPGRIDITEM &pItem)
|
||||
{
|
||||
if(strcmp(pItem->lpszPropName, "InitialTimerValue") == 0)
|
||||
|
||||
260
src/source/DataModelV2/LightingInstance.cpp
Normal file
260
src/source/DataModelV2/LightingInstance.cpp
Normal file
@@ -0,0 +1,260 @@
|
||||
#include "DataModelV2/LightingInstance.h"
|
||||
#include "Application.h"
|
||||
#include "Globals.h"
|
||||
#include "StringFunctions.h"
|
||||
#include "Listener/ModeSelectionListener.h"
|
||||
|
||||
LightingInstance::LightingInstance(void)
|
||||
{
|
||||
Instance::Instance();
|
||||
name = "Lighting";
|
||||
className = "Lighting";
|
||||
listicon = 10;
|
||||
canDelete = false;
|
||||
|
||||
_hideSky = false;
|
||||
|
||||
lighting.setTime(G3D::toSeconds(2, 00, 00, PM));
|
||||
|
||||
// Maybe this is Top and Bottom Ambient?
|
||||
lighting.ambient = Color3(0.5F, 0.5F, 0.5F);
|
||||
lighting.lightColor = Color3(0.8F, 0.8F, 0.8F);
|
||||
|
||||
sky = Sky::create(NULL, ExePath() + "/content/sky/");
|
||||
clearColor = Color4(0.0F, 0.0F, 0.0F, 0.0F);
|
||||
}
|
||||
|
||||
LightingInstance::~LightingInstance(void)
|
||||
{
|
||||
sky->~Sky();
|
||||
}
|
||||
|
||||
// Getters
|
||||
G3D::SkyRef LightingInstance::getSky()
|
||||
{
|
||||
return sky;
|
||||
}
|
||||
|
||||
G3D::LightingParameters LightingInstance::getLightingParameters()
|
||||
{
|
||||
return lighting;
|
||||
}
|
||||
|
||||
std::vector<PROPGRIDITEM> LightingInstance::getProperties()
|
||||
{
|
||||
std::vector<PROPGRIDITEM> properties = Instance::getProperties();
|
||||
|
||||
properties.push_back(createPGI("Appearance",
|
||||
"TopAmbient",
|
||||
"The color of the TopAmbient for 3D Objects",
|
||||
RGB((topAmbient.r*255),(topAmbient.g*255),(topAmbient.b*255)),
|
||||
PIT_COLOR
|
||||
));
|
||||
|
||||
properties.push_back(createPGI("Appearance",
|
||||
"BottomAmbient",
|
||||
"The color of the BottomAmbient for 3D Objects",
|
||||
RGB((bottomAmbient.r*255),(bottomAmbient.g*255),(bottomAmbient.b*255)),
|
||||
PIT_COLOR
|
||||
));
|
||||
|
||||
properties.push_back(createPGI("Appearance",
|
||||
"SpotLight",
|
||||
"The color of the SpotLight",
|
||||
RGB((spotLight.r*255),(spotLight.g*255),(spotLight.b*255)),
|
||||
PIT_COLOR
|
||||
));
|
||||
|
||||
properties.push_back(createPGI("Appearance",
|
||||
"ClearColor",
|
||||
"",
|
||||
RGB((clearColor.r*255),(clearColor.g*255),(clearColor.b*255)),
|
||||
PIT_COLOR
|
||||
));
|
||||
return properties;
|
||||
}
|
||||
|
||||
|
||||
void LightingInstance::PropUpdate(LPPROPGRIDITEM &item)
|
||||
{
|
||||
if(strcmp(item->lpszPropName, "TopAmbient") == 0)
|
||||
{
|
||||
topAmbient = Color3(
|
||||
GetRValue(item->lpCurValue)/255.0F,
|
||||
GetGValue(item->lpCurValue)/255.0F,
|
||||
GetBValue(item->lpCurValue)/255.0F
|
||||
);
|
||||
}
|
||||
if(strcmp(item->lpszPropName, "BottomAmbient") == 0)
|
||||
{
|
||||
bottomAmbient = Color3(
|
||||
GetRValue(item->lpCurValue)/255.0F,
|
||||
GetGValue(item->lpCurValue)/255.0F,
|
||||
GetBValue(item->lpCurValue)/255.0F
|
||||
);
|
||||
}
|
||||
if(strcmp(item->lpszPropName, "SpotLight") == 0)
|
||||
{
|
||||
spotLight = Color3(
|
||||
GetRValue(item->lpCurValue)/255.0F,
|
||||
GetGValue(item->lpCurValue)/255.0F,
|
||||
GetBValue(item->lpCurValue)/255.0F
|
||||
);
|
||||
}
|
||||
if(strcmp(item->lpszPropName, "ClearColor") == 0)
|
||||
{
|
||||
clearColor = Color3(
|
||||
GetRValue(item->lpCurValue)/255.0F,
|
||||
GetGValue(item->lpCurValue)/255.0F,
|
||||
GetBValue(item->lpCurValue)/255.0F
|
||||
);
|
||||
}
|
||||
|
||||
else
|
||||
Instance::PropUpdate(item);
|
||||
}
|
||||
|
||||
|
||||
// Functions
|
||||
void LightingInstance::suppressSky(bool doSuppress)
|
||||
{
|
||||
_hideSky = doSuppress;
|
||||
}
|
||||
|
||||
void LightingInstance::update()
|
||||
{
|
||||
RenderDevice* rd = g_usableApp->getRenderDevice();
|
||||
|
||||
|
||||
if(!_hideSky) {
|
||||
rd->clear(sky.isNull(), true, true);
|
||||
if (sky.notNull()) sky->render(rd, lighting);
|
||||
} else {
|
||||
rd->setColorClearValue(clearColor);
|
||||
rd->clear(true, true, true);
|
||||
suppressSky(false);
|
||||
}
|
||||
|
||||
// Setup lighting
|
||||
rd->enableLighting();
|
||||
|
||||
rd->setShadeMode(RenderDevice::SHADE_SMOOTH);
|
||||
rd->setAmbientLightColor(Color3(1,1,1));
|
||||
|
||||
rd->setLight(0, GLight::directional(lighting.lightDirection, lighting.lightColor, true, true));
|
||||
rd->setAmbientLightColor(lighting.ambient);
|
||||
|
||||
rd->beforePrimitive();
|
||||
CoordinateFrame forDraw = rd->getObjectToWorldMatrix();
|
||||
glEnableClientState(GL_VERTEX_ARRAY);
|
||||
glEnableClientState(GL_COLOR_ARRAY);
|
||||
glEnableClientState(GL_NORMAL_ARRAY);
|
||||
g_dataModel->getWorkspace()->render(rd);
|
||||
g_dataModel->getWorkspace()->renderName(rd);
|
||||
glDisableClientState(GL_VERTEX_ARRAY);
|
||||
glDisableClientState(GL_COLOR_ARRAY);
|
||||
glDisableClientState(GL_NORMAL_ARRAY);
|
||||
rd->setObjectToWorldMatrix(forDraw);
|
||||
rd->afterPrimitive();
|
||||
|
||||
// Draw outlines
|
||||
for(size_t i = 0; i < g_dataModel->getSelectionService()->getSelection().size(); i++)
|
||||
{
|
||||
if(PartInstance* part = dynamic_cast<PartInstance*>(g_dataModel->getSelectionService()->getSelection()[i]))
|
||||
{
|
||||
Vector3 size = part->getSize();
|
||||
Vector3 pos = part->getPosition();
|
||||
drawOutlines(
|
||||
Vector3(0+size.x/2, 0+size.y/2, 0+size.z/2) ,
|
||||
Vector3(0-size.x/2,0-size.y/2,0-size.z/2),
|
||||
rd,
|
||||
Vector3(size.x/2, size.y/2, size.z/2),
|
||||
Vector3(pos.x, pos.y, pos.z),
|
||||
part->getCFrame()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
rd->disableLighting();
|
||||
|
||||
drawEffects();
|
||||
}
|
||||
|
||||
void LightingInstance::drawEffects()
|
||||
{
|
||||
RenderDevice* rd = g_usableApp->getRenderDevice();
|
||||
if (sky.notNull()) {
|
||||
sky->renderLensFlare(rd, lighting);
|
||||
}
|
||||
}
|
||||
|
||||
void LightingInstance::drawOutlines(Vector3 from, Vector3 to, RenderDevice* rd, Vector3 size, Vector3 pos, CoordinateFrame c)
|
||||
{
|
||||
Color3 outline = Color3::cyan();
|
||||
float offsetSize = 0.05F;
|
||||
|
||||
//X
|
||||
Draw::box(c.toWorldSpace(Box(Vector3(from.x - offsetSize, from.y + offsetSize, from.z + offsetSize), Vector3(to.x + offsetSize, from.y - offsetSize, from.z - offsetSize))), rd, outline, Color4::clear());
|
||||
Draw::box(c.toWorldSpace(Box(Vector3(from.x - offsetSize, to.y + offsetSize, from.z + offsetSize), Vector3(to.x + offsetSize, to.y - offsetSize, from.z - offsetSize))), rd, outline, Color4::clear());
|
||||
Draw::box(c.toWorldSpace(Box(Vector3(from.x - offsetSize, to.y + offsetSize, to.z + offsetSize), Vector3(to.x + offsetSize, to.y - offsetSize, to.z - offsetSize))), rd, outline, Color4::clear());
|
||||
Draw::box(c.toWorldSpace(Box(Vector3(from.x - offsetSize, from.y + offsetSize, to.z + offsetSize), Vector3(to.x + offsetSize, from.y - offsetSize, to.z - offsetSize))), rd, outline, Color4::clear());
|
||||
//Y
|
||||
Draw::box(c.toWorldSpace(Box(Vector3(from.x + offsetSize, from.y - offsetSize + 0.1, from.z + offsetSize), Vector3(from.x - offsetSize, to.y + offsetSize - 0.1, from.z - offsetSize))), rd, outline, Color4::clear());
|
||||
Draw::box(c.toWorldSpace(Box(Vector3(to.x + offsetSize, from.y - offsetSize + 0.1, from.z + offsetSize), Vector3(to.x - offsetSize, to.y + offsetSize - 0.1, from.z - offsetSize))), rd, outline, Color4::clear());
|
||||
Draw::box(c.toWorldSpace(Box(Vector3(to.x + offsetSize, from.y - offsetSize + 0.1, to.z + offsetSize), Vector3(to.x - offsetSize, to.y + offsetSize-0.1, to.z - offsetSize))), rd, outline, Color4::clear());
|
||||
Draw::box(c.toWorldSpace(Box(Vector3(from.x + offsetSize, from.y - offsetSize + 0.1, to.z + offsetSize), Vector3(from.x - offsetSize, to.y + offsetSize - 0.1, to.z - offsetSize))), rd, outline, Color4::clear());
|
||||
|
||||
//Z
|
||||
Draw::box(c.toWorldSpace(Box(Vector3(from.x + offsetSize, from.y + offsetSize, from.z - offsetSize), Vector3(from.x - offsetSize, from.y - offsetSize, to.z + offsetSize))), rd, outline, Color4::clear());
|
||||
Draw::box(c.toWorldSpace(Box(Vector3(from.x + offsetSize, to.y + offsetSize, from.z - offsetSize), Vector3(from.x - offsetSize, to.y - offsetSize, to.z + offsetSize))), rd, outline, Color4::clear());
|
||||
Draw::box(c.toWorldSpace(Box(Vector3(to.x + offsetSize, from.y + offsetSize, from.z - offsetSize), Vector3(to.x - offsetSize, from.y - offsetSize, to.z + offsetSize))), rd, outline, Color4::clear());
|
||||
Draw::box(c.toWorldSpace(Box(Vector3(to.x + offsetSize, to.y + offsetSize, from.z - offsetSize), Vector3(to.x - offsetSize, to.y - offsetSize, to.z + offsetSize))), rd, outline, Color4::clear());
|
||||
|
||||
if(g_usableApp->getMode() == ARROWS)
|
||||
{
|
||||
AABox box;
|
||||
c.toWorldSpace(Box(from, to)).getBounds(box);
|
||||
float max = box.high().y - pos.y;
|
||||
|
||||
Draw::arrow(pos, Vector3(0, 1.5+max, 0), rd);
|
||||
Draw::arrow(pos, Vector3(0, (-1.5)-max, 0), rd);
|
||||
|
||||
max = box.high().x - pos.x;
|
||||
|
||||
Draw::arrow(pos, Vector3(1.5+max, 0, 0), rd);
|
||||
Draw::arrow(pos, Vector3((-1.5)-max, 0, 0), rd);
|
||||
|
||||
max = box.high().z - pos.z;
|
||||
|
||||
Draw::arrow(pos, Vector3(0, 0, 1.5+max), rd);
|
||||
Draw::arrow(pos, Vector3(0, 0, (-1.5)-max), rd);
|
||||
}
|
||||
else if(g_usableApp->getMode() == RESIZE)
|
||||
{
|
||||
Color3 sphereColor = outline;
|
||||
Vector3 gamepoint = pos;
|
||||
Vector3 camerapoint = rd->getCameraToWorldMatrix().translation;
|
||||
float distance = pow(pow((double)gamepoint.x - (double)camerapoint.x, 2) + pow((double)gamepoint.y - (double)camerapoint.y, 2) + pow((double)gamepoint.z - (double)camerapoint.z, 2), 0.5);
|
||||
if(distance < 200)
|
||||
{
|
||||
|
||||
float multiplier = distance * 0.025F/2;
|
||||
if(multiplier < 0.25F)
|
||||
multiplier = 0.25F;
|
||||
Vector3 position = pos + (c.lookVector()*((size.z)+1));
|
||||
Draw::sphere(Sphere(position, multiplier), rd, sphereColor, Color4::clear());
|
||||
position = pos - (c.lookVector()*((size.z)+1));
|
||||
Draw::sphere(Sphere(position, multiplier), rd, sphereColor, Color4::clear());
|
||||
|
||||
position = pos + (c.rightVector()*((size.x)+1));
|
||||
Draw::sphere(Sphere(position, multiplier), rd, sphereColor, Color4::clear());
|
||||
position = pos - (c.rightVector()*((size.x)+1));
|
||||
Draw::sphere(Sphere(position, multiplier), rd, sphereColor, Color4::clear());
|
||||
|
||||
position = pos + (c.upVector()*((size.y)+1));
|
||||
Draw::sphere(Sphere(position, multiplier), rd, sphereColor, Color4::clear());
|
||||
position = pos - (c.upVector()*((size.y)+1));
|
||||
Draw::sphere(Sphere(position, multiplier), rd, sphereColor, Color4::clear());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,8 @@
|
||||
#include <sstream>
|
||||
#include <iomanip>
|
||||
#include "Faces.h"
|
||||
#include "AudioPlayer.h"
|
||||
#include "StringFunctions.h"
|
||||
|
||||
PartInstance::PartInstance(void)
|
||||
{
|
||||
@@ -27,6 +29,15 @@ PartInstance::PartInstance(void)
|
||||
left = Enum::SurfaceType::Smooth;
|
||||
bottom = Enum::SurfaceType::Smooth;
|
||||
shape = Enum::Shape::Block;
|
||||
_touchedOnce = false;
|
||||
|
||||
// OnTouch
|
||||
singleShot = true;
|
||||
touchesToTrigger = 1;
|
||||
uniqueObjectsToTrigger = 1;
|
||||
changeScore = 0;
|
||||
changeTimer = 0;
|
||||
singleShot = true;
|
||||
}
|
||||
|
||||
bool PartInstance::isDragging()
|
||||
@@ -60,6 +71,32 @@ Vector3 PartInstance::getRotVelocity()
|
||||
return rotVelocity;
|
||||
}
|
||||
|
||||
// OnTouch
|
||||
bool PartInstance::isSingleShot()
|
||||
{
|
||||
return singleShot;
|
||||
}
|
||||
|
||||
int PartInstance::getTouchesToTrigger()
|
||||
{
|
||||
return touchesToTrigger;
|
||||
}
|
||||
|
||||
int PartInstance::getUniqueObjectsToTrigger()
|
||||
{
|
||||
return uniqueObjectsToTrigger;
|
||||
}
|
||||
|
||||
int PartInstance::getChangeScore()
|
||||
{
|
||||
return changeScore;
|
||||
}
|
||||
|
||||
float PartInstance::getChangeTimer()
|
||||
{
|
||||
return changeTimer;
|
||||
}
|
||||
|
||||
void PartInstance::setVelocity(Vector3 v)
|
||||
{
|
||||
velocity = v;
|
||||
@@ -169,8 +206,6 @@ PartInstance::PartInstance(const PartInstance &oinst)
|
||||
PVInstance::PVInstance(oinst);
|
||||
physBody = NULL;
|
||||
glList = glGenLists(1);
|
||||
//name = oinst.name;
|
||||
//className = "Part";
|
||||
name = oinst.name;
|
||||
canCollide = oinst.canCollide;
|
||||
setParent(oinst.parent);
|
||||
@@ -188,6 +223,17 @@ PartInstance::PartInstance(const PartInstance &oinst)
|
||||
bottom = oinst.bottom;
|
||||
shape = oinst.shape;
|
||||
changed = true;
|
||||
|
||||
// OnTouch
|
||||
singleShot = oinst.singleShot;
|
||||
touchesToTrigger = oinst.touchesToTrigger;
|
||||
uniqueObjectsToTrigger = oinst.uniqueObjectsToTrigger;
|
||||
changeScore = oinst.changeScore;
|
||||
changeTimer = oinst.changeTimer;
|
||||
OnTouchAction = oinst.OnTouchAction;
|
||||
OnTouchSound = oinst.OnTouchSound;
|
||||
singleShot = oinst.singleShot;
|
||||
_touchedOnce = false;
|
||||
}
|
||||
|
||||
void PartInstance::setSize(Vector3 newSize)
|
||||
@@ -368,6 +414,7 @@ char pto[512];
|
||||
char pto2[512];
|
||||
#include <sstream>
|
||||
|
||||
// Shape
|
||||
static Enum::Shape::Value strEnum(TCHAR* shape)
|
||||
{
|
||||
if(strcmp("Block", shape) == 0)
|
||||
@@ -391,12 +438,166 @@ static TCHAR* enumStr(int shape)
|
||||
return "Block";
|
||||
}
|
||||
|
||||
// ActionType
|
||||
static TCHAR* strActionType(int option)
|
||||
{
|
||||
switch(option)
|
||||
{
|
||||
case Enum::ActionType::Nothing:
|
||||
return "Nothing";
|
||||
case Enum::ActionType::Pause:
|
||||
return "Pause";
|
||||
case Enum::ActionType::Lose:
|
||||
return "Lose";
|
||||
case Enum::ActionType::Draw:
|
||||
return "Draw";
|
||||
case Enum::ActionType::Win:
|
||||
return "Win";
|
||||
}
|
||||
return "Nothing";
|
||||
}
|
||||
|
||||
static Enum::ActionType::Value EnumOnTouchActionType(TCHAR* option)
|
||||
{
|
||||
if(strcmp("Nothing", option) == 0)
|
||||
return Enum::ActionType::Nothing;
|
||||
if(strcmp("Pause", option) == 0)
|
||||
return Enum::ActionType::Pause;
|
||||
if(strcmp("Lose", option) == 0)
|
||||
return Enum::ActionType::Lose;
|
||||
if(strcmp("Draw", option) == 0)
|
||||
return Enum::ActionType::Draw;
|
||||
return Enum::ActionType::Win;
|
||||
}
|
||||
|
||||
// SoundType
|
||||
static TCHAR* strSoundType(int option)
|
||||
{
|
||||
switch(option)
|
||||
{
|
||||
case Enum::Sound::NoSound:
|
||||
return "NoSound";
|
||||
case Enum::Sound::Victory:
|
||||
return "Victory";
|
||||
case Enum::Sound::Boing:
|
||||
return "Boing";
|
||||
case Enum::Sound::Splat:
|
||||
return "Splat";
|
||||
case Enum::Sound::Snap:
|
||||
return "Snap";
|
||||
case Enum::Sound::Bomb:
|
||||
return "Bomb";
|
||||
case Enum::Sound::Break:
|
||||
return "Break";
|
||||
case Enum::Sound::Ping:
|
||||
return "Ping";
|
||||
case Enum::Sound::Swoosh:
|
||||
return "Swoosh";
|
||||
case Enum::Sound::Page:
|
||||
return "Page";
|
||||
}
|
||||
return "NoSound";
|
||||
}
|
||||
|
||||
static Enum::Sound::Value EnumOnTouchSoundType(TCHAR* option)
|
||||
{
|
||||
if(strcmp("Nothing", option) == 0)
|
||||
return Enum::Sound::NoSound;
|
||||
if(strcmp("Victory", option) == 0)
|
||||
return Enum::Sound::Victory;
|
||||
if(strcmp("Boing", option) == 0)
|
||||
return Enum::Sound::Boing;
|
||||
if(strcmp("Splat", option) == 0)
|
||||
return Enum::Sound::Splat;
|
||||
if(strcmp("Bomb", option) == 0)
|
||||
return Enum::Sound::Bomb;
|
||||
if(strcmp("Break", option) == 0)
|
||||
return Enum::Sound::Break;
|
||||
if(strcmp("Swoosh", option) == 0)
|
||||
return Enum::Sound::Swoosh;
|
||||
if(strcmp("Page", option) == 0)
|
||||
return Enum::Sound::Page;
|
||||
if(strcmp("Ping", option) == 0)
|
||||
return Enum::Sound::Ping;
|
||||
if(strcmp("Snap", option) == 0)
|
||||
return Enum::Sound::Snap;
|
||||
|
||||
return Enum::Sound::NoSound;
|
||||
}
|
||||
|
||||
void PartInstance::onTouch()
|
||||
{
|
||||
if(singleShot && _touchedOnce)
|
||||
return;
|
||||
|
||||
if(singleShot && !_touchedOnce)
|
||||
_touchedOnce = true;
|
||||
|
||||
g_dataModel->getLevel()->score += changeScore;
|
||||
g_dataModel->getLevel()->timer += changeTimer;
|
||||
|
||||
switch(OnTouchAction)
|
||||
{
|
||||
case Enum::ActionType::Nothing:
|
||||
break;
|
||||
case Enum::ActionType::Pause:
|
||||
break;
|
||||
case Enum::ActionType::Lose:
|
||||
g_dataModel->getLevel()->loseCondition();
|
||||
break;
|
||||
case Enum::ActionType::Draw:
|
||||
break;
|
||||
case Enum::ActionType::Win:
|
||||
g_dataModel->getLevel()->winCondition();
|
||||
break;
|
||||
}
|
||||
|
||||
SoundService* sndService = g_dataModel->getSoundService();
|
||||
|
||||
switch(OnTouchSound)
|
||||
{
|
||||
case Enum::Sound::NoSound:
|
||||
break;
|
||||
case Enum::Sound::Victory:
|
||||
sndService->playSound(sndService->findFirstChild("Victory"));
|
||||
break;
|
||||
case Enum::Sound::Boing:
|
||||
sndService->playSound(sndService->findFirstChild("Boing"));
|
||||
break;
|
||||
case Enum::Sound::Break:
|
||||
sndService->playSound(sndService->findFirstChild("Break"));
|
||||
break;
|
||||
case Enum::Sound::Snap:
|
||||
sndService->playSound(sndService->findFirstChild("Snap"));
|
||||
break;
|
||||
case Enum::Sound::Bomb:
|
||||
sndService->playSound(sndService->findFirstChild("Bomb"));
|
||||
break;
|
||||
case Enum::Sound::Splat:
|
||||
sndService->playSound(sndService->findFirstChild("Splat"));
|
||||
break;
|
||||
case Enum::Sound::Page:
|
||||
sndService->playSound(sndService->findFirstChild("Page"));
|
||||
break;
|
||||
case Enum::Sound::Ping:
|
||||
sndService->playSound(sndService->findFirstChild("Ping"));
|
||||
break;
|
||||
case Enum::Sound::Swoosh:
|
||||
sndService->playSound(sndService->findFirstChild("Swoosh"));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void PartInstance::PropUpdate(LPPROPGRIDITEM &item)
|
||||
{
|
||||
setChanged();
|
||||
if(strcmp(item->lpszPropName, "Color3") == 0)
|
||||
{
|
||||
color = Color3(GetRValue(item->lpCurValue)/255.0F,GetGValue(item->lpCurValue)/255.0F,GetBValue(item->lpCurValue)/255.0F);
|
||||
color = Color3(
|
||||
GetRValue(item->lpCurValue)/255.0F,
|
||||
GetGValue(item->lpCurValue)/255.0F,
|
||||
GetBValue(item->lpCurValue)/255.0F
|
||||
);
|
||||
}
|
||||
else if(strcmp(item->lpszPropName, "Anchored") == 0)
|
||||
{
|
||||
@@ -417,13 +618,6 @@ void PartInstance::PropUpdate(LPPROPGRIDITEM &item)
|
||||
ss.ignore();
|
||||
}
|
||||
|
||||
//if(vect.size() != 3)
|
||||
//{
|
||||
//sprintf(pto, "%g, %g, %g", cFrame.translation.x, cFrame.translation.y, cFrame.translation.z, "what");
|
||||
//LPCSTR str = LPCSTR(pto);
|
||||
//item->lpCurValue = (LPARAM)str;
|
||||
//}
|
||||
//else
|
||||
if(vect.size() == 3)
|
||||
{
|
||||
Vector3 pos(vect.at(0),vect.at(1),vect.at(2));
|
||||
@@ -446,13 +640,6 @@ void PartInstance::PropUpdate(LPPROPGRIDITEM &item)
|
||||
ss.ignore();
|
||||
}
|
||||
|
||||
/*if(vect.size() != 3)
|
||||
{
|
||||
sprintf(pto, "%g, %g, %g", cFrame.translation.x, cFrame.translation.y, cFrame.translation.z, "what");
|
||||
LPCSTR str = LPCSTR(pto);
|
||||
item->lpCurValue = (LPARAM)str;
|
||||
}
|
||||
else*/
|
||||
if(vect.size() == 3)
|
||||
{
|
||||
Vector3 size(vect.at(0),vect.at(1),vect.at(2));
|
||||
@@ -464,52 +651,104 @@ void PartInstance::PropUpdate(LPPROPGRIDITEM &item)
|
||||
printf("%s", enumStr(strEnum((TCHAR*)item->lpCurValue)));
|
||||
setShape(strEnum((TCHAR*)item->lpCurValue));
|
||||
}
|
||||
else if(strcmp(item->lpszPropName, "Action") == 0)
|
||||
{
|
||||
OnTouchAction = EnumOnTouchActionType((TCHAR*)item->lpCurValue);
|
||||
}
|
||||
else if (strcmp(item->lpszPropName, "Sound") == 0)
|
||||
{
|
||||
OnTouchSound = EnumOnTouchSoundType((TCHAR*)item->lpCurValue);
|
||||
}
|
||||
else if (strcmp(item->lpszPropName, "ChangeScore") == 0)
|
||||
{
|
||||
changeScore = atoi((LPSTR)item->lpCurValue);
|
||||
}
|
||||
else if (strcmp(item->lpszPropName, "ChangeTimer") == 0)
|
||||
{
|
||||
changeTimer = atof((LPSTR)item->lpCurValue);
|
||||
}
|
||||
else if (strcmp(item->lpszPropName, "SingleShot") == 0)
|
||||
{
|
||||
singleShot = item->lpCurValue == TRUE;
|
||||
}
|
||||
else PVInstance::PropUpdate(item);
|
||||
}
|
||||
|
||||
// This needs to be changed, buffer size of 12 is way too small
|
||||
// Crash occurs if you put a huge number in
|
||||
char changeTimerTxt[12];
|
||||
char changeScoreTxt[12];
|
||||
std::vector<PROPGRIDITEM> PartInstance::getProperties()
|
||||
{
|
||||
std::vector<PROPGRIDITEM> properties = PVInstance::getProperties();
|
||||
|
||||
|
||||
properties.push_back(createPGI(
|
||||
"Properties",
|
||||
properties.push_back(createPGI("Properties",
|
||||
"Color3",
|
||||
"The color of the selected part",
|
||||
RGB((color.r*255),(color.g*255),(color.b*255)),
|
||||
PIT_COLOR
|
||||
));
|
||||
properties.push_back(createPGI(
|
||||
"Item",
|
||||
properties.push_back(createPGI("Item",
|
||||
"Anchored",
|
||||
"Whether the block can move or not",
|
||||
(LPARAM)anchored,
|
||||
PIT_CHECK
|
||||
));
|
||||
sprintf_s(pto, "%g, %g, %g", position.x, position.y, position.z);
|
||||
properties.push_back(createPGI(
|
||||
"Item",
|
||||
properties.push_back(createPGI("Item",
|
||||
"Offset",
|
||||
"The position of the object in the workspace",
|
||||
(LPARAM)pto,
|
||||
PIT_EDIT
|
||||
));
|
||||
sprintf_s(pto2, "%g, %g, %g", size.x, size.y, size.z);
|
||||
properties.push_back(createPGI(
|
||||
"Item",
|
||||
properties.push_back(createPGI("Item",
|
||||
"Size",
|
||||
"The position of the object in the workspace",
|
||||
"The size of the object in the workspace",
|
||||
(LPARAM)pto2,
|
||||
PIT_EDIT
|
||||
));
|
||||
properties.push_back(createPGI(
|
||||
"Item",
|
||||
properties.push_back(createPGI("Item",
|
||||
"Shape",
|
||||
"The shape of the object in the workspace",
|
||||
(LPARAM)enumStr(shape),
|
||||
PIT_COMBO,
|
||||
TEXT("Ball\0Block\0Cylinder\0")
|
||||
));
|
||||
properties.push_back(createPGI("OnTouch",
|
||||
"Action",
|
||||
"What action is taken when touched",
|
||||
(LPARAM)strActionType(OnTouchAction),
|
||||
PIT_COMBO,
|
||||
TEXT("Nothing\0Pause\0Lose\0Draw\0Win\0")
|
||||
));
|
||||
properties.push_back(createPGI("OnTouch",
|
||||
"Sound",
|
||||
"What sound plays when touched",
|
||||
(LPARAM)strSoundType(OnTouchSound),
|
||||
PIT_COMBO,
|
||||
TEXT("NoSound\0Victory\0Boing\0Break\0Snap\0Bomb\0Splat\0Page\0Ping\0Swoosh\0")
|
||||
));
|
||||
|
||||
sprintf_s(changeScoreTxt, "%d", changeScore);
|
||||
sprintf_s(changeTimerTxt, "%g", changeTimer);
|
||||
properties.push_back(createPGI("OnTouch",
|
||||
"ChangeScore",
|
||||
"How the score is affected when touched",
|
||||
(LPARAM)changeScoreTxt,
|
||||
PIT_EDIT));
|
||||
properties.push_back(createPGI("OnTouch",
|
||||
"ChangeTimer",
|
||||
"How the timer is affected when touched",
|
||||
(LPARAM)changeTimerTxt,
|
||||
PIT_EDIT));
|
||||
properties.push_back(createPGI("OnTouch",
|
||||
"SingleShot",
|
||||
"Whether or not Action happens only once",
|
||||
(LPARAM)singleShot,
|
||||
PIT_CHECK
|
||||
));
|
||||
return properties;
|
||||
}
|
||||
|
||||
|
||||
53
src/source/DataModelV2/SoundInstance.cpp
Normal file
53
src/source/DataModelV2/SoundInstance.cpp
Normal file
@@ -0,0 +1,53 @@
|
||||
#include "DataModelV2/SoundInstance.h"
|
||||
#include "Globals.h"
|
||||
|
||||
SoundInstance::SoundInstance()
|
||||
{
|
||||
name = "Sound";
|
||||
className = "Sound";
|
||||
listicon = 8;
|
||||
|
||||
soundVolume = 0.5;
|
||||
soundId = "";
|
||||
playOnRemove = false;
|
||||
looped = false;
|
||||
}
|
||||
|
||||
SoundInstance::~SoundInstance(void)
|
||||
{
|
||||
if(isPlayedOnRemove())
|
||||
play();
|
||||
}
|
||||
|
||||
// Functions
|
||||
void SoundInstance::play()
|
||||
{
|
||||
g_dataModel->getSoundService()->playSound(this);
|
||||
}
|
||||
|
||||
// Getters
|
||||
float SoundInstance::getSoundVolume()
|
||||
{
|
||||
return soundVolume;
|
||||
}
|
||||
|
||||
bool SoundInstance::isPlayedOnRemove()
|
||||
{
|
||||
return playOnRemove;
|
||||
}
|
||||
|
||||
std::string SoundInstance::getSoundId()
|
||||
{
|
||||
return soundId;
|
||||
}
|
||||
|
||||
bool SoundInstance::isLooped()
|
||||
{
|
||||
return looped;
|
||||
}
|
||||
|
||||
// Setters
|
||||
void SoundInstance::setSoundId(std::string newSoundId)
|
||||
{
|
||||
soundId = newSoundId;
|
||||
}
|
||||
90
src/source/DataModelV2/SoundService.cpp
Normal file
90
src/source/DataModelV2/SoundService.cpp
Normal file
@@ -0,0 +1,90 @@
|
||||
#include "DataModelV2/SoundService.h"
|
||||
#include "StringFunctions.h"
|
||||
#include "AudioPlayer.h"
|
||||
#include "Globals.h"
|
||||
|
||||
SoundService::SoundService()
|
||||
{
|
||||
name = "SoundService";
|
||||
className = "SoundService";
|
||||
musicVolume = 0.3f;
|
||||
listicon = 8;
|
||||
canDelete = false;
|
||||
|
||||
// Create stock sounds
|
||||
SoundInstance* stockSound = new SoundInstance();
|
||||
|
||||
// Victory
|
||||
stockSound = new SoundInstance();
|
||||
stockSound->setName("Victory");
|
||||
stockSound->setSoundId("/content/sounds/victory.wav");
|
||||
stockSound->setParent(this);
|
||||
|
||||
// Boing
|
||||
stockSound = new SoundInstance();
|
||||
stockSound->setName("Boing");
|
||||
stockSound->setSoundId("/content/sounds/bass.wav");
|
||||
stockSound->setParent(this);
|
||||
|
||||
// Bomb
|
||||
stockSound = new SoundInstance();
|
||||
stockSound->setName("Bomb");
|
||||
stockSound->setSoundId("/content/sounds/collide.wav");
|
||||
stockSound->setParent(this);
|
||||
|
||||
// Ping
|
||||
stockSound = new SoundInstance();
|
||||
stockSound->setName("Ping");
|
||||
stockSound->setSoundId("/content/sounds/electronicpingshort.wav");
|
||||
stockSound->setParent(this);
|
||||
|
||||
// Break
|
||||
stockSound = new SoundInstance();
|
||||
stockSound->setName("Break");
|
||||
stockSound->setSoundId("/content/sounds/glassbreak.wav");
|
||||
stockSound->setParent(this);
|
||||
|
||||
// Splat
|
||||
stockSound = new SoundInstance();
|
||||
stockSound->setName("Splat");
|
||||
stockSound->setSoundId("/content/sounds/splat.wav");
|
||||
stockSound->setParent(this);
|
||||
|
||||
// Swoosh
|
||||
stockSound = new SoundInstance();
|
||||
stockSound->setName("Swoosh");
|
||||
stockSound->setSoundId("/content/sounds/swoosh.wav");
|
||||
stockSound->setParent(this);
|
||||
|
||||
// Snap
|
||||
stockSound = new SoundInstance();
|
||||
stockSound->setName("Snap");
|
||||
stockSound->setSoundId("/content/sounds/snap.wav");
|
||||
stockSound->setParent(this);
|
||||
|
||||
// Page
|
||||
stockSound = new SoundInstance();
|
||||
stockSound->setName("Page");
|
||||
stockSound->setSoundId("/content/sounds/pageturn.wav");
|
||||
stockSound->setParent(this);
|
||||
}
|
||||
|
||||
SoundService::~SoundService(void)
|
||||
{
|
||||
}
|
||||
|
||||
void SoundService::playSound(Instance* sound)
|
||||
{
|
||||
// Try to dynamic_cast it to SoundInstance
|
||||
SoundInstance* sndInst = dynamic_cast<SoundInstance*>(sound);
|
||||
if(sndInst != NULL)
|
||||
{
|
||||
std::string soundId = sndInst->getSoundId();
|
||||
AudioPlayer::playSound(GetFileInPath(soundId));
|
||||
}
|
||||
}
|
||||
|
||||
float SoundService::getMusicVolume()
|
||||
{
|
||||
return musicVolume;
|
||||
}
|
||||
@@ -34,4 +34,19 @@ void MenuButtonListener::onButton1MouseClick(BaseButtonInstance* button)
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if(button->name == "view")
|
||||
{
|
||||
HMENU mainmenu = CreatePopupMenu();
|
||||
AppendMenu(mainmenu, MF_STRING, 103, "Image Server Model View");
|
||||
|
||||
POINT p;
|
||||
GetCursorPos(&p);
|
||||
int menuClick = TrackPopupMenu(mainmenu, TPM_LEFTBUTTON | TPM_RETURNCMD, p.x, p.y, 0, Globals::mainHwnd, 0);
|
||||
switch (menuClick)
|
||||
{
|
||||
case 103:
|
||||
g_dataModel->getThumbnailGenerator()->click("PNG", 512, 512, true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -25,10 +25,10 @@ XplicitNgine::~XplicitNgine()
|
||||
dCloseODE();
|
||||
}
|
||||
|
||||
void XplicitNgine::resetBody(PartInstance* partInstance)
|
||||
{
|
||||
deleteBody(partInstance);
|
||||
createBody(partInstance);
|
||||
void XplicitNgine::resetBody(PartInstance* partInstance)
|
||||
{
|
||||
deleteBody(partInstance);
|
||||
createBody(partInstance);
|
||||
}
|
||||
|
||||
void collisionCallback(void *data, dGeomID o1, dGeomID o2)
|
||||
@@ -37,10 +37,12 @@ void collisionCallback(void *data, dGeomID o1, dGeomID o2)
|
||||
|
||||
dBodyID b1 = dGeomGetBody(o1);
|
||||
dBodyID b2 = dGeomGetBody(o2);
|
||||
|
||||
|
||||
if (b1 && b2 && dAreConnected(b1, b2))
|
||||
return;
|
||||
|
||||
|
||||
|
||||
const int N = 4;
|
||||
dContact contact[N];
|
||||
n = dCollide (o1,o2,N,&contact[0].geom,sizeof(dContact));
|
||||
@@ -62,8 +64,17 @@ void collisionCallback(void *data, dGeomID o1, dGeomID o2)
|
||||
g_xplicitNgine->contactgroup,
|
||||
contact+i
|
||||
);
|
||||
|
||||
|
||||
dJointAttach (c,b1,b2);
|
||||
|
||||
if(b1 != NULL)
|
||||
{
|
||||
PartInstance* touched = (PartInstance*)dGeomGetData(o2);
|
||||
if(touched != NULL)
|
||||
{
|
||||
touched->onTouch();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -123,6 +134,7 @@ void XplicitNgine::createBody(PartInstance* partInstance)
|
||||
partInstance->physBody = dBodyCreate(physWorld);
|
||||
dBodySetData(partInstance->physBody, partInstance);
|
||||
|
||||
|
||||
// Create geom
|
||||
if(partInstance->shape == Enum::Shape::Block)
|
||||
{
|
||||
@@ -140,6 +152,9 @@ void XplicitNgine::createBody(PartInstance* partInstance)
|
||||
partInstance->physGeom[0] = dCreateSphere(physSpace, partSize[0]/2);
|
||||
}
|
||||
|
||||
if(partInstance->physGeom[0])
|
||||
dGeomSetData(partInstance->physGeom[0], partInstance);
|
||||
|
||||
dMass mass;
|
||||
mass.setBox(sqrt(partSize.x*2), sqrt(partSize.y*2), sqrt(partSize.z*2), 0.7F);
|
||||
dBodySetMass(partInstance->physBody, &mass);
|
||||
|
||||
@@ -159,8 +159,6 @@ int main(int argc, char** argv) {
|
||||
icc.dwICC = ICC_WIN95_CLASSES/*|ICC_COOL_CLASSES|ICC_DATE_CLASSES|
|
||||
ICC_PAGESCROLLER_CLASS|ICC_USEREX_CLASSES*/;
|
||||
InitCommonControlsEx(&icc);
|
||||
|
||||
AudioPlayer::init();
|
||||
HMODULE hThisInstance = GetModuleHandle(NULL);
|
||||
|
||||
if (!createWindowClass("mainHWND",WndProc,hThisInstance))
|
||||
|
||||
Reference in New Issue
Block a user