64 Commits

Author SHA1 Message Date
Vulpovile
2af7077a0a Merge pull request #94 from Vulpovile/bugfix/partcollison
Fix part collisions
2022-10-05 20:32:58 -07:00
728e67e1a5 Fix part collisions 2022-10-05 22:53:54 -04:00
8fa056e191 Merge pull request #88 from Vulpovile/bugfix/hopperbin-crash
Placeholder hopperbin fix
2022-10-05 13:08:55 -04: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
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
52 changed files with 1740 additions and 2075 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

View File

@@ -1,35 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 8.00
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Blocks3D", "Blocks3D-2003.vcproj", "{6C4D6EEF-B1D1-456A-B850-92CAB17124BE}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfiguration) = preSolution
Debug = Debug
Release = Release
EndGlobalSection
GlobalSection(ProjectConfiguration) = postSolution
{6C4D6EEF-B1D1-456A-B850-92CAB17124BE}.Debug.ActiveCfg = Debug|Win32
{6C4D6EEF-B1D1-456A-B850-92CAB17124BE}.Debug.Build.0 = Debug|Win32
{6C4D6EEF-B1D1-456A-B850-92CAB17124BE}.Release.ActiveCfg = Release|Win32
{6C4D6EEF-B1D1-456A-B850-92CAB17124BE}.Release.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
EndGlobalSection
GlobalSection(ExtensibilityAddIns) = postSolution
EndGlobalSection
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{6C4D6EEF-B1D1-456A-B850-92CAB17124BE}.Debug|Win32.ActiveCfg = Debug|Win32
{6C4D6EEF-B1D1-456A-B850-92CAB17124BE}.Debug|Win32.Build.0 = Debug|Win32
{6C4D6EEF-B1D1-456A-B850-92CAB17124BE}.Release|Win32.ActiveCfg = Release|Win32
{6C4D6EEF-B1D1-456A-B850-92CAB17124BE}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View File

