Compare commits
339 Commits
0.0.13a
...
XplicitNgi
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f42c5a4a08 | ||
|
|
4a82c67fdc | ||
|
|
3417a34f37 | ||
|
|
d16bf9e39b | ||
|
|
d12654b4d3 | ||
|
|
5a20b4aefc | ||
|
|
08a3f9f307 | ||
|
|
77ce5c9a5a | ||
|
|
8a097f7eb1 | ||
|
|
e9a13b8163 | ||
|
|
33a43c5072 | ||
|
|
f2347970c4 | ||
|
|
d0b0ffd7f1 | ||
|
|
ab242470b6 | ||
|
|
03eceeae93 | ||
|
|
2919f4ebaa | ||
|
|
1dd930af49 | ||
|
|
98e73cd7ca | ||
|
|
057d86e05a | ||
|
|
89f9e0bfa2 | ||
|
|
61d07a8557 | ||
|
|
948835df98 | ||
|
|
e83a67ade2 | ||
|
|
6ec4ab466d | ||
|
|
f5f5f269d5 | ||
|
|
d492e438d2 | ||
|
|
1700258001 | ||
|
|
ff5b855e12 | ||
|
|
c9bb2ae72b | ||
|
|
5773584f48 | ||
|
|
7e2eb2c694 | ||
|
|
f7d6781698 | ||
|
|
30a05af3b2 | ||
|
|
b1af53995a | ||
|
|
866d644c63 | ||
|
|
1108af7cf3 | ||
|
|
7b4abe3efe | ||
|
|
5dd6ae7d9c | ||
|
|
0566dd0217 | ||
|
|
99d5a1de38 | ||
|
|
5020de484c | ||
|
|
62208a14a5 | ||
|
|
d7b491e073 | ||
|
|
c50d2a8166 | ||
|
|
d2e0b29051 | ||
|
|
4df67897dc | ||
|
|
0f0be7f0b9 | ||
|
|
581f8a3413 | ||
|
|
0174605a3e | ||
|
|
edf1bc701b | ||
|
|
69d55d0a5c | ||
|
|
99ab8e1620 | ||
|
|
ebe7ad682e | ||
|
|
abe406990b | ||
|
|
78c6dec932 | ||
|
|
2c65001536 | ||
|
|
07a2eb4d98 | ||
|
|
ea072e424a | ||
|
|
8b3da447a4 | ||
|
|
77615c5b8f | ||
|
|
dc6c002250 | ||
|
|
70fba67b6e | ||
|
|
1159be9b1b | ||
|
|
6752c5da68 | ||
|
|
77b7c3e62b | ||
|
|
7d7552d141 | ||
|
|
7f7e015706 | ||
|
|
ebbbbb3a69 | ||
|
|
b608a3ab9e | ||
|
|
ccf3ade099 | ||
|
|
3c2ae53449 | ||
|
|
421498e1fe | ||
|
|
8909ded488 | ||
|
|
5114ceb4b7 | ||
|
|
1472b7d6a5 | ||
|
|
52d2cbf5dd | ||
|
|
e4529a949a | ||
|
|
6d1428ced9 | ||
|
|
0f700aeda5 | ||
|
|
7273ee9ce0 | ||
|
|
1a7cd2e250 | ||
|
|
99f78be344 | ||
|
|
ee528d1245 | ||
|
|
18b856602c | ||
|
|
0dcd054da3 | ||
|
|
268a0cd2ee | ||
|
|
c71dcb8a91 | ||
|
|
24306c04ec | ||
|
|
b986815fcb | ||
|
|
a70cc31d28 | ||
|
|
b097cb15e4 | ||
|
|
b18ebfb56f | ||
|
|
eade3d8e93 | ||
|
|
ccf440a65e | ||
|
|
551a0e4b9e | ||
|
|
4afe95ae26 | ||
|
|
c6151b58e2 | ||
|
|
6f91ad5881 | ||
|
|
09d9af492f | ||
|
|
bd37f8e22d | ||
|
|
c5485fbf55 | ||
|
|
f02272976a | ||
|
|
0b9429d1bd | ||
|
|
43e606f08e | ||
|
|
8fd2cb8f68 | ||
|
|
a19103c896 | ||
|
|
06660a9f46 | ||
|
|
aa1c2df26c | ||
|
|
03d696a8fa | ||
|
|
240b342870 | ||
|
|
ef9e6c798b | ||
|
|
a29c59f8d2 | ||
|
|
aa2e62d2b5 | ||
|
|
19f125dcc6 | ||
|
|
0f3ccb8045 | ||
|
|
2134c66124 | ||
|
|
5806b48bae | ||
|
|
507b0a9ace | ||
|
|
679dbe69b8 | ||
|
|
4f766d8617 | ||
|
|
90e74e5133 | ||
|
|
1c9b93d6ab | ||
|
|
5eafaa401a | ||
|
|
e0ba49a03c | ||
|
|
2725f6da58 | ||
|
|
8985579159 | ||
|
|
c03160c3fd | ||
|
|
9193dfcabb | ||
|
|
c4df4131df | ||
|
|
374d3d3627 | ||
|
|
fe65f8945c | ||
|
|
db4c46cf20 | ||
|
|
c00e52a9e2 | ||
|
|
c65ac42d64 | ||
|
|
95d041bf5e | ||
|
|
89d2d0b981 | ||
|
|
0417060c1b | ||
|
|
e7ea4c4b72 | ||
|
|
bbab248209 | ||
|
|
4401fb8773 | ||
|
|
3bbfeae228 | ||
|
|
4bb2098fe1 | ||
|
|
ee1258b177 | ||
|
|
341866b8bb | ||
|
|
dae6dd5390 | ||
|
|
03fd38aaa7 | ||
|
|
f99d18f6ae | ||
|
|
a47268830b | ||
|
|
838f69944e | ||
|
|
c6d6c3fd40 | ||
|
|
bf946ead54 | ||
|
|
2a2d6a777b | ||
|
|
5c90258546 | ||
|
|
018c4a1557 | ||
|
|
0bd49da8f4 | ||
|
|
1926dfa686 | ||
|
|
1c337b0cdc | ||
|
|
54b19ba659 | ||
|
|
336b978fd3 | ||
|
|
90c609d06d | ||
|
|
22e018e138 | ||
|
|
a676a44fea | ||
|
|
cd7785ce06 | ||
|
|
fb3513c6f6 | ||
|
|
0cf7813bea | ||
|
|
39f68e1acc | ||
|
|
be124fff75 | ||
|
|
db9e030b53 | ||
|
|
b1a7aac481 | ||
|
|
e03a438169 | ||
|
|
f934a3fa38 | ||
|
|
8f72e8e666 | ||
|
|
da9d64c56f | ||
|
|
e5f7c7d1cc | ||
|
|
08b4d062e9 | ||
|
|
a8bfa1b4cd | ||
|
|
312ea44922 | ||
|
|
6accc7e366 | ||
|
|
f16d626f0d | ||
|
|
636d39bd2d | ||
|
|
6730ddc7bc | ||
|
|
b66d676254 | ||
|
|
a6eb176ec3 | ||
|
|
8816e96ba3 | ||
|
|
5aaf134ba8 | ||
|
|
66391f69c4 | ||
|
|
b40a2559f6 | ||
|
|
741f4eaf14 | ||
|
|
be7e532ead | ||
|
|
72954be880 | ||
|
|
a16953c8a0 | ||
|
|
b2c0fb58da | ||
|
|
828c0dcb41 | ||
|
|
cd0f1617cb | ||
|
|
2607fc8551 | ||
|
|
1de2fb6811 | ||
|
|
c84a2173c8 | ||
|
|
c38ede1bd1 | ||
|
|
0f609662bb | ||
|
|
512655b448 | ||
|
|
4fea98467d | ||
|
|
29dad6bd8d | ||
|
|
e04f53c071 | ||
|
|
4b580ef5ad | ||
|
|
5232d5e97f | ||
|
|
011d817321 | ||
|
|
60c7a386f0 | ||
|
|
3ee06b6c62 | ||
|
|
57b407c894 | ||
|
|
9999eb62e4 | ||
|
|
930aee06dc | ||
|
|
e6ca1cd502 | ||
|
|
c875454b40 | ||
|
|
388962a5e7 | ||
|
|
9986f2ee5f | ||
|
|
529821ab9f | ||
|
|
d72d09f95d | ||
|
|
d810c213f6 | ||
|
|
2bdef97edf | ||
|
|
ce66ec6f5d | ||
|
|
df5076e90f | ||
|
|
faaa59f58b | ||
|
|
78ece8c2a2 | ||
|
|
8dff73d5f5 | ||
|
|
4bdb1d6939 | ||
|
|
59510383e6 | ||
|
|
f0f16a3a69 | ||
|
|
09c6a73e80 | ||
|
|
3108021007 | ||
|
|
fa3a0f9aa4 | ||
|
|
f45e8afb37 | ||
|
|
739f116895 | ||
|
|
f281103ca1 | ||
|
|
b7d14dcf2a | ||
|
|
5659a1e13c | ||
|
|
fb48c4d85d | ||
|
|
ce3ca419e8 | ||
|
|
c3b9e1f6c8 | ||
|
|
9ba0db1ab9 | ||
|
|
70d9aded42 | ||
|
|
a99f58b62f | ||
|
|
fcb1ad05fd | ||
|
|
50f8c7ec10 | ||
|
|
4094631f30 | ||
|
|
1cae1135b9 | ||
|
|
f78ca49ec0 | ||
|
|
e9c7607a4b | ||
|
|
6d49e266dd | ||
|
|
78cdb01ef1 | ||
|
|
1ed434c858 | ||
|
|
f4acbaacdc | ||
|
|
e777f3ccc4 | ||
|
|
9e61c9e4d2 | ||
|
|
3fb730ceba | ||
|
|
811ac871a3 | ||
|
|
54ed0299c0 | ||
|
|
09fcd72e43 | ||
|
|
0371836dc8 | ||
|
|
74e423e9f8 | ||
|
|
9868937c08 | ||
|
|
5c500859a3 | ||
|
|
1274a8deca | ||
|
|
4bbd82b715 | ||
|
|
827e610b8c | ||
|
|
10f3a25c54 | ||
|
|
e650d4afbc | ||
|
|
d738a804e6 | ||
|
|
1f7c5b28f8 | ||
|
|
a9d533e447 | ||
|
|
a9f91c8a9e | ||
|
|
04f1ac813e | ||
|
|
2b2672b9fd | ||
|
|
d0bba08f3a | ||
|
|
3f222b75d8 | ||
|
|
560245e005 | ||
|
|
cbd680a6ac | ||
|
|
f6b301a836 | ||
|
|
d1a1ebd016 | ||
|
|
9ffe37c21a | ||
|
|
30aa99ff0b | ||
|
|
3ee0075f1d | ||
|
|
05da8e2270 | ||
|
|
68ac692314 | ||
|
|
a4176510b9 | ||
|
|
55e890bdc1 | ||
|
|
98d3358fd5 | ||
|
|
68edb442d3 | ||
|
|
20e8c63d5c | ||
|
|
5d8e4bc040 | ||
|
|
71cf1e39f3 | ||
|
|
21be7a4c73 | ||
|
|
e7df4b26f0 | ||
|
|
11788fa37c | ||
|
|
e29ad28a06 | ||
|
|
9d30c2aed7 | ||
|
|
c62df67db2 | ||
|
|
c9e997c794 | ||
|
|
8a6d7d0d8d | ||
|
|
6cea4397f2 | ||
|
|
f0fffa71d4 | ||
|
|
49c117d5d7 | ||
|
|
19913cb665 | ||
|
|
810488e20c | ||
|
|
a91bc4c5b5 | ||
|
|
45e28f96dc | ||
|
|
b521f1c86f | ||
|
|
1d4082bdd0 | ||
|
|
df6cee3e11 | ||
|
|
15e1868fc2 | ||
|
|
113115b6df | ||
|
|
2445d076a1 | ||
|
|
8fc8549a6c | ||
|
|
bb3aac25c5 | ||
|
|
09fa95d4a0 | ||
|
|
acd87e351b | ||
|
|
8d53e8ff0f | ||
|
|
b900e918b4 | ||
|
|
067a744cda | ||
|
|
3e4c128347 | ||
|
|
acbe509c05 | ||
|
|
1bb0c6eb6f | ||
|
|
8889494848 | ||
|
|
8a780d6f0b | ||
|
|
0a2b508290 | ||
|
|
33e3aeb16e | ||
|
|
4526fa68df | ||
|
|
acfd499cfb | ||
|
|
b12c753179 | ||
|
|
7d623bb99d | ||
|
|
21684a6ea3 | ||
|
|
5306ec6809 | ||
|
|
fe2f8cf160 | ||
|
|
36999b0307 | ||
|
|
f4d01e48fa | ||
|
|
0816390509 | ||
|
|
9ce3a1a26c | ||
|
|
2797bdb4a5 | ||
|
|
ce7b221a11 | ||
|
|
2776546ab7 |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -51,3 +51,5 @@ log.txt
|
||||
G3DTest.suo
|
||||
G3DTest.suo
|
||||
stderr.txt
|
||||
desktop.ini
|
||||
main.cpp
|
||||
|
||||
112
AudioPlayer.cpp
Normal file
112
AudioPlayer.cpp
Normal file
@@ -0,0 +1,112 @@
|
||||
#include "AudioPlayer.h"
|
||||
#include "SDL.h"
|
||||
#include "SDL_audio.h"
|
||||
#include <stdlib.h>
|
||||
#include <malloc.h>
|
||||
#include <string.h>
|
||||
#define NUM_SOUNDS 10
|
||||
static SDL_AudioSpec fmt;
|
||||
static bool initiated = false;
|
||||
|
||||
AudioPlayer::AudioPlayer(void)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
AudioPlayer::~AudioPlayer(void)
|
||||
{
|
||||
SDL_CloseAudio();
|
||||
}
|
||||
|
||||
void AudioPlayer::init()
|
||||
{
|
||||
initiated = true;
|
||||
extern void mixaudio(void *unused, Uint8 *stream, int len);
|
||||
fmt.freq = 22050;
|
||||
fmt.format = AUDIO_S16;
|
||||
fmt.channels = 2;
|
||||
fmt.samples = 1024; /* A good value for games */
|
||||
fmt.callback = mixaudio;
|
||||
fmt.userdata = NULL;
|
||||
|
||||
/* Open the audio device and start playing sound! */
|
||||
if ( SDL_OpenAudio(&fmt, NULL) < 0 ) {
|
||||
fprintf(stderr, "Unable to open audio: %s\n", SDL_GetError());
|
||||
}
|
||||
SDL_PauseAudio(0);
|
||||
}
|
||||
|
||||
static struct sample {
|
||||
Uint8 *data;
|
||||
Uint32 dpos;
|
||||
Uint32 dlen;
|
||||
} sounds[NUM_SOUNDS];
|
||||
|
||||
void mixaudio(void *unused, Uint8 *stream, int len)
|
||||
{
|
||||
int i;
|
||||
Uint32 amount;
|
||||
|
||||
for ( i=0; i<NUM_SOUNDS; ++i ) {
|
||||
amount = (sounds[i].dlen-sounds[i].dpos);
|
||||
if ( amount > (Uint32)len ) {
|
||||
amount = len;
|
||||
}
|
||||
SDL_MixAudio(stream, &sounds[i].data[sounds[i].dpos], amount, SDL_MIX_MAXVOLUME);
|
||||
sounds[i].dpos += amount;
|
||||
}
|
||||
}
|
||||
|
||||
void AudioPlayer::playSound(std::string fileString)
|
||||
{
|
||||
|
||||
if(initiated)
|
||||
{
|
||||
char *file = new char[fileString.length() + 1];
|
||||
strcpy(file, fileString.c_str());
|
||||
|
||||
|
||||
int index;
|
||||
SDL_AudioSpec wave;
|
||||
Uint8 *data;
|
||||
Uint32 dlen;
|
||||
SDL_AudioCVT cvt;
|
||||
|
||||
/* Look for an empty (or finished) sound slot */
|
||||
for ( index=0; index<NUM_SOUNDS; ++index ) {
|
||||
if ( sounds[index].dpos == sounds[index].dlen ) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ( index == NUM_SOUNDS )
|
||||
return;
|
||||
|
||||
/* Load the sound file and convert it to 16-bit stereo at 22kHz */
|
||||
if ( SDL_LoadWAV(file, &wave, &data, &dlen) == NULL ) {
|
||||
fprintf(stderr, "Couldn't load %s: %s\n", file, SDL_GetError());
|
||||
return;
|
||||
}
|
||||
SDL_BuildAudioCVT(&cvt, wave.format, wave.channels, wave.freq,
|
||||
AUDIO_S16, 2, fmt.freq);
|
||||
cvt.buf = (Uint8*)malloc(dlen*cvt.len_mult);
|
||||
memcpy(cvt.buf, data, dlen);
|
||||
cvt.len = dlen;
|
||||
SDL_ConvertAudio(&cvt);
|
||||
SDL_FreeWAV(data);
|
||||
|
||||
/* Put the sound data in the slot (it starts playing immediately) */
|
||||
if ( sounds[index].data ) {
|
||||
free(sounds[index].data);
|
||||
}
|
||||
SDL_LockAudio();
|
||||
sounds[index].data = cvt.buf;
|
||||
sounds[index].dlen = cvt.len_cvt;
|
||||
sounds[index].dpos = 0;
|
||||
SDL_UnlockAudio();
|
||||
delete [] file;
|
||||
}
|
||||
else
|
||||
{
|
||||
OutputDebugString("Audio player not initialized, sound will not play\r\n");
|
||||
}
|
||||
}
|
||||
11
AudioPlayer.h
Normal file
11
AudioPlayer.h
Normal file
@@ -0,0 +1,11 @@
|
||||
#include <G3DAll.h>
|
||||
#pragma once
|
||||
|
||||
class AudioPlayer
|
||||
{
|
||||
public:
|
||||
AudioPlayer(void);
|
||||
~AudioPlayer(void);
|
||||
static void playSound(std::string);
|
||||
static void init();
|
||||
};
|
||||
57
BaseButtonInstance.cpp
Normal file
57
BaseButtonInstance.cpp
Normal file
@@ -0,0 +1,57 @@
|
||||
#include "BaseButtonInstance.h"
|
||||
#include "Globals.h"
|
||||
|
||||
|
||||
ButtonListener* listener = NULL;
|
||||
|
||||
BaseButtonInstance::BaseButtonInstance(void)
|
||||
{
|
||||
Instance::Instance();
|
||||
listener = NULL;
|
||||
}
|
||||
|
||||
void BaseButtonInstance::render(RenderDevice* rd)
|
||||
{
|
||||
DataModelInstance* dataModel = Globals::dataModel;
|
||||
Vector2 pos = Vector2(dataModel->mousex,dataModel->mousey);
|
||||
drawObj(rd, pos, dataModel->mouseButton1Down);
|
||||
Instance::render(rd);
|
||||
}
|
||||
|
||||
BaseButtonInstance::~BaseButtonInstance(void)
|
||||
{
|
||||
delete listener;
|
||||
}
|
||||
|
||||
void BaseButtonInstance::setButtonListener(ButtonListener* buttonListener)
|
||||
{
|
||||
listener = buttonListener;
|
||||
}
|
||||
|
||||
void BaseButtonInstance::drawObj(RenderDevice* rd, Vector2 mousePos, bool mouseDown){}
|
||||
|
||||
bool BaseButtonInstance::mouseInButton(float mousex, float mousey, RenderDevice* rd){return false;}
|
||||
|
||||
void BaseButtonInstance::onMouseClick()
|
||||
{
|
||||
if(listener != NULL)
|
||||
{
|
||||
listener->onButton1MouseClick(this);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool BaseButtonInstance::mouseInArea(float point1x, float point1y, float point2x, float point2y, float mousex, float mousey)
|
||||
{
|
||||
|
||||
|
||||
if(mousex >= point1x && mousey >= point1y)
|
||||
{
|
||||
if(mousex < point2x && mousey < point2y)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
24
BaseButtonInstance.h
Normal file
24
BaseButtonInstance.h
Normal file
@@ -0,0 +1,24 @@
|
||||
#pragma once
|
||||
#include "instance.h"
|
||||
#pragma once
|
||||
#include "ButtonListener.h"
|
||||
class ButtonListener;
|
||||
class BaseButtonInstance : public Instance
|
||||
{
|
||||
public:
|
||||
BaseButtonInstance(void);
|
||||
virtual ~BaseButtonInstance(void);
|
||||
virtual void render(RenderDevice* rd);
|
||||
virtual void drawObj(RenderDevice* rd, Vector2 mousePos, bool mouseDown);
|
||||
virtual bool mouseInButton(float, float, RenderDevice* rd);
|
||||
virtual void onMouseClick();
|
||||
void setButtonListener(ButtonListener*);
|
||||
bool floatBottom;
|
||||
bool floatRight;
|
||||
bool floatCenter;
|
||||
volatile bool disabled;
|
||||
bool selected;
|
||||
protected:
|
||||
bool mouseInArea(float, float, float, float, float, float);
|
||||
class ButtonListener* listener;
|
||||
};
|
||||
9
BrowserCallHandler.cpp
Normal file
9
BrowserCallHandler.cpp
Normal file
@@ -0,0 +1,9 @@
|
||||
#include "BrowserCallHandler.h"
|
||||
|
||||
BrowserCallHandler::BrowserCallHandler(void)
|
||||
{
|
||||
}
|
||||
|
||||
BrowserCallHandler::~BrowserCallHandler(void)
|
||||
{
|
||||
}
|
||||
8
BrowserCallHandler.h
Normal file
8
BrowserCallHandler.h
Normal file
@@ -0,0 +1,8 @@
|
||||
#pragma once
|
||||
#include <Mshtmhst.h>
|
||||
class BrowserCallHandler : IDocHostUIHandler
|
||||
{
|
||||
public:
|
||||
BrowserCallHandler(void);
|
||||
~BrowserCallHandler(void);
|
||||
};
|
||||
15
ButtonListener.cpp
Normal file
15
ButtonListener.cpp
Normal file
@@ -0,0 +1,15 @@
|
||||
#include "ButtonListener.h"
|
||||
|
||||
|
||||
ButtonListener::ButtonListener()
|
||||
{
|
||||
}
|
||||
|
||||
ButtonListener::~ButtonListener(void)
|
||||
{
|
||||
}
|
||||
|
||||
void ButtonListener::onButton1MouseClick(BaseButtonInstance* button)
|
||||
{
|
||||
}
|
||||
|
||||
20
ButtonListener.h
Normal file
20
ButtonListener.h
Normal file
@@ -0,0 +1,20 @@
|
||||
#pragma once
|
||||
#include "Demo.h"
|
||||
#include "BaseButtonInstance.h"
|
||||
class BaseButtonInstance;
|
||||
|
||||
class ButtonListener
|
||||
{
|
||||
public:
|
||||
ButtonListener();
|
||||
~ButtonListener(void);
|
||||
virtual void onButton1MouseClick(BaseButtonInstance*);
|
||||
//virtual void onMouseOver(); //TODO
|
||||
//virtual void onMouseOut(); //TODO
|
||||
//virtual void onButton1MouseDown(); //TODO
|
||||
//virtual void onButton1MouseUp(); //TODO
|
||||
//virtual void onButton2MouseClick(); //TODO
|
||||
//virtual void onButton2MouseDown(); //TODO
|
||||
//virtual void onButton2MouseUp(); //TODO
|
||||
//What to do now...
|
||||
};
|
||||
235
CameraController.cpp
Normal file
235
CameraController.cpp
Normal file
@@ -0,0 +1,235 @@
|
||||
#include "CameraController.h"
|
||||
#include "win32Defines.h"
|
||||
#include <iostream>
|
||||
#include "PartInstance.h"
|
||||
#include "Demo.h"
|
||||
#include "AudioPlayer.h"
|
||||
|
||||
|
||||
|
||||
CameraController::CameraController() :
|
||||
yaw(0),
|
||||
pitch(0),
|
||||
moveRate(1.0f),
|
||||
forwards(false),
|
||||
backwards(false),
|
||||
left(false),
|
||||
right(false),
|
||||
zoom(14.f),
|
||||
rightButtonHolding(false),
|
||||
focusPosition(Vector3(0,0,0)) {}
|
||||
|
||||
GCamera* CameraController::getCamera()
|
||||
{
|
||||
return &g3dCamera;
|
||||
}
|
||||
|
||||
void CameraController::lookAt(const Vector3& position) {
|
||||
const Vector3 look = (position - g3dCamera.getCoordinateFrame().translation);
|
||||
yaw = aTan2(look.x, -look.z);
|
||||
|
||||
pitch = -aTan2(look.y, distance(look.x, look.z));
|
||||
CoordinateFrame frame = g3dCamera.getCoordinateFrame().translation;
|
||||
frame.rotation = Matrix3::fromEulerAnglesZYX(0, -yaw, -pitch);
|
||||
g3dCamera.setCoordinateFrame(frame);
|
||||
}
|
||||
|
||||
void CameraController::setFrame(const CoordinateFrame& cf) {
|
||||
Vector3 look = cf.getLookVector();
|
||||
g3dCamera.setCoordinateFrame(cf);
|
||||
lookAt(cf.translation + look);
|
||||
focusPosition=cf.translation+cf.lookVector()*zoom;
|
||||
}
|
||||
|
||||
CoordinateFrame CameraController::getCoordinateFrame() {
|
||||
CoordinateFrame cf;
|
||||
cf.translation=translation;
|
||||
cf.rotation = Matrix3::fromEulerAnglesZYX(0, -yaw, -pitch);
|
||||
return cf;
|
||||
}
|
||||
|
||||
void CameraController::refreshZoom(const CoordinateFrame& frame)
|
||||
{
|
||||
CoordinateFrame zoomFrame = focusPosition-frame.lookVector()*zoom;
|
||||
zoomFrame.lookAt(focusPosition);
|
||||
setFrame(zoomFrame);
|
||||
}
|
||||
|
||||
void CameraController::pan(CoordinateFrame* frame,float spdX, float spdY)
|
||||
{
|
||||
yaw+=spdX;
|
||||
pitch+=spdY;
|
||||
|
||||
if (pitch>1.4f) pitch=1.4f;
|
||||
if (pitch<-1.4f) pitch=-1.4f;
|
||||
frame->translation = Vector3(sin(-yaw)*zoom*cos(pitch),sin(pitch)*zoom,cos(-yaw)*zoom*cos(pitch))+focusPosition;
|
||||
frame->lookAt(focusPosition);
|
||||
}
|
||||
bool CameraController::onMouseWheel(int x, int y, short delta)
|
||||
{
|
||||
Zoom(delta);
|
||||
return true;
|
||||
}
|
||||
void CameraController::Zoom(short delta)
|
||||
{
|
||||
CoordinateFrame frame = g3dCamera.getCoordinateFrame();
|
||||
|
||||
if (delta>0) { // Mouse wheel up
|
||||
CoordinateFrame zoomFrame = frame+frame.lookVector()*(zoom/5);
|
||||
zoom=(zoomFrame.translation-focusPosition).magnitude();
|
||||
if (zoom>CAM_ZOOM_MIN)
|
||||
{
|
||||
setFrame(zoomFrame);
|
||||
}
|
||||
else
|
||||
{
|
||||
zoom=CAM_ZOOM_MIN;
|
||||
refreshZoom(frame);
|
||||
}
|
||||
}
|
||||
else {
|
||||
CoordinateFrame zoomFrame = frame-frame.lookVector()*(zoom/5);
|
||||
zoom=(zoomFrame.translation-focusPosition).magnitude();
|
||||
if (zoom<CAM_ZOOM_MAX)
|
||||
{
|
||||
setFrame(zoomFrame);
|
||||
}
|
||||
else
|
||||
{
|
||||
zoom=CAM_ZOOM_MAX;
|
||||
refreshZoom(frame);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CameraController::panLeft()
|
||||
{
|
||||
CoordinateFrame frame = g3dCamera.getCoordinateFrame();
|
||||
pan(&frame,toRadians(-45),0);
|
||||
setFrame(frame);
|
||||
|
||||
}
|
||||
void CameraController::panRight()
|
||||
{
|
||||
CoordinateFrame frame = g3dCamera.getCoordinateFrame();
|
||||
pan(&frame,toRadians(45),0);
|
||||
setFrame(frame);
|
||||
}
|
||||
|
||||
void CameraController::tiltUp()
|
||||
{
|
||||
|
||||
CoordinateFrame frame = CoordinateFrame(g3dCamera.getCoordinateFrame().rotation, g3dCamera.getCoordinateFrame().translation);
|
||||
pan(&frame,0,toRadians(25));
|
||||
setFrame(frame);
|
||||
}
|
||||
void CameraController::tiltDown()
|
||||
{
|
||||
CoordinateFrame frame = CoordinateFrame(g3dCamera.getCoordinateFrame().rotation, g3dCamera.getCoordinateFrame().translation);
|
||||
pan(&frame,0,toRadians(-25));
|
||||
setFrame(frame);
|
||||
}
|
||||
|
||||
void CameraController::centerCamera(Instance* selection)
|
||||
{
|
||||
CoordinateFrame frame = CoordinateFrame(g3dCamera.getCoordinateFrame().translation);
|
||||
if(selection == NULL)
|
||||
{
|
||||
lookAt(Vector3(0,0,0));
|
||||
focusPosition=Vector3(0,0,0);
|
||||
}
|
||||
else if(PartInstance* part = dynamic_cast<PartInstance*>(selection))
|
||||
{
|
||||
Vector3 partPos = (part)->getPosition()/2;
|
||||
lookAt(partPos);
|
||||
focusPosition=partPos;
|
||||
zoom=((partPos-frame.translation).magnitude());
|
||||
}
|
||||
else
|
||||
{
|
||||
lookAt(Vector3(0,0,0));
|
||||
focusPosition=Vector3(0,0,0);
|
||||
}
|
||||
}
|
||||
|
||||
void CameraController::update(Demo* demo)
|
||||
{
|
||||
float offsetSize = 0.05F;
|
||||
|
||||
Vector3 cameraPos = g3dCamera.getCoordinateFrame().translation;
|
||||
CoordinateFrame frame = g3dCamera.getCoordinateFrame();
|
||||
bool moving=false;
|
||||
if(GetHoldKeyState('U')) {
|
||||
forwards = true;
|
||||
moving=true;
|
||||
}
|
||||
if(GetHoldKeyState('J')) {
|
||||
backwards = true;
|
||||
moving=true;
|
||||
}
|
||||
if(GetHoldKeyState('H')) {
|
||||
left = true;
|
||||
moving=true;
|
||||
}
|
||||
if(GetHoldKeyState('K')) {
|
||||
right = true;
|
||||
moving=true;
|
||||
}
|
||||
|
||||
if(forwards) {
|
||||
forwards = false;
|
||||
frame.translation += frame.lookVector()*moveRate;
|
||||
}
|
||||
else if(backwards) {
|
||||
backwards = false;
|
||||
frame.translation -= frame.lookVector()*moveRate;
|
||||
}
|
||||
if(left) {
|
||||
left = false;
|
||||
frame.translation += frame.leftVector()*moveRate;
|
||||
}
|
||||
else if(right) {
|
||||
right = false;
|
||||
frame.translation += frame.rightVector()*moveRate;
|
||||
}
|
||||
|
||||
if (moving)
|
||||
{
|
||||
zoom=7;
|
||||
focusPosition=frame.translation+frame.lookVector()*zoom;
|
||||
}
|
||||
|
||||
if(rightButtonHolding) {
|
||||
Globals::useMousePoint = true;
|
||||
Globals::mousepoint = oldDesktopMouse;
|
||||
POINT mouse;
|
||||
GetCursorPos(&mouse);
|
||||
pan(&frame,(mouse.x-oldDesktopMouse.x)/100.f,(mouse.y-oldDesktopMouse.y)/100.f);
|
||||
SetCursorPos(oldDesktopMouse.x,oldDesktopMouse.y);
|
||||
}
|
||||
else
|
||||
{
|
||||
Globals::useMousePoint = false;
|
||||
}
|
||||
|
||||
if(GetHoldKeyState(VK_RSHIFT) || GetHoldKeyState(VK_LSHIFT)) {
|
||||
moveRate = 2;
|
||||
}
|
||||
else {
|
||||
moveRate = 1;
|
||||
}
|
||||
|
||||
if(GetHoldKeyState(VK_RBUTTON))
|
||||
{
|
||||
if (rightButtonHolding==false)
|
||||
{
|
||||
GetCursorPos(&oldDesktopMouse);
|
||||
rightButtonHolding = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
rightButtonHolding = false;
|
||||
}
|
||||
g3dCamera.setCoordinateFrame(frame);
|
||||
}
|
||||
46
CameraController.h
Normal file
46
CameraController.h
Normal file
@@ -0,0 +1,46 @@
|
||||
#pragma once
|
||||
|
||||
#include <G3DAll.h>
|
||||
#include "Instance.h"
|
||||
#include "Globals.h"
|
||||
#include <string>
|
||||
|
||||
#define CAM_ZOOM_MIN 0.1f
|
||||
#define CAM_ZOOM_MAX 100.f
|
||||
|
||||
class Demo;
|
||||
|
||||
class CameraController {
|
||||
public:
|
||||
CameraController();
|
||||
G3D::CoordinateFrame getCoordinateFrame();
|
||||
|
||||
void setFrame(const CoordinateFrame& cf);
|
||||
void lookAt(const Vector3& position);
|
||||
void refreshZoom(const CoordinateFrame& frame);
|
||||
void pan(CoordinateFrame* frame,float spdX,float spdY);
|
||||
void update(Demo* demo);
|
||||
void centerCamera(Instance* selection);
|
||||
void panLeft();
|
||||
void panRight();
|
||||
void tiltUp();
|
||||
void tiltDown();
|
||||
void Zoom(short delta);
|
||||
bool onMouseWheel(int x, int y, short delta);
|
||||
GCamera* getCamera();
|
||||
private:
|
||||
Vector3 translation;
|
||||
Vector3 focusPosition;
|
||||
float yaw;
|
||||
float pitch;
|
||||
float moveRate;
|
||||
float zoom;
|
||||
bool forwards;
|
||||
bool backwards;
|
||||
bool left;
|
||||
bool right;
|
||||
bool rightButtonHolding;
|
||||
POINT oldDesktopMouse;
|
||||
GCamera g3dCamera;
|
||||
std::string cameraSound;
|
||||
};
|
||||
551
DataModelInstance.cpp
Normal file
551
DataModelInstance.cpp
Normal file
@@ -0,0 +1,551 @@
|
||||
#include <string>
|
||||
#include "DataModelInstance.h"
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <commdlg.h>
|
||||
|
||||
using namespace std;
|
||||
using namespace rapidxml;
|
||||
|
||||
|
||||
DataModelInstance::DataModelInstance(void)
|
||||
{
|
||||
Instance::Instance();
|
||||
workspace = new WorkspaceInstance();
|
||||
guiRoot = new Instance();
|
||||
level = new LevelInstance();
|
||||
//children.push_back(workspace);
|
||||
//children.push_back(level);
|
||||
className = "dataModel";
|
||||
mousex = 0;
|
||||
mousey = 0;
|
||||
mouseButton1Down = false;
|
||||
showMessage = false;
|
||||
canDelete = false;
|
||||
_modY=0;
|
||||
workspace->setParent(this);
|
||||
level->setParent(this);
|
||||
_loadedFileName="..//skooter.rbxm";
|
||||
|
||||
}
|
||||
|
||||
DataModelInstance::~DataModelInstance(void)
|
||||
{
|
||||
}
|
||||
|
||||
#ifdef _DEBUG
|
||||
void DataModelInstance::modXMLLevel(float modY)
|
||||
{
|
||||
_modY += modY;
|
||||
clearLevel();
|
||||
debugGetOpen();
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
void DataModelInstance::clearLevel()
|
||||
{
|
||||
workspace->clearChildren();
|
||||
}
|
||||
PartInstance* DataModelInstance::makePart()
|
||||
{
|
||||
PartInstance* part = new PartInstance();
|
||||
return part;
|
||||
}
|
||||
|
||||
rapidxml::xml_node<>* DataModelInstance::getNode(xml_node<> * node,const char* name)
|
||||
{
|
||||
xml_node<> * tempNode = node->first_node(name);
|
||||
if (!tempNode)
|
||||
{
|
||||
_errMsg = "Expected <";
|
||||
_errMsg += name;
|
||||
_errMsg+="> tag.";
|
||||
_successfulLoad=true;
|
||||
return 0;
|
||||
}
|
||||
return tempNode;
|
||||
}
|
||||
float DataModelInstance::getFloatValue(xml_node<> * node,const char* name)
|
||||
{
|
||||
xml_node<> * tempNode = node->first_node(name);
|
||||
if (!tempNode)
|
||||
{
|
||||
_errMsg = "Expected <";
|
||||
_errMsg += name;
|
||||
_errMsg+="> tag.";
|
||||
_successfulLoad=true;
|
||||
return 0;
|
||||
}
|
||||
float newFloat;
|
||||
stringstream converter;
|
||||
converter << tempNode->value();
|
||||
converter >> newFloat;
|
||||
return newFloat;
|
||||
}
|
||||
|
||||
|
||||
Color3 bcToRGB(short bc)
|
||||
{
|
||||
switch(bc)
|
||||
{
|
||||
case 1: return Color3(0.94901967048645,0.95294123888016,0.95294123888016);
|
||||
case 2: return Color3(0.63137257099152,0.64705884456635,0.63529413938522);
|
||||
case 3: return Color3(0.9764706492424,0.91372555494308,0.60000002384186);
|
||||
case 5: return Color3(0.84313732385635,0.77254909276962,0.60392159223557);
|
||||
case 6: return Color3(0.7607843875885,0.85490202903748,0.72156864404678);
|
||||
case 9: return Color3(0.90980398654938,0.7294117808342,0.78431379795074);
|
||||
case 11: return Color3(0.50196081399918,0.73333334922791,0.85882359743118);
|
||||
case 12: return Color3(0.79607850313187,0.51764708757401,0.258823543787);
|
||||
case 18: return Color3(0.80000007152557,0.55686277151108,0.41176474094391);
|
||||
case 21: return Color3(0.76862752437592,0.15686275064945,0.10980392992496);
|
||||
case 22: return Color3(0.76862752437592,0.43921571969986,0.62745100259781);
|
||||
case 23: return Color3(0.050980396568775,0.41176474094391,0.6745098233223);
|
||||
case 24: return Color3(0.96078437566757,0.80392163991928,0.18823531270027);
|
||||
case 25: return Color3(0.38431376218796,0.27843138575554,0.19607844948769);
|
||||
case 26: return Color3(0.10588236153126,0.16470588743687,0.20784315466881);
|
||||
case 27: return Color3(0.42745101451874,0.43137258291245,0.42352944612503);
|
||||
case 28: return Color3(0.15686275064945,0.49803924560547,0.27843138575554);
|
||||
case 29: return Color3(0.63137257099152,0.76862752437592,0.54901963472366);
|
||||
case 36: return Color3(0.95294123888016,0.8117647767067,0.60784316062927);
|
||||
case 37: return Color3(0.29411765933037,0.59215688705444,0.29411765933037);
|
||||
case 38: return Color3(0.62745100259781,0.37254902720451,0.20784315466881);
|
||||
case 39: return Color3(0.75686281919479,0.79215693473816,0.8705883026123);
|
||||
case 40: return Color3(0.92549026012421,0.92549026012421,0.92549026012421);
|
||||
case 41: return Color3(0.80392163991928,0.32941177487373,0.29411765933037);
|
||||
case 42: return Color3(0.75686281919479,0.87450987100601,0.94117653369904);
|
||||
case 43: return Color3(0.48235297203064,0.71372550725937,0.90980398654938);
|
||||
case 44: return Color3(0.96862751245499,0.94509810209274,0.55294120311737);
|
||||
case 45: return Color3(0.70588237047195,0.82352948188782,0.89411771297455);
|
||||
case 47: return Color3(0.85098046064377,0.52156865596771,0.42352944612503);
|
||||
case 48: return Color3(0.51764708757401,0.71372550725937,0.55294120311737);
|
||||
case 49: return Color3(0.97254908084869,0.94509810209274,0.51764708757401);
|
||||
case 50: return Color3(0.92549026012421,0.90980398654938,0.8705883026123);
|
||||
case 100: return Color3(0.93333339691162,0.76862752437592,0.71372550725937);
|
||||
case 101: return Color3(0.85490202903748,0.52549022436142,0.47843140363693);
|
||||
case 102: return Color3(0.43137258291245,0.60000002384186,0.79215693473816);
|
||||
case 103: return Color3(0.78039222955704,0.75686281919479,0.71764707565308);
|
||||
case 104: return Color3(0.41960787773132,0.19607844948769,0.48627454042435);
|
||||
case 105: return Color3(0.88627457618713,0.60784316062927,0.25098040699959);
|
||||
case 106: return Color3(0.85490202903748,0.52156865596771,0.2549019753933);
|
||||
case 107: return Color3(0,0.56078433990479,0.61176472902298);
|
||||
case 108: return Color3(0.4078431725502,0.36078432202339,0.26274511218071);
|
||||
case 110: return Color3(0.26274511218071,0.32941177487373,0.57647061347961);
|
||||
case 111: return Color3(0.74901962280273,0.71764707565308,0.69411766529083);
|
||||
case 112: return Color3(0.4078431725502,0.45490199327469,0.6745098233223);
|
||||
case 113: return Color3(0.89411771297455,0.678431391716,0.78431379795074);
|
||||
case 115: return Color3(0.78039222955704,0.82352948188782,0.23529413342476);
|
||||
case 116: return Color3(0.33333334326744,0.64705884456635,0.68627452850342);
|
||||
case 118: return Color3(0.71764707565308,0.84313732385635,0.83529418706894);
|
||||
case 119: return Color3(0.64313727617264,0.74117648601532,0.27843138575554);
|
||||
case 120: return Color3(0.85098046064377,0.89411771297455,0.65490198135376);
|
||||
case 121: return Color3(0.90588241815567,0.6745098233223,0.34509804844856);
|
||||
case 123: return Color3(0.82745105028152,0.43529415130615,0.29803922772408);
|
||||
case 124: return Color3(0.57254904508591,0.22352942824364,0.47058826684952);
|
||||
case 125: return Color3(0.91764712333679,0.72156864404678,0.57254904508591);
|
||||
case 126: return Color3(0.64705884456635,0.64705884456635,0.79607850313187);
|
||||
case 127: return Color3(0.86274516582489,0.73725491762161,0.50588238239288);
|
||||
case 128: return Color3(0.68235296010971,0.47843140363693,0.34901961684227);
|
||||
case 131: return Color3(0.61176472902298,0.63921570777893,0.65882354974747);
|
||||
case 133: return Color3(0.83529418706894,0.45098042488098,0.23921570181847);
|
||||
case 134: return Color3(0.84705889225006,0.8666667342186,0.33725491166115);
|
||||
case 135: return Color3(0.45490199327469,0.52549022436142,0.61568629741669);
|
||||
case 136: return Color3(0.52941179275513,0.48627454042435,0.56470590829849);
|
||||
case 137: return Color3(0.87843143939972,0.59607845544815,0.39215689897537);
|
||||
case 138: return Color3(0.58431375026703,0.54117649793625,0.45098042488098);
|
||||
case 140: return Color3(0.12549020349979,0.22745099663734,0.33725491166115);
|
||||
case 141: return Color3(0.15294118225574,0.27450981736183,0.17647059261799);
|
||||
case 143: return Color3(0.8117647767067,0.88627457618713,0.96862751245499);
|
||||
case 145: return Color3(0.47450983524323,0.53333336114883,0.63137257099152);
|
||||
case 146: return Color3(0.58431375026703,0.55686277151108,0.63921570777893);
|
||||
case 147: return Color3(0.57647061347961,0.52941179275513,0.40392160415649);
|
||||
case 148: return Color3(0.34117648005486,0.34509804844856,0.34117648005486);
|
||||
case 149: return Color3(0.086274512112141,0.11372549831867,0.19607844948769);
|
||||
case 150: return Color3(0.67058825492859,0.678431391716,0.6745098233223);
|
||||
case 151: return Color3(0.47058826684952,0.56470590829849,0.50980395078659);
|
||||
case 153: return Color3(0.58431375026703,0.47450983524323,0.46666669845581);
|
||||
case 154: return Color3(0.48235297203064,0.1803921610117,0.1843137294054);
|
||||
case 157: return Color3(1,0.96470594406128,0.48235297203064);
|
||||
case 158: return Color3(0.88235300779343,0.64313727617264,0.7607843875885);
|
||||
case 168: return Color3(0.4588235616684,0.42352944612503,0.38431376218796);
|
||||
case 176: return Color3(0.59215688705444,0.41176474094391,0.35686275362968);
|
||||
case 178: return Color3(0.70588237047195,0.51764708757401,0.33333334326744);
|
||||
case 179: return Color3(0.53725492954254,0.52941179275513,0.53333336114883);
|
||||
case 180: return Color3(0.84313732385635,0.66274511814117,0.29411765933037);
|
||||
case 190: return Color3(0.9764706492424,0.83921575546265,0.1803921610117);
|
||||
case 191: return Color3(0.90980398654938,0.67058825492859,0.17647059261799);
|
||||
case 192: return Color3(0.41176474094391,0.25098040699959,0.15686275064945);
|
||||
case 193: return Color3(0.8117647767067,0.37647062540054,0.14117647707462);
|
||||
case 195: return Color3(0.27450981736183,0.40392160415649,0.64313727617264);
|
||||
case 196: return Color3(0.13725490868092,0.27843138575554,0.54509806632996);
|
||||
case 198: return Color3(0.55686277151108,0.258823543787,0.52156865596771);
|
||||
case 199: return Color3(0.38823533058167,0.37254902720451,0.38431376218796);
|
||||
case 200: return Color3(0.50980395078659,0.54117649793625,0.3647058904171);
|
||||
case 208: return Color3(0.89803928136826,0.89411771297455,0.87450987100601);
|
||||
case 209: return Color3(0.69019609689713,0.55686277151108,0.26666668057442);
|
||||
case 210: return Color3(0.43921571969986,0.58431375026703,0.47058826684952);
|
||||
case 211: return Color3(0.47450983524323,0.70980393886566,0.70980393886566);
|
||||
case 212: return Color3(0.6235294342041,0.76470595598221,0.91372555494308);
|
||||
case 213: return Color3(0.42352944612503,0.50588238239288,0.71764707565308);
|
||||
case 216: return Color3(0.56078433990479,0.29803922772408,0.16470588743687);
|
||||
case 217: return Color3(0.48627454042435,0.36078432202339,0.27450981736183);
|
||||
case 218: return Color3(0.58823531866074,0.43921571969986,0.6235294342041);
|
||||
case 219: return Color3(0.41960787773132,0.38431376218796,0.60784316062927);
|
||||
case 220: return Color3(0.65490198135376,0.66274511814117,0.80784320831299);
|
||||
case 221: return Color3(0.80392163991928,0.38431376218796,0.59607845544815);
|
||||
case 222: return Color3(0.89411771297455,0.678431391716,0.78431379795074);
|
||||
case 223: return Color3(0.86274516582489,0.56470590829849,0.58431375026703);
|
||||
case 224: return Color3(0.94117653369904,0.83529418706894,0.62745100259781);
|
||||
case 225: return Color3(0.9215686917305,0.72156864404678,0.49803924560547);
|
||||
case 226: return Color3(0.99215692281723,0.91764712333679,0.55294120311737);
|
||||
case 232: return Color3(0.49019610881805,0.73333334922791,0.8666667342186);
|
||||
case 268: return Color3(0.2039215862751,0.16862745583057,0.4588235616684);
|
||||
case 1001: return Color3(0.97254908084869,0.97254908084869,0.97254908084869);
|
||||
case 1002: return Color3(0.80392163991928,0.80392163991928,0.80392163991928);
|
||||
case 1003: return Color3(0.066666670143604,0.066666670143604,0.066666670143604);
|
||||
case 1004: return Color3(1,0,0);
|
||||
case 1005: return Color3(1,0.68627452850342,0);
|
||||
case 1006: return Color3(0.70588237047195,0.50196081399918,1);
|
||||
case 1007: return Color3(0.63921570777893,0.29411765933037,0.29411765933037);
|
||||
case 1008: return Color3(0.75686281919479,0.74509805440903,0.258823543787);
|
||||
case 1009: return Color3(1,1,0);
|
||||
case 1010: return Color3(0,0,1);
|
||||
case 1011: return Color3(0,0.12549020349979,0.37647062540054);
|
||||
case 1012: return Color3(0.1294117718935,0.32941177487373,0.72549021244049);
|
||||
case 1013: return Color3(0.015686275437474,0.68627452850342,0.92549026012421);
|
||||
case 1014: return Color3(0.66666668653488,0.33333334326744,0);
|
||||
case 1015: return Color3(0.66666668653488,0,0.66666668653488);
|
||||
case 1016: return Color3(1,0.40000003576279,0.80000007152557);
|
||||
case 1017: return Color3(1,0.68627452850342,0);
|
||||
case 1018: return Color3(0.070588238537312,0.93333339691162,0.83137261867523);
|
||||
case 1019: return Color3(0,1,1);
|
||||
case 1020: return Color3(0,1,0);
|
||||
case 1021: return Color3(0.22745099663734,0.49019610881805,0.082352943718433);
|
||||
case 1022: return Color3(0.49803924560547,0.55686277151108,0.39215689897537);
|
||||
case 1023: return Color3(0.54901963472366,0.35686275362968,0.6235294342041);
|
||||
case 1024: return Color3(0.68627452850342,0.8666667342186,1);
|
||||
case 1025: return Color3(1,0.78823536634445,0.78823536634445);
|
||||
case 1026: return Color3(0.69411766529083,0.65490198135376,1);
|
||||
case 1027: return Color3(0.6235294342041,0.95294123888016,0.91372555494308);
|
||||
case 1028: return Color3(0.80000007152557,1,0.80000007152557);
|
||||
case 1029: return Color3(1,1,0.80000007152557);
|
||||
case 1030: return Color3(1,0.80000007152557,0.60000002384186);
|
||||
case 1031: return Color3(0.38431376218796,0.14509804546833,0.81960791349411);
|
||||
case 1032: return Color3(1,0,0.74901962280273);
|
||||
default: return Color3::gray();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool DataModelInstance::scanXMLObject(xml_node<> * scanNode)
|
||||
{
|
||||
xml_node<> * watchFirstNode = scanNode->first_node();
|
||||
|
||||
for (xml_node<> *node = scanNode->first_node();node; node = node->next_sibling())
|
||||
{
|
||||
|
||||
if (strncmp(node->name(),"Item",4)==0)
|
||||
{
|
||||
xml_attribute<> *classAttr = node->first_attribute("class");
|
||||
std::string className = classAttr->value();
|
||||
if (className=="Part") {
|
||||
xml_node<> *propNode = node->first_node();
|
||||
xml_node<> *cFrameNode=0;
|
||||
xml_node<> *sizeNode=0;
|
||||
xml_node<> *colorNode=0;
|
||||
xml_node<> *brickColorNode=0;
|
||||
xml_node<> *nameNode=0;
|
||||
|
||||
for (xml_node<> *partPropNode = propNode->first_node();partPropNode; partPropNode = partPropNode->next_sibling())
|
||||
{
|
||||
for (xml_attribute<> *attr = partPropNode->first_attribute();attr; attr = attr->next_attribute())
|
||||
{
|
||||
std::string xmlName = attr->name();
|
||||
std::string xmlValue = attr->value();
|
||||
|
||||
if (xmlValue=="CFrame" | xmlValue=="CoordinateFrame")
|
||||
{
|
||||
cFrameNode = partPropNode;
|
||||
}
|
||||
if (xmlValue=="Name")
|
||||
{
|
||||
nameNode = partPropNode;
|
||||
}
|
||||
if (xmlValue=="Color")
|
||||
{
|
||||
colorNode=partPropNode;
|
||||
}
|
||||
if (xmlValue=="BrickColor")
|
||||
{
|
||||
brickColorNode=partPropNode;
|
||||
}
|
||||
if (xmlValue=="size")
|
||||
{
|
||||
sizeNode = partPropNode;
|
||||
_legacyLoad=false;
|
||||
}
|
||||
if (xmlValue=="Part")
|
||||
{
|
||||
for (xml_node<> *featureNode = partPropNode->first_node();featureNode; featureNode = featureNode->next_sibling())
|
||||
{
|
||||
for (xml_attribute<> *attr = featureNode->first_attribute();attr; attr = attr->next_attribute())
|
||||
{
|
||||
std::string xmlName = attr->name();
|
||||
std::string xmlValue = attr->value();
|
||||
if (xmlValue=="size")
|
||||
{
|
||||
sizeNode=featureNode;
|
||||
_legacyLoad=true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!cFrameNode) {
|
||||
_errMsg="CFrame is missing in Part";
|
||||
return false;
|
||||
}
|
||||
if (!sizeNode) {
|
||||
_errMsg="Size is missing in Part";
|
||||
return false;
|
||||
}
|
||||
|
||||
float R=1;
|
||||
float G=1;
|
||||
float B=1;
|
||||
|
||||
if (colorNode)
|
||||
{
|
||||
R = getFloatValue(colorNode,"R");
|
||||
G = getFloatValue(colorNode,"G");
|
||||
B = getFloatValue(colorNode,"B");
|
||||
}
|
||||
|
||||
|
||||
std::string newName = nameNode->value();
|
||||
float X = getFloatValue(cFrameNode,"X");
|
||||
float Y = getFloatValue(cFrameNode,"Y");
|
||||
float Z = getFloatValue(cFrameNode,"Z");
|
||||
float R00 = getFloatValue(cFrameNode,"R00");
|
||||
float R01 = getFloatValue(cFrameNode,"R01");
|
||||
float R02 = getFloatValue(cFrameNode,"R02");
|
||||
float R10 = getFloatValue(cFrameNode,"R10");
|
||||
float R11 = getFloatValue(cFrameNode,"R11");
|
||||
float R12 = getFloatValue(cFrameNode,"R12");
|
||||
float R20 = getFloatValue(cFrameNode,"R20");
|
||||
float R21 = getFloatValue(cFrameNode,"R21");
|
||||
float R22 = getFloatValue(cFrameNode,"R22");
|
||||
|
||||
float sizeX = getFloatValue(sizeNode,"X");
|
||||
float sizeY = getFloatValue(sizeNode,"Y");
|
||||
float sizeZ = getFloatValue(sizeNode,"Z");
|
||||
//sizeX=1;
|
||||
//sizeY=1;
|
||||
//sizeZ=1;
|
||||
if (_successfulLoad) {
|
||||
PartInstance* test = makePart();
|
||||
test->setParent(getWorkspace());
|
||||
test->color = Color3(R,G,B);
|
||||
if(brickColorNode)
|
||||
{
|
||||
test->color = bcToRGB(atoi(brickColorNode->value()));
|
||||
}
|
||||
test->setSize(Vector3(sizeX,sizeY+_modY,sizeZ));
|
||||
test->setName(newName);
|
||||
CoordinateFrame cf;
|
||||
|
||||
if (_legacyLoad)
|
||||
{
|
||||
|
||||
cf = CoordinateFrame(Vector3(-X,Y,Z))*CoordinateFrame(Vector3(-sizeX/2,(sizeY+_modY)/2,sizeZ/2)*Matrix3(R00,R01,R02,R10,R11,R12,R20,R21,R22));
|
||||
cf.rotation = Matrix3(R00,R01,R02,R10,R11,R12,R20,R21,R22);
|
||||
}
|
||||
else
|
||||
{
|
||||
cf.translation = Vector3(X,Y,Z);
|
||||
cf.rotation = Matrix3(R00,R01,R02,R10,R11,R12,R20,R21,R22);
|
||||
}
|
||||
|
||||
test->setCFrame(cf);
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
/*
|
||||
for (xml_attribute<> *attr = node->first_attribute();attr; attr = attr->next_attribute())
|
||||
{
|
||||
std::string xmlName = attr->name();
|
||||
std::string xmlValue = attr->value();
|
||||
}
|
||||
*/
|
||||
scanXMLObject(node);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool DataModelInstance::load(const char* filename, bool clearObjects)
|
||||
{
|
||||
ifstream levelFile(filename,ios::binary);
|
||||
if (levelFile)
|
||||
{
|
||||
if (clearObjects)
|
||||
clearLevel();
|
||||
readXMLFileStream(&levelFile);
|
||||
std::string sfilename = std::string(filename);
|
||||
std::size_t begin = sfilename.rfind('\\') + 1;
|
||||
std::size_t end = sfilename.find(".rbx");
|
||||
std::string hname = sfilename.substr(begin);
|
||||
std::string tname = hname.substr(0, hname.length() - 5);
|
||||
name = tname;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
bool DataModelInstance::readXMLFileStream(std::ifstream* file)
|
||||
{
|
||||
file->seekg(0,file->end);
|
||||
int length = file->tellg();
|
||||
file->seekg(0,file->beg);
|
||||
char * buffer = new char[length+1];
|
||||
buffer[length]=0;
|
||||
file->read(buffer,length);
|
||||
file->close();
|
||||
xml_document<> doc;
|
||||
doc.parse<0>(buffer);
|
||||
xml_node<> *mainNode = doc.first_node();
|
||||
_legacyLoad=false;
|
||||
//std::string xmlName = mainNode->name();
|
||||
//node = node->first_node();
|
||||
//xmlName = node->name();
|
||||
scanXMLObject(mainNode);
|
||||
delete[] buffer;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool DataModelInstance::debugGetOpen()
|
||||
{
|
||||
ifstream levelFile(_loadedFileName.c_str(),ios::binary);
|
||||
if (levelFile)
|
||||
readXMLFileStream(&levelFile);
|
||||
else
|
||||
getOpen();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool DataModelInstance::getOpen()
|
||||
{
|
||||
_modY=0;
|
||||
OPENFILENAME of;
|
||||
ZeroMemory( &of , sizeof( of));
|
||||
of.lStructSize = sizeof(OPENFILENAME);
|
||||
of.lpstrFilter = "Roblox Files\0*.rbxm;*.rbxl\0\0";
|
||||
char szFile[512];
|
||||
of.lpstrFile = szFile ;
|
||||
of.lpstrFile[0]='\0';
|
||||
of.nMaxFile=500;
|
||||
of.lpstrTitle="Hello";
|
||||
of.Flags = OFN_FILEMUSTEXIST;
|
||||
ShowCursor(TRUE);
|
||||
BOOL file = GetOpenFileName(&of);
|
||||
if (file)
|
||||
{
|
||||
_loadedFileName = of.lpstrFile;
|
||||
load(of.lpstrFile,true);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
void DataModelInstance::setMessage(std::string msg)
|
||||
{
|
||||
message = msg;
|
||||
isBrickCount = false;
|
||||
showMessage = true;
|
||||
}
|
||||
|
||||
void DataModelInstance::clearMessage()
|
||||
{
|
||||
showMessage = false;
|
||||
isBrickCount = false;
|
||||
message = "";
|
||||
}
|
||||
|
||||
void DataModelInstance::setMessageBrickCount()
|
||||
{
|
||||
isBrickCount = true;
|
||||
showMessage = true;
|
||||
}
|
||||
|
||||
void DataModelInstance::drawMessage(RenderDevice* rd)
|
||||
{
|
||||
if(isBrickCount)
|
||||
{
|
||||
int brickCount = 0;
|
||||
int instCount = 0;
|
||||
std::vector<Instance*> inst = getAllChildren();
|
||||
for(size_t i = 0; i < inst.size(); i++)
|
||||
{
|
||||
if(PartInstance* moveTo = dynamic_cast<PartInstance*>(inst.at(i)))
|
||||
{
|
||||
brickCount++;
|
||||
}
|
||||
else
|
||||
{
|
||||
instCount++;
|
||||
}
|
||||
}
|
||||
char brkc[12];
|
||||
sprintf(brkc, "%d", brickCount);
|
||||
char instc[12];
|
||||
sprintf(instc, "%d", instCount);
|
||||
message = "Bricks: ";
|
||||
message += brkc;
|
||||
message += " Snaps: ";
|
||||
message += instc;
|
||||
}
|
||||
if(showMessage && !font.isNull())
|
||||
{
|
||||
int x = rd->getWidth()/2;
|
||||
int y = rd->getHeight()/2;
|
||||
int width = rd->getWidth()/2 + 100;
|
||||
int height = width / 3;
|
||||
Draw::box(Box(Vector3(x-(width/2), y-(height/2), 0), Vector3(x+(width/2), y+(height/2), 0)), rd, Color4::fromARGB(0x55B2B2B2), Color3::fromARGB(0xB2B2B2));
|
||||
font->draw2D(rd, message, Vector2(x,y), height/8, Color3::white(), Color4::clear(), GFont::XALIGN_CENTER, GFont::YALIGN_CENTER);
|
||||
}
|
||||
}
|
||||
|
||||
WorkspaceInstance* DataModelInstance::getWorkspace()
|
||||
{
|
||||
return workspace;
|
||||
}
|
||||
Vector2 DataModelInstance::getMousePos()
|
||||
{
|
||||
return Vector2(mousex,mousey);
|
||||
}
|
||||
void DataModelInstance::setMousePos(int x,int y)
|
||||
{
|
||||
mousex=x;
|
||||
mousey=y;
|
||||
}
|
||||
void DataModelInstance::setMousePos(Vector2 pos)
|
||||
{
|
||||
mousex=pos.x;
|
||||
mousey=pos.y;
|
||||
}
|
||||
Instance* DataModelInstance::getGuiRoot()
|
||||
{
|
||||
return guiRoot;
|
||||
}
|
||||
|
||||
|
||||
LevelInstance* DataModelInstance::getLevel()
|
||||
{
|
||||
return level;
|
||||
}
|
||||
51
DataModelInstance.h
Normal file
51
DataModelInstance.h
Normal file
@@ -0,0 +1,51 @@
|
||||
#pragma once
|
||||
#include "WorkspaceInstance.h"
|
||||
#include "LevelInstance.h"
|
||||
#include "PartInstance.h"
|
||||
#include "rapidxml/rapidxml.hpp"
|
||||
|
||||
class DataModelInstance :
|
||||
public Instance
|
||||
{
|
||||
public:
|
||||
DataModelInstance(void);
|
||||
~DataModelInstance(void);
|
||||
void setMessage(std::string);
|
||||
void setMessageBrickCount();
|
||||
void clearMessage();
|
||||
bool debugGetOpen();
|
||||
bool getOpen();
|
||||
bool load(const char* filename,bool clearObjects);
|
||||
bool readXMLFileStream(std::ifstream* file);
|
||||
void drawMessage(RenderDevice*);
|
||||
WorkspaceInstance* getWorkspace();
|
||||
WorkspaceInstance* workspace;
|
||||
LevelInstance * level;
|
||||
LevelInstance * getLevel();
|
||||
Instance* guiRoot;
|
||||
std::string message;
|
||||
std::string _loadedFileName;
|
||||
bool showMessage;
|
||||
G3D::GFontRef font;
|
||||
Instance* getGuiRoot();
|
||||
float mousex;
|
||||
float mousey;
|
||||
Vector2 getMousePos();
|
||||
void setMousePos(int x,int y);
|
||||
void setMousePos(Vector2 pos);
|
||||
bool mouseButton1Down;
|
||||
PartInstance* makePart();
|
||||
void clearLevel();
|
||||
#if _DEBUG
|
||||
void modXMLLevel(float modY);
|
||||
#endif
|
||||
private:
|
||||
bool isBrickCount;
|
||||
bool scanXMLObject(rapidxml::xml_node<>* node);
|
||||
rapidxml::xml_node<>* getNode(rapidxml::xml_node<> * node,const char* name );
|
||||
float getFloatValue(rapidxml::xml_node<> * node,const char* name);
|
||||
bool _successfulLoad;
|
||||
std::string _errMsg;
|
||||
bool _legacyLoad;
|
||||
float _modY;
|
||||
};
|
||||
60
Demo.h
Normal file
60
Demo.h
Normal file
@@ -0,0 +1,60 @@
|
||||
#pragma once
|
||||
#include <G3DAll.h>
|
||||
#include "CameraController.h"
|
||||
#include "PropertyWindow.h"
|
||||
|
||||
class Demo { // : public GApp {
|
||||
public:
|
||||
Demo(const GAppSettings& settings,HWND parentWindow);
|
||||
void Boop();
|
||||
virtual ~Demo() {}
|
||||
virtual void exitApplication();
|
||||
virtual void onInit();
|
||||
virtual void onLogic();
|
||||
virtual void onNetwork();
|
||||
virtual void onSimulation(RealTime rdt, SimTime sdt, SimTime idt);
|
||||
virtual void onGraphics(RenderDevice* rd);
|
||||
virtual void onUserInput(UserInput* ui);
|
||||
virtual void onCleanup();
|
||||
|
||||
std::vector<Instance*> getSelection();
|
||||
void run();
|
||||
void QuitApp();
|
||||
void resizeWithParent(HWND parentWindow);
|
||||
void onCreate(HWND parentWindow);
|
||||
void onKeyPressed(int key);
|
||||
void onKeyUp(int key);
|
||||
void onMouseLeftPressed(HWND hwnd,int x, int y);
|
||||
void onMouseLeftUp(int x, int y);
|
||||
void onMouseRightPressed(int x, int y);
|
||||
void onMouseRightUp(int x, int y);
|
||||
void onMouseMoved(int x, int y);
|
||||
void onMouseWheel(int x, int y, short delta);
|
||||
|
||||
CameraController cameraController;
|
||||
RenderDevice* renderDevice;
|
||||
UserInput* userInput;
|
||||
PropertyWindow* _propWindow;
|
||||
void generateShadowMap(const CoordinateFrame& lightViewMatrix) const;
|
||||
private:
|
||||
void initGUI();
|
||||
HWND _hWndMain;
|
||||
SkyRef sky;
|
||||
bool quit;
|
||||
bool mouseOnScreen;
|
||||
bool rightButtonHolding;
|
||||
void main();
|
||||
GWindow* _window;
|
||||
HWND _hwndToolbox;
|
||||
HWND _buttonTest;
|
||||
HWND _hwndRenderer;
|
||||
G3D::TextureRef shadowMap;
|
||||
double lightProjX, lightProjY, lightProjNear, lightProjFar;
|
||||
protected:
|
||||
Stopwatch m_graphicsWatch;
|
||||
Stopwatch m_logicWatch;
|
||||
Stopwatch m_networkWatch;
|
||||
Stopwatch m_userInputWatch;
|
||||
Stopwatch m_simulationWatch;
|
||||
Stopwatch m_waitWatch;
|
||||
};
|
||||
BIN
Dialogs.aps
BIN
Dialogs.aps
Binary file not shown.
32
Dialogs.rc
32
Dialogs.rc
@@ -7,7 +7,7 @@
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 2 resource.
|
||||
//
|
||||
#include "afxres.h"
|
||||
#include "windows.h"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#undef APSTUDIO_READONLY_SYMBOLS
|
||||
@@ -34,7 +34,7 @@ END
|
||||
|
||||
2 TEXTINCLUDE
|
||||
BEGIN
|
||||
"#include ""afxres.h""\r\n"
|
||||
"#include ""windows.h""\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
@@ -50,6 +50,34 @@ END
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// English (Canada) resources
|
||||
|
||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENC)
|
||||
#ifdef _WIN32
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_CAN
|
||||
#pragma code_page(1252)
|
||||
#endif //_WIN32
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Icon
|
||||
//
|
||||
|
||||
// Icon with lowest ID value placed first to ensure application icon
|
||||
// remains consistent on all systems.
|
||||
IDI_ICON1 ICON "icon1.ico"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Bitmap
|
||||
//
|
||||
|
||||
IDB_BITMAP1 BITMAP "Parts.bmp"
|
||||
#endif // English (Canada) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
#ifndef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
17
Enum.h
Normal file
17
Enum.h
Normal file
@@ -0,0 +1,17 @@
|
||||
#pragma once
|
||||
|
||||
namespace Enum
|
||||
{
|
||||
namespace SurfaceType
|
||||
{
|
||||
enum Value {
|
||||
Smooth, Bumps, Welds, Glue
|
||||
};
|
||||
}
|
||||
namespace Shape
|
||||
{
|
||||
enum Value {
|
||||
Block, Sphere, Cylinder
|
||||
};
|
||||
}
|
||||
}
|
||||
14
Enums.h
Normal file
14
Enums.h
Normal file
@@ -0,0 +1,14 @@
|
||||
#ifndef ENUM_H
|
||||
#define ENUM_H
|
||||
static enum BinType {GameTool, Grab, Clone, Hammer};
|
||||
static enum ControllerType {None, KeyboardRight, KeyboardLeft, Joypad1, Joypad2, Chase, Flee};
|
||||
//static enum JointType {UNK0, WeldJoint, SnapJoint, UNK3, Rotate, RotateP, RotateV, GlueJoint, UNK8, UNK9, None};
|
||||
static enum ActionType {Nothing, Pause, Lose, Draw, Win};
|
||||
static enum AffectType {NoChange, Increase, Decrease};
|
||||
static enum InputType {NoInput, LeftTread, RightTread, Steer, Throtle, UpDown, Action1, Action2, Action3, Action4, Action5, Constant, Sin};
|
||||
//static enum SurfaceConstraint {None, Hinge, SteppingMotor, Motor};
|
||||
static enum SurfaceType{Smooth, Snaps, Inlets, Glue, Weld, Spawn, Hinge, Motor, Bumps};
|
||||
static enum SoundType {NoSound, Boing, Bomb, Break, Click, Clock, Slingshot, Page, Ping, Snap, Splat, Step, StepOn, Swoosh, Victory};
|
||||
static enum PartType {Ball, Block, Cylinder};
|
||||
static enum KeywordFilterType {Include, Exclude};
|
||||
#endif
|
||||
BIN
G3DTest.aps
Normal file
BIN
G3DTest.aps
Normal file
Binary file not shown.
210
G3DTest.dsp
210
G3DTest.dsp
@@ -1,105 +1,105 @@
|
||||
# Microsoft Developer Studio Project File - Name="G3DTest" - Package Owner=<4>
|
||||
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||
# ** DO NOT EDIT **
|
||||
|
||||
# TARGTYPE "Win32 (x86) Application" 0x0101
|
||||
|
||||
CFG=G3DTest - Win32 Debug
|
||||
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||
!MESSAGE use the Export Makefile command and run
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "G3DTest.mak".
|
||||
!MESSAGE
|
||||
!MESSAGE You can specify a configuration when running NMAKE
|
||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "G3DTest.mak" CFG="G3DTest - Win32 Debug"
|
||||
!MESSAGE
|
||||
!MESSAGE Possible choices for configuration are:
|
||||
!MESSAGE
|
||||
!MESSAGE "G3DTest - Win32 Release" (based on "Win32 (x86) Application")
|
||||
!MESSAGE "G3DTest - Win32 Debug" (based on "Win32 (x86) Application")
|
||||
!MESSAGE
|
||||
|
||||
# Begin Project
|
||||
# PROP AllowPerConfigDependencies 0
|
||||
# PROP Scc_ProjName ""
|
||||
# PROP Scc_LocalPath ""
|
||||
CPP=cl.exe
|
||||
MTL=midl.exe
|
||||
RSC=rc.exe
|
||||
|
||||
!IF "$(CFG)" == "G3DTest - Win32 Release"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
# PROP BASE Output_Dir "Release"
|
||||
# PROP BASE Intermediate_Dir "Release"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "Release"
|
||||
# PROP Intermediate_Dir "Release"
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
|
||||
# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
|
||||
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
||||
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
||||
# ADD BASE RSC /l 0x1009 /d "NDEBUG"
|
||||
# ADD RSC /l 0x1009 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
|
||||
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
|
||||
|
||||
!ELSEIF "$(CFG)" == "G3DTest - Win32 Debug"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 1
|
||||
# PROP BASE Output_Dir "Debug"
|
||||
# PROP BASE Intermediate_Dir "Debug"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 1
|
||||
# PROP Output_Dir "Debug"
|
||||
# PROP Intermediate_Dir "Debug"
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c
|
||||
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c
|
||||
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
||||
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
||||
# ADD BASE RSC /l 0x1009 /d "_DEBUG"
|
||||
# ADD RSC /l 0x1009 /d "_DEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
|
||||
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
|
||||
|
||||
!ENDIF
|
||||
|
||||
# Begin Target
|
||||
|
||||
# Name "G3DTest - Win32 Release"
|
||||
# Name "G3DTest - Win32 Debug"
|
||||
# Begin Group "Source Files"
|
||||
|
||||
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\main.cpp
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "Header Files"
|
||||
|
||||
# PROP Default_Filter "h;hpp;hxx;hm;inl"
|
||||
# End Group
|
||||
# Begin Group "Resource Files"
|
||||
|
||||
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
|
||||
# End Group
|
||||
# End Target
|
||||
# End Project
|
||||
# Microsoft Developer Studio Project File - Name="G3DTest" - Package Owner=<4>
|
||||
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||
# ** DO NOT EDIT **
|
||||
|
||||
# TARGTYPE "Win32 (x86) Application" 0x0101
|
||||
|
||||
CFG=G3DTest - Win32 Debug
|
||||
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||
!MESSAGE use the Export Makefile command and run
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "G3DTest.mak".
|
||||
!MESSAGE
|
||||
!MESSAGE You can specify a configuration when running NMAKE
|
||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "G3DTest.mak" CFG="G3DTest - Win32 Debug"
|
||||
!MESSAGE
|
||||
!MESSAGE Possible choices for configuration are:
|
||||
!MESSAGE
|
||||
!MESSAGE "G3DTest - Win32 Release" (based on "Win32 (x86) Application")
|
||||
!MESSAGE "G3DTest - Win32 Debug" (based on "Win32 (x86) Application")
|
||||
!MESSAGE
|
||||
|
||||
# Begin Project
|
||||
# PROP AllowPerConfigDependencies 0
|
||||
# PROP Scc_ProjName ""
|
||||
# PROP Scc_LocalPath ""
|
||||
CPP=cl.exe
|
||||
MTL=midl.exe
|
||||
RSC=rc.exe
|
||||
|
||||
!IF "$(CFG)" == "G3DTest - Win32 Release"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
# PROP BASE Output_Dir "Release"
|
||||
# PROP BASE Intermediate_Dir "Release"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "Release"
|
||||
# PROP Intermediate_Dir "Release"
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
|
||||
# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
|
||||
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
||||
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
||||
# ADD BASE RSC /l 0x1009 /d "NDEBUG"
|
||||
# ADD RSC /l 0x1009 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
|
||||
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
|
||||
|
||||
!ELSEIF "$(CFG)" == "G3DTest - Win32 Debug"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 1
|
||||
# PROP BASE Output_Dir "Debug"
|
||||
# PROP BASE Intermediate_Dir "Debug"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 1
|
||||
# PROP Output_Dir "Debug"
|
||||
# PROP Intermediate_Dir "Debug"
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c
|
||||
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c
|
||||
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
||||
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
||||
# ADD BASE RSC /l 0x1009 /d "_DEBUG"
|
||||
# ADD RSC /l 0x1009 /d "_DEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
|
||||
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
|
||||
|
||||
!ENDIF
|
||||
|
||||
# Begin Target
|
||||
|
||||
# Name "G3DTest - Win32 Release"
|
||||
# Name "G3DTest - Win32 Debug"
|
||||
# Begin Group "Source Files"
|
||||
|
||||
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\main.cpp
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "Header Files"
|
||||
|
||||
# PROP Default_Filter "h;hpp;hxx;hm;inl"
|
||||
# End Group
|
||||
# Begin Group "Resource Files"
|
||||
|
||||
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
|
||||
# End Group
|
||||
# End Target
|
||||
# End Project
|
||||
|
||||
58
G3DTest.dsw
58
G3DTest.dsw
@@ -1,29 +1,29 @@
|
||||
Microsoft Developer Studio Workspace File, Format Version 6.00
|
||||
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "G3DTest"=.\G3DTest.dsp - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Global:
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<3>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Microsoft Developer Studio Workspace File, Format Version 6.00
|
||||
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "G3DTest"=.\G3DTest.dsp - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Global:
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<3>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
|
||||
64
G3DTest.plg
64
G3DTest.plg
@@ -1,32 +1,32 @@
|
||||
<html>
|
||||
<body>
|
||||
<pre>
|
||||
<h1>Build Log</h1>
|
||||
<h3>
|
||||
--------------------Configuration: G3DTest - Win32 Debug--------------------
|
||||
</h3>
|
||||
<h3>Command Lines</h3>
|
||||
Creating temporary file "C:\Users\Andreja\AppData\Local\Temp\RSPFD70.tmp" with contents
|
||||
[
|
||||
/nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /Fp"Debug/G3DTest.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
|
||||
"C:\USERS\ANDREJA\G3D\G3DTest\main.cpp"
|
||||
]
|
||||
Creating command line "cl.exe @C:\Users\Andreja\AppData\Local\Temp\RSPFD70.tmp"
|
||||
Creating temporary file "C:\Users\Andreja\AppData\Local\Temp\RSPFD71.tmp" with contents
|
||||
[
|
||||
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /incremental:yes /pdb:"Debug/G3DTest.pdb" /debug /machine:I386 /out:"Debug/G3DTest.exe" /pdbtype:sept
|
||||
.\Debug\main.obj
|
||||
]
|
||||
Creating command line "link.exe @C:\Users\Andreja\AppData\Local\Temp\RSPFD71.tmp"
|
||||
<h3>Output Window</h3>
|
||||
Compiling...
|
||||
main.cpp
|
||||
Linking...
|
||||
|
||||
|
||||
|
||||
<h3>Results</h3>
|
||||
G3DTest.exe - 0 error(s), 0 warning(s)
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
||||
<html>
|
||||
<body>
|
||||
<pre>
|
||||
<h1>Build Log</h1>
|
||||
<h3>
|
||||
--------------------Configuration: G3DTest - Win32 Debug--------------------
|
||||
</h3>
|
||||
<h3>Command Lines</h3>
|
||||
Creating temporary file "C:\Users\Andreja\AppData\Local\Temp\RSPFD70.tmp" with contents
|
||||
[
|
||||
/nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /Fp"Debug/G3DTest.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
|
||||
"C:\USERS\ANDREJA\G3D\G3DTest\main.cpp"
|
||||
]
|
||||
Creating command line "cl.exe @C:\Users\Andreja\AppData\Local\Temp\RSPFD70.tmp"
|
||||
Creating temporary file "C:\Users\Andreja\AppData\Local\Temp\RSPFD71.tmp" with contents
|
||||
[
|
||||
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /incremental:yes /pdb:"Debug/G3DTest.pdb" /debug /machine:I386 /out:"Debug/G3DTest.exe" /pdbtype:sept
|
||||
.\Debug\main.obj
|
||||
]
|
||||
Creating command line "link.exe @C:\Users\Andreja\AppData\Local\Temp\RSPFD71.tmp"
|
||||
<h3>Output Window</h3>
|
||||
Compiling...
|
||||
main.cpp
|
||||
Linking...
|
||||
|
||||
|
||||
|
||||
<h3>Results</h3>
|
||||
G3DTest.exe - 0 error(s), 0 warning(s)
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
40
G3DTest.sln
40
G3DTest.sln
@@ -1,20 +1,20 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 9.00
|
||||
# Visual Studio 2005
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "G3DTest", "G3DTest.vcproj", "{6C4D6EEF-B1D1-456A-B850-92CAB17124BE}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
Release|Win32 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{6C4D6EEF-B1D1-456A-B850-92CAB17124BE}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{6C4D6EEF-B1D1-456A-B850-92CAB17124BE}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{6C4D6EEF-B1D1-456A-B850-92CAB17124BE}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{6C4D6EEF-B1D1-456A-B850-92CAB17124BE}.Release|Win32.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 9.00
|
||||
# Visual Studio 2005
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "G3DTest", "G3DTest.vcproj", "{6C4D6EEF-B1D1-456A-B850-92CAB17124BE}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
Release|Win32 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{6C4D6EEF-B1D1-456A-B850-92CAB17124BE}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{6C4D6EEF-B1D1-456A-B850-92CAB17124BE}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{6C4D6EEF-B1D1-456A-B850-92CAB17124BE}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{6C4D6EEF-B1D1-456A-B850-92CAB17124BE}.Release|Win32.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
||||
BIN
G3DTest.suo
BIN
G3DTest.suo
Binary file not shown.
790
G3DTest.vcproj
790
G3DTest.vcproj
@@ -1,291 +1,499 @@
|
||||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="8.00"
|
||||
Name="G3DTest"
|
||||
ProjectGUID="{6C4D6EEF-B1D1-456A-B850-92CAB17124BE}"
|
||||
RootNamespace="G3DTest"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory=".\Release"
|
||||
IntermediateDirectory=".\Release"
|
||||
ConfigurationType="1"
|
||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
|
||||
UseOfMFC="0"
|
||||
ATLMinimizesCRunTimeLibraryUsage="false"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
PreprocessorDefinitions="NDEBUG"
|
||||
MkTypLibCompatible="true"
|
||||
SuppressStartupBanner="true"
|
||||
TargetEnvironment="1"
|
||||
TypeLibraryName=".\Release/G3DTest.tlb"
|
||||
HeaderFileName=""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
InlineFunctionExpansion="1"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
|
||||
StringPooling="true"
|
||||
RuntimeLibrary="0"
|
||||
EnableFunctionLevelLinking="true"
|
||||
PrecompiledHeaderFile=".\Release/G3DTest.pch"
|
||||
AssemblerListingLocation=".\Release/"
|
||||
ObjectFile=".\Release/"
|
||||
ProgramDataBaseFileName=".\Release/"
|
||||
WarningLevel="3"
|
||||
SuppressStartupBanner="true"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="NDEBUG"
|
||||
Culture="4105"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile=".\Release/G3DTest.exe"
|
||||
LinkIncremental="1"
|
||||
SuppressStartupBanner="true"
|
||||
ProgramDatabaseFile=".\Release/G3DTest.pdb"
|
||||
SubSystem="2"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
SuppressStartupBanner="true"
|
||||
OutputFile=".\Release/G3DTest.bsc"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory=".\Debug"
|
||||
IntermediateDirectory=".\Debug"
|
||||
ConfigurationType="1"
|
||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
|
||||
UseOfMFC="0"
|
||||
ATLMinimizesCRunTimeLibraryUsage="false"
|
||||
CharacterSet="2"
|
||||
ManagedExtensions="0"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
PreprocessorDefinitions="_DEBUG"
|
||||
MkTypLibCompatible="true"
|
||||
SuppressStartupBanner="true"
|
||||
TargetEnvironment="1"
|
||||
TypeLibraryName=".\Debug/G3DTest.tlb"
|
||||
HeaderFileName=""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
|
||||
MinimalRebuild="false"
|
||||
BasicRuntimeChecks="0"
|
||||
RuntimeLibrary="2"
|
||||
PrecompiledHeaderFile=".\Debug/G3DTest.pch"
|
||||
AssemblerListingLocation=".\Debug/"
|
||||
ObjectFile=".\Debug/"
|
||||
ProgramDataBaseFileName=".\Debug/"
|
||||
WarningLevel="3"
|
||||
SuppressStartupBanner="true"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="_DEBUG"
|
||||
Culture="4105"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile=".\Debug/G3DTest.exe"
|
||||
LinkIncremental="2"
|
||||
SuppressStartupBanner="true"
|
||||
GenerateDebugInformation="true"
|
||||
ProgramDatabaseFile=".\Debug/G3DTest.pdb"
|
||||
SubSystem="2"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
SuppressStartupBanner="true"
|
||||
OutputFile=".\Debug/G3DTest.bsc"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
<AssemblyReference
|
||||
RelativePath="System.dll"
|
||||
AssemblyName="System, Version=2.0.0.0, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"
|
||||
/>
|
||||
<AssemblyReference
|
||||
RelativePath="System.Data.dll"
|
||||
AssemblyName="System.Data, Version=2.0.0.0, PublicKeyToken=b77a5c561934e089, processorArchitecture=x86"
|
||||
/>
|
||||
<AssemblyReference
|
||||
RelativePath="System.Drawing.dll"
|
||||
AssemblyName="System.Drawing, Version=2.0.0.0, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
|
||||
/>
|
||||
<AssemblyReference
|
||||
RelativePath="System.Windows.Forms.dll"
|
||||
AssemblyName="System.Windows.Forms, Version=2.0.0.0, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"
|
||||
/>
|
||||
<AssemblyReference
|
||||
RelativePath="System.XML.dll"
|
||||
AssemblyName="System.Xml, Version=2.0.0.0, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"
|
||||
/>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\Dialogs.rc"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\Instance.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="main.cpp"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
PreprocessorDefinitions=""
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
PreprocessorDefinitions=""
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\PhysicalInstance.cpp"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
Filter="h;hpp;hxx;hm;inl"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\Instance.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\PhysicalInstance.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\resource.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Resource Files"
|
||||
Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
|
||||
>
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
||||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="8.00"
|
||||
Name="G3DTest"
|
||||
ProjectGUID="{277D185B-AEBA-4F75-A7FC-F1EBE787C200}"
|
||||
RootNamespace="G3DTest"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory=".\Release"
|
||||
IntermediateDirectory=".\Release"
|
||||
ConfigurationType="1"
|
||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
|
||||
UseOfMFC="0"
|
||||
UseOfATL="0"
|
||||
ATLMinimizesCRunTimeLibraryUsage="false"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
PreprocessorDefinitions="NDEBUG"
|
||||
MkTypLibCompatible="true"
|
||||
SuppressStartupBanner="true"
|
||||
TargetEnvironment="1"
|
||||
TypeLibraryName=".\Release/G3DTest.tlb"
|
||||
HeaderFileName=""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
InlineFunctionExpansion="1"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
|
||||
StringPooling="true"
|
||||
RuntimeLibrary="2"
|
||||
EnableFunctionLevelLinking="true"
|
||||
PrecompiledHeaderFile=".\Release/G3DTest.pch"
|
||||
AssemblerListingLocation=".\Release/"
|
||||
ObjectFile=".\Release/"
|
||||
ProgramDataBaseFileName=".\Release/"
|
||||
WarningLevel="3"
|
||||
SuppressStartupBanner="true"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="NDEBUG"
|
||||
Culture="4105"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="Advapi32.lib UxTheme.lib Comctl32.lib Comdlg32.lib Shell32.lib"
|
||||
OutputFile="./G3DTest.exe"
|
||||
LinkIncremental="1"
|
||||
SuppressStartupBanner="true"
|
||||
ProgramDatabaseFile=".\Release/G3DTest.pdb"
|
||||
SubSystem="2"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
SuppressStartupBanner="true"
|
||||
OutputFile=".\Release/G3DTest.bsc"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory=".\Debug"
|
||||
IntermediateDirectory=".\Debug"
|
||||
ConfigurationType="1"
|
||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
|
||||
UseOfMFC="0"
|
||||
ATLMinimizesCRunTimeLibraryUsage="false"
|
||||
CharacterSet="2"
|
||||
ManagedExtensions="0"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
PreprocessorDefinitions="_DEBUG"
|
||||
MkTypLibCompatible="true"
|
||||
SuppressStartupBanner="true"
|
||||
TargetEnvironment="1"
|
||||
TypeLibraryName=".\Debug/G3DTest.tlb"
|
||||
HeaderFileName=""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
|
||||
MinimalRebuild="false"
|
||||
BasicRuntimeChecks="0"
|
||||
RuntimeLibrary="3"
|
||||
EnableFunctionLevelLinking="false"
|
||||
PrecompiledHeaderFile=".\Debug/G3DTest.pch"
|
||||
AssemblerListingLocation=".\Debug/"
|
||||
ObjectFile=".\Debug/"
|
||||
ProgramDataBaseFileName=".\Debug/"
|
||||
WarningLevel="3"
|
||||
SuppressStartupBanner="true"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="_DEBUG"
|
||||
Culture="4105"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="Advapi32.lib UxTheme.lib Comctl32.lib Comdlg32.lib Shell32.lib"
|
||||
OutputFile="./G3DTest-Debug.exe"
|
||||
LinkIncremental="2"
|
||||
SuppressStartupBanner="true"
|
||||
GenerateDebugInformation="true"
|
||||
ProgramDatabaseFile=".\Debug/G3DTest.pdb"
|
||||
SubSystem="1"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
SuppressStartupBanner="true"
|
||||
OutputFile=".\Debug/G3DTest.bsc"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
<AssemblyReference
|
||||
RelativePath="System.dll"
|
||||
AssemblyName="System, Version=2.0.0.0, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"
|
||||
/>
|
||||
<AssemblyReference
|
||||
RelativePath="System.Data.dll"
|
||||
AssemblyName="System.Data, Version=2.0.0.0, PublicKeyToken=b77a5c561934e089, processorArchitecture=x86"
|
||||
/>
|
||||
<AssemblyReference
|
||||
RelativePath="System.Drawing.dll"
|
||||
AssemblyName="System.Drawing, Version=2.0.0.0, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
|
||||
/>
|
||||
<AssemblyReference
|
||||
RelativePath="System.Windows.Forms.dll"
|
||||
AssemblyName="System.Windows.Forms, Version=2.0.0.0, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"
|
||||
/>
|
||||
<AssemblyReference
|
||||
RelativePath="System.XML.dll"
|
||||
AssemblyName="System.Xml, Version=2.0.0.0, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"
|
||||
/>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\AudioPlayer.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\ax.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\BrowserCallHandler.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\ButtonListener.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\CameraController.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\Globals.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\GroupInstance.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\IEBrowser.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\IEBrowser.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\IEDispatcher.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\LevelInstance.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="main.cpp"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
PreprocessorDefinitions=""
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
PreprocessorDefinitions=""
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\PartInstance.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\propertyGrid.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\PropertyWindow.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\PVInstance.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\WindowFunctions.cpp"
|
||||
>
|
||||
</File>
|
||||
<Filter
|
||||
Name="Instance"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\BaseButtonInstance.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\DataModelInstance.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\ImageButtonInstance.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\Instance.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\TextButtonInstance.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\WorkspaceInstance.cpp"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
Filter="h;hpp;hxx;hm;inl"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\AudioPlayer.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\ax.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\BrowserCallHandler.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\ButtonListener.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\CameraController.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\Demo.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\Enum.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\Enums.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\Globals.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\GroupInstance.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\IEDispatcher.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\LevelInstance.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\PartInstance.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\propertyGrid.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\PropertyWindow.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\PVInstance.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\rapidxml\rapidxml.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\rapidxml\rapidxml_iterators.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\rapidxml\rapidxml_print.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\rapidxml\rapidxml_utils.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\resource.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\win32Defines.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\WindowFunctions.h"
|
||||
>
|
||||
</File>
|
||||
<Filter
|
||||
Name="Instance"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\BaseButtonInstance.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\DataModelInstance.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\ImageButtonInstance.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\Instance.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\TextButtonInstance.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\WorkspaceInstance.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Resource Files"
|
||||
Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\Dialogs.rc"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\icon1.ico"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\Parts.bmp"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
<Global
|
||||
Name="RESOURCE_FILE"
|
||||
Value="Dialogs.rc"
|
||||
/>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
||||
|
||||
19
Globals.cpp
Normal file
19
Globals.cpp
Normal file
@@ -0,0 +1,19 @@
|
||||
#include "Globals.h"
|
||||
|
||||
DataModelInstance* Globals::dataModel = NULL;
|
||||
int const Globals::gen = 0;
|
||||
int const Globals::major = 0;
|
||||
int const Globals::minor = 4;
|
||||
int const Globals::patch = 2;
|
||||
int Globals::surfaceId = 2;
|
||||
bool Globals::showMouse = true;
|
||||
bool Globals::useMousePoint = false;
|
||||
std::vector<Instance*> postRenderStack = std::vector<Instance*>();
|
||||
const std::string Globals::PlaceholderName = "Dynamica";
|
||||
std::vector<Instance*> g_selectedInstances = std::vector<Instance*>();
|
||||
bool running = false;
|
||||
G3D::TextureRef Globals::surface;
|
||||
POINT Globals::mousepoint;
|
||||
Globals::Globals(void){}
|
||||
|
||||
Globals::~Globals(void){}
|
||||
25
Globals.h
Normal file
25
Globals.h
Normal file
@@ -0,0 +1,25 @@
|
||||
#pragma once
|
||||
#include "DataModelInstance.h"
|
||||
#include <G3DAll.h>
|
||||
|
||||
class Globals
|
||||
{
|
||||
public:
|
||||
Globals(void);
|
||||
~Globals(void);
|
||||
static DataModelInstance* dataModel;
|
||||
static bool showMouse;
|
||||
static POINT mousepoint;
|
||||
static bool useMousePoint;
|
||||
static const int gen;
|
||||
static const int major;
|
||||
static const int minor;
|
||||
static const int patch;
|
||||
static G3D::TextureRef surface;
|
||||
static int surfaceId;
|
||||
static const std::string PlaceholderName;
|
||||
};
|
||||
|
||||
extern std::vector<Instance*> postRenderStack;
|
||||
extern std::vector<Instance*> g_selectedInstances;
|
||||
extern bool running;
|
||||
26
GroupInstance.cpp
Normal file
26
GroupInstance.cpp
Normal file
@@ -0,0 +1,26 @@
|
||||
#include "GroupInstance.h"
|
||||
|
||||
GroupInstance::GroupInstance(void)
|
||||
{
|
||||
PVInstance::PVInstance();
|
||||
className = "GroupInstance";
|
||||
}
|
||||
|
||||
GroupInstance::GroupInstance(const GroupInstance &oinst)
|
||||
{
|
||||
PVInstance::PVInstance(oinst);
|
||||
}
|
||||
|
||||
GroupInstance::~GroupInstance(void)
|
||||
{
|
||||
}
|
||||
|
||||
std::vector<PROPGRIDITEM> GroupInstance::getProperties()
|
||||
{
|
||||
std::vector<PROPGRIDITEM> properties = PVInstance::getProperties();
|
||||
return properties;
|
||||
}
|
||||
void GroupInstance::PropUpdate(LPPROPGRIDITEM &pItem)
|
||||
{
|
||||
PVInstance::PropUpdate(pItem);
|
||||
}
|
||||
13
GroupInstance.h
Normal file
13
GroupInstance.h
Normal file
@@ -0,0 +1,13 @@
|
||||
#pragma once
|
||||
#include "PVInstance.h"
|
||||
|
||||
class GroupInstance :
|
||||
public PVInstance
|
||||
{
|
||||
public:
|
||||
GroupInstance(void);
|
||||
~GroupInstance(void);
|
||||
GroupInstance(const GroupInstance &oinst);
|
||||
virtual std::vector<PROPGRIDITEM> getProperties();
|
||||
virtual void PropUpdate(LPPROPGRIDITEM &pItem);
|
||||
};
|
||||
68
IEBrowser.cpp
Normal file
68
IEBrowser.cpp
Normal file
@@ -0,0 +1,68 @@
|
||||
#ifndef WIN32_LEAN_AND_MEAN
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#endif
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
#include "IEBrowser.h"
|
||||
#include "Globals.h"
|
||||
#include "ax.h"
|
||||
|
||||
void IEBrowser::Boop(char* test)
|
||||
{
|
||||
}
|
||||
|
||||
IEBrowser::IEBrowser(HWND attachHWnd) {
|
||||
MSG messages;
|
||||
while (PeekMessage (&messages, NULL, 0, 0,PM_REMOVE))
|
||||
{
|
||||
if (IsDialogMessage(hwnd, &messages) == 0)
|
||||
{
|
||||
TranslateMessage(&messages);
|
||||
DispatchMessage(&messages);
|
||||
}
|
||||
}
|
||||
hwnd = attachHWnd;
|
||||
spDocument = 0;
|
||||
webBrowser = 0;
|
||||
SendMessage(hwnd,AX_INPLACE,1,0);
|
||||
SendMessage(hwnd,AX_QUERYINTERFACE,(WPARAM)&IID_IWebBrowser2,(LPARAM)&webBrowser);
|
||||
}
|
||||
|
||||
IEBrowser::~IEBrowser(void) {
|
||||
if (webBrowser)
|
||||
{
|
||||
webBrowser->Release();
|
||||
}
|
||||
}
|
||||
|
||||
bool IEBrowser::navigateSyncURL(wchar_t* url)
|
||||
{
|
||||
MSG messages;
|
||||
if (webBrowser)
|
||||
{
|
||||
webBrowser->Navigate(url,0,0,0,0);
|
||||
for (int i=1;i<1000;i++)
|
||||
{
|
||||
while (PeekMessage (&messages, NULL, 0, 0,PM_REMOVE))
|
||||
{
|
||||
if (IsDialogMessage(hwnd, &messages) == 0)
|
||||
{
|
||||
TranslateMessage(&messages);
|
||||
DispatchMessage(&messages);
|
||||
}
|
||||
}
|
||||
Sleep(30);
|
||||
HRESULT hresult = webBrowser->get_Document(&spDocument);
|
||||
if (&spDocument!=0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox(NULL,"Cannot read IWebBrowser2...",(Globals::PlaceholderName+" Crash").c_str(),MB_OK);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
17
IEBrowser.h
Normal file
17
IEBrowser.h
Normal file
@@ -0,0 +1,17 @@
|
||||
//#include "WindowFunctions.h"
|
||||
#pragma once
|
||||
#include <mshtml.h>
|
||||
#include <exdisp.h>
|
||||
//#include <Mshtmhst.h>
|
||||
|
||||
class IEBrowser {
|
||||
public:
|
||||
IEBrowser(HWND attachHWnd);
|
||||
~IEBrowser(void);
|
||||
bool navigateSyncURL(wchar_t* url);
|
||||
void Boop(char* test);
|
||||
private:
|
||||
IWebBrowser2* webBrowser;
|
||||
HWND hwnd;
|
||||
IDispatch* spDocument;
|
||||
};
|
||||
40
IEDispatcher.cpp
Normal file
40
IEDispatcher.cpp
Normal file
@@ -0,0 +1,40 @@
|
||||
#include "IEDispatcher.h"
|
||||
|
||||
IEDispatcher::IEDispatcher(void)
|
||||
{
|
||||
}
|
||||
|
||||
IEDispatcher::~IEDispatcher(void)
|
||||
{
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE IEDispatcher::QueryInterface(const IID &riid, void **ppvObject)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
ULONG STDMETHODCALLTYPE IEDispatcher::AddRef()
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
ULONG STDMETHODCALLTYPE IEDispatcher::Release()
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
HRESULT STDMETHODCALLTYPE IEDispatcher::GetTypeInfoCount(UINT *pctinfo)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
HRESULT STDMETHODCALLTYPE IEDispatcher::GetTypeInfo(UINT, LCID, ITypeInfo **)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
HRESULT STDMETHODCALLTYPE IEDispatcher::GetIDsOfNames(const IID &, LPOLESTR *, UINT, LCID, DISPID *)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
HRESULT STDMETHODCALLTYPE IEDispatcher::Invoke(DISPID, const IID &, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT *)
|
||||
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
17
IEDispatcher.h
Normal file
17
IEDispatcher.h
Normal file
@@ -0,0 +1,17 @@
|
||||
#pragma once
|
||||
#include "oaidl.h"
|
||||
|
||||
class IEDispatcher : public IDispatch
|
||||
{
|
||||
public:
|
||||
IEDispatcher(void);
|
||||
~IEDispatcher(void);
|
||||
HRESULT STDMETHODCALLTYPE IEDispatcher::QueryInterface(const IID &riid, void **ppvObject);
|
||||
ULONG STDMETHODCALLTYPE IEDispatcher::AddRef();
|
||||
ULONG STDMETHODCALLTYPE IEDispatcher::Release();
|
||||
HRESULT STDMETHODCALLTYPE IEDispatcher::GetTypeInfoCount(UINT *pctinfo);
|
||||
HRESULT STDMETHODCALLTYPE IEDispatcher::GetTypeInfo(UINT, LCID, ITypeInfo **);
|
||||
HRESULT STDMETHODCALLTYPE IEDispatcher::GetIDsOfNames(const IID &, LPOLESTR *, UINT, LCID, DISPID *);
|
||||
HRESULT STDMETHODCALLTYPE IEDispatcher::Invoke(DISPID, const IID &, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT *);
|
||||
|
||||
};
|
||||
133
ImageButtonInstance.cpp
Normal file
133
ImageButtonInstance.cpp
Normal file
@@ -0,0 +1,133 @@
|
||||
#include "ImageButtonInstance.h"
|
||||
|
||||
ImageButtonInstance::ImageButtonInstance(G3D::TextureRef newImage, G3D::TextureRef overImage = NULL, G3D::TextureRef downImage = NULL, G3D::TextureRef disableImage = NULL)
|
||||
{
|
||||
BaseButtonInstance::BaseButtonInstance();
|
||||
image = newImage;
|
||||
openGLID = image->getOpenGLID();
|
||||
image_ovr = overImage;
|
||||
if(!image_ovr.isNull())
|
||||
openGLID_ovr = image_ovr->getOpenGLID();
|
||||
image_dn = downImage;
|
||||
if(!image_dn.isNull())
|
||||
openGLID_dn = image_dn->getOpenGLID();
|
||||
image_ds = disableImage;
|
||||
if(!image_ds.isNull())
|
||||
openGLID_ds = image_ds->getOpenGLID();
|
||||
Vector2 size = Vector2(0,0);
|
||||
Vector2 position = Vector2(0,0);
|
||||
floatCenter = false;
|
||||
floatBottom = false;
|
||||
floatRight = false;
|
||||
disabled = false;
|
||||
className = "ImageButton";
|
||||
}
|
||||
|
||||
ImageButtonInstance::~ImageButtonInstance(void)
|
||||
{
|
||||
//Delete everything on destruction
|
||||
image.~ReferenceCountedPointer();
|
||||
delete image.getPointer();
|
||||
image_ovr.~ReferenceCountedPointer();
|
||||
delete image_ovr.getPointer();
|
||||
image_ds.~ReferenceCountedPointer();
|
||||
delete image_ds.getPointer();
|
||||
image_dn.~ReferenceCountedPointer();
|
||||
delete image_dn.getPointer();
|
||||
image = NULL;
|
||||
image_ovr = NULL;
|
||||
image_ds = NULL;
|
||||
image_dn = NULL;
|
||||
delete listener;
|
||||
listener = NULL;
|
||||
selected = false;
|
||||
}
|
||||
|
||||
bool ImageButtonInstance::mouseInButton(float mousex, float mousey, RenderDevice* rd)
|
||||
{
|
||||
Vector2 positionRelative = position;
|
||||
if(floatRight && floatBottom)
|
||||
{
|
||||
positionRelative = Vector2(rd->getWidth() + position.x, rd->getHeight() + position.y);
|
||||
}
|
||||
else if(floatBottom)
|
||||
{
|
||||
positionRelative = Vector2(position.x, rd->getHeight() + position.y);
|
||||
}
|
||||
else if(floatRight)
|
||||
{
|
||||
positionRelative = Vector2(rd->getWidth() + position.x, position.y);
|
||||
}
|
||||
if(mousex >= positionRelative.x && mousey >= positionRelative.y)
|
||||
{
|
||||
if(mousex < positionRelative.x + size.x && mousey < positionRelative.y + size.y)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void ImageButtonInstance::drawObj(RenderDevice* rd, Vector2 mousePos, bool mouseDown)
|
||||
{
|
||||
bool drawDisabledBox = false;
|
||||
Vector2 positionRelative = position;
|
||||
if(floatRight && floatBottom)
|
||||
{
|
||||
positionRelative = Vector2(rd->getWidth() + position.x, rd->getHeight() + position.y);
|
||||
}
|
||||
else if(floatBottom)
|
||||
{
|
||||
positionRelative = Vector2(position.x, rd->getHeight() + position.y);
|
||||
}
|
||||
else if(floatRight)
|
||||
{
|
||||
positionRelative = Vector2(rd->getWidth() + position.x, position.y);
|
||||
}
|
||||
int renderimage = openGLID;
|
||||
if(selected == true && !image_dn.isNull() && !disabled)
|
||||
{
|
||||
renderimage = openGLID_dn;
|
||||
}
|
||||
else if(disabled)
|
||||
{
|
||||
if(!image_ds.isNull())
|
||||
renderimage = openGLID_ds;
|
||||
else
|
||||
drawDisabledBox = true;
|
||||
}
|
||||
else if(mouseInArea(positionRelative.x, positionRelative.y, positionRelative.x + size.x, positionRelative.y + size.y, mousePos.x, mousePos.y))
|
||||
{
|
||||
if(mouseDown && !image_dn.isNull())
|
||||
{
|
||||
renderimage = openGLID_dn;
|
||||
}
|
||||
else if(!image_ovr.isNull())
|
||||
{
|
||||
renderimage = openGLID_ovr;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
glEnable( GL_TEXTURE_2D );
|
||||
glEnable(GL_BLEND);// you enable blending function
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
glBindTexture( GL_TEXTURE_2D, renderimage);
|
||||
glBegin( GL_QUADS );
|
||||
glTexCoord2d(0.0,0.0);
|
||||
glVertex2f( positionRelative.x, positionRelative.y );
|
||||
glTexCoord2d( 1.0,0.0 );
|
||||
glVertex2f( positionRelative.x + size.x, positionRelative.y );
|
||||
glTexCoord2d( 1.0,1.0 );
|
||||
glVertex2f( positionRelative.x + size.x, positionRelative.y + size.y );
|
||||
glTexCoord2d( 0.0,1.0 );
|
||||
glVertex2f( positionRelative.x, positionRelative.y + size.y );
|
||||
glEnd();
|
||||
glDisable( GL_TEXTURE_2D );
|
||||
|
||||
if(drawDisabledBox)
|
||||
{
|
||||
Draw::box(Box(Vector3(positionRelative.x, positionRelative.y, 0), Vector3(positionRelative.x+size.x, positionRelative.y+size.y, 0)), rd, Color4(0.7F,0.7F,0.7F,0.3F), Color4::clear());
|
||||
}
|
||||
}
|
||||
24
ImageButtonInstance.h
Normal file
24
ImageButtonInstance.h
Normal file
@@ -0,0 +1,24 @@
|
||||
#pragma once
|
||||
#include "BaseButtonInstance.h"
|
||||
class ImageButtonInstance : public BaseButtonInstance
|
||||
{
|
||||
public:
|
||||
//ImageButtonInstance(G3D::TextureRef);
|
||||
//ImageButtonInstance(G3D::TextureRef,G3D::TextureRef);
|
||||
//ImageButtonInstance(G3D::TextureRef,G3D::TextureRef,G3D::TextureRef);
|
||||
ImageButtonInstance(G3D::TextureRef,G3D::TextureRef,G3D::TextureRef,G3D::TextureRef);
|
||||
~ImageButtonInstance(void);
|
||||
void drawObj(RenderDevice*, Vector2, bool);
|
||||
Vector2 size;
|
||||
Vector2 position;
|
||||
|
||||
G3D::TextureRef image;
|
||||
int openGLID;
|
||||
G3D::TextureRef image_ovr;
|
||||
int openGLID_ovr;
|
||||
G3D::TextureRef image_dn;
|
||||
int openGLID_dn;
|
||||
G3D::TextureRef image_ds;
|
||||
int openGLID_ds;
|
||||
bool mouseInButton(float, float, RenderDevice*);
|
||||
};
|
||||
161
Instance.cpp
161
Instance.cpp
@@ -1,21 +1,170 @@
|
||||
#define WINVER 0x0400
|
||||
#include <G3DAll.h>
|
||||
#include "Instance.h"
|
||||
|
||||
std::string name;
|
||||
Instance* parent;
|
||||
static std::string className = "Instance";
|
||||
|
||||
Instance::Instance(void)
|
||||
{
|
||||
parent = NULL;
|
||||
name = "Default Game Instance";
|
||||
className = "Part";
|
||||
className = "BaseInstance";
|
||||
listicon = 0;
|
||||
canDelete = true;
|
||||
}
|
||||
|
||||
Instance::Instance(const Instance &oinst)
|
||||
{
|
||||
|
||||
name = oinst.name;
|
||||
className = oinst.className;
|
||||
canDelete = oinst.canDelete;
|
||||
//setParent(oinst.parent);
|
||||
}
|
||||
|
||||
|
||||
|
||||
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++)
|
||||
{
|
||||
children.at(i)->render(rd);
|
||||
}
|
||||
glDisableClientState(GL_VERTEX_ARRAY);
|
||||
glDisableClientState(GL_COLOR_ARRAY);
|
||||
glDisableClientState(GL_NORMAL_ARRAY);
|
||||
}
|
||||
|
||||
|
||||
|
||||
PROPGRIDITEM Instance::createPGI(LPSTR catalog, LPSTR propName, LPSTR propDesc, LPARAM curVal, INT type)
|
||||
{
|
||||
PROPGRIDITEM pItem;
|
||||
PropGrid_ItemInit(pItem);
|
||||
pItem.lpszCatalog=catalog;
|
||||
pItem.lpszPropName=propName;
|
||||
pItem.lpszPropDesc=propDesc;
|
||||
pItem.lpCurValue=curVal;
|
||||
pItem.iItemType=type;
|
||||
return pItem;
|
||||
}
|
||||
|
||||
void Instance::PropUpdate(LPPROPGRIDITEM &item)
|
||||
{
|
||||
if(strcmp(item->lpszPropName, "Name") == 0)
|
||||
{
|
||||
name = (LPSTR)item->lpCurValue;
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<PROPGRIDITEM> Instance::getProperties()
|
||||
{
|
||||
std::vector<PROPGRIDITEM> properties;
|
||||
|
||||
|
||||
properties.push_back(createPGI(
|
||||
"Properties",
|
||||
"Name",
|
||||
"The name of this instance",
|
||||
(LPARAM)name.c_str(),
|
||||
PIT_EDIT
|
||||
));
|
||||
return properties;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Instance::~Instance(void)
|
||||
{
|
||||
name = "Default Game Instance";
|
||||
for(size_t i = 0; i < children.size(); i++)
|
||||
{
|
||||
delete children.at(i);
|
||||
}
|
||||
}
|
||||
|
||||
void Instance::setName(std::string newName)
|
||||
{
|
||||
name = newName;
|
||||
}
|
||||
|
||||
std::string Instance::getClassName()
|
||||
{
|
||||
return className;
|
||||
}
|
||||
|
||||
std::vector<Instance* > Instance::getChildren()
|
||||
{
|
||||
return children;
|
||||
}
|
||||
|
||||
std::vector<Instance* > Instance::getAllChildren()
|
||||
{
|
||||
if(!children.empty())
|
||||
{
|
||||
std::vector<Instance* > totalchildren = children;
|
||||
for(size_t i = 0; i < children.size(); i++)
|
||||
{
|
||||
std::vector<Instance* > subchildren = children.at(i)->getAllChildren();
|
||||
if(!subchildren.empty())
|
||||
totalchildren.insert(totalchildren.end(), subchildren.begin(), subchildren.end());
|
||||
}
|
||||
return totalchildren;
|
||||
}
|
||||
return children;
|
||||
}
|
||||
|
||||
void Instance::setParent(Instance* newParent)
|
||||
{
|
||||
if(parent != NULL)
|
||||
{
|
||||
parent->removeChild(this);
|
||||
}
|
||||
parent = newParent;
|
||||
if(newParent != NULL)
|
||||
{
|
||||
newParent->addChild(this);
|
||||
}
|
||||
}
|
||||
|
||||
Instance* Instance::getParent()
|
||||
{
|
||||
return parent;
|
||||
}
|
||||
|
||||
void Instance::addChild(Instance* newChild)
|
||||
{
|
||||
children.push_back(newChild);
|
||||
}
|
||||
|
||||
void Instance::clearChildren()
|
||||
{
|
||||
children.clear();
|
||||
}
|
||||
void Instance::removeChild(Instance* oldChild)
|
||||
{
|
||||
for(size_t i = 0; i < children.size(); i++)
|
||||
{
|
||||
if(children.at(i) == oldChild)
|
||||
{
|
||||
children.erase(children.begin() + i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Instance* Instance::findFirstChild(std::string name)
|
||||
{
|
||||
for(size_t i = 0; i < children.size(); i++)
|
||||
{
|
||||
if(children.at(i)->name.compare(name) == 0)
|
||||
{
|
||||
return children.at(i);
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
29
Instance.h
29
Instance.h
@@ -1,11 +1,34 @@
|
||||
#pragma once
|
||||
|
||||
#pragma once
|
||||
#include <G3DAll.h>
|
||||
#include "propertyGrid.h"
|
||||
class Instance
|
||||
{
|
||||
public:
|
||||
bool canDelete;
|
||||
Instance(void);
|
||||
~Instance(void);
|
||||
Instance(const Instance&);
|
||||
virtual ~Instance(void);
|
||||
std::string name;
|
||||
Instance* parent; // Another pointer.
|
||||
virtual void render(RenderDevice*);
|
||||
std::vector<Instance*> children; // All children.
|
||||
std::string getClassName();
|
||||
Instance* findFirstChild(std::string);
|
||||
std::vector<Instance* > getChildren();
|
||||
std::vector<Instance* > getAllChildren();
|
||||
void setParent(Instance*);
|
||||
void setName(std::string newName);
|
||||
void addChild(Instance*);
|
||||
void removeChild(Instance*);
|
||||
void clearChildren();
|
||||
Instance* getParent();
|
||||
virtual Instance* clone() const { return new Instance(*this); }
|
||||
virtual std::vector<PROPGRIDITEM> getProperties();
|
||||
virtual void PropUpdate(LPPROPGRIDITEM &pItem);
|
||||
int listicon;
|
||||
protected:
|
||||
std::string className;
|
||||
Instance* parent; // Another pointer.
|
||||
PROPGRIDITEM createPGI(LPSTR catalog, LPSTR propName, LPSTR propDesc, LPARAM curVal, INT type);
|
||||
|
||||
};
|
||||
|
||||
73
LevelInstance.cpp
Normal file
73
LevelInstance.cpp
Normal file
@@ -0,0 +1,73 @@
|
||||
#include "LevelInstance.h"
|
||||
|
||||
LevelInstance::LevelInstance(void)
|
||||
{
|
||||
Instance::Instance();
|
||||
name = "Level";
|
||||
winMessage = "You Won!";
|
||||
loseMessage = "You Lost. Try Again";
|
||||
timer = 60.0F;
|
||||
score = 0;
|
||||
canDelete = false;
|
||||
}
|
||||
|
||||
LevelInstance::~LevelInstance(void)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
char timerTxt[12];
|
||||
char scoreTxt[12];
|
||||
std::vector<PROPGRIDITEM> LevelInstance::getProperties()
|
||||
{
|
||||
std::vector<PROPGRIDITEM> properties = Instance::getProperties();
|
||||
|
||||
|
||||
|
||||
properties.push_back(createPGI("Messages",
|
||||
"WinMessage",
|
||||
"The message that shows when the player wins.",
|
||||
(LPARAM)winMessage.c_str(),
|
||||
PIT_EDIT));
|
||||
properties.push_back(createPGI("Messages",
|
||||
"LoseMessage",
|
||||
"The message that shows when the player loses.",
|
||||
(LPARAM)loseMessage.c_str(),
|
||||
PIT_EDIT));
|
||||
|
||||
|
||||
sprintf(timerTxt, "%g", timer);
|
||||
sprintf(scoreTxt, "%d", score);
|
||||
properties.push_back(createPGI("Gameplay",
|
||||
"InitialTimerValue",
|
||||
"The ammount of time in seconds the player has to complete this level.\r\n\r\nPut 0 if time is limitless.",
|
||||
(LPARAM)timerTxt,
|
||||
PIT_EDIT));
|
||||
properties.push_back(createPGI("Gameplay",
|
||||
"InitialScoreValue",
|
||||
"The ammount of points the player starts with.",
|
||||
(LPARAM)scoreTxt,
|
||||
PIT_EDIT));
|
||||
return properties;
|
||||
}
|
||||
void LevelInstance::PropUpdate(LPPROPGRIDITEM &pItem)
|
||||
{
|
||||
if(strcmp(pItem->lpszPropName, "InitialTimerValue") == 0)
|
||||
{
|
||||
timer = atoi((LPSTR)pItem->lpCurValue);
|
||||
}
|
||||
if(strcmp(pItem->lpszPropName, "InitialScoreValue") == 0)
|
||||
{
|
||||
score = atof((LPSTR)pItem->lpCurValue);
|
||||
}
|
||||
if(strcmp(pItem->lpszPropName, "LoseMessage") == 0)
|
||||
{
|
||||
loseMessage = (LPSTR)pItem->lpCurValue;
|
||||
}
|
||||
if(strcmp(pItem->lpszPropName, "WinMessage") == 0)
|
||||
{
|
||||
winMessage = (LPSTR)pItem->lpCurValue;
|
||||
}
|
||||
else
|
||||
Instance::PropUpdate(pItem);
|
||||
}
|
||||
16
LevelInstance.h
Normal file
16
LevelInstance.h
Normal file
@@ -0,0 +1,16 @@
|
||||
#pragma once
|
||||
#include "instance.h"
|
||||
|
||||
class LevelInstance :
|
||||
public Instance
|
||||
{
|
||||
public:
|
||||
LevelInstance(void);
|
||||
~LevelInstance(void);
|
||||
float timer;
|
||||
int score;
|
||||
virtual std::vector<PROPGRIDITEM> getProperties();
|
||||
std::string winMessage;
|
||||
std::string loseMessage;
|
||||
virtual void PropUpdate(LPPROPGRIDITEM &pItem);
|
||||
};
|
||||
41
PVInstance.cpp
Normal file
41
PVInstance.cpp
Normal file
@@ -0,0 +1,41 @@
|
||||
#include "PVInstance.h"
|
||||
|
||||
PVInstance::PVInstance(void)
|
||||
{
|
||||
Instance::Instance();
|
||||
nameShown = false;
|
||||
className = "PVInstance";
|
||||
}
|
||||
|
||||
PVInstance::PVInstance(const PVInstance &oinst)
|
||||
{
|
||||
Instance::Instance(oinst);
|
||||
}
|
||||
|
||||
PVInstance::~PVInstance(void)
|
||||
{
|
||||
}
|
||||
|
||||
void PVInstance::postRender(RenderDevice* rd)
|
||||
{
|
||||
}
|
||||
|
||||
std::vector<PROPGRIDITEM> PVInstance::getProperties()
|
||||
{
|
||||
std::vector<PROPGRIDITEM> properties = Instance::getProperties();
|
||||
properties.push_back(createPGI(
|
||||
"Item",
|
||||
"NameShown",
|
||||
"This chooses whether the item name is shown",
|
||||
nameShown,
|
||||
PIT_CHECK));
|
||||
return properties;
|
||||
}
|
||||
void PVInstance::PropUpdate(LPPROPGRIDITEM &pItem)
|
||||
{
|
||||
if(strcmp(pItem->lpszPropName, "NameShown") == 0)
|
||||
{
|
||||
nameShown = (bool)pItem->lpCurValue;
|
||||
}
|
||||
else Instance::PropUpdate(pItem);
|
||||
}
|
||||
15
PVInstance.h
Normal file
15
PVInstance.h
Normal file
@@ -0,0 +1,15 @@
|
||||
#pragma once
|
||||
#include "instance.h"
|
||||
|
||||
class PVInstance :
|
||||
public Instance
|
||||
{
|
||||
public:
|
||||
PVInstance(void);
|
||||
~PVInstance(void);
|
||||
PVInstance(const PVInstance &oinst);
|
||||
virtual void postRender(RenderDevice* rd);
|
||||
virtual std::vector<PROPGRIDITEM> getProperties();
|
||||
virtual void PropUpdate(LPPROPGRIDITEM &pItem);
|
||||
bool nameShown;
|
||||
};
|
||||
603
PartInstance.cpp
Normal file
603
PartInstance.cpp
Normal file
@@ -0,0 +1,603 @@
|
||||
#include "PartInstance.h"
|
||||
#include "Globals.h"
|
||||
#include <sstream>
|
||||
#include <iomanip>
|
||||
|
||||
|
||||
PartInstance::PartInstance(void) : _bevelSize(0.07f), _parseVert(0), _debugTimer(0)
|
||||
{
|
||||
PVInstance::PVInstance();
|
||||
glList = glGenLists(1);
|
||||
name = "Unnamed PVItem";
|
||||
className = "Part";
|
||||
canCollide = true;
|
||||
anchored = true;
|
||||
size = Vector3(2,1,4);
|
||||
setCFrame(CoordinateFrame(Vector3(0,0,0)));
|
||||
color = Color3::gray();
|
||||
velocity = Vector3(0,0,0);
|
||||
rotVelocity = Vector3(0,0,0);
|
||||
top = Enum::SurfaceType::Smooth;
|
||||
front = Enum::SurfaceType::Smooth;
|
||||
right = Enum::SurfaceType::Smooth;
|
||||
back = Enum::SurfaceType::Smooth;
|
||||
left = Enum::SurfaceType::Smooth;
|
||||
bottom = Enum::SurfaceType::Smooth;
|
||||
shape = Enum::Shape::Block;
|
||||
}
|
||||
|
||||
void PartInstance::postRender(RenderDevice *rd)
|
||||
{
|
||||
if(!nameShown)
|
||||
return;
|
||||
G3D::GFontRef fnt = NULL;
|
||||
Instance* dm = parent;
|
||||
while(dm != NULL)
|
||||
{
|
||||
if(DataModelInstance* mod = dynamic_cast<DataModelInstance*>(dm))
|
||||
{
|
||||
fnt = mod->font;
|
||||
break;
|
||||
}
|
||||
dm = dm->getParent();
|
||||
}
|
||||
if(!fnt.isNull())
|
||||
{
|
||||
Vector3 gamepoint = position + Vector3(0,1.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 < 100 && distance > -100)
|
||||
{
|
||||
if(distance < 0)
|
||||
distance = distance*-1;
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
fnt->draw3D(rd, name, CoordinateFrame(rd->getCameraToWorldMatrix().rotation, gamepoint), 0.03*distance, Color3::yellow(), Color3::black(), G3D::GFont::XALIGN_CENTER, G3D::GFont::YALIGN_CENTER);
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
PartInstance::PartInstance(const PartInstance &oinst) : _bevelSize(0.07f), _parseVert(0), _debugTimer(0)
|
||||
{
|
||||
PVInstance::PVInstance(oinst);
|
||||
glList = glGenLists(1);
|
||||
//name = oinst.name;
|
||||
//className = "Part";
|
||||
name = oinst.name;
|
||||
canCollide = oinst.canCollide;
|
||||
setParent(oinst.parent);
|
||||
anchored = oinst.anchored;
|
||||
size = oinst.size;
|
||||
setCFrame(oinst.cFrame);
|
||||
color = oinst.color;
|
||||
velocity = oinst.velocity;
|
||||
rotVelocity = oinst.rotVelocity;
|
||||
top = oinst.top;
|
||||
front = oinst.front;
|
||||
right = oinst.right;
|
||||
back = oinst.back;
|
||||
left = oinst.left;
|
||||
bottom = oinst.bottom;
|
||||
shape = oinst.shape;
|
||||
changed = true;
|
||||
}
|
||||
|
||||
void PartInstance::setSize(Vector3 newSize)
|
||||
{
|
||||
int minsize = 1;
|
||||
int maxsize = 512;
|
||||
changed = true;
|
||||
int sizex = (int)newSize.x;
|
||||
if(sizex <= 0)
|
||||
sizex = 1;
|
||||
if(sizex > 512)
|
||||
sizex = 512;
|
||||
|
||||
int sizey = (int)newSize.y;
|
||||
if(sizey <= 0)
|
||||
sizey = 1;
|
||||
if(sizey > 512)
|
||||
sizey = 512;
|
||||
|
||||
int sizez = (int)newSize.z;
|
||||
if(sizez <= 0)
|
||||
sizez = 1;
|
||||
if(sizez > 512)
|
||||
sizez = 512;
|
||||
|
||||
if(shape != Enum::Shape::Block)
|
||||
{
|
||||
int max = sizex;
|
||||
if(sizey > max)
|
||||
max = sizey;
|
||||
if(sizez > max)
|
||||
max = sizez;
|
||||
sizex = sizey = sizez = max;
|
||||
}
|
||||
|
||||
size = Vector3(sizex, sizey, sizez);
|
||||
|
||||
|
||||
|
||||
}
|
||||
Vector3 PartInstance::getSize()
|
||||
{
|
||||
return size;
|
||||
}
|
||||
Vector3 PartInstance::getPosition()
|
||||
{
|
||||
return position;
|
||||
}
|
||||
void PartInstance::setPosition(Vector3 pos)
|
||||
{
|
||||
position = pos;
|
||||
cFrame = CoordinateFrame(pos);
|
||||
changed = true;
|
||||
}
|
||||
CoordinateFrame PartInstance::getCFrame()
|
||||
{
|
||||
return cFrame;
|
||||
}
|
||||
void PartInstance::setCFrame(CoordinateFrame coordinateFrame)
|
||||
{
|
||||
cFrame = coordinateFrame;
|
||||
position = coordinateFrame.translation;
|
||||
changed = true;
|
||||
}
|
||||
// Can probably be deleted
|
||||
CoordinateFrame PartInstance::getCFrameRenderBased()
|
||||
{
|
||||
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
|
||||
Box PartInstance::getBox()
|
||||
{
|
||||
Box box = Box(Vector3(size.x/2, size.y/2, size.z/2) ,Vector3(-size.x/2,-size.y/2,-size.z/2));
|
||||
CoordinateFrame c = getCFrameRenderBased();
|
||||
itemBox = c.toWorldSpace(box);
|
||||
return itemBox;
|
||||
}
|
||||
#else
|
||||
Box PartInstance::getBox()
|
||||
{
|
||||
if(changed)
|
||||
{
|
||||
Box box = Box(Vector3(0+size.x/4, 0+size.y/4, 0+size.z/4) ,Vector3(0-size.x/4,0-size.y/4,0-size.z/4));
|
||||
CoordinateFrame c = getCFrameRenderBased();
|
||||
itemBox = c.toWorldSpace(box);
|
||||
Vector3 v0,v1,v2,v3;
|
||||
for (int f = 0; f < 6; f++) {
|
||||
itemBox.getFaceCorners(f, v0,v1,v2,v3);
|
||||
_vertices[f*16] = v0.x;
|
||||
_vertices[(f*16)+1] = v0.y;
|
||||
_vertices[(f*16)+2] = v0.z;
|
||||
_vertices[(f*16)+3] = v1.x;
|
||||
_vertices[(f*16)+4] = v1.y;
|
||||
_vertices[(f*16)+5] = v1.z;
|
||||
_vertices[(f*16)+6] = v2.x;
|
||||
_vertices[(f*16)+7] = v2.y;
|
||||
_vertices[(f*16)+8] = v2.z;
|
||||
_vertices[(f*16)+9] = v3.x;
|
||||
_vertices[(f*16)+10] = v3.y;
|
||||
_vertices[(f*16)+11] = v3.z;
|
||||
_vertices[(f*16)+12] = color.r;
|
||||
_vertices[(f*16)+13] = color.g;
|
||||
_vertices[(f*16)+14] = color.b;
|
||||
_vertices[(f*16)+15] = 1;
|
||||
}
|
||||
}
|
||||
return itemBox;
|
||||
}
|
||||
#endif
|
||||
|
||||
bool PartInstance::collides(Box box)
|
||||
{
|
||||
return CollisionDetection::fixedSolidBoxIntersectsFixedSolidBox(getBox(), box);
|
||||
}
|
||||
|
||||
void PartInstance::addVertex(Vector3 vertexPos,Color3 color)
|
||||
{
|
||||
_vertices.push_back(vertexPos.x);
|
||||
_vertices.push_back(vertexPos.y);
|
||||
_vertices.push_back(vertexPos.z);
|
||||
_vertices.push_back(color.r);
|
||||
_vertices.push_back(color.g);
|
||||
_vertices.push_back(color.b);
|
||||
}
|
||||
void PartInstance::addNormals(Vector3 normal)
|
||||
{
|
||||
for (unsigned int i=0;i<3;i+=1) {
|
||||
_normals.push_back(normal.x);
|
||||
_normals.push_back(normal.y);
|
||||
_normals.push_back(normal.z);
|
||||
}
|
||||
}
|
||||
void PartInstance::addSingularNormal(Vector3 normal)
|
||||
{
|
||||
_normals.push_back(normal.x);
|
||||
_normals.push_back(normal.y);
|
||||
_normals.push_back(normal.z);
|
||||
}
|
||||
void PartInstance::addTriangle(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::debugPrintVertexIDs(RenderDevice* rd,GFontRef font,Matrix3 rot)
|
||||
{
|
||||
_debugUniqueVertices.clear();
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
|
||||
for (unsigned int i=0;i<_vertices.size();i+=6)
|
||||
{
|
||||
std::stringstream stream;
|
||||
stream << std::fixed << std::setprecision(1) << i;
|
||||
Vector3 testVector = Vector3(_vertices[i],_vertices[i+1],_vertices[i+2]);
|
||||
if (isUniqueVertex(testVector))
|
||||
{
|
||||
|
||||
font->draw3D(rd, stream.str(), CoordinateFrame(testVector) * -rot, 0.05, Color3::fromARGB(0xFF4F0000), Color4::clear());
|
||||
_debugUniqueVertices.push_back(testVector);
|
||||
}
|
||||
}
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
}
|
||||
void PartInstance::makeFace(int vertex1,int vertex2, int vertex3)
|
||||
{
|
||||
addTriangle(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)
|
||||
{
|
||||
for (unsigned int i=0;i<_debugUniqueVertices.size();i+=1)
|
||||
{
|
||||
if (pos==_debugUniqueVertices[i])
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
#ifdef NEW_BOX_RENDER
|
||||
void PartInstance::render(RenderDevice* rd) {
|
||||
if(nameShown)
|
||||
postRenderStack.push_back(this);
|
||||
if (changed)
|
||||
{
|
||||
getBox();
|
||||
_vertices.clear();
|
||||
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)
|
||||
);
|
||||
|
||||
// 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);
|
||||
}
|
||||
changed=false;
|
||||
|
||||
glNewList(glList, GL_COMPILE);
|
||||
glVertexPointer(3, GL_FLOAT,6 * sizeof(GLfloat), &_vertices[0]);
|
||||
glColorPointer(3, GL_FLOAT,6 * sizeof(GLfloat), &_vertices[3]);
|
||||
glNormalPointer(GL_FLOAT,3 * sizeof(GLfloat), &_normals[0]);
|
||||
glPushMatrix();
|
||||
//glTranslatef(2,7,0);
|
||||
glDrawElements(GL_TRIANGLES, _indices.size(), GL_UNSIGNED_SHORT, &_indices[0]);
|
||||
glPopMatrix();
|
||||
glEndList();
|
||||
}
|
||||
rd->setObjectToWorldMatrix(cFrame);
|
||||
glCallList(glList);
|
||||
//rd->setObjectToWorldMatrix(cFrame);
|
||||
|
||||
}
|
||||
#else
|
||||
void PartInstance::render(RenderDevice* rd)
|
||||
{
|
||||
|
||||
if(changed)
|
||||
Box box = getBox();
|
||||
|
||||
glColor(color);
|
||||
/*glEnable( GL_TEXTURE_2D );
|
||||
glEnable(GL_BLEND);// you enable blending function
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
glBindTexture( GL_TEXTURE_2D, Globals::surfaceId);
|
||||
glBegin(GL_QUADS);*/
|
||||
for(int i = 0; i < 96; i+=16)
|
||||
{
|
||||
double add = 0.8;
|
||||
Enum::SurfaceType::Value face;
|
||||
if(i == 0)//Back
|
||||
face = back;
|
||||
else if(i == 16)//Right
|
||||
face = right;
|
||||
else if(i == 32)//Front
|
||||
face = front;
|
||||
else if(i == 48)//Top
|
||||
face = top;
|
||||
else if(i == 64)//Left
|
||||
face = left;
|
||||
else if(i == 80)//Bottom
|
||||
face = bottom;
|
||||
|
||||
/*if(face == Snaps)
|
||||
add = 0.0;
|
||||
else if(face == Inlets)
|
||||
add = 0.2;*/
|
||||
|
||||
Vector3 v0 = Vector3(_vertices[i], _vertices[i+1], _vertices[i+2]), v1 = Vector3(_vertices[i+3], _vertices[i+4], _vertices[i+5]), v3 = Vector3(_vertices[i+9], _vertices[i+10], _vertices[i+11]);
|
||||
/*glNormal3fv((v1 - v0).cross(v3 - v0).direction());
|
||||
glTexCoord2f(0.0F,0.0F);
|
||||
glVertex3fv(v0);
|
||||
glTexCoord2f(1.0F,0.0F);
|
||||
glVertex3fv(v1);
|
||||
glTexCoord2f(1.0F,0.25F);
|
||||
glVertex3f(_vertices[i+6], _vertices[i+7], _vertices[i+8]);
|
||||
glTexCoord2f(0.0F,0.25F);
|
||||
glVertex3fv(v3);*/
|
||||
|
||||
glEnable( GL_TEXTURE_2D );
|
||||
glEnable(GL_BLEND);// you enable blending function
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
glBindTexture( GL_TEXTURE_2D, Globals::surfaceId);
|
||||
glBegin( GL_QUADS );
|
||||
glNormal3fv((v1 - v0).cross(v3 - v0).direction());
|
||||
glTexCoord2d(0.0,0.0+add);
|
||||
glVertex3fv(v0);
|
||||
glTexCoord2d( 1.0,0.0+add);
|
||||
glVertex3fv(v1);
|
||||
glTexCoord2d(1.0,0.2+add);
|
||||
glVertex3f(_vertices[i+6], _vertices[i+7], _vertices[i+8]);
|
||||
glTexCoord2d( 0.0,0.2+add);
|
||||
glVertex3fv(v3);
|
||||
glEnd();
|
||||
glDisable( GL_TEXTURE_2D );
|
||||
}
|
||||
/*glEnd();
|
||||
glDisable(GL_TEXTURE_2D);*/
|
||||
glColor(Color3::white());
|
||||
if(!children.empty())
|
||||
{
|
||||
for(size_t i = 0; i < children.size(); i++)
|
||||
{
|
||||
children.at(i)->render(rd);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
PartInstance::~PartInstance(void)
|
||||
{
|
||||
glDeleteLists(glList, 1);
|
||||
}
|
||||
char pto[512];
|
||||
char pto2[512];
|
||||
#include <sstream>
|
||||
|
||||
void PartInstance::PropUpdate(LPPROPGRIDITEM &item)
|
||||
{
|
||||
if(strcmp(item->lpszPropName, "Color3") == 0)
|
||||
{
|
||||
color = Color3(GetRValue(item->lpCurValue)/255.0F,GetGValue(item->lpCurValue)/255.0F,GetBValue(item->lpCurValue)/255.0F);
|
||||
changed=true;
|
||||
}
|
||||
else if(strcmp(item->lpszPropName, "Offset") == 0)
|
||||
{
|
||||
std::string str = (LPTSTR)item->lpCurValue;
|
||||
std::vector<float> vect;
|
||||
std::stringstream ss(str);
|
||||
float i;
|
||||
|
||||
while (ss >> i)
|
||||
{
|
||||
vect.push_back(i);
|
||||
|
||||
if (ss.peek() == ',')
|
||||
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
|
||||
{
|
||||
Vector3 pos(vect.at(0),vect.at(1),vect.at(2));
|
||||
setPosition(pos);
|
||||
}
|
||||
}
|
||||
|
||||
else if(strcmp(item->lpszPropName, "Size") == 0)
|
||||
{
|
||||
std::string str = (LPTSTR)item->lpCurValue;
|
||||
std::vector<float> vect;
|
||||
std::stringstream ss(str);
|
||||
float i;
|
||||
|
||||
while (ss >> i)
|
||||
{
|
||||
vect.push_back(i);
|
||||
|
||||
if (ss.peek() == ',')
|
||||
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
|
||||
{
|
||||
Vector3 size(vect.at(0),vect.at(1),vect.at(2));
|
||||
setSize(size);
|
||||
}
|
||||
}
|
||||
|
||||
else PVInstance::PropUpdate(item);
|
||||
}
|
||||
|
||||
std::vector<PROPGRIDITEM> PartInstance::getProperties()
|
||||
{
|
||||
std::vector<PROPGRIDITEM> properties = PVInstance::getProperties();
|
||||
|
||||
|
||||
properties.push_back(createPGI(
|
||||
"Properties",
|
||||
"Color3",
|
||||
"The color of the selected part",
|
||||
RGB((color.r*255),(color.g*255),(color.b*255)),
|
||||
PIT_COLOR
|
||||
));
|
||||
|
||||
sprintf(pto, "%g, %g, %g", cFrame.translation.x, cFrame.translation.y, cFrame.translation.z);
|
||||
properties.push_back(createPGI(
|
||||
"Item",
|
||||
"Offset",
|
||||
"The position of the object in the workspace",
|
||||
(LPARAM)pto,
|
||||
PIT_EDIT
|
||||
));
|
||||
sprintf(pto2, "%g, %g, %g", size.x, size.y, size.z);
|
||||
properties.push_back(createPGI(
|
||||
"Item",
|
||||
"Size",
|
||||
"The position of the object in the workspace",
|
||||
(LPARAM)pto2,
|
||||
PIT_EDIT
|
||||
));
|
||||
return properties;
|
||||
}
|
||||
|
||||
66
PartInstance.h
Normal file
66
PartInstance.h
Normal file
@@ -0,0 +1,66 @@
|
||||
#pragma once
|
||||
#include "PVInstance.h"
|
||||
#include "Enum.h"
|
||||
|
||||
#define NEW_BOX_RENDER
|
||||
|
||||
class PartInstance : public PVInstance
|
||||
{
|
||||
public:
|
||||
PartInstance(void);
|
||||
PartInstance(const PartInstance &oinst);
|
||||
Instance* clone() const { return new PartInstance(*this); }
|
||||
virtual void PartInstance::postRender(RenderDevice* rd);
|
||||
~PartInstance(void);
|
||||
virtual void render(RenderDevice*);
|
||||
Vector3 velocity;
|
||||
Enum::SurfaceType::Value top;
|
||||
Enum::SurfaceType::Value front;
|
||||
Enum::SurfaceType::Value right;
|
||||
Enum::SurfaceType::Value back;
|
||||
Enum::SurfaceType::Value left;
|
||||
Enum::SurfaceType::Value bottom;
|
||||
Enum::Shape::Value shape;
|
||||
CoordinateFrame cFrame;
|
||||
Color3 color;
|
||||
Vector3 getPosition();
|
||||
void setPosition(Vector3);
|
||||
CoordinateFrame getCFrame();
|
||||
void setCFrame(CoordinateFrame);
|
||||
Box getBox();
|
||||
Box getScaledBox();
|
||||
CoordinateFrame getCFrameRenderBased();
|
||||
Vector3 getSize();
|
||||
void setSize(Vector3);
|
||||
bool canCollide;
|
||||
bool anchored;
|
||||
Vector3 rotVelocity;
|
||||
bool collides(Box);
|
||||
virtual std::vector<PROPGRIDITEM> getProperties();
|
||||
virtual void PropUpdate(LPPROPGRIDITEM &pItem);
|
||||
void addVertex(Vector3 vertexPos,Color3 color);
|
||||
void addNormals(Vector3 normal);
|
||||
void addSingularNormal(Vector3 normal);
|
||||
void addTriangle(Vector3 vertexPos,Vector3 vertexPos2, Vector3 vertexPos3);
|
||||
void debugPrintVertexIDs(RenderDevice* rd, GFontRef font, Matrix3 camRot);
|
||||
void makeFace(int vertex1, int vertex2, int vertex3);
|
||||
bool isUniqueVertex(Vector3 pos);
|
||||
float getMass();
|
||||
private:
|
||||
Vector3 position;
|
||||
Vector3 size;
|
||||
float _bevelSize;
|
||||
int _parseVert;
|
||||
int _debugTimer;
|
||||
std::vector<Vector3> _debugUniqueVertices;
|
||||
#ifdef NEW_BOX_RENDER
|
||||
std::vector<GLfloat> _vertices;
|
||||
std::vector<GLfloat> _normals;
|
||||
#else
|
||||
GLfloat _vertices[96];
|
||||
#endif
|
||||
std::vector<GLushort> _indices;
|
||||
bool changed;
|
||||
Box itemBox;
|
||||
GLuint glList;
|
||||
};
|
||||
@@ -1,29 +0,0 @@
|
||||
#include <G3DAll.h>
|
||||
#include "PhysicalInstance.h"
|
||||
|
||||
bool canCollide = true;
|
||||
bool anchored = false;
|
||||
Vector3 size;
|
||||
Vector3 position;
|
||||
Vector3 velocity;
|
||||
Vector3 rotVelocity;
|
||||
Color3 color;
|
||||
|
||||
PhysicalInstance::PhysicalInstance(void)
|
||||
{
|
||||
name = "Default PhysicalInstance";
|
||||
className = "Part";
|
||||
canCollide = true;
|
||||
anchored = true;
|
||||
size = Vector3(2,1,4);
|
||||
position = Vector3(0,0,0);
|
||||
color = Color3::gray();
|
||||
velocity = Vector3(0,0,0);
|
||||
rotVelocity = Vector3(0,0,0);
|
||||
}
|
||||
|
||||
PhysicalInstance::~PhysicalInstance(void)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
#pragma once
|
||||
#include "instance.h"
|
||||
|
||||
class PhysicalInstance :
|
||||
public Instance
|
||||
{
|
||||
public:
|
||||
PhysicalInstance(void);
|
||||
~PhysicalInstance(void);
|
||||
Vector3 size;
|
||||
Vector3 position;
|
||||
Vector3 velocity;
|
||||
Vector3 rotvelocity;
|
||||
Color3 color;
|
||||
};
|
||||
332
PropertyWindow.cpp
Normal file
332
PropertyWindow.cpp
Normal file
@@ -0,0 +1,332 @@
|
||||
#define _WINSOCKAPI_
|
||||
#include <windows.h>
|
||||
#include "WindowFunctions.h"
|
||||
#include "resource.h"
|
||||
#include "PropertyWindow.h"
|
||||
#include "Globals.h"
|
||||
#include "strsafe.h"
|
||||
/*typedef struct typPRGP {
|
||||
Instance* instance; // Declare member types
|
||||
Property ∝
|
||||
} PRGP;*/
|
||||
|
||||
std::vector<PROPGRIDITEM> prop;
|
||||
std::vector<Instance*> children;
|
||||
Instance * selectedInstance;
|
||||
Instance * parent = NULL;
|
||||
const int CX_BITMAP = 16;
|
||||
const int CY_BITMAP = 16;
|
||||
|
||||
LRESULT CALLBACK PropProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
TCHAR achTemp[256];
|
||||
PropertyWindow *propWind = (PropertyWindow *)GetWindowLongPtr(hwnd, GWL_USERDATA);
|
||||
if (propWind==NULL)
|
||||
{
|
||||
return DefWindowProc(hwnd, msg, wParam, lParam);
|
||||
}
|
||||
switch(msg)
|
||||
{
|
||||
case WM_CLOSE:
|
||||
{
|
||||
ShowWindow(hwnd, SW_HIDE);
|
||||
}
|
||||
break;
|
||||
case WM_DRAWITEM:
|
||||
{
|
||||
std::cout << "Drawing?" << "\r\n";
|
||||
COLORREF clrBackground;
|
||||
COLORREF clrForeground;
|
||||
TEXTMETRIC tm;
|
||||
int x;
|
||||
int y;
|
||||
HRESULT hr;
|
||||
size_t cch;
|
||||
|
||||
LPDRAWITEMSTRUCT lpdis = (LPDRAWITEMSTRUCT) lParam;
|
||||
|
||||
if (lpdis->itemID == -1) // Empty item)
|
||||
break;
|
||||
|
||||
// Get the food icon from the item data.
|
||||
HBITMAP hbmIcon = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP1));
|
||||
HBITMAP hbmMask = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP1));
|
||||
// The colors depend on whether the item is selected.
|
||||
clrForeground = SetTextColor(lpdis->hDC,
|
||||
GetSysColor(lpdis->itemState & ODS_SELECTED ?
|
||||
COLOR_HIGHLIGHTTEXT : COLOR_WINDOWTEXT));
|
||||
|
||||
clrBackground = SetBkColor(lpdis->hDC,
|
||||
GetSysColor(lpdis->itemState & ODS_SELECTED ?
|
||||
COLOR_HIGHLIGHT : COLOR_WINDOW));
|
||||
|
||||
// Calculate the vertical and horizontal position.
|
||||
GetTextMetrics(lpdis->hDC, &tm);
|
||||
y = (lpdis->rcItem.bottom + lpdis->rcItem.top - tm.tmHeight) / 2;
|
||||
x = LOWORD(GetDialogBaseUnits()) / 4;
|
||||
|
||||
// Get and display the text for the list item.
|
||||
SendMessage(lpdis->hwndItem, CB_GETLBTEXT, lpdis->itemID, (LPARAM) achTemp);
|
||||
|
||||
hr = StringCchLength(achTemp, 256, &cch);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
// TODO: Write error handler.
|
||||
}
|
||||
|
||||
ExtTextOut(lpdis->hDC, CX_BITMAP + 2 * x, y,
|
||||
ETO_CLIPPED | ETO_OPAQUE, &lpdis->rcItem,
|
||||
achTemp, (UINT)cch, NULL);
|
||||
|
||||
// Restore the previous colors.
|
||||
SetTextColor(lpdis->hDC, clrForeground);
|
||||
SetBkColor(lpdis->hDC, clrBackground);
|
||||
|
||||
// Draw the food icon for the item.
|
||||
HDC hdc = CreateCompatibleDC(lpdis->hDC);
|
||||
if (hdc == NULL)
|
||||
break;
|
||||
|
||||
SelectObject(hdc, hbmMask);
|
||||
BitBlt(lpdis->hDC, x, lpdis->rcItem.top + 1,
|
||||
CX_BITMAP, CY_BITMAP, hdc, 0, 0, SRCAND);
|
||||
|
||||
SelectObject(hdc, hbmIcon);
|
||||
BitBlt(lpdis->hDC, x, lpdis->rcItem.top + 1,
|
||||
CX_BITMAP, CY_BITMAP, hdc, 0, 0, SRCPAINT);
|
||||
|
||||
DeleteDC(hdc);
|
||||
|
||||
// If the item has the focus, draw the focus rectangle.
|
||||
if (lpdis->itemState & ODS_FOCUS)
|
||||
DrawFocusRect(lpdis->hDC, &lpdis->rcItem);
|
||||
|
||||
|
||||
}
|
||||
break;
|
||||
case WM_MEASUREITEM:
|
||||
{
|
||||
LPMEASUREITEMSTRUCT lpmis = (LPMEASUREITEMSTRUCT) lParam;
|
||||
if (lpmis->itemHeight < 18)
|
||||
lpmis->itemHeight = 18;
|
||||
}
|
||||
break;
|
||||
case WM_SIZE:
|
||||
{
|
||||
propWind->onResize();
|
||||
}
|
||||
break;
|
||||
case WM_COMMAND:
|
||||
{
|
||||
if(HIWORD(wParam) == CBN_SELCHANGE)
|
||||
{
|
||||
int ItemIndex = SendMessage((HWND) lParam, (UINT) CB_GETCURSEL, (WPARAM) 0, (LPARAM) 0);
|
||||
CHAR ListItem[256];
|
||||
SendMessage((HWND) lParam, (UINT) CB_GETLBTEXT, (WPARAM) ItemIndex, (LPARAM) ListItem);
|
||||
if(ItemIndex != 0)
|
||||
{
|
||||
propWind->ClearProperties();
|
||||
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;
|
||||
|
||||
case WM_NOTIFY:
|
||||
{
|
||||
switch(((LPNMHDR)lParam)->code)
|
||||
{
|
||||
case PGN_PROPERTYCHANGE:
|
||||
{
|
||||
if (IDC_PROPERTYGRID==wParam) {
|
||||
LPNMHDR pnm = (LPNMHDR)lParam;
|
||||
LPNMPROPGRID lpnmp = (LPNMPROPGRID)pnm;
|
||||
LPPROPGRIDITEM item = PropGrid_GetItemData(pnm->hwndFrom,lpnmp->iIndex);
|
||||
selectedInstance->PropUpdate(item);
|
||||
//propWind->SetProperties(selectedInstance);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
//MessageBox(NULL,"Test","Test",0);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return DefWindowProc(hwnd, msg, wParam, lParam);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void PropertyWindow::refreshExplorer()
|
||||
{
|
||||
SendMessage(_explorerComboBox,CB_RESETCONTENT,0,0);
|
||||
parent = NULL;
|
||||
for (unsigned int i=0;i<g_selectedInstances.size();i++) {
|
||||
|
||||
SendMessage(_explorerComboBox,CB_ADDSTRING, 0,(LPARAM)g_selectedInstances[i]->name.c_str());
|
||||
if(g_selectedInstances[i]->getParent() != NULL)
|
||||
{
|
||||
std::string title = ".. (";
|
||||
title += g_selectedInstances[i]->getParent()->name;
|
||||
title += ")";
|
||||
SendMessage(_explorerComboBox,CB_ADDSTRING, 0,(LPARAM)title.c_str());
|
||||
parent = g_selectedInstances[i]->getParent();
|
||||
}
|
||||
children = g_selectedInstances[i]->getChildren();
|
||||
for(size_t z = 0; z < children.size(); z++)
|
||||
{
|
||||
SendMessage(_explorerComboBox,CB_ADDSTRING, 0,(LPARAM)children.at(z)->name.c_str());
|
||||
}
|
||||
SendMessage(_explorerComboBox,CB_SETCURSEL,0,(LPARAM)0);
|
||||
}
|
||||
}
|
||||
|
||||
bool PropertyWindow::onCreate(int x, int y, int sx, int sy, HMODULE hThisInstance) {
|
||||
if (!createWindowClass("propHWND",PropProc,hThisInstance))
|
||||
return false;
|
||||
|
||||
_hwndProp = CreateWindowEx(
|
||||
WS_EX_TOOLWINDOW,
|
||||
"propHWND",
|
||||
"PropertyGrid",
|
||||
WS_VISIBLE | WS_POPUPWINDOW | WS_THICKFRAME | WS_CAPTION,
|
||||
CW_USEDEFAULT,
|
||||
CW_USEDEFAULT,
|
||||
300,
|
||||
660,
|
||||
NULL, // parent
|
||||
NULL, // menu
|
||||
hThisInstance,
|
||||
NULL
|
||||
);
|
||||
|
||||
_explorerComboBox = CreateWindowEx(
|
||||
NULL,
|
||||
"COMBOBOX",
|
||||
"Combo",
|
||||
WS_VISIBLE | WS_CHILD | CBS_DROPDOWNLIST,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
_hwndProp, // parent
|
||||
NULL, // menu
|
||||
hThisInstance,
|
||||
NULL
|
||||
);
|
||||
SendMessage(_explorerComboBox, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), 0);
|
||||
|
||||
_propGrid = New_PropertyGrid(_hwndProp,IDC_PROPERTYGRID);
|
||||
|
||||
/*PROPGRIDITEM pItem;
|
||||
PropGrid_ItemInit(pItem);
|
||||
|
||||
pItem.lpszCatalog="Test";
|
||||
pItem.lpszPropName="Offset";
|
||||
pItem.lpszzCmbItems="What";
|
||||
pItem.lpszPropDesc="Description";
|
||||
pItem.lpCurValue=(LPARAM)"0, 0, 0";
|
||||
|
||||
pItem.iItemType=PIT_EDIT;
|
||||
|
||||
PROPGRIDITEM pItem2;
|
||||
PropGrid_ItemInit(pItem2);
|
||||
|
||||
pItem2.lpszCatalog="Test";
|
||||
pItem2.lpszPropName="s";
|
||||
pItem2.lpszzCmbItems="itemlist\0itemlist2\0itemlist3";
|
||||
pItem2.lpszPropDesc="";
|
||||
pItem2.lpCurValue=0;
|
||||
|
||||
pItem2.iItemType=PIT_COMBO;
|
||||
|
||||
/*PROPGRIDITEM FauxExplorerItem;
|
||||
PropGrid_ItemInit(FauxExplorerItem);
|
||||
FauxExplorerItem.lpszCatalog="Test";
|
||||
FauxExplorerItem.lpszPropName = "Editable Combo Field";
|
||||
FauxExplorerItem.lpszzCmbItems = "Test1\0Test2\0Test3";
|
||||
FauxExplorerItem.lpszPropDesc = "Press F4 to view drop down.";
|
||||
FauxExplorerItem.iItemType = PIT_EDITCOMBO;
|
||||
FauxExplorerItem.lpCurValue = 1;
|
||||
PropGrid_AddItem(_propGrid, &FauxExplorerItem);*/
|
||||
|
||||
PropGrid_Enable(_propGrid,true);
|
||||
ShowWindow(_propGrid,SW_SHOW);
|
||||
// PropGrid_AddItem(_propGrid,&pItem);
|
||||
// PropGrid_AddItem(_propGrid,&pItem2);
|
||||
PropGrid_SetItemHeight(_propGrid,20);
|
||||
PropGrid_ShowToolTips(_propGrid,TRUE);
|
||||
PropGrid_ShowPropertyDescriptions(_propGrid,TRUE);
|
||||
PropGrid_ExpandAllCatalogs(_propGrid);
|
||||
|
||||
|
||||
SetWindowLongPtr(_hwndProp,GWL_USERDATA,(LONG)this);
|
||||
|
||||
refreshExplorer();
|
||||
_resize();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
PropertyWindow::PropertyWindow(int x, int y, int sx, int sy, HMODULE hThisInstance) {
|
||||
onCreate(x, y, sx, sy, hThisInstance);
|
||||
}
|
||||
|
||||
void PropertyWindow::onResize()
|
||||
{
|
||||
_resize();
|
||||
}
|
||||
|
||||
void PropertyWindow::_resize()
|
||||
{
|
||||
RECT rect;
|
||||
GetClientRect(_hwndProp,&rect);
|
||||
SetWindowPos(_propGrid, NULL, 0, 20, rect.right, rect.bottom-20, SWP_NOZORDER | SWP_NOACTIVATE);
|
||||
SetWindowPos(_explorerComboBox, NULL, 0, 0, rect.right, 400, SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE);
|
||||
}
|
||||
|
||||
void PropertyWindow::SetProperties(Instance * instance)
|
||||
{
|
||||
PropGrid_ResetContent(_propGrid);
|
||||
prop = instance->getProperties();
|
||||
selectedInstance = instance;
|
||||
for(size_t i = 0; i < prop.size(); i++)
|
||||
{
|
||||
::PROPGRIDITEM item = prop.at(i);
|
||||
PropGrid_AddItem(_propGrid, &item);
|
||||
//PRGP propgp;
|
||||
//propgp.instance = instance;
|
||||
//propgp.prop = prop.at(i);
|
||||
}
|
||||
PropGrid_ExpandAllCatalogs(_propGrid);
|
||||
//SetWindowLongPtr(_propGrid,GWL_USERDATA,(LONG)this);
|
||||
|
||||
refreshExplorer();
|
||||
_resize();
|
||||
}
|
||||
|
||||
void PropertyWindow::ClearProperties()
|
||||
{
|
||||
PropGrid_ResetContent(_propGrid);
|
||||
}
|
||||
16
PropertyWindow.h
Normal file
16
PropertyWindow.h
Normal file
@@ -0,0 +1,16 @@
|
||||
#pragma once
|
||||
#include "Instance.h"
|
||||
class PropertyWindow {
|
||||
public:
|
||||
PropertyWindow(int x, int y, int sx, int sy, HMODULE hThisInstance);
|
||||
bool onCreate(int x, int y, int sx, int sy, HMODULE hThisInstance);
|
||||
void SetProperties(Instance *);
|
||||
void ClearProperties();
|
||||
void onResize();
|
||||
void refreshExplorer();
|
||||
HWND _hwndProp;
|
||||
private:
|
||||
HWND _propGrid;
|
||||
HWND _explorerComboBox;
|
||||
void _resize();
|
||||
};
|
||||
10
README.md
Normal file
10
README.md
Normal file
@@ -0,0 +1,10 @@
|
||||
# ROBLOX 2005 Recreation Project
|
||||
## Why are we doing this?
|
||||
ROBLOX in 2005 was a different game, based around minigames with win and lose conditions rather than a 3D building game. Since this build of the client is presumed lost despite having around 100 users, we have to recreate it. We are using era-appropriate tools for this as well (Visual Studio 2005 and 2005-era compilers), as well as G3D 6.10, the era-appropriate version of the Graphics3D graphics library used by ROBLOX to this day.
|
||||
|
||||
## Features
|
||||
Equivalent to known features of 05 as it stood in October 2005 with the 'Morgan McGuire builds'
|
||||
|
||||
## Credits
|
||||
- Morgan McGuire, creator of G3D - his old pre-2006 website for the only existing colour pictures of 2005 era roblox on the internet, as well as a couple of helpful emails. He assisted roblox development in the 2004-2006 timeframe.
|
||||
- David Baszucki and Erik Cassel (1967-2013, RIP) - for creating roblox
|
||||
122
TextButtonInstance.cpp
Normal file
122
TextButtonInstance.cpp
Normal file
@@ -0,0 +1,122 @@
|
||||
#include "TextButtonInstance.h"
|
||||
|
||||
|
||||
TextButtonInstance::TextButtonInstance(void)
|
||||
{
|
||||
BaseButtonInstance::BaseButtonInstance();
|
||||
boxBegin = Vector2(0,0);
|
||||
boxEnd = Vector2(0,0);
|
||||
fontLocationRelativeTo = Vector2(0,0);
|
||||
centeredWithinBox = false;
|
||||
title = "TextBox";
|
||||
textColor = Color4(1, 1, 1, 1);
|
||||
textOutlineColor = Color4(0, 0, 0, 0);
|
||||
boxColor = Color4(0.6F,0.6F,0.6F,0.4F);
|
||||
boxOutlineColor = Color4(0, 0, 0, 0);
|
||||
setAllColorsSame();
|
||||
textSize = 12;
|
||||
floatBottom = false;
|
||||
floatRight = false;
|
||||
floatCenter = false;
|
||||
visible = true;
|
||||
className = "TextButton";
|
||||
disabled = false;
|
||||
selected = false;
|
||||
}
|
||||
|
||||
bool TextButtonInstance::mouseInButton(float mousex, float mousey, RenderDevice* rd)
|
||||
{
|
||||
Vector3 point1;
|
||||
Vector3 point2;
|
||||
if(floatBottom)
|
||||
{
|
||||
point1 = Vector3(boxBegin.x, rd->getHeight() + boxBegin.y,0);
|
||||
point2 = Vector3(boxEnd.x, rd->getHeight() + boxEnd.y,0);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
point1 = Vector3(boxBegin.x, boxBegin.y,0);
|
||||
point2 = Vector3(boxEnd.x, boxEnd.y,0);
|
||||
}
|
||||
if(mousex >= point1.x && mousey >= point1.y)
|
||||
{
|
||||
if(mousex < point2.x && mousey < point2.y)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void TextButtonInstance::setAllColorsSame()
|
||||
{
|
||||
textColorOvr = textColor;
|
||||
textOutlineColorOvr = textOutlineColor;
|
||||
boxColorOvr = boxColor;
|
||||
boxOutlineColorOvr = boxOutlineColor;
|
||||
textColorDn = textColor;
|
||||
textOutlineColorDn = textOutlineColor;
|
||||
boxColorDn = boxColor;
|
||||
boxOutlineColorDn = boxOutlineColor;
|
||||
textColorDis = textColor;
|
||||
textOutlineColorDis = textOutlineColor;
|
||||
boxColorDis = boxColor;
|
||||
boxOutlineColorDis = boxOutlineColor;
|
||||
}
|
||||
|
||||
TextButtonInstance::~TextButtonInstance(void)
|
||||
{
|
||||
}
|
||||
|
||||
void TextButtonInstance::drawObj(RenderDevice* rd, Vector2 mousePos, bool mouseDown)
|
||||
{
|
||||
Vector3 point1;
|
||||
Vector3 point2;
|
||||
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
|
||||
glDisableClientState(GL_COLOR_ARRAY);
|
||||
|
||||
if(floatBottom)
|
||||
{
|
||||
point1 = Vector3(boxBegin.x, rd->getHeight() + boxBegin.y,0);
|
||||
point2 = Vector3(boxEnd.x, rd->getHeight() + boxEnd.y,0);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
point1 = Vector3(boxBegin.x, boxBegin.y,0);
|
||||
point2 = Vector3(boxEnd.x, boxEnd.y,0);
|
||||
}
|
||||
Vector2 RelativeTo = Vector2(point1.x + fontLocationRelativeTo.x, point1.y + fontLocationRelativeTo.y);
|
||||
if(disabled)
|
||||
{
|
||||
Draw::box(Box(point1, point2), rd, boxColorDis, boxOutlineColorDis);
|
||||
font->draw2D(rd, title, RelativeTo, textSize, textColorDis, textOutlineColorDis);
|
||||
}
|
||||
else if(mouseInArea(point1.x, point1.y, point2.x, point2.y, mousePos.x, mousePos.y) && mouseDown)
|
||||
{
|
||||
Draw::box(Box(point1, point2), rd, boxColorDn, boxOutlineColorDn);
|
||||
font->draw2D(rd, title, RelativeTo, textSize, textColorDn, textOutlineColorDn);
|
||||
}
|
||||
else if(mouseInArea(point1.x, point1.y, point2.x, point2.y, mousePos.x, mousePos.y))
|
||||
{
|
||||
Draw::box(Box(point1, point2), rd, boxColorOvr, boxOutlineColorOvr);
|
||||
font->draw2D(rd, title, RelativeTo, textSize, textColorOvr, textOutlineColorOvr);
|
||||
}
|
||||
else if(selected)
|
||||
{
|
||||
Draw::box(Box(point1, point2), rd, boxColorOvr, boxOutlineColorOvr);
|
||||
font->draw2D(rd, title, RelativeTo, textSize, textColorOvr, textOutlineColorOvr);
|
||||
}
|
||||
else
|
||||
{
|
||||
Draw::box(Box(point1, point2), rd, boxColor, boxOutlineColor);
|
||||
font->draw2D(rd, title, RelativeTo, textSize, textColor, textOutlineColor);
|
||||
}
|
||||
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
|
||||
glEnableClientState(GL_COLOR_ARRAY);
|
||||
}
|
||||
|
||||
void doNullCheck()
|
||||
{
|
||||
}
|
||||
35
TextButtonInstance.h
Normal file
35
TextButtonInstance.h
Normal file
@@ -0,0 +1,35 @@
|
||||
#pragma once
|
||||
#include "BaseButtonInstance.h"
|
||||
class TextButtonInstance : public BaseButtonInstance
|
||||
{
|
||||
public:
|
||||
TextButtonInstance(void);
|
||||
~TextButtonInstance(void);
|
||||
void setAllColorsSame();
|
||||
Vector2 boxBegin;
|
||||
Vector2 boxEnd;
|
||||
Vector2 fontLocationRelativeTo;
|
||||
Color4 textColor;
|
||||
Color4 textOutlineColor;
|
||||
Color4 boxColor;
|
||||
Color4 boxOutlineColor;
|
||||
Color4 textColorOvr;
|
||||
Color4 textOutlineColorOvr;
|
||||
Color4 boxColorOvr;
|
||||
Color4 boxOutlineColorOvr;
|
||||
Color4 textColorDn;
|
||||
Color4 textOutlineColorDn;
|
||||
Color4 boxColorDn;
|
||||
Color4 boxOutlineColorDn;
|
||||
Color4 textColorDis;
|
||||
Color4 textOutlineColorDis;
|
||||
Color4 boxColorDis;
|
||||
Color4 boxOutlineColorDis;
|
||||
bool centeredWithinBox;
|
||||
std::string title;
|
||||
G3D::GFontRef font;
|
||||
bool visible;
|
||||
int textSize;
|
||||
void drawObj(RenderDevice*, Vector2, bool);
|
||||
bool mouseInButton(float, float, RenderDevice*);
|
||||
};
|
||||
32
WindowFunctions.cpp
Normal file
32
WindowFunctions.cpp
Normal file
@@ -0,0 +1,32 @@
|
||||
|
||||
#include "WindowFunctions.h"
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
|
||||
using namespace std;
|
||||
|
||||
bool createWindowClass(const char* name,WNDPROC proc,HMODULE hInstance)
|
||||
{
|
||||
WNDCLASSEX wc;
|
||||
wc.cbSize = sizeof(WNDCLASSEX);
|
||||
wc.style = 0;
|
||||
wc.lpfnWndProc = proc;
|
||||
wc.cbClsExtra = 0;
|
||||
wc.cbWndExtra = 0;
|
||||
wc.hInstance = hInstance;
|
||||
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
|
||||
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
|
||||
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW);
|
||||
wc.lpszMenuName = NULL;
|
||||
wc.lpszClassName = name;
|
||||
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
|
||||
if (!RegisterClassEx (&wc))
|
||||
{
|
||||
stringstream errMsg;
|
||||
errMsg<<"Failed to register " << name;
|
||||
MessageBox(NULL, errMsg.str().c_str(),"Dynamica Crash", MB_OK);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
4
WindowFunctions.h
Normal file
4
WindowFunctions.h
Normal file
@@ -0,0 +1,4 @@
|
||||
#pragma once
|
||||
#include <windows.h>
|
||||
|
||||
bool createWindowClass(const char* name,WNDPROC proc,HMODULE hInstance);
|
||||
14
WorkspaceInstance.cpp
Normal file
14
WorkspaceInstance.cpp
Normal file
@@ -0,0 +1,14 @@
|
||||
#include "WorkspaceInstance.h"
|
||||
|
||||
|
||||
WorkspaceInstance::WorkspaceInstance(void)
|
||||
{
|
||||
GroupInstance::GroupInstance();
|
||||
name = "Workspace";
|
||||
className = "Workspace";
|
||||
canDelete = false;
|
||||
}
|
||||
|
||||
WorkspaceInstance::~WorkspaceInstance(void)
|
||||
{
|
||||
}
|
||||
10
WorkspaceInstance.h
Normal file
10
WorkspaceInstance.h
Normal file
@@ -0,0 +1,10 @@
|
||||
#pragma once
|
||||
#include "GroupInstance.h"
|
||||
|
||||
class WorkspaceInstance :
|
||||
public GroupInstance
|
||||
{
|
||||
public:
|
||||
WorkspaceInstance(void);
|
||||
~WorkspaceInstance(void);
|
||||
};
|
||||
639
ax.cpp
Normal file
639
ax.cpp
Normal file
@@ -0,0 +1,639 @@
|
||||
// AX.CPP
|
||||
#include <windows.h>
|
||||
#include <comdef.h>
|
||||
#include <exdisp.h>
|
||||
#include <oledlg.h>
|
||||
#include "ax.h"
|
||||
|
||||
|
||||
#pragma warning (disable: 4311)
|
||||
#pragma warning (disable: 4312)
|
||||
#pragma warning (disable: 4244)
|
||||
#pragma warning (disable: 4800)
|
||||
|
||||
|
||||
// AXClientSite class
|
||||
// ------- Implement member functions
|
||||
AXClientSite :: AXClientSite()
|
||||
{
|
||||
refNum = 0;
|
||||
CalledCanInPlace = 0;
|
||||
InPlace = 0;
|
||||
}
|
||||
|
||||
AXClientSite :: ~AXClientSite()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
// IUnknown methods
|
||||
STDMETHODIMP AXClientSite :: QueryInterface(REFIID iid,void**ppvObject)
|
||||
{
|
||||
*ppvObject = 0;
|
||||
if (iid == IID_IOleClientSite)
|
||||
*ppvObject = (IOleClientSite*)this;
|
||||
if (iid == IID_IUnknown)
|
||||
*ppvObject = this;
|
||||
if (iid == IID_IAdviseSink)
|
||||
*ppvObject = (IAdviseSink*)this;
|
||||
if (iid == IID_IDispatch)
|
||||
*ppvObject = (IDispatch*)this;
|
||||
if (ExternalPlace == false)
|
||||
{
|
||||
if (iid == IID_IOleInPlaceSite)
|
||||
*ppvObject = (IOleInPlaceSite*)this;
|
||||
if (iid == IID_IOleInPlaceFrame)
|
||||
*ppvObject = (IOleInPlaceFrame*)this;
|
||||
if (iid == IID_IOleInPlaceUIWindow)
|
||||
*ppvObject = (IOleInPlaceUIWindow*)this;
|
||||
}
|
||||
|
||||
//* Log Call
|
||||
if (*ppvObject)
|
||||
{
|
||||
AddRef();
|
||||
return S_OK;
|
||||
}
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
STDMETHODIMP_(ULONG) AXClientSite :: AddRef()
|
||||
{
|
||||
refNum++;
|
||||
return refNum;
|
||||
}
|
||||
|
||||
STDMETHODIMP_(ULONG) AXClientSite :: Release()
|
||||
{
|
||||
refNum--;
|
||||
return refNum;
|
||||
}
|
||||
|
||||
|
||||
// IOleClientSite methods
|
||||
STDMETHODIMP AXClientSite :: SaveObject()
|
||||
{
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
STDMETHODIMP AXClientSite :: GetMoniker(DWORD dwA,DWORD dwW,IMoniker**pm)
|
||||
{
|
||||
*pm = 0;
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
STDMETHODIMP AXClientSite :: GetContainer(IOleContainer**pc)
|
||||
{
|
||||
*pc = 0;
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
STDMETHODIMP AXClientSite :: ShowObject()
|
||||
{
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
STDMETHODIMP AXClientSite :: OnShowWindow(BOOL f)
|
||||
{
|
||||
InvalidateRect(Window, 0, TRUE);
|
||||
InvalidateRect(Parent, 0, TRUE);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
STDMETHODIMP AXClientSite :: RequestNewObjectLayout()
|
||||
{
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
STDMETHODIMP_(void) AXClientSite :: OnViewChange(DWORD dwAspect,LONG lIndex)
|
||||
{
|
||||
}
|
||||
|
||||
STDMETHODIMP_(void) AXClientSite :: OnRename(IMoniker * pmk)
|
||||
{
|
||||
}
|
||||
|
||||
STDMETHODIMP_(void) AXClientSite :: OnSave()
|
||||
{
|
||||
}
|
||||
|
||||
STDMETHODIMP_(void) AXClientSite :: OnClose()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
// IOleInPlaceSite methods
|
||||
STDMETHODIMP AXClientSite :: GetWindow(HWND *p)
|
||||
{
|
||||
*p = Window;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
STDMETHODIMP AXClientSite :: ContextSensitiveHelp(BOOL)
|
||||
{
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
|
||||
STDMETHODIMP AXClientSite :: CanInPlaceActivate()
|
||||
{
|
||||
if (InPlace)
|
||||
{
|
||||
CalledCanInPlace = true;
|
||||
return S_OK;
|
||||
}
|
||||
return S_FALSE;
|
||||
}
|
||||
|
||||
STDMETHODIMP AXClientSite :: OnInPlaceActivate()
|
||||
{
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
STDMETHODIMP AXClientSite :: OnUIActivate()
|
||||
{
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
STDMETHODIMP AXClientSite :: GetWindowContext(IOleInPlaceFrame** ppFrame,IOleInPlaceUIWindow **ppDoc,LPRECT r1,LPRECT r2,LPOLEINPLACEFRAMEINFO o)
|
||||
{
|
||||
*ppFrame = (IOleInPlaceFrame*)this;
|
||||
AddRef();
|
||||
|
||||
*ppDoc = NULL;
|
||||
GetClientRect(Window,r1);
|
||||
GetClientRect(Window,r2);
|
||||
o->cb = sizeof(OLEINPLACEFRAMEINFO);
|
||||
o->fMDIApp = false;
|
||||
o->hwndFrame = Parent;
|
||||
o->haccel = 0;
|
||||
o->cAccelEntries = 0;
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
STDMETHODIMP AXClientSite :: Scroll(SIZE s)
|
||||
{
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
STDMETHODIMP AXClientSite :: OnUIDeactivate(int)
|
||||
{
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
STDMETHODIMP AXClientSite :: OnInPlaceDeactivate()
|
||||
{
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
STDMETHODIMP AXClientSite :: DiscardUndoState()
|
||||
{
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
STDMETHODIMP AXClientSite :: DeactivateAndUndo()
|
||||
{
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
STDMETHODIMP AXClientSite :: OnPosRectChange(LPCRECT)
|
||||
{
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
// IOleInPlaceFrame methods
|
||||
STDMETHODIMP AXClientSite :: GetBorder(LPRECT l)
|
||||
{
|
||||
GetClientRect(Window,l);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
STDMETHODIMP AXClientSite :: RequestBorderSpace(LPCBORDERWIDTHS b)
|
||||
{
|
||||
//return S_OK;
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
STDMETHODIMP AXClientSite :: SetBorderSpace(LPCBORDERWIDTHS b)
|
||||
{
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
STDMETHODIMP AXClientSite :: SetActiveObject(IOleInPlaceActiveObject*pV,LPCOLESTR s)
|
||||
{
|
||||
ax->Pao = pV;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
STDMETHODIMP AXClientSite :: SetStatusText(LPCOLESTR t)
|
||||
{
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
STDMETHODIMP AXClientSite :: EnableModeless(BOOL f)
|
||||
{
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
STDMETHODIMP AXClientSite :: TranslateAccelerator(LPMSG,WORD)
|
||||
{
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
|
||||
// IDispatch Methods
|
||||
HRESULT _stdcall AXClientSite :: GetTypeInfoCount(
|
||||
unsigned int * pctinfo) {return E_NOTIMPL;}
|
||||
|
||||
HRESULT _stdcall AXClientSite :: GetTypeInfo(
|
||||
unsigned int iTInfo,
|
||||
LCID lcid,
|
||||
ITypeInfo FAR* FAR* ppTInfo) {return E_NOTIMPL;}
|
||||
|
||||
HRESULT _stdcall AXClientSite :: GetIDsOfNames(
|
||||
REFIID riid,
|
||||
OLECHAR FAR* FAR*,
|
||||
unsigned int cNames,
|
||||
LCID lcid,
|
||||
DISPID FAR* ) {return E_NOTIMPL;}
|
||||
|
||||
|
||||
// Other Methods
|
||||
void AX :: Init(char* cls)
|
||||
{
|
||||
wchar_t x[1000] = {0};
|
||||
MultiByteToWideChar(CP_ACP,0,cls,-1,x,1000);
|
||||
CLSIDFromString(x,&clsid);
|
||||
iid = (IID*)&IID_IOleObject;
|
||||
OleObject = 0;
|
||||
Storage = 0;
|
||||
View = 0;
|
||||
Data = 0;
|
||||
Unk = 0;
|
||||
Pao = 0;
|
||||
AdviseToken = 0;
|
||||
memset(DAdviseToken,0,sizeof(DAdviseToken));
|
||||
Site.ax = this;
|
||||
}
|
||||
|
||||
AX :: AX(char* cls)
|
||||
{
|
||||
Init(cls);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void AX :: Clean()
|
||||
{
|
||||
if (Site.InPlace == true)
|
||||
{
|
||||
Site.InPlace = false;
|
||||
IOleInPlaceObject* iib = 0;
|
||||
if (OleObject)
|
||||
OleObject->QueryInterface(IID_IOleInPlaceObject,(void**)&iib);
|
||||
if (iib)
|
||||
{
|
||||
iib->UIDeactivate();
|
||||
iib->InPlaceDeactivate();
|
||||
iib->Release();
|
||||
}
|
||||
}
|
||||
|
||||
if (AdviseToken && OleObject)
|
||||
{
|
||||
OleObject->Unadvise(AdviseToken);
|
||||
AdviseToken = 0;
|
||||
}
|
||||
if (Data)
|
||||
{
|
||||
for(int i = 0 ; i < 100 ; i++)
|
||||
if (DAdviseToken[i])
|
||||
Data->DUnadvise(DAdviseToken[i]);
|
||||
memset(DAdviseToken,0,sizeof(DAdviseToken));
|
||||
}
|
||||
|
||||
|
||||
if (Pao) Pao->Release();
|
||||
if (Unk) Unk->Release();
|
||||
if (Data) Data->Release();
|
||||
if (View) View->Release();
|
||||
if (Storage) Storage->Release();
|
||||
if (OleObject) OleObject->Release();
|
||||
Unk = 0;
|
||||
Data = 0;
|
||||
View = 0;
|
||||
Storage = 0;
|
||||
OleObject = 0;
|
||||
|
||||
}
|
||||
|
||||
AX :: ~AX()
|
||||
{
|
||||
Clean();
|
||||
}
|
||||
|
||||
CLSID AX :: GetCLSID()
|
||||
{
|
||||
return clsid;
|
||||
}
|
||||
|
||||
HRESULT _stdcall AXClientSite :: InsertMenus(HMENU h,LPOLEMENUGROUPWIDTHS x)
|
||||
{
|
||||
/* AX * t = (AX*)ax;
|
||||
if (t->AddMenu)
|
||||
{
|
||||
x->width[0] = 0;
|
||||
x->width[2] = 0;
|
||||
x->width[4] = 0;
|
||||
//InsertMenu(h,0,MF_BYPOSITION | MF_POPUP,(int)Menu,"test");
|
||||
return S_OK;
|
||||
}
|
||||
*/
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
HRESULT _stdcall AXClientSite :: SetMenu(HMENU h,HOLEMENU hO,HWND hw)
|
||||
{
|
||||
AX * t = (AX*)ax;
|
||||
/* if (t->AddMenu)
|
||||
{
|
||||
if (!h && !hO)
|
||||
{
|
||||
//::SetMenu(Window,Menu);
|
||||
//DrawMenuBar(Window);
|
||||
::SetMenu(Parent,Menu);
|
||||
DrawMenuBar(Parent);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
//::SetMenu(Window,h);
|
||||
//DrawMenuBar(Window);
|
||||
|
||||
//HMENU hm = GetMenu(Parent);
|
||||
//AppendMenu(hm,MF_POPUP | MF_MENUBREAK,(int)h,0);
|
||||
//::SetMenu(Parent,hm);
|
||||
::SetMenu(Parent,h);
|
||||
DrawMenuBar(Parent);
|
||||
|
||||
//hOleWindow = hw;
|
||||
//OleSetMenuDescriptor(hO,Window,hw,0,0);
|
||||
OleSetMenuDescriptor(hO,Parent,hw,0,0);
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
*/
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT _stdcall AXClientSite :: RemoveMenus(HMENU h)
|
||||
{
|
||||
AX * t = (AX*)ax;
|
||||
if (t->AddMenu)
|
||||
{
|
||||
if (!h)
|
||||
return S_OK;
|
||||
|
||||
int c = GetMenuItemCount(h);
|
||||
for (int i = c ; i >= 0 ; i--)
|
||||
{
|
||||
HMENU hh = GetSubMenu(h,i);
|
||||
if (hh == Menu)
|
||||
RemoveMenu(h,i,MF_BYPOSITION);
|
||||
}
|
||||
if (h == Menu)
|
||||
DestroyMenu(h);
|
||||
|
||||
//DrawMenuBar(Window);
|
||||
DrawMenuBar(Parent);
|
||||
return S_OK;
|
||||
}
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
|
||||
HRESULT _stdcall AXClientSite :: Invoke(
|
||||
DISPID dispIdMember,
|
||||
REFIID riid,
|
||||
LCID lcid,
|
||||
WORD wFlags,
|
||||
DISPPARAMS FAR* pDispParams,
|
||||
VARIANT FAR* pVarResult,
|
||||
EXCEPINFO FAR* pExcepInfo,
|
||||
unsigned int FAR* puArgErr)
|
||||
{
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
|
||||
void _stdcall AXClientSite :: OnDataChange(FORMATETC *pFormatEtc,STGMEDIUM *pStgmed)
|
||||
{
|
||||
// Notify our app that a change is being requested
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// Window Procedure for AX control
|
||||
LRESULT CALLBACK AXWndProc(HWND hh,UINT mm,WPARAM ww,LPARAM ll)
|
||||
{
|
||||
if (mm == WM_CREATE)
|
||||
{
|
||||
char tit[1000] = {0};
|
||||
HRESULT hr;
|
||||
|
||||
GetWindowTextA(hh,tit,1000);
|
||||
|
||||
AX* ax;
|
||||
ax = new AX(tit);
|
||||
|
||||
SetWindowLong(hh,GWL_USERDATA,(LONG)ax);
|
||||
ax->Site.Window = hh;
|
||||
ax->Site.Parent = GetParent(hh);
|
||||
|
||||
hr = StgCreateDocfile(0,STGM_READWRITE | STGM_SHARE_EXCLUSIVE | STGM_DIRECT | STGM_CREATE,0,&ax->Storage);
|
||||
ax->Site.Window = hh;
|
||||
|
||||
REFIID rid = *ax->iid;
|
||||
hr = OleCreate(ax->GetCLSID(),rid,OLERENDER_DRAW,0,&ax->Site,ax->Storage,(void**)&ax->OleObject);
|
||||
|
||||
|
||||
|
||||
if (!ax->OleObject)
|
||||
{
|
||||
delete ax;
|
||||
SetWindowLong(hh,GWL_USERDATA,0);
|
||||
return -1;
|
||||
}
|
||||
|
||||
hr = OleSetContainedObject(ax->OleObject, TRUE);
|
||||
hr = ax->OleObject->Advise(&ax->Site,&ax->AdviseToken);
|
||||
hr = ax->OleObject->QueryInterface(IID_IViewObject,(void**)&ax->View);
|
||||
hr = ax->OleObject->QueryInterface(IID_IDataObject,(void**)&ax->Data);
|
||||
if (ax->View)
|
||||
hr = ax->View->SetAdvise(DVASPECT_CONTENT,0,&ax->Site);
|
||||
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (mm == WM_DESTROY)
|
||||
{
|
||||
AX* ax = (AX*)GetWindowLong(hh,GWL_USERDATA);
|
||||
if (!ax)
|
||||
return 0;
|
||||
ax->Clean();
|
||||
return true;
|
||||
}
|
||||
|
||||
if (mm == AX_SETDATAADVISE)
|
||||
{
|
||||
AX* ax = (AX*)GetWindowLong(hh,GWL_USERDATA);
|
||||
if (!ax)
|
||||
return 0;
|
||||
|
||||
// 1.Enum available FORMATETC structures
|
||||
// 2.Set Data Advise specified to index ww
|
||||
if (!ax->Data)
|
||||
return 0;
|
||||
|
||||
IEnumFORMATETC* ief = 0;
|
||||
int i = 0;
|
||||
|
||||
FORMATETC fe;
|
||||
ax->Data->EnumFormatEtc((LPARAM)ll,&ief);
|
||||
if (!ief)
|
||||
return 0;
|
||||
for(;;)
|
||||
{
|
||||
HRESULT hr = ief->Next(1,&fe,0);
|
||||
if (hr != S_OK)
|
||||
break;
|
||||
if (ww == i)
|
||||
break;
|
||||
i++;
|
||||
}
|
||||
ief->Release();
|
||||
if (ww == -1)
|
||||
return i;
|
||||
|
||||
if (ax->Data)
|
||||
ax->Data->DAdvise(&fe,0,&ax->Site,&ax->DAdviseToken[ww]);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
if (mm == AX_GETAXINTERFACE)
|
||||
{
|
||||
AX* ax = (AX*)GetWindowLong(hh,GWL_USERDATA);
|
||||
return (LONG)ax;
|
||||
}
|
||||
|
||||
if (mm == AX_QUERYINTERFACE)
|
||||
{
|
||||
char* p = (char*)ww;
|
||||
AX* ax = (AX*)GetWindowLong(hh,GWL_USERDATA);
|
||||
if (!ax)
|
||||
return 0;
|
||||
return ax->OleObject->QueryInterface((REFIID)*p,(void**)ll);
|
||||
}
|
||||
|
||||
if (mm == WM_LBUTTONDBLCLK)
|
||||
{
|
||||
PostMessage(hh,AX_INPLACE,1,0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
if (mm == AX_INPLACE)
|
||||
{
|
||||
AX* ax = (AX*)GetWindowLong(hh,GWL_USERDATA);
|
||||
if (!ax)
|
||||
return 0;
|
||||
if (!ax->OleObject)
|
||||
return 0;
|
||||
RECT rect;
|
||||
HRESULT hr;
|
||||
::GetClientRect(hh,&rect);
|
||||
|
||||
if (ax->Site.InPlace == false && ww == 1) // Activate In Place
|
||||
{
|
||||
ax->Site.InPlace = true;
|
||||
ax->Site.ExternalPlace = ll;
|
||||
hr = ax->OleObject->DoVerb(OLEIVERB_INPLACEACTIVATE,0,&ax->Site,0,hh,&rect);
|
||||
InvalidateRect(hh,0,true);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (ax->Site.InPlace == true && ww == 0) // Deactivate
|
||||
{
|
||||
ax->Site.InPlace = false;
|
||||
|
||||
IOleInPlaceObject* iib;
|
||||
ax->OleObject->QueryInterface(IID_IOleInPlaceObject,(void**)&iib);
|
||||
if (iib)
|
||||
{
|
||||
iib->UIDeactivate();
|
||||
iib->InPlaceDeactivate();
|
||||
iib->Release();
|
||||
InvalidateRect(hh,0,true);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (mm == WM_SIZE)
|
||||
{
|
||||
AX* ax = (AX*)GetWindowLong(hh,GWL_USERDATA);
|
||||
if (!ax)
|
||||
return 0;
|
||||
if (!ax->OleObject)
|
||||
return 0;
|
||||
|
||||
DefWindowProc(hh,mm,ww,ll);
|
||||
|
||||
if (ax->Site.InPlace == true)
|
||||
{
|
||||
SendMessage(hh,AX_INPLACE,0,0);
|
||||
InvalidateRect(hh,0,true);
|
||||
SendMessage(hh,AX_INPLACE,1,0);
|
||||
}
|
||||
|
||||
IOleInPlaceObject* pl;
|
||||
ax->OleObject->QueryInterface(IID_IOleInPlaceObject,(void**)&pl);
|
||||
if (!pl)
|
||||
return 0;
|
||||
RECT r;
|
||||
GetClientRect(ax->Site.Window,&r);
|
||||
pl->SetObjectRects(&r,&r);
|
||||
pl->Release();
|
||||
return 0;
|
||||
}
|
||||
|
||||
return DefWindowProc(hh,mm,ww,ll);
|
||||
}
|
||||
|
||||
// Registration function
|
||||
ATOM AXRegister()
|
||||
{
|
||||
WNDCLASSEXA wC = {0};
|
||||
|
||||
wC.cbSize = sizeof(wC);
|
||||
wC.style = CS_GLOBALCLASS | CS_DBLCLKS;
|
||||
wC.lpfnWndProc = AXWndProc;
|
||||
wC.cbWndExtra = 4;
|
||||
wC.hInstance = GetModuleHandle(0);
|
||||
wC.lpszClassName = "AX";
|
||||
return RegisterClassExA(&wC);
|
||||
}
|
||||
|
||||
142
ax.h
Normal file
142
ax.h
Normal file
@@ -0,0 +1,142 @@
|
||||
// AX.H
|
||||
|
||||
// messages
|
||||
#define AX_QUERYINTERFACE (WM_USER + 1)
|
||||
#define AX_INPLACE (WM_USER + 2)
|
||||
#define AX_GETAXINTERFACE (WM_USER + 3)
|
||||
#define AX_CONNECTOBJECT (WM_USER + 4)
|
||||
#define AX_DISCONNECTOBJECT (WM_USER + 5)
|
||||
#define AX_SETDATAADVISE (WM_USER + 6)
|
||||
#define AX_DOVERB (WM_USER + 7)
|
||||
|
||||
|
||||
// Registration function
|
||||
ATOM AXRegister();
|
||||
|
||||
|
||||
// Class AXClientSide
|
||||
class AXClientSite :
|
||||
public IOleClientSite,
|
||||
public IDispatch,
|
||||
public IAdviseSink,
|
||||
public IOleInPlaceSite,
|
||||
public IOleInPlaceFrame
|
||||
{
|
||||
protected:
|
||||
|
||||
int refNum;
|
||||
|
||||
public:
|
||||
|
||||
|
||||
HWND Window;
|
||||
HWND Parent;
|
||||
HMENU Menu;
|
||||
bool InPlace;
|
||||
bool ExternalPlace;
|
||||
bool CalledCanInPlace;
|
||||
|
||||
class AX* ax;
|
||||
|
||||
// MyClientSite Methods
|
||||
AXClientSite();
|
||||
virtual ~AXClientSite();
|
||||
STDMETHODIMP_(void) OnDataChange2(FORMATETC*);
|
||||
|
||||
// IUnknown methods
|
||||
STDMETHODIMP QueryInterface(REFIID iid,void**ppvObject);
|
||||
STDMETHODIMP_(ULONG) AddRef();
|
||||
STDMETHODIMP_(ULONG) Release();
|
||||
|
||||
// IOleClientSite methods
|
||||
STDMETHODIMP SaveObject();
|
||||
STDMETHODIMP GetMoniker(DWORD dwA,DWORD dwW,IMoniker**pm);
|
||||
STDMETHODIMP GetContainer(IOleContainer**pc);
|
||||
STDMETHODIMP ShowObject();
|
||||
STDMETHODIMP OnShowWindow(BOOL f);
|
||||
STDMETHODIMP RequestNewObjectLayout();
|
||||
|
||||
// IAdviseSink methods
|
||||
STDMETHODIMP_(void) OnDataChange(FORMATETC *pFormatEtc,STGMEDIUM *pStgmed);
|
||||
|
||||
STDMETHODIMP_(void) OnViewChange(DWORD dwAspect,LONG lIndex);
|
||||
STDMETHODIMP_(void) OnRename(IMoniker * pmk);
|
||||
STDMETHODIMP_(void) OnSave();
|
||||
STDMETHODIMP_(void) OnClose();
|
||||
|
||||
// IOleInPlaceSite methods
|
||||
STDMETHODIMP GetWindow(HWND *p);
|
||||
STDMETHODIMP ContextSensitiveHelp(BOOL);
|
||||
STDMETHODIMP CanInPlaceActivate();
|
||||
STDMETHODIMP OnInPlaceActivate();
|
||||
STDMETHODIMP OnUIActivate();
|
||||
STDMETHODIMP GetWindowContext(IOleInPlaceFrame** ppFrame,IOleInPlaceUIWindow **ppDoc,LPRECT r1,LPRECT r2,LPOLEINPLACEFRAMEINFO o);
|
||||
STDMETHODIMP Scroll(SIZE s);
|
||||
STDMETHODIMP OnUIDeactivate(int);
|
||||
STDMETHODIMP OnInPlaceDeactivate();
|
||||
STDMETHODIMP DiscardUndoState();
|
||||
STDMETHODIMP DeactivateAndUndo();
|
||||
STDMETHODIMP OnPosRectChange(LPCRECT);
|
||||
|
||||
// IOleInPlaceFrame methods
|
||||
STDMETHODIMP GetBorder(LPRECT l);
|
||||
STDMETHODIMP RequestBorderSpace(LPCBORDERWIDTHS);
|
||||
STDMETHODIMP SetBorderSpace(LPCBORDERWIDTHS w);
|
||||
STDMETHODIMP SetActiveObject(IOleInPlaceActiveObject*pV,LPCOLESTR s);
|
||||
STDMETHODIMP InsertMenus(HMENU h,LPOLEMENUGROUPWIDTHS x);
|
||||
STDMETHODIMP SetMenu(HMENU h,HOLEMENU hO,HWND hw);
|
||||
STDMETHODIMP RemoveMenus(HMENU h);
|
||||
STDMETHODIMP SetStatusText(LPCOLESTR t);
|
||||
STDMETHODIMP EnableModeless(BOOL f);
|
||||
STDMETHODIMP TranslateAccelerator(LPMSG,WORD);
|
||||
|
||||
|
||||
// IDispatch Methods
|
||||
HRESULT _stdcall GetTypeInfoCount(unsigned int * pctinfo);
|
||||
HRESULT _stdcall GetTypeInfo(unsigned int iTInfo,LCID lcid,ITypeInfo FAR* FAR* ppTInfo);
|
||||
HRESULT _stdcall GetIDsOfNames(REFIID riid,OLECHAR FAR* FAR*,unsigned int cNames,LCID lcid,DISPID FAR* );
|
||||
HRESULT _stdcall Invoke(DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS FAR* pDispParams,VARIANT FAR* pVarResult,EXCEPINFO FAR* pExcepInfo,unsigned int FAR* puArgErr);
|
||||
|
||||
// IOleControlSite Methods
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
// Class AX
|
||||
class AX
|
||||
{
|
||||
public:
|
||||
|
||||
AX(char* clsid);
|
||||
CLSID GetCLSID();
|
||||
~AX();
|
||||
|
||||
|
||||
void Init(char* clsid);
|
||||
void Clean();
|
||||
|
||||
AXClientSite Site;
|
||||
IID* iid;
|
||||
IOleObject* OleObject;
|
||||
IStorage* Storage;
|
||||
IViewObject* View;
|
||||
IDataObject* Data;
|
||||
IUnknown* Unk;
|
||||
IOleInPlaceActiveObject* Pao;
|
||||
//AX_CONNECTSTRUCT* tcs;
|
||||
bool AddMenu;
|
||||
DWORD AdviseToken;
|
||||
DWORD DAdviseToken[100];
|
||||
|
||||
|
||||
|
||||
|
||||
private:
|
||||
|
||||
CLSID clsid;
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
BIN
content/cursor.png
Normal file
BIN
content/cursor.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 576 B |
BIN
content/cursor2.png
Normal file
BIN
content/cursor2.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 637 B |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user