108 Commits

Author SHA1 Message Date
Vulpovile
db435a17ac Merge pull request #100 from Vulpovile/release/0.0.107.0
Release 0.0.107.0
2022-10-06 12:13:55 -07:00
Vulpovile
b6615ce5fe Remove snapshot preparing for release 2022-10-06 12:03:28 -07:00
Vulpovile
2052ed6379 Merge pull request #99 from Vulpovile/feature/physics_improvements_and_optimizations
Made physics sync velocity
2022-10-06 12:00:42 -07:00
Vulpovile
edf8e09936 Merge branch 'develop' into feature/physics_improvements_and_optimizations 2022-10-06 11:54:37 -07:00
Vulpovile
ecbbc7c8e8 Made physics sync velocity 2022-10-06 11:38:36 -07:00
Vulpovile
47e9516cc2 Merge pull request #98 from Vulpovile/feature/physics_improvements_and_optimizations
Feature/physics improvements and optimizations
2022-10-06 09:43:48 -07:00
Vulpovile
11b3c861d9 Add ODE libs as zip for now - Maybe unnecessary? 2022-10-06 09:34:30 -07:00
Vulpovile
aec7c33155 Merge branch 'develop' of github.com:Vulpovile/G3D-Fun into feature/physics_improvements_and_optimizations 2022-10-06 09:06:22 -07:00
Vulpovile
2f86192634 Merge pull request #97 from himdeez/develop
Improve dragging tool and fix some physics bugs
2022-10-06 09:06:07 -07:00
himdeez
36aba44b51 improve dragging 2022-10-06 18:52:26 +03:00
Vulpovile
41ab9cf18c Add physics test RBXLs 2022-10-06 06:47:57 -07:00
Vulpovile
4e4ad669da Update to ODE-0.6 to fix T-Posing Parts 2022-10-06 06:34:48 -07:00
himdeez
a1b25d115a Temporary physics bug fix (anchored parts not updating when moved) 2022-10-06 16:28:38 +03:00
Vulpovile
15dc340a10 Fix crashes 2022-10-06 06:15:05 -07:00
Vulpovile
b01f5765b1 Fixed removing anchored parts when sleeping 2022-10-05 20:51:01 -07:00
Vulpovile
530bcf2a74 Optimizations and Physics Improvements 2022-10-05 20:35:59 -07:00
Vulpovile
f587d1d6db Merge pull request #95 from Vulpovile/master
sync: master to develop
2022-10-05 20:34:42 -07:00
Vulpovile
2af7077a0a Merge pull request #94 from Vulpovile/bugfix/partcollison
Fix part collisions
2022-10-05 20:32:58 -07:00
Vulpovile
c2fe4b5c80 Merge pull request #93 from Vulpovile/feature/remove_assembly_identiy
Added versioning file, Removed assemblyIdentity
2022-10-05 19:54:34 -07:00
728e67e1a5 Fix part collisions 2022-10-05 22:53:54 -04:00
Vulpovile
3b2d01b8dc Seperated versioning into seperate file, added snapshot 2022-10-05 17:34:45 -07:00
Vulpovile
dc94873297 Remove assemblyIdentity from manifest as it's not useful 2022-10-05 16:46:04 -07:00
Vulpovile
c1e8d6cd23 Merge pull request #92 from Vulpovile/feature/physics_sleep
Physics improvement and optimization
2022-10-05 14:36:00 -07:00
Vulpovile
8a1cd0c248 Merge branch 'develop' of github.com:Vulpovile/G3D-Fun into feature/physics_sleep 2022-10-05 13:52:20 -07:00
Vulpovile
09ea4744fc Optimized 2022-10-05 13:52:03 -07:00
Vulpovile
d886c178b6 Merge pull request #91 from Vulpovile/master
Synchronize develop with master
2022-10-05 10:14:13 -07:00
8fa056e191 Merge pull request #88 from Vulpovile/bugfix/hopperbin-crash
Placeholder hopperbin fix
2022-10-05 13:08:55 -04:00
Vulpovile
72866a259d Merge pull request #89 from Vulpovile/feature/physics_sleep
Added physics sleep, fixed stack overflows
2022-10-05 08:47:07 -07:00
Vulpovile
7474bea895 Merge branch 'develop' into feature/physics_sleep 2022-10-05 08:44:07 -07:00
NT_x86
e8fac6148a Merge pull request #90 from Vulpovile/LevelService
Add functionality to level service
2022-10-05 18:42:01 +03:00
Vulpovile
c5f4f829b3 Now Roblox HQ can run! 2022-10-05 08:21:43 -07:00
Vulpovile
da759427fd Preallocated stack to reduce stack overflows 2022-10-05 08:12:15 -07:00
Vulpovile
79e8a9738e Added physics sleep, fixed stack overflows 2022-10-05 07:39:19 -07:00
NT_x86
27ac18b503 Separate each condition as separate functions 2022-10-05 17:25:35 +03:00
NT_x86
932de58185 Add unsaved comments 2022-10-05 13:19:05 +03:00
NT_x86
48e65358f4 Implement initial level service functionality 2022-10-05 13:13:54 +03:00
Vulpovile
69aacebbb2 Merge branch 'master' into bugfix/hopperbin-crash 2022-10-04 23:41:08 -07:00
791fa55767 PR update 2022-10-05 02:33:06 -04:00
3b83e527f8 Fix Hopper selection crash, add some placeholder enums, add a compaitiblity shim 2022-10-05 02:10:51 -04:00
Vulpovile
618a3eeec0 Merge pull request #87 from Vulpovile/master
sync: master to develop
2022-10-04 23:09:02 -07:00
Vulpovile
de53dcf6b0 Merge pull request #86 from Vulpovile/cleanup/remove_aps_from_repo
Remove  .aps file from repo
2022-10-04 23:08:08 -07:00
Vulpovile
8ef3bcd352 Merge pull request #85 from Vulpovile/master
sync: master to develop
2022-10-04 23:03:09 -07:00
Vulpovile
7adf511bf7 Remove APS files 2022-10-04 23:00:55 -07:00
NT_x86
72cdf2af35 Merge pull request #84 from Vulpovile/NT_x86
Minor optimization in createBody
2022-10-05 08:59:37 +03:00
NT_x86
d9a0e1e120 Increment patch number 2022-10-05 08:49:56 +03:00
NT_x86
90a1a1b325 Merge branch 'master' of https://github.com/Vulpovile/Blocks3D.git into NT_x86 2022-10-05 07:42:24 +03:00
NT_x86
984bea6136 Run GetSize and GetPosition only once in CreateBody function 2022-10-05 07:34:49 +03:00
Vulpovile
083cb38e81 Merge pull request #83 from Vulpovile/master
sync: master to develop
2022-10-04 13:44:26 -07:00
Vulpovile
6d65cd2a56 Merge pull request #82 from Vulpovile/feature/workflows
Add workflow to sync to develop
2022-10-04 13:42:18 -07:00
Vulpovile
223364907f Add workflow to sync to develop 2022-10-04 13:13:15 -07:00
Vulpovile
d96bcd2a2b Merge pull request #78 from Vulpovile/bugfix/fix-broken-delete
Fix broken delete
2022-10-03 22:27:00 -07:00
Vulpovile
6de83febb5 Fix prefix 2022-10-03 22:26:09 -07:00
Vulpovile
aaceb4eb21 Version bump 2022-10-03 22:16:30 -07:00
Vulpovile
e1716e7417 Merge pull request #77 from Vulpovile/bugfix/fix-crash-on-void
Fix crash when bricks fall into void
2022-10-03 20:52:14 -07:00
Vulpovile
f5aaef5b16 Cleanup 2022-10-03 20:50:05 -07:00
Vulpovile
b66d524d7f Patch bump 2022-10-03 20:45:07 -07:00
Vulpovile
d468545428 Fix crash on falling into void 2022-10-03 20:44:23 -07:00
Vulpovile
1356ef52ab Merge pull request #76 from Vulpovile/feature/selection-service
Create a selection service
2022-10-03 20:16:05 -07:00
Vulpovile
67a5d99e1d Removed unused variable 2022-10-03 20:13:54 -07:00
Vulpovile
31db4dc894 Made innosetup version automatic 2022-10-03 20:00:22 -07:00
Vulpovile
50a5fd3ce1 Add program info 2022-10-03 19:48:45 -07:00
Vulpovile
a02a367a6e Fixed typo 2022-10-03 19:44:25 -07:00
Vulpovile
33a898e359 Made camera only move when application has focus 2022-10-03 19:43:35 -07:00
Vulpovile
f46e24d8f1 Moved selection to be a service 2022-10-03 19:30:38 -07:00
Vulpovile
b2db375ecf Merge pull request #75 from Vulpovile/bugfix/tie_phys_to_fps
Patch increment
2022-10-03 17:25:26 -07:00
Vulpovile
9039fbe862 Patch increment 2022-10-03 17:23:36 -07:00
DirtPiper
145e5c3340 Merge pull request #74 from Vulpovile/bugfix/tie_phys_to_fps
Tie physics to FPS
2022-10-03 20:23:24 -04:00
Vulpovile
ad741b86e5 Updated gitignore to not ignore manifest 2022-10-03 17:20:33 -07:00
Vulpovile
a04c178ed4 Made crash dialog not override AVE on debug 2022-10-03 17:19:30 -07:00
Vulpovile
584154d676 Add untracked manifest 2022-10-03 13:35:34 -07:00
Vulpovile
6e2c135b47 Tied physics to FPS 2022-10-03 11:26:56 -07:00
Vulpovile
e8ecb14f64 Merge pull request #61 from Vulpovile/feature/bugfix_properties_duplicate
Fix Bugs
2022-10-03 08:15:25 -07:00
Vulpovile
ad29d96068 Fix manifest file 2022-10-03 07:57:11 -07:00
Vulpovile
43647086fb Fix duplication crash 2022-10-03 07:48:28 -07:00
Vulpovile
eb07d852db Add Manifest 2022-10-03 07:46:09 -07:00
Vulpovile
7f5ab0df7f Fixed selection crashing when brick is removed due to physics 2022-10-03 07:42:24 -07:00
Vulpovile
3d31421164 Add required ODE library to build
To be removed once a separate repo is made for this (ODE/G3D)
2022-10-02 21:17:27 -07:00
Vulpovile
7b6cab626e Increment minor in setup again 2022-10-02 20:59:32 -07:00
Vulpovile
736a63e89f Increment minor in setup 2022-10-02 20:55:36 -07:00
Vulpovile
a74d485d1c Increment minor 2022-10-02 20:54:03 -07:00
DirtPiper
b7f276f849 Merge pull request #56 from Vulpovile/physics-test
Initial Physics Implementation
2022-10-02 23:44:51 -04:00
Vulpovile
e0be70f5e6 Last physics iteration for this one 2022-10-02 20:17:07 -07:00
Vulpovile
4ff212f2f3 Improved Physics again 2022-10-02 18:05:40 -07:00
Vulpovile
af8823c508 Improved Physics 2022-10-02 17:56:50 -07:00
Vulpovile
c27aa6a114 Fixed models crashing game 2022-10-02 17:17:40 -07:00
Vulpovile
df77572fe7 Made anchoring togglable in play mode 2022-10-02 16:44:59 -07:00
Vulpovile
8c47024960 a 2022-10-02 16:20:35 -07:00
Vulpovile
16a7b893e4 Merge branch 'master' of github.com:Vulpovile/G3D-Fun into physics-test 2022-10-02 16:12:01 -07:00
4a38f077a3 Merge pull request #55 from Vulpovile/FileDropDown
Added Switch Statement for File menu
2022-10-02 16:11:43 -07:00
Vulpovile
e17aa16086 Made physics work 2022-10-02 15:54:38 -07:00
Vulpovile
316359a395 Made physics let you move stuff 2022-10-02 14:28:45 -07:00
Vulpovile
226f2adda4 Made XplicitNgine secret instance of DataModel 2022-10-02 11:24:05 -07:00
FlareMicrosystems
d3f9b74ba1 Made cylinders and spheres act as spheres 2022-10-01 23:12:55 -07:00
FlareMicrosystems
ce999d226d Fixed icons 2022-10-01 22:03:54 -07:00
032e2ae668 Added Switch Statement for File menu 2022-10-02 01:00:44 -04:00
FlareMicrosystems
bc9a5bfc72 Added rotation 2022-10-01 19:30:57 -07:00
Modnark
8e73755d80 anchoring
Anchoring kinda works now
2022-10-01 21:13:40 -04:00
Modnark
2f3cb43807 init 2022-10-01 17:32:48 -04:00
Vulpovile
550962f1e6 Merge pull request #54 from Vulpovile/DataModelV2
Data model v2
2022-09-30 15:24:44 -07:00
FlareMicrosystems
c86fb57710 Removed Pro Requirement 2022-09-30 15:22:10 -07:00
Vulpovile
daacf6ae02 Icons 2021-08-17 13:28:59 -07:00
Vulpovile
066e955933 Added select all 2021-03-21 01:08:18 -07:00
Vulpovile
bba534be3c Fixes 2021-03-20 21:58:41 -07:00
Vulpovile
e473d0eb7e Removed old icon, made Dialogs.rc correct 2021-03-20 21:50:14 -07:00
Vulpovile
aab26d2e35 Finally got VS2005 to shut the hell up 2021-03-20 21:38:44 -07:00
Vulpovile
b9305d1fb9 Replaced resource.h because the old one was a disaster 2021-03-20 21:25:54 -07:00
Vulpovile
f9c4700e7d Removed redefinition from resources.h.
We should take a look at that file because it is insane
2021-03-20 21:14:11 -07:00
Vulpovile
239f7b8fa8 Tried to add VS2003 support... 2021-03-18 23:22:37 -07:00
63 changed files with 1029573 additions and 3466 deletions