@@ -1,649 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="7.10"
Name="Blocks3D"
ProjectGUID="{6C4D6EEF-B1D1-456A-B850-92CAB17124BE}"
RootNamespace="Blocks3D">
<Platforms>
<Platform
Name="Win32"/>
</Platforms>
<Configurations>
<Configuration
Name="Release|Win32"
OutputDirectory=".\Release"
IntermediateDirectory=".\Release"
ConfigurationType="1"
UseOfMFC="0"
UseOfATL="0"
ATLMinimizesCRunTimeLibraryUsage="FALSE"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="&quot;.\src\include&quot;"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
StringPooling="TRUE"
RuntimeLibrary="2"
EnableFunctionLevelLinking="TRUE"
PrecompiledHeaderFile=".\Release/Blocks3D.pch"
AssemblerListingLocation=".\Release/"
ObjectFile=".\Release/"
ProgramDataBaseFileName=".\Release/"
WarningLevel="3"
SuppressStartupBanner="TRUE"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="Advapi32.lib Comctl32.lib Comdlg32.lib Shell32.lib"
OutputFile="./Blocks3D.exe"
LinkIncremental="1"
SuppressStartupBanner="TRUE"
ProgramDatabaseFile=".\Release/Blocks3D.pdb"
SubSystem="2"
TargetMachine="1"/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="NDEBUG"
MkTypLibCompatible="TRUE"
SuppressStartupBanner="TRUE"
TargetEnvironment="1"
TypeLibraryName=".\Release/Blocks3D.tlb"
HeaderFileName=""/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="NDEBUG"
Culture="4105"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
<Configuration
Name="Debug|Win32"
OutputDirectory=".\Debug"
IntermediateDirectory=".\Debug"
ConfigurationType="1"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="FALSE"
CharacterSet="2"
ManagedExtensions="FALSE">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="&quot;.\src\include&quot;"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;NO_SPRINTF;IGNORE_CATCH"
MinimalRebuild="FALSE"
BasicRuntimeChecks="0"
RuntimeLibrary="3"
EnableFunctionLevelLinking="FALSE"
PrecompiledHeaderFile=".\Debug/Blocks3D.pch"
AssemblerListingLocation=".\Debug/"
ObjectFile=".\Debug/"
ProgramDataBaseFileName=".\Debug/"
WarningLevel="3"
SuppressStartupBanner="TRUE"
DebugInformationFormat="3"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="Advapi32.lib UxTheme.lib Comctl32.lib Comdlg32.lib Shell32.lib Urlmon.lib ole32.lib oleaut32.lib uuid.lib"
OutputFile="./Blocks3D-Debug.exe"
LinkIncremental="2"
SuppressStartupBanner="TRUE"
GenerateDebugInformation="TRUE"
ProgramDatabaseFile=".\Debug/Blocks3D.pdb"
SubSystem="1"
TargetMachine="1"/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="_DEBUG"
MkTypLibCompatible="TRUE"
SuppressStartupBanner="TRUE"
TargetEnvironment="1"
TypeLibraryName=".\Debug/Blocks3D.tlb"
HeaderFileName=""/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="_DEBUG"
Culture="4105"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
</Configurations>
<References>
<AssemblyReference
RelativePath="System.dll"/>
<AssemblyReference
RelativePath="System.Data.dll"/>
<AssemblyReference
RelativePath="System.Drawing.dll"/>
<AssemblyReference
RelativePath="System.Windows.Forms.dll"/>
<AssemblyReference
RelativePath="System.XML.dll"/>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
<File
RelativePath=".\src\source\Application.cpp">
</File>
<File
RelativePath=".\src\source\AudioPlayer.cpp">
</File>
<File
RelativePath=".\src\source\ax.cpp">
</File>
<File
RelativePath=".\src\source\BrowserCallHandler.cpp">
</File>
<File
RelativePath=".\src\source\CameraController.cpp">
</File>
<File
RelativePath=".\src\source\ErrorFunctions.cpp">
</File>
<File
RelativePath=".\src\source\Globals.cpp">
</File>
<File
RelativePath=".\src\source\IEBrowser.cpp">
</File>
<File
RelativePath=".\src\source\IEDispatcher.cpp">
</File>
<File
RelativePath=".\src\source\main.cpp">
</File>
<File
RelativePath=".\src\source\Mouse.cpp">
</File>
<File
RelativePath=".\src\source\propertyGrid.cpp">
</File>
<File
RelativePath=".\src\source\PropertyWindow.cpp">
</File>
<File
RelativePath=".\src\source\Renderer.cpp">
</File>
<File
RelativePath=".\src\source\StringFunctions.cpp">
</File>
<File
RelativePath=".\src\source\TextureHandler.cpp">
</File>
<File
RelativePath=".\src\source\WindowFunctions.cpp">
</File>
<Filter
Name="Tool">
<File
RelativePath=".\src\source\Tool\ArrowTool.cpp">
</File>
<File
RelativePath=".\src\source\Tool\SurfaceTool.cpp">
</File>
<File
RelativePath=".\src\source\Tool\Tool.cpp">
</File>
</Filter>
<Filter
Name="Listener">
<File
RelativePath=".\src\source\Listener\ButtonListener.cpp">
</File>
<File
RelativePath=".\src\source\Listener\CameraButtonListener.cpp">
</File>
<File
RelativePath=".\src\source\Listener\DeleteListener.cpp">
</File>
<File
RelativePath=".\src\source\Listener\GUDButtonListener.cpp">
</File>
<File
RelativePath=".\src\source\Listener\MenuButtonListener.cpp">
</File>
<File
RelativePath=".\src\source\Listener\ModeSelectionListener.cpp">
</File>
<File
RelativePath=".\src\source\Listener\RotateButtonListener.cpp">
</File>
<File
RelativePath=".\src\source\Listener\ToolbarListener.cpp">
</File>
</Filter>
<Filter
Name="DataModelV2">
<File
RelativePath=".\src\source\DataModelV2\DataModelInstance.cpp">
<FileConfiguration
Name="Release|Win32">
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\$(InputName)1.obj"/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\$(InputName)1.obj"/>
</FileConfiguration>
</File>
<File
RelativePath=".\src\source\DataModelV2\GroupInstance.cpp">
<FileConfiguration
Name="Release|Win32">
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\$(InputName)1.obj"/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\$(InputName)1.obj"/>
</FileConfiguration>
</File>
<File
RelativePath=".\src\source\DataModelV2\Instance.cpp">
<FileConfiguration
Name="Release|Win32">
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\$(InputName)1.obj"/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\$(InputName)1.obj"/>
</FileConfiguration>
</File>
<File
RelativePath=".\src\source\DataModelV2\LevelInstance.cpp">
<FileConfiguration
Name="Release|Win32">
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\$(InputName)1.obj"/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\$(InputName)1.obj"/>
</FileConfiguration>
</File>
<File
RelativePath=".\src\source\DataModelV2\PartInstance.cpp">
<FileConfiguration
Name="Release|Win32">
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\$(InputName)1.obj"/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\$(InputName)1.obj"/>
</FileConfiguration>
</File>
<File
RelativePath=".\src\source\DataModelV2\PVInstance.cpp">
<FileConfiguration
Name="Release|Win32">
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\$(InputName)1.obj"/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\$(InputName)1.obj"/>
</FileConfiguration>
</File>
<File
RelativePath=".\src\source\DataModelV2\WorkspaceInstance.cpp">
<FileConfiguration
Name="Release|Win32">
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\$(InputName)1.obj"/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\$(InputName)1.obj"/>
</FileConfiguration>
</File>
<Filter
Name="Gui">
<File
RelativePath=".\src\source\DataModelV2\BaseButtonInstance.cpp">
<FileConfiguration
Name="Release|Win32">
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\$(InputName)1.obj"/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\$(InputName)1.obj"/>
</FileConfiguration>
</File>
<File
RelativePath=".\src\source\DataModelV2\BaseGuiInstance.cpp">
</File>
<File
RelativePath=".\src\source\DataModelV2\GuiRootInstance.cpp">
<FileConfiguration
Name="Release|Win32">
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\$(InputName)1.obj"/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\$(InputName)1.obj"/>
</FileConfiguration>
</File>
<File
RelativePath=".\src\source\DataModelV2\ImageButtonInstance.cpp">
<FileConfiguration
Name="Release|Win32">
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\$(InputName)1.obj"/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\$(InputName)1.obj"/>
</FileConfiguration>
</File>
<File
RelativePath=".\src\source\DataModelV2\TextButtonInstance.cpp">
<FileConfiguration
Name="Release|Win32">
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\$(InputName)1.obj"/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\$(InputName)1.obj"/>
</FileConfiguration>
</File>
<File
RelativePath=".\src\source\DataModelV2\ToggleImageButtonInstance.cpp">
<FileConfiguration
Name="Release|Win32">
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\$(InputName)1.obj"/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\$(InputName)1.obj"/>
</FileConfiguration>
</File>
</Filter>
</Filter>
<Filter
Name="Properties">
<File
RelativePath=".\src\source\Properties\BoolProperty.cpp">
</File>
<File
RelativePath=".\src\source\Properties\Property.cpp">
</File>
</Filter>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl">
<File
RelativePath=".\src\include\Application.h">
</File>
<File
RelativePath=".\src\include\AudioPlayer.h">
</File>
<File
RelativePath=".\src\include\ax.h">
</File>
<File
RelativePath=".\src\include\BrowserCallHandler.h">
</File>
<File
RelativePath=".\src\include\CameraController.h">
</File>
<File
RelativePath=".\src\include\Enum.h">
</File>
<File
RelativePath=".\src\include\ErrorFunctions.h">
</File>
<File
RelativePath=".\src\include\Faces.h">
</File>
<File
RelativePath=".\src\include\Globals.h">
</File>
<File
RelativePath=".\src\include\IEBrowser.h">
</File>
<File
RelativePath=".\src\include\IEDispatcher.h">
</File>
<File
RelativePath=".\src\include\Mouse.h">
</File>
<File
RelativePath=".\src\include\propertyGrid.h">
</File>
<File
RelativePath=".\src\include\PropertyWindow.h">
</File>
<File
RelativePath=".\src\include\Renderer.h">
</File>
<File
RelativePath=".\resource.h">
</File>
<File
RelativePath=".\src\include\StringFunctions.h">
</File>
<File
RelativePath=".\src\include\TextureHandler.h">
</File>
<File
RelativePath=".\src\include\win32Defines.h">
</File>
<File
RelativePath=".\src\include\WindowFunctions.h">
</File>
<File
RelativePath=".\src\include\winver.h">
</File>
<Filter
Name="RapidXML">
<File
RelativePath=".\src\include\rapidxml\rapidxml.hpp">
</File>
<File
RelativePath=".\src\include\rapidxml\rapidxml_iterators.hpp">
</File>
<File
RelativePath=".\src\include\rapidxml\rapidxml_print.hpp">
</File>
<File
RelativePath=".\src\include\rapidxml\rapidxml_utils.hpp">
</File>
</Filter>
<Filter
Name="Listener">
<File
RelativePath=".\src\include\Listener\ButtonListener.h">
</File>
<File
RelativePath=".\src\include\Listener\CameraButtonListener.h">
</File>
<File
RelativePath=".\src\include\Listener\DeleteListener.h">
</File>
<File
RelativePath=".\src\include\Listener\GUDButtonListener.h">
</File>
<File
RelativePath=".\src\include\Listener\MenuButtonListener.h">
</File>
<File
RelativePath=".\src\include\Listener\ModeSelectionListener.h">
</File>
<File
RelativePath=".\src\include\Listener\RotateButtonListener.h">
</File>
<File
RelativePath=".\src\include\Listener\ToolbarListener.h">
</File>
<File
RelativePath=".\src\include\DataModel\WorkspaceInstance.h">
</File>
</Filter>
<Filter
Name="Tool">
<File
RelativePath=".\src\include\Tool\ArrowTool.h">
</File>
<File
RelativePath=".\src\include\Tool\SurfaceTool.h">
</File>
<File
RelativePath=".\src\include\Tool\Tool.h">
</File>
</Filter>
<Filter
Name="DataModelV2">
<File
RelativePath=".\src\include\DataModelV2\DataModelInstance.h">
</File>
<File
RelativePath=".\src\include\DataModelV2\GroupInstance.h">
</File>
<File
RelativePath=".\src\include\DataModelV2\Instance.h">
</File>
<File
RelativePath=".\src\include\DataModelV2\LevelInstance.h">
</File>
<File
RelativePath=".\src\include\DataModelV2\PartInstance.h">
</File>
<File
RelativePath=".\src\include\DataModelV2\PVInstance.h">
</File>
<File
RelativePath=".\src\include\DataModelV2\WorkspaceInstance.h">
</File>
<Filter
Name="Gui">
<File
RelativePath=".\src\include\DataModelV2\BaseButtonInstance.h">
</File>
<File
RelativePath=".\src\include\DataModelV2\BaseGuiInstance.h">
</File>
<File
RelativePath=".\src\include\DataModelV2\GuiRootInstance.h">
</File>
<File
RelativePath=".\src\include\DataModelV2\ImageButtonInstance.h">
</File>
<File
RelativePath=".\src\include\DataModelV2\TextButtonInstance.h">
</File>
<File
RelativePath=".\src\include\DataModelV2\ToggleImageButtonInstance.h">
</File>
</Filter>
</Filter>
<Filter
Name="Properties">
<File
RelativePath=".\src\include\Properties\BoolProperty.h">
</File>
<File
RelativePath=".\src\include\Properties\Property.h">
</File>
</Filter>
</Filter>
<Filter
Name="Resource Files"
Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
<File
RelativePath=".\Dialogs.rc">
</File>
<File
RelativePath=".\icon1.ico">
</File>
<File
RelativePath=".\Parts.bmp">
</File>
<File
RelativePath=".\roblox_RN1_icon.ico">
</File>
</Filter>
</Files>
<Globals>
<Global
Name="RESOURCE_FILE"
Value="Dialogs.rc"/>
</Globals>
</VisualStudioProject>

