Compare commits
74 Commits
v0.0.104.5
...
v0.0.106.4
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2af7077a0a | ||
| 728e67e1a5 | |||
| 8fa056e191 | |||
|
|
69aacebbb2 | ||
| 791fa55767 | |||
| 3b83e527f8 | |||
|
|
de53dcf6b0 | ||
|
|
8ef3bcd352 | ||
|
|
7adf511bf7 | ||
|
|
72cdf2af35 | ||
|
|
d9a0e1e120 | ||
|
|
90a1a1b325 | ||
|
|
984bea6136 | ||
|
|
083cb38e81 | ||
|
|
6d65cd2a56 | ||
|
|
223364907f | ||
|
|
d96bcd2a2b | ||
|
|
6de83febb5 | ||
|
|
aaceb4eb21 | ||
|
|
e1716e7417 | ||
|
|
f5aaef5b16 | ||
|
|
b66d524d7f | ||
|
|
d468545428 | ||
|
|
1356ef52ab | ||
|
|
67a5d99e1d | ||
|
|
31db4dc894 | ||
|
|
50a5fd3ce1 | ||
|
|
a02a367a6e | ||
|
|
33a898e359 | ||
|
|
f46e24d8f1 | ||
|
|
b2db375ecf | ||
|
|
9039fbe862 | ||
|
|
145e5c3340 | ||
|
|
ad741b86e5 | ||
|
|
a04c178ed4 | ||
|
|
584154d676 | ||
|
|
6e2c135b47 | ||
|
|
e8ecb14f64 | ||
|
|
ad29d96068 | ||
|
|
43647086fb | ||
|
|
eb07d852db | ||
|
|
7f5ab0df7f | ||
|
|
3d31421164 | ||
|
|
7b6cab626e | ||
|
|
736a63e89f | ||
|
|
a74d485d1c | ||
|
|
b7f276f849 | ||
|
|
e0be70f5e6 | ||
|
|
4ff212f2f3 | ||
|
|
af8823c508 | ||
|
|
c27aa6a114 | ||
|
|
df77572fe7 | ||
|
|
8c47024960 | ||
|
|
16a7b893e4 | ||
| 4a38f077a3 | |||
|
|
e17aa16086 | ||
|
|
316359a395 | ||
|
|
226f2adda4 | ||
|
|
d3f9b74ba1 | ||
|
|
ce999d226d | ||
| 032e2ae668 | |||
|
|
bc9a5bfc72 | ||
|
|
8e73755d80 | ||
|
|
2f3cb43807 | ||
|
|
550962f1e6 | ||
|
|
c86fb57710 | ||
|
|
daacf6ae02 | ||
|
|
066e955933 | ||
|
|
bba534be3c | ||
|
|
e473d0eb7e | ||
|
|
aab26d2e35 | ||
|
|
b9305d1fb9 | ||
|
|
f9c4700e7d | ||
|
|
239f7b8fa8 |
25
.github/workflows/sync-develop.yml
vendored
Normal file
25
.github/workflows/sync-develop.yml
vendored
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
name: Sync Back to Develop
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
sync-branches:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: Syncing branches
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
- name: Set up Node
|
||||||
|
uses: actions/setup-node@v1
|
||||||
|
with:
|
||||||
|
node-version: 12
|
||||||
|
- name: Opening pull request
|
||||||
|
id: pull
|
||||||
|
uses: tretuna/sync-branches@1.2.0
|
||||||
|
with:
|
||||||
|
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
|
||||||
|
FROM_BRANCH: 'master'
|
||||||
|
TO_BRANCH: 'develop'
|
||||||
8
.gitignore
vendored
8
.gitignore
vendored
@@ -36,12 +36,13 @@
|
|||||||
*.user
|
*.user
|
||||||
*.pdb
|
*.pdb
|
||||||
*.idb
|
*.idb
|
||||||
*.manifest
|
|
||||||
*.htm
|
|
||||||
*.res
|
*.res
|
||||||
*.ilk
|
*.ilk
|
||||||
*.dep
|
*.dep
|
||||||
|
|
||||||
|
# ResEditor files
|
||||||
|
*.aps
|
||||||
|
|
||||||
/Debug
|
/Debug
|
||||||
/Release
|
/Release
|
||||||
stdout.txt
|
stdout.txt
|
||||||
@@ -55,4 +56,5 @@ desktop.ini
|
|||||||
*.db
|
*.db
|
||||||
|
|
||||||
#Redist
|
#Redist
|
||||||
!Installer/Redist/*
|
!Installer/Redist/*
|
||||||
|
UpgradeLog.htm
|
||||||
|
|||||||
BIN
B3dIcon.ico
Normal file
BIN
B3dIcon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 108 KiB |
14
Blocks3D.exe.manifest
Normal file
14
Blocks3D.exe.manifest
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
|
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
|
||||||
|
<assemblyIdentity
|
||||||
|
version="0.0.106.2"
|
||||||
|
processorArchitecture="*"
|
||||||
|
name="Blocks3D.Blocks3D.Blocks3D"
|
||||||
|
type="win32"
|
||||||
|
/>
|
||||||
|
<dependency>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/>
|
||||||
|
</dependentAssembly>
|
||||||
|
</dependency>
|
||||||
|
</assembly>
|
||||||
1854
Blocks3D.vcproj
1854
Blocks3D.vcproj
File diff suppressed because it is too large
Load Diff
217
Dialogs.rc
217
Dialogs.rc
@@ -1,121 +1,96 @@
|
|||||||
// Microsoft Visual C++ generated resource script.
|
// Generated by ResEdit 1.6.6
|
||||||
//
|
// Copyright (C) 2006-2015
|
||||||
#include "resource.h"
|
// http://www.resedit.net
|
||||||
|
|
||||||
#define APSTUDIO_READONLY_SYMBOLS
|
#include <windows.h>
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
#include <commctrl.h>
|
||||||
//
|
#include <richedit.h>
|
||||||
// Generated from the TEXTINCLUDE 2 resource.
|
#include "src/include/resource.h"
|
||||||
//
|
|
||||||
#include "afxres.h"
|
#define APP_GENER 0
|
||||||
|
#define APP_MAJOR 0
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
#define APP_MINOR 106
|
||||||
#undef APSTUDIO_READONLY_SYMBOLS
|
#define APP_PATCH 4
|
||||||
|
#define APP_VER_STRING APP_GENER.APP_MAJOR.APP_MINOR.APP_PATCH
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
|
||||||
// Neutral resources
|
#define VER_PREFIX( N ) v##N
|
||||||
|
#define HSTR( N ) #N
|
||||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU)
|
#define STR( N ) HSTR( N )
|
||||||
#ifdef _WIN32
|
#define VER_STR( N ) STR( VER_PREFIX( N ) )
|
||||||
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
|
||||||
#pragma code_page(1252)
|
|
||||||
#endif //_WIN32
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
//
|
||||||
//
|
// Bitmap resources
|
||||||
// Icon
|
//
|
||||||
//
|
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_CAN
|
||||||
|
IDB_BITMAP1 BITMAP "Parts.bmp"
|
||||||
// Icon with lowest ID value placed first to ensure application icon
|
|
||||||
// remains consistent on all systems.
|
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
||||||
IDI_ICON1 ICON "roblox_RN1_icon.ico"
|
1 VERSIONINFO
|
||||||
#endif // Neutral resources
|
FILEVERSION APP_GENER,APP_MAJOR,APP_MINOR,APP_PATCH
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
PRODUCTVERSION APP_GENER,APP_MAJOR,APP_MINOR,APP_PATCH
|
||||||
|
FILEOS VOS__WINDOWS32
|
||||||
|
FILETYPE VFT_APP
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
FILESUBTYPE VFT2_UNKNOWN
|
||||||
// English (Canada) resources
|
FILEFLAGSMASK 0
|
||||||
|
FILEFLAGS 0
|
||||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENC)
|
{
|
||||||
#ifdef _WIN32
|
BLOCK "StringFileInfo"
|
||||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_CAN
|
{
|
||||||
#pragma code_page(1252)
|
BLOCK "100901B5"
|
||||||
#endif //_WIN32
|
{
|
||||||
|
VALUE "Comments", ""
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
VALUE "CompanyName", "Blocks3D Team"
|
||||||
//
|
VALUE "FileDescription", "Blocks 3D"
|
||||||
// Bitmap
|
VALUE "FileVersion", VER_STR(APP_VER_STRING)
|
||||||
//
|
VALUE "InternalName", "Blocks3D"
|
||||||
|
VALUE "LegalCopyright", "Blocks3D Team - 2022"
|
||||||
IDB_BITMAP1 BITMAP "Parts.bmp"
|
VALUE "LegalTrademarks", ""
|
||||||
|
VALUE "OriginalFilename", "Blocks3D.exe"
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
VALUE "PrivateBuild", ""
|
||||||
//
|
VALUE "ProductName", "Blocks3D"
|
||||||
// Dialog
|
VALUE "ProductVersion", VER_STR(APP_VER_STRING)
|
||||||
//
|
VALUE "SpecialBuild", ""
|
||||||
|
}
|
||||||
IDD_DIALOG1 DIALOGEX 0, 0, 304, 46
|
}
|
||||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
BLOCK "VarFileInfo"
|
||||||
CAPTION "Dialog"
|
{
|
||||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
VALUE "Translation", 0x1009, 0x01B5
|
||||||
BEGIN
|
}
|
||||||
DEFPUSHBUTTON "OK",IDOK,247,7,50,14
|
}
|
||||||
PUSHBUTTON "Cancel",IDCANCEL,247,24,50,14
|
|
||||||
EDITTEXT IDC_EDIT1,68,7,162,14,ES_AUTOHSCROLL
|
//
|
||||||
LTEXT "Class:",-1,43,7,20,8
|
// Dialog resources
|
||||||
END
|
//
|
||||||
|
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
||||||
|
IDD_DIALOG1 DIALOG 0, 0, 295, 43
|
||||||
#ifdef APSTUDIO_INVOKED
|
STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SETFOREGROUND | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
EXSTYLE WS_EX_WINDOWEDGE
|
||||||
//
|
CAPTION "Insert Object"
|
||||||
// TEXTINCLUDE
|
FONT 8, "Ms Shell Dlg"
|
||||||
//
|
{
|
||||||
|
EDITTEXT IDC_EDIT1, 35, 6, 195, 14, ES_AUTOHSCROLL, WS_EX_LEFT
|
||||||
1 TEXTINCLUDE
|
LTEXT "Class:", 0, 10, 9, 20, 9, SS_LEFT, WS_EX_LEFT
|
||||||
BEGIN
|
PUSHBUTTON "Cancel", IDCANCEL, 237, 24, 50, 14, 0, WS_EX_LEFT
|
||||||
"resource.h\0"
|
DEFPUSHBUTTON "OK", IDOK, 237, 6, 50, 14, 0, WS_EX_LEFT
|
||||||
END
|
}
|
||||||
|
|
||||||
|
|
||||||
3 TEXTINCLUDE
|
|
||||||
BEGIN
|
//
|
||||||
"\r\n"
|
// Icon resources
|
||||||
END
|
//
|
||||||
|
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_CAN
|
||||||
#endif // APSTUDIO_INVOKED
|
IDI_ICON1 ICON "FatB3dIcon.ico"
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
|
||||||
//
|
//
|
||||||
// DESIGNINFO
|
// Manifest resources
|
||||||
//
|
//
|
||||||
|
#ifndef _DEBUG
|
||||||
#ifdef APSTUDIO_INVOKED
|
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
||||||
GUIDELINES DESIGNINFO
|
1 MANIFEST ".\\Blocks3D.exe.manifest"
|
||||||
BEGIN
|
#endif
|
||||||
IDD_DIALOG1, DIALOG
|
|
||||||
BEGIN
|
|
||||||
LEFTMARGIN, 7
|
|
||||||
RIGHTMARGIN, 297
|
|
||||||
TOPMARGIN, 7
|
|
||||||
BOTTOMMARGIN, 39
|
|
||||||
END
|
|
||||||
END
|
|
||||||
#endif // APSTUDIO_INVOKED
|
|
||||||
|
|
||||||
#endif // English (Canada) resources
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef APSTUDIO_INVOKED
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
// Generated from the TEXTINCLUDE 3 resource.
|
|
||||||
//
|
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
|
||||||
#endif // not APSTUDIO_INVOKED
|
|
||||||
|
|
||||||
BIN
FatB3dIcon.ico
Normal file
BIN
FatB3dIcon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 108 KiB |
@@ -1,14 +1,15 @@
|
|||||||
;InnoSetupVersion=5.5.7
|
;InnoSetupVersion=5.4.3
|
||||||
|
#define AppVer GetFileVersion('..\Blocks3D.exe')
|
||||||
|
|
||||||
[Setup]
|
[Setup]
|
||||||
AppName=Blocks3D
|
AppName=Blocks3D
|
||||||
|
AppVersion=v{#AppVer}
|
||||||
AppId={{4C5DF268-0208-4CDE-A7F0-65F7E2CB5067}
|
AppId={{4C5DF268-0208-4CDE-A7F0-65F7E2CB5067}
|
||||||
AppVersion=v0_0_104_4
|
|
||||||
AppPublisherURL=http://blocks3d.com/
|
AppPublisherURL=http://blocks3d.com/
|
||||||
AppSupportURL=http://blocks3d.com/
|
AppSupportURL=http://blocks3d.com/
|
||||||
AppUpdatesURL=http://blocks3d.com/
|
AppUpdatesURL=http://blocks3d.com/
|
||||||
DefaultDirName={%localappdata}\Blocks3D
|
DefaultDirName={%localappdata}\Blocks3D
|
||||||
OutputBaseFilename=Blocks3D_Setup_{#SetupSetting("AppVersion")}
|
OutputBaseFilename=Blocks3D_Setup_v{#AppVer}
|
||||||
Compression=lzma2
|
Compression=lzma2
|
||||||
PrivilegesRequired=lowest
|
PrivilegesRequired=lowest
|
||||||
WizardImageFile=setup.bmp
|
WizardImageFile=setup.bmp
|
||||||
@@ -40,8 +41,6 @@ Name: "{group}\Blocks3D Editor"; Filename: "{app}\Blocks3D.exe"; Tasks: startscu
|
|||||||
Name: "{userdesktop}\Play Blocks3D"; Filename: "{%programfiles}\Internet Explorer\iexplore.exe"; Parameters: "http://www.blocks3d.com/Games"; IconFilename: "{app}\Blocks3D.exe"; Tasks: startscut;
|
Name: "{userdesktop}\Play Blocks3D"; Filename: "{%programfiles}\Internet Explorer\iexplore.exe"; Parameters: "http://www.blocks3d.com/Games"; IconFilename: "{app}\Blocks3D.exe"; Tasks: startscut;
|
||||||
Name: "{userdesktop}\Blocks3D Editor"; Filename: "{app}\Blocks3D.exe"; Tasks: desktopicon
|
Name: "{userdesktop}\Blocks3D Editor"; Filename: "{app}\Blocks3D.exe"; Tasks: desktopicon
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[Tasks]
|
[Tasks]
|
||||||
Name: "instvc"; Description: "Install Visual C++ Redistributable 2005 SP1 (Requires elevated permissions)";
|
Name: "instvc"; Description: "Install Visual C++ Redistributable 2005 SP1 (Requires elevated permissions)";
|
||||||
Name: "desktopicon"; Description: "Create Desktop Icons";
|
Name: "desktopicon"; Description: "Create Desktop Icons";
|
||||||
|
|||||||
6
ODE Copyright.txt
Normal file
6
ODE Copyright.txt
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
Open Dynamics Engine
|
||||||
|
|
||||||
|
Copyright (c) 2001-2004,
|
||||||
|
Russell L. Smith.
|
||||||
|
|
||||||
|
All rights reserved.
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<body style="background-color: ButtonFace; margin: 0; padding: 5px; overflow: hidden; border: outset 2px;">
|
<body style="background-color: ButtonFace; margin: 0; padding: 5px; overflow: hidden; border: outset 2px;">
|
||||||
<span class="container" onmousedown="toolOvr(this)" onmouseup="toolOut(this)" onmouseout="toolOut(this)" onclick="alert(window.external.ToggleHopperBin(0))">
|
<span class="container" onmousedown="toolOvr(this)" onmouseup="toolOut(this)" onmouseout="toolOut(this)" onclick="window.external.ToggleHopperBin(0)">
|
||||||
<img src="../images/GameTool.png" />
|
<img src="../images/GameTool.png" />
|
||||||
</span>
|
</span>
|
||||||
<span class="container" onmousedown="toolOvr(this)" onmouseup="toolOut(this)" onmouseout="toolOut(this)" onclick="window.external.ToggleHopperBin(1)">
|
<span class="container" onmousedown="toolOvr(this)" onmouseup="toolOut(this)" onmouseout="toolOut(this)" onclick="window.external.ToggleHopperBin(1)">
|
||||||
|
|||||||
BIN
ode-0.5.7z
Normal file
BIN
ode-0.5.7z
Normal file
Binary file not shown.
2064
resource.h
2064
resource.h
File diff suppressed because it is too large
Load Diff
@@ -32,7 +32,6 @@ class Application { // : public GApp {
|
|||||||
PartInstance* makePart();
|
PartInstance* makePart();
|
||||||
void drawButtons(RenderDevice* rd);
|
void drawButtons(RenderDevice* rd);
|
||||||
void drawOutline(Vector3 from, Vector3 to, RenderDevice* rd, LightingParameters lighting, Vector3 size, Vector3 pos, CoordinateFrame c);
|
void drawOutline(Vector3 from, Vector3 to, RenderDevice* rd, LightingParameters lighting, Vector3 size, Vector3 pos, CoordinateFrame c);
|
||||||
std::vector<Instance*> getSelection();
|
|
||||||
void deleteInstance();
|
void deleteInstance();
|
||||||
void run();
|
void run();
|
||||||
void QuitApp();
|
void QuitApp();
|
||||||
@@ -60,6 +59,7 @@ class Application { // : public GApp {
|
|||||||
Tool * tool;
|
Tool * tool;
|
||||||
void changeTool(Tool *);
|
void changeTool(Tool *);
|
||||||
Mouse mouse;
|
Mouse mouse;
|
||||||
|
bool viewportHasFocus();
|
||||||
private:
|
private:
|
||||||
bool mouseMoveState;
|
bool mouseMoveState;
|
||||||
RenderDevice* renderDevice;
|
RenderDevice* renderDevice;
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ class CameraController {
|
|||||||
void panRight();
|
void panRight();
|
||||||
void tiltUp();
|
void tiltUp();
|
||||||
void tiltDown();
|
void tiltDown();
|
||||||
|
void zoomExtents();
|
||||||
void Zoom(short delta);
|
void Zoom(short delta);
|
||||||
bool onMouseWheel(int x, int y, short delta);
|
bool onMouseWheel(int x, int y, short delta);
|
||||||
GCamera* getCamera();
|
GCamera* getCamera();
|
||||||
|
|||||||
@@ -2,8 +2,10 @@
|
|||||||
#include "WorkspaceInstance.h"
|
#include "WorkspaceInstance.h"
|
||||||
#include "LevelInstance.h"
|
#include "LevelInstance.h"
|
||||||
#include "PartInstance.h"
|
#include "PartInstance.h"
|
||||||
|
#include "SelectionService.h"
|
||||||
#include "rapidxml/rapidxml.hpp"
|
#include "rapidxml/rapidxml.hpp"
|
||||||
#include "GuiRootInstance.h"
|
#include "GuiRootInstance.h"
|
||||||
|
#include "XplicitNgine/XplicitNgine.h"
|
||||||
|
|
||||||
class GuiRootInstance;
|
class GuiRootInstance;
|
||||||
|
|
||||||
@@ -23,21 +25,18 @@ public:
|
|||||||
void drawMessage(RenderDevice*);
|
void drawMessage(RenderDevice*);
|
||||||
WorkspaceInstance* getWorkspace();
|
WorkspaceInstance* getWorkspace();
|
||||||
LevelInstance * getLevel();
|
LevelInstance * getLevel();
|
||||||
|
XplicitNgine * getEngine();
|
||||||
std::string message;
|
std::string message;
|
||||||
std::string _loadedFileName;
|
std::string _loadedFileName;
|
||||||
bool showMessage;
|
bool showMessage;
|
||||||
G3D::GFontRef font;
|
G3D::GFontRef font;
|
||||||
GuiRootInstance* getGuiRoot();
|
GuiRootInstance* getGuiRoot();
|
||||||
//float mousex;
|
SelectionService* getSelectionService();
|
||||||
//float mousey;
|
|
||||||
//Vector2 getMousePos();
|
|
||||||
//void setMousePos(int x,int y);
|
|
||||||
//void setMousePos(Vector2 pos);
|
|
||||||
//bool mouseButton1Down;
|
|
||||||
PartInstance* makePart();
|
PartInstance* makePart();
|
||||||
void clearLevel();
|
void clearLevel();
|
||||||
void toggleRun();
|
void toggleRun();
|
||||||
bool isRunning();
|
bool isRunning();
|
||||||
|
void resetEngine();
|
||||||
#if _DEBUG
|
#if _DEBUG
|
||||||
void modXMLLevel(float modY);
|
void modXMLLevel(float modY);
|
||||||
#endif
|
#endif
|
||||||
@@ -53,5 +52,7 @@ private:
|
|||||||
WorkspaceInstance* workspace;
|
WorkspaceInstance* workspace;
|
||||||
LevelInstance * level;
|
LevelInstance * level;
|
||||||
GuiRootInstance* guiRoot;
|
GuiRootInstance* guiRoot;
|
||||||
|
SelectionService* selectionService;
|
||||||
bool running;
|
bool running;
|
||||||
|
XplicitNgine * xplicitNgine;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "instance.h"
|
#include "instance.h"
|
||||||
#include "enum.h"
|
#include "enum.h"
|
||||||
|
#include <ode/ode.h>
|
||||||
|
|
||||||
class PVInstance :
|
class PVInstance :
|
||||||
public Instance
|
public Instance
|
||||||
|
|||||||
@@ -29,7 +29,8 @@ public:
|
|||||||
//Variables
|
//Variables
|
||||||
Color3 color;
|
Color3 color;
|
||||||
bool canCollide;
|
bool canCollide;
|
||||||
bool anchored;
|
dBodyID physBody;
|
||||||
|
dGeomID physGeom[3];
|
||||||
|
|
||||||
//Getters
|
//Getters
|
||||||
Vector3 getPosition();
|
Vector3 getPosition();
|
||||||
@@ -47,10 +48,14 @@ public:
|
|||||||
void setVelocity(Vector3);
|
void setVelocity(Vector3);
|
||||||
void setRotVelocity(Vector3);
|
void setRotVelocity(Vector3);
|
||||||
void setCFrame(CoordinateFrame);
|
void setCFrame(CoordinateFrame);
|
||||||
|
void setCFrameNoSync(CoordinateFrame);
|
||||||
void setSize(Vector3);
|
void setSize(Vector3);
|
||||||
void setShape(Enum::Shape::Value shape);
|
void setShape(Enum::Shape::Value shape);
|
||||||
void setChanged();
|
void setChanged();
|
||||||
void setSurface(int face, Enum::SurfaceType::Value surface);
|
void setSurface(int face, Enum::SurfaceType::Value surface);
|
||||||
|
void setAnchored(bool anchored);
|
||||||
|
bool isAnchored();
|
||||||
|
float getMass();
|
||||||
|
|
||||||
//Collision
|
//Collision
|
||||||
bool collides(PartInstance * part);
|
bool collides(PartInstance * part);
|
||||||
@@ -60,6 +65,7 @@ public:
|
|||||||
virtual std::vector<PROPGRIDITEM> getProperties();
|
virtual std::vector<PROPGRIDITEM> getProperties();
|
||||||
virtual void PropUpdate(LPPROPGRIDITEM &pItem);
|
virtual void PropUpdate(LPPROPGRIDITEM &pItem);
|
||||||
private:
|
private:
|
||||||
|
bool anchored;
|
||||||
Vector3 position;
|
Vector3 position;
|
||||||
Vector3 size;
|
Vector3 size;
|
||||||
Vector3 velocity;
|
Vector3 velocity;
|
||||||
@@ -67,4 +73,4 @@ private:
|
|||||||
bool changed;
|
bool changed;
|
||||||
Box itemBox;
|
Box itemBox;
|
||||||
GLuint glList;
|
GLuint glList;
|
||||||
};
|
};
|
||||||
21
src/include/DataModelV2/SelectionService.h
Normal file
21
src/include/DataModelV2/SelectionService.h
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "Instance.h"
|
||||||
|
#include "PropertyWindow.h"
|
||||||
|
|
||||||
|
class SelectionService : public Instance
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
SelectionService(void);
|
||||||
|
~SelectionService(void);
|
||||||
|
SelectionService(const SelectionService &oinst);
|
||||||
|
std::vector<Instance *> getSelection();
|
||||||
|
void clearSelection();
|
||||||
|
bool isSelected(Instance * instance);
|
||||||
|
void addSelected(Instance * instance);
|
||||||
|
void removeSelected(Instance * instance);
|
||||||
|
void addSelected(const std::vector<Instance *> &instances);
|
||||||
|
void setPropertyWindow(PropertyWindow * propertyWindow);
|
||||||
|
private:
|
||||||
|
std::vector<Instance *> selection;
|
||||||
|
PropertyWindow * propertyWindow;
|
||||||
|
};
|
||||||
@@ -9,5 +9,6 @@ public:
|
|||||||
WorkspaceInstance(void);
|
WorkspaceInstance(void);
|
||||||
~WorkspaceInstance(void);
|
~WorkspaceInstance(void);
|
||||||
void clearChildren();
|
void clearChildren();
|
||||||
|
void zoomToExtents();
|
||||||
std::vector<PartInstance *> partObjects;
|
std::vector<PartInstance *> partObjects;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "DataModelV2/DataModelInstance.h"
|
#include "DataModelV2/DataModelInstance.h"
|
||||||
|
#include "XplicitNgine/XplicitNgine.h"
|
||||||
|
|
||||||
class Application;
|
class Application;
|
||||||
|
|
||||||
@@ -25,9 +25,9 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
extern std::vector<Instance*> postRenderStack;
|
extern std::vector<Instance*> postRenderStack;
|
||||||
extern std::vector<Instance*> g_selectedInstances;
|
|
||||||
extern bool running;
|
extern bool running;
|
||||||
extern DataModelInstance* g_dataModel;
|
extern DataModelInstance* g_dataModel;
|
||||||
|
extern XplicitNgine* g_xplicitNgine;
|
||||||
extern Application* g_usableApp;
|
extern Application* g_usableApp;
|
||||||
|
|
||||||
extern GFontRef g_fntdominant;
|
extern GFontRef g_fntdominant;
|
||||||
|
|||||||
@@ -5,13 +5,14 @@ class PropertyWindow {
|
|||||||
public:
|
public:
|
||||||
PropertyWindow(int x, int y, int sx, int sy, HMODULE hThisInstance);
|
PropertyWindow(int x, int y, int sx, int sy, HMODULE hThisInstance);
|
||||||
bool onCreate(int x, int y, int sx, int sy, HMODULE hThisInstance);
|
bool onCreate(int x, int y, int sx, int sy, HMODULE hThisInstance);
|
||||||
void UpdateSelected(Instance *);
|
void UpdateSelected(std::vector<Instance *> selection);
|
||||||
void ClearProperties();
|
void ClearProperties();
|
||||||
void onResize();
|
void onResize();
|
||||||
void refreshExplorer(Instance* selectedInstance);
|
void refreshExplorer(std::vector<Instance *> selection);
|
||||||
HWND _hwndProp;
|
HWND _hwndProp;
|
||||||
private:
|
private:
|
||||||
HWND _propGrid;
|
HWND _propGrid;
|
||||||
HWND _explorerComboBox;
|
HWND _explorerComboBox;
|
||||||
void _resize();
|
void _resize();
|
||||||
|
void clearExplorer();
|
||||||
};
|
};
|
||||||
11
src/include/ToolEnum.h
Normal file
11
src/include/ToolEnum.h
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace Enum
|
||||||
|
{
|
||||||
|
namespace Hopper
|
||||||
|
{
|
||||||
|
enum Value {
|
||||||
|
GameTool = 0, Grab = 1, Clone = 2, Hammer = 3, Slingshot = 4, Rocket = 5, Laser = 6
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
26
src/include/VS2005CompatShim.h
Normal file
26
src/include/VS2005CompatShim.h
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
#ifndef COMPAT_SHIM
|
||||||
|
#define COMPAT_SHIM
|
||||||
|
#include <sstream>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
std::string toString(const T &value)
|
||||||
|
{
|
||||||
|
std::ostringstream os;
|
||||||
|
os << value;
|
||||||
|
return os.str();
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace std
|
||||||
|
{
|
||||||
|
std::string to_string( int value ) {return toString(value);}
|
||||||
|
std::string to_string( long value ) {return toString(value);}
|
||||||
|
std::string to_string( long long value ) {return toString(value);}
|
||||||
|
std::string to_string( unsigned value ) {return toString(value);}
|
||||||
|
std::string to_string( unsigned long value ) {return toString(value);}
|
||||||
|
std::string to_string( unsigned long long value ) {return toString(value);}
|
||||||
|
std::string to_string( float value ) {return toString(value);}
|
||||||
|
std::string to_string( double value ) {return toString(value);}
|
||||||
|
std::string to_string( long double value ) {return toString(value);}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
19
src/include/XplicitNgine/XplicitNgine.h
Normal file
19
src/include/XplicitNgine/XplicitNgine.h
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
#pragma once
|
||||||
|
#include <ode/ode.h>
|
||||||
|
#include "DatamodelV2/Instance.h"
|
||||||
|
#include "DatamodelV2/PartInstance.h"
|
||||||
|
|
||||||
|
class XplicitNgine : public Instance
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
XplicitNgine();
|
||||||
|
~XplicitNgine();
|
||||||
|
dWorldID physWorld;
|
||||||
|
dSpaceID physSpace;
|
||||||
|
dJointGroupID contactgroup;
|
||||||
|
|
||||||
|
void step(float stepSize);
|
||||||
|
void createBody(PartInstance* partInstance);
|
||||||
|
void deleteBody(PartInstance* partInstance);
|
||||||
|
void updateBody(PartInstance* partInstance, CoordinateFrame * cFrame);
|
||||||
|
};
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
#define IDC_PROPERTYGRID 2000
|
#define IDC_PROPERTYGRID 2000
|
||||||
#define IDC_STATIC 2
|
#define IDC_STATIC 2
|
||||||
|
|
||||||
#define IDE_EDIT 105
|
#define IDC_EDIT1 105
|
||||||
#define IDI_ICON1 102
|
#define IDI_ICON1 102
|
||||||
#define IDB_BITMAP1 103
|
#define IDB_BITMAP1 103
|
||||||
#define IDD_DIALOG1 104
|
#define IDD_DIALOG1 104
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
#include "DataModelV2/ImageButtonInstance.h"
|
#include "DataModelV2/ImageButtonInstance.h"
|
||||||
#include "DataModelV2/DataModelInstance.h"
|
#include "DataModelV2/DataModelInstance.h"
|
||||||
#include "DataModelV2/GuiRootInstance.h"
|
#include "DataModelV2/GuiRootInstance.h"
|
||||||
|
#include "XplicitNgine/XplicitNgine.h"
|
||||||
#include "CameraController.h"
|
#include "CameraController.h"
|
||||||
#include "AudioPlayer.h"
|
#include "AudioPlayer.h"
|
||||||
#include "Globals.h"
|
#include "Globals.h"
|
||||||
@@ -142,6 +143,11 @@ Application::Application(HWND parentWindow) : _propWindow(NULL) { //: GApp(setti
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Application::viewportHasFocus()
|
||||||
|
{
|
||||||
|
return GetActiveWindow() == this->_hWndMain;
|
||||||
|
}
|
||||||
|
|
||||||
void Application::navigateToolbox(std::string path)
|
void Application::navigateToolbox(std::string path)
|
||||||
{
|
{
|
||||||
int len = path.size() + 1;
|
int len = path.size() + 1;
|
||||||
@@ -153,28 +159,29 @@ void Application::navigateToolbox(std::string path)
|
|||||||
|
|
||||||
void Application::deleteInstance()
|
void Application::deleteInstance()
|
||||||
{
|
{
|
||||||
if(g_selectedInstances.size() > 0)
|
if(_dataModel->getSelectionService()->getSelection().size() > 0)
|
||||||
{
|
{
|
||||||
size_t undeletable = 0;
|
std::vector<Instance *> selection = _dataModel->getSelectionService()->getSelection();
|
||||||
while(g_selectedInstances.size() > undeletable)
|
std::vector<Instance *> toDelete;
|
||||||
|
for(size_t i = 0; i < selection.size(); i++) {
|
||||||
|
if(selection[i]->canDelete) {
|
||||||
|
toDelete.push_back(selection[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(toDelete.size() > 0)
|
||||||
{
|
{
|
||||||
if(g_selectedInstances.at(0)->canDelete)
|
AudioPlayer::playSound(GetFileInPath("/content/sounds/pageturn.wav"));
|
||||||
{
|
for(size_t i = 0; i < toDelete.size(); i++) {
|
||||||
AudioPlayer::playSound(GetFileInPath("/content/sounds/pageturn.wav"));
|
Instance* selectedInstance = toDelete[i];
|
||||||
Instance* selectedInstance = g_selectedInstances.at(0);
|
_dataModel->getSelectionService()->removeSelected(selectedInstance);
|
||||||
selectedInstance->setParent(NULL);
|
selectedInstance->setParent(NULL);
|
||||||
delete selectedInstance;
|
delete selectedInstance;
|
||||||
selectedInstance = NULL;
|
selectedInstance = NULL;
|
||||||
g_selectedInstances.erase(g_selectedInstances.begin());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
undeletable++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(g_selectedInstances.size() == 0)
|
if(_dataModel->getSelectionService()->getSelection().size() == 0)
|
||||||
g_usableApp->_propWindow->ClearProperties();
|
_dataModel->getSelectionService()->addSelected(_dataModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -187,10 +194,9 @@ void Application::onInit() {
|
|||||||
_dataModel->setName("undefined");
|
_dataModel->setName("undefined");
|
||||||
_dataModel->font = g_fntdominant;
|
_dataModel->font = g_fntdominant;
|
||||||
g_dataModel = _dataModel;
|
g_dataModel = _dataModel;
|
||||||
|
|
||||||
//initGUI();
|
|
||||||
|
|
||||||
#ifdef LEGACY_LOAD_G3DFUN_LEVEL
|
#ifdef LEGACY_LOAD_G3DFUN_LEVEL
|
||||||
|
// Anchored this baseplate for XplicitNgine tests
|
||||||
PartInstance* test = makePart();
|
PartInstance* test = makePart();
|
||||||
test->setParent(_dataModel->getWorkspace());
|
test->setParent(_dataModel->getWorkspace());
|
||||||
test->color = Color3(0.2F,0.3F,1);
|
test->color = Color3(0.2F,0.3F,1);
|
||||||
@@ -198,7 +204,8 @@ void Application::onInit() {
|
|||||||
test->setPosition(Vector3(0,0,0));
|
test->setPosition(Vector3(0,0,0));
|
||||||
test->setCFrame(test->getCFrame() * Matrix3::fromEulerAnglesXYZ(0,toRadians(0),toRadians(0)));
|
test->setCFrame(test->getCFrame() * Matrix3::fromEulerAnglesXYZ(0,toRadians(0),toRadians(0)));
|
||||||
test->setSurface(TOP, Enum::SurfaceType::Bumps);
|
test->setSurface(TOP, Enum::SurfaceType::Bumps);
|
||||||
|
test->setAnchored(true);
|
||||||
|
|
||||||
test = makePart();
|
test = makePart();
|
||||||
test->setParent(_dataModel->getWorkspace());
|
test->setParent(_dataModel->getWorkspace());
|
||||||
test->color = Color3(.5F,1,.5F);
|
test->color = Color3(.5F,1,.5F);
|
||||||
@@ -262,9 +269,6 @@ void Application::onInit() {
|
|||||||
test->setPosition(Vector3(-2,5,0));
|
test->setPosition(Vector3(-2,5,0));
|
||||||
test->setSurface(TOP, Enum::SurfaceType::Bumps);
|
test->setSurface(TOP, Enum::SurfaceType::Bumps);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
test = makePart();
|
test = makePart();
|
||||||
test->setParent(_dataModel->getWorkspace());
|
test->setParent(_dataModel->getWorkspace());
|
||||||
test->color = Color3::gray();
|
test->color = Color3::gray();
|
||||||
@@ -282,6 +286,8 @@ void Application::onInit() {
|
|||||||
_dataModel->debugGetOpen();
|
_dataModel->debugGetOpen();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
_dataModel->getSelectionService()->clearSelection();
|
||||||
|
_dataModel->getSelectionService()->addSelected(_dataModel);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -294,86 +300,15 @@ void Application::onInit() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void Application::onCleanup() {
|
void Application::onCleanup() {
|
||||||
clearInstances();
|
clearInstances();
|
||||||
sky->~Sky();
|
sky->~Sky();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Application::onLogic() {
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
Class HyperSnapSolver
|
|
||||||
|
|
||||||
function getCollisionDepth(Part colliding, part collider);
|
|
||||||
function getFaceCollision(Part colliding, part collider);
|
|
||||||
|
|
||||||
function eject(Part colliding, Part collider)
|
|
||||||
{
|
|
||||||
if(!colliding.canCollide || !collider.canCollide)
|
|
||||||
return;
|
|
||||||
if(getCollisionDepth(colliding, collider) != 0) {
|
|
||||||
int ejectMultiplier, ejectMultipliery = 1-(collider.Friction+colliding.Friction), ejectMultiplierz = 1-(collider.Friction/2+colliding.Friction/2);
|
|
||||||
if(colliding.Anchored)
|
|
||||||
ejectMultiplier = collider.elasticity;
|
|
||||||
int faceCollided = getFaceCollision(colliding, collider);
|
|
||||||
if(faceCollided % 3 == 1)
|
|
||||||
{
|
|
||||||
ejectMultipliery = ejectMultiplier;
|
|
||||||
ejectMultiplier = 1-(collider.Friction+colliding.Friction/2);
|
|
||||||
}
|
|
||||||
else if(faceCollided % 3 == 2)
|
|
||||||
{
|
|
||||||
ejectMultiplierz = ejectMultiplier;
|
|
||||||
ejectMultiplier = 1-(collider.Friction+colliding.Friction/2);
|
|
||||||
}
|
|
||||||
|
|
||||||
collider.Velocity *= Vector3.new(colliding.Velocity.x*ejectMultiplier,colliding.Velocity.y*ejectMultipliery,colliding.Velocity.z)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
double grav = 0.32666666666666666666666666666667;
|
|
||||||
void simGrav(PartInstance * collider)
|
|
||||||
{
|
|
||||||
if(!collider->anchored)
|
|
||||||
{
|
|
||||||
collider->setPosition(collider->getPosition()+collider->getVelocity());
|
|
||||||
collider->setVelocity(collider->getVelocity()-Vector3(0,grav,0));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void eject(PartInstance * colliding, PartInstance * collider)
|
|
||||||
{
|
|
||||||
if(colliding == collider || !colliding->canCollide || !collider->canCollide)
|
|
||||||
return;
|
|
||||||
if(G3D::CollisionDetection::fixedSolidBoxIntersectsFixedSolidBox(collider->getBox(), colliding->getBox()))
|
|
||||||
collider->setVelocity(collider->getVelocity().reflectionDirection(colliding->getCFrame().upVector())/1.3F);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void Application::onLogic() {
|
|
||||||
//PhysicsStart
|
|
||||||
for_each (_dataModel->getWorkspace()->partObjects.begin(), _dataModel->getWorkspace()->partObjects.end(), simGrav);
|
|
||||||
for(size_t i = 0; i < _dataModel->getWorkspace()->partObjects.size(); i++)
|
|
||||||
{
|
|
||||||
for(size_t j = 0; j < _dataModel->getWorkspace()->partObjects.size(); j++)
|
|
||||||
{
|
|
||||||
eject(_dataModel->getWorkspace()->partObjects[i], _dataModel->getWorkspace()->partObjects[j]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void Application::onNetwork() {
|
void Application::onNetwork() {
|
||||||
// Poll net messages here
|
// Poll net messages here
|
||||||
}
|
}
|
||||||
@@ -384,15 +319,38 @@ void Application::onNetwork() {
|
|||||||
// return pow(pow((double)vector1.x - (double)vector2.x, 2) + pow((double)vector1.y - (double)vector2.y, 2) + pow((double)vector1.z - (double)vector2.z, 2), 0.5);
|
// return pow(pow((double)vector1.x - (double)vector2.x, 2) + pow((double)vector1.y - (double)vector2.y, 2) + pow((double)vector1.z - (double)vector2.z, 2), 0.5);
|
||||||
//}
|
//}
|
||||||
|
|
||||||
std::vector<Instance*> Application::getSelection()
|
|
||||||
{
|
|
||||||
return g_selectedInstances;
|
|
||||||
}
|
|
||||||
void Application::onSimulation(RealTime rdt, SimTime sdt, SimTime idt) {
|
void Application::onSimulation(RealTime rdt, SimTime sdt, SimTime idt) {
|
||||||
|
|
||||||
if(_dataModel->isRunning())
|
if(_dataModel->isRunning())
|
||||||
|
{
|
||||||
|
// XplicitNgine Start
|
||||||
|
std::vector<PartInstance *> toDelete;
|
||||||
|
for(size_t i = 0; i < _dataModel->getWorkspace()->partObjects.size(); i++)
|
||||||
|
{
|
||||||
|
PartInstance* partInstance = _dataModel->getWorkspace()->partObjects[i];
|
||||||
|
if(partInstance->getPosition().y < -255)
|
||||||
|
{
|
||||||
|
toDelete.push_back(partInstance);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
_dataModel->getEngine()->createBody(partInstance);
|
||||||
|
}
|
||||||
|
while(toDelete.size() > 0)
|
||||||
|
{
|
||||||
|
PartInstance * p = toDelete.back();
|
||||||
|
toDelete.pop_back();
|
||||||
|
g_dataModel->getSelectionService()->removeSelected(p);
|
||||||
|
p->setParent(NULL);
|
||||||
|
delete p;
|
||||||
|
}
|
||||||
|
for(int i = 0; i < 6; i++)
|
||||||
|
{
|
||||||
|
_dataModel->getEngine()->step(0.1F);
|
||||||
|
}
|
||||||
onLogic();
|
onLogic();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
_dataModel->getGuiRoot()->update();
|
_dataModel->getGuiRoot()->update();
|
||||||
|
|
||||||
if(_dataModel->name != _title)
|
if(_dataModel->name != _title)
|
||||||
@@ -407,95 +365,29 @@ void Application::onSimulation(RealTime rdt, SimTime sdt, SimTime idt) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*double getOSVersion() {
|
|
||||||
OSVERSIONINFO osvi;
|
|
||||||
|
|
||||||
ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
|
|
||||||
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
|
|
||||||
|
|
||||||
GetVersionEx(&osvi);
|
|
||||||
std::string version = Convert(osvi.dwMajorVersion) + "." + Convert(osvi.dwMinorVersion);
|
|
||||||
return ::atof(version.c_str());
|
|
||||||
}*/
|
|
||||||
/*
|
|
||||||
bool IsHolding(int button)
|
|
||||||
{
|
|
||||||
return (GetKeyState(button) >> 1)>0;
|
|
||||||
}
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
void Application::onUserInput(UserInput* ui) {
|
void Application::onUserInput(UserInput* ui) {
|
||||||
if(mouseMoveState)
|
if(mouseMoveState)
|
||||||
{
|
{
|
||||||
mouseMoveState = false;
|
mouseMoveState = false;
|
||||||
tool->onMouseMoved(mouse);
|
tool->onMouseMoved(mouse);
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
if(GetHoldKeyState(VK_LCONTROL))
|
|
||||||
{
|
|
||||||
if(GetHoldKeyState('D'))
|
|
||||||
{
|
|
||||||
_messageTime = System::time();
|
|
||||||
if(debugMode())
|
|
||||||
_message = "Debug Mode Disabled";
|
|
||||||
else
|
|
||||||
_message = "Debug Mode Enabled";
|
|
||||||
setDebugMode(!debugMode());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
if(GetHoldKeyState(VK_F8))
|
if(GetHoldKeyState(VK_F8))
|
||||||
{
|
{
|
||||||
_dataModel->getGuiRoot()->setDebugMessage("FOV Set to 10", System::time());
|
_dataModel->getGuiRoot()->setDebugMessage("FOV Set to 10", System::time());
|
||||||
}
|
}
|
||||||
//}
|
|
||||||
|
|
||||||
//_dataModel->mousex = ui->getMouseX();
|
|
||||||
//_dataModel->mousey = ui->getMouseY();
|
|
||||||
mouse.setMouseDown((GetKeyState(VK_LBUTTON) & 0x100) != 0);
|
mouse.setMouseDown((GetKeyState(VK_LBUTTON) & 0x100) != 0);
|
||||||
|
|
||||||
if (GetHoldKeyState(VK_LBUTTON)) {
|
// Camera KB Handling
|
||||||
/* if (_dragging) {
|
if (GetKPBool(VK_OEM_COMMA)) //Left
|
||||||
PartInstance* part = NULL;
|
g_usableApp->cameraController.panLeft();
|
||||||
if(g_selectedInstances.size() > 0)
|
else if (GetKPBool(VK_OEM_PERIOD)) // Right
|
||||||
part = (PartInstance*) g_selectedInstances.at(0);
|
g_usableApp->cameraController.panRight();
|
||||||
Ray dragRay = cameraController.getCamera()->worldRay(mouse.x, mouse.y, renderDevice->getViewport());
|
else if (GetKPBool(0x49)) // Zoom In (I)
|
||||||
std::vector<Instance*> instances = _dataModel->getWorkspace()->getAllChildren();
|
g_usableApp->cameraController.Zoom(1);
|
||||||
for(size_t i = 0; i < instances.size(); i++)
|
else if (GetKPBool(0x4F)) // Zoom Out (O)
|
||||||
{
|
g_usableApp->cameraController.Zoom(-1);
|
||||||
if(PartInstance* moveTo = dynamic_cast<PartInstance*>(instances.at(i)))
|
|
||||||
{
|
|
||||||
float __time = testRay.intersectionTime(moveTo->getBox());
|
|
||||||
float __nearest=std::numeric_limits<float>::infinity();
|
|
||||||
if (__time != inf())
|
|
||||||
{
|
|
||||||
if (__nearest>__time)
|
|
||||||
{
|
|
||||||
// BROKEN
|
|
||||||
//Vector3 closest = (dragRay.closestPoint(moveTo->getPosition()) * 2);
|
|
||||||
//part->setPosition(closest);
|
|
||||||
//part->setPosition(Vector3(floor(closest.x),part->getPosition().y,floor(closest.z)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Sleep(10);
|
|
||||||
}*/
|
|
||||||
}
|
|
||||||
// Camera KB Handling {
|
|
||||||
if (GetKPBool(VK_OEM_COMMA)) //Left
|
|
||||||
g_usableApp->cameraController.panLeft();
|
|
||||||
else if (GetKPBool(VK_OEM_PERIOD)) // Right
|
|
||||||
g_usableApp->cameraController.panRight();
|
|
||||||
else if (GetKPBool(0x49)) // Zoom In (I)
|
|
||||||
g_usableApp->cameraController.Zoom(1);
|
|
||||||
else if (GetKPBool(0x4F)) // Zoom Out (O)
|
|
||||||
g_usableApp->cameraController.Zoom(-1);
|
|
||||||
// }
|
|
||||||
|
|
||||||
//readMouseGUIInput();
|
|
||||||
// Add other key handling here
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Application::changeTool(Tool * newTool)
|
void Application::changeTool(Tool * newTool)
|
||||||
@@ -703,17 +595,15 @@ void Application::onGraphics(RenderDevice* rd) {
|
|||||||
|
|
||||||
|
|
||||||
//Draw::box(G3D::Box(mouse.getPosition()-Vector3(2,0.5F,1),mouse.getPosition()+Vector3(2,0.5F,1)), rd, Color3::cyan(), Color4::clear());
|
//Draw::box(G3D::Box(mouse.getPosition()-Vector3(2,0.5F,1),mouse.getPosition()+Vector3(2,0.5F,1)), rd, Color3::cyan(), Color4::clear());
|
||||||
if(g_selectedInstances.size() > 0)
|
|
||||||
|
for(size_t i = 0; i < _dataModel->getSelectionService()->getSelection().size(); i++)
|
||||||
{
|
{
|
||||||
for(size_t i = 0; i < g_selectedInstances.size(); i++)
|
if(PartInstance* part = dynamic_cast<PartInstance*>(g_dataModel->getSelectionService()->getSelection()[i]))
|
||||||
{
|
{
|
||||||
if(PartInstance* part = dynamic_cast<PartInstance*>(g_selectedInstances.at(i)))
|
Vector3 size = part->getSize();
|
||||||
{
|
Vector3 pos = part->getPosition();
|
||||||
Vector3 size = part->getSize();
|
drawOutline(Vector3(0+size.x/2, 0+size.y/2, 0+size.z/2) ,Vector3(0-size.x/2,0-size.y/2,0-size.z/2), rd, lighting, Vector3(size.x/2, size.y/2, size.z/2), Vector3(pos.x, pos.y, pos.z), part->getCFrame());
|
||||||
Vector3 pos = part->getPosition();
|
}
|
||||||
drawOutline(Vector3(0+size.x/2, 0+size.y/2, 0+size.z/2) ,Vector3(0-size.x/2,0-size.y/2,0-size.z/2), rd, lighting, Vector3(size.x/2, size.y/2, size.z/2), Vector3(pos.x, pos.y, pos.z), part->getCFrame());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -802,12 +692,6 @@ void Application::onKeyUp(int key)
|
|||||||
|
|
||||||
void Application::onMouseLeftPressed(HWND hwnd,int x,int y)
|
void Application::onMouseLeftPressed(HWND hwnd,int x,int y)
|
||||||
{
|
{
|
||||||
//Removed set focus
|
|
||||||
|
|
||||||
|
|
||||||
//std::cout << "Click: " << x << "," << y << std::endl;
|
|
||||||
|
|
||||||
|
|
||||||
bool onGUI = _dataModel->getGuiRoot()->mouseInGUI(renderDevice, x, y);
|
bool onGUI = _dataModel->getGuiRoot()->mouseInGUI(renderDevice, x, y);
|
||||||
|
|
||||||
|
|
||||||
@@ -817,19 +701,6 @@ void Application::onMouseLeftPressed(HWND hwnd,int x,int y)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Application::selectInstance(Instance* selectedInstance, PropertyWindow* propWindow)
|
|
||||||
{
|
|
||||||
if(!GetHoldKeyState(VK_RCONTROL) && !GetHoldKeyState(VK_LCONTROL))
|
|
||||||
{
|
|
||||||
printf("No control key hold \n");
|
|
||||||
g_selectedInstances.clear();
|
|
||||||
}
|
|
||||||
else printf("Control held\n");
|
|
||||||
if(std::find(g_selectedInstances.begin(), g_selectedInstances.end(),selectedInstance)==g_selectedInstances.end())
|
|
||||||
g_selectedInstances.push_back(selectedInstance);
|
|
||||||
propWindow->UpdateSelected(selectedInstance);
|
|
||||||
|
|
||||||
}
|
|
||||||
G3D::RenderDevice* Application::getRenderDevice()
|
G3D::RenderDevice* Application::getRenderDevice()
|
||||||
{
|
{
|
||||||
return renderDevice;
|
return renderDevice;
|
||||||
@@ -837,13 +708,9 @@ G3D::RenderDevice* Application::getRenderDevice()
|
|||||||
|
|
||||||
void Application::onMouseLeftUp(G3D::RenderDevice* renderDevice, int x, int y)
|
void Application::onMouseLeftUp(G3D::RenderDevice* renderDevice, int x, int y)
|
||||||
{
|
{
|
||||||
//std::cout << "Release: " << x << "," << y << std::endl;
|
|
||||||
_dataModel->getGuiRoot()->onMouseLeftUp(renderDevice, x, y);
|
_dataModel->getGuiRoot()->onMouseLeftUp(renderDevice, x, y);
|
||||||
_dragging = false;
|
_dragging = false;
|
||||||
tool->onButton1MouseUp(mouse);
|
tool->onButton1MouseUp(mouse);
|
||||||
//_message = "Dragging = false.";
|
|
||||||
//_messageTime = System::time();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Application::onMouseRightPressed(int x,int y)
|
void Application::onMouseRightPressed(int x,int y)
|
||||||
@@ -863,8 +730,6 @@ void Application::onMouseMoved(int x,int y)
|
|||||||
mouse.y = y;
|
mouse.y = y;
|
||||||
//tool->onMouseMoved(mouse);
|
//tool->onMouseMoved(mouse);
|
||||||
mouseMoveState = true;
|
mouseMoveState = true;
|
||||||
//_dataModel->mousex = x;
|
|
||||||
//_dataModel->mousey = y;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
void Application::onMouseWheel(int x,int y,short delta)
|
void Application::onMouseWheel(int x,int y,short delta)
|
||||||
@@ -943,6 +808,8 @@ void Application::run() {
|
|||||||
RealTime rdt = timeStep;
|
RealTime rdt = timeStep;
|
||||||
SimTime sdt = timeStep * rate;
|
SimTime sdt = timeStep * rate;
|
||||||
SimTime idt = desiredFrameDuration * rate;
|
SimTime idt = desiredFrameDuration * rate;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
onSimulation(rdt,sdt,idt);
|
onSimulation(rdt,sdt,idt);
|
||||||
m_simulationWatch.tock();
|
m_simulationWatch.tock();
|
||||||
|
|||||||
@@ -159,6 +159,11 @@ void CameraController::tiltDown()
|
|||||||
setFrame(frame);
|
setFrame(frame);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CameraController::zoomExtents()
|
||||||
|
{
|
||||||
|
// do some weird jank math
|
||||||
|
}
|
||||||
|
|
||||||
void CameraController::centerCamera(Instance* selection)
|
void CameraController::centerCamera(Instance* selection)
|
||||||
{
|
{
|
||||||
CoordinateFrame frame = CoordinateFrame(g3dCamera.getCoordinateFrame().translation);
|
CoordinateFrame frame = CoordinateFrame(g3dCamera.getCoordinateFrame().translation);
|
||||||
@@ -188,6 +193,8 @@ void CameraController::update(Application* app)
|
|||||||
Vector3 cameraPos = g3dCamera.getCoordinateFrame().translation;
|
Vector3 cameraPos = g3dCamera.getCoordinateFrame().translation;
|
||||||
CoordinateFrame frame = g3dCamera.getCoordinateFrame();
|
CoordinateFrame frame = g3dCamera.getCoordinateFrame();
|
||||||
bool moving=false;
|
bool moving=false;
|
||||||
|
if(!app->viewportHasFocus())
|
||||||
|
return;
|
||||||
if(GetHoldKeyState('U')) {
|
if(GetHoldKeyState('U')) {
|
||||||
forwards = true;
|
forwards = true;
|
||||||
moving=true;
|
moving=true;
|
||||||
|
|||||||
58
src/source/DataModel/SelectionService.cpp
Normal file
58
src/source/DataModel/SelectionService.cpp
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
#include "DataModelV2/SelectionService.h"
|
||||||
|
|
||||||
|
SelectionService::SelectionService(void){
|
||||||
|
Instance::Instance();
|
||||||
|
propertyWindow = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
SelectionService::~SelectionService(void){
|
||||||
|
}
|
||||||
|
|
||||||
|
SelectionService::SelectionService(const SelectionService &oinst){
|
||||||
|
Instance::Instance(oinst);
|
||||||
|
propertyWindow = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::vector<Instance *> SelectionService::getSelection(){
|
||||||
|
return this->selection;
|
||||||
|
}
|
||||||
|
void SelectionService::clearSelection(){
|
||||||
|
this->selection.clear();
|
||||||
|
if(propertyWindow != NULL)
|
||||||
|
propertyWindow->ClearProperties();
|
||||||
|
printf("selectionSize: %d\n", selection.size());
|
||||||
|
}
|
||||||
|
bool SelectionService::isSelected(Instance * instance){
|
||||||
|
return std::find(selection.begin(), selection.end(), instance) != selection.end();
|
||||||
|
}
|
||||||
|
void SelectionService::addSelected(Instance * instance){
|
||||||
|
if(!isSelected(instance))
|
||||||
|
this->selection.push_back(instance);
|
||||||
|
if(propertyWindow != NULL)
|
||||||
|
propertyWindow->UpdateSelected(selection);
|
||||||
|
printf("selectionSize: %d\n", selection.size());
|
||||||
|
}
|
||||||
|
void SelectionService::removeSelected(Instance * instance){
|
||||||
|
selection.erase(std::remove(selection.begin(), selection.end(), instance), selection.end());
|
||||||
|
if(propertyWindow != NULL)
|
||||||
|
propertyWindow->UpdateSelected(selection);
|
||||||
|
printf("selectionSize: %d\n", selection.size());
|
||||||
|
}
|
||||||
|
void SelectionService::addSelected(const std::vector<Instance *> &instances){
|
||||||
|
for(size_t i = 0; i < instances.size(); i++)
|
||||||
|
{
|
||||||
|
if(!isSelected(instances[i]))
|
||||||
|
this->selection.push_back(instances[i]);
|
||||||
|
}
|
||||||
|
if(propertyWindow != NULL)
|
||||||
|
propertyWindow->UpdateSelected(selection);
|
||||||
|
printf("selectionSize: %d\n", selection.size());
|
||||||
|
}
|
||||||
|
void SelectionService::setPropertyWindow(PropertyWindow * propertyWindow)
|
||||||
|
{
|
||||||
|
this->propertyWindow = propertyWindow;
|
||||||
|
if(propertyWindow != NULL)
|
||||||
|
propertyWindow->ClearProperties();
|
||||||
|
printf("selectionSize: %d\n", selection.size());
|
||||||
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include "DataModelV2/GuiRootInstance.h"
|
#include "DataModelV2/GuiRootInstance.h"
|
||||||
|
#include "DataModelV2/ToggleImageButtonInstance.h"
|
||||||
#include "DataModelV2/DataModelInstance.h"
|
#include "DataModelV2/DataModelInstance.h"
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
@@ -19,6 +20,8 @@ DataModelInstance::DataModelInstance(void)
|
|||||||
workspace = new WorkspaceInstance();
|
workspace = new WorkspaceInstance();
|
||||||
guiRoot = new GuiRootInstance();
|
guiRoot = new GuiRootInstance();
|
||||||
level = new LevelInstance();
|
level = new LevelInstance();
|
||||||
|
selectionService = new SelectionService();
|
||||||
|
selectionService->setPropertyWindow(g_usableApp->_propWindow);
|
||||||
//children.push_back(workspace);
|
//children.push_back(workspace);
|
||||||
//children.push_back(level);
|
//children.push_back(level);
|
||||||
className = "dataModel";
|
className = "dataModel";
|
||||||
@@ -33,13 +36,35 @@ DataModelInstance::DataModelInstance(void)
|
|||||||
_loadedFileName="..//skooter.rbxm";
|
_loadedFileName="..//skooter.rbxm";
|
||||||
listicon = 5;
|
listicon = 5;
|
||||||
running = false;
|
running = false;
|
||||||
|
xplicitNgine = NULL;
|
||||||
|
resetEngine();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DataModelInstance::resetEngine()
|
||||||
|
{
|
||||||
|
if(xplicitNgine != NULL)
|
||||||
|
delete xplicitNgine;
|
||||||
|
xplicitNgine = new XplicitNgine();
|
||||||
|
g_xplicitNgine = xplicitNgine;
|
||||||
|
for(size_t i = 0; i < getWorkspace()->partObjects.size(); i++)
|
||||||
|
{
|
||||||
|
PartInstance* partInstance = getWorkspace()->partObjects[i];
|
||||||
|
partInstance->physBody = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
XplicitNgine * DataModelInstance::getEngine()
|
||||||
|
{
|
||||||
|
return xplicitNgine;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DataModelInstance::toggleRun()
|
void DataModelInstance::toggleRun()
|
||||||
{
|
{
|
||||||
running = !running;
|
running = !running;
|
||||||
|
//if(!running)
|
||||||
|
//resetEngine();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DataModelInstance::isRunning()
|
bool DataModelInstance::isRunning()
|
||||||
{
|
{
|
||||||
return running;
|
return running;
|
||||||
@@ -47,6 +72,7 @@ bool DataModelInstance::isRunning()
|
|||||||
|
|
||||||
DataModelInstance::~DataModelInstance(void)
|
DataModelInstance::~DataModelInstance(void)
|
||||||
{
|
{
|
||||||
|
delete xplicitNgine;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
@@ -61,8 +87,17 @@ void DataModelInstance::modXMLLevel(float modY)
|
|||||||
|
|
||||||
void DataModelInstance::clearLevel()
|
void DataModelInstance::clearLevel()
|
||||||
{
|
{
|
||||||
|
running = false;
|
||||||
|
Instance * goButton = this->getGuiRoot()->findFirstChild("go");
|
||||||
|
if(goButton != NULL){
|
||||||
|
if(ToggleImageButtonInstance* goButtonReal = dynamic_cast<ToggleImageButtonInstance*>(goButton))
|
||||||
|
{
|
||||||
|
goButtonReal->checked = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
selectionService->clearSelection();
|
||||||
|
selectionService->addSelected(this);
|
||||||
workspace->clearChildren();
|
workspace->clearChildren();
|
||||||
g_usableApp->_propWindow->UpdateSelected(this);
|
|
||||||
}
|
}
|
||||||
PartInstance* DataModelInstance::makePart()
|
PartInstance* DataModelInstance::makePart()
|
||||||
{
|
{
|
||||||
@@ -270,6 +305,7 @@ bool DataModelInstance::scanXMLObject(xml_node<> * scanNode)
|
|||||||
xml_node<> *propNode = node->first_node();
|
xml_node<> *propNode = node->first_node();
|
||||||
xml_node<> *cFrameNode=0;
|
xml_node<> *cFrameNode=0;
|
||||||
xml_node<> *sizeNode=0;
|
xml_node<> *sizeNode=0;
|
||||||
|
xml_node<> *anchoredNode=0;
|
||||||
xml_node<> *shapeNode=0;
|
xml_node<> *shapeNode=0;
|
||||||
xml_node<> *colorNode=0;
|
xml_node<> *colorNode=0;
|
||||||
xml_node<> *brickColorNode=0;
|
xml_node<> *brickColorNode=0;
|
||||||
@@ -285,6 +321,10 @@ bool DataModelInstance::scanXMLObject(xml_node<> * scanNode)
|
|||||||
if (xmlValue=="CFrame" | xmlValue=="CoordinateFrame")
|
if (xmlValue=="CFrame" | xmlValue=="CoordinateFrame")
|
||||||
{
|
{
|
||||||
cFrameNode = partPropNode;
|
cFrameNode = partPropNode;
|
||||||
|
}
|
||||||
|
if (xmlValue=="Anchored")
|
||||||
|
{
|
||||||
|
anchoredNode = partPropNode;
|
||||||
}
|
}
|
||||||
if (xmlValue=="Name")
|
if (xmlValue=="Name")
|
||||||
{
|
{
|
||||||
@@ -396,6 +436,10 @@ bool DataModelInstance::scanXMLObject(xml_node<> * scanNode)
|
|||||||
{
|
{
|
||||||
test->color = bcToRGB(atoi(brickColorNode->value()));
|
test->color = bcToRGB(atoi(brickColorNode->value()));
|
||||||
}
|
}
|
||||||
|
if(anchoredNode)
|
||||||
|
{
|
||||||
|
test->setAnchored(stricmp(anchoredNode->value(), "true") == 0);
|
||||||
|
}
|
||||||
test->setSize(Vector3(sizeX,sizeY+_modY,sizeZ));
|
test->setSize(Vector3(sizeX,sizeY+_modY,sizeZ));
|
||||||
test->setName(newName);
|
test->setName(newName);
|
||||||
CoordinateFrame cf;
|
CoordinateFrame cf;
|
||||||
@@ -448,6 +492,9 @@ bool DataModelInstance::load(const char* filename, bool clearObjects)
|
|||||||
std::string hname = sfilename.substr(begin);
|
std::string hname = sfilename.substr(begin);
|
||||||
std::string tname = hname.substr(0, hname.length() - 5);
|
std::string tname = hname.substr(0, hname.length() - 5);
|
||||||
name = tname;
|
name = tname;
|
||||||
|
resetEngine();
|
||||||
|
selectionService->clearSelection();
|
||||||
|
selectionService->addSelected(this);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -590,25 +637,16 @@ WorkspaceInstance* DataModelInstance::getWorkspace()
|
|||||||
{
|
{
|
||||||
return workspace;
|
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;
|
|
||||||
}*/
|
|
||||||
GuiRootInstance* DataModelInstance::getGuiRoot()
|
GuiRootInstance* DataModelInstance::getGuiRoot()
|
||||||
{
|
{
|
||||||
return guiRoot;
|
return guiRoot;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SelectionService* DataModelInstance::getSelectionService()
|
||||||
|
{
|
||||||
|
return selectionService;
|
||||||
|
}
|
||||||
|
|
||||||
LevelInstance* DataModelInstance::getLevel()
|
LevelInstance* DataModelInstance::getLevel()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -34,13 +34,11 @@ void GroupInstance::PropUpdate(LPPROPGRIDITEM &pItem)
|
|||||||
|
|
||||||
std::vector<Instance *> GroupInstance::unGroup()
|
std::vector<Instance *> GroupInstance::unGroup()
|
||||||
{
|
{
|
||||||
std::vector<Instance *> child;
|
|
||||||
while(children.size() > 0)
|
while(children.size() > 0)
|
||||||
{
|
{
|
||||||
child.push_back(children[0]);
|
|
||||||
children[0]->setParent(parent);
|
children[0]->setParent(parent);
|
||||||
}
|
}
|
||||||
return child;
|
return std::vector<Instance *>();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GroupInstance::render(RenderDevice * rd)
|
void GroupInstance::render(RenderDevice * rd)
|
||||||
|
|||||||
@@ -507,8 +507,8 @@ void GuiRootInstance::update()
|
|||||||
button4->disabled = true;
|
button4->disabled = true;
|
||||||
button5->disabled = true;
|
button5->disabled = true;
|
||||||
button6->disabled = true;
|
button6->disabled = true;
|
||||||
for(size_t i = 0; i < g_selectedInstances.size(); i++)
|
for(size_t i = 0; i < g_dataModel->getSelectionService()->getSelection().size(); i++)
|
||||||
if(g_selectedInstances.at(i)->canDelete)
|
if(g_dataModel->getSelectionService()->getSelection()[i]->canDelete)
|
||||||
{
|
{
|
||||||
button->disabled = false;
|
button->disabled = false;
|
||||||
button2->disabled = false;
|
button2->disabled = false;
|
||||||
|
|||||||
@@ -40,12 +40,12 @@ std::vector<PROPGRIDITEM> LevelInstance::getProperties()
|
|||||||
sprintf_s(scoreTxt, "%d", score);
|
sprintf_s(scoreTxt, "%d", score);
|
||||||
properties.push_back(createPGI("Gameplay",
|
properties.push_back(createPGI("Gameplay",
|
||||||
"InitialTimerValue",
|
"InitialTimerValue",
|
||||||
"The ammount of time in seconds the player has to complete this level.\r\n\r\nPut 0 if time is limitless.",
|
"The amount of time in seconds the player has to complete this level.\r\n\r\nPut 0 if time is limitless.",
|
||||||
(LPARAM)timerTxt,
|
(LPARAM)timerTxt,
|
||||||
PIT_EDIT));
|
PIT_EDIT));
|
||||||
properties.push_back(createPGI("Gameplay",
|
properties.push_back(createPGI("Gameplay",
|
||||||
"InitialScoreValue",
|
"InitialScoreValue",
|
||||||
"The ammount of points the player starts with.",
|
"The amount of points the player starts with.",
|
||||||
(LPARAM)scoreTxt,
|
(LPARAM)scoreTxt,
|
||||||
PIT_EDIT));
|
PIT_EDIT));
|
||||||
return properties;
|
return properties;
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
PartInstance::PartInstance(void)
|
PartInstance::PartInstance(void)
|
||||||
{
|
{
|
||||||
PVInstance::PVInstance();
|
PVInstance::PVInstance();
|
||||||
|
physBody = NULL;
|
||||||
glList = glGenLists(1);
|
glList = glGenLists(1);
|
||||||
name = "Unnamed PVItem";
|
name = "Unnamed PVItem";
|
||||||
className = "Part";
|
className = "Part";
|
||||||
@@ -27,6 +28,13 @@ PartInstance::PartInstance(void)
|
|||||||
shape = Enum::Shape::Block;
|
shape = Enum::Shape::Block;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float PartInstance::getMass()
|
||||||
|
{
|
||||||
|
if(shape == Enum::Shape::Block)
|
||||||
|
return size.x*size.y*size.z*0.7F;
|
||||||
|
else
|
||||||
|
return 1.3333333333333333333333333333333F*(size.x/2)*(size.y/2)*(size.z/2)*0.7F;
|
||||||
|
}
|
||||||
|
|
||||||
Vector3 PartInstance::getVelocity()
|
Vector3 PartInstance::getVelocity()
|
||||||
{
|
{
|
||||||
@@ -109,32 +117,34 @@ void PartInstance::setSurface(int face, Enum::SurfaceType::Value surface)
|
|||||||
|
|
||||||
void PartInstance::setParent(Instance* prnt)
|
void PartInstance::setParent(Instance* prnt)
|
||||||
{
|
{
|
||||||
|
g_dataModel->getEngine()->deleteBody(this);
|
||||||
Instance * cparent = getParent();
|
Instance * cparent = getParent();
|
||||||
while(cparent != NULL)
|
while(cparent != NULL)
|
||||||
{
|
{
|
||||||
if(WorkspaceInstance* workspace = dynamic_cast<WorkspaceInstance*>(cparent))
|
if(WorkspaceInstance* workspace = dynamic_cast<WorkspaceInstance*>(cparent))
|
||||||
{
|
{
|
||||||
std::cout << "Removed from partarray " << std::endl;
|
|
||||||
workspace->partObjects.erase(std::remove(workspace->partObjects.begin(), workspace->partObjects.end(), this), workspace->partObjects.end());
|
workspace->partObjects.erase(std::remove(workspace->partObjects.begin(), workspace->partObjects.end(), this), workspace->partObjects.end());
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
cparent = cparent->getParent();
|
cparent = cparent->getParent();
|
||||||
}
|
}
|
||||||
Instance::setParent(prnt);
|
Instance::setParent(prnt);
|
||||||
while(parent != NULL)
|
cparent = getParent();
|
||||||
|
while(cparent != NULL)
|
||||||
{
|
{
|
||||||
if(WorkspaceInstance* workspace = dynamic_cast<WorkspaceInstance*>(parent))
|
if(WorkspaceInstance* workspace = dynamic_cast<WorkspaceInstance*>(cparent))
|
||||||
{
|
{
|
||||||
workspace->partObjects.push_back(this);
|
workspace->partObjects.push_back(this);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
parent = parent->getParent();
|
cparent = cparent->getParent();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
PartInstance::PartInstance(const PartInstance &oinst)
|
PartInstance::PartInstance(const PartInstance &oinst)
|
||||||
{
|
{
|
||||||
PVInstance::PVInstance(oinst);
|
PVInstance::PVInstance(oinst);
|
||||||
|
physBody = NULL;
|
||||||
glList = glGenLists(1);
|
glList = glGenLists(1);
|
||||||
//name = oinst.name;
|
//name = oinst.name;
|
||||||
//className = "Part";
|
//className = "Part";
|
||||||
@@ -143,7 +153,7 @@ PartInstance::PartInstance(const PartInstance &oinst)
|
|||||||
setParent(oinst.parent);
|
setParent(oinst.parent);
|
||||||
anchored = oinst.anchored;
|
anchored = oinst.anchored;
|
||||||
size = oinst.size;
|
size = oinst.size;
|
||||||
setCFrame(oinst.cFrame);
|
setCFrameNoSync(oinst.cFrame);
|
||||||
color = oinst.color;
|
color = oinst.color;
|
||||||
velocity = oinst.velocity;
|
velocity = oinst.velocity;
|
||||||
rotVelocity = oinst.rotVelocity;
|
rotVelocity = oinst.rotVelocity;
|
||||||
@@ -192,8 +202,8 @@ void PartInstance::setSize(Vector3 newSize)
|
|||||||
|
|
||||||
size = Vector3(sizex, sizey, sizez);
|
size = Vector3(sizex, sizey, sizez);
|
||||||
|
|
||||||
|
g_dataModel->getEngine()->deleteBody(this);
|
||||||
|
g_dataModel->getEngine()->createBody(this);
|
||||||
}
|
}
|
||||||
Vector3 PartInstance::getSize()
|
Vector3 PartInstance::getSize()
|
||||||
{
|
{
|
||||||
@@ -214,21 +224,41 @@ void PartInstance::setShape(Enum::Shape::Value shape)
|
|||||||
this->shape = shape;
|
this->shape = shape;
|
||||||
this->setSize(this->getSize());
|
this->setSize(this->getSize());
|
||||||
}
|
}
|
||||||
|
g_dataModel->getEngine()->deleteBody(this);
|
||||||
|
g_dataModel->getEngine()->createBody(this);
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PartInstance::setPosition(Vector3 pos)
|
void PartInstance::setPosition(Vector3 pos)
|
||||||
{
|
{
|
||||||
position = pos;
|
position = pos;
|
||||||
cFrame = CoordinateFrame(cFrame.rotation, pos);
|
setCFrame(CoordinateFrame(cFrame.rotation, pos));
|
||||||
changed = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PartInstance::setAnchored(bool anchored)
|
||||||
|
{
|
||||||
|
this->anchored = anchored;
|
||||||
|
g_dataModel->getEngine()->deleteBody(this);
|
||||||
|
g_dataModel->getEngine()->createBody(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PartInstance::isAnchored()
|
||||||
|
{
|
||||||
|
return this->anchored;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
CoordinateFrame PartInstance::getCFrame()
|
CoordinateFrame PartInstance::getCFrame()
|
||||||
{
|
{
|
||||||
return cFrame;
|
return cFrame;
|
||||||
}
|
}
|
||||||
void PartInstance::setCFrame(CoordinateFrame coordinateFrame)
|
void PartInstance::setCFrame(CoordinateFrame coordinateFrame)
|
||||||
|
{
|
||||||
|
g_dataModel->getEngine()->updateBody(this, &coordinateFrame);
|
||||||
|
setCFrameNoSync(coordinateFrame);
|
||||||
|
}
|
||||||
|
|
||||||
|
void PartInstance::setCFrameNoSync(CoordinateFrame coordinateFrame)
|
||||||
{
|
{
|
||||||
cFrame = coordinateFrame;
|
cFrame = coordinateFrame;
|
||||||
position = coordinateFrame.translation;
|
position = coordinateFrame.translation;
|
||||||
@@ -296,6 +326,16 @@ void PartInstance::render(RenderDevice* rd) {
|
|||||||
PartInstance::~PartInstance(void)
|
PartInstance::~PartInstance(void)
|
||||||
{
|
{
|
||||||
glDeleteLists(glList, 1);
|
glDeleteLists(glList, 1);
|
||||||
|
/*
|
||||||
|
// Causes some weird ODE error
|
||||||
|
// Someone, please look into this
|
||||||
|
|
||||||
|
dBodyDestroy(physBody);
|
||||||
|
for (int i = 0; i < 3; i++) {
|
||||||
|
if (physGeom[i] != NULL)
|
||||||
|
dGeomDestroy(physGeom[i]);
|
||||||
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
char pto[512];
|
char pto[512];
|
||||||
@@ -334,7 +374,7 @@ void PartInstance::PropUpdate(LPPROPGRIDITEM &item)
|
|||||||
}
|
}
|
||||||
else if(strcmp(item->lpszPropName, "Anchored") == 0)
|
else if(strcmp(item->lpszPropName, "Anchored") == 0)
|
||||||
{
|
{
|
||||||
anchored= item->lpCurValue == TRUE;
|
setAnchored(item->lpCurValue == TRUE);
|
||||||
}
|
}
|
||||||
else if(strcmp(item->lpszPropName, "Offset") == 0)
|
else if(strcmp(item->lpszPropName, "Offset") == 0)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#include "DataModelV2/WorkspaceInstance.h"
|
#include "DataModelV2/WorkspaceInstance.h"
|
||||||
|
#include "Globals.h"
|
||||||
|
#include "Application.h"
|
||||||
|
|
||||||
WorkspaceInstance::WorkspaceInstance(void)
|
WorkspaceInstance::WorkspaceInstance(void)
|
||||||
{
|
{
|
||||||
@@ -15,6 +16,11 @@ void WorkspaceInstance::clearChildren()
|
|||||||
Instance::clearChildren();
|
Instance::clearChildren();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WorkspaceInstance::zoomToExtents()
|
||||||
|
{
|
||||||
|
g_usableApp->cameraController.zoomExtents();
|
||||||
|
}
|
||||||
|
|
||||||
WorkspaceInstance::~WorkspaceInstance(void)
|
WorkspaceInstance::~WorkspaceInstance(void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,17 +1,13 @@
|
|||||||
#include "Globals.h"
|
#include "Globals.h"
|
||||||
#include "Application.h"
|
#include "Application.h"
|
||||||
|
|
||||||
int const Globals::gen = 0;
|
|
||||||
int const Globals::major = 100;
|
|
||||||
int const Globals::minor = 4;
|
|
||||||
int const Globals::patch = 3;
|
|
||||||
int Globals::surfaceId = 2;
|
int Globals::surfaceId = 2;
|
||||||
//bool Globals::showMouse = true;
|
//bool Globals::showMouse = true;
|
||||||
bool Globals::useMousePoint = false;
|
bool Globals::useMousePoint = false;
|
||||||
std::vector<Instance*> postRenderStack = std::vector<Instance*>();
|
std::vector<Instance*> postRenderStack = std::vector<Instance*>();
|
||||||
|
|
||||||
std::vector<Instance*> g_selectedInstances = std::vector<Instance*>();
|
|
||||||
DataModelInstance* g_dataModel = NULL;
|
DataModelInstance* g_dataModel = NULL;
|
||||||
|
XplicitNgine* g_xplicitNgine = NULL;
|
||||||
|
|
||||||
bool running = false;
|
bool running = false;
|
||||||
G3D::TextureRef Globals::surface;
|
G3D::TextureRef Globals::surface;
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <Commdlg.h>
|
#include <Commdlg.h>
|
||||||
#include "IEBrowser.h"
|
#include "IEBrowser.h"
|
||||||
@@ -11,6 +10,9 @@
|
|||||||
#include "ax.h"
|
#include "ax.h"
|
||||||
#include "Tool/SurfaceTool.h"
|
#include "Tool/SurfaceTool.h"
|
||||||
#include "Application.h"
|
#include "Application.h"
|
||||||
|
#include "Enum.h"
|
||||||
|
#include "ToolEnum.h"
|
||||||
|
#include "VS2005CompatShim.h"
|
||||||
|
|
||||||
HRESULT IEBrowser::doExternal(std::wstring funcName,
|
HRESULT IEBrowser::doExternal(std::wstring funcName,
|
||||||
DISPID dispIdMember,
|
DISPID dispIdMember,
|
||||||
@@ -30,9 +32,24 @@ HRESULT IEBrowser::doExternal(std::wstring funcName,
|
|||||||
}
|
}
|
||||||
else if (funcName==L"ToggleHopperBin")
|
else if (funcName==L"ToggleHopperBin")
|
||||||
{
|
{
|
||||||
pVarResult->vt = VT_INT;
|
MessageBox(NULL, "BOOP", "Boopity boop",MB_OK);
|
||||||
pVarResult->intVal = 5;
|
|
||||||
//MessageBox(NULL, "BOOP", "Boopity boop",MB_OK);
|
/*To-do Make enums in ToolEnum work with this properly,
|
||||||
|
commented code is not fully tested.*/
|
||||||
|
/*MessageBox(NULL,
|
||||||
|
std::to_string(pDispParams->rgvarg->intVal).c_str(),
|
||||||
|
"Is it working?",
|
||||||
|
MB_OK);
|
||||||
|
Enum::Hopper::Value cont = (Enum::Hopper::Value)pDispParams->rgvarg->intVal;
|
||||||
|
|
||||||
|
switch (cont)
|
||||||
|
{
|
||||||
|
case GameTool
|
||||||
|
case Grab
|
||||||
|
|
||||||
|
break;
|
||||||
|
}*/
|
||||||
|
return S_OK;
|
||||||
}
|
}
|
||||||
else if (funcName==L"SetController")
|
else if (funcName==L"SetController")
|
||||||
{
|
{
|
||||||
@@ -43,9 +60,9 @@ HRESULT IEBrowser::doExternal(std::wstring funcName,
|
|||||||
if(pDispParams->rgvarg->intVal < 0 || pDispParams->rgvarg->intVal > 7)
|
if(pDispParams->rgvarg->intVal < 0 || pDispParams->rgvarg->intVal > 7)
|
||||||
return S_OK;
|
return S_OK;
|
||||||
Enum::Controller::Value cont = (Enum::Controller::Value)pDispParams->rgvarg->intVal;
|
Enum::Controller::Value cont = (Enum::Controller::Value)pDispParams->rgvarg->intVal;
|
||||||
for(size_t i = 0; i < g_selectedInstances.size(); i++)
|
for(size_t i = 0; i < g_dataModel->getSelectionService()->getSelection().size(); i++)
|
||||||
{
|
{
|
||||||
if(PVInstance* part = dynamic_cast<PVInstance*>(g_selectedInstances.at(i)))
|
if(PVInstance* part = dynamic_cast<PVInstance*>(g_dataModel->getSelectionService()->getSelection()[i]))
|
||||||
{
|
{
|
||||||
ding = true;
|
ding = true;
|
||||||
part->controller = cont;
|
part->controller = cont;
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ void CameraButtonListener::onButton1MouseClick(BaseButtonInstance* button)
|
|||||||
{
|
{
|
||||||
AudioPlayer::playSound(cameraSound);
|
AudioPlayer::playSound(cameraSound);
|
||||||
CoordinateFrame frame = g_usableApp->cameraController.getCamera()->getCoordinateFrame();
|
CoordinateFrame frame = g_usableApp->cameraController.getCamera()->getCoordinateFrame();
|
||||||
if(button->name == "CenterCam" && g_selectedInstances.size() > 0)
|
if(button->name == "CenterCam" && g_dataModel->getSelectionService()->getSelection().size() > 0)
|
||||||
g_usableApp->cameraController.centerCamera(g_selectedInstances.at(0));
|
g_usableApp->cameraController.centerCamera(g_dataModel->getSelectionService()->getSelection()[0]);
|
||||||
else if(button->name == "ZoomIn")
|
else if(button->name == "ZoomIn")
|
||||||
g_usableApp->cameraController.Zoom(1);
|
g_usableApp->cameraController.Zoom(1);
|
||||||
else if(button->name == "ZoomOut")
|
else if(button->name == "ZoomOut")
|
||||||
|
|||||||
@@ -2,13 +2,14 @@
|
|||||||
#include "Application.h"
|
#include "Application.h"
|
||||||
#include "Globals.h"
|
#include "Globals.h"
|
||||||
#include "AudioPlayer.h"
|
#include "AudioPlayer.h"
|
||||||
|
#include "DataModelV2/SelectionService.h"
|
||||||
#include "Listener/GUDButtonListener.h"
|
#include "Listener/GUDButtonListener.h"
|
||||||
|
|
||||||
void GUDButtonListener::onButton1MouseClick(BaseButtonInstance* button)
|
void GUDButtonListener::onButton1MouseClick(BaseButtonInstance* button)
|
||||||
{
|
{
|
||||||
bool cont = false;
|
bool cont = false;
|
||||||
for(size_t i = 0; i < g_selectedInstances.size(); i++)
|
for(size_t i = 0; i < g_dataModel->getSelectionService()->getSelection().size(); i++)
|
||||||
if(g_selectedInstances.at(i)->canDelete)
|
if(g_dataModel->getSelectionService()->getSelection()[i]->canDelete)
|
||||||
{
|
{
|
||||||
cont = true;
|
cont = true;
|
||||||
break;
|
break;
|
||||||
@@ -19,53 +20,46 @@ void GUDButtonListener::onButton1MouseClick(BaseButtonInstance* button)
|
|||||||
if(button->name == "Duplicate")
|
if(button->name == "Duplicate")
|
||||||
{
|
{
|
||||||
std::vector<Instance*> newinst;
|
std::vector<Instance*> newinst;
|
||||||
for(size_t i = 0; i < g_selectedInstances.size(); i++)
|
for(size_t i = 0; i < g_dataModel->getSelectionService()->getSelection().size(); i++)
|
||||||
{
|
{
|
||||||
if(g_selectedInstances.at(i)->canDelete)
|
if(g_dataModel->getSelectionService()->getSelection()[i]->canDelete)
|
||||||
{
|
{
|
||||||
Instance* tempinst = g_selectedInstances.at(i);
|
Instance* tempinst = g_dataModel->getSelectionService()->getSelection()[i];
|
||||||
|
|
||||||
Instance* clonedInstance = g_selectedInstances.at(i)->clone();
|
Instance* clonedInstance = g_dataModel->getSelectionService()->getSelection()[i]->clone();
|
||||||
|
|
||||||
newinst.push_back(tempinst);
|
newinst.push_back(tempinst);
|
||||||
}
|
}
|
||||||
/*tempinst->setPosition(Vector3(tempPos.x, tempPos.y + tempSize.y, tempPos.z));
|
|
||||||
g_usableApp->cameraController.centerCamera(g_selectedInstances.at(0));*/
|
|
||||||
}
|
}
|
||||||
g_selectedInstances = newinst;
|
g_dataModel->getSelectionService()->clearSelection();
|
||||||
if(g_selectedInstances.size() > 0)
|
g_dataModel->getSelectionService()->addSelected(newinst);
|
||||||
g_usableApp->_propWindow->UpdateSelected(newinst.at(0));
|
|
||||||
}
|
}
|
||||||
else if(button->name == "Group")
|
else if(button->name == "Group")
|
||||||
{
|
{
|
||||||
GroupInstance * inst = new GroupInstance();
|
GroupInstance * inst = new GroupInstance();
|
||||||
for(size_t i = 0; i < g_selectedInstances.size(); i++)
|
inst->setParent(g_dataModel->getWorkspace());
|
||||||
|
for(size_t i = 0; i < g_dataModel->getSelectionService()->getSelection().size(); i++)
|
||||||
{
|
{
|
||||||
if(g_selectedInstances.at(i)->canDelete)
|
if(g_dataModel->getSelectionService()->getSelection()[i]->canDelete)
|
||||||
{
|
{
|
||||||
g_selectedInstances.at(i)->setParent(inst);
|
g_dataModel->getSelectionService()->getSelection()[i]->setParent(inst);
|
||||||
if(PartInstance* part = dynamic_cast<PartInstance*>(g_selectedInstances.at(i)))
|
if(PartInstance* part = dynamic_cast<PartInstance*>(g_dataModel->getSelectionService()->getSelection()[i]))
|
||||||
{
|
{
|
||||||
inst->primaryPart = part;
|
inst->primaryPart = part;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*tempinst->setPosition(Vector3(tempPos.x, tempPos.y + tempSize.y, tempPos.z));
|
|
||||||
g_usableApp->cameraController.centerCamera(g_selectedInstances.at(0));*/
|
|
||||||
}
|
}
|
||||||
inst->setParent(g_dataModel->getWorkspace());
|
g_dataModel->getSelectionService()->clearSelection();
|
||||||
g_selectedInstances.clear();
|
g_dataModel->getSelectionService()->addSelected(inst);
|
||||||
g_selectedInstances.push_back(inst);
|
|
||||||
if(g_selectedInstances.size() > 0)
|
|
||||||
g_usableApp->_propWindow->UpdateSelected(g_selectedInstances.at(0));
|
|
||||||
}
|
}
|
||||||
else if(button->name == "UnGroup")
|
else if(button->name == "UnGroup")
|
||||||
{
|
{
|
||||||
std::vector<Instance*> newinst;
|
std::vector<Instance*> newinst;
|
||||||
for(size_t i = 0; i < g_selectedInstances.size(); i++)
|
for(size_t i = 0; i < g_dataModel->getSelectionService()->getSelection().size(); i++)
|
||||||
{
|
{
|
||||||
if(g_selectedInstances.at(i)->canDelete)
|
if(g_dataModel->getSelectionService()->getSelection()[i]->canDelete)
|
||||||
{
|
{
|
||||||
if(GroupInstance* model = dynamic_cast<GroupInstance*>(g_selectedInstances.at(i)))
|
if(GroupInstance* model = dynamic_cast<GroupInstance*>(g_dataModel->getSelectionService()->getSelection()[i]))
|
||||||
{
|
{
|
||||||
newinst = model->unGroup();
|
newinst = model->unGroup();
|
||||||
model->setParent(NULL);
|
model->setParent(NULL);
|
||||||
@@ -73,13 +67,9 @@ void GUDButtonListener::onButton1MouseClick(BaseButtonInstance* button)
|
|||||||
model = NULL;
|
model = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*tempinst->setPosition(Vector3(tempPos.x, tempPos.y + tempSize.y, tempPos.z));
|
|
||||||
g_usableApp->cameraController.centerCamera(g_selectedInstances.at(0));*/
|
|
||||||
}
|
}
|
||||||
g_selectedInstances.clear();
|
g_dataModel->getSelectionService()->clearSelection();
|
||||||
g_selectedInstances = newinst;
|
g_dataModel->getSelectionService()->addSelected(newinst);
|
||||||
if(g_selectedInstances.size() > 0)
|
|
||||||
g_usableApp->_propWindow->UpdateSelected(newinst.at(0));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -14,10 +14,23 @@ void MenuButtonListener::onButton1MouseClick(BaseButtonInstance* button)
|
|||||||
HMENU mainmenu = CreatePopupMenu();
|
HMENU mainmenu = CreatePopupMenu();
|
||||||
AppendMenu(mainmenu, MF_STRING, 100, "New");
|
AppendMenu(mainmenu, MF_STRING, 100, "New");
|
||||||
AppendMenu(mainmenu, MF_STRING, 101, "Open...");
|
AppendMenu(mainmenu, MF_STRING, 101, "Open...");
|
||||||
AppendMenu(mainmenu, MF_STRING, 101, "Close");
|
AppendMenu(mainmenu, MF_STRING, 102, "Close");
|
||||||
AppendMenu(mainmenu, MF_SEPARATOR, 0, NULL);
|
AppendMenu(mainmenu, MF_SEPARATOR, 0, NULL);
|
||||||
POINT p;
|
POINT p;
|
||||||
GetCursorPos(&p);
|
GetCursorPos(&p);
|
||||||
TrackPopupMenu(mainmenu, TPM_LEFTBUTTON, p.x, p.y, 0, Globals::mainHwnd, 0);
|
int menuClick = TrackPopupMenu(mainmenu, TPM_LEFTBUTTON | TPM_RETURNCMD, p.x, p.y, 0, Globals::mainHwnd, 0);
|
||||||
|
switch (menuClick)
|
||||||
|
{
|
||||||
|
case 100:
|
||||||
|
g_usableApp->clearInstances();
|
||||||
|
g_usableApp->onInit();
|
||||||
|
break;
|
||||||
|
case 101:
|
||||||
|
g_dataModel->getOpen();
|
||||||
|
break;
|
||||||
|
case 102:
|
||||||
|
g_usableApp->QuitApp();
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5,9 +5,9 @@
|
|||||||
|
|
||||||
void RotateButtonListener::onButton1MouseClick(BaseButtonInstance* button)
|
void RotateButtonListener::onButton1MouseClick(BaseButtonInstance* button)
|
||||||
{
|
{
|
||||||
if(g_selectedInstances.size() > 0)
|
if(g_dataModel->getSelectionService()->getSelection().size() > 0)
|
||||||
{
|
{
|
||||||
Instance* selectedInstance = g_selectedInstances.at(0);
|
Instance* selectedInstance = g_dataModel->getSelectionService()->getSelection()[0];
|
||||||
AudioPlayer::playSound(clickSound);
|
AudioPlayer::playSound(clickSound);
|
||||||
if(PartInstance* part = dynamic_cast<PartInstance*>(selectedInstance))
|
if(PartInstance* part = dynamic_cast<PartInstance*>(selectedInstance))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -112,31 +112,3 @@ void Mouse::setMouseDown(bool bval)
|
|||||||
{
|
{
|
||||||
mouseDown = bval;
|
mouseDown = bval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//bool found = false;
|
|
||||||
/*for(size_t i = 0; i < g_selectedInstances.size(); i++)
|
|
||||||
{
|
|
||||||
if(g_selectedInstances.at(i) == test)
|
|
||||||
{
|
|
||||||
found = true;
|
|
||||||
//ShowWindow(_propWindow->_hwndProp, SW_SHOW);
|
|
||||||
//SetActiveWindow(_propWindow->_hwndProp);
|
|
||||||
//SetForegroundWindow(_propWindow->_hwndProp);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(!found)
|
|
||||||
{
|
|
||||||
selectedInstance = test;
|
|
||||||
//if(!GetHoldKeyState(VK_RCONTROL) && !GetHoldKeyState(VK_LCONTROL))
|
|
||||||
//g_selectedInstances.clear();
|
|
||||||
//if(std::find(g_selectedInstances.begin(), g_selectedInstances.end(),test)==g_selectedInstances.end())
|
|
||||||
//g_selectedInstances.push_back(test);
|
|
||||||
}
|
|
||||||
//selectInstance(test, _propWindow);
|
|
||||||
//_message = "Dragging = true.";
|
|
||||||
//_messageTime = System::time();
|
|
||||||
//_dragging = true;*/
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,15 +3,9 @@
|
|||||||
#include "WindowFunctions.h"
|
#include "WindowFunctions.h"
|
||||||
#include "resource.h"
|
#include "resource.h"
|
||||||
#include "PropertyWindow.h"
|
#include "PropertyWindow.h"
|
||||||
#include "Globals.h"
|
|
||||||
#include "strsafe.h"
|
#include "strsafe.h"
|
||||||
#include "Application.h"
|
#include "Application.h"
|
||||||
|
|
||||||
/*typedef struct typPRGP {
|
|
||||||
Instance* instance; // Declare member types
|
|
||||||
Property ∝
|
|
||||||
} PRGP;*/
|
|
||||||
|
|
||||||
std::vector<PROPGRIDITEM> prop;
|
std::vector<PROPGRIDITEM> prop;
|
||||||
std::vector<Instance*> children;
|
std::vector<Instance*> children;
|
||||||
Instance * selectedInstance;
|
Instance * selectedInstance;
|
||||||
@@ -177,8 +171,8 @@ LRESULT CALLBACK PropProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|||||||
int ItemIndex = SendMessage((HWND) lParam, (UINT) CB_GETCURSEL, (WPARAM) 0, (LPARAM) 0);
|
int ItemIndex = SendMessage((HWND) lParam, (UINT) CB_GETCURSEL, (WPARAM) 0, (LPARAM) 0);
|
||||||
CHAR ListItem[256];
|
CHAR ListItem[256];
|
||||||
SendMessage((HWND) lParam, (UINT) CB_GETLBTEXT, (WPARAM) ItemIndex, (LPARAM) ListItem);
|
SendMessage((HWND) lParam, (UINT) CB_GETLBTEXT, (WPARAM) ItemIndex, (LPARAM) ListItem);
|
||||||
propWind->ClearProperties();
|
g_dataModel->getSelectionService()->clearSelection();
|
||||||
g_usableApp->selectInstance(children.at(ItemIndex),propWind);
|
g_dataModel->getSelectionService()->addSelected(children.at(ItemIndex));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -208,13 +202,18 @@ LRESULT CALLBACK PropProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PropertyWindow::refreshExplorer(Instance* selectedInstance)
|
void PropertyWindow::clearExplorer()
|
||||||
{
|
{
|
||||||
|
SendMessage(_explorerComboBox,CB_RESETCONTENT,0,0);
|
||||||
|
SendMessage(_explorerComboBox,CB_SETCURSEL,0,(LPARAM)0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void PropertyWindow::refreshExplorer(std::vector<Instance*> selectedInstances)
|
||||||
|
{
|
||||||
|
Instance * instance = selectedInstances[0];
|
||||||
SendMessage(_explorerComboBox,CB_RESETCONTENT,0,0);
|
SendMessage(_explorerComboBox,CB_RESETCONTENT,0,0);
|
||||||
parent = NULL;
|
parent = NULL;
|
||||||
children.clear();
|
children.clear();
|
||||||
//g_selectedInstances.clear();
|
|
||||||
//for (unsigned int i=0;i<g_selectedInstances.size();i++) {
|
|
||||||
children.push_back(selectedInstance);
|
children.push_back(selectedInstance);
|
||||||
SendMessage(_explorerComboBox, CB_ADDSTRING, 0, (LPARAM)selectedInstance->name.c_str());
|
SendMessage(_explorerComboBox, CB_ADDSTRING, 0, (LPARAM)selectedInstance->name.c_str());
|
||||||
if(selectedInstance->getParent() != NULL)
|
if(selectedInstance->getParent() != NULL)
|
||||||
@@ -226,7 +225,6 @@ void PropertyWindow::refreshExplorer(Instance* selectedInstance)
|
|||||||
parent = selectedInstance->getParent();
|
parent = selectedInstance->getParent();
|
||||||
children.push_back(selectedInstance->getParent());
|
children.push_back(selectedInstance->getParent());
|
||||||
}
|
}
|
||||||
//children = g_selectedInstances[i]->getChildren();
|
|
||||||
|
|
||||||
std::vector<Instance*> selectedChildren = selectedInstance->getChildren();
|
std::vector<Instance*> selectedChildren = selectedInstance->getChildren();
|
||||||
for(size_t z = 0; z < selectedChildren.size(); z++)
|
for(size_t z = 0; z < selectedChildren.size(); z++)
|
||||||
@@ -343,11 +341,17 @@ void PropertyWindow::_resize()
|
|||||||
SetWindowPos(_explorerComboBox, NULL, 0, 0, rect.right, 400, SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE);
|
SetWindowPos(_explorerComboBox, NULL, 0, 0, rect.right, 400, SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PropertyWindow::UpdateSelected(Instance * instance)
|
void PropertyWindow::UpdateSelected(std::vector<Instance *> instances)
|
||||||
{
|
{
|
||||||
|
if(instances.size() <= 0)
|
||||||
|
{
|
||||||
|
ClearProperties();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Instance * instance = instances[0];
|
||||||
PropGrid_ResetContent(_propGrid);
|
PropGrid_ResetContent(_propGrid);
|
||||||
prop = instance->getProperties();
|
prop = instance->getProperties();
|
||||||
if (selectedInstance != instance)
|
//if (selectedInstance != instance)
|
||||||
{
|
{
|
||||||
selectedInstance = instance;
|
selectedInstance = instance;
|
||||||
for(size_t i = 0; i < prop.size(); i++)
|
for(size_t i = 0; i < prop.size(); i++)
|
||||||
@@ -361,12 +365,13 @@ void PropertyWindow::UpdateSelected(Instance * instance)
|
|||||||
PropGrid_ExpandAllCatalogs(_propGrid);
|
PropGrid_ExpandAllCatalogs(_propGrid);
|
||||||
//SetWindowLongPtr(_propGrid,GWL_USERDATA,(LONG)this);
|
//SetWindowLongPtr(_propGrid,GWL_USERDATA,(LONG)this);
|
||||||
|
|
||||||
refreshExplorer(instance);
|
refreshExplorer(instances);
|
||||||
_resize();
|
_resize();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PropertyWindow::ClearProperties()
|
void PropertyWindow::ClearProperties()
|
||||||
{
|
{
|
||||||
|
clearExplorer();
|
||||||
PropGrid_ResetContent(_propGrid);
|
PropGrid_ResetContent(_propGrid);
|
||||||
}
|
}
|
||||||
@@ -224,8 +224,9 @@ void renderShape(const Enum::Shape::Value& shape, const Vector3& size, const Col
|
|||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
/*Plusses, can possibly integrate into cylinder code later on*/
|
/*Plusses, can possibly integrate into cylinder code later on*/
|
||||||
glVertexPointer(2, GL_FLOAT,0, square_arr);
|
glVertexPointer(2, GL_FLOAT,0, square_arr);
|
||||||
glColor3f(127,127,127);
|
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
|
glDisable(GL_COLOR_ARRAY);
|
||||||
|
glColor3f(127,127,127);
|
||||||
glRotatef(90,0,1,0);
|
glRotatef(90,0,1,0);
|
||||||
glTranslatef(0,0,-(size.z+0.001F));
|
glTranslatef(0,0,-(size.z+0.001F));
|
||||||
glScalef(0.75,0.75,0.75);
|
glScalef(0.75,0.75,0.75);
|
||||||
@@ -233,9 +234,11 @@ void renderShape(const Enum::Shape::Value& shape, const Vector3& size, const Col
|
|||||||
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
|
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
|
||||||
glScalef(1/(size.x*8),size.x*8,1);
|
glScalef(1/(size.x*8),size.x*8,1);
|
||||||
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
|
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
|
||||||
|
glEnable(GL_COLOR_ARRAY);
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
|
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
|
glDisable(GL_COLOR_ARRAY);
|
||||||
glRotatef(-90,0,1,0);
|
glRotatef(-90,0,1,0);
|
||||||
glTranslatef(0,0,-(size.z+0.001F));
|
glTranslatef(0,0,-(size.z+0.001F));
|
||||||
glScalef(0.75,0.75,0.75);
|
glScalef(0.75,0.75,0.75);
|
||||||
@@ -243,6 +246,7 @@ void renderShape(const Enum::Shape::Value& shape, const Vector3& size, const Col
|
|||||||
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
|
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
|
||||||
glScalef(1/(size.x*8),size.x*8,1);
|
glScalef(1/(size.x*8),size.x*8,1);
|
||||||
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
|
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
|
||||||
|
glEnable(GL_COLOR_ARRAY);
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#include "Tool/ArrowTool.h"
|
#include "Tool/ArrowTool.h"
|
||||||
#include "Application.h"
|
#include "Application.h"
|
||||||
|
#include "DataModelV2/SelectionService.h"
|
||||||
|
|
||||||
ArrowTool::ArrowTool(void)
|
ArrowTool::ArrowTool(void)
|
||||||
{
|
{
|
||||||
@@ -21,13 +22,12 @@ void ArrowTool::onButton1MouseDown(Mouse mouse)
|
|||||||
mouseDownStarty = mouse.y;
|
mouseDownStarty = mouse.y;
|
||||||
mouseDown = true;
|
mouseDown = true;
|
||||||
if(!lctrlDown && !rctrlDown)
|
if(!lctrlDown && !rctrlDown)
|
||||||
g_selectedInstances.clear();
|
g_dataModel->getSelectionService()->clearSelection();
|
||||||
PartInstance * target = mouse.getTarget();
|
PartInstance * target = mouse.getTarget();
|
||||||
if(target != NULL && std::find(g_selectedInstances.begin(), g_selectedInstances.end(), target) == g_selectedInstances.end())
|
if(target != NULL)
|
||||||
g_selectedInstances.push_back(target);
|
g_dataModel->getSelectionService()->addSelected(target);
|
||||||
if(g_selectedInstances.size() == 0)
|
if(g_dataModel->getSelectionService()->getSelection().size() == 0)
|
||||||
g_selectedInstances.push_back(g_dataModel);
|
g_dataModel->getSelectionService()->addSelected(g_dataModel);
|
||||||
g_usableApp->_propWindow->UpdateSelected(g_selectedInstances[0]);
|
|
||||||
}
|
}
|
||||||
void ArrowTool::onButton1MouseUp(Mouse mouse)
|
void ArrowTool::onButton1MouseUp(Mouse mouse)
|
||||||
{
|
{
|
||||||
@@ -47,11 +47,11 @@ void ArrowTool::onMouseMoved(Mouse mouse)
|
|||||||
}
|
}
|
||||||
else return;
|
else return;
|
||||||
}
|
}
|
||||||
for(size_t i = 0; i < g_selectedInstances.size(); i++) //This will later decide primary and move all parts according to primary
|
for(size_t i = 0; i < g_dataModel->getSelectionService()->getSelection().size(); i++) //This will later decide primary and move all parts according to primary
|
||||||
{
|
{
|
||||||
if(PartInstance * part = dynamic_cast<PartInstance *>(g_selectedInstances[i]))
|
if(PartInstance * part = dynamic_cast<PartInstance *>(g_dataModel->getSelectionService()->getSelection()[i]))
|
||||||
{
|
{
|
||||||
part->setPosition(mouse.getPosition(g_selectedInstances));
|
part->setPosition(mouse.getPosition(g_dataModel->getSelectionService()->getSelection()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|||||||
196
src/source/XplicitNgine/XplicitNgine.cpp
Normal file
196
src/source/XplicitNgine/XplicitNgine.cpp
Normal file
@@ -0,0 +1,196 @@
|
|||||||
|
#include "XplicitNgine/XplicitNgine.h"
|
||||||
|
#include "Globals.h"
|
||||||
|
|
||||||
|
#define SIDE (0.5f)
|
||||||
|
#define MASS (1.0)
|
||||||
|
|
||||||
|
// constraints
|
||||||
|
#define MAX_BODIES 65535
|
||||||
|
#define OBJ_DENSITY (5.0)
|
||||||
|
#define MAX_CONTACT_PER_BODY 4
|
||||||
|
|
||||||
|
XplicitNgine::XplicitNgine()
|
||||||
|
{
|
||||||
|
physWorld = dWorldCreate();
|
||||||
|
physSpace = dHashSpaceCreate(0);
|
||||||
|
contactgroup = dJointGroupCreate(0);
|
||||||
|
|
||||||
|
dWorldSetGravity(physWorld, 0, -0.5, 0);
|
||||||
|
|
||||||
|
this->name = "PhysicsService";
|
||||||
|
//dGeomID ground_geom = dCreatePlane(physSpace, 0, 1, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
XplicitNgine::~XplicitNgine()
|
||||||
|
{
|
||||||
|
dJointGroupDestroy (contactgroup);
|
||||||
|
dSpaceDestroy (physSpace);
|
||||||
|
dWorldDestroy (physWorld);
|
||||||
|
dCloseODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
void collisionCallback(void *data, dGeomID o1, dGeomID o2)
|
||||||
|
{
|
||||||
|
int i,n;
|
||||||
|
|
||||||
|
dBodyID b1 = dGeomGetBody(o1);
|
||||||
|
dBodyID b2 = dGeomGetBody(o2);
|
||||||
|
if (b1 && b2 && dAreConnected(b1, b2))
|
||||||
|
return;
|
||||||
|
|
||||||
|
const int N = 4;
|
||||||
|
dContact contact[N];
|
||||||
|
n = dCollide (o1,o2,N,&contact[0].geom,sizeof(dContact));
|
||||||
|
if (n > 0) {
|
||||||
|
for (i=0; i<n; i++) {
|
||||||
|
contact[i].surface.mode = dContactBounce | dContactSlip1 | dContactSlip2 | dContactSoftERP | dContactSoftCFM | dContactApprox1;
|
||||||
|
|
||||||
|
// Define contact surface properties
|
||||||
|
|
||||||
|
contact[i].surface.bounce = 0.5; //Elasticity
|
||||||
|
contact[i].surface.mu = 0.3F; //Friction
|
||||||
|
contact[i].surface.slip1 = 0.0;
|
||||||
|
contact[i].surface.slip2 = 0.0;
|
||||||
|
contact[i].surface.soft_erp = 0.8F;
|
||||||
|
contact[i].surface.soft_cfm = 0.01F;
|
||||||
|
|
||||||
|
// Create joints
|
||||||
|
dJointID c = dJointCreateContact(
|
||||||
|
g_xplicitNgine->physWorld,
|
||||||
|
g_xplicitNgine->contactgroup,
|
||||||
|
contact+i
|
||||||
|
);
|
||||||
|
|
||||||
|
dJointAttach (c,b1,b2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void XplicitNgine::deleteBody(PartInstance* partInstance)
|
||||||
|
{
|
||||||
|
if(partInstance->physBody != NULL)
|
||||||
|
{
|
||||||
|
while(dBodyGetNumJoints(partInstance->physBody) > 0) {
|
||||||
|
dJointDestroy(dBodyGetJoint(partInstance->physBody, 0));
|
||||||
|
}
|
||||||
|
dBodyDestroy(partInstance->physBody);
|
||||||
|
dGeomDestroy(partInstance->physGeom[0]);
|
||||||
|
partInstance->physBody = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void XplicitNgine::createBody(PartInstance* partInstance)
|
||||||
|
{
|
||||||
|
// calculate collisions
|
||||||
|
//dSpaceCollide (physSpace,0,&collisionCallback);
|
||||||
|
|
||||||
|
Vector3 partSize = partInstance->getSize();
|
||||||
|
Vector3 partPosition = partInstance->getPosition();
|
||||||
|
if(partInstance->physBody == NULL)
|
||||||
|
{
|
||||||
|
// init body
|
||||||
|
partInstance->physBody = dBodyCreate(physWorld);
|
||||||
|
|
||||||
|
// Create geom
|
||||||
|
if(partInstance->shape == Enum::Shape::Block)
|
||||||
|
{
|
||||||
|
partInstance->physGeom[0] = dCreateBox(physSpace,
|
||||||
|
partSize.x,
|
||||||
|
partSize.y,
|
||||||
|
partSize.z
|
||||||
|
);
|
||||||
|
|
||||||
|
dVector3 result;
|
||||||
|
dGeomBoxGetLengths(partInstance->physGeom[0], result);
|
||||||
|
//printf("[XplicitNgine] Part Geom Size: %.1f, %.1f, %.1f\n",
|
||||||
|
// result[0],
|
||||||
|
// result[1],
|
||||||
|
// result[2]
|
||||||
|
//);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
partInstance->physGeom[0] = dCreateSphere(physSpace, partSize[0]/2);
|
||||||
|
}
|
||||||
|
|
||||||
|
dMass mass;
|
||||||
|
mass.setBox(partSize.x, partSize.y, partSize.z, 0.7F);
|
||||||
|
dBodySetMass(partInstance->physBody, &mass);
|
||||||
|
|
||||||
|
// Debug output
|
||||||
|
|
||||||
|
|
||||||
|
// Create rigid body
|
||||||
|
//printf("[XplicitNgine] Created Geom for PartInstance\n");
|
||||||
|
dBodySetPosition(partInstance->physBody,
|
||||||
|
partPosition.x,
|
||||||
|
partPosition.y,
|
||||||
|
partPosition.z
|
||||||
|
);
|
||||||
|
|
||||||
|
dGeomSetPosition(partInstance->physGeom[0],
|
||||||
|
partPosition.x,
|
||||||
|
partPosition.y,
|
||||||
|
partPosition.z);
|
||||||
|
|
||||||
|
Matrix3 g3dRot = partInstance->getCFrame().rotation;
|
||||||
|
float rotation [12] = { g3dRot[0][0], g3dRot[0][1], g3dRot[0][2], 0,
|
||||||
|
g3dRot[1][0], g3dRot[1][1], g3dRot[1][2], 0,
|
||||||
|
g3dRot[2][0], g3dRot[2][1], g3dRot[2][2], 0};
|
||||||
|
|
||||||
|
dGeomSetRotation(partInstance->physGeom[0], rotation);
|
||||||
|
dBodySetRotation(partInstance->physBody, rotation);
|
||||||
|
|
||||||
|
//printf("[XplicitNgine] Created Body for PartInstance\n");
|
||||||
|
|
||||||
|
if(!partInstance->isAnchored())
|
||||||
|
dGeomSetBody(partInstance->physGeom[0], partInstance->physBody);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
if(!partInstance->isAnchored())
|
||||||
|
{
|
||||||
|
const dReal* physPosition = dBodyGetPosition(partInstance->physBody);
|
||||||
|
|
||||||
|
// TODO: Rotation code
|
||||||
|
// Probably should be done AFTER we get physics KINDA working!!!
|
||||||
|
const dReal* physRotation = dGeomGetRotation(partInstance->physGeom[0]);
|
||||||
|
//partInstance->setPosition(Vector3(physPosition[0], physPosition[1], physPosition[2]));
|
||||||
|
partInstance->setCFrameNoSync(CoordinateFrame(
|
||||||
|
Matrix3(physRotation[0],physRotation[1],physRotation[2],
|
||||||
|
physRotation[4],physRotation[5],physRotation[6],
|
||||||
|
physRotation[8],physRotation[9],physRotation[10]),
|
||||||
|
Vector3(physPosition[0], physPosition[1], physPosition[2])));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//STEP SHOULD NOT BE HERE!
|
||||||
|
//dWorldQuickStep(physWorld, stepSize);
|
||||||
|
//dJointGroupEmpty(contactgroup);
|
||||||
|
}
|
||||||
|
|
||||||
|
void XplicitNgine::step(float stepSize)
|
||||||
|
{
|
||||||
|
dSpaceCollide (physSpace,0,&collisionCallback);
|
||||||
|
dWorldQuickStep(physWorld, stepSize);
|
||||||
|
dJointGroupEmpty(contactgroup);
|
||||||
|
}
|
||||||
|
|
||||||
|
void XplicitNgine::updateBody(PartInstance *partInstance, CoordinateFrame * cFrame)
|
||||||
|
{
|
||||||
|
if(partInstance->physBody != NULL)
|
||||||
|
{
|
||||||
|
Vector3 position = cFrame->translation;
|
||||||
|
|
||||||
|
dBodySetPosition(partInstance->physBody,
|
||||||
|
position[0],
|
||||||
|
position[1],
|
||||||
|
position[2]
|
||||||
|
);
|
||||||
|
|
||||||
|
Matrix3 g3dRot = cFrame->rotation;
|
||||||
|
float rotation [12] = { g3dRot[0][0], g3dRot[0][1], g3dRot[0][2], 0,
|
||||||
|
g3dRot[1][0], g3dRot[1][1], g3dRot[1][2], 0,
|
||||||
|
g3dRot[2][0], g3dRot[2][1], g3dRot[2][2], 0};
|
||||||
|
|
||||||
|
dBodySetRotation(partInstance->physBody, rotation);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -148,7 +148,9 @@ LRESULT CALLBACK G3DProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|||||||
|
|
||||||
|
|
||||||
int main(int argc, char** argv) {
|
int main(int argc, char** argv) {
|
||||||
|
#ifndef _DEBUG
|
||||||
try{
|
try{
|
||||||
|
#endif
|
||||||
hresult = OleInitialize(NULL);
|
hresult = OleInitialize(NULL);
|
||||||
|
|
||||||
/* IInternetSecurityManager *pSecurityMgr;
|
/* IInternetSecurityManager *pSecurityMgr;
|
||||||
@@ -214,10 +216,12 @@ int main(int argc, char** argv) {
|
|||||||
Globals::mainHwnd = hwndMain;
|
Globals::mainHwnd = hwndMain;
|
||||||
Application app = Application(hwndMain);
|
Application app = Application(hwndMain);
|
||||||
app.run();
|
app.run();
|
||||||
|
#ifndef _DEBUG
|
||||||
}
|
}
|
||||||
catch(...)
|
catch(...)
|
||||||
{
|
{
|
||||||
OnError(-1);
|
OnError(-1);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user