25
.github/workflows/sync-develop.yml vendored Normal file
View 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
View File

@@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

8
Blocks3D.exe.manifest Normal file
View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/>
</dependentAssembly>
</dependency>
</assembly>

File diff suppressed because it is too large Load Diff

View File

@@ -1,121 +1,86 @@
// 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 "src/include/versioning.h"
#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
//
///////////////////////////////////////////////////////////////////////////// // Bitmap resources
// Neutral resources //
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_CAN
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU) IDB_BITMAP1 BITMAP "Parts.bmp"
#ifdef _WIN32
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
#pragma code_page(1252) 1 VERSIONINFO
#endif //_WIN32 FILEVERSION APP_GENER,APP_MAJOR,APP_MINOR,APP_PATCH
PRODUCTVERSION APP_GENER,APP_MAJOR,APP_MINOR,APP_PATCH
///////////////////////////////////////////////////////////////////////////// FILEOS VOS__WINDOWS32
// FILETYPE VFT_APP
// Icon FILESUBTYPE VFT2_UNKNOWN
// FILEFLAGSMASK 0
FILEFLAGS 0
// Icon with lowest ID value placed first to ensure application icon {
// remains consistent on all systems. BLOCK "StringFileInfo"
IDI_ICON1 ICON "roblox_RN1_icon.ico" {
#endif // Neutral resources BLOCK "100901B5"
///////////////////////////////////////////////////////////////////////////// {
VALUE "Comments", ""
VALUE "CompanyName", "Blocks3D Team"
///////////////////////////////////////////////////////////////////////////// VALUE "FileDescription", "Blocks 3D"
// English (Canada) resources VALUE "FileVersion", VER_STR(APP_VER_STRING)
VALUE "InternalName", "Blocks3D"
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENC) VALUE "LegalCopyright", "Blocks3D Team - 2022"
#ifdef _WIN32 VALUE "LegalTrademarks", ""
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_CAN VALUE "OriginalFilename", "Blocks3D.exe"
#pragma code_page(1252) VALUE "PrivateBuild", ""
#endif //_WIN32 VALUE "ProductName", "Blocks3D"
VALUE "ProductVersion", VER_STR(APP_VER_STRING)
///////////////////////////////////////////////////////////////////////////// VALUE "SpecialBuild", ""
// }
// Bitmap }
// BLOCK "VarFileInfo"
{
IDB_BITMAP1 BITMAP "Parts.bmp" VALUE "Translation", 0x1009, 0x01B5
}
///////////////////////////////////////////////////////////////////////////// }
//
// Dialog //
// // Dialog resources
//
IDD_DIALOG1 DIALOGEX 0, 0, 304, 46 LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU IDD_DIALOG1 DIALOG 0, 0, 295, 43
CAPTION "Dialog" STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SETFOREGROUND | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU
FONT 8, "MS Shell Dlg", 400, 0, 0x1 EXSTYLE WS_EX_WINDOWEDGE
BEGIN CAPTION "Insert Object"
DEFPUSHBUTTON "OK",IDOK,247,7,50,14 FONT 8, "Ms Shell Dlg"
PUSHBUTTON "Cancel",IDCANCEL,247,24,50,14 {
EDITTEXT IDC_EDIT1,68,7,162,14,ES_AUTOHSCROLL EDITTEXT IDC_EDIT1, 35, 6, 195, 14, ES_AUTOHSCROLL, WS_EX_LEFT
LTEXT "Class:",-1,43,7,20,8 LTEXT "Class:", 0, 10, 9, 20, 9, SS_LEFT, WS_EX_LEFT
END PUSHBUTTON "Cancel", IDCANCEL, 237, 24, 50, 14, 0, WS_EX_LEFT
DEFPUSHBUTTON "OK", IDOK, 237, 6, 50, 14, 0, WS_EX_LEFT
}
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE //
// // Icon resources
//
1 TEXTINCLUDE LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_CAN
BEGIN IDI_ICON1 ICON "FatB3dIcon.ico"
"resource.h\0"
END
//
3 TEXTINCLUDE // Manifest resources
BEGIN //
"\r\n" #ifndef _DEBUG
END LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
1 MANIFEST ".\\Blocks3D.exe.manifest"
#endif // APSTUDIO_INVOKED #endif
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO
BEGIN
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

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

View File

@@ -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
View File

@@ -0,0 +1,6 @@
Open Dynamics Engine
Copyright (c) 2001-2004,
Russell L. Smith.
All rights reserved.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

588
Physics Test/Cylinder.rbxl Normal file
View File