14
Blocks3D.exe.manifest Normal file
View File

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

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@@ -4,7 +4,19 @@
#include <windows.h> #include <windows.h>
#include <commctrl.h> #include <commctrl.h>
#include "resource.h" #include <richedit.h>
#include "src/include/resource.h"
#define APP_GENER 0
#define APP_MAJOR 0
#define APP_MINOR 106
#define APP_PATCH 4
#define APP_VER_STRING APP_GENER.APP_MAJOR.APP_MINOR.APP_PATCH
#define VER_PREFIX( N ) v##N
#define HSTR( N ) #N
#define STR( N ) HSTR( N )
#define VER_STR( N ) STR( VER_PREFIX( N ) )
@@ -15,7 +27,39 @@
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_CAN LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_CAN
IDB_BITMAP1 BITMAP "Parts.bmp" IDB_BITMAP1 BITMAP "Parts.bmp"
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
1 VERSIONINFO
FILEVERSION APP_GENER,APP_MAJOR,APP_MINOR,APP_PATCH
PRODUCTVERSION APP_GENER,APP_MAJOR,APP_MINOR,APP_PATCH
FILEOS VOS__WINDOWS32
FILETYPE VFT_APP
FILESUBTYPE VFT2_UNKNOWN
FILEFLAGSMASK 0
FILEFLAGS 0
{
BLOCK "StringFileInfo"
{
BLOCK "100901B5"
{
VALUE "Comments", ""
VALUE "CompanyName", "Blocks3D Team"
VALUE "FileDescription", "Blocks 3D"
VALUE "FileVersion", VER_STR(APP_VER_STRING)
VALUE "InternalName", "Blocks3D"
VALUE "LegalCopyright", "Blocks3D Team - 2022"
VALUE "LegalTrademarks", ""
VALUE "OriginalFilename", "Blocks3D.exe"
VALUE "PrivateBuild", ""
VALUE "ProductName", "Blocks3D"
VALUE "ProductVersion", VER_STR(APP_VER_STRING)
VALUE "SpecialBuild", ""
}
}
BLOCK "VarFileInfo"
{
VALUE "Translation", 0x1009, 0x01B5
}
}
// //
// Dialog resources // Dialog resources
@@ -34,8 +78,19 @@ FONT 8, "Ms Shell Dlg"
} }
// //
// Icon resources // Icon resources
// //
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_CAN LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_CAN
IDI_ICON1 ICON "FatB3dIcon.ico" IDI_ICON1 ICON "FatB3dIcon.ico"
//
// Manifest resources
//
#ifndef _DEBUG
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
1 MANIFEST ".\\Blocks3D.exe.manifest"
#endif

View File

@@ -1,14 +1,15 @@
;InnoSetupVersion=5.4.3 ;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_5
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

View File

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.

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
ode-0.5.7z Normal file

Binary file not shown.

View File

@@ -1,9 +0,0 @@
#ifndef IDC_STATIC
#define IDC_STATIC (-1)
#endif
#define IDI_ICON1 101
#define IDB_BITMAP1 102
#define IDD_DIALOG1 103
#define IDD_DIALOG2 104
#define IDC_EDIT1 1001

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

@@ -2,10 +2,6 @@
#include <G3DAll.h> #include <G3DAll.h>
#include "propertyGrid.h" #include "propertyGrid.h"
#include "map" #include "map"
#ifdef NO_SPRINTF
#define sprintf_s sprintf
#endif
//#include "Properties/BoolProperty.h" //#include "Properties/BoolProperty.h"
class Instance class Instance

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

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

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, CoordinateFrame * cFrame);
};

7
src/include/resource.h Normal file
View File

@@ -0,0 +1,7 @@
#define IDC_PROPERTYGRID 2000
#define IDC_STATIC 2
#define IDC_EDIT1 105
#define IDI_ICON1 102
#define IDB_BITMAP1 103
#define IDD_DIALOG1 104

View File

@@ -1,5 +0,0 @@
#ifndef WINVER
#define _WIN32_WINNT 0x0400
#define _WIN32_WINDOWS 0x0400
#define WINVER 0x0400
#endif

View File

