Compare commits
1 Commits
XplicitNgi
...
0.0.13a
| Author | SHA1 | Date | |
|---|---|---|---|
| 88f99db867 |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -51,5 +51,3 @@ log.txt
|
|||||||
G3DTest.suo
|
G3DTest.suo
|
||||||
G3DTest.suo
|
G3DTest.suo
|
||||||
stderr.txt
|
stderr.txt
|
||||||
desktop.ini
|
|
||||||
main.cpp
|
|
||||||
|
|||||||
112
AudioPlayer.cpp
112
AudioPlayer.cpp
@@ -1,112 +0,0 @@
|
|||||||
#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");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
#include <G3DAll.h>
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
class AudioPlayer
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
AudioPlayer(void);
|
|
||||||
~AudioPlayer(void);
|
|
||||||
static void playSound(std::string);
|
|
||||||
static void init();
|
|
||||||
};
|
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
#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;
|
|
||||||
}
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
#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;
|
|
||||||
};
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
#include "BrowserCallHandler.h"
|
|
||||||
|
|
||||||
BrowserCallHandler::BrowserCallHandler(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
BrowserCallHandler::~BrowserCallHandler(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
#include <Mshtmhst.h>
|
|
||||||
class BrowserCallHandler : IDocHostUIHandler
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
BrowserCallHandler(void);
|
|
||||||
~BrowserCallHandler(void);
|
|
||||||
};
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
#include "ButtonListener.h"
|
|
||||||
|
|
||||||
|
|
||||||
ButtonListener::ButtonListener()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
ButtonListener::~ButtonListener(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void ButtonListener::onButton1MouseClick(BaseButtonInstance* button)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
#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...
|
|
||||||
};
|
|
||||||
@@ -1,235 +0,0 @@
|
|||||||
#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);
|
|
||||||
}
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
#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;
|
|
||||||
};
|
|
||||||
@@ -1,551 +0,0 @@
|
|||||||
#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;
|
|
||||||
}
|
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
#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
60
Demo.h
@@ -1,60 +0,0 @@
|
|||||||
#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.
34
Dialogs.rc
34
Dialogs.rc
@@ -7,7 +7,7 @@
|
|||||||
//
|
//
|
||||||
// Generated from the TEXTINCLUDE 2 resource.
|
// Generated from the TEXTINCLUDE 2 resource.
|
||||||
//
|
//
|
||||||
#include "windows.h"
|
#include "afxres.h"
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
#undef APSTUDIO_READONLY_SYMBOLS
|
#undef APSTUDIO_READONLY_SYMBOLS
|
||||||
@@ -34,7 +34,7 @@ END
|
|||||||
|
|
||||||
2 TEXTINCLUDE
|
2 TEXTINCLUDE
|
||||||
BEGIN
|
BEGIN
|
||||||
"#include ""windows.h""\r\n"
|
"#include ""afxres.h""\r\n"
|
||||||
"\0"
|
"\0"
|
||||||
END
|
END
|
||||||
|
|
||||||
@@ -61,19 +61,37 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_CAN
|
|||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// Icon
|
// Dialog
|
||||||
//
|
//
|
||||||
|
|
||||||
// Icon with lowest ID value placed first to ensure application icon
|
IDD_ABOUT_DIALOG DIALOGEX 0, 0, 226, 151
|
||||||
// remains consistent on all systems.
|
STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
IDI_ICON1 ICON "icon1.ico"
|
CAPTION "About"
|
||||||
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
|
BEGIN
|
||||||
|
DEFPUSHBUTTON "OK",IDOK,169,130,50,14
|
||||||
|
PUSHBUTTON "Cancel",IDCANCEL,112,130,50,14
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// Bitmap
|
// DESIGNINFO
|
||||||
//
|
//
|
||||||
|
|
||||||
IDB_BITMAP1 BITMAP "Parts.bmp"
|
#ifdef APSTUDIO_INVOKED
|
||||||
|
GUIDELINES DESIGNINFO
|
||||||
|
BEGIN
|
||||||
|
IDD_ABOUT_DIALOG, DIALOG
|
||||||
|
BEGIN
|
||||||
|
LEFTMARGIN, 7
|
||||||
|
RIGHTMARGIN, 219
|
||||||
|
TOPMARGIN, 7
|
||||||
|
BOTTOMMARGIN, 144
|
||||||
|
END
|
||||||
|
END
|
||||||
|
#endif // APSTUDIO_INVOKED
|
||||||
|
|
||||||
#endif // English (Canada) resources
|
#endif // English (Canada) resources
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|||||||
17
Enum.h
17
Enum.h
@@ -1,17 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
namespace Enum
|
|
||||||
{
|
|
||||||
namespace SurfaceType
|
|
||||||
{
|
|
||||||
enum Value {
|
|
||||||
Smooth, Bumps, Welds, Glue
|
|
||||||
};
|
|
||||||
}
|
|
||||||
namespace Shape
|
|
||||||
{
|
|
||||||
enum Value {
|
|
||||||
Block, Sphere, Cylinder
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
14
Enums.h
14
Enums.h
@@ -1,14 +0,0 @@
|
|||||||
#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
BIN
G3DTest.aps
Binary file not shown.
BIN
G3DTest.suo
Normal file
BIN
G3DTest.suo
Normal file
Binary file not shown.
230
G3DTest.vcproj
230
G3DTest.vcproj
@@ -3,7 +3,7 @@
|
|||||||
ProjectType="Visual C++"
|
ProjectType="Visual C++"
|
||||||
Version="8.00"
|
Version="8.00"
|
||||||
Name="G3DTest"
|
Name="G3DTest"
|
||||||
ProjectGUID="{277D185B-AEBA-4F75-A7FC-F1EBE787C200}"
|
ProjectGUID="{6C4D6EEF-B1D1-456A-B850-92CAB17124BE}"
|
||||||
RootNamespace="G3DTest"
|
RootNamespace="G3DTest"
|
||||||
>
|
>
|
||||||
<Platforms>
|
<Platforms>
|
||||||
@@ -21,7 +21,6 @@
|
|||||||
ConfigurationType="1"
|
ConfigurationType="1"
|
||||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
|
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
|
||||||
UseOfMFC="0"
|
UseOfMFC="0"
|
||||||
UseOfATL="0"
|
|
||||||
ATLMinimizesCRunTimeLibraryUsage="false"
|
ATLMinimizesCRunTimeLibraryUsage="false"
|
||||||
CharacterSet="2"
|
CharacterSet="2"
|
||||||
>
|
>
|
||||||
@@ -52,7 +51,7 @@
|
|||||||
InlineFunctionExpansion="1"
|
InlineFunctionExpansion="1"
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
|
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
|
||||||
StringPooling="true"
|
StringPooling="true"
|
||||||
RuntimeLibrary="2"
|
RuntimeLibrary="0"
|
||||||
EnableFunctionLevelLinking="true"
|
EnableFunctionLevelLinking="true"
|
||||||
PrecompiledHeaderFile=".\Release/G3DTest.pch"
|
PrecompiledHeaderFile=".\Release/G3DTest.pch"
|
||||||
AssemblerListingLocation=".\Release/"
|
AssemblerListingLocation=".\Release/"
|
||||||
@@ -74,8 +73,7 @@
|
|||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCLinkerTool"
|
Name="VCLinkerTool"
|
||||||
AdditionalDependencies="Advapi32.lib UxTheme.lib Comctl32.lib Comdlg32.lib Shell32.lib"
|
OutputFile=".\Release/G3DTest.exe"
|
||||||
OutputFile="./G3DTest.exe"
|
|
||||||
LinkIncremental="1"
|
LinkIncremental="1"
|
||||||
SuppressStartupBanner="true"
|
SuppressStartupBanner="true"
|
||||||
ProgramDatabaseFile=".\Release/G3DTest.pdb"
|
ProgramDatabaseFile=".\Release/G3DTest.pdb"
|
||||||
@@ -147,8 +145,7 @@
|
|||||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
|
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
|
||||||
MinimalRebuild="false"
|
MinimalRebuild="false"
|
||||||
BasicRuntimeChecks="0"
|
BasicRuntimeChecks="0"
|
||||||
RuntimeLibrary="3"
|
RuntimeLibrary="2"
|
||||||
EnableFunctionLevelLinking="false"
|
|
||||||
PrecompiledHeaderFile=".\Debug/G3DTest.pch"
|
PrecompiledHeaderFile=".\Debug/G3DTest.pch"
|
||||||
AssemblerListingLocation=".\Debug/"
|
AssemblerListingLocation=".\Debug/"
|
||||||
ObjectFile=".\Debug/"
|
ObjectFile=".\Debug/"
|
||||||
@@ -170,13 +167,12 @@
|
|||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCLinkerTool"
|
Name="VCLinkerTool"
|
||||||
AdditionalDependencies="Advapi32.lib UxTheme.lib Comctl32.lib Comdlg32.lib Shell32.lib"
|
OutputFile=".\Debug/G3DTest.exe"
|
||||||
OutputFile="./G3DTest-Debug.exe"
|
|
||||||
LinkIncremental="2"
|
LinkIncremental="2"
|
||||||
SuppressStartupBanner="true"
|
SuppressStartupBanner="true"
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
ProgramDatabaseFile=".\Debug/G3DTest.pdb"
|
ProgramDatabaseFile=".\Debug/G3DTest.pdb"
|
||||||
SubSystem="1"
|
SubSystem="2"
|
||||||
TargetMachine="1"
|
TargetMachine="1"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
@@ -235,47 +231,11 @@
|
|||||||
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||||
>
|
>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\AudioPlayer.cpp"
|
RelativePath=".\Dialogs.rc"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\ax.cpp"
|
RelativePath=".\Instance.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>
|
||||||
<File
|
<File
|
||||||
@@ -299,201 +259,33 @@
|
|||||||
</FileConfiguration>
|
</FileConfiguration>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\PartInstance.cpp"
|
RelativePath=".\PhysicalInstance.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</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>
|
||||||
<Filter
|
<Filter
|
||||||
Name="Header Files"
|
Name="Header Files"
|
||||||
Filter="h;hpp;hxx;hm;inl"
|
Filter="h;hpp;hxx;hm;inl"
|
||||||
>
|
>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\AudioPlayer.h"
|
RelativePath=".\Instance.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\ax.h"
|
RelativePath=".\PhysicalInstance.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>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\resource.h"
|
RelativePath=".\resource.h"
|
||||||
>
|
>
|
||||||
</File>
|
</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>
|
||||||
<Filter
|
<Filter
|
||||||
Name="Resource Files"
|
Name="Resource Files"
|
||||||
Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
|
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>
|
</Filter>
|
||||||
</Files>
|
</Files>
|
||||||
<Globals>
|
<Globals>
|
||||||
<Global
|
|
||||||
Name="RESOURCE_FILE"
|
|
||||||
Value="Dialogs.rc"
|
|
||||||
/>
|
|
||||||
</Globals>
|
</Globals>
|
||||||
</VisualStudioProject>
|
</VisualStudioProject>
|
||||||
|
|||||||
19
Globals.cpp
19
Globals.cpp
@@ -1,19 +0,0 @@
|
|||||||
#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
25
Globals.h
@@ -1,25 +0,0 @@
|
|||||||
#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;
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
#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);
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
#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);
|
|
||||||
};
|
|
||||||
@@ -1,68 +0,0 @@
|
|||||||
#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
17
IEBrowser.h
@@ -1,17 +0,0 @@
|
|||||||
//#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;
|
|
||||||
};
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
#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;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
#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 *);
|
|
||||||
|
|
||||||
};
|
|
||||||
@@ -1,133 +0,0 @@
|
|||||||
#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());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
#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,170 +1,21 @@
|
|||||||
#define WINVER 0x0400
|
|
||||||
#include <G3DAll.h>
|
#include <G3DAll.h>
|
||||||
#include "Instance.h"
|
#include "Instance.h"
|
||||||
|
|
||||||
|
std::string name;
|
||||||
|
Instance* parent;
|
||||||
|
static std::string className = "Instance";
|
||||||
|
|
||||||
Instance::Instance(void)
|
Instance::Instance(void)
|
||||||
{
|
{
|
||||||
parent = NULL;
|
|
||||||
name = "Default Game Instance";
|
name = "Default Game Instance";
|
||||||
className = "BaseInstance";
|
className = "Part";
|
||||||
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)
|
Instance::~Instance(void)
|
||||||
{
|
{
|
||||||
for(size_t i = 0; i < children.size(); i++)
|
name = "Default Game Instance";
|
||||||
{
|
|
||||||
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,34 +1,11 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <G3DAll.h>
|
|
||||||
#include "propertyGrid.h"
|
|
||||||
class Instance
|
class Instance
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
bool canDelete;
|
|
||||||
Instance(void);
|
Instance(void);
|
||||||
Instance(const Instance&);
|
~Instance(void);
|
||||||
virtual ~Instance(void);
|
|
||||||
std::string name;
|
std::string name;
|
||||||
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.
|
Instance* parent; // Another pointer.
|
||||||
PROPGRIDITEM createPGI(LPSTR catalog, LPSTR propName, LPSTR propDesc, LPARAM curVal, INT type);
|
std::string className;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,73 +0,0 @@
|
|||||||
#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);
|
|
||||||
}
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
#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);
|
|
||||||
};
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
#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
15
PVInstance.h
@@ -1,15 +0,0 @@
|
|||||||
#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
603
PartInstance.cpp
@@ -1,603 +0,0 @@
|
|||||||
#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;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,66 +0,0 @@
|
|||||||
#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;
|
|
||||||
};
|
|
||||||
29
PhysicalInstance.cpp
Normal file
29
PhysicalInstance.cpp
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
#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)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
15
PhysicalInstance.h
Normal file
15
PhysicalInstance.h
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "instance.h"
|
||||||
|
|
||||||
|
class PhysicalInstance :
|
||||||
|
public Instance
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
PhysicalInstance(void);
|
||||||
|
~PhysicalInstance(void);
|
||||||
|
Vector3 size;
|
||||||
|
Vector3 position;
|
||||||
|
Vector3 velocity;
|
||||||
|
Vector3 rotvelocity;
|
||||||
|
Color3 color;
|
||||||
|
};
|
||||||
@@ -1,332 +0,0 @@
|
|||||||
#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);
|
|
||||||
}
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
#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
10
README.md
@@ -1,10 +0,0 @@
|
|||||||
# 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
|
|
||||||
@@ -1,122 +0,0 @@
|
|||||||
#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()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
#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*);
|
|
||||||
};
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
|
|
||||||
#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;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
#include <windows.h>
|
|
||||||
|
|
||||||
bool createWindowClass(const char* name,WNDPROC proc,HMODULE hInstance);
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
#include "WorkspaceInstance.h"
|
|
||||||
|
|
||||||
|
|
||||||
WorkspaceInstance::WorkspaceInstance(void)
|
|
||||||
{
|
|
||||||
GroupInstance::GroupInstance();
|
|
||||||
name = "Workspace";
|
|
||||||
className = "Workspace";
|
|
||||||
canDelete = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
WorkspaceInstance::~WorkspaceInstance(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
#include "GroupInstance.h"
|
|
||||||
|
|
||||||
class WorkspaceInstance :
|
|
||||||
public GroupInstance
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
WorkspaceInstance(void);
|
|
||||||
~WorkspaceInstance(void);
|
|
||||||
};
|
|
||||||
639
ax.cpp
639
ax.cpp
@@ -1,639 +0,0 @@
|
|||||||
// 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
142
ax.h
@@ -1,142 +0,0 @@
|
|||||||
// 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;
|
|
||||||
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 576 B |
Binary file not shown.
|
Before Width: | Height: | Size: 637 B |
BIN
content/font/adventure.fnt
Normal file
BIN
content/font/adventure.fnt
Normal file
Binary file not shown.
BIN
content/font/anglo-small.fnt
Normal file
BIN
content/font/anglo-small.fnt
Normal file
Binary file not shown.
BIN
content/font/anglo.fnt
Normal file
BIN
content/font/anglo.fnt
Normal file
Binary file not shown.
BIN
content/font/bahaus-small.fnt
Normal file
BIN
content/font/bahaus-small.fnt
Normal file
Binary file not shown.
BIN
content/font/bahaus.fnt
Normal file
BIN
content/font/bahaus.fnt
Normal file
Binary file not shown.
BIN
content/font/baskerville-small.fnt
Normal file
BIN
content/font/baskerville-small.fnt
Normal file
Binary file not shown.
BIN
content/font/baskerville.fnt
Normal file
BIN
content/font/baskerville.fnt
Normal file
Binary file not shown.
BIN
content/font/britannic-small.fnt
Normal file
BIN
content/font/britannic-small.fnt
Normal file
Binary file not shown.
BIN
content/font/britannic.fnt
Normal file
BIN
content/font/britannic.fnt
Normal file
Binary file not shown.
BIN
content/font/broadway-small.fnt
Normal file
BIN
content/font/broadway-small.fnt
Normal file
Binary file not shown.
BIN
content/font/broadway.fnt
Normal file
BIN
content/font/broadway.fnt
Normal file
Binary file not shown.
BIN
content/font/bubble-small.fnt
Normal file
BIN
content/font/bubble-small.fnt
Normal file
Binary file not shown.
BIN
content/font/bubble.fnt
Normal file
BIN
content/font/bubble.fnt
Normal file
Binary file not shown.
BIN
content/font/burton-small.fnt
Normal file
BIN
content/font/burton-small.fnt
Normal file
Binary file not shown.
BIN
content/font/burton.fnt
Normal file
BIN
content/font/burton.fnt
Normal file
Binary file not shown.
BIN
content/font/century-small.fnt
Normal file
BIN
content/font/century-small.fnt
Normal file
Binary file not shown.
BIN
content/font/century.fnt
Normal file
BIN
content/font/century.fnt
Normal file
Binary file not shown.
BIN
content/font/colonna-small.fnt
Normal file
BIN
content/font/colonna-small.fnt
Normal file
Binary file not shown.
BIN
content/font/colonna.fnt
Normal file
BIN
content/font/colonna.fnt
Normal file
Binary file not shown.
BIN
content/font/cooper-small.fnt
Normal file
BIN
content/font/cooper-small.fnt
Normal file
Binary file not shown.
BIN
content/font/cooper.fnt
Normal file
BIN
content/font/cooper.fnt
Normal file
Binary file not shown.
BIN
content/font/courier-small.fnt
Normal file
BIN
content/font/courier-small.fnt
Normal file
Binary file not shown.
BIN
content/font/curly-small.fnt
Normal file
BIN
content/font/curly-small.fnt
Normal file
Binary file not shown.
BIN
content/font/curly.fnt
Normal file
BIN
content/font/curly.fnt
Normal file
Binary file not shown.
BIN
content/font/desmonda-small.fnt
Normal file
BIN
content/font/desmonda-small.fnt
Normal file
Binary file not shown.
BIN
content/font/desmonda.fnt
Normal file
BIN
content/font/desmonda.fnt
Normal file
Binary file not shown.
BIN
content/font/diner-small.fnt
Normal file
BIN
content/font/diner-small.fnt
Normal file
Binary file not shown.
BIN
content/font/diner.fnt
Normal file
BIN
content/font/diner.fnt
Normal file
Binary file not shown.
BIN
content/font/elephant-small.fnt
Normal file
BIN
content/font/elephant-small.fnt
Normal file
Binary file not shown.
BIN
content/font/elephant.fnt
Normal file
BIN
content/font/elephant.fnt
Normal file
Binary file not shown.
BIN
content/font/emperor-small.fnt
Normal file
BIN
content/font/emperor-small.fnt
Normal file
Binary file not shown.
BIN
content/font/emperor.fnt
Normal file
BIN
content/font/emperor.fnt
Normal file
Binary file not shown.
BIN
content/font/eurostyle-small.fnt
Normal file
BIN
content/font/eurostyle-small.fnt
Normal file
Binary file not shown.
BIN
content/font/eurostyle.fnt
Normal file
BIN
content/font/eurostyle.fnt
Normal file
Binary file not shown.
BIN
content/font/federation.fnt
Normal file
BIN
content/font/federation.fnt
Normal file
Binary file not shown.
BIN
content/font/gradl-small.fnt
Normal file
BIN
content/font/gradl-small.fnt
Normal file
Binary file not shown.
BIN
content/font/gradl.fnt
Normal file
BIN
content/font/gradl.fnt
Normal file
Binary file not shown.
BIN
content/font/led.fnt
Normal file
BIN
content/font/led.fnt
Normal file
Binary file not shown.
BIN
content/font/leditalic.fnt
Normal file
BIN
content/font/leditalic.fnt
Normal file
Binary file not shown.
BIN
content/font/news.fnt
Normal file
BIN
content/font/news.fnt
Normal file
Binary file not shown.
BIN
content/font/note-small.fnt
Normal file
BIN
content/font/note-small.fnt
Normal file
Binary file not shown.
BIN
content/font/note.fnt
Normal file
BIN
content/font/note.fnt
Normal file
Binary file not shown.
BIN
content/font/onyx-small.fnt
Normal file
BIN
content/font/onyx-small.fnt
Normal file
Binary file not shown.
BIN
content/font/onyx.fnt
Normal file
BIN
content/font/onyx.fnt
Normal file
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