@@ -0,0 +1,588 @@
<roblox xmlns:xmime="http://www.w3.org/2005/05/xmlmime" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.roblox.com/roblox.xsd" version="4">
<External>null</External>
<External>nil</External>
<Item class="Workspace" referent="RBX0">
<Properties>
<token name="Controller">0</token>
<bool name="ControllerFlagShown">true</bool>
<Ref name="CurrentCamera">RBX1</Ref>
<double name="DistributedGameTime">0</double>
<CoordinateFrame name="ModelInPrimary">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
<R00>1</R00>
<R01>0</R01>
<R02>0</R02>
<R10>0</R10>
<R11>1</R11>
<R12>0</R12>
<R20>0</R20>
<R21>0</R21>
<R22>1</R22>
</CoordinateFrame>
<string name="Name">Workspace</string>
<Ref name="PrimaryPart">null</Ref>
<bool name="archivable">true</bool>
</Properties>
<Item class="Camera" referent="RBX1">
<Properties>
<Ref name="CameraSubject">null</Ref>
<token name="CameraType">0</token>
<CoordinateFrame name="CoordinateFrame">
<X>-2.9603548</X>
<Y>115.389259</Y>
<Z>44.9416084</Z>
<R00>0.112786211</R00>
<R01>0.522245169</R01>
<R02>-0.845304191</R02>
<R10>-2.22539209e-009</R10>
<R11>0.850732446</R11>
<R12>0.525598884</R12>
<R20>0.993619263</R20>
<R21>-0.0592803061</R21>
<R22>0.0959508941</R22>
</CoordinateFrame>
<CoordinateFrame name="Focus">
<X>13.9457293</X>
<Y>104.877281</Y>
<Z>43.0225906</Z>
<R00>1</R00>
<R01>0</R01>
<R02>0</R02>
<R10>0</R10>
<R11>1</R11>
<R12>0</R12>
<R20>0</R20>
<R21>0</R21>
<R22>1</R22>
</CoordinateFrame>
<string name="Name">Camera</string>
<bool name="archivable">true</bool>
</Properties>
</Item>
<Item class="Part" referent="RBX2">
<Properties>
<bool name="Anchored">false</bool>
<float name="BackParamA">-0.5</float>
<float name="BackParamB">0.5</float>
<token name="BackSurface">0</token>
<token name="BackSurfaceInput">0</token>
<float name="BottomParamA">-0.5</float>
<float name="BottomParamB">0.5</float>
<token name="BottomSurface">0</token>
<token name="BottomSurfaceInput">0</token>
<int name="BrickColor">21</int>
<CoordinateFrame name="CFrame">
<X>87.0174942</X>
<Y>48.0466728</Y>
<Z>25.0001202</Z>
<R00>-0.969314575</R00>
<R01>0.245822206</R01>
<R02>4.6762093e-006</R02>
<R10>0.245822206</R10>
<R11>0.969314933</R11>
<R12>6.9744442e-007</R12>
<R20>-4.35209677e-006</R20>
<R21>1.87532066e-006</R21>
<R22>-0.999999642</R22>
</CoordinateFrame>
<bool name="CanCollide">true</bool>
<token name="Controller">0</token>
<bool name="ControllerFlagShown">true</bool>
<bool name="DraggingV1">false</bool>
<float name="Elasticity">0.5</float>
<token name="FormFactor">0</token>
<float name="Friction">0.300000012</float>
<float name="FrontParamA">-0.5</float>
<float name="FrontParamB">0.5</float>
<token name="FrontSurface">0</token>
<token name="FrontSurfaceInput">0</token>
<float name="LeftParamA">-0.5</float>
<float name="LeftParamB">0.5</float>
<token name="LeftSurface">0</token>
<token name="LeftSurfaceInput">0</token>
<bool name="Locked">false</bool>
<string name="Name">Smooth Block Model</string>
<float name="Reflectance">0</float>
<float name="RightParamA">-0.5</float>
<float name="RightParamB">0.5</float>
<token name="RightSurface">0</token>
<token name="RightSurfaceInput">0</token>
<Vector3 name="RotVelocity">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Vector3>
<float name="TopParamA">-0.5</float>
<float name="TopParamB">0.5</float>
<token name="TopSurface">0</token>
<token name="TopSurfaceInput">0</token>
<float name="Transparency">0</float>
<Vector3 name="Velocity">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Vector3>
<bool name="archivable">true</bool>
<token name="shape">2</token>
<Vector3 name="size">
<X>6</X>
<Y>6</Y>
<Z>6</Z>
</Vector3>
</Properties>
</Item>
<Item class="Part" referent="RBX3">
<Properties>
<bool name="Anchored">true</bool>
<float name="BackParamA">-0.5</float>
<float name="BackParamB">0.5</float>
<token name="BackSurface">0</token>
<token name="BackSurfaceInput">0</token>
<float name="BottomParamA">-0.5</float>
<float name="BottomParamB">0.5</float>
<token name="BottomSurface">4</token>
<token name="BottomSurfaceInput">0</token>
<int name="BrickColor">23</int>
<CoordinateFrame name="CFrame">
<X>108.911415</X>
<Y>38.7803154</Y>
<Z>27.5002155</Z>
<R00>-0.969314575</R00>
<R01>0.245822206</R01>
<R02>4.6762093e-006</R02>
<R10>0.245822206</R10>
<R11>0.969314933</R11>
<R12>6.9744442e-007</R12>
<R20>-4.35209677e-006</R20>
<R21>1.87532066e-006</R21>
<R22>-0.999999642</R22>
</CoordinateFrame>
<bool name="CanCollide">true</bool>
<token name="Controller">0</token>
<bool name="ControllerFlagShown">true</bool>
<bool name="DraggingV1">false</bool>
<float name="Elasticity">0.5</float>
<token name="FormFactor">1</token>
<float name="Friction">0.300000012</float>
<float name="FrontParamA">-0.5</float>
<float name="FrontParamB">0.5</float>
<token name="FrontSurface">0</token>
<token name="FrontSurfaceInput">0</token>
<float name="LeftParamA">-0.5</float>
<float name="LeftParamB">0.5</float>
<token name="LeftSurface">0</token>
<token name="LeftSurfaceInput">0</token>
<bool name="Locked">false</bool>
<string name="Name">Smooth Block Model</string>
<float name="Reflectance">0</float>
<float name="RightParamA">-0.5</float>
<float name="RightParamB">0.5</float>
<token name="RightSurface">0</token>
<token name="RightSurfaceInput">0</token>
<Vector3 name="RotVelocity">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Vector3>
<float name="TopParamA">-0.5</float>
<float name="TopParamB">0.5</float>
<token name="TopSurface">3</token>
<token name="TopSurfaceInput">0</token>
<float name="Transparency">0</float>
<Vector3 name="Velocity">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Vector3>
<bool name="archivable">true</bool>
<token name="shape">1</token>
<Vector3 name="size">
<X>53</X>
<Y>1.20000005</Y>
<Z>1</Z>
</Vector3>
</Properties>
</Item>
<Item class="Part" referent="RBX4">
<Properties>
<bool name="Anchored">true</bool>
<float name="BackParamA">-0.5</float>
<float name="BackParamB">0.5</float>
<token name="BackSurface">0</token>
<token name="BackSurfaceInput">0</token>
<float name="BottomParamA">-0.5</float>
<float name="BottomParamB">0.5</float>
<token name="BottomSurface">4</token>
<token name="BottomSurfaceInput">0</token>
<int name="BrickColor">23</int>
<CoordinateFrame name="CFrame">
<X>141.499893</X>
<Y>38.1177788</Y>
<Z>27.0499611</Z>
<R00>1</R00>
<R01>-1.07914104e-006</R01>
<R02>-4.49890285e-006</R02>
<R10>-5.98966139e-008</R10>
<R11>0.969315231</R11>
<R12>-0.245820925</R12>
<R20>4.6261307e-006</R20>
<R21>0.245820925</R21>
<R22>0.969315231</R22>
</CoordinateFrame>
<bool name="CanCollide">true</bool>
<token name="Controller">0</token>
<bool name="ControllerFlagShown">true</bool>
<bool name="DraggingV1">false</bool>
<float name="Elasticity">0.5</float>
<token name="FormFactor">1</token>
<float name="Friction">0.300000012</float>
<float name="FrontParamA">-0.5</float>
<float name="FrontParamB">0.5</float>
<token name="FrontSurface">0</token>
<token name="FrontSurfaceInput">0</token>
<float name="LeftParamA">-0.5</float>
<float name="LeftParamB">0.5</float>
<token name="LeftSurface">0</token>
<token name="LeftSurfaceInput">0</token>
<bool name="Locked">false</bool>
<string name="Name">Smooth Block Model</string>
<float name="Reflectance">0</float>
<float name="RightParamA">-0.5</float>
<float name="RightParamB">0.5</float>
<token name="RightSurface">0</token>
<token name="RightSurfaceInput">0</token>
<Vector3 name="RotVelocity">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Vector3>
<float name="TopParamA">-0.5</float>
<float name="TopParamB">0.5</float>
<token name="TopSurface">3</token>
<token name="TopSurfaceInput">0</token>
<float name="Transparency">0</float>
<Vector3 name="Velocity">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Vector3>
<bool name="archivable">true</bool>
<token name="shape">1</token>
<Vector3 name="size">
<X>1</X>
<Y>16.8000011</Y>
<Z>12</Z>
</Vector3>
</Properties>
</Item>
<Item class="Part" referent="RBX5">
<Properties>
<bool name="Anchored">true</bool>
<float name="BackParamA">-0.5</float>
<float name="BackParamB">0.5</float>
<token name="BackSurface">0</token>
<token name="BackSurfaceInput">0</token>
<float name="BottomParamA">-0.5</float>
<float name="BottomParamB">0.5</float>
<token name="BottomSurface">4</token>
<token name="BottomSurfaceInput">0</token>
<int name="BrickColor">23</int>
<CoordinateFrame name="CFrame">
<X>108.911438</X>
<Y>38.7803192</Y>
<Z>22.5002174</Z>
<R00>-0.969314575</R00>
<R01>0.245822206</R01>
<R02>4.6762093e-006</R02>
<R10>0.245822206</R10>
<R11>0.969314933</R11>
<R12>6.9744442e-007</R12>
<R20>-4.35209677e-006</R20>
<R21>1.87532066e-006</R21>
<R22>-0.999999642</R22>
</CoordinateFrame>
<bool name="CanCollide">true</bool>
<token name="Controller">0</token>
<bool name="ControllerFlagShown">true</bool>
<bool name="DraggingV1">false</bool>
<float name="Elasticity">0.5</float>
<token name="FormFactor">1</token>
<float name="Friction">0.300000012</float>
<float name="FrontParamA">-0.5</float>
<float name="FrontParamB">0.5</float>
<token name="FrontSurface">0</token>
<token name="FrontSurfaceInput">0</token>
<float name="LeftParamA">-0.5</float>
<float name="LeftParamB">0.5</float>
<token name="LeftSurface">0</token>
<token name="LeftSurfaceInput">0</token>
<bool name="Locked">false</bool>
<string name="Name">Smooth Block Model</string>
<float name="Reflectance">0</float>
<float name="RightParamA">-0.5</float>
<float name="RightParamB">0.5</float>
<token name="RightSurface">0</token>
<token name="RightSurfaceInput">0</token>
<Vector3 name="RotVelocity">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Vector3>
<float name="TopParamA">-0.5</float>
<float name="TopParamB">0.5</float>
<token name="TopSurface">3</token>
<token name="TopSurfaceInput">0</token>
<float name="Transparency">0</float>
<Vector3 name="Velocity">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Vector3>
<bool name="archivable">true</bool>
<token name="shape">1</token>
<Vector3 name="size">
<X>53</X>
<Y>1.20000005</Y>
<Z>1</Z>
</Vector3>
</Properties>
</Item>
<Item class="Part" referent="RBX6">
<Properties>
<bool name="Anchored">true</bool>
<float name="BackParamA">-0.5</float>
<float name="BackParamB">0.5</float>
<token name="BackSurface">0</token>
<token name="BackSurfaceInput">0</token>
<float name="BottomParamA">-0.5</float>
<float name="BottomParamB">0.5</float>
<token name="BottomSurface">4</token>
<token name="BottomSurfaceInput">0</token>
<int name="BrickColor">23</int>
<CoordinateFrame name="CFrame">
<X>140.499786</X>
<Y>24.7802944</Y>
<Z>47.911438</Z>
<R00>4.35209677e-006</R00>
<R01>-1.87532066e-006</R01>
<R02>0.999999642</R02>
<R10>0.245822206</R10>
<R11>0.969314933</R11>
<R12>6.9744442e-007</R12>
<R20>-0.969314575</R20>
<R21>0.245822206</R21>
<R22>4.6762093e-006</R22>
</CoordinateFrame>
<bool name="CanCollide">true</bool>
<token name="Controller">0</token>
<bool name="ControllerFlagShown">true</bool>
<bool name="DraggingV1">false</bool>
<float name="Elasticity">0.5</float>
<token name="FormFactor">1</token>
<float name="Friction">0.300000012</float>
<float name="FrontParamA">-0.5</float>
<float name="FrontParamB">0.5</float>
<token name="FrontSurface">0</token>
<token name="FrontSurfaceInput">0</token>
<float name="LeftParamA">-0.5</float>
<float name="LeftParamB">0.5</float>
<token name="LeftSurface">0</token>
<token name="LeftSurfaceInput">0</token>
<bool name="Locked">false</bool>
<string name="Name">Smooth Block Model</string>
<float name="Reflectance">0</float>
<float name="RightParamA">-0.5</float>
<float name="RightParamB">0.5</float>
<token name="RightSurface">0</token>
<token name="RightSurfaceInput">0</token>
<Vector3 name="RotVelocity">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Vector3>
<float name="TopParamA">-0.5</float>
<float name="TopParamB">0.5</float>
<token name="TopSurface">3</token>
<token name="TopSurfaceInput">0</token>
<float name="Transparency">0</float>
<Vector3 name="Velocity">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Vector3>
<bool name="archivable">true</bool>
<token name="shape">1</token>
<Vector3 name="size">
<X>53</X>
<Y>1.20000005</Y>
<Z>1</Z>
</Vector3>
</Properties>
</Item>
<Item class="Part" referent="RBX7">
<Properties>
<bool name="Anchored">true</bool>
<float name="BackParamA">-0.5</float>
<float name="BackParamB">0.5</float>
<token name="BackSurface">0</token>
<token name="BackSurfaceInput">0</token>
<float name="BottomParamA">-0.5</float>
<float name="BottomParamB">0.5</float>
<token name="BottomSurface">4</token>
<token name="BottomSurfaceInput">0</token>
<int name="BrickColor">23</int>
<CoordinateFrame name="CFrame">
<X>135.499786</X>
<Y>24.7802944</Y>
<Z>47.9114227</Z>
<R00>4.35515585e-006</R00>
<R01>-1.85873387e-006</R01>
<R02>0.999999881</R02>
<R10>0.245822236</R10>
<R11>0.969314933</R11>
<R12>7.14274279e-007</R12>
<R20>-0.969314814</R20>
<R21>0.245822236</R21>
<R22>4.67732343e-006</R22>
</CoordinateFrame>
<bool name="CanCollide">true</bool>
<token name="Controller">0</token>
<bool name="ControllerFlagShown">true</bool>
<bool name="DraggingV1">false</bool>
<float name="Elasticity">0.5</float>
<token name="FormFactor">1</token>
<float name="Friction">0.300000012</float>
<float name="FrontParamA">-0.5</float>
<float name="FrontParamB">0.5</float>
<token name="FrontSurface">0</token>
<token name="FrontSurfaceInput">0</token>
<float name="LeftParamA">-0.5</float>
<float name="LeftParamB">0.5</float>
<token name="LeftSurface">0</token>
<token name="LeftSurfaceInput">0</token>
<bool name="Locked">false</bool>
<string name="Name">Smooth Block Model</string>
<float name="Reflectance">0</float>
<float name="RightParamA">-0.5</float>
<float name="RightParamB">0.5</float>
<token name="RightSurface">0</token>
<token name="RightSurfaceInput">0</token>
<Vector3 name="RotVelocity">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Vector3>
<float name="TopParamA">-0.5</float>
<float name="TopParamB">0.5</float>
<token name="TopSurface">3</token>
<token name="TopSurfaceInput">0</token>
<float name="Transparency">0</float>
<Vector3 name="Velocity">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Vector3>
<bool name="archivable">true</bool>
<token name="shape">1</token>
<Vector3 name="size">
<X>53</X>
<Y>1.20000005</Y>
<Z>1</Z>
</Vector3>
</Properties>
</Item>
</Item>
<Item class="RunService" referent="RBX8">
<Properties>
<string name="Name">Run Service</string>
<bool name="archivable">true</bool>
</Properties>
</Item>
<External>RBX9</External>
<External>RBX10</External>
<Item class="Players" referent="RBX11">
<Properties>
<int name="MaxPlayers">12</int>
<string name="Name">Players</string>
<bool name="archivable">true</bool>
</Properties>
</Item>
<Item class="StarterPack" referent="RBX12">
<Properties>
<string name="Name">StarterPack</string>
<bool name="archivable">true</bool>
</Properties>
</Item>
<Item class="SoundService" referent="RBX13">
<Properties>
<token name="AmbientReverb">0</token>
<float name="DistanceFactor">10</float>
<float name="DopplerScale">1</float>
<string name="Name">Soundscape</string>
<float name="RolloffScale">1</float>
<bool name="archivable">true</bool>
</Properties>
<External>RBX14</External>
<External>RBX15</External>
<External>RBX16</External>
<External>RBX17</External>
<External>RBX18</External>
<External>RBX19</External>
<External>RBX20</External>
<External>RBX21</External>
<External>RBX22</External>
<External>RBX23</External>
<External>RBX24</External>
<External>RBX25</External>
<External>RBX26</External>
<External>RBX27</External>
</Item>
<Item class="ContentProvider" referent="RBX28">
<Properties>
<string name="Name">Instance</string>
<bool name="archivable">true</bool>
</Properties>
</Item>
<Item class="PhysicsService" referent="RBX29">
<Properties>
<string name="Name">PhysicsService</string>
<bool name="archivable">true</bool>
</Properties>
</Item>
<External>RBX30</External>
<Item class="Selection" referent="RBX31">
<Properties>
<string name="Name">Selection</string>
<bool name="archivable">true</bool>
</Properties>
</Item>
<External>RBX32</External>
<Item class="Lighting" referent="RBX33">
<Properties>
<Color3 name="Ambient">4286940549</Color3>
<float name="Brightness">1</float>
<Color3 name="ColorShift_Bottom">4278190080</Color3>
<Color3 name="ColorShift_Top">4278190080</Color3>
<float name="GeographicLatitude">41.7332993</float>
<string name="Name">Lighting</string>
<Color3 name="ShadowColor">4290295997</Color3>
<string name="TimeOfDay">14:00:00</string>
<bool name="archivable">true</bool>
</Properties>
</Item>
<Item class="ControllerService" referent="RBX34">
<Properties>
<string name="Name">Instance</string>
<bool name="archivable">true</bool>
</Properties>
</Item>
<Item class="ChangeHistoryService" referent="RBX35">
<Properties>
<string name="Name">ChangeHistoryService</string>
<bool name="archivable">true</bool>
</Properties>
</Item>
<External>RBX36</External>
</roblox>