@@ -1,13 +1,14 @@
#include <G3DAll.h> #include <G3DAll.h>
#include <initguid.h> #include <initguid.h>
#include <iomanip> #include <iomanip>
#include "../../resource.h" #include "resource.h"
#include "DataModelV2/Instance.h" #include "DataModelV2/Instance.h"
#include "DataModelV2/PartInstance.h" #include "DataModelV2/PartInstance.h"
#include "DataModelV2/TextButtonInstance.h" #include "DataModelV2/TextButtonInstance.h"
#include "DataModelV2/ImageButtonInstance.h" #include "DataModelV2/ImageButtonInstance.h"
#include "DataModelV2/DataModelInstance.h" #include "DataModelV2/DataModelInstance.h"
#include "DataModelV2/GuiRootInstance.h" #include "DataModelV2/GuiRootInstance.h"
#include "XplicitNgine/XplicitNgine.h"
#include "CameraController.h" #include "CameraController.h"
#include "AudioPlayer.h" #include "AudioPlayer.h"
#include "Globals.h" #include "Globals.h"
@@ -142,6 +143,11 @@ Application::Application(HWND parentWindow) : _propWindow(NULL) { //: GApp(setti
} }
bool Application::viewportHasFocus()
{
return GetActiveWindow() == this->_hWndMain;
}
void Application::navigateToolbox(std::string path) void Application::navigateToolbox(std::string path)
{ {
int len = path.size() + 1; int len = path.size() + 1;
@@ -153,28 +159,29 @@ void Application::navigateToolbox(std::string path)
void Application::deleteInstance() void Application::deleteInstance()
{ {
if(g_selectedInstances.size() > 0) if(_dataModel->getSelectionService()->getSelection().size() > 0)
{ {
size_t undeletable = 0; std::vector<Instance *> selection = _dataModel->getSelectionService()->getSelection();
while(g_selectedInstances.size() > undeletable) std::vector<Instance *> toDelete;
for(size_t i = 0; i < selection.size(); i++) {
if(selection[i]->canDelete) {
toDelete.push_back(selection[i]);
}
}
if(toDelete.size() > 0)
{ {
if(g_selectedInstances.at(0)->canDelete) AudioPlayer::playSound(GetFileInPath("/content/sounds/pageturn.wav"));
{ for(size_t i = 0; i < toDelete.size(); i++) {
AudioPlayer::playSound(GetFileInPath("/content/sounds/pageturn.wav")); Instance* selectedInstance = toDelete[i];
Instance* selectedInstance = g_selectedInstances.at(0); _dataModel->getSelectionService()->removeSelected(selectedInstance);
selectedInstance->setParent(NULL); selectedInstance->setParent(NULL);
delete selectedInstance; delete selectedInstance;
selectedInstance = NULL; selectedInstance = NULL;
g_selectedInstances.erase(g_selectedInstances.begin());
}
else
{
undeletable++;
} }
} }
} }
if(g_selectedInstances.size() == 0) if(_dataModel->getSelectionService()->getSelection().size() == 0)
g_usableApp->_propWindow->ClearProperties(); _dataModel->getSelectionService()->addSelected(_dataModel);
} }
@@ -187,10 +194,9 @@ void Application::onInit() {
_dataModel->setName("undefined"); _dataModel->setName("undefined");
_dataModel->font = g_fntdominant; _dataModel->font = g_fntdominant;
g_dataModel = _dataModel; g_dataModel = _dataModel;
//initGUI();
#ifdef LEGACY_LOAD_G3DFUN_LEVEL #ifdef LEGACY_LOAD_G3DFUN_LEVEL
// Anchored this baseplate for XplicitNgine tests
PartInstance* test = makePart(); PartInstance* test = makePart();
test->setParent(_dataModel->getWorkspace()); test->setParent(_dataModel->getWorkspace());
test->color = Color3(0.2F,0.3F,1); test->color = Color3(0.2F,0.3F,1);
@@ -198,7 +204,8 @@ void Application::onInit() {
test->setPosition(Vector3(0,0,0)); test->setPosition(Vector3(0,0,0));
test->setCFrame(test->getCFrame() * Matrix3::fromEulerAnglesXYZ(0,toRadians(0),toRadians(0))); test->setCFrame(test->getCFrame() * Matrix3::fromEulerAnglesXYZ(0,toRadians(0),toRadians(0)));
test->setSurface(TOP, Enum::SurfaceType::Bumps); test->setSurface(TOP, Enum::SurfaceType::Bumps);
test->setAnchored(true);
test = makePart(); test = makePart();
test->setParent(_dataModel->getWorkspace()); test->setParent(_dataModel->getWorkspace());
test->color = Color3(.5F,1,.5F); test->color = Color3(.5F,1,.5F);
@@ -262,9 +269,6 @@ void Application::onInit() {
test->setPosition(Vector3(-2,5,0)); test->setPosition(Vector3(-2,5,0));
test->setSurface(TOP, Enum::SurfaceType::Bumps); test->setSurface(TOP, Enum::SurfaceType::Bumps);
test = makePart(); test = makePart();
test->setParent(_dataModel->getWorkspace()); test->setParent(_dataModel->getWorkspace());
test->color = Color3::gray(); test->color = Color3::gray();
@@ -282,6 +286,8 @@ void Application::onInit() {
_dataModel->debugGetOpen(); _dataModel->debugGetOpen();
#endif #endif
_dataModel->getSelectionService()->clearSelection();
_dataModel->getSelectionService()->addSelected(_dataModel);
@@ -294,86 +300,15 @@ void Application::onInit() {
} }
void Application::onCleanup() { void Application::onCleanup() {
clearInstances(); clearInstances();
sky->~Sky(); sky->~Sky();
} }
void Application::onLogic() {
/*
Class HyperSnapSolver
function getCollisionDepth(Part colliding, part collider);
function getFaceCollision(Part colliding, part collider);
function eject(Part colliding, Part collider)
{
if(!colliding.canCollide || !collider.canCollide)
return;
if(getCollisionDepth(colliding, collider) != 0) {
int ejectMultiplier, ejectMultipliery = 1-(collider.Friction+colliding.Friction), ejectMultiplierz = 1-(collider.Friction/2+colliding.Friction/2);
if(colliding.Anchored)
ejectMultiplier = collider.elasticity;
int faceCollided = getFaceCollision(colliding, collider);
if(faceCollided % 3 == 1)
{
ejectMultipliery = ejectMultiplier;
ejectMultiplier = 1-(collider.Friction+colliding.Friction/2);
}
else if(faceCollided % 3 == 2)
{
ejectMultiplierz = ejectMultiplier;
ejectMultiplier = 1-(collider.Friction+colliding.Friction/2);
}
collider.Velocity *= Vector3.new(colliding.Velocity.x*ejectMultiplier,colliding.Velocity.y*ejectMultipliery,colliding.Velocity.z)
}
} }
*/
double grav = 0.32666666666666666666666666666667;
void simGrav(PartInstance * collider)
{
if(!collider->anchored)
{
collider->setPosition(collider->getPosition()+collider->getVelocity());
collider->setVelocity(collider->getVelocity()-Vector3(0,grav,0));
}
}
void eject(PartInstance * colliding, PartInstance * collider)
{
if(colliding == collider || !colliding->canCollide || !collider->canCollide)
return;
if(G3D::CollisionDetection::fixedSolidBoxIntersectsFixedSolidBox(collider->getBox(), colliding->getBox()))
collider->setVelocity(collider->getVelocity().reflectionDirection(colliding->getCFrame().upVector())/1.3F);
}
void Application::onLogic() {
//PhysicsStart
for_each (_dataModel->getWorkspace()->partObjects.begin(), _dataModel->getWorkspace()->partObjects.end(), simGrav);
for(size_t i = 0; i < _dataModel->getWorkspace()->partObjects.size(); i++)
{
for(size_t j = 0; j < _dataModel->getWorkspace()->partObjects.size(); j++)
{
eject(_dataModel->getWorkspace()->partObjects[i], _dataModel->getWorkspace()->partObjects[j]);
}
}
}
void Application::onNetwork() { void Application::onNetwork() {
// Poll net messages here // Poll net messages here
} }
@@ -384,15 +319,38 @@ void Application::onNetwork() {
// return pow(pow((double)vector1.x - (double)vector2.x, 2) + pow((double)vector1.y - (double)vector2.y, 2) + pow((double)vector1.z - (double)vector2.z, 2), 0.5); // return pow(pow((double)vector1.x - (double)vector2.x, 2) + pow((double)vector1.y - (double)vector2.y, 2) + pow((double)vector1.z - (double)vector2.z, 2), 0.5);
//} //}
std::vector<Instance*> Application::getSelection()
{
return g_selectedInstances;
}
void Application::onSimulation(RealTime rdt, SimTime sdt, SimTime idt) { void Application::onSimulation(RealTime rdt, SimTime sdt, SimTime idt) {
if(_dataModel->isRunning()) if(_dataModel->isRunning())
{
// XplicitNgine Start
std::vector<PartInstance *> toDelete;
for(size_t i = 0; i < _dataModel->getWorkspace()->partObjects.size(); i++)
{
PartInstance* partInstance = _dataModel->getWorkspace()->partObjects[i];
if(partInstance->getPosition().y < -255)
{
toDelete.push_back(partInstance);
}
else
_dataModel->getEngine()->createBody(partInstance);
}
while(toDelete.size() > 0)
{
PartInstance * p = toDelete.back();
toDelete.pop_back();
g_dataModel->getSelectionService()->removeSelected(p);
p->setParent(NULL);
delete p;
}
for(int i = 0; i < 6; i++)
{
_dataModel->getEngine()->step(0.1F);
}
onLogic(); onLogic();
}
_dataModel->getGuiRoot()->update(); _dataModel->getGuiRoot()->update();
if(_dataModel->name != _title) if(_dataModel->name != _title)
@@ -407,95 +365,29 @@ void Application::onSimulation(RealTime rdt, SimTime sdt, SimTime idt) {
} }
/*double getOSVersion() {
OSVERSIONINFO osvi;
ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&osvi);
std::string version = Convert(osvi.dwMajorVersion) + "." + Convert(osvi.dwMinorVersion);
return ::atof(version.c_str());
}*/
/*
bool IsHolding(int button)
{
return (GetKeyState(button) >> 1)>0;
}
*/
void Application::onUserInput(UserInput* ui) { void Application::onUserInput(UserInput* ui) {
if(mouseMoveState) if(mouseMoveState)
{ {
mouseMoveState = false; mouseMoveState = false;
tool->onMouseMoved(mouse); tool->onMouseMoved(mouse);
} }
/*
if(GetHoldKeyState(VK_LCONTROL))
{
if(GetHoldKeyState('D'))
{
_messageTime = System::time();
if(debugMode())
_message = "Debug Mode Disabled";
else
_message = "Debug Mode Enabled";
setDebugMode(!debugMode());
}
}
*/
if(GetHoldKeyState(VK_F8)) if(GetHoldKeyState(VK_F8))
{ {
_dataModel->getGuiRoot()->setDebugMessage("FOV Set to 10", System::time()); _dataModel->getGuiRoot()->setDebugMessage("FOV Set to 10", System::time());
} }
//}
//_dataModel->mousex = ui->getMouseX();
//_dataModel->mousey = ui->getMouseY();
mouse.setMouseDown((GetKeyState(VK_LBUTTON) & 0x100) != 0); mouse.setMouseDown((GetKeyState(VK_LBUTTON) & 0x100) != 0);
if (GetHoldKeyState(VK_LBUTTON)) { // Camera KB Handling
/* if (_dragging) { if (GetKPBool(VK_OEM_COMMA)) //Left
PartInstance* part = NULL; g_usableApp->cameraController.panLeft();
if(g_selectedInstances.size() > 0) else if (GetKPBool(VK_OEM_PERIOD)) // Right
part = (PartInstance*) g_selectedInstances.at(0); g_usableApp->cameraController.panRight();
Ray dragRay = cameraController.getCamera()->worldRay(mouse.x, mouse.y, renderDevice->getViewport()); else if (GetKPBool(0x49)) // Zoom In (I)
std::vector<Instance*> instances = _dataModel->getWorkspace()->getAllChildren(); g_usableApp->cameraController.Zoom(1);
for(size_t i = 0; i < instances.size(); i++) else if (GetKPBool(0x4F)) // Zoom Out (O)
{ g_usableApp->cameraController.Zoom(-1);
if(PartInstance* moveTo = dynamic_cast<PartInstance*>(instances.at(i)))
{
float __time = testRay.intersectionTime(moveTo->getBox());
float __nearest=std::numeric_limits<float>::infinity();
if (__time != inf())
{
if (__nearest>__time)
{
// BROKEN
//Vector3 closest = (dragRay.closestPoint(moveTo->getPosition()) * 2);
//part->setPosition(closest);
//part->setPosition(Vector3(floor(closest.x),part->getPosition().y,floor(closest.z)));
}
}
}
}
Sleep(10);
}*/
}
// Camera KB Handling {
if (GetKPBool(VK_OEM_COMMA)) //Left
g_usableApp->cameraController.panLeft();
else if (GetKPBool(VK_OEM_PERIOD)) // Right
g_usableApp->cameraController.panRight();
else if (GetKPBool(0x49)) // Zoom In (I)
g_usableApp->cameraController.Zoom(1);
else if (GetKPBool(0x4F)) // Zoom Out (O)
g_usableApp->cameraController.Zoom(-1);
// }
//readMouseGUIInput();
// Add other key handling here
} }
void Application::changeTool(Tool * newTool) void Application::changeTool(Tool * newTool)
@@ -673,18 +565,17 @@ 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.6F, 0.9F, 1.0F };
float lightDiffuse[] = { 0.6F, 0.4F, 0.9F, 1.0F }; //float lightDiffuse[] = { 0.6F, 0.4F, 0.9F, 1.0F };
float lightSpecular[] = { 0.8F, 0.8F, 0.8F, 1.0F };
//float lightSpecular[] = { 0.8F, 0.6F, 1.0F, 1.0F }; //float lightSpecular[] = { 0.8F, 0.6F, 1.0F, 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);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, lightSpecular); //glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, lightSpecular);
glMateriali(GL_FRONT_AND_BACK, GL_SHININESS, 70); //glMateriali(GL_FRONT_AND_BACK, GL_SHININESS, 70);
rd->beforePrimitive(); rd->beforePrimitive();
@@ -704,17 +595,15 @@ void Application::onGraphics(RenderDevice* rd) {
//Draw::box(G3D::Box(mouse.getPosition()-Vector3(2,0.5F,1),mouse.getPosition()+Vector3(2,0.5F,1)), rd, Color3::cyan(), Color4::clear()); //Draw::box(G3D::Box(mouse.getPosition()-Vector3(2,0.5F,1),mouse.getPosition()+Vector3(2,0.5F,1)), rd, Color3::cyan(), Color4::clear());
if(g_selectedInstances.size() > 0)
for(size_t i = 0; i < _dataModel->getSelectionService()->getSelection().size(); i++)
{ {
for(size_t i = 0; i < g_selectedInstances.size(); i++) if(PartInstance* part = dynamic_cast<PartInstance*>(g_dataModel->getSelectionService()->getSelection()[i]))
{ {
if(PartInstance* part = dynamic_cast<PartInstance*>(g_selectedInstances.at(i))) Vector3 size = part->getSize();
{ Vector3 pos = part->getPosition();
Vector3 size = part->getSize(); drawOutline(Vector3(0+size.x/2, 0+size.y/2, 0+size.z/2) ,Vector3(0-size.x/2,0-size.y/2,0-size.z/2), rd, lighting, Vector3(size.x/2, size.y/2, size.z/2), Vector3(pos.x, pos.y, pos.z), part->getCFrame());
Vector3 pos = part->getPosition(); }
drawOutline(Vector3(0+size.x/2, 0+size.y/2, 0+size.z/2) ,Vector3(0-size.x/2,0-size.y/2,0-size.z/2), rd, lighting, Vector3(size.x/2, size.y/2, size.z/2), Vector3(pos.x, pos.y, pos.z), part->getCFrame());
}
}
} }
@@ -794,11 +683,6 @@ void Application::onKeyPressed(int key)
{ {
_dataModel->getOpen(); _dataModel->getOpen();
} }
if ((GetHoldKeyState(VK_LCONTROL) || GetHoldKeyState(VK_RCONTROL)) && key=='A')
{
std::vector<Instance *> vec = _dataModel->getWorkspace()->getAllChildren();
g_selectedInstances.insert(g_selectedInstances.end(), vec.begin(), vec.end());
}
tool->onKeyDown(key); tool->onKeyDown(key);
} }
void Application::onKeyUp(int key) void Application::onKeyUp(int key)
@@ -808,12 +692,6 @@ void Application::onKeyUp(int key)
void Application::onMouseLeftPressed(HWND hwnd,int x,int y) void Application::onMouseLeftPressed(HWND hwnd,int x,int y)
{ {
//Removed set focus
//std::cout << "Click: " << x << "," << y << std::endl;
bool onGUI = _dataModel->getGuiRoot()->mouseInGUI(renderDevice, x, y); bool onGUI = _dataModel->getGuiRoot()->mouseInGUI(renderDevice, x, y);
@@ -823,19 +701,6 @@ void Application::onMouseLeftPressed(HWND hwnd,int x,int y)
} }
} }
void Application::selectInstance(Instance* selectedInstance, PropertyWindow* propWindow)
{
if(!GetHoldKeyState(VK_RCONTROL) && !GetHoldKeyState(VK_LCONTROL))
{
printf("No control key hold \n");
g_selectedInstances.clear();
}
else printf("Control held\n");
if(std::find(g_selectedInstances.begin(), g_selectedInstances.end(),selectedInstance)==g_selectedInstances.end())
g_selectedInstances.push_back(selectedInstance);
propWindow->UpdateSelected(selectedInstance);
}
G3D::RenderDevice* Application::getRenderDevice() G3D::RenderDevice* Application::getRenderDevice()
{ {
return renderDevice; return renderDevice;
@@ -843,13 +708,9 @@ G3D::RenderDevice* Application::getRenderDevice()
void Application::onMouseLeftUp(G3D::RenderDevice* renderDevice, int x, int y) void Application::onMouseLeftUp(G3D::RenderDevice* renderDevice, int x, int y)
{ {
//std::cout << "Release: " << x << "," << y << std::endl;
_dataModel->getGuiRoot()->onMouseLeftUp(renderDevice, x, y); _dataModel->getGuiRoot()->onMouseLeftUp(renderDevice, x, y);
_dragging = false; _dragging = false;
tool->onButton1MouseUp(mouse); tool->onButton1MouseUp(mouse);
//_message = "Dragging = false.";
//_messageTime = System::time();
} }
void Application::onMouseRightPressed(int x,int y) void Application::onMouseRightPressed(int x,int y)
@@ -869,8 +730,6 @@ void Application::onMouseMoved(int x,int y)
mouse.y = y; mouse.y = y;
//tool->onMouseMoved(mouse); //tool->onMouseMoved(mouse);
mouseMoveState = true; mouseMoveState = true;
//_dataModel->mousex = x;
//_dataModel->mousey = y;
} }
void Application::onMouseWheel(int x,int y,short delta) void Application::onMouseWheel(int x,int y,short delta)
@@ -949,6 +808,8 @@ void Application::run() {
RealTime rdt = timeStep; RealTime rdt = timeStep;
SimTime sdt = timeStep * rate; SimTime sdt = timeStep * rate;
SimTime idt = desiredFrameDuration * rate; SimTime idt = desiredFrameDuration * rate;
onSimulation(rdt,sdt,idt); onSimulation(rdt,sdt,idt);
m_simulationWatch.tock(); m_simulationWatch.tock();

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>
@@ -13,13 +14,14 @@ using namespace std;
using namespace rapidxml; using namespace rapidxml;
DataModelInstance::DataModelInstance(void) DataModelInstance::DataModelInstance(void)
{ {
Instance::Instance(); Instance::Instance();
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";
@@ -34,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;
@@ -48,6 +72,7 @@ bool DataModelInstance::isRunning()
DataModelInstance::~DataModelInstance(void) DataModelInstance::~DataModelInstance(void)
{ {
delete xplicitNgine;
} }
#ifdef _DEBUG #ifdef _DEBUG
@@ -62,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()
{ {
@@ -271,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;
@@ -286,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")
{ {
@@ -397,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;
@@ -449,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
@@ -519,6 +565,7 @@ bool DataModelInstance::getOpen()
of.lpstrFile[0]='\0'; of.lpstrFile[0]='\0';
of.nMaxFile=500; of.nMaxFile=500;
of.lpstrTitle="Hello"; of.lpstrTitle="Hello";
of.Flags = OFN_FILEMUSTEXIST;
ShowCursor(TRUE); ShowCursor(TRUE);
BOOL file = GetOpenFileName(&of); BOOL file = GetOpenFileName(&of);
if (file) if (file)
@@ -526,7 +573,6 @@ bool DataModelInstance::getOpen()
_loadedFileName = of.lpstrFile; _loadedFileName = of.lpstrFile;
load(of.lpstrFile,true); load(of.lpstrFile,true);
} }
//else MessageBox(NULL, "Failed to open dialog", "Failure", MB_ICONHAND | MB_OK);
return true; return true;
} }
void DataModelInstance::setMessage(std::string msg) void DataModelInstance::setMessage(std::string msg)
@@ -591,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

@@ -184,8 +184,6 @@ GuiRootInstance::GuiRootInstance() : _message(""), _messageTime(0)
button->fontLocationRelativeTo = Vector2(10, 0); button->fontLocationRelativeTo = Vector2(10, 0);
button->setAllColorsSame(); button->setAllColorsSame();
button->boxColorOvr = Color4(0.6F,0.6F,0.6F,0.4F); button->boxColorOvr = Color4(0.6F,0.6F,0.6F,0.4F);
button->setName("insert");
button->setButtonListener(menuListener);
button = makeTextButton(); button = makeTextButton();
button->boxBegin = Vector2(500, 0); button->boxBegin = Vector2(500, 0);
@@ -509,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 @@
#define WINVER 0x0400
#include <G3DAll.h> #include <G3DAll.h>
#include "DataModelV2/Instance.h" #include "DataModelV2/Instance.h"

View File

@@ -40,12 +40,12 @@ std::vector<PROPGRIDITEM> LevelInstance::getProperties()
sprintf_s(scoreTxt, "%d", score); sprintf_s(scoreTxt, "%d", score);
properties.push_back(createPGI("Gameplay", properties.push_back(createPGI("Gameplay",
"InitialTimerValue", "InitialTimerValue",
"The ammount of time in seconds the player has to complete this level.\r\n\r\nPut 0 if time is limitless.", "The amount of time in seconds the player has to complete this level.\r\n\r\nPut 0 if time is limitless.",
(LPARAM)timerTxt, (LPARAM)timerTxt,
PIT_EDIT)); PIT_EDIT));
properties.push_back(createPGI("Gameplay", properties.push_back(createPGI("Gameplay",
"InitialScoreValue", "InitialScoreValue",
"The ammount of points the player starts with.", "The amount of points the player starts with.",
(LPARAM)scoreTxt, (LPARAM)scoreTxt,
PIT_EDIT)); PIT_EDIT));
return properties; return properties;

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,34 @@ void PartInstance::setSurface(int face, Enum::SurfaceType::Value surface)
void PartInstance::setParent(Instance* prnt) void PartInstance::setParent(Instance* prnt)
{ {
g_dataModel->getEngine()->deleteBody(this);
Instance * cparent = getParent(); Instance * cparent = getParent();
while(cparent != NULL) while(cparent != NULL)
{ {
if(WorkspaceInstance* workspace = dynamic_cast<WorkspaceInstance*>(cparent)) if(WorkspaceInstance* workspace = dynamic_cast<WorkspaceInstance*>(cparent))
{ {
std::cout << "Removed from partarray " << std::endl;
workspace->partObjects.erase(std::remove(workspace->partObjects.begin(), workspace->partObjects.end(), this), workspace->partObjects.end()); workspace->partObjects.erase(std::remove(workspace->partObjects.begin(), workspace->partObjects.end(), this), workspace->partObjects.end());
break;
} }
cparent = cparent->getParent(); cparent = cparent->getParent();
} }
Instance::setParent(prnt); Instance::setParent(prnt);
while(parent != NULL) cparent = getParent();
while(cparent != NULL)
{ {
if(WorkspaceInstance* workspace = dynamic_cast<WorkspaceInstance*>(parent)) if(WorkspaceInstance* workspace = dynamic_cast<WorkspaceInstance*>(cparent))
{ {
workspace->partObjects.push_back(this); workspace->partObjects.push_back(this);
break; break;
} }
parent = parent->getParent(); cparent = cparent->getParent();
} }
} }
PartInstance::PartInstance(const PartInstance &oinst) PartInstance::PartInstance(const PartInstance &oinst)
{ {
PVInstance::PVInstance(oinst); PVInstance::PVInstance(oinst);
physBody = NULL;
glList = glGenLists(1); glList = glGenLists(1);
//name = oinst.name; //name = oinst.name;
//className = "Part"; //className = "Part";
@@ -143,7 +153,7 @@ PartInstance::PartInstance(const PartInstance &oinst)
setParent(oinst.parent); setParent(oinst.parent);
anchored = oinst.anchored; anchored = oinst.anchored;
size = oinst.size; size = oinst.size;
setCFrame(oinst.cFrame); setCFrameNoSync(oinst.cFrame);
color = oinst.color; color = oinst.color;
velocity = oinst.velocity; velocity = oinst.velocity;
rotVelocity = oinst.rotVelocity; rotVelocity = oinst.rotVelocity;
@@ -192,8 +202,8 @@ void PartInstance::setSize(Vector3 newSize)
size = Vector3(sizex, sizey, sizez); size = Vector3(sizex, sizey, sizez);
g_dataModel->getEngine()->deleteBody(this);
g_dataModel->getEngine()->createBody(this);
} }
Vector3 PartInstance::getSize() Vector3 PartInstance::getSize()
{ {
@@ -214,21 +224,41 @@ void PartInstance::setShape(Enum::Shape::Value shape)
this->shape = shape; this->shape = shape;
this->setSize(this->getSize()); this->setSize(this->getSize());
} }
g_dataModel->getEngine()->deleteBody(this);
g_dataModel->getEngine()->createBody(this);
changed = true; changed = true;
} }
void PartInstance::setPosition(Vector3 pos) void PartInstance::setPosition(Vector3 pos)
{ {
position = pos; position = pos;
cFrame = CoordinateFrame(cFrame.rotation, pos); setCFrame(CoordinateFrame(cFrame.rotation, pos));
changed = true;
} }
void PartInstance::setAnchored(bool anchored)
{
this->anchored = anchored;
g_dataModel->getEngine()->deleteBody(this);
g_dataModel->getEngine()->createBody(this);
}
bool PartInstance::isAnchored()
{
return this->anchored;
}
CoordinateFrame PartInstance::getCFrame() CoordinateFrame PartInstance::getCFrame()
{ {
return cFrame; return cFrame;
} }
void PartInstance::setCFrame(CoordinateFrame coordinateFrame) void PartInstance::setCFrame(CoordinateFrame coordinateFrame)
{
g_dataModel->getEngine()->updateBody(this, &coordinateFrame);
setCFrameNoSync(coordinateFrame);
}
void PartInstance::setCFrameNoSync(CoordinateFrame coordinateFrame)
{ {
cFrame = coordinateFrame; cFrame = coordinateFrame;
position = coordinateFrame.translation; position = coordinateFrame.translation;
@@ -279,7 +309,6 @@ void PartInstance::render(RenderDevice* rd) {
changed=false; changed=false;
Vector3 renderSize = size/2; Vector3 renderSize = size/2;
glNewList(glList, GL_COMPILE); glNewList(glList, GL_COMPILE);
//glScalef(0.5f,0.5f,0.5f);
renderShape(this->shape, renderSize, color); renderShape(this->shape, renderSize, color);
renderSurface(TOP, this->top, renderSize, this->controller, color); renderSurface(TOP, this->top, renderSize, this->controller, color);
renderSurface(FRONT, this->front, renderSize, this->controller, color); renderSurface(FRONT, this->front, renderSize, this->controller, color);
@@ -297,6 +326,16 @@ void PartInstance::render(RenderDevice* rd) {
PartInstance::~PartInstance(void) PartInstance::~PartInstance(void)
{ {
glDeleteLists(glList, 1); glDeleteLists(glList, 1);
/*
// Causes some weird ODE error
// Someone, please look into this
dBodyDestroy(physBody);
for (int i = 0; i < 3; i++) {
if (physGeom[i] != NULL)
dGeomDestroy(physGeom[i]);
}
*/
} }
char pto[512]; char pto[512];
@@ -335,7 +374,7 @@ void PartInstance::PropUpdate(LPPROPGRIDITEM &item)
} }
else if(strcmp(item->lpszPropName, "Anchored") == 0) else if(strcmp(item->lpszPropName, "Anchored") == 0)
{ {
anchored= item->lpCurValue == TRUE; setAnchored(item->lpCurValue == TRUE);
} }
else if(strcmp(item->lpszPropName, "Offset") == 0) else if(strcmp(item->lpszPropName, "Offset") == 0)
{ {

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

@@ -2,33 +2,6 @@
#include "DataModelV2/ToggleImageButtonInstance.h" #include "DataModelV2/ToggleImageButtonInstance.h"
#include "Application.h" #include "Application.h"
#include "Globals.h" #include "Globals.h"
#include "../../resource.h"
INT_PTR CALLBACK InsertDlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
{
switch(Message)
{
case WM_INITDIALOG:
return TRUE;
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
//g_dataModel->setMessage("lol u thought");
EndDialog(hwnd, IDOK);
break;
case IDCANCEL:
EndDialog(hwnd, IDCANCEL);
break;
}
break;
default:
return FALSE;
}
return TRUE;
}
void MenuButtonListener::onButton1MouseClick(BaseButtonInstance* button) void MenuButtonListener::onButton1MouseClick(BaseButtonInstance* button)
{ {
if(button->name == "go") if(button->name == "go")
@@ -41,17 +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;
}
} }
else if(button->name == "insert") }
{
//HWND aDiag = CreateDialog((HINSTANCE) GetWindowLong(Globals::mainHwnd, GWL_HINSTANCE), MAKEINTRESOURCE(IDD_DIALOG1), Globals::mainHwnd, (DLGPROC)InsertDlgProc);
HWND aDiag2 = CreateDialog((HINSTANCE) GetWindowLong(Globals::mainHwnd, GWL_HINSTANCE), MAKEINTRESOURCE(IDD_DIALOG2), Globals::mainHwnd, (DLGPROC)InsertDlgProc);
}
}

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

@@ -1,17 +1,11 @@
#define _WINSOCKAPI_ #define _WINSOCKAPI_
#include <windows.h> #include <windows.h>
#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,12 @@ void ArrowTool::onButton1MouseDown(Mouse mouse)
mouseDownStarty = mouse.y; mouseDownStarty = mouse.y;
mouseDown = true; mouseDown = true;
if(!lctrlDown && !rctrlDown) if(!lctrlDown && !rctrlDown)
g_selectedInstances.clear(); g_dataModel->getSelectionService()->clearSelection();
PartInstance * target = mouse.getTarget(); PartInstance * target = mouse.getTarget();
if(target != NULL && std::find(g_selectedInstances.begin(), g_selectedInstances.end(), target) == g_selectedInstances.end()) if(target != NULL)
g_selectedInstances.push_back(target); g_dataModel->getSelectionService()->addSelected(target);
if(g_selectedInstances.size() == 0) if(g_dataModel->getSelectionService()->getSelection().size() == 0)
g_selectedInstances.push_back(g_dataModel); g_dataModel->getSelectionService()->addSelected(g_dataModel);
g_usableApp->_propWindow->UpdateSelected(g_selectedInstances[0]);
} }
void ArrowTool::onButton1MouseUp(Mouse mouse) void ArrowTool::onButton1MouseUp(Mouse mouse)
{ {
@@ -47,11 +47,11 @@ void ArrowTool::onMouseMoved(Mouse mouse)
} }
else return; else return;
} }
for(size_t i = 0; i < g_selectedInstances.size(); i++) //This will later decide primary and move all parts according to primary for(size_t i = 0; i < g_dataModel->getSelectionService()->getSelection().size(); i++) //This will later decide primary and move all parts according to primary
{ {
if(PartInstance * part = dynamic_cast<PartInstance *>(g_selectedInstances[i])) if(PartInstance * part = dynamic_cast<PartInstance *>(g_dataModel->getSelectionService()->getSelection()[i]))
{ {
part->setPosition(mouse.getPosition(g_selectedInstances)); part->setPosition(mouse.getPosition(g_dataModel->getSelectionService()->getSelection()));
} }
} }
return; return;
@@ -69,30 +69,6 @@ void ArrowTool::onKeyDown(int key)
{ {
lctrlDown = true; lctrlDown = true;
} }
else if(key == 'R')
{
if(g_selectedInstances.size() > 0)
{
Instance* selectedInstance = g_selectedInstances.at(0);
AudioPlayer::playSound(clickSound);
if(PartInstance* part = dynamic_cast<PartInstance*>(selectedInstance))
{
part->setCFrame(part->getCFrame()*Matrix3::fromEulerAnglesXYZ(0,toRadians(90),0));
}
}
}
else if(key == 'T')
{
if(g_selectedInstances.size() > 0)
{
Instance* selectedInstance = g_selectedInstances.at(0);
AudioPlayer::playSound(clickSound);
if(PartInstance* part = dynamic_cast<PartInstance*>(selectedInstance))
{
part->setCFrame(part->getCFrame()*Matrix3::fromEulerAnglesXYZ(0,0,toRadians(90)));
}
}
}
} }
void ArrowTool::onKeyUp(int key) void ArrowTool::onKeyUp(int key)

View File

@@ -0,0 +1,196 @@
#include "XplicitNgine/XplicitNgine.h"
#include "Globals.h"
#define SIDE (0.5f)
#define MASS (1.0)
// constraints
#define MAX_BODIES 65535
#define OBJ_DENSITY (5.0)
#define MAX_CONTACT_PER_BODY 4
XplicitNgine::XplicitNgine()
{
physWorld = dWorldCreate();
physSpace = dHashSpaceCreate(0);
contactgroup = dJointGroupCreate(0);
dWorldSetGravity(physWorld, 0, -0.5, 0);
this->name = "PhysicsService";
//dGeomID ground_geom = dCreatePlane(physSpace, 0, 1, 0, 0);
}
XplicitNgine::~XplicitNgine()
{
dJointGroupDestroy (contactgroup);
dSpaceDestroy (physSpace);
dWorldDestroy (physWorld);
dCloseODE();
}
void collisionCallback(void *data, dGeomID o1, dGeomID o2)
{
int i,n;
dBodyID b1 = dGeomGetBody(o1);
dBodyID b2 = dGeomGetBody(o2);
if (b1 && b2 && dAreConnected(b1, b2))
return;
const int N = 4;
dContact contact[N];
n = dCollide (o1,o2,N,&contact[0].geom,sizeof(dContact));
if (n > 0) {
for (i=0; i<n; i++) {
contact[i].surface.mode = dContactBounce | dContactSlip1 | dContactSlip2 | dContactSoftERP | dContactSoftCFM | dContactApprox1;
// Define contact surface properties
contact[i].surface.bounce = 0.5; //Elasticity
contact[i].surface.mu = 0.3F; //Friction
contact[i].surface.slip1 = 0.0;
contact[i].surface.slip2 = 0.0;
contact[i].surface.soft_erp = 0.8F;
contact[i].surface.soft_cfm = 0.01F;
// Create joints
dJointID c = dJointCreateContact(
g_xplicitNgine->physWorld,
g_xplicitNgine->contactgroup,
contact+i
);
dJointAttach (c,b1,b2);
}
}
}
void XplicitNgine::deleteBody(PartInstance* partInstance)
{
if(partInstance->physBody != NULL)
{
while(dBodyGetNumJoints(partInstance->physBody) > 0) {
dJointDestroy(dBodyGetJoint(partInstance->physBody, 0));
}
dBodyDestroy(partInstance->physBody);
dGeomDestroy(partInstance->physGeom[0]);
partInstance->physBody = NULL;
}
}
void XplicitNgine::createBody(PartInstance* partInstance)
{
// calculate collisions
//dSpaceCollide (physSpace,0,&collisionCallback);
Vector3 partSize = partInstance->getSize();
Vector3 partPosition = partInstance->getPosition();
if(partInstance->physBody == NULL)
{
// init body
partInstance->physBody = dBodyCreate(physWorld);
// Create geom
if(partInstance->shape == Enum::Shape::Block)
{
partInstance->physGeom[0] = dCreateBox(physSpace,
partSize.x,
partSize.y,
partSize.z
);
dVector3 result;
dGeomBoxGetLengths(partInstance->physGeom[0], result);
//printf("[XplicitNgine] Part Geom Size: %.1f, %.1f, %.1f\n",
// result[0],
// result[1],
// result[2]
//);
}
else
{
partInstance->physGeom[0] = dCreateSphere(physSpace, partSize[0]/2);
}
dMass mass;
mass.setBox(partSize.x, partSize.y, partSize.z, 0.7F);
dBodySetMass(partInstance->physBody, &mass);
// Debug output
// Create rigid body
//printf("[XplicitNgine] Created Geom for PartInstance\n");
dBodySetPosition(partInstance->physBody,
partPosition.x,
partPosition.y,
partPosition.z
);
dGeomSetPosition(partInstance->physGeom[0],
partPosition.x,
partPosition.y,
partPosition.z);
Matrix3 g3dRot = partInstance->getCFrame().rotation;
float rotation [12] = { g3dRot[0][0], g3dRot[0][1], g3dRot[0][2], 0,
g3dRot[1][0], g3dRot[1][1], g3dRot[1][2], 0,
g3dRot[2][0], g3dRot[2][1], g3dRot[2][2], 0};
dGeomSetRotation(partInstance->physGeom[0], rotation);
dBodySetRotation(partInstance->physBody, rotation);
//printf("[XplicitNgine] Created Body for PartInstance\n");
if(!partInstance->isAnchored())
dGeomSetBody(partInstance->physGeom[0], partInstance->physBody);
} else {
if(!partInstance->isAnchored())
{
const dReal* physPosition = dBodyGetPosition(partInstance->physBody);
// TODO: Rotation code
// Probably should be done AFTER we get physics KINDA working!!!
const dReal* physRotation = dGeomGetRotation(partInstance->physGeom[0]);
//partInstance->setPosition(Vector3(physPosition[0], physPosition[1], physPosition[2]));
partInstance->setCFrameNoSync(CoordinateFrame(
Matrix3(physRotation[0],physRotation[1],physRotation[2],
physRotation[4],physRotation[5],physRotation[6],
physRotation[8],physRotation[9],physRotation[10]),
Vector3(physPosition[0], physPosition[1], physPosition[2])));
}
}
//STEP SHOULD NOT BE HERE!
//dWorldQuickStep(physWorld, stepSize);
//dJointGroupEmpty(contactgroup);
}
void XplicitNgine::step(float stepSize)
{
dSpaceCollide (physSpace,0,&collisionCallback);
dWorldQuickStep(physWorld, stepSize);
dJointGroupEmpty(contactgroup);
}
void XplicitNgine::updateBody(PartInstance *partInstance, CoordinateFrame * cFrame)
{
if(partInstance->physBody != NULL)
{
Vector3 position = cFrame->translation;
dBodySetPosition(partInstance->physBody,
position[0],
position[1],
position[2]
);
Matrix3 g3dRot = cFrame->rotation;
float rotation [12] = { g3dRot[0][0], g3dRot[0][1], g3dRot[0][2], 0,
g3dRot[1][0], g3dRot[1][1], g3dRot[1][2], 0,
g3dRot[2][0], g3dRot[2][1], g3dRot[2][2], 0};
dBodySetRotation(partInstance->physBody, rotation);
}
}