586202
Physics Test/Roblox HQ.rbxl Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,578 @@
<roblox xmlns:xmime="http://www.w3.org/2005/05/xmlmime" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.roblox.com/roblox.xsd" version="4">
<External>null</External>
<External>nil</External>
<Item class="RunService">
<Properties>
<string name="Name">Run Service</string>
<bool name="archivable">true</bool>
</Properties>
</Item>
<Item class="Selection">
<Properties>
<string name="Name">Selection</string>
<bool name="archivable">true</bool>
</Properties>
</Item>
<Item class="Workspace">
<Properties>
<token name="Controller">0</token>
<bool name="ControllerFlagShown">true</bool>
<Ref name="CurrentCamera">RBX0</Ref>
<CoordinateFrame name="ModelInPrimary">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
<R00>1</R00>
<R01>0</R01>
<R02>0</R02>
<R10>0</R10>
<R11>1</R11>
<R12>0</R12>
<R20>0</R20>
<R21>0</R21>
<R22>1</R22>
</CoordinateFrame>
<string name="Name">Workspace</string>
<Ref name="PrimaryPart">RBX1</Ref>
<bool name="archivable">true</bool>
</Properties>
<Item class="Camera" referent="RBX0">
<Properties>
<Ref name="CameraSubject">null</Ref>
<token name="CameraType">0</token>
<CoordinateFrame name="CoordinateFrame">
<X>202.42688</X>
<Y>55.4607582</Y>
<Z>3.2956109</Z>
<R00>0.0106770508</R00>
<R01>0.00328579429</R01>
<R02>0.999937654</R02>
<R10>4.65661287e-010</R10>
<R11>0.999994576</R11>
<R12>-0.00328598148</R12>
<R20>-0.999943018</R20>
<R21>3.50852497e-005</R21>
<R22>0.010676994</R22>
</CoordinateFrame>
<CoordinateFrame name="Focus">
<X>182.428116</X>
<Y>55.5264778</Y>
<Z>3.08207107</Z>
<R00>1</R00>
<R01>0</R01>
<R02>0</R02>
<R10>0</R10>
<R11>1</R11>
<R12>0</R12>
<R20>0</R20>
<R21>0</R21>
<R22>1</R22>
</CoordinateFrame>
<string name="Name">Camera</string>
<bool name="archivable">true</bool>
</Properties>
</Item>
<Item class="Part" referent="RBX1">
<Properties>
<bool name="Anchored">true</bool>
<float name="BackParamA">-0.5</float>
<float name="BackParamB">0.5</float>
<token name="BackSurface">0</token>
<token name="BackSurfaceInput">0</token>
<float name="BottomParamA">-0.5</float>
<float name="BottomParamB">0.5</float>
<token name="BottomSurface">0</token>
<token name="BottomSurfaceInput">0</token>
<int name="BrickColor">37</int>
<CoordinateFrame name="CFrame">
<X>0</X>
<Y>2.79999995</Y>
<Z>-4</Z>
<R00>1</R00>
<R01>0</R01>
<R02>0</R02>
<R10>0</R10>
<R11>1</R11>
<R12>0</R12>
<R20>0</R20>
<R21>0</R21>
<R22>1</R22>
</CoordinateFrame>
<bool name="CanCollide">true</bool>
<bool name="CastsShadows">false</bool>
<token name="Controller">0</token>
<bool name="ControllerFlagShown">true</bool>
<bool name="Cullable">true</bool>
<bool name="DraggingV1">false</bool>
<float name="Elasticity">0.5</float>
<token name="FormFactor">0</token>
<float name="Friction">0.300000012</float>
<float name="FrontParamA">-0.5</float>
<float name="FrontParamB">0.5</float>
<token name="FrontSurface">0</token>
<token name="FrontSurfaceInput">0</token>
<float name="LeftParamA">-0.5</float>
<float name="LeftParamB">0.5</float>
<token name="LeftSurface">0</token>
<token name="LeftSurfaceInput">0</token>
<bool name="Locked">true</bool>
<string name="Name">Part</string>
<float name="Reflectance">0</float>
<float name="RightParamA">-0.5</float>
<float name="RightParamB">0.5</float>
<token name="RightSurface">0</token>
<token name="RightSurfaceInput">0</token>
<Vector3 name="RotVelocity">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Vector3>
<float name="TopParamA">-0.5</float>
<float name="TopParamB">0.5</float>
<token name="TopSurface">0</token>
<token name="TopSurfaceInput">0</token>
<float name="Transparency">0</float>
<Vector3 name="Velocity">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Vector3>
<bool name="archivable">true</bool>
<token name="shape">1</token>
<Vector3 name="size">
<X>64</X>
<Y>1</Y>
<Z>248</Z>
</Vector3>
</Properties>
</Item>
<Item class="Part">
<Properties>
<bool name="Anchored">false</bool>
<float name="BackParamA">-0.5</float>
<float name="BackParamB">0.5</float>
<token name="BackSurface">0</token>
<token name="BackSurfaceInput">0</token>
<float name="BottomParamA">-0.5</float>
<float name="BottomParamB">0.5</float>
<token name="BottomSurface">0</token>
<token name="BottomSurfaceInput">0</token>
<int name="BrickColor">23</int>
<CoordinateFrame name="CFrame">
<X>0</X>
<Y>78.3000031</Y>
<Z>-96</Z>
<R00>1</R00>
<R01>0</R01>
<R02>0</R02>
<R10>0</R10>
<R11>1</R11>
<R12>0</R12>
<R20>0</R20>
<R21>0</R21>
<R22>1</R22>
</CoordinateFrame>
<bool name="CanCollide">true</bool>
<bool name="CastsShadows">false</bool>
<token name="Controller">0</token>
<bool name="ControllerFlagShown">true</bool>
<bool name="Cullable">true</bool>
<bool name="DraggingV1">false</bool>
<float name="Elasticity">0.5</float>
<token name="FormFactor">0</token>
<float name="Friction">0.300000012</float>
<float name="FrontParamA">-0.5</float>
<float name="FrontParamB">0.5</float>
<token name="FrontSurface">0</token>
<token name="FrontSurfaceInput">0</token>
<float name="LeftParamA">-0.5</float>
<float name="LeftParamB">0.5</float>
<token name="LeftSurface">0</token>
<token name="LeftSurfaceInput">0</token>
<bool name="Locked">false</bool>
<string name="Name">Part</string>
<float name="Reflectance">0</float>
<float name="RightParamA">-0.5</float>
<float name="RightParamB">0.5</float>
<token name="RightSurface">0</token>
<token name="RightSurfaceInput">0</token>
<Vector3 name="RotVelocity">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Vector3>
<float name="TopParamA">-0.5</float>
<float name="TopParamB">0.5</float>
<token name="TopSurface">0</token>
<token name="TopSurfaceInput">0</token>
<float name="Transparency">0</float>
<Vector3 name="Velocity">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Vector3>
<bool name="archivable">true</bool>
<token name="shape">1</token>
<Vector3 name="size">
<X>2</X>
<Y>2</Y>
<Z>2</Z>
</Vector3>
</Properties>
</Item>
<Item class="Part">
<Properties>
<bool name="Anchored">false</bool>
<float name="BackParamA">-0.5</float>
<float name="BackParamB">0.5</float>
<token name="BackSurface">0</token>
<token name="BackSurfaceInput">0</token>
<float name="BottomParamA">-0.5</float>
<float name="BottomParamB">0.5</float>
<token name="BottomSurface">0</token>
<token name="BottomSurfaceInput">0</token>
<int name="BrickColor">23</int>
<CoordinateFrame name="CFrame">
<X>0</X>
<Y>79.3000031</Y>
<Z>-62</Z>
<R00>1</R00>
<R01>0</R01>
<R02>0</R02>
<R10>0</R10>
<R11>1</R11>
<R12>0</R12>
<R20>0</R20>
<R21>0</R21>
<R22>1</R22>
</CoordinateFrame>
<bool name="CanCollide">true</bool>
<bool name="CastsShadows">false</bool>
<token name="Controller">0</token>
<bool name="ControllerFlagShown">true</bool>
<bool name="Cullable">true</bool>
<bool name="DraggingV1">false</bool>
<float name="Elasticity">0.5</float>
<token name="FormFactor">0</token>
<float name="Friction">0.300000012</float>
<float name="FrontParamA">-0.5</float>
<float name="FrontParamB">0.5</float>
<token name="FrontSurface">0</token>
<token name="FrontSurfaceInput">0</token>
<float name="LeftParamA">-0.5</float>
<float name="LeftParamB">0.5</float>
<token name="LeftSurface">0</token>
<token name="LeftSurfaceInput">0</token>
<bool name="Locked">false</bool>
<string name="Name">Part</string>
<float name="Reflectance">0</float>
<float name="RightParamA">-0.5</float>
<float name="RightParamB">0.5</float>
<token name="RightSurface">0</token>
<token name="RightSurfaceInput">0</token>
<Vector3 name="RotVelocity">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Vector3>
<float name="TopParamA">-0.5</float>
<float name="TopParamB">0.5</float>
<token name="TopSurface">0</token>
<token name="TopSurfaceInput">0</token>
<float name="Transparency">0</float>
<Vector3 name="Velocity">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Vector3>
<bool name="archivable">true</bool>
<token name="shape">1</token>
<Vector3 name="size">
<X>4</X>
<Y>4</Y>
<Z>4</Z>
</Vector3>
</Properties>
</Item>
<Item class="Part">
<Properties>
<bool name="Anchored">false</bool>
<float name="BackParamA">-0.5</float>
<float name="BackParamB">0.5</float>
<token name="BackSurface">0</token>
<token name="BackSurfaceInput">0</token>
<float name="BottomParamA">-0.5</float>
<float name="BottomParamB">0.5</float>
<token name="BottomSurface">0</token>
<token name="BottomSurfaceInput">0</token>
<int name="BrickColor">23</int>
<CoordinateFrame name="CFrame">
<X>0</X>
<Y>81.3000031</Y>
<Z>-25</Z>
<R00>1</R00>
<R01>0</R01>
<R02>0</R02>
<R10>0</R10>
<R11>1</R11>
<R12>0</R12>
<R20>0</R20>
<R21>0</R21>
<R22>1</R22>
</CoordinateFrame>
<bool name="CanCollide">true</bool>
<bool name="CastsShadows">false</bool>
<token name="Controller">0</token>
<bool name="ControllerFlagShown">true</bool>
<bool name="Cullable">true</bool>
<bool name="DraggingV1">false</bool>
<float name="Elasticity">0.5</float>
<token name="FormFactor">0</token>
<float name="Friction">0.300000012</float>
<float name="FrontParamA">-0.5</float>
<float name="FrontParamB">0.5</float>
<token name="FrontSurface">0</token>
<token name="FrontSurfaceInput">0</token>
<float name="LeftParamA">-0.5</float>
<float name="LeftParamB">0.5</float>
<token name="LeftSurface">0</token>
<token name="LeftSurfaceInput">0</token>
<bool name="Locked">false</bool>
<string name="Name">Part</string>
<float name="Reflectance">0</float>
<float name="RightParamA">-0.5</float>
<float name="RightParamB">0.5</float>
<token name="RightSurface">0</token>
<token name="RightSurfaceInput">0</token>
<Vector3 name="RotVelocity">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Vector3>
<float name="TopParamA">-0.5</float>
<float name="TopParamB">0.5</float>
<token name="TopSurface">0</token>
<token name="TopSurfaceInput">0</token>
<float name="Transparency">0</float>
<Vector3 name="Velocity">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Vector3>
<bool name="archivable">true</bool>
<token name="shape">1</token>
<Vector3 name="size">
<X>8</X>
<Y>8</Y>
<Z>8</Z>
</Vector3>
</Properties>
</Item>
<Item class="Part">
<Properties>
<bool name="Anchored">false</bool>
<float name="BackParamA">-0.5</float>
<float name="BackParamB">0.5</float>
<token name="BackSurface">0</token>
<token name="BackSurfaceInput">0</token>
<float name="BottomParamA">-0.5</float>
<float name="BottomParamB">0.5</float>
<token name="BottomSurface">0</token>
<token name="BottomSurfaceInput">0</token>
<int name="BrickColor">23</int>
<CoordinateFrame name="CFrame">
<X>0</X>
<Y>85.3000031</Y>
<Z>18</Z>
<R00>1</R00>
<R01>0</R01>
<R02>0</R02>
<R10>0</R10>
<R11>1</R11>
<R12>0</R12>
<R20>0</R20>
<R21>0</R21>
<R22>1</R22>
</CoordinateFrame>
<bool name="CanCollide">true</bool>
<bool name="CastsShadows">false</bool>
<token name="Controller">0</token>
<bool name="ControllerFlagShown">true</bool>
<bool name="Cullable">true</bool>
<bool name="DraggingV1">false</bool>
<float name="Elasticity">0.5</float>
<token name="FormFactor">0</token>
<float name="Friction">0.300000012</float>
<float name="FrontParamA">-0.5</float>
<float name="FrontParamB">0.5</float>
<token name="FrontSurface">0</token>
<token name="FrontSurfaceInput">0</token>
<float name="LeftParamA">-0.5</float>
<float name="LeftParamB">0.5</float>
<token name="LeftSurface">0</token>
<token name="LeftSurfaceInput">0</token>
<bool name="Locked">false</bool>
<string name="Name">Part</string>
<float name="Reflectance">0</float>
<float name="RightParamA">-0.5</float>
<float name="RightParamB">0.5</float>
<token name="RightSurface">0</token>
<token name="RightSurfaceInput">0</token>
<Vector3 name="RotVelocity">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Vector3>
<float name="TopParamA">-0.5</float>
<float name="TopParamB">0.5</float>
<token name="TopSurface">0</token>
<token name="TopSurfaceInput">0</token>
<float name="Transparency">0</float>
<Vector3 name="Velocity">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Vector3>
<bool name="archivable">true</bool>
<token name="shape">1</token>
<Vector3 name="size">
<X>16</X>
<Y>16</Y>
<Z>16</Z>
</Vector3>
</Properties>
</Item>
<Item class="Part">
<Properties>
<bool name="Anchored">false</bool>
<float name="BackParamA">-0.5</float>
<float name="BackParamB">0.5</float>
<token name="BackSurface">0</token>
<token name="BackSurfaceInput">0</token>
<float name="BottomParamA">-0.5</float>
<float name="BottomParamB">0.5</float>
<token name="BottomSurface">0</token>
<token name="BottomSurfaceInput">0</token>
<int name="BrickColor">23</int>
<CoordinateFrame name="CFrame">
<X>0</X>
<Y>93.3000031</Y>
<Z>73</Z>
<R00>1</R00>
<R01>0</R01>
<R02>0</R02>
<R10>0</R10>
<R11>1</R11>
<R12>0</R12>
<R20>0</R20>
<R21>0</R21>
<R22>1</R22>
</CoordinateFrame>
<bool name="CanCollide">true</bool>
<bool name="CastsShadows">false</bool>
<token name="Controller">0</token>
<bool name="ControllerFlagShown">true</bool>
<bool name="Cullable">true</bool>
<bool name="DraggingV1">false</bool>
<float name="Elasticity">0.5</float>
<token name="FormFactor">0</token>
<float name="Friction">0.300000012</float>
<float name="FrontParamA">-0.5</float>
<float name="FrontParamB">0.5</float>
<token name="FrontSurface">0</token>
<token name="FrontSurfaceInput">0</token>
<float name="LeftParamA">-0.5</float>
<float name="LeftParamB">0.5</float>
<token name="LeftSurface">0</token>
<token name="LeftSurfaceInput">0</token>
<bool name="Locked">false</bool>
<string name="Name">Part</string>
<float name="Reflectance">0</float>
<float name="RightParamA">-0.5</float>
<float name="RightParamB">0.5</float>
<token name="RightSurface">0</token>
<token name="RightSurfaceInput">0</token>
<Vector3 name="RotVelocity">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Vector3>
<float name="TopParamA">-0.5</float>
<float name="TopParamB">0.5</float>
<token name="TopSurface">0</token>
<token name="TopSurfaceInput">0</token>
<float name="Transparency">0</float>
<Vector3 name="Velocity">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Vector3>
<bool name="archivable">true</bool>
<token name="shape">1</token>
<Vector3 name="size">
<X>32</X>
<Y>32</Y>
<Z>32</Z>
</Vector3>
</Properties>
</Item>
</Item>
<External>RBX2</External>
<External>RBX3</External>
<Item class="Players">
<Properties>
<string name="Name">Players</string>
<bool name="archivable">true</bool>
<int name="maxPlayers">10</int>
</Properties>
</Item>
<Item class="StarterPack">
<Properties>
<string name="Name">StarterPack</string>
<bool name="archivable">true</bool>
</Properties>
</Item>
<Item class="SoundService">
<Properties>
<string name="Name">SoundService</string>
<bool name="archivable">true</bool>
<float name="distancefactor">10</float>
<float name="dopplerscale">1</float>
<float name="rolloffscale">1</float>
</Properties>
<External>RBX4</External>
<External>RBX5</External>
<External>RBX6</External>
<External>RBX7</External>
<External>RBX8</External>
<External>RBX9</External>
<External>RBX10</External>
<External>RBX11</External>
<External>RBX12</External>
<External>RBX13</External>
<External>RBX14</External>
<External>RBX15</External>
<External>RBX16</External>
<External>RBX17</External>
</Item>
<Item class="Lighting">
<Properties>
<Color3 name="BottomAmbientV9">4286220152</Color3>
<Color3 name="ClearColor">4278190080</Color3>
<string name="Name">Lighting</string>
<Color3 name="SpotLightV9">4290822336</Color3>
<string name="TimeOfDay">14:00:00</string>
<Color3 name="TopAmbientV9">4292006362</Color3>
<bool name="archivable">true</bool>
</Properties>
</Item>
<Item class="ControllerService">
<Properties>
<string name="Name">Instance</string>
<bool name="archivable">true</bool>
</Properties>
</Item>
<External>RBX18</External>
<External>RBX19</External>
<External>RBX20</External>
</roblox>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,660 @@
<roblox xmlns:xmime="http://www.w3.org/2005/05/xmlmime" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.roblox.com/roblox.xsd" version="4">
<External>null</External>
<External>nil</External>
<Item class="Workspace" referent="RBX0">
<Properties>
<token name="Controller">0</token>
<bool name="ControllerFlagShown">true</bool>
<Ref name="CurrentCamera">RBX1</Ref>
<double name="DistributedGameTime">0</double>
<CoordinateFrame name="ModelInPrimary">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
<R00>1</R00>
<R01>0</R01>
<R02>0</R02>
<R10>0</R10>
<R11>1</R11>
<R12>0</R12>
<R20>0</R20>
<R21>0</R21>
<R22>1</R22>
</CoordinateFrame>
<string name="Name">Workspace</string>
<Ref name="PrimaryPart">null</Ref>
<bool name="archivable">true</bool>
</Properties>
<Item class="Camera" referent="RBX1">
<Properties>
<Ref name="CameraSubject">null</Ref>
<token name="CameraType">0</token>
<CoordinateFrame name="CoordinateFrame">
<X>-62.3436203</X>
<Y>290.964996</Y>
<Z>130.047195</Z>
<R00>0.900759101</R00>
<R01>0.385544956</R01>
<R02>-0.199970409</R02>
<R10>3.07713033e-009</R10>
<R11>0.460422784</R11>
<R12>0.887699783</R12>
<R20>0.434319079</R20>
<R21>-0.799603641</R21>
<R22>0.414730012</R22>
</CoordinateFrame>
<CoordinateFrame name="Focus">
<X>-58.3442116</X>
<Y>273.210999</Y>
<Z>121.752594</Z>
<R00>1</R00>
<R01>0</R01>
<R02>0</R02>
<R10>0</R10>
<R11>1</R11>
<R12>0</R12>
<R20>0</R20>
<R21>0</R21>
<R22>1</R22>
</CoordinateFrame>
<string name="Name">Camera</string>
<bool name="archivable">true</bool>
</Properties>
</Item>
<Item class="Part" referent="RBX2">
<Properties>
<bool name="Anchored">true</bool>
<float name="BackParamA">-0.5</float>
<float name="BackParamB">0.5</float>
<token name="BackSurface">0</token>
<token name="BackSurfaceInput">0</token>
<float name="BottomParamA">-0.5</float>
<float name="BottomParamB">0.5</float>
<token name="BottomSurface">4</token>
<token name="BottomSurfaceInput">0</token>
<int name="BrickColor">37</int>
<CoordinateFrame name="CFrame">
<X>0</X>
<Y>0.600000024</Y>
<Z>0</Z>
<R00>-1</R00>
<R01>0</R01>
<R02>-0</R02>
<R10>-0</R10>
<R11>1</R11>
<R12>-0</R12>
<R20>-0</R20>
<R21>0</R21>
<R22>-1</R22>
</CoordinateFrame>
<bool name="CanCollide">true</bool>
<token name="Controller">0</token>
<bool name="ControllerFlagShown">true</bool>
<bool name="DraggingV1">false</bool>
<float name="Elasticity">0.5</float>
<token name="FormFactor">1</token>
<float name="Friction">0.300000012</float>
<float name="FrontParamA">-0.5</float>
<float name="FrontParamB">0.5</float>
<token name="FrontSurface">0</token>
<token name="FrontSurfaceInput">0</token>
<float name="LeftParamA">-0.5</float>
<float name="LeftParamB">0.5</float>
<token name="LeftSurface">0</token>
<token name="LeftSurfaceInput">0</token>
<bool name="Locked">true</bool>
<string name="Name">Baseplate</string>
<float name="Reflectance">0</float>
<float name="RightParamA">-0.5</float>
<float name="RightParamB">0.5</float>
<token name="RightSurface">0</token>
<token name="RightSurfaceInput">0</token>
<Vector3 name="RotVelocity">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Vector3>
<float name="TopParamA">-0.5</float>
<float name="TopParamB">0.5</float>
<token name="TopSurface">3</token>
<token name="TopSurfaceInput">0</token>
<float name="Transparency">0</float>
<Vector3 name="Velocity">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Vector3>
<bool name="archivable">true</bool>
<token name="shape">1</token>
<Vector3 name="size">
<X>512</X>
<Y>1.20000005</Y>
<Z>512</Z>
</Vector3>
</Properties>
</Item>
<Item class="Part" referent="RBX3">
<Properties>
<bool name="Anchored">false</bool>
<float name="BackParamA">-0.5</float>
<float name="BackParamB">0.5</float>
<token name="BackSurface">0</token>
<token name="BackSurfaceInput">0</token>
<float name="BottomParamA">-0.5</float>
<float name="BottomParamB">0.5</float>
<token name="BottomSurface">4</token>
<token name="BottomSurfaceInput">0</token>
<int name="BrickColor">28</int>
<CoordinateFrame name="CFrame">
<X>-2</X>
<Y>5.69999981</Y>
<Z>1</Z>
<R00>-1</R00>
<R01>0</R01>
<R02>0</R02>
<R10>0</R10>
<R11>1</R11>
<R12>0</R12>
<R20>0</R20>
<R21>0</R21>
<R22>-1</R22>
</CoordinateFrame>
<bool name="CanCollide">true</bool>
<token name="Controller">0</token>
<bool name="ControllerFlagShown">true</bool>
<bool name="DraggingV1">false</bool>
<float name="Elasticity">0.5</float>
<token name="FormFactor">0</token>
<float name="Friction">0.300000012</float>
<float name="FrontParamA">-0.5</float>
<float name="FrontParamB">0.5</float>
<token name="FrontSurface">0</token>
<token name="FrontSurfaceInput">0</token>
<float name="LeftParamA">-0.5</float>
<float name="LeftParamB">0.5</float>
<token name="LeftSurface">0</token>
<token name="LeftSurfaceInput">0</token>
<bool name="Locked">false</bool>
<string name="Name">Smooth Block Model</string>
<float name="Reflectance">0</float>
<float name="RightParamA">-0.5</float>
<float name="RightParamB">0.5</float>
<token name="RightSurface">0</token>
<token name="RightSurfaceInput">0</token>
<Vector3 name="RotVelocity">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Vector3>
<float name="TopParamA">-0.5</float>
<float name="TopParamB">0.5</float>
<token name="TopSurface">3</token>
<token name="TopSurfaceInput">0</token>
<float name="Transparency">0</float>
<Vector3 name="Velocity">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Vector3>
<bool name="archivable">true</bool>
<token name="shape">1</token>
<Vector3 name="size">
<X>2</X>
<Y>9</Y>
<Z>2</Z>
</Vector3>
</Properties>
</Item>
<Item class="Part" referent="RBX4">
<Properties>
<bool name="Anchored">false</bool>
<float name="BackParamA">-0.5</float>
<float name="BackParamB">0.5</float>
<token name="BackSurface">0</token>
<token name="BackSurfaceInput">0</token>
<float name="BottomParamA">-0.5</float>
<float name="BottomParamB">0.5</float>
<token name="BottomSurface">4</token>
<token name="BottomSurfaceInput">0</token>
<int name="BrickColor">28</int>
<CoordinateFrame name="CFrame">
<X>6</X>
<Y>5.69999981</Y>
<Z>1</Z>
<R00>-1</R00>
<R01>0</R01>
<R02>0</R02>
<R10>0</R10>
<R11>1</R11>
<R12>0</R12>
<R20>0</R20>
<R21>0</R21>
<R22>-1</R22>
</CoordinateFrame>
<bool name="CanCollide">true</bool>
<token name="Controller">0</token>
<bool name="ControllerFlagShown">true</bool>
<bool name="DraggingV1">false</bool>
<float name="Elasticity">0.5</float>
<token name="FormFactor">0</token>
<float name="Friction">0.300000012</float>
<float name="FrontParamA">-0.5</float>
<float name="FrontParamB">0.5</float>
<token name="FrontSurface">0</token>
<token name="FrontSurfaceInput">0</token>
<float name="LeftParamA">-0.5</float>
<float name="LeftParamB">0.5</float>
<token name="LeftSurface">0</token>
<token name="LeftSurfaceInput">0</token>
<bool name="Locked">false</bool>
<string name="Name">Smooth Block Model</string>
<float name="Reflectance">0</float>
<float name="RightParamA">-0.5</float>
<float name="RightParamB">0.5</float>
<token name="RightSurface">0</token>
<token name="RightSurfaceInput">0</token>
<Vector3 name="RotVelocity">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Vector3>
<float name="TopParamA">-0.5</float>
<float name="TopParamB">0.5</float>
<token name="TopSurface">3</token>
<token name="TopSurfaceInput">0</token>
<float name="Transparency">0</float>
<Vector3 name="Velocity">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Vector3>
<bool name="archivable">true</bool>
<token name="shape">1</token>
<Vector3 name="size">
<X>2</X>
<Y>9</Y>
<Z>2</Z>
</Vector3>
</Properties>
</Item>
<Item class="Part" referent="RBX5">
<Properties>
<bool name="Anchored">false</bool>
<float name="BackParamA">-0.5</float>
<float name="BackParamB">0.5</float>
<token name="BackSurface">0</token>
<token name="BackSurfaceInput">0</token>
<float name="BottomParamA">-0.5</float>
<float name="BottomParamB">0.5</float>
<token name="BottomSurface">4</token>
<token name="BottomSurfaceInput">0</token>
<int name="BrickColor">28</int>
<CoordinateFrame name="CFrame">
<X>6</X>
<Y>5.69999981</Y>
<Z>-7</Z>
<R00>-1</R00>
<R01>0</R01>
<R02>0</R02>
<R10>0</R10>
<R11>1</R11>
<R12>0</R12>
<R20>0</R20>
<R21>0</R21>
<R22>-1</R22>
</CoordinateFrame>
<bool name="CanCollide">true</bool>
<token name="Controller">0</token>
<bool name="ControllerFlagShown">true</bool>
<bool name="DraggingV1">false</bool>
<float name="Elasticity">0.5</float>
<token name="FormFactor">0</token>
<float name="Friction">0.300000012</float>
<float name="FrontParamA">-0.5</float>
<float name="FrontParamB">0.5</float>
<token name="FrontSurface">0</token>
<token name="FrontSurfaceInput">0</token>
<float name="LeftParamA">-0.5</float>
<float name="LeftParamB">0.5</float>
<token name="LeftSurface">0</token>
<token name="LeftSurfaceInput">0</token>
<bool name="Locked">false</bool>
<string name="Name">Smooth Block Model</string>
<float name="Reflectance">0</float>
<float name="RightParamA">-0.5</float>
<float name="RightParamB">0.5</float>
<token name="RightSurface">0</token>
<token name="RightSurfaceInput">0</token>
<Vector3 name="RotVelocity">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Vector3>
<float name="TopParamA">-0.5</float>
<float name="TopParamB">0.5</float>
<token name="TopSurface">3</token>
<token name="TopSurfaceInput">0</token>
<float name="Transparency">0</float>
<Vector3 name="Velocity">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Vector3>
<bool name="archivable">true</bool>
<token name="shape">1</token>
<Vector3 name="size">
<X>2</X>
<Y>9</Y>
<Z>2</Z>
</Vector3>
</Properties>
</Item>
<Item class="Part" referent="RBX6">
<Properties>
<bool name="Anchored">false</bool>
<float name="BackParamA">-0.5</float>
<float name="BackParamB">0.5</float>
<token name="BackSurface">0</token>
<token name="BackSurfaceInput">0</token>
<float name="BottomParamA">-0.5</float>
<float name="BottomParamB">0.5</float>
<token name="BottomSurface">4</token>
<token name="BottomSurfaceInput">0</token>
<int name="BrickColor">28</int>
<CoordinateFrame name="CFrame">
<X>-2</X>
<Y>5.69999981</Y>
<Z>-7</Z>
<R00>-1</R00>
<R01>0</R01>
<R02>0</R02>
<R10>0</R10>
<R11>1</R11>
<R12>0</R12>
<R20>0</R20>
<R21>0</R21>
<R22>-1</R22>
</CoordinateFrame>
<bool name="CanCollide">true</bool>
<token name="Controller">0</token>
<bool name="ControllerFlagShown">true</bool>
<bool name="DraggingV1">false</bool>
<float name="Elasticity">0.5</float>
<token name="FormFactor">0</token>
<float name="Friction">0.300000012</float>
<float name="FrontParamA">-0.5</float>
<float name="FrontParamB">0.5</float>
<token name="FrontSurface">0</token>
<token name="FrontSurfaceInput">0</token>
<float name="LeftParamA">-0.5</float>
<float name="LeftParamB">0.5</float>
<token name="LeftSurface">0</token>
<token name="LeftSurfaceInput">0</token>
<bool name="Locked">false</bool>
<string name="Name">Smooth Block Model</string>
<float name="Reflectance">0</float>
<float name="RightParamA">-0.5</float>
<float name="RightParamB">0.5</float>
<token name="RightSurface">0</token>
<token name="RightSurfaceInput">0</token>
<Vector3 name="RotVelocity">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Vector3>
<float name="TopParamA">-0.5</float>
<float name="TopParamB">0.5</float>
<token name="TopSurface">3</token>
<token name="TopSurfaceInput">0</token>
<float name="Transparency">0</float>
<Vector3 name="Velocity">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Vector3>
<bool name="archivable">true</bool>
<token name="shape">1</token>
<Vector3 name="size">
<X>2</X>
<Y>9</Y>
<Z>2</Z>
</Vector3>
</Properties>
</Item>
<Item class="Part" referent="RBX7">
<Properties>
<bool name="Anchored">false</bool>
<float name="BackParamA">-0.5</float>
<float name="BackParamB">0.5</float>
<token name="BackSurface">0</token>
<token name="BackSurfaceInput">0</token>
<float name="BottomParamA">-0.5</float>
<float name="BottomParamB">0.5</float>
<token name="BottomSurface">4</token>
<token name="BottomSurfaceInput">0</token>
<int name="BrickColor">28</int>
<CoordinateFrame name="CFrame">
<X>2</X>
<Y>11.1999998</Y>
<Z>-3</Z>
<R00>-1</R00>
<R01>0</R01>
<R02>0</R02>
<R10>0</R10>
<R11>1</R11>
<R12>0</R12>
<R20>0</R20>
<R21>0</R21>
<R22>-1</R22>
</CoordinateFrame>
<bool name="CanCollide">true</bool>
<token name="Controller">0</token>
<bool name="ControllerFlagShown">true</bool>
<bool name="DraggingV1">false</bool>
<float name="Elasticity">0.5</float>
<token name="FormFactor">0</token>
<float name="Friction">0.300000012</float>
<float name="FrontParamA">-0.5</float>
<float name="FrontParamB">0.5</float>
<token name="FrontSurface">0</token>
<token name="FrontSurfaceInput">0</token>
<float name="LeftParamA">-0.5</float>
<float name="LeftParamB">0.5</float>
<token name="LeftSurface">0</token>
<token name="LeftSurfaceInput">0</token>
<bool name="Locked">false</bool>
<string name="Name">Smooth Block Model</string>
<float name="Reflectance">0</float>
<float name="RightParamA">-0.5</float>
<float name="RightParamB">0.5</float>
<token name="RightSurface">0</token>
<token name="RightSurfaceInput">0</token>
<Vector3 name="RotVelocity">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Vector3>
<float name="TopParamA">-0.5</float>
<float name="TopParamB">0.5</float>
<token name="TopSurface">3</token>
<token name="TopSurfaceInput">0</token>
<float name="Transparency">0</float>
<Vector3 name="Velocity">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Vector3>
<bool name="archivable">true</bool>
<token name="shape">1</token>
<Vector3 name="size">
<X>10</X>
<Y>2</Y>
<Z>10</Z>
</Vector3>
</Properties>
</Item>
<Item class="Part" referent="RBX8">
<Properties>
<bool name="Anchored">false</bool>
<float name="BackParamA">-0.5</float>
<float name="BackParamB">0.5</float>
<token name="BackSurface">0</token>
<token name="BackSurfaceInput">0</token>
<float name="BottomParamA">-0.5</float>
<float name="BottomParamB">0.5</float>
<token name="BottomSurface">4</token>
<token name="BottomSurfaceInput">0</token>
<int name="BrickColor">28</int>
<CoordinateFrame name="CFrame">
<X>2</X>
<Y>13.1999998</Y>
<Z>-3</Z>
<R00>-1</R00>
<R01>0</R01>
<R02>0</R02>
<R10>0</R10>
<R11>1</R11>
<R12>0</R12>
<R20>0</R20>
<R21>0</R21>
<R22>-1</R22>
</CoordinateFrame>
<bool name="CanCollide">true</bool>
<token name="Controller">0</token>
<bool name="ControllerFlagShown">true</bool>
<bool name="DraggingV1">false</bool>
<float name="Elasticity">0.5</float>
<token name="FormFactor">0</token>
<float name="Friction">0.300000012</float>
<float name="FrontParamA">-0.5</float>
<float name="FrontParamB">0.5</float>
<token name="FrontSurface">0</token>
<token name="FrontSurfaceInput">0</token>
<float name="LeftParamA">-0.5</float>
<float name="LeftParamB">0.5</float>
<token name="LeftSurface">0</token>
<token name="LeftSurfaceInput">0</token>
<bool name="Locked">false</bool>
<string name="Name">Smooth Block Model</string>
<float name="Reflectance">0</float>
<float name="RightParamA">-0.5</float>
<float name="RightParamB">0.5</float>
<token name="RightSurface">0</token>
<token name="RightSurfaceInput">0</token>
<Vector3 name="RotVelocity">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Vector3>
<float name="TopParamA">-0.5</float>
<float name="TopParamB">0.5</float>
<token name="TopSurface">3</token>
<token name="TopSurfaceInput">0</token>
<float name="Transparency">0</float>
<Vector3 name="Velocity">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Vector3>
<bool name="archivable">true</bool>
<token name="shape">1</token>
<Vector3 name="size">
<X>6</X>
<Y>2</Y>
<Z>6</Z>
</Vector3>
</Properties>
</Item>
</Item>
<Item class="RunService" referent="RBX9">
<Properties>
<string name="Name">Run Service</string>
<bool name="archivable">true</bool>
</Properties>
</Item>
<External>RBX10</External>
<External>RBX11</External>
<Item class="Players" referent="RBX12">
<Properties>
<int name="MaxPlayers">12</int>
<string name="Name">Players</string>
<bool name="archivable">true</bool>
</Properties>
</Item>
<Item class="StarterPack" referent="RBX13">
<Properties>
<string name="Name">StarterPack</string>
<bool name="archivable">true</bool>
</Properties>
</Item>
<Item class="SoundService" referent="RBX14">
<Properties>
<token name="AmbientReverb">0</token>
<float name="DistanceFactor">10</float>
<float name="DopplerScale">1</float>
<string name="Name">Soundscape</string>
<float name="RolloffScale">1</float>
<bool name="archivable">true</bool>
</Properties>
<External>RBX15</External>
<External>RBX16</External>
<External>RBX17</External>
<External>RBX18</External>
<External>RBX19</External>
<External>RBX20</External>
<External>RBX21</External>
<External>RBX22</External>
<External>RBX23</External>
<External>RBX24</External>
<External>RBX25</External>
<External>RBX26</External>
<External>RBX27</External>
<External>RBX28</External>
</Item>
<Item class="ContentProvider" referent="RBX29">
<Properties>
<string name="Name">Instance</string>
<bool name="archivable">true</bool>
</Properties>
</Item>
<Item class="PhysicsService" referent="RBX30">
<Properties>
<string name="Name">PhysicsService</string>
<bool name="archivable">true</bool>
</Properties>
</Item>
<External>RBX31</External>
<Item class="Selection" referent="RBX32">
<Properties>
<string name="Name">Selection</string>
<bool name="archivable">true</bool>
</Properties>
</Item>
<External>RBX33</External>
<Item class="Lighting" referent="RBX34">
<Properties>
<Color3 name="Ambient">4286611584</Color3>
<float name="Brightness">1</float>
<Color3 name="ColorShift_Bottom">4278190080</Color3>
<Color3 name="ColorShift_Top">4278190080</Color3>
<float name="GeographicLatitude">41.7332993</float>
<string name="Name">Lighting</string>
<Color3 name="ShadowColor">4289967032</Color3>
<string name="TimeOfDay">14:00:00</string>
<bool name="archivable">true</bool>
</Properties>
</Item>
<Item class="ControllerService" referent="RBX35">
<Properties>
<string name="Name">Instance</string>
<bool name="archivable">true</bool>
</Properties>
</Item>
<Item class="ChangeHistoryService" referent="RBX36">
<Properties>
<string name="Name">ChangeHistoryService</string>
<bool name="archivable">true</bool>
</Properties>
</Item>
<External>RBX37</External>
</roblox>