View File

@@ -1,6 +1,10 @@
// TODO: Move toolbar buttons with resized window. // TODO: Move toolbar buttons with resized window.
#include "winver.h" #define _WIN32_WINNT 0x0400
#include "../../resource.h" #define _WIN32_WINDOWS 0x0400
#define WINVER 0x0400
#define _CRTBLD
#include "resource.h"
#include "Application.h" #include "Application.h"
#include "WindowFunctions.h" #include "WindowFunctions.h"
#include "ax.h" #include "ax.h"
@@ -144,10 +148,7 @@ 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
long double a = 1;
#ifndef IGNORE_CATCH
try{ try{
#endif #endif
hresult = OleInitialize(NULL); hresult = OleInitialize(NULL);
@@ -174,7 +175,7 @@ int main(int argc, char** argv) {
icc.dwSize = sizeof(icc); icc.dwSize = sizeof(icc);
icc.dwICC = ICC_WIN95_CLASSES/*|ICC_COOL_CLASSES|ICC_DATE_CLASSES| icc.dwICC = ICC_WIN95_CLASSES/*|ICC_COOL_CLASSES|ICC_DATE_CLASSES|
// ICC_PAGESCROLLER_CLASS|ICC_USEREX_CLASSES*/; ICC_PAGESCROLLER_CLASS|ICC_USEREX_CLASSES*/;
InitCommonControlsEx(&icc); InitCommonControlsEx(&icc);
AudioPlayer::init(); AudioPlayer::init();
@@ -215,12 +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 IGNORE_CATCH #ifndef _DEBUG
} }
catch(...) catch(...)
{ {
OnError(-1); OnError(-1);
} }
#endif #endif
return 0; return 0;
} }

View File

@@ -31,12 +31,13 @@
//DWM 1.9: Suppress POCC Warning "Argument x to 'sscanf' does not match the format string; //DWM 1.9: Suppress POCC Warning "Argument x to 'sscanf' does not match the format string;
// expected 'unsigned char *' but found 'unsigned long'" // expected 'unsigned char *' but found 'unsigned long'"
#include "winver.h"
#ifdef __POCC__ #ifdef __POCC__
#pragma warn(disable:2234) #pragma warn(disable:2234)
#endif #endif
#ifndef _WIN32_WINNT // Necessary for WM_MOUSEWHEEL support
#define _WIN32_WINNT 0x0400
#endif
// MSVC++ Support // MSVC++ Support
#ifndef _CRT_SECURE_NO_WARNINGS #ifndef _CRT_SECURE_NO_WARNINGS