View File

@@ -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
icon1.ico

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

BIN
ode-0.6.zip Normal file

Binary file not shown.

2064
resource.h

File diff suppressed because it is too large Load Diff

View File

@@ -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;

View File

@@ -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();

View File

@@ -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;
}; };

View File

@@ -7,10 +7,19 @@ class LevelInstance :
public: public:
LevelInstance(void); LevelInstance(void);
~LevelInstance(void); ~LevelInstance(void);
bool HighScoreIsGood;
Enum::ActionType::Value TimerUpAction;
Enum::AffectType::Value TimerAffectsScore;
bool RunOnOpen;
float timer; float timer;
int score; int score;
virtual std::vector<PROPGRIDITEM> getProperties(); virtual std::vector<PROPGRIDITEM> getProperties();
std::string winMessage; std::string winMessage;
std::string loseMessage; std::string loseMessage;
virtual void PropUpdate(LPPROPGRIDITEM &pItem); virtual void PropUpdate(LPPROPGRIDITEM &pItem);
void winCondition();
void loseCondition();
void pauseCondition();
void drawCondition();
void Step(SimTime sdt);
}; };

View File

@@ -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

View File

@@ -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;
}; };

View 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;
};

View File

@@ -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;
}; };

View File

@@ -20,4 +20,16 @@ namespace Enum
Player = 7, KeyboardRight = 1, KeyboardLeft = 2, Joypad1 = 3, Joypad2 = 4, Chase = 5, Flee = 6, None = 0 Player = 7, KeyboardRight = 1, KeyboardLeft = 2, Joypad1 = 3, Joypad2 = 4, Chase = 5, Flee = 6, None = 0
}; };
} }
namespace ActionType
{
enum Value {
Nothing = 0, Pause = 1, Lose = 2, Draw = 3, Win = 4
};
}
namespace AffectType
{
enum Value {
NoChange = 0, Increase = 1, Decrease = 2
};
}
} }

View File

@@ -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;

View File

@@ -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();
}; };

View File

@@ -13,6 +13,7 @@ public:
void onSelect(Mouse mouse); void onSelect(Mouse mouse);
void onKeyDown(int key); void onKeyDown(int key);
void onKeyUp(int key); void onKeyUp(int key);
void roundDeg(float &degree);
private: private:
bool lctrlDown; bool lctrlDown;
bool rctrlDown; bool rctrlDown;
@@ -20,4 +21,5 @@ private:
int mouseDownStarty; int mouseDownStarty;
bool dragging; bool dragging;
bool mouseDown; bool mouseDown;
Vector3 draggingPartOffset;
}; };

11
src/include/ToolEnum.h Normal file
View 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
};
}
}

View 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

View 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);
};

View File

@@ -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

23
src/include/versioning.h Normal file
View File

@@ -0,0 +1,23 @@
#ifndef APP_GENER
//#define SNAPSHOT_VERSION
#define APP_GENER 0
#define APP_MAJOR 0
#define APP_MINOR 107
#define APP_PATCH 0
#define APP_VER_STRING APP_GENER.APP_MAJOR.APP_MINOR.APP_PATCH
#ifdef SNAPSHOT_VERSION
#define VER_PREFIX( N ) v##N-SNAPSHOT
#else
#define VER_PREFIX( N ) v##N
#endif
#define HSTR( N ) #N
#define STR( N ) HSTR( N )
#define VER_STR( N ) STR( VER_PREFIX( N ) )
#endif

View File

@@ -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,42 @@ 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())
{
LevelInstance* Level = _dataModel->getLevel();
Level->Step(sdt);
// 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();
if(g_dataModel->getSelectionService()->isSelected(p))
g_dataModel->getSelectionService()->removeSelected(p);
p->setParent(NULL);
delete p;
}
for(int i = 0; i < 4; i++)
{
_dataModel->getEngine()->step(0.03F);
}
onLogic(); onLogic();
}
_dataModel->getGuiRoot()->update(); _dataModel->getGuiRoot()->update();
if(_dataModel->name != _title) if(_dataModel->name != _title)
@@ -407,95 +369,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)
@@ -673,12 +569,12 @@ void Application::onGraphics(RenderDevice* rd) {
renderDevice->setShininess(70); //renderDevice->setShininess(70);
renderDevice->setSpecularCoefficient(Color3(0.1F, 0.1F, 0.1F)); //renderDevice->setSpecularCoefficient(Color3(0.1F, 0.1F, 0.1F));
//float lightAmbient[] = { 0.5F, 0.6F, 0.9F, 1.0F }; //float lightAmbient[] = { 0.5F, 0.5F, 0.5F, 1.0F };
//float lightDiffuse[] = { 0.6F, 0.4F, 0.9F, 1.0F }; //float lightDiffuse[] = { 0.6F, 0.6F, 0.6F, 1.0F };
//float lightSpecular[] = { 0.8F, 0.6F, 1.0F, 1.0F }; //float lightSpecular[] = { 0.8F, 0.8F, 0.8F, 1.0F };
//glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, lightAmbient); //glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, lightAmbient);
//glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, lightDiffuse); //glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, lightDiffuse);
@@ -703,17 +599,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 +696,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 +705,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 +712,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 +734,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 +812,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();

View File

@@ -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;

View 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());
}

View File

@@ -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()
{ {

View File

@@ -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)

View File

@@ -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;

View File

@@ -1,3 +1,4 @@
#include "DataModelV2/DataModelInstance.h"
#include "DataModelV2/LevelInstance.h" #include "DataModelV2/LevelInstance.h"
LevelInstance::LevelInstance(void) LevelInstance::LevelInstance(void)
@@ -16,6 +17,61 @@ LevelInstance::~LevelInstance(void)
} }
static TCHAR* strActionType(int option)
{
switch(option)
{
case Enum::ActionType::Nothing:
return "Nothing";
case Enum::ActionType::Pause:
return "Pause";
case Enum::ActionType::Lose:
return "Lose";
case Enum::ActionType::Draw:
return "Draw";
case Enum::ActionType::Win:
return "Win";
}
return "Nothing";
}
static Enum::ActionType::Value EnumActionType(TCHAR* option)
{
if(strcmp("Nothing", option) == 0)
return Enum::ActionType::Nothing;
if(strcmp("Pause", option) == 0)
return Enum::ActionType::Pause;
if(strcmp("Lose", option) == 0)
return Enum::ActionType::Lose;
if(strcmp("Draw", option) == 0)
return Enum::ActionType::Draw;
return Enum::ActionType::Win;
}
static TCHAR* strAffectType(int option)
{
switch(option)
{
case Enum::AffectType::NoChange:
return "NoChange";
case Enum::AffectType::Increase:
return "Increase";
case Enum::AffectType::Decrease:
return "Decrease";
}
return "NoChange";
}
static Enum::AffectType::Value EnumAffectType(TCHAR* option)
{
if(strcmp("NoChange", option) == 0)
return Enum::AffectType::NoChange;
if(strcmp("Increase", option) == 0)
return Enum::AffectType::Increase;
return Enum::AffectType::Decrease;
}
char timerTxt[12]; char timerTxt[12];
char scoreTxt[12]; char scoreTxt[12];
std::vector<PROPGRIDITEM> LevelInstance::getProperties() std::vector<PROPGRIDITEM> LevelInstance::getProperties()
@@ -29,25 +85,58 @@ std::vector<PROPGRIDITEM> LevelInstance::getProperties()
"The message that shows when the player wins.", "The message that shows when the player wins.",
(LPARAM)winMessage.c_str(), (LPARAM)winMessage.c_str(),
PIT_EDIT)); PIT_EDIT));
properties.push_back(createPGI("Messages", properties.push_back(createPGI("Messages",
"LoseMessage", "LoseMessage",
"The message that shows when the player loses.", "The message that shows when the player loses.",
(LPARAM)loseMessage.c_str(), (LPARAM)loseMessage.c_str(),
PIT_EDIT)); PIT_EDIT));
properties.push_back(createPGI(
"Gameplay",
"HighScoreIsGood",
"Some temporary string here",
(LPARAM)HighScoreIsGood,
PIT_CHECK
));
properties.push_back(createPGI(
"Gameplay",
"RunOnOpen",
"Some temporary string here",
(LPARAM)RunOnOpen,
PIT_CHECK
));
sprintf_s(timerTxt, "%g", timer); sprintf_s(timerTxt, "%g", timer);
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));
properties.push_back(createPGI("Gameplay",
"TimerUpAction",
"Some temporary string here",
(LPARAM)strActionType(TimerUpAction),
PIT_COMBO,
TEXT("Nothing\0Pause\0Lose\0Draw\0Win\0")
));
properties.push_back(createPGI("Gameplay",
"TimerAffectsScore",
"Some temporary string here",
(LPARAM)strAffectType(TimerAffectsScore),
PIT_COMBO,
TEXT("NoChange\0Increase\0Decrease\0")
));
return properties; return properties;
} }
void LevelInstance::PropUpdate(LPPROPGRIDITEM &pItem) void LevelInstance::PropUpdate(LPPROPGRIDITEM &pItem)
@@ -68,6 +157,87 @@ void LevelInstance::PropUpdate(LPPROPGRIDITEM &pItem)
{ {
winMessage = (LPSTR)pItem->lpCurValue; winMessage = (LPSTR)pItem->lpCurValue;
} }
else if(strcmp(pItem->lpszPropName, "TimerUpAction") == 0)
{
TimerUpAction = EnumActionType((TCHAR*)pItem->lpCurValue);
}
else if(strcmp(pItem->lpszPropName, "TimerAffectsScore") == 0)
{
TimerAffectsScore = EnumAffectType((TCHAR*)pItem->lpCurValue);
}
else if(strcmp(pItem->lpszPropName, "HighScoreIsGood") == 0)
{
HighScoreIsGood = pItem->lpCurValue == TRUE;
}
else if(strcmp(pItem->lpszPropName, "RunOnOpen") == 0)
{
RunOnOpen = pItem->lpCurValue == TRUE;
}
else else
Instance::PropUpdate(pItem); Instance::PropUpdate(pItem);
} }
void LevelInstance::winCondition()
{
DataModelInstance* DataModel = (DataModelInstance*)getParent(); //If level parent gets changed to something other than Datamodel it could cause nasty data corruption bugs
DataModel->setMessage(winMessage);
DataModel->toggleRun();
}
void LevelInstance::loseCondition()
{
DataModelInstance* DataModel = (DataModelInstance*)getParent();
DataModel->setMessage(loseMessage);
DataModel->toggleRun();
}
void LevelInstance::pauseCondition()
{
DataModelInstance* DataModel = (DataModelInstance*)getParent();
DataModel->toggleRun();
}
void LevelInstance::drawCondition()
{
DataModelInstance* DataModel = (DataModelInstance*)getParent();
DataModel->toggleRun();
}
void LevelInstance::Step(SimTime sdt)
{
switch(TimerAffectsScore)
{
case Enum::AffectType::NoChange:
break;
case Enum::AffectType::Increase:
score += 1;
break;
case Enum::AffectType::Decrease:
if (score > 0)
score -= 1;
break;
}
if (timer >= 0.1f){ //Due to timing used this could cause the number go into negatives for one step
timer -= sdt;
}
else{
timer = 0.0f;
switch(TimerUpAction)
{
case Enum::ActionType::Nothing:
break;
case Enum::ActionType::Pause:
pauseCondition();
break;
case Enum::ActionType::Lose:
loseCondition();
break;
case Enum::ActionType::Draw:
drawCondition();
break;
case Enum::ActionType::Win:
winCondition();
break;
}
}
}

View File

@@ -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,37 @@ void PartInstance::setSurface(int face, Enum::SurfaceType::Value surface)
void PartInstance::setParent(Instance* prnt) void PartInstance::setParent(Instance* prnt)
{ {
if(this->physBody != NULL)
{
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 +156,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 +205,11 @@ void PartInstance::setSize(Vector3 newSize)
size = Vector3(sizex, sizey, sizez); size = Vector3(sizex, sizey, sizez);
if(this->physBody != NULL)
{
g_dataModel->getEngine()->deleteBody(this);
g_dataModel->getEngine()->createBody(this);
}
} }
Vector3 PartInstance::getSize() Vector3 PartInstance::getSize()
{ {
@@ -214,25 +230,56 @@ void PartInstance::setShape(Enum::Shape::Value shape)
this->shape = shape; this->shape = shape;
this->setSize(this->getSize()); this->setSize(this->getSize());
} }
if(this->physBody != NULL)
{
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;
if (anchored)
{
g_dataModel->getEngine()->deleteBody(this);
g_dataModel->getEngine()->createBody(this);
}
} }
void PartInstance::setAnchored(bool anchored)
{
this->anchored = anchored;
if(this->physBody != NULL)
{
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)
{
setCFrameNoSync(coordinateFrame);
g_dataModel->getEngine()->updateBody(this);
}
void PartInstance::setCFrameNoSync(CoordinateFrame coordinateFrame)
{ {
cFrame = coordinateFrame; cFrame = coordinateFrame;
position = coordinateFrame.translation; position = coordinateFrame.translation;
changed = true;
} }
bool PartInstance::collides(PartInstance * part) bool PartInstance::collides(PartInstance * part)
@@ -296,6 +343,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 +391,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)
{ {

View File

@@ -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)
{ {
} }

View File

@@ -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;

View File

@@ -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;

View File

@@ -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")

View File

@@ -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));
} }
} }
} }

View File

@@ -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;
}
} }
} }

View File

@@ -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))
{ {

View File

@@ -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;*/

View File

@@ -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 &prop;
} 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);
} }

View File

@@ -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();
} }

View File

@@ -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,18 @@ 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); {
if(g_selectedInstances.size() == 0) Vector3 mousePos = mouse.getPosition(g_dataModel->getSelectionService()->getSelection());
g_selectedInstances.push_back(g_dataModel); Vector3 targetPos = target->getPosition();
g_usableApp->_propWindow->UpdateSelected(g_selectedInstances[0]);
g_dataModel->getSelectionService()->addSelected(target);
draggingPartOffset = targetPos-mousePos;
}
if(g_dataModel->getSelectionService()->getSelection().size() == 0)
g_dataModel->getSelectionService()->addSelected(g_dataModel);
} }
void ArrowTool::onButton1MouseUp(Mouse mouse) void ArrowTool::onButton1MouseUp(Mouse mouse)
{ {
@@ -47,11 +53,44 @@ 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)); Vector3 mousePos = mouse.getPosition(g_dataModel->getSelectionService()->getSelection());
Vector3 vec = mousePos + draggingPartOffset;
vec.x = (ceil(vec.x / 1) * 1);
vec.y = (ceil(vec.y / 1) * 1);
vec.z = (ceil(vec.z / 1) * 1);
if ( ((int)part->getSize().x)%2 == 1 )
vec.x += 0.5;
vec.y = mousePos.y + part->getSize().y/2 - 0.5;
if ( ((int)part->getSize().z)%2 == 1 )
vec.z += 0.5;
Matrix3 rot = part->getCFrame().rotation;
Vector3 rotEulerAngles;
rot.toEulerAnglesXYZ(rotEulerAngles.x, rotEulerAngles.y, rotEulerAngles.z);
rotEulerAngles = Vector3(
rotEulerAngles.x * 180 / M_PI,
rotEulerAngles.y * 180 / M_PI,
rotEulerAngles.z * 180 / M_PI
);
roundDeg(rotEulerAngles.x);
roundDeg(rotEulerAngles.y);
roundDeg(rotEulerAngles.z);
rot = rot.fromEulerAnglesXYZ( rotEulerAngles.x * (M_PI / 180), rotEulerAngles.y * (M_PI / 180), rotEulerAngles.z * (M_PI / 180) );
part->setPosition(vec);
part->setCFrame(CoordinateFrame(rot, vec));
} }
} }
return; return;
@@ -75,4 +114,20 @@ void ArrowTool::onKeyUp(int key)
{ {
if(key == VK_CONTROL) if(key == VK_CONTROL)
lctrlDown = false; lctrlDown = false;
}
void ArrowTool::roundDeg(float &degree)
{
if ( ( degree < 0 && degree > -45 ) || ( degree > 0 && degree < 45 ) )
{
degree = 0;
}
else if ( ( degree < 0 && degree > -90 ) || ( degree > 45 && degree < 90 ) )
{
degree = 90;
}
else if ( ( degree < 0 && degree > -180 ) || ( degree > 90 && degree < 180 ) )
{
degree = 180;
}
} }

View File

@@ -0,0 +1,246 @@
#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, -9.8F, 0);
dWorldSetAutoDisableFlag(physWorld, 1);
dWorldSetAutoDisableLinearThreshold(physWorld, 0.5F);
dWorldSetAutoDisableAngularThreshold(physWorld, 0.5F);
dWorldSetAutoDisableSteps(physWorld, 20);
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.4F; //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)
{
dBodyEnable(partInstance->physBody);
dGeomEnable(partInstance->physGeom[0]);
if(partInstance->isAnchored())
{
dGeomSetBody(partInstance->physGeom[0], partInstance->physBody);
dGeomEnable(partInstance->physGeom[0]);
updateBody(partInstance);
step(0.03F);
}
for(int i = 0; i < dBodyGetNumJoints(partInstance->physBody); i++) {
dBodyID b1 = dJointGetBody(dBodyGetJoint(partInstance->physBody, i), 0);
dBodyID b2 = dJointGetBody(dBodyGetJoint(partInstance->physBody, i), 1);
if(b1 != NULL)
{
dBodyEnable(b1);
PartInstance * part = (PartInstance *)dBodyGetData(b1);
if(part != NULL)
dGeomEnable(part->physGeom[0]);
}
if(b2 != NULL)
{
dBodyEnable(b2);
PartInstance * part = (PartInstance *)dBodyGetData(b2);
if(part != NULL)
dGeomEnable(part->physGeom[0]);
}
dJointDestroy(dBodyGetJoint(partInstance->physBody, i));
}
dBodyDestroy(partInstance->physBody);
dGeomDestroy(partInstance->physGeom[0]);
partInstance->physBody = NULL;
}
}
void XplicitNgine::createBody(PartInstance* partInstance)
{
// calculate collisions
//dSpaceCollide (physSpace,0,&collisionCallback);
if(partInstance->physBody == NULL)
{
Vector3 partSize = partInstance->getSize();
Vector3 partPosition = partInstance->getPosition();
Vector3 velocity = partInstance->getVelocity();
Vector3 rotVelocity = partInstance->getRotVelocity();
// init body
partInstance->physBody = dBodyCreate(physWorld);
dBodySetData(partInstance->physBody, partInstance);
// 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(sqrt(partSize.x*2), sqrt(partSize.y*2), sqrt(partSize.z*2), 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);
dBodySetLinearVel(partInstance->physBody, velocity.x, velocity.y, velocity.z);
dBodySetAngularVel(partInstance->physBody, rotVelocity.x, rotVelocity.y, rotVelocity.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* velocity = dBodyGetLinearVel(partInstance->physBody);
const dReal* rotVelocity = dBodyGetAngularVel(partInstance->physBody);
partInstance->setVelocity(Vector3(velocity[0],velocity[1],velocity[2]));
partInstance->setRotVelocity(Vector3(rotVelocity[0],rotVelocity[1],rotVelocity[2]));
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)
{
dJointGroupEmpty(contactgroup);
dSpaceCollide (physSpace,0,&collisionCallback);
dWorldQuickStep(physWorld, stepSize);
//dWorldStepFast1(physWorld, stepSize*2, 100);
//dWorldStep(physWorld, stepSize);
}
void XplicitNgine::updateBody(PartInstance *partInstance)
{
if(partInstance->physBody != NULL)
{
Vector3 position = partInstance->getCFrame().translation;
dBodySetPosition(partInstance->physBody,
position[0],
position[1],
position[2]
);
dBodyEnable(partInstance->physBody);
dGeomEnable(partInstance->physGeom[0]);
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};
dBodySetRotation(partInstance->physBody, rotation);
}
}

View File

@@ -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;
} }