migrating to the latest JUCE version
This commit is contained in:
@@ -50,7 +50,7 @@
|
||||
<MODULEPATH id="juce_audio_utils" path="../../modules"/>
|
||||
</MODULEPATHS>
|
||||
</XCODE_IPHONE>
|
||||
<VS2019 targetFolder="Builds/VisualStudio2019">
|
||||
<VS2022 targetFolder="Builds/VisualStudio2022">
|
||||
<CONFIGURATIONS>
|
||||
<CONFIGURATION isDebug="1" name="Debug"/>
|
||||
<CONFIGURATION isDebug="0" name="Release"/>
|
||||
@@ -68,7 +68,7 @@
|
||||
<MODULEPATH id="juce_audio_devices" path="../../modules"/>
|
||||
<MODULEPATH id="juce_audio_basics" path="../../modules"/>
|
||||
</MODULEPATHS>
|
||||
</VS2019>
|
||||
</VS2022>
|
||||
<LINUX_MAKE targetFolder="Builds/LinuxMakefile">
|
||||
<CONFIGURATIONS>
|
||||
<CONFIGURATION name="Debug" isDebug="1" targetName="AudioPerformanceTest"/>
|
||||
@@ -92,8 +92,8 @@
|
||||
androidCpp11="1" targetFolder="Builds/Android" extraCompilerFlags="-mfpu=neon -mfloat-abi=hard -ffast-math -funroll-loops --param max-unroll-times=8 -mhard-float -D_NDK_MATH_NO_SOFTFP=1 -DJUCE_DISABLE_ASSERTIONS=1"
|
||||
gradleToolchainVersion="3.6" androidMinimumSDK="23">
|
||||
<CONFIGURATIONS>
|
||||
<CONFIGURATION name="Debug" androidArchitectures="arm64-v8a" isDebug="1" targetName="AudioPerformanceTest"/>
|
||||
<CONFIGURATION name="Release" androidArchitectures="arm64-v8a" isDebug="0" optimisation="6"
|
||||
<CONFIGURATION name="Debug" isDebug="1" targetName="AudioPerformanceTest"/>
|
||||
<CONFIGURATION name="Release" isDebug="0" optimisation="6"
|
||||
targetName="AudioPerformanceTest"/>
|
||||
</CONFIGURATIONS>
|
||||
<MODULEPATHS>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,7 @@
|
||||
apply plugin: 'com.android.application'
|
||||
|
||||
android {
|
||||
compileSdkVersion 29
|
||||
compileSdkVersion 30
|
||||
externalNativeBuild {
|
||||
cmake {
|
||||
path "CMakeLists.txt"
|
||||
@@ -20,7 +20,7 @@ android {
|
||||
defaultConfig {
|
||||
applicationId "com.juce.audioperformancetest"
|
||||
minSdkVersion 23
|
||||
targetSdkVersion 29
|
||||
targetSdkVersion 30
|
||||
externalNativeBuild {
|
||||
cmake {
|
||||
arguments "-DANDROID_TOOLCHAIN=clang", "-DANDROID_PLATFORM=android-23", "-DANDROID_STL=c++_static", "-DANDROID_CPP_FEATURES=exceptions rtti", "-DANDROID_ARM_MODE=arm", "-DANDROID_ARM_NEON=TRUE", "-DCMAKE_CXX_STANDARD=14", "-DCMAKE_CXX_EXTENSIONS=OFF"
|
||||
@@ -47,7 +47,7 @@ android {
|
||||
productFlavors {
|
||||
debug_ {
|
||||
ndk {
|
||||
abiFilters "arm64-v8a"
|
||||
abiFilters "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
|
||||
}
|
||||
externalNativeBuild {
|
||||
cmake {
|
||||
@@ -58,9 +58,6 @@ android {
|
||||
dimension "default"
|
||||
}
|
||||
release_ {
|
||||
ndk {
|
||||
abiFilters "arm64-v8a"
|
||||
}
|
||||
externalNativeBuild {
|
||||
cmake {
|
||||
arguments "-DJUCE_BUILD_CONFIGURATION=RELEASE", "-DCMAKE_CXX_FLAGS_RELEASE=-Ofast", "-DCMAKE_C_FLAGS_RELEASE=-Ofast"
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0.0"
|
||||
package="com.juce.AudioPerformanceTest">
|
||||
package="com.juce.audioperformancetest">
|
||||
<supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:anyDensity="true"
|
||||
android:xlargeScreens="true"/>
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28"/>
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
|
||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
|
||||
<uses-permission android:name="android.permission.BLUETOOTH"/>
|
||||
@@ -13,7 +14,8 @@
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
<application android:label="@string/app_name" android:name="com.rmsl.juce.JuceApp" android:hardwareAccelerated="false">
|
||||
<activity android:name="com.rmsl.juce.JuceActivity" android:label="@string/app_name" android:configChanges="keyboardHidden|orientation|screenSize"
|
||||
android:screenOrientation="unspecified" android:launchMode="singleTask" android:hardwareAccelerated="true">
|
||||
android:screenOrientation="unspecified" android:launchMode="singleTask" android:hardwareAccelerated="true"
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
|
||||
@@ -11,6 +11,10 @@ endif
|
||||
# (this disables dependency generation if multiple architectures are set)
|
||||
DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD)
|
||||
|
||||
ifndef PKG_CONFIG
|
||||
PKG_CONFIG=pkg-config
|
||||
endif
|
||||
|
||||
ifndef STRIP
|
||||
STRIP=strip
|
||||
endif
|
||||
@@ -35,13 +39,13 @@ ifeq ($(CONFIG),Debug)
|
||||
TARGET_ARCH :=
|
||||
endif
|
||||
|
||||
JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DDEBUG=1" "-D_DEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x60102" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" $(shell pkg-config --cflags alsa freetype2 libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
|
||||
JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_RTAS=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0"
|
||||
JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DDEBUG=1" "-D_DEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x70002" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" $(shell $(PKG_CONFIG) --cflags alsa freetype2 libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
|
||||
JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0"
|
||||
JUCE_TARGET_APP := AudioPerformanceTest
|
||||
|
||||
JUCE_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 $(CFLAGS)
|
||||
JUCE_CXXFLAGS += $(JUCE_CFLAGS) -std=c++14 $(CXXFLAGS)
|
||||
JUCE_LDFLAGS += $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) $(shell pkg-config --libs alsa freetype2 libcurl) -fvisibility=hidden -lrt -ldl -lpthread $(LDFLAGS)
|
||||
JUCE_LDFLAGS += $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) $(shell $(PKG_CONFIG) --libs alsa freetype2 libcurl) -fvisibility=hidden -lrt -ldl -lpthread $(LDFLAGS)
|
||||
|
||||
CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR)
|
||||
endif
|
||||
@@ -56,13 +60,13 @@ ifeq ($(CONFIG),Release)
|
||||
TARGET_ARCH :=
|
||||
endif
|
||||
|
||||
JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x60102" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" $(shell pkg-config --cflags alsa freetype2 libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
|
||||
JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_RTAS=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0"
|
||||
JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x70002" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" $(shell $(PKG_CONFIG) --cflags alsa freetype2 libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
|
||||
JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0"
|
||||
JUCE_TARGET_APP := AudioPerformanceTest
|
||||
|
||||
JUCE_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -O3 $(CFLAGS)
|
||||
JUCE_CXXFLAGS += $(JUCE_CFLAGS) -std=c++14 $(CXXFLAGS)
|
||||
JUCE_LDFLAGS += $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) $(shell pkg-config --libs alsa freetype2 libcurl) -fvisibility=hidden -lrt -ldl -lpthread $(LDFLAGS)
|
||||
JUCE_LDFLAGS += $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) $(shell $(PKG_CONFIG) --libs alsa freetype2 libcurl) -fvisibility=hidden -lrt -ldl -lpthread $(LDFLAGS)
|
||||
|
||||
CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR)
|
||||
endif
|
||||
@@ -73,6 +77,8 @@ OBJECTS_APP := \
|
||||
$(JUCE_OBJDIR)/include_juce_audio_devices_63111d02.o \
|
||||
$(JUCE_OBJDIR)/include_juce_audio_formats_15f82001.o \
|
||||
$(JUCE_OBJDIR)/include_juce_audio_processors_10c03666.o \
|
||||
$(JUCE_OBJDIR)/include_juce_audio_processors_ara_2a4c6ef7.o \
|
||||
$(JUCE_OBJDIR)/include_juce_audio_processors_lv2_libs_12bdca08.o \
|
||||
$(JUCE_OBJDIR)/include_juce_audio_utils_9f9fb2d6.o \
|
||||
$(JUCE_OBJDIR)/include_juce_core_f26d17db.o \
|
||||
$(JUCE_OBJDIR)/include_juce_data_structures_7471b1e3.o \
|
||||
@@ -86,8 +92,8 @@ OBJECTS_APP := \
|
||||
all : $(JUCE_OUTDIR)/$(JUCE_TARGET_APP)
|
||||
|
||||
$(JUCE_OUTDIR)/$(JUCE_TARGET_APP) : $(OBJECTS_APP) $(RESOURCES)
|
||||
@command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; }
|
||||
@pkg-config --print-errors alsa freetype2 libcurl
|
||||
@command -v $(PKG_CONFIG) >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; }
|
||||
@$(PKG_CONFIG) --print-errors alsa freetype2 libcurl
|
||||
@echo Linking "AudioPerformanceTest - App"
|
||||
-$(V_AT)mkdir -p $(JUCE_BINDIR)
|
||||
-$(V_AT)mkdir -p $(JUCE_LIBDIR)
|
||||
@@ -119,6 +125,16 @@ $(JUCE_OBJDIR)/include_juce_audio_processors_10c03666.o: ../../JuceLibraryCode/i
|
||||
@echo "Compiling include_juce_audio_processors.cpp"
|
||||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/include_juce_audio_processors_ara_2a4c6ef7.o: ../../JuceLibraryCode/include_juce_audio_processors_ara.cpp
|
||||
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
|
||||
@echo "Compiling include_juce_audio_processors_ara.cpp"
|
||||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/include_juce_audio_processors_lv2_libs_12bdca08.o: ../../JuceLibraryCode/include_juce_audio_processors_lv2_libs.cpp
|
||||
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
|
||||
@echo "Compiling include_juce_audio_processors_lv2_libs.cpp"
|
||||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/include_juce_audio_utils_9f9fb2d6.o: ../../JuceLibraryCode/include_juce_audio_utils.cpp
|
||||
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
|
||||
@echo "Compiling include_juce_audio_utils.cpp"
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
01C9BC9A0A0F54B693CDA31A /* include_juce_audio_devices.mm */ = {isa = PBXBuildFile; fileRef = 322D3066DCD98A8D0542236A; };
|
||||
0319B40AD2FD96007FFA928B /* Cocoa.framework */ = {isa = PBXBuildFile; fileRef = 453777CEB7099A5D61901D13; };
|
||||
07451DA87757F9EF80E31BE8 /* Main.cpp */ = {isa = PBXBuildFile; fileRef = 0564535EEA7E4462926EA0C9; };
|
||||
2028993D80CFDE5A0ABA4A52 /* include_juce_audio_processors_lv2_libs.cpp */ = {isa = PBXBuildFile; fileRef = 932123993B04597421D5C406; };
|
||||
2BAED5B831BB736E77A718AE /* include_juce_audio_basics.mm */ = {isa = PBXBuildFile; fileRef = 89B3243200BAA6BD72905DBB; };
|
||||
30BE30F31D1AAED9FC893AA5 /* AudioToolbox.framework */ = {isa = PBXBuildFile; fileRef = 18C1CCE5684F9FA0478F27AD; };
|
||||
3825E8984D8F6AA00DDC6BAC /* DiscRecording.framework */ = {isa = PBXBuildFile; fileRef = EE758AD71415EB31BD3E82F3; };
|
||||
@@ -20,10 +21,10 @@
|
||||
65FC2E13B65977FED63BDDE3 /* include_juce_graphics.mm */ = {isa = PBXBuildFile; fileRef = 7E951216B6138C76653B1460; };
|
||||
699954AF666E644C7B688381 /* include_juce_gui_basics.mm */ = {isa = PBXBuildFile; fileRef = 0BC3C6A4F4FC1DD30DD8E17C; };
|
||||
71863EE98034AB7C3CBCAA81 /* CoreAudioKit.framework */ = {isa = PBXBuildFile; fileRef = 24D90B40648CC05A9B1AA55B; };
|
||||
7BB1EEA0BB910DD93C1DBAD5 /* include_juce_audio_processors_ara.cpp */ = {isa = PBXBuildFile; fileRef = CBD298606CB4777F17CFCC2F; };
|
||||
7E870C094BAE67D7EB149F1C /* include_juce_events.mm */ = {isa = PBXBuildFile; fileRef = 248FAA119A4FC24C522165EF; };
|
||||
8A0F71A4EEC7FE694352DD94 /* Accelerate.framework */ = {isa = PBXBuildFile; fileRef = 9EADBF913B7A454B6BE93A4A; };
|
||||
9031C69145EE085B60904363 /* IOKit.framework */ = {isa = PBXBuildFile; fileRef = 43775DC3D9F7917846EA5327; };
|
||||
9B19A6655FCC8086134C8656 /* Carbon.framework */ = {isa = PBXBuildFile; fileRef = 1DA5C6A474916745AFEC6DA5; };
|
||||
9D47995A33BBA693ED435B31 /* include_juce_gui_extra.mm */ = {isa = PBXBuildFile; fileRef = B06AE97C86D27E7FEBCB4631; };
|
||||
C7B090C29D8DE4D2503204B1 /* include_juce_audio_utils.mm */ = {isa = PBXBuildFile; fileRef = BAFDA8DE51E7A69E477439EB; };
|
||||
CC782AABFA20787BABBCED90 /* Foundation.framework */ = {isa = PBXBuildFile; fileRef = E1BB9D521BF6C055F5B88628; };
|
||||
@@ -42,7 +43,6 @@
|
||||
12C680C68A15B9A590264B18 /* CoreMIDI.framework */ /* CoreMIDI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; };
|
||||
18C1CCE5684F9FA0478F27AD /* AudioToolbox.framework */ /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
|
||||
18E39207A0F5F9B8BC7EE94F /* include_juce_audio_processors.mm */ /* include_juce_audio_processors.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_audio_processors.mm; path = ../../JuceLibraryCode/include_juce_audio_processors.mm; sourceTree = SOURCE_ROOT; };
|
||||
1DA5C6A474916745AFEC6DA5 /* Carbon.framework */ /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; };
|
||||
24425FFB0BCC7E54CADAA013 /* include_juce_core.mm */ /* include_juce_core.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_core.mm; path = ../../JuceLibraryCode/include_juce_core.mm; sourceTree = SOURCE_ROOT; };
|
||||
248FAA119A4FC24C522165EF /* include_juce_events.mm */ /* include_juce_events.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_events.mm; path = ../../JuceLibraryCode/include_juce_events.mm; sourceTree = SOURCE_ROOT; };
|
||||
24D90B40648CC05A9B1AA55B /* CoreAudioKit.framework */ /* CoreAudioKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudioKit.framework; path = System/Library/Frameworks/CoreAudioKit.framework; sourceTree = SDKROOT; };
|
||||
@@ -60,6 +60,7 @@
|
||||
81017699F857F5BBFCA6E055 /* juce_events */ /* juce_events */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_events; path = ../../../../modules/juce_events; sourceTree = SOURCE_ROOT; };
|
||||
89B3243200BAA6BD72905DBB /* include_juce_audio_basics.mm */ /* include_juce_audio_basics.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_audio_basics.mm; path = ../../JuceLibraryCode/include_juce_audio_basics.mm; sourceTree = SOURCE_ROOT; };
|
||||
920FF34D4A00A5AD433EE5F4 /* juce_audio_basics */ /* juce_audio_basics */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_audio_basics; path = ../../../../modules/juce_audio_basics; sourceTree = SOURCE_ROOT; };
|
||||
932123993B04597421D5C406 /* include_juce_audio_processors_lv2_libs.cpp */ /* include_juce_audio_processors_lv2_libs.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = include_juce_audio_processors_lv2_libs.cpp; path = ../../JuceLibraryCode/include_juce_audio_processors_lv2_libs.cpp; sourceTree = SOURCE_ROOT; };
|
||||
9516A19EE58DED8326DD0306 /* Info-App.plist */ /* Info-App.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "Info-App.plist"; path = "Info-App.plist"; sourceTree = SOURCE_ROOT; };
|
||||
9E05B63699A307598B66F829 /* include_juce_audio_formats.mm */ /* include_juce_audio_formats.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_audio_formats.mm; path = ../../JuceLibraryCode/include_juce_audio_formats.mm; sourceTree = SOURCE_ROOT; };
|
||||
9EADBF913B7A454B6BE93A4A /* Accelerate.framework */ /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; };
|
||||
@@ -70,6 +71,7 @@
|
||||
BAFDA8DE51E7A69E477439EB /* include_juce_audio_utils.mm */ /* include_juce_audio_utils.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_audio_utils.mm; path = ../../JuceLibraryCode/include_juce_audio_utils.mm; sourceTree = SOURCE_ROOT; };
|
||||
C8EE61FDD1F06817A014B881 /* juce_graphics */ /* juce_graphics */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_graphics; path = ../../../../modules/juce_graphics; sourceTree = SOURCE_ROOT; };
|
||||
CBBC98B7CD350A07F5145FB4 /* juce_audio_utils */ /* juce_audio_utils */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_audio_utils; path = ../../../../modules/juce_audio_utils; sourceTree = SOURCE_ROOT; };
|
||||
CBD298606CB4777F17CFCC2F /* include_juce_audio_processors_ara.cpp */ /* include_juce_audio_processors_ara.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = include_juce_audio_processors_ara.cpp; path = ../../JuceLibraryCode/include_juce_audio_processors_ara.cpp; sourceTree = SOURCE_ROOT; };
|
||||
D03C9A859FB4DBA8268D7FBA /* juce_audio_processors */ /* juce_audio_processors */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_audio_processors; path = ../../../../modules/juce_audio_processors; sourceTree = SOURCE_ROOT; };
|
||||
E1BB9D521BF6C055F5B88628 /* Foundation.framework */ /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
|
||||
E575FE2AD2F19FA6AEB536C2 /* juce_core */ /* juce_core */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_core; path = ../../../../modules/juce_core; sourceTree = SOURCE_ROOT; };
|
||||
@@ -85,7 +87,6 @@
|
||||
files = (
|
||||
8A0F71A4EEC7FE694352DD94,
|
||||
30BE30F31D1AAED9FC893AA5,
|
||||
9B19A6655FCC8086134C8656,
|
||||
0319B40AD2FD96007FFA928B,
|
||||
5AFD011031C266431687C922,
|
||||
71863EE98034AB7C3CBCAA81,
|
||||
@@ -106,7 +107,6 @@
|
||||
children = (
|
||||
9EADBF913B7A454B6BE93A4A,
|
||||
18C1CCE5684F9FA0478F27AD,
|
||||
1DA5C6A474916745AFEC6DA5,
|
||||
453777CEB7099A5D61901D13,
|
||||
9F28F179EF6B90EB9F4DBEE9,
|
||||
24D90B40648CC05A9B1AA55B,
|
||||
@@ -127,6 +127,8 @@
|
||||
322D3066DCD98A8D0542236A,
|
||||
9E05B63699A307598B66F829,
|
||||
18E39207A0F5F9B8BC7EE94F,
|
||||
CBD298606CB4777F17CFCC2F,
|
||||
932123993B04597421D5C406,
|
||||
BAFDA8DE51E7A69E477439EB,
|
||||
24425FFB0BCC7E54CADAA013,
|
||||
EDD11E2CC0B18196ADA0C87B,
|
||||
@@ -230,7 +232,7 @@
|
||||
9CE2A44801B5B4BE7A9667DA = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastUpgradeCheck = 1300;
|
||||
LastUpgradeCheck = 1340;
|
||||
ORGANIZATIONNAME = "Raw Material Software Limited";
|
||||
TargetAttributes = {
|
||||
E9FD2656EC625C9C8DE30219 = {
|
||||
@@ -294,6 +296,8 @@
|
||||
01C9BC9A0A0F54B693CDA31A,
|
||||
48ADBEF873A610909D727C97,
|
||||
D145903EE5DBFD1BD98423F3,
|
||||
7BB1EEA0BB910DD93C1DBAD5,
|
||||
2028993D80CFDE5A0ABA4A52,
|
||||
C7B090C29D8DE4D2503204B1,
|
||||
FFAF94080FF4A9995B33151E,
|
||||
D2CECF93178A1738DA02CA4A,
|
||||
@@ -317,6 +321,7 @@
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
CONFIGURATION_BUILD_DIR = "$(PROJECT_DIR)/build/$(CONFIGURATION)";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
EXCLUDED_ARCHS = "";
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
@@ -324,7 +329,7 @@
|
||||
"DEBUG=1",
|
||||
"JUCE_DISPLAY_SPLASH_SCREEN=0",
|
||||
"JUCE_USE_DARK_SPLASH_SCREEN=1",
|
||||
"JUCE_PROJUCER_VERSION=0x60102",
|
||||
"JUCE_PROJUCER_VERSION=0x70002",
|
||||
"JUCE_MODULE_AVAILABLE_juce_audio_basics=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_audio_devices=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_audio_formats=1",
|
||||
@@ -345,10 +350,10 @@
|
||||
"JucePlugin_Build_VST3=0",
|
||||
"JucePlugin_Build_AU=0",
|
||||
"JucePlugin_Build_AUv3=0",
|
||||
"JucePlugin_Build_RTAS=0",
|
||||
"JucePlugin_Build_AAX=0",
|
||||
"JucePlugin_Build_Standalone=0",
|
||||
"JucePlugin_Build_Unity=0",
|
||||
"JucePlugin_Build_LV2=0",
|
||||
);
|
||||
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
|
||||
HEADER_SEARCH_PATHS = (
|
||||
@@ -361,6 +366,7 @@
|
||||
INSTALL_PATH = "$(HOME)/Applications";
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.11;
|
||||
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules";
|
||||
OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.juce.AudioPerformanceTest;
|
||||
PRODUCT_NAME = "AudioPerformanceTest";
|
||||
USE_HEADERMAP = NO;
|
||||
@@ -378,6 +384,7 @@
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
CONFIGURATION_BUILD_DIR = "$(PROJECT_DIR)/build/$(CONFIGURATION)";
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
EXCLUDED_ARCHS = "";
|
||||
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
|
||||
GCC_OPTIMIZATION_LEVEL = 3;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
@@ -385,7 +392,7 @@
|
||||
"NDEBUG=1",
|
||||
"JUCE_DISPLAY_SPLASH_SCREEN=0",
|
||||
"JUCE_USE_DARK_SPLASH_SCREEN=1",
|
||||
"JUCE_PROJUCER_VERSION=0x60102",
|
||||
"JUCE_PROJUCER_VERSION=0x70002",
|
||||
"JUCE_MODULE_AVAILABLE_juce_audio_basics=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_audio_devices=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_audio_formats=1",
|
||||
@@ -406,10 +413,10 @@
|
||||
"JucePlugin_Build_VST3=0",
|
||||
"JucePlugin_Build_AU=0",
|
||||
"JucePlugin_Build_AUv3=0",
|
||||
"JucePlugin_Build_RTAS=0",
|
||||
"JucePlugin_Build_AAX=0",
|
||||
"JucePlugin_Build_Standalone=0",
|
||||
"JucePlugin_Build_Unity=0",
|
||||
"JucePlugin_Build_LV2=0",
|
||||
);
|
||||
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
|
||||
HEADER_SEARCH_PATHS = (
|
||||
@@ -423,6 +430,7 @@
|
||||
LLVM_LTO = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.11;
|
||||
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules";
|
||||
OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.juce.AudioPerformanceTest;
|
||||
PRODUCT_NAME = "AudioPerformanceTest";
|
||||
USE_HEADERMAP = NO;
|
||||
|
||||
@@ -1,20 +1,21 @@
|
||||
Microsoft Visual Studio Solution File, Format Version 11.00
|
||||
# Visual Studio 2019
|
||||
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AudioPerformanceTest - App", "AudioPerformanceTest_App.vcxproj", "{78607AE9-F43B-3DDB-0FE1-D745771AF527}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|x64 = Debug|x64
|
||||
Release|x64 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{78607AE9-F43B-3DDB-0FE1-D745771AF527}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{78607AE9-F43B-3DDB-0FE1-D745771AF527}.Debug|x64.Build.0 = Debug|x64
|
||||
{78607AE9-F43B-3DDB-0FE1-D745771AF527}.Release|x64.ActiveCfg = Release|x64
|
||||
{78607AE9-F43B-3DDB-0FE1-D745771AF527}.Release|x64.Build.0 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 11.00
|
||||
# Visual Studio Version 17
|
||||
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AudioPerformanceTest - App", "AudioPerformanceTest_App.vcxproj", "{78607AE9-F43B-3DDB-0FE1-D745771AF527}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|x64 = Debug|x64
|
||||
Release|x64 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{78607AE9-F43B-3DDB-0FE1-D745771AF527}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{78607AE9-F43B-3DDB-0FE1-D745771AF527}.Debug|x64.Build.0 = Debug|x64
|
||||
{78607AE9-F43B-3DDB-0FE1-D745771AF527}.Release|x64.ActiveCfg = Release|x64
|
||||
{78607AE9-F43B-3DDB-0FE1-D745771AF527}.Release|x64.Build.0 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,33 +1,33 @@
|
||||
#pragma code_page(65001)
|
||||
|
||||
#ifdef JUCE_USER_DEFINED_RC_FILE
|
||||
#include JUCE_USER_DEFINED_RC_FILE
|
||||
#else
|
||||
|
||||
#undef WIN32_LEAN_AND_MEAN
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 1,0,0,0
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904E4"
|
||||
BEGIN
|
||||
VALUE "CompanyName", "Raw Material Software Limited\0"
|
||||
VALUE "LegalCopyright", "Raw Material Software Limited\0"
|
||||
VALUE "FileDescription", "AudioPerformanceTest\0"
|
||||
VALUE "FileVersion", "1.0.0\0"
|
||||
VALUE "ProductName", "AudioPerformanceTest\0"
|
||||
VALUE "ProductVersion", "1.0.0\0"
|
||||
END
|
||||
END
|
||||
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x409, 1252
|
||||
END
|
||||
END
|
||||
|
||||
#endif
|
||||
#pragma code_page(65001)
|
||||
|
||||
#ifdef JUCE_USER_DEFINED_RC_FILE
|
||||
#include JUCE_USER_DEFINED_RC_FILE
|
||||
#else
|
||||
|
||||
#undef WIN32_LEAN_AND_MEAN
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 1,0,0,0
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904E4"
|
||||
BEGIN
|
||||
VALUE "CompanyName", "Raw Material Software Limited\0"
|
||||
VALUE "LegalCopyright", "Raw Material Software Limited\0"
|
||||
VALUE "FileDescription", "AudioPerformanceTest\0"
|
||||
VALUE "FileVersion", "1.0.0\0"
|
||||
VALUE "ProductName", "AudioPerformanceTest\0"
|
||||
VALUE "ProductVersion", "1.0.0\0"
|
||||
END
|
||||
END
|
||||
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x409, 1252
|
||||
END
|
||||
END
|
||||
|
||||
#endif
|
||||
@@ -10,6 +10,7 @@
|
||||
01C9BC9A0A0F54B693CDA31A /* include_juce_audio_devices.mm */ = {isa = PBXBuildFile; fileRef = 322D3066DCD98A8D0542236A; };
|
||||
06735FD618809C6823B18CFA /* CoreServices.framework */ = {isa = PBXBuildFile; fileRef = 5622D2E05ACA8C4395206C56; };
|
||||
07451DA87757F9EF80E31BE8 /* Main.cpp */ = {isa = PBXBuildFile; fileRef = 0564535EEA7E4462926EA0C9; };
|
||||
2028993D80CFDE5A0ABA4A52 /* include_juce_audio_processors_lv2_libs.cpp */ = {isa = PBXBuildFile; fileRef = 932123993B04597421D5C406; };
|
||||
2BAED5B831BB736E77A718AE /* include_juce_audio_basics.mm */ = {isa = PBXBuildFile; fileRef = 89B3243200BAA6BD72905DBB; };
|
||||
30BE30F31D1AAED9FC893AA5 /* AudioToolbox.framework */ = {isa = PBXBuildFile; fileRef = 18C1CCE5684F9FA0478F27AD; };
|
||||
3C0CA1E555411B8B5B8F8FF0 /* LaunchScreen.storyboard */ = {isa = PBXBuildFile; fileRef = C8D9488DE9A88E4FBF28D417; };
|
||||
@@ -20,6 +21,7 @@
|
||||
65FC2E13B65977FED63BDDE3 /* include_juce_graphics.mm */ = {isa = PBXBuildFile; fileRef = 7E951216B6138C76653B1460; };
|
||||
699954AF666E644C7B688381 /* include_juce_gui_basics.mm */ = {isa = PBXBuildFile; fileRef = 0BC3C6A4F4FC1DD30DD8E17C; };
|
||||
71863EE98034AB7C3CBCAA81 /* CoreAudioKit.framework */ = {isa = PBXBuildFile; fileRef = 24D90B40648CC05A9B1AA55B; };
|
||||
7BB1EEA0BB910DD93C1DBAD5 /* include_juce_audio_processors_ara.cpp */ = {isa = PBXBuildFile; fileRef = CBD298606CB4777F17CFCC2F; };
|
||||
7E870C094BAE67D7EB149F1C /* include_juce_events.mm */ = {isa = PBXBuildFile; fileRef = 248FAA119A4FC24C522165EF; };
|
||||
893A86EF99F57B81286E58A1 /* CoreImage.framework */ = {isa = PBXBuildFile; fileRef = F40C1815F7E7E4FBAF3A3091; };
|
||||
8A0F71A4EEC7FE694352DD94 /* Accelerate.framework */ = {isa = PBXBuildFile; fileRef = 9EADBF913B7A454B6BE93A4A; };
|
||||
@@ -65,6 +67,7 @@
|
||||
8693552B5FA53C2003A66302 /* Images.xcassets */ /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = AudioPerformanceTest/Images.xcassets; sourceTree = SOURCE_ROOT; };
|
||||
89B3243200BAA6BD72905DBB /* include_juce_audio_basics.mm */ /* include_juce_audio_basics.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_audio_basics.mm; path = ../../JuceLibraryCode/include_juce_audio_basics.mm; sourceTree = SOURCE_ROOT; };
|
||||
920FF34D4A00A5AD433EE5F4 /* juce_audio_basics */ /* juce_audio_basics */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_audio_basics; path = ../../../../modules/juce_audio_basics; sourceTree = SOURCE_ROOT; };
|
||||
932123993B04597421D5C406 /* include_juce_audio_processors_lv2_libs.cpp */ /* include_juce_audio_processors_lv2_libs.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = include_juce_audio_processors_lv2_libs.cpp; path = ../../JuceLibraryCode/include_juce_audio_processors_lv2_libs.cpp; sourceTree = SOURCE_ROOT; };
|
||||
9516A19EE58DED8326DD0306 /* Info-App.plist */ /* Info-App.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "Info-App.plist"; path = "Info-App.plist"; sourceTree = SOURCE_ROOT; };
|
||||
9E05B63699A307598B66F829 /* include_juce_audio_formats.mm */ /* include_juce_audio_formats.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_audio_formats.mm; path = ../../JuceLibraryCode/include_juce_audio_formats.mm; sourceTree = SOURCE_ROOT; };
|
||||
9EADBF913B7A454B6BE93A4A /* Accelerate.framework */ /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; };
|
||||
@@ -77,6 +80,7 @@
|
||||
C8D9488DE9A88E4FBF28D417 /* LaunchScreen.storyboard */ /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = LaunchScreen.storyboard; sourceTree = SOURCE_ROOT; };
|
||||
C8EE61FDD1F06817A014B881 /* juce_graphics */ /* juce_graphics */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_graphics; path = ../../../../modules/juce_graphics; sourceTree = SOURCE_ROOT; };
|
||||
CBBC98B7CD350A07F5145FB4 /* juce_audio_utils */ /* juce_audio_utils */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_audio_utils; path = ../../../../modules/juce_audio_utils; sourceTree = SOURCE_ROOT; };
|
||||
CBD298606CB4777F17CFCC2F /* include_juce_audio_processors_ara.cpp */ /* include_juce_audio_processors_ara.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = include_juce_audio_processors_ara.cpp; path = ../../JuceLibraryCode/include_juce_audio_processors_ara.cpp; sourceTree = SOURCE_ROOT; };
|
||||
D03C9A859FB4DBA8268D7FBA /* juce_audio_processors */ /* juce_audio_processors */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_audio_processors; path = ../../../../modules/juce_audio_processors; sourceTree = SOURCE_ROOT; };
|
||||
E1BB9D521BF6C055F5B88628 /* Foundation.framework */ /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
|
||||
E575FE2AD2F19FA6AEB536C2 /* juce_core */ /* juce_core */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_core; path = ../../../../modules/juce_core; sourceTree = SOURCE_ROOT; };
|
||||
@@ -137,6 +141,8 @@
|
||||
322D3066DCD98A8D0542236A,
|
||||
9E05B63699A307598B66F829,
|
||||
18E39207A0F5F9B8BC7EE94F,
|
||||
CBD298606CB4777F17CFCC2F,
|
||||
932123993B04597421D5C406,
|
||||
BAFDA8DE51E7A69E477439EB,
|
||||
24425FFB0BCC7E54CADAA013,
|
||||
EDD11E2CC0B18196ADA0C87B,
|
||||
@@ -241,7 +247,7 @@
|
||||
9CE2A44801B5B4BE7A9667DA = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastUpgradeCheck = 1300;
|
||||
LastUpgradeCheck = 1340;
|
||||
ORGANIZATIONNAME = "Raw Material Software Limited";
|
||||
TargetAttributes = {
|
||||
E9FD2656EC625C9C8DE30219 = {
|
||||
@@ -306,6 +312,8 @@
|
||||
01C9BC9A0A0F54B693CDA31A,
|
||||
48ADBEF873A610909D727C97,
|
||||
D145903EE5DBFD1BD98423F3,
|
||||
7BB1EEA0BB910DD93C1DBAD5,
|
||||
2028993D80CFDE5A0ABA4A52,
|
||||
C7B090C29D8DE4D2503204B1,
|
||||
FFAF94080FF4A9995B33151E,
|
||||
D2CECF93178A1738DA02CA4A,
|
||||
@@ -338,7 +346,7 @@
|
||||
"JUCE_CONTENT_SHARING=1",
|
||||
"JUCE_DISPLAY_SPLASH_SCREEN=0",
|
||||
"JUCE_USE_DARK_SPLASH_SCREEN=1",
|
||||
"JUCE_PROJUCER_VERSION=0x60102",
|
||||
"JUCE_PROJUCER_VERSION=0x70002",
|
||||
"JUCE_MODULE_AVAILABLE_juce_audio_basics=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_audio_devices=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_audio_formats=1",
|
||||
@@ -359,10 +367,10 @@
|
||||
"JucePlugin_Build_VST3=0",
|
||||
"JucePlugin_Build_AU=0",
|
||||
"JucePlugin_Build_AUv3=0",
|
||||
"JucePlugin_Build_RTAS=0",
|
||||
"JucePlugin_Build_AAX=0",
|
||||
"JucePlugin_Build_Standalone=0",
|
||||
"JucePlugin_Build_Unity=0",
|
||||
"JucePlugin_Build_LV2=0",
|
||||
);
|
||||
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
|
||||
HEADER_SEARCH_PATHS = (
|
||||
@@ -374,6 +382,7 @@
|
||||
INFOPLIST_PREPROCESS = NO;
|
||||
INSTALL_PATH = "$(HOME)/Applications";
|
||||
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules";
|
||||
OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit -weak_framework UserNotifications";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.juce.AudioPerformanceTest;
|
||||
PRODUCT_NAME = "AudioPerformanceTest";
|
||||
USE_HEADERMAP = NO;
|
||||
@@ -399,7 +408,7 @@
|
||||
"JUCE_CONTENT_SHARING=1",
|
||||
"JUCE_DISPLAY_SPLASH_SCREEN=0",
|
||||
"JUCE_USE_DARK_SPLASH_SCREEN=1",
|
||||
"JUCE_PROJUCER_VERSION=0x60102",
|
||||
"JUCE_PROJUCER_VERSION=0x70002",
|
||||
"JUCE_MODULE_AVAILABLE_juce_audio_basics=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_audio_devices=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_audio_formats=1",
|
||||
@@ -420,10 +429,10 @@
|
||||
"JucePlugin_Build_VST3=0",
|
||||
"JucePlugin_Build_AU=0",
|
||||
"JucePlugin_Build_AUv3=0",
|
||||
"JucePlugin_Build_RTAS=0",
|
||||
"JucePlugin_Build_AAX=0",
|
||||
"JucePlugin_Build_Standalone=0",
|
||||
"JucePlugin_Build_Unity=0",
|
||||
"JucePlugin_Build_LV2=0",
|
||||
);
|
||||
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
|
||||
HEADER_SEARCH_PATHS = (
|
||||
@@ -436,6 +445,7 @@
|
||||
INSTALL_PATH = "$(HOME)/Applications";
|
||||
LLVM_LTO = YES;
|
||||
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules";
|
||||
OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit -weak_framework UserNotifications";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.juce.AudioPerformanceTest;
|
||||
PRODUCT_NAME = "AudioPerformanceTest";
|
||||
USE_HEADERMAP = NO;
|
||||
|
||||
@@ -42,18 +42,6 @@
|
||||
"filename": "Icon-Spotlight-40@3x.png",
|
||||
"scale": "3x"
|
||||
},
|
||||
{
|
||||
"idiom": "iphone",
|
||||
"size": "57x57",
|
||||
"filename": "Icon.png",
|
||||
"scale": "1x"
|
||||
},
|
||||
{
|
||||
"idiom": "iphone",
|
||||
"size": "57x57",
|
||||
"filename": "Icon@2x.png",
|
||||
"scale": "2x"
|
||||
},
|
||||
{
|
||||
"idiom": "iphone",
|
||||
"size": "60x60",
|
||||
@@ -102,30 +90,6 @@
|
||||
"filename": "Icon-Spotlight-40@2x-1.png",
|
||||
"scale": "2x"
|
||||
},
|
||||
{
|
||||
"idiom": "ipad",
|
||||
"size": "50x50",
|
||||
"filename": "Icon-Small-50.png",
|
||||
"scale": "1x"
|
||||
},
|
||||
{
|
||||
"idiom": "ipad",
|
||||
"size": "50x50",
|
||||
"filename": "Icon-Small-50@2x.png",
|
||||
"scale": "2x"
|
||||
},
|
||||
{
|
||||
"idiom": "ipad",
|
||||
"size": "72x72",
|
||||
"filename": "Icon-72.png",
|
||||
"scale": "1x"
|
||||
},
|
||||
{
|
||||
"idiom": "ipad",
|
||||
"size": "72x72",
|
||||
"filename": "Icon-72@2x.png",
|
||||
"scale": "2x"
|
||||
},
|
||||
{
|
||||
"idiom": "ipad",
|
||||
"size": "76x76",
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
# ==============================================================================
|
||||
#
|
||||
# This file is part of the JUCE library.
|
||||
# Copyright (c) 2020 - Raw Material Software Limited
|
||||
# Copyright (c) 2022 - Raw Material Software Limited
|
||||
#
|
||||
# JUCE is an open source library subject to commercial or open-source
|
||||
# licensing.
|
||||
#
|
||||
# By using JUCE, you agree to the terms of both the JUCE 6 End-User License
|
||||
# Agreement and JUCE Privacy Policy (both effective as of the 16th June 2020).
|
||||
# By using JUCE, you agree to the terms of both the JUCE 7 End-User License
|
||||
# Agreement and JUCE Privacy Policy.
|
||||
#
|
||||
# End User License Agreement: www.juce.com/juce-6-licence
|
||||
# End User License Agreement: www.juce.com/juce-7-licence
|
||||
# Privacy Policy: www.juce.com/juce-privacy-policy
|
||||
#
|
||||
# Or: You may also use this code under the terms of the GPL v3 (see
|
||||
|
||||
@@ -1,52 +1,52 @@
|
||||
/*
|
||||
|
||||
IMPORTANT! This file is auto-generated each time you save your
|
||||
project - if you alter its contents, your changes may be overwritten!
|
||||
|
||||
This is the header file that your files should include in order to get all the
|
||||
JUCE library headers. You should avoid including the JUCE headers directly in
|
||||
your own source files, because that wouldn't pick up the correct configuration
|
||||
options for your app.
|
||||
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
|
||||
#include <juce_audio_basics/juce_audio_basics.h>
|
||||
#include <juce_audio_devices/juce_audio_devices.h>
|
||||
#include <juce_audio_formats/juce_audio_formats.h>
|
||||
#include <juce_audio_processors/juce_audio_processors.h>
|
||||
#include <juce_audio_utils/juce_audio_utils.h>
|
||||
#include <juce_core/juce_core.h>
|
||||
#include <juce_data_structures/juce_data_structures.h>
|
||||
#include <juce_events/juce_events.h>
|
||||
#include <juce_graphics/juce_graphics.h>
|
||||
#include <juce_gui_basics/juce_gui_basics.h>
|
||||
#include <juce_gui_extra/juce_gui_extra.h>
|
||||
|
||||
|
||||
#if defined (JUCE_PROJUCER_VERSION) && JUCE_PROJUCER_VERSION < JUCE_VERSION
|
||||
/** If you've hit this error then the version of the Projucer that was used to generate this project is
|
||||
older than the version of the JUCE modules being included. To fix this error, re-save your project
|
||||
using the latest version of the Projucer or, if you aren't using the Projucer to manage your project,
|
||||
remove the JUCE_PROJUCER_VERSION define.
|
||||
*/
|
||||
#error "This project was last saved using an outdated version of the Projucer! Re-save this project with the latest version to fix this error."
|
||||
#endif
|
||||
|
||||
#if ! DONT_SET_USING_JUCE_NAMESPACE
|
||||
// If your code uses a lot of JUCE classes, then this will obviously save you
|
||||
// a lot of typing, but can be disabled by setting DONT_SET_USING_JUCE_NAMESPACE.
|
||||
using namespace juce;
|
||||
#endif
|
||||
|
||||
#if ! JUCE_DONT_DECLARE_PROJECTINFO
|
||||
namespace ProjectInfo
|
||||
{
|
||||
const char* const projectName = "AudioPerformanceTest";
|
||||
const char* const companyName = "Raw Material Software Limited";
|
||||
const char* const versionString = "1.0.0";
|
||||
const int versionNumber = 0x10000;
|
||||
}
|
||||
#endif
|
||||
/*
|
||||
|
||||
IMPORTANT! This file is auto-generated each time you save your
|
||||
project - if you alter its contents, your changes may be overwritten!
|
||||
|
||||
This is the header file that your files should include in order to get all the
|
||||
JUCE library headers. You should avoid including the JUCE headers directly in
|
||||
your own source files, because that wouldn't pick up the correct configuration
|
||||
options for your app.
|
||||
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
|
||||
#include <juce_audio_basics/juce_audio_basics.h>
|
||||
#include <juce_audio_devices/juce_audio_devices.h>
|
||||
#include <juce_audio_formats/juce_audio_formats.h>
|
||||
#include <juce_audio_processors/juce_audio_processors.h>
|
||||
#include <juce_audio_utils/juce_audio_utils.h>
|
||||
#include <juce_core/juce_core.h>
|
||||
#include <juce_data_structures/juce_data_structures.h>
|
||||
#include <juce_events/juce_events.h>
|
||||
#include <juce_graphics/juce_graphics.h>
|
||||
#include <juce_gui_basics/juce_gui_basics.h>
|
||||
#include <juce_gui_extra/juce_gui_extra.h>
|
||||
|
||||
|
||||
#if defined (JUCE_PROJUCER_VERSION) && JUCE_PROJUCER_VERSION < JUCE_VERSION
|
||||
/** If you've hit this error then the version of the Projucer that was used to generate this project is
|
||||
older than the version of the JUCE modules being included. To fix this error, re-save your project
|
||||
using the latest version of the Projucer or, if you aren't using the Projucer to manage your project,
|
||||
remove the JUCE_PROJUCER_VERSION define.
|
||||
*/
|
||||
#error "This project was last saved using an outdated version of the Projucer! Re-save this project with the latest version to fix this error."
|
||||
#endif
|
||||
|
||||
#if ! DONT_SET_USING_JUCE_NAMESPACE
|
||||
// If your code uses a lot of JUCE classes, then this will obviously save you
|
||||
// a lot of typing, but can be disabled by setting DONT_SET_USING_JUCE_NAMESPACE.
|
||||
using namespace juce;
|
||||
#endif
|
||||
|
||||
#if ! JUCE_DONT_DECLARE_PROJECTINFO
|
||||
namespace ProjectInfo
|
||||
{
|
||||
const char* const projectName = "AudioPerformanceTest";
|
||||
const char* const companyName = "Raw Material Software Limited";
|
||||
const char* const versionString = "1.0.0";
|
||||
const int versionNumber = 0x10000;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
|
||||
IMPORTANT! This file is auto-generated each time you save your
|
||||
project - if you alter its contents, your changes may be overwritten!
|
||||
|
||||
*/
|
||||
|
||||
#include <juce_audio_basics/juce_audio_basics.cpp>
|
||||
/*
|
||||
|
||||
IMPORTANT! This file is auto-generated each time you save your
|
||||
project - if you alter its contents, your changes may be overwritten!
|
||||
|
||||
*/
|
||||
|
||||
#include <juce_audio_basics/juce_audio_basics.cpp>
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
|
||||
IMPORTANT! This file is auto-generated each time you save your
|
||||
project - if you alter its contents, your changes may be overwritten!
|
||||
|
||||
*/
|
||||
|
||||
#include <juce_audio_devices/juce_audio_devices.cpp>
|
||||
/*
|
||||
|
||||
IMPORTANT! This file is auto-generated each time you save your
|
||||
project - if you alter its contents, your changes may be overwritten!
|
||||
|
||||
*/
|
||||
|
||||
#include <juce_audio_devices/juce_audio_devices.cpp>
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
|
||||
IMPORTANT! This file is auto-generated each time you save your
|
||||
project - if you alter its contents, your changes may be overwritten!
|
||||
|
||||
*/
|
||||
|
||||
#include <juce_audio_formats/juce_audio_formats.cpp>
|
||||
/*
|
||||
|
||||
IMPORTANT! This file is auto-generated each time you save your
|
||||
project - if you alter its contents, your changes may be overwritten!
|
||||
|
||||
*/
|
||||
|
||||
#include <juce_audio_formats/juce_audio_formats.cpp>
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
|
||||
IMPORTANT! This file is auto-generated each time you save your
|
||||
project - if you alter its contents, your changes may be overwritten!
|
||||
|
||||
*/
|
||||
|
||||
#include <juce_audio_processors/juce_audio_processors.cpp>
|
||||
/*
|
||||
|
||||
IMPORTANT! This file is auto-generated each time you save your
|
||||
project - if you alter its contents, your changes may be overwritten!
|
||||
|
||||
*/
|
||||
|
||||
#include <juce_audio_processors/juce_audio_processors.cpp>
|
||||
|
||||
8
deps/juce/extras/AudioPerformanceTest/JuceLibraryCode/include_juce_audio_processors_ara.cpp
vendored
Normal file
8
deps/juce/extras/AudioPerformanceTest/JuceLibraryCode/include_juce_audio_processors_ara.cpp
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
/*
|
||||
|
||||
IMPORTANT! This file is auto-generated each time you save your
|
||||
project - if you alter its contents, your changes may be overwritten!
|
||||
|
||||
*/
|
||||
|
||||
#include <juce_audio_processors/juce_audio_processors_ara.cpp>
|
||||
@@ -0,0 +1,8 @@
|
||||
/*
|
||||
|
||||
IMPORTANT! This file is auto-generated each time you save your
|
||||
project - if you alter its contents, your changes may be overwritten!
|
||||
|
||||
*/
|
||||
|
||||
#include <juce_audio_processors/juce_audio_processors_lv2_libs.cpp>
|
||||
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
|
||||
IMPORTANT! This file is auto-generated each time you save your
|
||||
project - if you alter its contents, your changes may be overwritten!
|
||||
|
||||
*/
|
||||
|
||||
#include <juce_audio_utils/juce_audio_utils.cpp>
|
||||
/*
|
||||
|
||||
IMPORTANT! This file is auto-generated each time you save your
|
||||
project - if you alter its contents, your changes may be overwritten!
|
||||
|
||||
*/
|
||||
|
||||
#include <juce_audio_utils/juce_audio_utils.cpp>
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
|
||||
IMPORTANT! This file is auto-generated each time you save your
|
||||
project - if you alter its contents, your changes may be overwritten!
|
||||
|
||||
*/
|
||||
|
||||
#include <juce_core/juce_core.cpp>
|
||||
/*
|
||||
|
||||
IMPORTANT! This file is auto-generated each time you save your
|
||||
project - if you alter its contents, your changes may be overwritten!
|
||||
|
||||
*/
|
||||
|
||||
#include <juce_core/juce_core.cpp>
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
|
||||
IMPORTANT! This file is auto-generated each time you save your
|
||||
project - if you alter its contents, your changes may be overwritten!
|
||||
|
||||
*/
|
||||
|
||||
#include <juce_data_structures/juce_data_structures.cpp>
|
||||
/*
|
||||
|
||||
IMPORTANT! This file is auto-generated each time you save your
|
||||
project - if you alter its contents, your changes may be overwritten!
|
||||
|
||||
*/
|
||||
|
||||
#include <juce_data_structures/juce_data_structures.cpp>
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
|
||||
IMPORTANT! This file is auto-generated each time you save your
|
||||
project - if you alter its contents, your changes may be overwritten!
|
||||
|
||||
*/
|
||||
|
||||
#include <juce_events/juce_events.cpp>
|
||||
/*
|
||||
|
||||
IMPORTANT! This file is auto-generated each time you save your
|
||||
project - if you alter its contents, your changes may be overwritten!
|
||||
|
||||
*/
|
||||
|
||||
#include <juce_events/juce_events.cpp>
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
|
||||
IMPORTANT! This file is auto-generated each time you save your
|
||||
project - if you alter its contents, your changes may be overwritten!
|
||||
|
||||
*/
|
||||
|
||||
#include <juce_graphics/juce_graphics.cpp>
|
||||
/*
|
||||
|
||||
IMPORTANT! This file is auto-generated each time you save your
|
||||
project - if you alter its contents, your changes may be overwritten!
|
||||
|
||||
*/
|
||||
|
||||
#include <juce_graphics/juce_graphics.cpp>
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
|
||||
IMPORTANT! This file is auto-generated each time you save your
|
||||
project - if you alter its contents, your changes may be overwritten!
|
||||
|
||||
*/
|
||||
|
||||
#include <juce_gui_basics/juce_gui_basics.cpp>
|
||||
/*
|
||||
|
||||
IMPORTANT! This file is auto-generated each time you save your
|
||||
project - if you alter its contents, your changes may be overwritten!
|
||||
|
||||
*/
|
||||
|
||||
#include <juce_gui_basics/juce_gui_basics.cpp>
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
|
||||
IMPORTANT! This file is auto-generated each time you save your
|
||||
project - if you alter its contents, your changes may be overwritten!
|
||||
|
||||
*/
|
||||
|
||||
#include <juce_gui_extra/juce_gui_extra.cpp>
|
||||
/*
|
||||
|
||||
IMPORTANT! This file is auto-generated each time you save your
|
||||
project - if you alter its contents, your changes may be overwritten!
|
||||
|
||||
*/
|
||||
|
||||
#include <juce_gui_extra/juce_gui_extra.cpp>
|
||||
|
||||
@@ -1,91 +1,91 @@
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2020 - Raw Material Software Limited
|
||||
|
||||
JUCE is an open source library subject to commercial or open-source
|
||||
licensing.
|
||||
|
||||
By using JUCE, you agree to the terms of both the JUCE 6 End-User License
|
||||
Agreement and JUCE Privacy Policy (both effective as of the 16th June 2020).
|
||||
|
||||
End User License Agreement: www.juce.com/juce-6-licence
|
||||
Privacy Policy: www.juce.com/juce-privacy-policy
|
||||
|
||||
Or: You may also use this code under the terms of the GPL v3 (see
|
||||
www.gnu.org/licenses).
|
||||
|
||||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
|
||||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
|
||||
DISCLAIMED.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#include <JuceHeader.h>
|
||||
#include "MainComponent.h"
|
||||
|
||||
//==============================================================================
|
||||
class AudioPerformanceTestApplication : public JUCEApplication
|
||||
{
|
||||
public:
|
||||
//==============================================================================
|
||||
AudioPerformanceTestApplication() {}
|
||||
|
||||
const String getApplicationName() override { return ProjectInfo::projectName; }
|
||||
const String getApplicationVersion() override { return ProjectInfo::versionString; }
|
||||
bool moreThanOneInstanceAllowed() override { return true; }
|
||||
|
||||
//==============================================================================
|
||||
void initialise (const String&) override
|
||||
{
|
||||
mainWindow.reset (new MainWindow (getApplicationName()));
|
||||
}
|
||||
|
||||
void shutdown() override
|
||||
{
|
||||
mainWindow = nullptr; // (deletes our window)
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void systemRequestedQuit() override
|
||||
{
|
||||
quit();
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
class MainWindow : public DocumentWindow
|
||||
{
|
||||
public:
|
||||
explicit MainWindow (String name)
|
||||
: DocumentWindow (name, Colours::lightgrey, DocumentWindow::allButtons)
|
||||
{
|
||||
setUsingNativeTitleBar (true);
|
||||
setContentOwned (createMainContentComponent(), true);
|
||||
setResizable (false, false);
|
||||
|
||||
#if JUCE_IOS || JUCE_ANDROID
|
||||
setFullScreen (true);
|
||||
#else
|
||||
centreWithSize (getWidth(), getHeight());
|
||||
#endif
|
||||
|
||||
setVisible (true);
|
||||
}
|
||||
|
||||
void closeButtonPressed() override
|
||||
{
|
||||
JUCEApplication::getInstance()->systemRequestedQuit();
|
||||
}
|
||||
|
||||
private:
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainWindow)
|
||||
};
|
||||
|
||||
private:
|
||||
std::unique_ptr<MainWindow> mainWindow;
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
START_JUCE_APPLICATION (AudioPerformanceTestApplication)
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
|
||||
JUCE is an open source library subject to commercial or open-source
|
||||
licensing.
|
||||
|
||||
By using JUCE, you agree to the terms of both the JUCE 7 End-User License
|
||||
Agreement and JUCE Privacy Policy.
|
||||
|
||||
End User License Agreement: www.juce.com/juce-7-licence
|
||||
Privacy Policy: www.juce.com/juce-privacy-policy
|
||||
|
||||
Or: You may also use this code under the terms of the GPL v3 (see
|
||||
www.gnu.org/licenses).
|
||||
|
||||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
|
||||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
|
||||
DISCLAIMED.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#include <JuceHeader.h>
|
||||
#include "MainComponent.h"
|
||||
|
||||
//==============================================================================
|
||||
class AudioPerformanceTestApplication : public JUCEApplication
|
||||
{
|
||||
public:
|
||||
//==============================================================================
|
||||
AudioPerformanceTestApplication() {}
|
||||
|
||||
const String getApplicationName() override { return ProjectInfo::projectName; }
|
||||
const String getApplicationVersion() override { return ProjectInfo::versionString; }
|
||||
bool moreThanOneInstanceAllowed() override { return true; }
|
||||
|
||||
//==============================================================================
|
||||
void initialise (const String&) override
|
||||
{
|
||||
mainWindow.reset (new MainWindow (getApplicationName()));
|
||||
}
|
||||
|
||||
void shutdown() override
|
||||
{
|
||||
mainWindow = nullptr; // (deletes our window)
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void systemRequestedQuit() override
|
||||
{
|
||||
quit();
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
class MainWindow : public DocumentWindow
|
||||
{
|
||||
public:
|
||||
explicit MainWindow (String name)
|
||||
: DocumentWindow (name, Colours::lightgrey, DocumentWindow::allButtons)
|
||||
{
|
||||
setUsingNativeTitleBar (true);
|
||||
setContentOwned (createMainContentComponent(), true);
|
||||
setResizable (false, false);
|
||||
|
||||
#if JUCE_IOS || JUCE_ANDROID
|
||||
setFullScreen (true);
|
||||
#else
|
||||
centreWithSize (getWidth(), getHeight());
|
||||
#endif
|
||||
|
||||
setVisible (true);
|
||||
}
|
||||
|
||||
void closeButtonPressed() override
|
||||
{
|
||||
JUCEApplication::getInstance()->systemRequestedQuit();
|
||||
}
|
||||
|
||||
private:
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainWindow)
|
||||
};
|
||||
|
||||
private:
|
||||
std::unique_ptr<MainWindow> mainWindow;
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
START_JUCE_APPLICATION (AudioPerformanceTestApplication)
|
||||
|
||||
@@ -1,277 +1,277 @@
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2020 - Raw Material Software Limited
|
||||
|
||||
JUCE is an open source library subject to commercial or open-source
|
||||
licensing.
|
||||
|
||||
By using JUCE, you agree to the terms of both the JUCE 6 End-User License
|
||||
Agreement and JUCE Privacy Policy (both effective as of the 16th June 2020).
|
||||
|
||||
End User License Agreement: www.juce.com/juce-6-licence
|
||||
Privacy Policy: www.juce.com/juce-privacy-policy
|
||||
|
||||
Or: You may also use this code under the terms of the GPL v3 (see
|
||||
www.gnu.org/licenses).
|
||||
|
||||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
|
||||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
|
||||
DISCLAIMED.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <JuceHeader.h>
|
||||
#include <mutex>
|
||||
|
||||
//==============================================================================
|
||||
class MainContentComponent : public AudioAppComponent,
|
||||
private Timer
|
||||
{
|
||||
public:
|
||||
//==============================================================================
|
||||
MainContentComponent()
|
||||
{
|
||||
setSize (400, 400);
|
||||
setAudioChannels (0, 2);
|
||||
|
||||
initGui();
|
||||
Desktop::getInstance().setScreenSaverEnabled (false);
|
||||
startTimer (1000);
|
||||
}
|
||||
|
||||
~MainContentComponent() override
|
||||
{
|
||||
shutdownAudio();
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void prepareToPlay (int bufferSize, double sampleRate) override
|
||||
{
|
||||
currentSampleRate = sampleRate;
|
||||
allocateBuffers (static_cast<size_t> (bufferSize));
|
||||
printHeader();
|
||||
}
|
||||
|
||||
void releaseResources() override
|
||||
{
|
||||
a.clear();
|
||||
b.clear();
|
||||
c.clear();
|
||||
currentSampleRate = 0.0;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void getNextAudioBlock (const AudioSourceChannelInfo& bufferToFill) override
|
||||
{
|
||||
const double startTimeMs = getPreciseTimeMs();
|
||||
|
||||
AudioBuffer<float>& outputAudio = *bufferToFill.buffer;
|
||||
std::size_t bufferSize = (std::size_t) outputAudio.getNumSamples();
|
||||
initialiseBuffers (bufferToFill, bufferSize);
|
||||
|
||||
for (int ch = 0; ch < outputAudio.getNumChannels(); ++ch)
|
||||
crunchSomeNumbers (outputAudio.getWritePointer (ch), bufferSize, numLoopIterationsPerCallback);
|
||||
|
||||
std::lock_guard<std::mutex> lock (metricMutex);
|
||||
|
||||
double endTimeMs = getPreciseTimeMs();
|
||||
addCallbackMetrics (startTimeMs, endTimeMs);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void addCallbackMetrics (double startTimeMs, double endTimeMs)
|
||||
{
|
||||
double runtimeMs = endTimeMs - startTimeMs;
|
||||
audioCallbackRuntimeMs.addValue (runtimeMs);
|
||||
|
||||
if (runtimeMs > getPhysicalTimeLimitMs())
|
||||
numCallbacksOverPhysicalTimeLimit++;
|
||||
|
||||
if (lastCallbackStartTimeMs > 0.0)
|
||||
{
|
||||
double gapMs = startTimeMs - lastCallbackStartTimeMs;
|
||||
audioCallbackGapMs.addValue (gapMs);
|
||||
|
||||
if (gapMs > 1.5 * getPhysicalTimeLimitMs())
|
||||
numLateCallbacks++;
|
||||
}
|
||||
|
||||
lastCallbackStartTimeMs = startTimeMs;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void paint (Graphics& g) override
|
||||
{
|
||||
g.fillAll (Colours::black);
|
||||
g.setFont (Font (16.0f));
|
||||
g.setColour (Colours::white);
|
||||
g.drawText ("loop iterations / audio callback",
|
||||
getLocalBounds().withY (loopIterationsSlider.getHeight()), Justification::centred, true);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void resized() override
|
||||
{
|
||||
loopIterationsSlider.setBounds (getLocalBounds().withSizeKeepingCentre (proportionOfWidth (0.9f), 50));
|
||||
}
|
||||
|
||||
private:
|
||||
//==============================================================================
|
||||
void initGui()
|
||||
{
|
||||
loopIterationsSlider.setSliderStyle (Slider::LinearBar);
|
||||
loopIterationsSlider.setRange (0, 30000, 250);
|
||||
loopIterationsSlider.setValue (15000);
|
||||
loopIterationsSlider.setColour (Slider::thumbColourId, Colours::white);
|
||||
loopIterationsSlider.setColour (Slider::textBoxTextColourId, Colours::grey);
|
||||
updateNumLoopIterationsPerCallback();
|
||||
addAndMakeVisible (loopIterationsSlider);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void allocateBuffers (std::size_t bufferSize)
|
||||
{
|
||||
a.resize (bufferSize);
|
||||
b.resize (bufferSize);
|
||||
c.resize (bufferSize);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void initialiseBuffers (const AudioSourceChannelInfo& bufferToFill, std::size_t bufferSize)
|
||||
{
|
||||
if (bufferSize != a.size())
|
||||
{
|
||||
jassertfalse;
|
||||
Logger::writeToLog ("WARNING: Unexpected buffer size received."
|
||||
"expected: " + String (a.size()) +
|
||||
", actual: " + String (bufferSize));
|
||||
|
||||
if (bufferSize > a.size())
|
||||
Logger::writeToLog ("WARNING: Need to allocate larger buffers on audio thread!");
|
||||
|
||||
allocateBuffers (bufferSize);
|
||||
}
|
||||
|
||||
bufferToFill.clearActiveBufferRegion();
|
||||
std::fill (a.begin(), a.end(), 0.09f);
|
||||
std::fill (b.begin(), b.end(), 0.1f );
|
||||
std::fill (c.begin(), c.end(), 0.11f);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void crunchSomeNumbers (float* outBuffer, std::size_t bufferSize, int numIterations) noexcept
|
||||
{
|
||||
jassert (a.size() == bufferSize && b.size() == bufferSize && c.size() == bufferSize);
|
||||
|
||||
for (int i = 0; i < numIterations; ++i)
|
||||
{
|
||||
FloatVectorOperations::multiply (c.data(), a.data(), b.data(), (int) bufferSize);
|
||||
FloatVectorOperations::addWithMultiply (outBuffer, b.data(), c.data(), (int) bufferSize);
|
||||
}
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void timerCallback() override
|
||||
{
|
||||
printAndResetPerformanceMetrics();
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void printHeader() const
|
||||
{
|
||||
Logger::writeToLog ("buffer size = " + String (a.size()) + " samples");
|
||||
Logger::writeToLog ("sample rate = " + String (currentSampleRate) + " Hz");
|
||||
Logger::writeToLog ("physical time limit / callback = " + String (getPhysicalTimeLimitMs() )+ " ms");
|
||||
Logger::writeToLog ("");
|
||||
Logger::writeToLog (" | callback exec time / physLimit | callback time gap / physLimit | callback counters ");
|
||||
Logger::writeToLog ("numLoops | avg min max stddev | avg min max stddev | called late >limit ");
|
||||
Logger::writeToLog ("----- | ----- ----- ----- ----- | ----- ----- ----- ----- | --- --- --- ");
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void printAndResetPerformanceMetrics()
|
||||
{
|
||||
std::unique_lock<std::mutex> lock (metricMutex);
|
||||
|
||||
auto runtimeMetric = audioCallbackRuntimeMs;
|
||||
auto gapMetric = audioCallbackGapMs;
|
||||
auto late = numLateCallbacks;
|
||||
auto overLimit = numCallbacksOverPhysicalTimeLimit;
|
||||
|
||||
resetPerformanceMetrics();
|
||||
updateNumLoopIterationsPerCallback();
|
||||
|
||||
lock.unlock();
|
||||
|
||||
Logger::writeToLog (String (numLoopIterationsPerCallback).paddedRight (' ', 8) + " | "
|
||||
+ getPercentFormattedMetricString (runtimeMetric) + " | "
|
||||
+ getPercentFormattedMetricString (gapMetric) + " | "
|
||||
+ String (runtimeMetric.getCount()).paddedRight (' ', 8)
|
||||
+ String (late).paddedRight (' ', 8)
|
||||
+ String (overLimit).paddedRight (' ', 8) + " | ");
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
String getPercentFormattedMetricString (const StatisticsAccumulator<double> metric) const
|
||||
{
|
||||
auto physTimeLimit = getPhysicalTimeLimitMs();
|
||||
|
||||
return (String (100.0 * metric.getAverage() / physTimeLimit, 1) + "%").paddedRight (' ', 8)
|
||||
+ (String (100.0 * metric.getMinValue() / physTimeLimit, 1) + "%").paddedRight (' ', 8)
|
||||
+ (String (100.0 * metric.getMaxValue() / physTimeLimit, 1) + "%").paddedRight (' ', 8)
|
||||
+ String (metric.getStandardDeviation(), 3).paddedRight (' ', 8);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void resetPerformanceMetrics()
|
||||
{
|
||||
audioCallbackRuntimeMs.reset();
|
||||
audioCallbackGapMs.reset();
|
||||
numLateCallbacks = 0;
|
||||
numCallbacksOverPhysicalTimeLimit = 0;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void updateNumLoopIterationsPerCallback()
|
||||
{
|
||||
numLoopIterationsPerCallback = (int) loopIterationsSlider.getValue();
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
static double getPreciseTimeMs() noexcept
|
||||
{
|
||||
return 1000.0 * (double) Time::getHighResolutionTicks() / (double) Time::getHighResolutionTicksPerSecond();
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
double getPhysicalTimeLimitMs() const noexcept
|
||||
{
|
||||
return 1000.0 * (double) a.size() / currentSampleRate;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
std::vector<float> a, b, c; // must always be of size == current bufferSize
|
||||
double currentSampleRate = 0.0;
|
||||
|
||||
StatisticsAccumulator<double> audioCallbackRuntimeMs;
|
||||
StatisticsAccumulator<double> audioCallbackGapMs;
|
||||
double lastCallbackStartTimeMs = 0.0;
|
||||
int numLateCallbacks = 0;
|
||||
int numCallbacksOverPhysicalTimeLimit = 0;
|
||||
int numLoopIterationsPerCallback;
|
||||
|
||||
Slider loopIterationsSlider;
|
||||
std::mutex metricMutex;
|
||||
|
||||
//==============================================================================
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainContentComponent)
|
||||
};
|
||||
|
||||
|
||||
// (This function is called by the app startup code to create our main component)
|
||||
Component* createMainContentComponent() { return new MainContentComponent(); }
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
|
||||
JUCE is an open source library subject to commercial or open-source
|
||||
licensing.
|
||||
|
||||
By using JUCE, you agree to the terms of both the JUCE 7 End-User License
|
||||
Agreement and JUCE Privacy Policy.
|
||||
|
||||
End User License Agreement: www.juce.com/juce-7-licence
|
||||
Privacy Policy: www.juce.com/juce-privacy-policy
|
||||
|
||||
Or: You may also use this code under the terms of the GPL v3 (see
|
||||
www.gnu.org/licenses).
|
||||
|
||||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
|
||||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
|
||||
DISCLAIMED.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <JuceHeader.h>
|
||||
#include <mutex>
|
||||
|
||||
//==============================================================================
|
||||
class MainContentComponent : public AudioAppComponent,
|
||||
private Timer
|
||||
{
|
||||
public:
|
||||
//==============================================================================
|
||||
MainContentComponent()
|
||||
{
|
||||
setSize (400, 400);
|
||||
setAudioChannels (0, 2);
|
||||
|
||||
initGui();
|
||||
Desktop::getInstance().setScreenSaverEnabled (false);
|
||||
startTimer (1000);
|
||||
}
|
||||
|
||||
~MainContentComponent() override
|
||||
{
|
||||
shutdownAudio();
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void prepareToPlay (int bufferSize, double sampleRate) override
|
||||
{
|
||||
currentSampleRate = sampleRate;
|
||||
allocateBuffers (static_cast<size_t> (bufferSize));
|
||||
printHeader();
|
||||
}
|
||||
|
||||
void releaseResources() override
|
||||
{
|
||||
a.clear();
|
||||
b.clear();
|
||||
c.clear();
|
||||
currentSampleRate = 0.0;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void getNextAudioBlock (const AudioSourceChannelInfo& bufferToFill) override
|
||||
{
|
||||
const double startTimeMs = getPreciseTimeMs();
|
||||
|
||||
AudioBuffer<float>& outputAudio = *bufferToFill.buffer;
|
||||
std::size_t bufferSize = (std::size_t) outputAudio.getNumSamples();
|
||||
initialiseBuffers (bufferToFill, bufferSize);
|
||||
|
||||
for (int ch = 0; ch < outputAudio.getNumChannels(); ++ch)
|
||||
crunchSomeNumbers (outputAudio.getWritePointer (ch), bufferSize, numLoopIterationsPerCallback);
|
||||
|
||||
std::lock_guard<std::mutex> lock (metricMutex);
|
||||
|
||||
double endTimeMs = getPreciseTimeMs();
|
||||
addCallbackMetrics (startTimeMs, endTimeMs);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void addCallbackMetrics (double startTimeMs, double endTimeMs)
|
||||
{
|
||||
double runtimeMs = endTimeMs - startTimeMs;
|
||||
audioCallbackRuntimeMs.addValue (runtimeMs);
|
||||
|
||||
if (runtimeMs > getPhysicalTimeLimitMs())
|
||||
numCallbacksOverPhysicalTimeLimit++;
|
||||
|
||||
if (lastCallbackStartTimeMs > 0.0)
|
||||
{
|
||||
double gapMs = startTimeMs - lastCallbackStartTimeMs;
|
||||
audioCallbackGapMs.addValue (gapMs);
|
||||
|
||||
if (gapMs > 1.5 * getPhysicalTimeLimitMs())
|
||||
numLateCallbacks++;
|
||||
}
|
||||
|
||||
lastCallbackStartTimeMs = startTimeMs;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void paint (Graphics& g) override
|
||||
{
|
||||
g.fillAll (Colours::black);
|
||||
g.setFont (Font (16.0f));
|
||||
g.setColour (Colours::white);
|
||||
g.drawText ("loop iterations / audio callback",
|
||||
getLocalBounds().withY (loopIterationsSlider.getHeight()), Justification::centred, true);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void resized() override
|
||||
{
|
||||
loopIterationsSlider.setBounds (getLocalBounds().withSizeKeepingCentre (proportionOfWidth (0.9f), 50));
|
||||
}
|
||||
|
||||
private:
|
||||
//==============================================================================
|
||||
void initGui()
|
||||
{
|
||||
loopIterationsSlider.setSliderStyle (Slider::LinearBar);
|
||||
loopIterationsSlider.setRange (0, 30000, 250);
|
||||
loopIterationsSlider.setValue (15000);
|
||||
loopIterationsSlider.setColour (Slider::thumbColourId, Colours::white);
|
||||
loopIterationsSlider.setColour (Slider::textBoxTextColourId, Colours::grey);
|
||||
updateNumLoopIterationsPerCallback();
|
||||
addAndMakeVisible (loopIterationsSlider);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void allocateBuffers (std::size_t bufferSize)
|
||||
{
|
||||
a.resize (bufferSize);
|
||||
b.resize (bufferSize);
|
||||
c.resize (bufferSize);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void initialiseBuffers (const AudioSourceChannelInfo& bufferToFill, std::size_t bufferSize)
|
||||
{
|
||||
if (bufferSize != a.size())
|
||||
{
|
||||
jassertfalse;
|
||||
Logger::writeToLog ("WARNING: Unexpected buffer size received."
|
||||
"expected: " + String (a.size()) +
|
||||
", actual: " + String (bufferSize));
|
||||
|
||||
if (bufferSize > a.size())
|
||||
Logger::writeToLog ("WARNING: Need to allocate larger buffers on audio thread!");
|
||||
|
||||
allocateBuffers (bufferSize);
|
||||
}
|
||||
|
||||
bufferToFill.clearActiveBufferRegion();
|
||||
std::fill (a.begin(), a.end(), 0.09f);
|
||||
std::fill (b.begin(), b.end(), 0.1f );
|
||||
std::fill (c.begin(), c.end(), 0.11f);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void crunchSomeNumbers (float* outBuffer, std::size_t bufferSize, int numIterations) noexcept
|
||||
{
|
||||
jassert (a.size() == bufferSize && b.size() == bufferSize && c.size() == bufferSize);
|
||||
|
||||
for (int i = 0; i < numIterations; ++i)
|
||||
{
|
||||
FloatVectorOperations::multiply (c.data(), a.data(), b.data(), (int) bufferSize);
|
||||
FloatVectorOperations::addWithMultiply (outBuffer, b.data(), c.data(), (int) bufferSize);
|
||||
}
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void timerCallback() override
|
||||
{
|
||||
printAndResetPerformanceMetrics();
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void printHeader() const
|
||||
{
|
||||
Logger::writeToLog ("buffer size = " + String (a.size()) + " samples");
|
||||
Logger::writeToLog ("sample rate = " + String (currentSampleRate) + " Hz");
|
||||
Logger::writeToLog ("physical time limit / callback = " + String (getPhysicalTimeLimitMs() )+ " ms");
|
||||
Logger::writeToLog ("");
|
||||
Logger::writeToLog (" | callback exec time / physLimit | callback time gap / physLimit | callback counters ");
|
||||
Logger::writeToLog ("numLoops | avg min max stddev | avg min max stddev | called late >limit ");
|
||||
Logger::writeToLog ("----- | ----- ----- ----- ----- | ----- ----- ----- ----- | --- --- --- ");
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void printAndResetPerformanceMetrics()
|
||||
{
|
||||
std::unique_lock<std::mutex> lock (metricMutex);
|
||||
|
||||
auto runtimeMetric = audioCallbackRuntimeMs;
|
||||
auto gapMetric = audioCallbackGapMs;
|
||||
auto late = numLateCallbacks;
|
||||
auto overLimit = numCallbacksOverPhysicalTimeLimit;
|
||||
|
||||
resetPerformanceMetrics();
|
||||
updateNumLoopIterationsPerCallback();
|
||||
|
||||
lock.unlock();
|
||||
|
||||
Logger::writeToLog (String (numLoopIterationsPerCallback).paddedRight (' ', 8) + " | "
|
||||
+ getPercentFormattedMetricString (runtimeMetric) + " | "
|
||||
+ getPercentFormattedMetricString (gapMetric) + " | "
|
||||
+ String (runtimeMetric.getCount()).paddedRight (' ', 8)
|
||||
+ String (late).paddedRight (' ', 8)
|
||||
+ String (overLimit).paddedRight (' ', 8) + " | ");
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
String getPercentFormattedMetricString (const StatisticsAccumulator<double> metric) const
|
||||
{
|
||||
auto physTimeLimit = getPhysicalTimeLimitMs();
|
||||
|
||||
return (String (100.0 * metric.getAverage() / physTimeLimit, 1) + "%").paddedRight (' ', 8)
|
||||
+ (String (100.0 * metric.getMinValue() / physTimeLimit, 1) + "%").paddedRight (' ', 8)
|
||||
+ (String (100.0 * metric.getMaxValue() / physTimeLimit, 1) + "%").paddedRight (' ', 8)
|
||||
+ String (metric.getStandardDeviation(), 3).paddedRight (' ', 8);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void resetPerformanceMetrics()
|
||||
{
|
||||
audioCallbackRuntimeMs.reset();
|
||||
audioCallbackGapMs.reset();
|
||||
numLateCallbacks = 0;
|
||||
numCallbacksOverPhysicalTimeLimit = 0;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void updateNumLoopIterationsPerCallback()
|
||||
{
|
||||
numLoopIterationsPerCallback = (int) loopIterationsSlider.getValue();
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
static double getPreciseTimeMs() noexcept
|
||||
{
|
||||
return 1000.0 * (double) Time::getHighResolutionTicks() / (double) Time::getHighResolutionTicksPerSecond();
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
double getPhysicalTimeLimitMs() const noexcept
|
||||
{
|
||||
return 1000.0 * (double) a.size() / currentSampleRate;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
std::vector<float> a, b, c; // must always be of size == current bufferSize
|
||||
double currentSampleRate = 0.0;
|
||||
|
||||
StatisticsAccumulator<double> audioCallbackRuntimeMs;
|
||||
StatisticsAccumulator<double> audioCallbackGapMs;
|
||||
double lastCallbackStartTimeMs = 0.0;
|
||||
int numLateCallbacks = 0;
|
||||
int numCallbacksOverPhysicalTimeLimit = 0;
|
||||
int numLoopIterationsPerCallback;
|
||||
|
||||
Slider loopIterationsSlider;
|
||||
std::mutex metricMutex;
|
||||
|
||||
//==============================================================================
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainContentComponent)
|
||||
};
|
||||
|
||||
|
||||
// (This function is called by the app startup code to create our main component)
|
||||
Component* createMainContentComponent() { return new MainContentComponent(); }
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
reportAppUsage="0" companyCopyright="Raw Material Software Limited"
|
||||
useAppConfig="0" addUsingNamespaceToJuceHeader="1" jucerFormatVersion="1">
|
||||
<EXPORTFORMATS>
|
||||
<XCODE_MAC targetFolder="Builds/MacOSX" rtasFolder="~/SDKs/PT_80_SDK" objCExtraSuffix="M73TRi"
|
||||
smallIcon="c97aUr" bigIcon="c97aUr" microphonePermissionNeeded="1"
|
||||
sendAppleEventsPermissionNeeded="1" sendAppleEventsPermissionText="This is required for some third-party plug-ins to function correctly."
|
||||
<XCODE_MAC targetFolder="Builds/MacOSX" smallIcon="c97aUr" bigIcon="c97aUr"
|
||||
microphonePermissionNeeded="1" sendAppleEventsPermissionNeeded="1"
|
||||
sendAppleEventsPermissionText="This is required for some third-party plug-ins to function correctly."
|
||||
customXcodeResourceFolders="../../examples/Assets" applicationCategory="public.app-category.developer-tools">
|
||||
<CONFIGURATIONS>
|
||||
<CONFIGURATION name="Debug" isDebug="1" targetName="AudioPluginHost" recommendedWarnings="LLVM"/>
|
||||
@@ -54,29 +54,6 @@
|
||||
<MODULEPATH id="juce_dsp" path="../../modules"/>
|
||||
</MODULEPATHS>
|
||||
</LINUX_MAKE>
|
||||
<VS2015 targetFolder="Builds/VisualStudio2015" smallIcon="c97aUr" bigIcon="c97aUr"
|
||||
extraCompilerFlags="/w44265 /w44062 /bigobj">
|
||||
<CONFIGURATIONS>
|
||||
<CONFIGURATION name="Debug" isDebug="1" targetName="AudioPluginHost"/>
|
||||
<CONFIGURATION name="Release" isDebug="0" targetName="AudioPluginHost" debugInformationFormat="ProgramDatabase"/>
|
||||
</CONFIGURATIONS>
|
||||
<MODULEPATHS>
|
||||
<MODULEPATH id="juce_opengl" path="../../modules"/>
|
||||
<MODULEPATH id="juce_gui_extra" path="../../modules"/>
|
||||
<MODULEPATH id="juce_gui_basics" path="../../modules"/>
|
||||
<MODULEPATH id="juce_graphics" path="../../modules"/>
|
||||
<MODULEPATH id="juce_events" path="../../modules"/>
|
||||
<MODULEPATH id="juce_data_structures" path="../../modules"/>
|
||||
<MODULEPATH id="juce_cryptography" path="../../modules"/>
|
||||
<MODULEPATH id="juce_core" path="../../modules"/>
|
||||
<MODULEPATH id="juce_audio_utils" path="../../modules"/>
|
||||
<MODULEPATH id="juce_audio_processors" path="../../modules"/>
|
||||
<MODULEPATH id="juce_audio_formats" path="../../modules"/>
|
||||
<MODULEPATH id="juce_audio_devices" path="../../modules"/>
|
||||
<MODULEPATH id="juce_audio_basics" path="../../modules"/>
|
||||
<MODULEPATH id="juce_dsp" path="../../modules"/>
|
||||
</MODULEPATHS>
|
||||
</VS2015>
|
||||
<VS2017 targetFolder="Builds/VisualStudio2017" smallIcon="c97aUr" bigIcon="c97aUr"
|
||||
extraCompilerFlags="/w44265 /w45038 /w44062">
|
||||
<CONFIGURATIONS>
|
||||
@@ -123,6 +100,29 @@
|
||||
<MODULEPATH id="juce_dsp" path="../../modules"/>
|
||||
</MODULEPATHS>
|
||||
</VS2019>
|
||||
<VS2022 targetFolder="Builds/VisualStudio2022" smallIcon="c97aUr" bigIcon="c97aUr"
|
||||
extraCompilerFlags="/w44265 /w45038 /w44062">
|
||||
<CONFIGURATIONS>
|
||||
<CONFIGURATION name="Debug" isDebug="1" targetName="AudioPluginHost"/>
|
||||
<CONFIGURATION name="Release" isDebug="0" targetName="AudioPluginHost" debugInformationFormat="ProgramDatabase"/>
|
||||
</CONFIGURATIONS>
|
||||
<MODULEPATHS>
|
||||
<MODULEPATH id="juce_opengl" path="../../modules"/>
|
||||
<MODULEPATH id="juce_gui_extra" path="../../modules"/>
|
||||
<MODULEPATH id="juce_gui_basics" path="../../modules"/>
|
||||
<MODULEPATH id="juce_graphics" path="../../modules"/>
|
||||
<MODULEPATH id="juce_events" path="../../modules"/>
|
||||
<MODULEPATH id="juce_data_structures" path="../../modules"/>
|
||||
<MODULEPATH id="juce_cryptography" path="../../modules"/>
|
||||
<MODULEPATH id="juce_core" path="../../modules"/>
|
||||
<MODULEPATH id="juce_audio_utils" path="../../modules"/>
|
||||
<MODULEPATH id="juce_audio_processors" path="../../modules"/>
|
||||
<MODULEPATH id="juce_audio_formats" path="../../modules"/>
|
||||
<MODULEPATH id="juce_audio_devices" path="../../modules"/>
|
||||
<MODULEPATH id="juce_audio_basics" path="../../modules"/>
|
||||
<MODULEPATH id="juce_dsp" path="../../modules"/>
|
||||
</MODULEPATHS>
|
||||
</VS2022>
|
||||
<XCODE_IPHONE targetFolder="Builds/iOS" iosScreenOrientation="" iPadScreenOrientation=""
|
||||
iosDeviceFamily="1,2" microphonePermissionNeeded="1" iosBackgroundAudio="1"
|
||||
iosBackgroundBle="1" smallIcon="c97aUr" bigIcon="c97aUr" customXcodeResourceFolders="../../examples/Assets">
|
||||
@@ -153,9 +153,8 @@
|
||||
microphonePermissionNeeded="1" androidBluetoothNeeded="1" smallIcon="c97aUr"
|
||||
bigIcon="c97aUr" androidExtraAssetsFolder="../../examples/Assets">
|
||||
<CONFIGURATIONS>
|
||||
<CONFIGURATION name="Debug" androidArchitectures="armeabi-v7a x86" isDebug="1"
|
||||
optimisation="1" linkTimeOptimisation="0" targetName="Plugin Host"
|
||||
recommendedWarnings="LLVM"/>
|
||||
<CONFIGURATION name="Debug" isDebug="1" optimisation="1" linkTimeOptimisation="0"
|
||||
targetName="Plugin Host" recommendedWarnings="LLVM"/>
|
||||
<CONFIGURATION name="Release" isDebug="0" optimisation="3" linkTimeOptimisation="1"
|
||||
targetName="Plugin Host" recommendedWarnings="LLVM"/>
|
||||
</CONFIGURATIONS>
|
||||
@@ -180,6 +179,8 @@
|
||||
<MAINGROUP id="YdWL7hi7p" name="AudioPluginHost">
|
||||
<GROUP id="{CFED5B3D-D1D8-0F3F-4D67-B2A810D057EF}" name="Source">
|
||||
<GROUP id="{6F257CD6-CE86-9BBC-54C1-45E43249E414}" name="Plugins">
|
||||
<FILE id="rcuPqK" name="ARAPlugin.cpp" compile="1" resource="0" file="Source/Plugins/ARAPlugin.cpp"/>
|
||||
<FILE id="gR1tiA" name="ARAPlugin.h" compile="0" resource="0" file="Source/Plugins/ARAPlugin.h"/>
|
||||
<FILE id="pov6wS" name="InternalPlugins.cpp" compile="1" resource="0"
|
||||
file="Source/Plugins/InternalPlugins.cpp"/>
|
||||
<FILE id="MV6AI1" name="InternalPlugins.h" compile="0" resource="0"
|
||||
@@ -205,11 +206,20 @@
|
||||
<FILE id="OmIhwQ" name="HostStartup.cpp" compile="1" resource="0" file="Source/HostStartup.cpp"/>
|
||||
<FILE id="c97aUr" name="JUCEAppIcon.png" compile="0" resource="0" file="Source/JUCEAppIcon.png"/>
|
||||
</GROUP>
|
||||
<GROUP id="{63C773C8-4305-87DD-DB3F-6D1143EFEC61}" name="BinaryData">
|
||||
<FILE id="sId0Lj" name="cassette_recorder.wav" compile="0" resource="1"
|
||||
file="../../examples/Assets/cassette_recorder.wav"/>
|
||||
<FILE id="VVFrYQ" name="cello.wav" compile="0" resource="1" file="../../examples/Assets/cello.wav"/>
|
||||
<FILE id="lVsCge" name="guitar_amp.wav" compile="0" resource="1" file="../../examples/Assets/guitar_amp.wav"/>
|
||||
<FILE id="Qs6X5l" name="proaudio.path" compile="0" resource="1" file="../../examples/Assets/proaudio.path"/>
|
||||
<FILE id="M2ySFI" name="reverb_ir.wav" compile="0" resource="1" file="../../examples/Assets/reverb_ir.wav"/>
|
||||
<FILE id="tlFmWJ" name="singing.ogg" compile="0" resource="1" file="../../examples/Assets/singing.ogg"/>
|
||||
</GROUP>
|
||||
</MAINGROUP>
|
||||
<JUCEOPTIONS JUCE_WASAPI="1" JUCE_DIRECTSOUND="1" JUCE_ALSA="1" JUCE_USE_FLAC="0"
|
||||
JUCE_USE_OGGVORBIS="1" JUCE_USE_CDBURNER="0" JUCE_USE_CDREADER="0"
|
||||
JUCE_USE_CAMERA="0" JUCE_PLUGINHOST_AU="1" JUCE_WEB_BROWSER="0"
|
||||
JUCE_PLUGINHOST_VST3="1" JUCE_PLUGINHOST_LADSPA="1"/>
|
||||
JUCE_PLUGINHOST_VST3="1" JUCE_PLUGINHOST_LADSPA="1" JUCE_PLUGINHOST_LV2="1"/>
|
||||
<MODULES>
|
||||
<MODULE id="juce_audio_basics" showAllCode="1"/>
|
||||
<MODULE id="juce_audio_devices" showAllCode="1"/>
|
||||
@@ -228,5 +238,7 @@
|
||||
</MODULES>
|
||||
<LIVE_SETTINGS>
|
||||
<OSX/>
|
||||
<WINDOWS/>
|
||||
<LINUX/>
|
||||
</LIVE_SETTINGS>
|
||||
</JUCERPROJECT>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,7 @@
|
||||
apply plugin: 'com.android.application'
|
||||
|
||||
android {
|
||||
compileSdkVersion 29
|
||||
compileSdkVersion 30
|
||||
externalNativeBuild {
|
||||
cmake {
|
||||
path "CMakeLists.txt"
|
||||
@@ -20,7 +20,7 @@ android {
|
||||
defaultConfig {
|
||||
applicationId "com.juce.pluginhost"
|
||||
minSdkVersion 23
|
||||
targetSdkVersion 29
|
||||
targetSdkVersion 30
|
||||
externalNativeBuild {
|
||||
cmake {
|
||||
arguments "-DANDROID_TOOLCHAIN=clang", "-DANDROID_PLATFORM=android-23", "-DANDROID_STL=c++_static", "-DANDROID_CPP_FEATURES=exceptions rtti", "-DANDROID_ARM_MODE=arm", "-DANDROID_ARM_NEON=TRUE", "-DCMAKE_CXX_STANDARD=14", "-DCMAKE_CXX_EXTENSIONS=OFF"
|
||||
@@ -47,7 +47,7 @@ android {
|
||||
productFlavors {
|
||||
debug_ {
|
||||
ndk {
|
||||
abiFilters "armeabi-v7a", "x86"
|
||||
abiFilters "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
|
||||
}
|
||||
externalNativeBuild {
|
||||
cmake {
|
||||
|
||||
@@ -4,8 +4,9 @@
|
||||
package="com.juce.pluginhost">
|
||||
<supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:anyDensity="true"
|
||||
android:xlargeScreens="true"/>
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28"/>
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
|
||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
|
||||
<uses-permission android:name="android.permission.BLUETOOTH"/>
|
||||
@@ -15,7 +16,8 @@
|
||||
<uses-feature android:glEsVersion="0x00030000" android:required="true"/>
|
||||
<application android:label="@string/app_name" android:name="com.rmsl.juce.JuceApp" android:icon="@drawable/icon" android:hardwareAccelerated="false">
|
||||
<activity android:name="com.rmsl.juce.JuceActivity" android:label="@string/app_name" android:configChanges="keyboardHidden|orientation|screenSize"
|
||||
android:screenOrientation="unspecified" android:launchMode="singleTask" android:hardwareAccelerated="true">
|
||||
android:screenOrientation="unspecified" android:launchMode="singleTask" android:hardwareAccelerated="true"
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
|
||||
@@ -1,72 +1,72 @@
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE examples.
|
||||
Copyright (c) 2020 - Raw Material Software Limited
|
||||
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
To use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES,
|
||||
WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR
|
||||
PURPOSE, ARE DISCLAIMED.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
|
||||
//==============================================================================
|
||||
/* This component scrolls a continuous waveform showing the audio that's
|
||||
coming into whatever audio inputs this object is connected to.
|
||||
*/
|
||||
class LiveScrollingAudioDisplay : public AudioVisualiserComponent,
|
||||
public AudioIODeviceCallback
|
||||
{
|
||||
public:
|
||||
LiveScrollingAudioDisplay() : AudioVisualiserComponent (1)
|
||||
{
|
||||
setSamplesPerBlock (256);
|
||||
setBufferSize (1024);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void audioDeviceAboutToStart (AudioIODevice*) override
|
||||
{
|
||||
clear();
|
||||
}
|
||||
|
||||
void audioDeviceStopped() override
|
||||
{
|
||||
clear();
|
||||
}
|
||||
|
||||
void audioDeviceIOCallback (const float** inputChannelData, int numInputChannels,
|
||||
float** outputChannelData, int numOutputChannels,
|
||||
int numberOfSamples) override
|
||||
{
|
||||
for (int i = 0; i < numberOfSamples; ++i)
|
||||
{
|
||||
float inputSample = 0;
|
||||
|
||||
for (int chan = 0; chan < numInputChannels; ++chan)
|
||||
if (const float* inputChannel = inputChannelData[chan])
|
||||
inputSample += inputChannel[i]; // find the sum of all the channels
|
||||
|
||||
inputSample *= 10.0f; // boost the level to make it more easily visible.
|
||||
|
||||
pushSample (&inputSample, 1);
|
||||
}
|
||||
|
||||
// We need to clear the output buffers before returning, in case they're full of junk..
|
||||
for (int j = 0; j < numOutputChannels; ++j)
|
||||
if (float* outputChannel = outputChannelData[j])
|
||||
zeromem (outputChannel, (size_t) numberOfSamples * sizeof (float));
|
||||
}
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (LiveScrollingAudioDisplay)
|
||||
};
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE examples.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
To use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES,
|
||||
WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR
|
||||
PURPOSE, ARE DISCLAIMED.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
|
||||
//==============================================================================
|
||||
/* This component scrolls a continuous waveform showing the audio that's
|
||||
coming into whatever audio inputs this object is connected to.
|
||||
*/
|
||||
class LiveScrollingAudioDisplay : public AudioVisualiserComponent,
|
||||
public AudioIODeviceCallback
|
||||
{
|
||||
public:
|
||||
LiveScrollingAudioDisplay() : AudioVisualiserComponent (1)
|
||||
{
|
||||
setSamplesPerBlock (256);
|
||||
setBufferSize (1024);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void audioDeviceAboutToStart (AudioIODevice*) override
|
||||
{
|
||||
clear();
|
||||
}
|
||||
|
||||
void audioDeviceStopped() override
|
||||
{
|
||||
clear();
|
||||
}
|
||||
|
||||
void audioDeviceIOCallback (const float** inputChannelData, int numInputChannels,
|
||||
float** outputChannelData, int numOutputChannels,
|
||||
int numberOfSamples) override
|
||||
{
|
||||
for (int i = 0; i < numberOfSamples; ++i)
|
||||
{
|
||||
float inputSample = 0;
|
||||
|
||||
for (int chan = 0; chan < numInputChannels; ++chan)
|
||||
if (const float* inputChannel = inputChannelData[chan])
|
||||
inputSample += inputChannel[i]; // find the sum of all the channels
|
||||
|
||||
inputSample *= 10.0f; // boost the level to make it more easily visible.
|
||||
|
||||
pushSample (&inputSample, 1);
|
||||
}
|
||||
|
||||
// We need to clear the output buffers before returning, in case they're full of junk..
|
||||
for (int j = 0; j < numOutputChannels; ++j)
|
||||
if (float* outputChannel = outputChannelData[j])
|
||||
zeromem (outputChannel, (size_t) numberOfSamples * sizeof (float));
|
||||
}
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (LiveScrollingAudioDisplay)
|
||||
};
|
||||
|
||||
@@ -1,51 +1,51 @@
|
||||
|
||||
#ifndef AddPair_H
|
||||
#define AddPair_H
|
||||
|
||||
class AddPair : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
AddPair()
|
||||
{
|
||||
m_world->SetGravity(b2Vec2(0.0f,0.0f));
|
||||
{
|
||||
b2CircleShape shape;
|
||||
shape.m_p.SetZero();
|
||||
shape.m_radius = 0.1f;
|
||||
|
||||
float minX = -6.0f;
|
||||
float maxX = 0.0f;
|
||||
float minY = 4.0f;
|
||||
float maxY = 6.0f;
|
||||
|
||||
for (int i = 0; i < 400; ++i)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position = b2Vec2(RandomFloat(minX,maxX),RandomFloat(minY,maxY));
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&shape, 0.01f);
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(1.5f, 1.5f);
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-40.0f,5.0f);
|
||||
bd.bullet = true;
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&shape, 1.0f);
|
||||
body->SetLinearVelocity(b2Vec2(150.0f, 0.0f));
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new AddPair;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
#ifndef AddPair_H
|
||||
#define AddPair_H
|
||||
|
||||
class AddPair : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
AddPair()
|
||||
{
|
||||
m_world->SetGravity(b2Vec2(0.0f,0.0f));
|
||||
{
|
||||
b2CircleShape shape;
|
||||
shape.m_p.SetZero();
|
||||
shape.m_radius = 0.1f;
|
||||
|
||||
float minX = -6.0f;
|
||||
float maxX = 0.0f;
|
||||
float minY = 4.0f;
|
||||
float maxY = 6.0f;
|
||||
|
||||
for (int i = 0; i < 400; ++i)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position = b2Vec2(RandomFloat(minX,maxX),RandomFloat(minY,maxY));
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&shape, 0.01f);
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(1.5f, 1.5f);
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-40.0f,5.0f);
|
||||
bd.bullet = true;
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&shape, 1.0f);
|
||||
body->SetLinearVelocity(b2Vec2(150.0f, 0.0f));
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new AddPair;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,183 +1,183 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef APPLY_FORCE_H
|
||||
#define APPLY_FORCE_H
|
||||
|
||||
class ApplyForce : public Test
|
||||
{
|
||||
public:
|
||||
ApplyForce()
|
||||
{
|
||||
m_world->SetGravity(b2Vec2(0.0f, 0.0f));
|
||||
|
||||
const float32 k_restitution = 0.4f;
|
||||
|
||||
b2Body* ground;
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(0.0f, 20.0f);
|
||||
ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
|
||||
b2FixtureDef sd;
|
||||
sd.shape = &shape;
|
||||
sd.density = 0.0f;
|
||||
sd.restitution = k_restitution;
|
||||
|
||||
// Left vertical
|
||||
shape.Set(b2Vec2(-20.0f, -20.0f), b2Vec2(-20.0f, 20.0f));
|
||||
ground->CreateFixture(&sd);
|
||||
|
||||
// Right vertical
|
||||
shape.Set(b2Vec2(20.0f, -20.0f), b2Vec2(20.0f, 20.0f));
|
||||
ground->CreateFixture(&sd);
|
||||
|
||||
// Top horizontal
|
||||
shape.Set(b2Vec2(-20.0f, 20.0f), b2Vec2(20.0f, 20.0f));
|
||||
ground->CreateFixture(&sd);
|
||||
|
||||
// Bottom horizontal
|
||||
shape.Set(b2Vec2(-20.0f, -20.0f), b2Vec2(20.0f, -20.0f));
|
||||
ground->CreateFixture(&sd);
|
||||
}
|
||||
|
||||
{
|
||||
b2Transform xf1;
|
||||
xf1.q.Set(0.3524f * b2_pi);
|
||||
xf1.p = xf1.q.GetXAxis();
|
||||
|
||||
b2Vec2 vertices[3];
|
||||
vertices[0] = b2Mul(xf1, b2Vec2(-1.0f, 0.0f));
|
||||
vertices[1] = b2Mul(xf1, b2Vec2(1.0f, 0.0f));
|
||||
vertices[2] = b2Mul(xf1, b2Vec2(0.0f, 0.5f));
|
||||
|
||||
b2PolygonShape poly1;
|
||||
poly1.Set(vertices, 3);
|
||||
|
||||
b2FixtureDef sd1;
|
||||
sd1.shape = &poly1;
|
||||
sd1.density = 4.0f;
|
||||
|
||||
b2Transform xf2;
|
||||
xf2.q.Set(-0.3524f * b2_pi);
|
||||
xf2.p = -xf2.q.GetXAxis();
|
||||
|
||||
vertices[0] = b2Mul(xf2, b2Vec2(-1.0f, 0.0f));
|
||||
vertices[1] = b2Mul(xf2, b2Vec2(1.0f, 0.0f));
|
||||
vertices[2] = b2Mul(xf2, b2Vec2(0.0f, 0.5f));
|
||||
|
||||
b2PolygonShape poly2;
|
||||
poly2.Set(vertices, 3);
|
||||
|
||||
b2FixtureDef sd2;
|
||||
sd2.shape = &poly2;
|
||||
sd2.density = 2.0f;
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.angularDamping = 5.0f;
|
||||
bd.linearDamping = 0.1f;
|
||||
|
||||
bd.position.Set(0.0f, 2.0f);
|
||||
bd.angle = b2_pi;
|
||||
bd.allowSleep = false;
|
||||
m_body = m_world->CreateBody(&bd);
|
||||
m_body->CreateFixture(&sd1);
|
||||
m_body->CreateFixture(&sd2);
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.5f, 0.5f);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 1.0f;
|
||||
fd.friction = 0.3f;
|
||||
|
||||
for (int i = 0; i < 10; ++i)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
|
||||
bd.position.Set(0.0f, 5.0f + 1.54f * i);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
body->CreateFixture(&fd);
|
||||
|
||||
float32 gravity = 10.0f;
|
||||
float32 I = body->GetInertia();
|
||||
float32 mass = body->GetMass();
|
||||
|
||||
// For a circle: I = 0.5 * m * r * r ==> r = sqrt(2 * I / m)
|
||||
float32 radius = b2Sqrt(2.0f * I / mass);
|
||||
|
||||
b2FrictionJointDef jd;
|
||||
jd.localAnchorA.SetZero();
|
||||
jd.localAnchorB.SetZero();
|
||||
jd.bodyA = ground;
|
||||
jd.bodyB = body;
|
||||
jd.collideConnected = true;
|
||||
jd.maxForce = mass * gravity;
|
||||
jd.maxTorque = mass * radius * gravity;
|
||||
|
||||
m_world->CreateJoint(&jd);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case 'w':
|
||||
{
|
||||
b2Vec2 f = m_body->GetWorldVector(b2Vec2(0.0f, -200.0f));
|
||||
b2Vec2 p = m_body->GetWorldPoint(b2Vec2(0.0f, 2.0f));
|
||||
m_body->ApplyForce(f, p);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'a':
|
||||
{
|
||||
m_body->ApplyTorque(50.0f);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
{
|
||||
m_body->ApplyTorque(-50.0f);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new ApplyForce;
|
||||
}
|
||||
|
||||
b2Body* m_body;
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef APPLY_FORCE_H
|
||||
#define APPLY_FORCE_H
|
||||
|
||||
class ApplyForce : public Test
|
||||
{
|
||||
public:
|
||||
ApplyForce()
|
||||
{
|
||||
m_world->SetGravity(b2Vec2(0.0f, 0.0f));
|
||||
|
||||
const float32 k_restitution = 0.4f;
|
||||
|
||||
b2Body* ground;
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(0.0f, 20.0f);
|
||||
ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
|
||||
b2FixtureDef sd;
|
||||
sd.shape = &shape;
|
||||
sd.density = 0.0f;
|
||||
sd.restitution = k_restitution;
|
||||
|
||||
// Left vertical
|
||||
shape.Set(b2Vec2(-20.0f, -20.0f), b2Vec2(-20.0f, 20.0f));
|
||||
ground->CreateFixture(&sd);
|
||||
|
||||
// Right vertical
|
||||
shape.Set(b2Vec2(20.0f, -20.0f), b2Vec2(20.0f, 20.0f));
|
||||
ground->CreateFixture(&sd);
|
||||
|
||||
// Top horizontal
|
||||
shape.Set(b2Vec2(-20.0f, 20.0f), b2Vec2(20.0f, 20.0f));
|
||||
ground->CreateFixture(&sd);
|
||||
|
||||
// Bottom horizontal
|
||||
shape.Set(b2Vec2(-20.0f, -20.0f), b2Vec2(20.0f, -20.0f));
|
||||
ground->CreateFixture(&sd);
|
||||
}
|
||||
|
||||
{
|
||||
b2Transform xf1;
|
||||
xf1.q.Set(0.3524f * b2_pi);
|
||||
xf1.p = xf1.q.GetXAxis();
|
||||
|
||||
b2Vec2 vertices[3];
|
||||
vertices[0] = b2Mul(xf1, b2Vec2(-1.0f, 0.0f));
|
||||
vertices[1] = b2Mul(xf1, b2Vec2(1.0f, 0.0f));
|
||||
vertices[2] = b2Mul(xf1, b2Vec2(0.0f, 0.5f));
|
||||
|
||||
b2PolygonShape poly1;
|
||||
poly1.Set(vertices, 3);
|
||||
|
||||
b2FixtureDef sd1;
|
||||
sd1.shape = &poly1;
|
||||
sd1.density = 4.0f;
|
||||
|
||||
b2Transform xf2;
|
||||
xf2.q.Set(-0.3524f * b2_pi);
|
||||
xf2.p = -xf2.q.GetXAxis();
|
||||
|
||||
vertices[0] = b2Mul(xf2, b2Vec2(-1.0f, 0.0f));
|
||||
vertices[1] = b2Mul(xf2, b2Vec2(1.0f, 0.0f));
|
||||
vertices[2] = b2Mul(xf2, b2Vec2(0.0f, 0.5f));
|
||||
|
||||
b2PolygonShape poly2;
|
||||
poly2.Set(vertices, 3);
|
||||
|
||||
b2FixtureDef sd2;
|
||||
sd2.shape = &poly2;
|
||||
sd2.density = 2.0f;
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.angularDamping = 5.0f;
|
||||
bd.linearDamping = 0.1f;
|
||||
|
||||
bd.position.Set(0.0f, 2.0f);
|
||||
bd.angle = b2_pi;
|
||||
bd.allowSleep = false;
|
||||
m_body = m_world->CreateBody(&bd);
|
||||
m_body->CreateFixture(&sd1);
|
||||
m_body->CreateFixture(&sd2);
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.5f, 0.5f);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 1.0f;
|
||||
fd.friction = 0.3f;
|
||||
|
||||
for (int i = 0; i < 10; ++i)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
|
||||
bd.position.Set(0.0f, 5.0f + 1.54f * i);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
body->CreateFixture(&fd);
|
||||
|
||||
float32 gravity = 10.0f;
|
||||
float32 I = body->GetInertia();
|
||||
float32 mass = body->GetMass();
|
||||
|
||||
// For a circle: I = 0.5 * m * r * r ==> r = sqrt(2 * I / m)
|
||||
float32 radius = b2Sqrt(2.0f * I / mass);
|
||||
|
||||
b2FrictionJointDef jd;
|
||||
jd.localAnchorA.SetZero();
|
||||
jd.localAnchorB.SetZero();
|
||||
jd.bodyA = ground;
|
||||
jd.bodyB = body;
|
||||
jd.collideConnected = true;
|
||||
jd.maxForce = mass * gravity;
|
||||
jd.maxTorque = mass * radius * gravity;
|
||||
|
||||
m_world->CreateJoint(&jd);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case 'w':
|
||||
{
|
||||
b2Vec2 f = m_body->GetWorldVector(b2Vec2(0.0f, -200.0f));
|
||||
b2Vec2 p = m_body->GetWorldPoint(b2Vec2(0.0f, 2.0f));
|
||||
m_body->ApplyForce(f, p);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'a':
|
||||
{
|
||||
m_body->ApplyTorque(50.0f);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
{
|
||||
m_body->ApplyTorque(-50.0f);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new ApplyForce;
|
||||
}
|
||||
|
||||
b2Body* m_body;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,159 +1,159 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef BODY_TYPES_H
|
||||
#define BODY_TYPES_H
|
||||
|
||||
class BodyTypes : public Test
|
||||
{
|
||||
public:
|
||||
BodyTypes()
|
||||
{
|
||||
b2Body* ground = NULL;
|
||||
{
|
||||
b2BodyDef bd;
|
||||
ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-20.0f, 0.0f), b2Vec2(20.0f, 0.0f));
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
|
||||
ground->CreateFixture(&fd);
|
||||
}
|
||||
|
||||
// Define attachment
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(0.0f, 3.0f);
|
||||
m_attachment = m_world->CreateBody(&bd);
|
||||
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.5f, 2.0f);
|
||||
m_attachment->CreateFixture(&shape, 2.0f);
|
||||
}
|
||||
|
||||
// Define platform
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-4.0f, 5.0f);
|
||||
m_platform = m_world->CreateBody(&bd);
|
||||
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.5f, 4.0f, b2Vec2(4.0f, 0.0f), 0.5f * b2_pi);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.friction = 0.6f;
|
||||
fd.density = 2.0f;
|
||||
m_platform->CreateFixture(&fd);
|
||||
|
||||
b2RevoluteJointDef rjd;
|
||||
rjd.Initialize(m_attachment, m_platform, b2Vec2(0.0f, 5.0f));
|
||||
rjd.maxMotorTorque = 50.0f;
|
||||
rjd.enableMotor = true;
|
||||
m_world->CreateJoint(&rjd);
|
||||
|
||||
b2PrismaticJointDef pjd;
|
||||
pjd.Initialize(ground, m_platform, b2Vec2(0.0f, 5.0f), b2Vec2(1.0f, 0.0f));
|
||||
|
||||
pjd.maxMotorForce = 1000.0f;
|
||||
pjd.enableMotor = true;
|
||||
pjd.lowerTranslation = -10.0f;
|
||||
pjd.upperTranslation = 10.0f;
|
||||
pjd.enableLimit = true;
|
||||
|
||||
m_world->CreateJoint(&pjd);
|
||||
|
||||
m_speed = 3.0f;
|
||||
}
|
||||
|
||||
// Create a payload
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(0.0f, 8.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.75f, 0.75f);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.friction = 0.6f;
|
||||
fd.density = 2.0f;
|
||||
|
||||
body->CreateFixture(&fd);
|
||||
}
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case 'd':
|
||||
m_platform->SetType(b2_dynamicBody);
|
||||
break;
|
||||
|
||||
case 's':
|
||||
m_platform->SetType(b2_staticBody);
|
||||
break;
|
||||
|
||||
case 'k':
|
||||
m_platform->SetType(b2_kinematicBody);
|
||||
m_platform->SetLinearVelocity(b2Vec2(-m_speed, 0.0f));
|
||||
m_platform->SetAngularVelocity(0.0f);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
// Drive the kinematic body.
|
||||
if (m_platform->GetType() == b2_kinematicBody)
|
||||
{
|
||||
b2Vec2 p = m_platform->GetTransform().p;
|
||||
b2Vec2 v = m_platform->GetLinearVelocity();
|
||||
|
||||
if ((p.x < -10.0f && v.x < 0.0f) ||
|
||||
(p.x > 10.0f && v.x > 0.0f))
|
||||
{
|
||||
v.x = -v.x;
|
||||
m_platform->SetLinearVelocity(v);
|
||||
}
|
||||
}
|
||||
|
||||
Test::Step(settings);
|
||||
m_debugDraw.DrawString(5, m_textLine, "Keys: (d) dynamic, (s) static, (k) kinematic");
|
||||
m_textLine += 15;
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new BodyTypes;
|
||||
}
|
||||
|
||||
b2Body* m_attachment;
|
||||
b2Body* m_platform;
|
||||
float32 m_speed;
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef BODY_TYPES_H
|
||||
#define BODY_TYPES_H
|
||||
|
||||
class BodyTypes : public Test
|
||||
{
|
||||
public:
|
||||
BodyTypes()
|
||||
{
|
||||
b2Body* ground = NULL;
|
||||
{
|
||||
b2BodyDef bd;
|
||||
ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-20.0f, 0.0f), b2Vec2(20.0f, 0.0f));
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
|
||||
ground->CreateFixture(&fd);
|
||||
}
|
||||
|
||||
// Define attachment
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(0.0f, 3.0f);
|
||||
m_attachment = m_world->CreateBody(&bd);
|
||||
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.5f, 2.0f);
|
||||
m_attachment->CreateFixture(&shape, 2.0f);
|
||||
}
|
||||
|
||||
// Define platform
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-4.0f, 5.0f);
|
||||
m_platform = m_world->CreateBody(&bd);
|
||||
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.5f, 4.0f, b2Vec2(4.0f, 0.0f), 0.5f * b2_pi);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.friction = 0.6f;
|
||||
fd.density = 2.0f;
|
||||
m_platform->CreateFixture(&fd);
|
||||
|
||||
b2RevoluteJointDef rjd;
|
||||
rjd.Initialize(m_attachment, m_platform, b2Vec2(0.0f, 5.0f));
|
||||
rjd.maxMotorTorque = 50.0f;
|
||||
rjd.enableMotor = true;
|
||||
m_world->CreateJoint(&rjd);
|
||||
|
||||
b2PrismaticJointDef pjd;
|
||||
pjd.Initialize(ground, m_platform, b2Vec2(0.0f, 5.0f), b2Vec2(1.0f, 0.0f));
|
||||
|
||||
pjd.maxMotorForce = 1000.0f;
|
||||
pjd.enableMotor = true;
|
||||
pjd.lowerTranslation = -10.0f;
|
||||
pjd.upperTranslation = 10.0f;
|
||||
pjd.enableLimit = true;
|
||||
|
||||
m_world->CreateJoint(&pjd);
|
||||
|
||||
m_speed = 3.0f;
|
||||
}
|
||||
|
||||
// Create a payload
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(0.0f, 8.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.75f, 0.75f);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.friction = 0.6f;
|
||||
fd.density = 2.0f;
|
||||
|
||||
body->CreateFixture(&fd);
|
||||
}
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case 'd':
|
||||
m_platform->SetType(b2_dynamicBody);
|
||||
break;
|
||||
|
||||
case 's':
|
||||
m_platform->SetType(b2_staticBody);
|
||||
break;
|
||||
|
||||
case 'k':
|
||||
m_platform->SetType(b2_kinematicBody);
|
||||
m_platform->SetLinearVelocity(b2Vec2(-m_speed, 0.0f));
|
||||
m_platform->SetAngularVelocity(0.0f);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
// Drive the kinematic body.
|
||||
if (m_platform->GetType() == b2_kinematicBody)
|
||||
{
|
||||
b2Vec2 p = m_platform->GetTransform().p;
|
||||
b2Vec2 v = m_platform->GetLinearVelocity();
|
||||
|
||||
if ((p.x < -10.0f && v.x < 0.0f) ||
|
||||
(p.x > 10.0f && v.x > 0.0f))
|
||||
{
|
||||
v.x = -v.x;
|
||||
m_platform->SetLinearVelocity(v);
|
||||
}
|
||||
}
|
||||
|
||||
Test::Step(settings);
|
||||
m_debugDraw.DrawString(5, m_textLine, "Keys: (d) dynamic, (s) static, (k) kinematic");
|
||||
m_textLine += 15;
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new BodyTypes;
|
||||
}
|
||||
|
||||
b2Body* m_attachment;
|
||||
b2Body* m_platform;
|
||||
float32 m_speed;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,155 +1,155 @@
|
||||
/*
|
||||
* Copyright (c) 2008-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef BREAKABLE_TEST_H
|
||||
#define BREAKABLE_TEST_H
|
||||
|
||||
// This is used to test sensor shapes.
|
||||
class Breakable : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
enum
|
||||
{
|
||||
e_count = 7
|
||||
};
|
||||
|
||||
Breakable()
|
||||
{
|
||||
// Ground body
|
||||
{
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
// Breakable dynamic body
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(0.0f, 40.0f);
|
||||
bd.angle = 0.25f * b2_pi;
|
||||
m_body1 = m_world->CreateBody(&bd);
|
||||
|
||||
m_shape1.SetAsBox(0.5f, 0.5f, b2Vec2(-0.5f, 0.0f), 0.0f);
|
||||
m_piece1 = m_body1->CreateFixture(&m_shape1, 1.0f);
|
||||
|
||||
m_shape2.SetAsBox(0.5f, 0.5f, b2Vec2(0.5f, 0.0f), 0.0f);
|
||||
m_piece2 = m_body1->CreateFixture(&m_shape2, 1.0f);
|
||||
}
|
||||
|
||||
m_break = false;
|
||||
m_broke = false;
|
||||
}
|
||||
|
||||
void PostSolve(b2Contact* contact, const b2ContactImpulse* impulse)
|
||||
{
|
||||
if (m_broke)
|
||||
{
|
||||
// The body already broke.
|
||||
return;
|
||||
}
|
||||
|
||||
// Should the body break?
|
||||
int32 count = contact->GetManifold()->pointCount;
|
||||
|
||||
float32 maxImpulse = 0.0f;
|
||||
for (int32 i = 0; i < count; ++i)
|
||||
{
|
||||
maxImpulse = b2Max(maxImpulse, impulse->normalImpulses[i]);
|
||||
}
|
||||
|
||||
if (maxImpulse > 40.0f)
|
||||
{
|
||||
// Flag the body for breaking.
|
||||
m_break = true;
|
||||
}
|
||||
}
|
||||
|
||||
void Break()
|
||||
{
|
||||
// Create two bodies from one.
|
||||
b2Body* body1 = m_piece1->GetBody();
|
||||
b2Vec2 center = body1->GetWorldCenter();
|
||||
|
||||
body1->DestroyFixture(m_piece2);
|
||||
m_piece2 = NULL;
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position = body1->GetPosition();
|
||||
bd.angle = body1->GetAngle();
|
||||
|
||||
b2Body* body2 = m_world->CreateBody(&bd);
|
||||
m_piece2 = body2->CreateFixture(&m_shape2, 1.0f);
|
||||
|
||||
// Compute consistent velocities for new bodies based on
|
||||
// cached velocity.
|
||||
b2Vec2 center1 = body1->GetWorldCenter();
|
||||
b2Vec2 center2 = body2->GetWorldCenter();
|
||||
|
||||
b2Vec2 velocity1 = m_velocity + b2Cross(m_angularVelocity, center1 - center);
|
||||
b2Vec2 velocity2 = m_velocity + b2Cross(m_angularVelocity, center2 - center);
|
||||
|
||||
body1->SetAngularVelocity(m_angularVelocity);
|
||||
body1->SetLinearVelocity(velocity1);
|
||||
|
||||
body2->SetAngularVelocity(m_angularVelocity);
|
||||
body2->SetLinearVelocity(velocity2);
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
if (m_break)
|
||||
{
|
||||
Break();
|
||||
m_broke = true;
|
||||
m_break = false;
|
||||
}
|
||||
|
||||
// Cache velocities to improve movement on breakage.
|
||||
if (m_broke == false)
|
||||
{
|
||||
m_velocity = m_body1->GetLinearVelocity();
|
||||
m_angularVelocity = m_body1->GetAngularVelocity();
|
||||
}
|
||||
|
||||
Test::Step(settings);
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new Breakable;
|
||||
}
|
||||
|
||||
b2Body* m_body1;
|
||||
b2Vec2 m_velocity;
|
||||
float32 m_angularVelocity;
|
||||
b2PolygonShape m_shape1;
|
||||
b2PolygonShape m_shape2;
|
||||
b2Fixture* m_piece1;
|
||||
b2Fixture* m_piece2;
|
||||
|
||||
bool m_broke;
|
||||
bool m_break;
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2008-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef BREAKABLE_TEST_H
|
||||
#define BREAKABLE_TEST_H
|
||||
|
||||
// This is used to test sensor shapes.
|
||||
class Breakable : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
enum
|
||||
{
|
||||
e_count = 7
|
||||
};
|
||||
|
||||
Breakable()
|
||||
{
|
||||
// Ground body
|
||||
{
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
// Breakable dynamic body
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(0.0f, 40.0f);
|
||||
bd.angle = 0.25f * b2_pi;
|
||||
m_body1 = m_world->CreateBody(&bd);
|
||||
|
||||
m_shape1.SetAsBox(0.5f, 0.5f, b2Vec2(-0.5f, 0.0f), 0.0f);
|
||||
m_piece1 = m_body1->CreateFixture(&m_shape1, 1.0f);
|
||||
|
||||
m_shape2.SetAsBox(0.5f, 0.5f, b2Vec2(0.5f, 0.0f), 0.0f);
|
||||
m_piece2 = m_body1->CreateFixture(&m_shape2, 1.0f);
|
||||
}
|
||||
|
||||
m_break = false;
|
||||
m_broke = false;
|
||||
}
|
||||
|
||||
void PostSolve(b2Contact* contact, const b2ContactImpulse* impulse)
|
||||
{
|
||||
if (m_broke)
|
||||
{
|
||||
// The body already broke.
|
||||
return;
|
||||
}
|
||||
|
||||
// Should the body break?
|
||||
int32 count = contact->GetManifold()->pointCount;
|
||||
|
||||
float32 maxImpulse = 0.0f;
|
||||
for (int32 i = 0; i < count; ++i)
|
||||
{
|
||||
maxImpulse = b2Max(maxImpulse, impulse->normalImpulses[i]);
|
||||
}
|
||||
|
||||
if (maxImpulse > 40.0f)
|
||||
{
|
||||
// Flag the body for breaking.
|
||||
m_break = true;
|
||||
}
|
||||
}
|
||||
|
||||
void Break()
|
||||
{
|
||||
// Create two bodies from one.
|
||||
b2Body* body1 = m_piece1->GetBody();
|
||||
b2Vec2 center = body1->GetWorldCenter();
|
||||
|
||||
body1->DestroyFixture(m_piece2);
|
||||
m_piece2 = NULL;
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position = body1->GetPosition();
|
||||
bd.angle = body1->GetAngle();
|
||||
|
||||
b2Body* body2 = m_world->CreateBody(&bd);
|
||||
m_piece2 = body2->CreateFixture(&m_shape2, 1.0f);
|
||||
|
||||
// Compute consistent velocities for new bodies based on
|
||||
// cached velocity.
|
||||
b2Vec2 center1 = body1->GetWorldCenter();
|
||||
b2Vec2 center2 = body2->GetWorldCenter();
|
||||
|
||||
b2Vec2 velocity1 = m_velocity + b2Cross(m_angularVelocity, center1 - center);
|
||||
b2Vec2 velocity2 = m_velocity + b2Cross(m_angularVelocity, center2 - center);
|
||||
|
||||
body1->SetAngularVelocity(m_angularVelocity);
|
||||
body1->SetLinearVelocity(velocity1);
|
||||
|
||||
body2->SetAngularVelocity(m_angularVelocity);
|
||||
body2->SetLinearVelocity(velocity2);
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
if (m_break)
|
||||
{
|
||||
Break();
|
||||
m_broke = true;
|
||||
m_break = false;
|
||||
}
|
||||
|
||||
// Cache velocities to improve movement on breakage.
|
||||
if (m_broke == false)
|
||||
{
|
||||
m_velocity = m_body1->GetLinearVelocity();
|
||||
m_angularVelocity = m_body1->GetAngularVelocity();
|
||||
}
|
||||
|
||||
Test::Step(settings);
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new Breakable;
|
||||
}
|
||||
|
||||
b2Body* m_body1;
|
||||
b2Vec2 m_velocity;
|
||||
float32 m_angularVelocity;
|
||||
b2PolygonShape m_shape1;
|
||||
b2PolygonShape m_shape2;
|
||||
b2Fixture* m_piece1;
|
||||
b2Fixture* m_piece2;
|
||||
|
||||
bool m_broke;
|
||||
bool m_break;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,125 +1,125 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef BRIDGE_H
|
||||
#define BRIDGE_H
|
||||
|
||||
class Bridge : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
enum
|
||||
{
|
||||
e_count = 30
|
||||
};
|
||||
|
||||
Bridge()
|
||||
{
|
||||
b2Body* ground = NULL;
|
||||
{
|
||||
b2BodyDef bd;
|
||||
ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.5f, 0.125f);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 20.0f;
|
||||
fd.friction = 0.2f;
|
||||
|
||||
b2RevoluteJointDef jd;
|
||||
|
||||
b2Body* prevBody = ground;
|
||||
for (int32 i = 0; i < e_count; ++i)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-14.5f + 1.0f * i, 5.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&fd);
|
||||
|
||||
b2Vec2 anchor(-15.0f + 1.0f * i, 5.0f);
|
||||
jd.Initialize(prevBody, body, anchor);
|
||||
m_world->CreateJoint(&jd);
|
||||
|
||||
if (i == (e_count >> 1))
|
||||
{
|
||||
m_middle = body;
|
||||
}
|
||||
prevBody = body;
|
||||
}
|
||||
|
||||
b2Vec2 anchor(-15.0f + 1.0f * e_count, 5.0f);
|
||||
jd.Initialize(prevBody, ground, anchor);
|
||||
m_world->CreateJoint(&jd);
|
||||
}
|
||||
|
||||
for (int32 i = 0; i < 2; ++i)
|
||||
{
|
||||
b2Vec2 vertices[3];
|
||||
vertices[0].Set(-0.5f, 0.0f);
|
||||
vertices[1].Set(0.5f, 0.0f);
|
||||
vertices[2].Set(0.0f, 1.5f);
|
||||
|
||||
b2PolygonShape shape;
|
||||
shape.Set(vertices, 3);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 1.0f;
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-8.0f + 8.0f * i, 12.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&fd);
|
||||
}
|
||||
|
||||
for (int32 i = 0; i < 3; ++i)
|
||||
{
|
||||
b2CircleShape shape;
|
||||
shape.m_radius = 0.5f;
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 1.0f;
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-6.0f + 6.0f * i, 10.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&fd);
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new Bridge;
|
||||
}
|
||||
|
||||
b2Body* m_middle;
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef BRIDGE_H
|
||||
#define BRIDGE_H
|
||||
|
||||
class Bridge : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
enum
|
||||
{
|
||||
e_count = 30
|
||||
};
|
||||
|
||||
Bridge()
|
||||
{
|
||||
b2Body* ground = NULL;
|
||||
{
|
||||
b2BodyDef bd;
|
||||
ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.5f, 0.125f);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 20.0f;
|
||||
fd.friction = 0.2f;
|
||||
|
||||
b2RevoluteJointDef jd;
|
||||
|
||||
b2Body* prevBody = ground;
|
||||
for (int32 i = 0; i < e_count; ++i)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-14.5f + 1.0f * i, 5.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&fd);
|
||||
|
||||
b2Vec2 anchor(-15.0f + 1.0f * i, 5.0f);
|
||||
jd.Initialize(prevBody, body, anchor);
|
||||
m_world->CreateJoint(&jd);
|
||||
|
||||
if (i == (e_count >> 1))
|
||||
{
|
||||
m_middle = body;
|
||||
}
|
||||
prevBody = body;
|
||||
}
|
||||
|
||||
b2Vec2 anchor(-15.0f + 1.0f * e_count, 5.0f);
|
||||
jd.Initialize(prevBody, ground, anchor);
|
||||
m_world->CreateJoint(&jd);
|
||||
}
|
||||
|
||||
for (int32 i = 0; i < 2; ++i)
|
||||
{
|
||||
b2Vec2 vertices[3];
|
||||
vertices[0].Set(-0.5f, 0.0f);
|
||||
vertices[1].Set(0.5f, 0.0f);
|
||||
vertices[2].Set(0.0f, 1.5f);
|
||||
|
||||
b2PolygonShape shape;
|
||||
shape.Set(vertices, 3);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 1.0f;
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-8.0f + 8.0f * i, 12.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&fd);
|
||||
}
|
||||
|
||||
for (int32 i = 0; i < 3; ++i)
|
||||
{
|
||||
b2CircleShape shape;
|
||||
shape.m_radius = 0.5f;
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 1.0f;
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-6.0f + 6.0f * i, 10.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&fd);
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new Bridge;
|
||||
}
|
||||
|
||||
b2Body* m_middle;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,136 +1,136 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef BULLET_TEST_H
|
||||
#define BULLET_TEST_H
|
||||
|
||||
class BulletTest : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
BulletTest()
|
||||
{
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(0.0f, 0.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape edge;
|
||||
|
||||
edge.Set(b2Vec2(-10.0f, 0.0f), b2Vec2(10.0f, 0.0f));
|
||||
body->CreateFixture(&edge, 0.0f);
|
||||
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.2f, 1.0f, b2Vec2(0.5f, 1.0f), 0.0f);
|
||||
body->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(0.0f, 4.0f);
|
||||
|
||||
b2PolygonShape box;
|
||||
box.SetAsBox(2.0f, 0.1f);
|
||||
|
||||
m_body = m_world->CreateBody(&bd);
|
||||
m_body->CreateFixture(&box, 1.0f);
|
||||
|
||||
box.SetAsBox(0.25f, 0.25f);
|
||||
|
||||
//m_x = RandomFloat(-1.0f, 1.0f);
|
||||
m_x = 0.20352793f;
|
||||
bd.position.Set(m_x, 10.0f);
|
||||
bd.bullet = true;
|
||||
|
||||
m_bullet = m_world->CreateBody(&bd);
|
||||
m_bullet->CreateFixture(&box, 100.0f);
|
||||
|
||||
m_bullet->SetLinearVelocity(b2Vec2(0.0f, -50.0f));
|
||||
}
|
||||
}
|
||||
|
||||
void Launch()
|
||||
{
|
||||
m_body->SetTransform(b2Vec2(0.0f, 4.0f), 0.0f);
|
||||
m_body->SetLinearVelocity(b2Vec2_zero);
|
||||
m_body->SetAngularVelocity(0.0f);
|
||||
|
||||
m_x = RandomFloat(-1.0f, 1.0f);
|
||||
m_bullet->SetTransform(b2Vec2(m_x, 10.0f), 0.0f);
|
||||
m_bullet->SetLinearVelocity(b2Vec2(0.0f, -50.0f));
|
||||
m_bullet->SetAngularVelocity(0.0f);
|
||||
|
||||
extern int32 b2_gjkCalls, b2_gjkIters, b2_gjkMaxIters;
|
||||
extern int32 b2_toiCalls, b2_toiIters, b2_toiMaxIters;
|
||||
extern int32 b2_toiRootIters, b2_toiMaxRootIters;
|
||||
|
||||
b2_gjkCalls = 0;
|
||||
b2_gjkIters = 0;
|
||||
b2_gjkMaxIters = 0;
|
||||
|
||||
b2_toiCalls = 0;
|
||||
b2_toiIters = 0;
|
||||
b2_toiMaxIters = 0;
|
||||
b2_toiRootIters = 0;
|
||||
b2_toiMaxRootIters = 0;
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
Test::Step(settings);
|
||||
|
||||
extern int32 b2_gjkCalls, b2_gjkIters, b2_gjkMaxIters;
|
||||
extern int32 b2_toiCalls, b2_toiIters;
|
||||
extern int32 b2_toiRootIters, b2_toiMaxRootIters;
|
||||
|
||||
if (b2_gjkCalls > 0)
|
||||
{
|
||||
m_debugDraw.DrawString(5, m_textLine, "gjk calls = %d, ave gjk iters = %3.1f, max gjk iters = %d",
|
||||
b2_gjkCalls, b2_gjkIters / float32(b2_gjkCalls), b2_gjkMaxIters);
|
||||
m_textLine += 15;
|
||||
}
|
||||
|
||||
if (b2_toiCalls > 0)
|
||||
{
|
||||
m_debugDraw.DrawString(5, m_textLine, "toi calls = %d, ave toi iters = %3.1f, max toi iters = %d",
|
||||
b2_toiCalls, b2_toiIters / float32(b2_toiCalls), b2_toiMaxRootIters);
|
||||
m_textLine += 15;
|
||||
|
||||
m_debugDraw.DrawString(5, m_textLine, "ave toi root iters = %3.1f, max toi root iters = %d",
|
||||
b2_toiRootIters / float32(b2_toiCalls), b2_toiMaxRootIters);
|
||||
m_textLine += 15;
|
||||
}
|
||||
|
||||
if (m_stepCount % 60 == 0)
|
||||
{
|
||||
Launch();
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new BulletTest;
|
||||
}
|
||||
|
||||
b2Body* m_body;
|
||||
b2Body* m_bullet;
|
||||
float32 m_x;
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef BULLET_TEST_H
|
||||
#define BULLET_TEST_H
|
||||
|
||||
class BulletTest : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
BulletTest()
|
||||
{
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(0.0f, 0.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape edge;
|
||||
|
||||
edge.Set(b2Vec2(-10.0f, 0.0f), b2Vec2(10.0f, 0.0f));
|
||||
body->CreateFixture(&edge, 0.0f);
|
||||
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.2f, 1.0f, b2Vec2(0.5f, 1.0f), 0.0f);
|
||||
body->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(0.0f, 4.0f);
|
||||
|
||||
b2PolygonShape box;
|
||||
box.SetAsBox(2.0f, 0.1f);
|
||||
|
||||
m_body = m_world->CreateBody(&bd);
|
||||
m_body->CreateFixture(&box, 1.0f);
|
||||
|
||||
box.SetAsBox(0.25f, 0.25f);
|
||||
|
||||
//m_x = RandomFloat(-1.0f, 1.0f);
|
||||
m_x = 0.20352793f;
|
||||
bd.position.Set(m_x, 10.0f);
|
||||
bd.bullet = true;
|
||||
|
||||
m_bullet = m_world->CreateBody(&bd);
|
||||
m_bullet->CreateFixture(&box, 100.0f);
|
||||
|
||||
m_bullet->SetLinearVelocity(b2Vec2(0.0f, -50.0f));
|
||||
}
|
||||
}
|
||||
|
||||
void Launch()
|
||||
{
|
||||
m_body->SetTransform(b2Vec2(0.0f, 4.0f), 0.0f);
|
||||
m_body->SetLinearVelocity(b2Vec2_zero);
|
||||
m_body->SetAngularVelocity(0.0f);
|
||||
|
||||
m_x = RandomFloat(-1.0f, 1.0f);
|
||||
m_bullet->SetTransform(b2Vec2(m_x, 10.0f), 0.0f);
|
||||
m_bullet->SetLinearVelocity(b2Vec2(0.0f, -50.0f));
|
||||
m_bullet->SetAngularVelocity(0.0f);
|
||||
|
||||
extern int32 b2_gjkCalls, b2_gjkIters, b2_gjkMaxIters;
|
||||
extern int32 b2_toiCalls, b2_toiIters, b2_toiMaxIters;
|
||||
extern int32 b2_toiRootIters, b2_toiMaxRootIters;
|
||||
|
||||
b2_gjkCalls = 0;
|
||||
b2_gjkIters = 0;
|
||||
b2_gjkMaxIters = 0;
|
||||
|
||||
b2_toiCalls = 0;
|
||||
b2_toiIters = 0;
|
||||
b2_toiMaxIters = 0;
|
||||
b2_toiRootIters = 0;
|
||||
b2_toiMaxRootIters = 0;
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
Test::Step(settings);
|
||||
|
||||
extern int32 b2_gjkCalls, b2_gjkIters, b2_gjkMaxIters;
|
||||
extern int32 b2_toiCalls, b2_toiIters;
|
||||
extern int32 b2_toiRootIters, b2_toiMaxRootIters;
|
||||
|
||||
if (b2_gjkCalls > 0)
|
||||
{
|
||||
m_debugDraw.DrawString(5, m_textLine, "gjk calls = %d, ave gjk iters = %3.1f, max gjk iters = %d",
|
||||
b2_gjkCalls, b2_gjkIters / float32(b2_gjkCalls), b2_gjkMaxIters);
|
||||
m_textLine += 15;
|
||||
}
|
||||
|
||||
if (b2_toiCalls > 0)
|
||||
{
|
||||
m_debugDraw.DrawString(5, m_textLine, "toi calls = %d, ave toi iters = %3.1f, max toi iters = %d",
|
||||
b2_toiCalls, b2_toiIters / float32(b2_toiCalls), b2_toiMaxRootIters);
|
||||
m_textLine += 15;
|
||||
|
||||
m_debugDraw.DrawString(5, m_textLine, "ave toi root iters = %3.1f, max toi root iters = %d",
|
||||
b2_toiRootIters / float32(b2_toiCalls), b2_toiMaxRootIters);
|
||||
m_textLine += 15;
|
||||
}
|
||||
|
||||
if (m_stepCount % 60 == 0)
|
||||
{
|
||||
Launch();
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new BulletTest;
|
||||
}
|
||||
|
||||
b2Body* m_body;
|
||||
b2Body* m_bullet;
|
||||
float32 m_x;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,211 +1,211 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2011 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef CANTILEVER_H
|
||||
#define CANTILEVER_H
|
||||
|
||||
// It is difficult to make a cantilever made of links completely rigid with weld joints.
|
||||
// You will have to use a high number of iterations to make them stiff.
|
||||
// So why not go ahead and use soft weld joints? They behave like a revolute
|
||||
// joint with a rotational spring.
|
||||
class Cantilever : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
enum
|
||||
{
|
||||
e_count = 8
|
||||
};
|
||||
|
||||
Cantilever()
|
||||
{
|
||||
b2Body* ground = NULL;
|
||||
{
|
||||
b2BodyDef bd;
|
||||
ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.5f, 0.125f);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 20.0f;
|
||||
|
||||
b2WeldJointDef jd;
|
||||
|
||||
b2Body* prevBody = ground;
|
||||
for (int32 i = 0; i < e_count; ++i)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-14.5f + 1.0f * i, 5.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&fd);
|
||||
|
||||
b2Vec2 anchor(-15.0f + 1.0f * i, 5.0f);
|
||||
jd.Initialize(prevBody, body, anchor);
|
||||
m_world->CreateJoint(&jd);
|
||||
|
||||
prevBody = body;
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(1.0f, 0.125f);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 20.0f;
|
||||
|
||||
b2WeldJointDef jd;
|
||||
jd.frequencyHz = 5.0f;
|
||||
jd.dampingRatio = 0.7f;
|
||||
|
||||
b2Body* prevBody = ground;
|
||||
for (int32 i = 0; i < 3; ++i)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-14.0f + 2.0f * i, 15.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&fd);
|
||||
|
||||
b2Vec2 anchor(-15.0f + 2.0f * i, 15.0f);
|
||||
jd.Initialize(prevBody, body, anchor);
|
||||
m_world->CreateJoint(&jd);
|
||||
|
||||
prevBody = body;
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.5f, 0.125f);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 20.0f;
|
||||
|
||||
b2WeldJointDef jd;
|
||||
|
||||
b2Body* prevBody = ground;
|
||||
for (int32 i = 0; i < e_count; ++i)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-4.5f + 1.0f * i, 5.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&fd);
|
||||
|
||||
if (i > 0)
|
||||
{
|
||||
b2Vec2 anchor(-5.0f + 1.0f * i, 5.0f);
|
||||
jd.Initialize(prevBody, body, anchor);
|
||||
m_world->CreateJoint(&jd);
|
||||
}
|
||||
|
||||
prevBody = body;
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.5f, 0.125f);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 20.0f;
|
||||
|
||||
b2WeldJointDef jd;
|
||||
jd.frequencyHz = 8.0f;
|
||||
jd.dampingRatio = 0.7f;
|
||||
|
||||
b2Body* prevBody = ground;
|
||||
for (int32 i = 0; i < e_count; ++i)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(5.5f + 1.0f * i, 10.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&fd);
|
||||
|
||||
if (i > 0)
|
||||
{
|
||||
b2Vec2 anchor(5.0f + 1.0f * i, 10.0f);
|
||||
jd.Initialize(prevBody, body, anchor);
|
||||
m_world->CreateJoint(&jd);
|
||||
}
|
||||
|
||||
prevBody = body;
|
||||
}
|
||||
}
|
||||
|
||||
for (int32 i = 0; i < 2; ++i)
|
||||
{
|
||||
b2Vec2 vertices[3];
|
||||
vertices[0].Set(-0.5f, 0.0f);
|
||||
vertices[1].Set(0.5f, 0.0f);
|
||||
vertices[2].Set(0.0f, 1.5f);
|
||||
|
||||
b2PolygonShape shape;
|
||||
shape.Set(vertices, 3);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 1.0f;
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-8.0f + 8.0f * i, 12.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&fd);
|
||||
}
|
||||
|
||||
for (int32 i = 0; i < 2; ++i)
|
||||
{
|
||||
b2CircleShape shape;
|
||||
shape.m_radius = 0.5f;
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 1.0f;
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-6.0f + 6.0f * i, 10.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&fd);
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new Cantilever;
|
||||
}
|
||||
|
||||
b2Body* m_middle;
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2006-2011 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef CANTILEVER_H
|
||||
#define CANTILEVER_H
|
||||
|
||||
// It is difficult to make a cantilever made of links completely rigid with weld joints.
|
||||
// You will have to use a high number of iterations to make them stiff.
|
||||
// So why not go ahead and use soft weld joints? They behave like a revolute
|
||||
// joint with a rotational spring.
|
||||
class Cantilever : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
enum
|
||||
{
|
||||
e_count = 8
|
||||
};
|
||||
|
||||
Cantilever()
|
||||
{
|
||||
b2Body* ground = NULL;
|
||||
{
|
||||
b2BodyDef bd;
|
||||
ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.5f, 0.125f);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 20.0f;
|
||||
|
||||
b2WeldJointDef jd;
|
||||
|
||||
b2Body* prevBody = ground;
|
||||
for (int32 i = 0; i < e_count; ++i)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-14.5f + 1.0f * i, 5.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&fd);
|
||||
|
||||
b2Vec2 anchor(-15.0f + 1.0f * i, 5.0f);
|
||||
jd.Initialize(prevBody, body, anchor);
|
||||
m_world->CreateJoint(&jd);
|
||||
|
||||
prevBody = body;
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(1.0f, 0.125f);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 20.0f;
|
||||
|
||||
b2WeldJointDef jd;
|
||||
jd.frequencyHz = 5.0f;
|
||||
jd.dampingRatio = 0.7f;
|
||||
|
||||
b2Body* prevBody = ground;
|
||||
for (int32 i = 0; i < 3; ++i)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-14.0f + 2.0f * i, 15.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&fd);
|
||||
|
||||
b2Vec2 anchor(-15.0f + 2.0f * i, 15.0f);
|
||||
jd.Initialize(prevBody, body, anchor);
|
||||
m_world->CreateJoint(&jd);
|
||||
|
||||
prevBody = body;
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.5f, 0.125f);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 20.0f;
|
||||
|
||||
b2WeldJointDef jd;
|
||||
|
||||
b2Body* prevBody = ground;
|
||||
for (int32 i = 0; i < e_count; ++i)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-4.5f + 1.0f * i, 5.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&fd);
|
||||
|
||||
if (i > 0)
|
||||
{
|
||||
b2Vec2 anchor(-5.0f + 1.0f * i, 5.0f);
|
||||
jd.Initialize(prevBody, body, anchor);
|
||||
m_world->CreateJoint(&jd);
|
||||
}
|
||||
|
||||
prevBody = body;
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.5f, 0.125f);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 20.0f;
|
||||
|
||||
b2WeldJointDef jd;
|
||||
jd.frequencyHz = 8.0f;
|
||||
jd.dampingRatio = 0.7f;
|
||||
|
||||
b2Body* prevBody = ground;
|
||||
for (int32 i = 0; i < e_count; ++i)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(5.5f + 1.0f * i, 10.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&fd);
|
||||
|
||||
if (i > 0)
|
||||
{
|
||||
b2Vec2 anchor(5.0f + 1.0f * i, 10.0f);
|
||||
jd.Initialize(prevBody, body, anchor);
|
||||
m_world->CreateJoint(&jd);
|
||||
}
|
||||
|
||||
prevBody = body;
|
||||
}
|
||||
}
|
||||
|
||||
for (int32 i = 0; i < 2; ++i)
|
||||
{
|
||||
b2Vec2 vertices[3];
|
||||
vertices[0].Set(-0.5f, 0.0f);
|
||||
vertices[1].Set(0.5f, 0.0f);
|
||||
vertices[2].Set(0.0f, 1.5f);
|
||||
|
||||
b2PolygonShape shape;
|
||||
shape.Set(vertices, 3);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 1.0f;
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-8.0f + 8.0f * i, 12.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&fd);
|
||||
}
|
||||
|
||||
for (int32 i = 0; i < 2; ++i)
|
||||
{
|
||||
b2CircleShape shape;
|
||||
shape.m_radius = 0.5f;
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 1.0f;
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-6.0f + 6.0f * i, 10.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&fd);
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new Cantilever;
|
||||
}
|
||||
|
||||
b2Body* m_middle;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,286 +1,286 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2011 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef CAR_H
|
||||
#define CAR_H
|
||||
|
||||
// This is a fun demo that shows off the wheel joint
|
||||
class Car : public Test
|
||||
{
|
||||
public:
|
||||
Car()
|
||||
{
|
||||
m_hz = 4.0f;
|
||||
m_zeta = 0.7f;
|
||||
m_speed = 50.0f;
|
||||
|
||||
b2Body* ground = NULL;
|
||||
{
|
||||
b2BodyDef bd;
|
||||
ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 0.0f;
|
||||
fd.friction = 0.6f;
|
||||
|
||||
shape.Set(b2Vec2(-20.0f, 0.0f), b2Vec2(20.0f, 0.0f));
|
||||
ground->CreateFixture(&fd);
|
||||
|
||||
float32 hs[10] = {0.25f, 1.0f, 4.0f, 0.0f, 0.0f, -1.0f, -2.0f, -2.0f, -1.25f, 0.0f};
|
||||
|
||||
float32 x = 20.0f, y1 = 0.0f, dx = 5.0f;
|
||||
|
||||
for (int32 i = 0; i < 10; ++i)
|
||||
{
|
||||
float32 y2 = hs[i];
|
||||
shape.Set(b2Vec2(x, y1), b2Vec2(x + dx, y2));
|
||||
ground->CreateFixture(&fd);
|
||||
y1 = y2;
|
||||
x += dx;
|
||||
}
|
||||
|
||||
for (int32 i = 0; i < 10; ++i)
|
||||
{
|
||||
float32 y2 = hs[i];
|
||||
shape.Set(b2Vec2(x, y1), b2Vec2(x + dx, y2));
|
||||
ground->CreateFixture(&fd);
|
||||
y1 = y2;
|
||||
x += dx;
|
||||
}
|
||||
|
||||
shape.Set(b2Vec2(x, 0.0f), b2Vec2(x + 40.0f, 0.0f));
|
||||
ground->CreateFixture(&fd);
|
||||
|
||||
x += 80.0f;
|
||||
shape.Set(b2Vec2(x, 0.0f), b2Vec2(x + 40.0f, 0.0f));
|
||||
ground->CreateFixture(&fd);
|
||||
|
||||
x += 40.0f;
|
||||
shape.Set(b2Vec2(x, 0.0f), b2Vec2(x + 10.0f, 5.0f));
|
||||
ground->CreateFixture(&fd);
|
||||
|
||||
x += 20.0f;
|
||||
shape.Set(b2Vec2(x, 0.0f), b2Vec2(x + 40.0f, 0.0f));
|
||||
ground->CreateFixture(&fd);
|
||||
|
||||
x += 40.0f;
|
||||
shape.Set(b2Vec2(x, 0.0f), b2Vec2(x, 20.0f));
|
||||
ground->CreateFixture(&fd);
|
||||
}
|
||||
|
||||
// Teeter
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(140.0f, 1.0f);
|
||||
bd.type = b2_dynamicBody;
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
b2PolygonShape box;
|
||||
box.SetAsBox(10.0f, 0.25f);
|
||||
body->CreateFixture(&box, 1.0f);
|
||||
|
||||
b2RevoluteJointDef jd;
|
||||
jd.Initialize(ground, body, body->GetPosition());
|
||||
jd.lowerAngle = -8.0f * b2_pi / 180.0f;
|
||||
jd.upperAngle = 8.0f * b2_pi / 180.0f;
|
||||
jd.enableLimit = true;
|
||||
m_world->CreateJoint(&jd);
|
||||
|
||||
body->ApplyAngularImpulse(100.0f);
|
||||
}
|
||||
|
||||
// Bridge
|
||||
{
|
||||
int32 N = 20;
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(1.0f, 0.125f);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 1.0f;
|
||||
fd.friction = 0.6f;
|
||||
|
||||
b2RevoluteJointDef jd;
|
||||
|
||||
b2Body* prevBody = ground;
|
||||
for (int32 i = 0; i < N; ++i)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(161.0f + 2.0f * i, -0.125f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&fd);
|
||||
|
||||
b2Vec2 anchor(160.0f + 2.0f * i, -0.125f);
|
||||
jd.Initialize(prevBody, body, anchor);
|
||||
m_world->CreateJoint(&jd);
|
||||
|
||||
prevBody = body;
|
||||
}
|
||||
|
||||
b2Vec2 anchor(160.0f + 2.0f * N, -0.125f);
|
||||
jd.Initialize(prevBody, ground, anchor);
|
||||
m_world->CreateJoint(&jd);
|
||||
}
|
||||
|
||||
// Boxes
|
||||
{
|
||||
b2PolygonShape box;
|
||||
box.SetAsBox(0.5f, 0.5f);
|
||||
|
||||
b2Body* body = NULL;
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
|
||||
bd.position.Set(230.0f, 0.5f);
|
||||
body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&box, 0.5f);
|
||||
|
||||
bd.position.Set(230.0f, 1.5f);
|
||||
body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&box, 0.5f);
|
||||
|
||||
bd.position.Set(230.0f, 2.5f);
|
||||
body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&box, 0.5f);
|
||||
|
||||
bd.position.Set(230.0f, 3.5f);
|
||||
body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&box, 0.5f);
|
||||
|
||||
bd.position.Set(230.0f, 4.5f);
|
||||
body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&box, 0.5f);
|
||||
}
|
||||
|
||||
// Car
|
||||
{
|
||||
b2PolygonShape chassis;
|
||||
b2Vec2 vertices[8];
|
||||
vertices[0].Set(-1.5f, -0.5f);
|
||||
vertices[1].Set(1.5f, -0.5f);
|
||||
vertices[2].Set(1.5f, 0.0f);
|
||||
vertices[3].Set(0.0f, 0.9f);
|
||||
vertices[4].Set(-1.15f, 0.9f);
|
||||
vertices[5].Set(-1.5f, 0.2f);
|
||||
chassis.Set(vertices, 6);
|
||||
|
||||
b2CircleShape circle;
|
||||
circle.m_radius = 0.4f;
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(0.0f, 1.0f);
|
||||
m_car = m_world->CreateBody(&bd);
|
||||
m_car->CreateFixture(&chassis, 1.0f);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &circle;
|
||||
fd.density = 1.0f;
|
||||
fd.friction = 0.9f;
|
||||
|
||||
bd.position.Set(-1.0f, 0.35f);
|
||||
m_wheel1 = m_world->CreateBody(&bd);
|
||||
m_wheel1->CreateFixture(&fd);
|
||||
|
||||
bd.position.Set(1.0f, 0.4f);
|
||||
m_wheel2 = m_world->CreateBody(&bd);
|
||||
m_wheel2->CreateFixture(&fd);
|
||||
|
||||
b2WheelJointDef jd;
|
||||
b2Vec2 axis(0.0f, 1.0f);
|
||||
|
||||
jd.Initialize(m_car, m_wheel1, m_wheel1->GetPosition(), axis);
|
||||
jd.motorSpeed = 0.0f;
|
||||
jd.maxMotorTorque = 20.0f;
|
||||
jd.enableMotor = true;
|
||||
jd.frequencyHz = m_hz;
|
||||
jd.dampingRatio = m_zeta;
|
||||
m_spring1 = (b2WheelJoint*)m_world->CreateJoint(&jd);
|
||||
|
||||
jd.Initialize(m_car, m_wheel2, m_wheel2->GetPosition(), axis);
|
||||
jd.motorSpeed = 0.0f;
|
||||
jd.maxMotorTorque = 10.0f;
|
||||
jd.enableMotor = false;
|
||||
jd.frequencyHz = m_hz;
|
||||
jd.dampingRatio = m_zeta;
|
||||
m_spring2 = (b2WheelJoint*)m_world->CreateJoint(&jd);
|
||||
}
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case 'a':
|
||||
m_spring1->SetMotorSpeed(m_speed);
|
||||
break;
|
||||
|
||||
case 's':
|
||||
m_spring1->SetMotorSpeed(0.0f);
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
m_spring1->SetMotorSpeed(-m_speed);
|
||||
break;
|
||||
|
||||
case 'q':
|
||||
m_hz = b2Max(0.0f, m_hz - 1.0f);
|
||||
m_spring1->SetSpringFrequencyHz(m_hz);
|
||||
m_spring2->SetSpringFrequencyHz(m_hz);
|
||||
break;
|
||||
|
||||
case 'e':
|
||||
m_hz += 1.0f;
|
||||
m_spring1->SetSpringFrequencyHz(m_hz);
|
||||
m_spring2->SetSpringFrequencyHz(m_hz);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
m_debugDraw.DrawString(5, m_textLine, "Keys: left = a, brake = s, right = d, hz down = q, hz up = e");
|
||||
m_textLine += 15;
|
||||
m_debugDraw.DrawString(5, m_textLine, "frequency = %g hz, damping ratio = %g", m_hz, m_zeta);
|
||||
m_textLine += 15;
|
||||
|
||||
settings->viewCenter.x = m_car->GetPosition().x;
|
||||
Test::Step(settings);
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new Car;
|
||||
}
|
||||
|
||||
b2Body* m_car;
|
||||
b2Body* m_wheel1;
|
||||
b2Body* m_wheel2;
|
||||
|
||||
float32 m_hz;
|
||||
float32 m_zeta;
|
||||
float32 m_speed;
|
||||
b2WheelJoint* m_spring1;
|
||||
b2WheelJoint* m_spring2;
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2006-2011 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef CAR_H
|
||||
#define CAR_H
|
||||
|
||||
// This is a fun demo that shows off the wheel joint
|
||||
class Car : public Test
|
||||
{
|
||||
public:
|
||||
Car()
|
||||
{
|
||||
m_hz = 4.0f;
|
||||
m_zeta = 0.7f;
|
||||
m_speed = 50.0f;
|
||||
|
||||
b2Body* ground = NULL;
|
||||
{
|
||||
b2BodyDef bd;
|
||||
ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 0.0f;
|
||||
fd.friction = 0.6f;
|
||||
|
||||
shape.Set(b2Vec2(-20.0f, 0.0f), b2Vec2(20.0f, 0.0f));
|
||||
ground->CreateFixture(&fd);
|
||||
|
||||
float32 hs[10] = {0.25f, 1.0f, 4.0f, 0.0f, 0.0f, -1.0f, -2.0f, -2.0f, -1.25f, 0.0f};
|
||||
|
||||
float32 x = 20.0f, y1 = 0.0f, dx = 5.0f;
|
||||
|
||||
for (int32 i = 0; i < 10; ++i)
|
||||
{
|
||||
float32 y2 = hs[i];
|
||||
shape.Set(b2Vec2(x, y1), b2Vec2(x + dx, y2));
|
||||
ground->CreateFixture(&fd);
|
||||
y1 = y2;
|
||||
x += dx;
|
||||
}
|
||||
|
||||
for (int32 i = 0; i < 10; ++i)
|
||||
{
|
||||
float32 y2 = hs[i];
|
||||
shape.Set(b2Vec2(x, y1), b2Vec2(x + dx, y2));
|
||||
ground->CreateFixture(&fd);
|
||||
y1 = y2;
|
||||
x += dx;
|
||||
}
|
||||
|
||||
shape.Set(b2Vec2(x, 0.0f), b2Vec2(x + 40.0f, 0.0f));
|
||||
ground->CreateFixture(&fd);
|
||||
|
||||
x += 80.0f;
|
||||
shape.Set(b2Vec2(x, 0.0f), b2Vec2(x + 40.0f, 0.0f));
|
||||
ground->CreateFixture(&fd);
|
||||
|
||||
x += 40.0f;
|
||||
shape.Set(b2Vec2(x, 0.0f), b2Vec2(x + 10.0f, 5.0f));
|
||||
ground->CreateFixture(&fd);
|
||||
|
||||
x += 20.0f;
|
||||
shape.Set(b2Vec2(x, 0.0f), b2Vec2(x + 40.0f, 0.0f));
|
||||
ground->CreateFixture(&fd);
|
||||
|
||||
x += 40.0f;
|
||||
shape.Set(b2Vec2(x, 0.0f), b2Vec2(x, 20.0f));
|
||||
ground->CreateFixture(&fd);
|
||||
}
|
||||
|
||||
// Teeter
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(140.0f, 1.0f);
|
||||
bd.type = b2_dynamicBody;
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
b2PolygonShape box;
|
||||
box.SetAsBox(10.0f, 0.25f);
|
||||
body->CreateFixture(&box, 1.0f);
|
||||
|
||||
b2RevoluteJointDef jd;
|
||||
jd.Initialize(ground, body, body->GetPosition());
|
||||
jd.lowerAngle = -8.0f * b2_pi / 180.0f;
|
||||
jd.upperAngle = 8.0f * b2_pi / 180.0f;
|
||||
jd.enableLimit = true;
|
||||
m_world->CreateJoint(&jd);
|
||||
|
||||
body->ApplyAngularImpulse(100.0f);
|
||||
}
|
||||
|
||||
// Bridge
|
||||
{
|
||||
int32 N = 20;
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(1.0f, 0.125f);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 1.0f;
|
||||
fd.friction = 0.6f;
|
||||
|
||||
b2RevoluteJointDef jd;
|
||||
|
||||
b2Body* prevBody = ground;
|
||||
for (int32 i = 0; i < N; ++i)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(161.0f + 2.0f * i, -0.125f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&fd);
|
||||
|
||||
b2Vec2 anchor(160.0f + 2.0f * i, -0.125f);
|
||||
jd.Initialize(prevBody, body, anchor);
|
||||
m_world->CreateJoint(&jd);
|
||||
|
||||
prevBody = body;
|
||||
}
|
||||
|
||||
b2Vec2 anchor(160.0f + 2.0f * N, -0.125f);
|
||||
jd.Initialize(prevBody, ground, anchor);
|
||||
m_world->CreateJoint(&jd);
|
||||
}
|
||||
|
||||
// Boxes
|
||||
{
|
||||
b2PolygonShape box;
|
||||
box.SetAsBox(0.5f, 0.5f);
|
||||
|
||||
b2Body* body = NULL;
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
|
||||
bd.position.Set(230.0f, 0.5f);
|
||||
body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&box, 0.5f);
|
||||
|
||||
bd.position.Set(230.0f, 1.5f);
|
||||
body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&box, 0.5f);
|
||||
|
||||
bd.position.Set(230.0f, 2.5f);
|
||||
body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&box, 0.5f);
|
||||
|
||||
bd.position.Set(230.0f, 3.5f);
|
||||
body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&box, 0.5f);
|
||||
|
||||
bd.position.Set(230.0f, 4.5f);
|
||||
body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&box, 0.5f);
|
||||
}
|
||||
|
||||
// Car
|
||||
{
|
||||
b2PolygonShape chassis;
|
||||
b2Vec2 vertices[8];
|
||||
vertices[0].Set(-1.5f, -0.5f);
|
||||
vertices[1].Set(1.5f, -0.5f);
|
||||
vertices[2].Set(1.5f, 0.0f);
|
||||
vertices[3].Set(0.0f, 0.9f);
|
||||
vertices[4].Set(-1.15f, 0.9f);
|
||||
vertices[5].Set(-1.5f, 0.2f);
|
||||
chassis.Set(vertices, 6);
|
||||
|
||||
b2CircleShape circle;
|
||||
circle.m_radius = 0.4f;
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(0.0f, 1.0f);
|
||||
m_car = m_world->CreateBody(&bd);
|
||||
m_car->CreateFixture(&chassis, 1.0f);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &circle;
|
||||
fd.density = 1.0f;
|
||||
fd.friction = 0.9f;
|
||||
|
||||
bd.position.Set(-1.0f, 0.35f);
|
||||
m_wheel1 = m_world->CreateBody(&bd);
|
||||
m_wheel1->CreateFixture(&fd);
|
||||
|
||||
bd.position.Set(1.0f, 0.4f);
|
||||
m_wheel2 = m_world->CreateBody(&bd);
|
||||
m_wheel2->CreateFixture(&fd);
|
||||
|
||||
b2WheelJointDef jd;
|
||||
b2Vec2 axis(0.0f, 1.0f);
|
||||
|
||||
jd.Initialize(m_car, m_wheel1, m_wheel1->GetPosition(), axis);
|
||||
jd.motorSpeed = 0.0f;
|
||||
jd.maxMotorTorque = 20.0f;
|
||||
jd.enableMotor = true;
|
||||
jd.frequencyHz = m_hz;
|
||||
jd.dampingRatio = m_zeta;
|
||||
m_spring1 = (b2WheelJoint*)m_world->CreateJoint(&jd);
|
||||
|
||||
jd.Initialize(m_car, m_wheel2, m_wheel2->GetPosition(), axis);
|
||||
jd.motorSpeed = 0.0f;
|
||||
jd.maxMotorTorque = 10.0f;
|
||||
jd.enableMotor = false;
|
||||
jd.frequencyHz = m_hz;
|
||||
jd.dampingRatio = m_zeta;
|
||||
m_spring2 = (b2WheelJoint*)m_world->CreateJoint(&jd);
|
||||
}
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case 'a':
|
||||
m_spring1->SetMotorSpeed(m_speed);
|
||||
break;
|
||||
|
||||
case 's':
|
||||
m_spring1->SetMotorSpeed(0.0f);
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
m_spring1->SetMotorSpeed(-m_speed);
|
||||
break;
|
||||
|
||||
case 'q':
|
||||
m_hz = b2Max(0.0f, m_hz - 1.0f);
|
||||
m_spring1->SetSpringFrequencyHz(m_hz);
|
||||
m_spring2->SetSpringFrequencyHz(m_hz);
|
||||
break;
|
||||
|
||||
case 'e':
|
||||
m_hz += 1.0f;
|
||||
m_spring1->SetSpringFrequencyHz(m_hz);
|
||||
m_spring2->SetSpringFrequencyHz(m_hz);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
m_debugDraw.DrawString(5, m_textLine, "Keys: left = a, brake = s, right = d, hz down = q, hz up = e");
|
||||
m_textLine += 15;
|
||||
m_debugDraw.DrawString(5, m_textLine, "frequency = %g hz, damping ratio = %g", m_hz, m_zeta);
|
||||
m_textLine += 15;
|
||||
|
||||
settings->viewCenter.x = m_car->GetPosition().x;
|
||||
Test::Step(settings);
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new Car;
|
||||
}
|
||||
|
||||
b2Body* m_car;
|
||||
b2Body* m_wheel1;
|
||||
b2Body* m_wheel2;
|
||||
|
||||
float32 m_hz;
|
||||
float32 m_zeta;
|
||||
float32 m_speed;
|
||||
b2WheelJoint* m_spring1;
|
||||
b2WheelJoint* m_spring2;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,74 +1,74 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef CHAIN_H
|
||||
#define CHAIN_H
|
||||
|
||||
class Chain : public Test
|
||||
{
|
||||
public:
|
||||
Chain()
|
||||
{
|
||||
b2Body* ground = {};
|
||||
{
|
||||
b2BodyDef bd;
|
||||
ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.6f, 0.125f);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 20.0f;
|
||||
fd.friction = 0.2f;
|
||||
|
||||
b2RevoluteJointDef jd;
|
||||
jd.collideConnected = false;
|
||||
|
||||
const float32 y = 25.0f;
|
||||
b2Body* prevBody = ground;
|
||||
for (int i = 0; i < 30; ++i)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(0.5f + i, y);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&fd);
|
||||
|
||||
b2Vec2 anchor(float32(i), y);
|
||||
jd.Initialize(prevBody, body, anchor);
|
||||
m_world->CreateJoint(&jd);
|
||||
|
||||
prevBody = body;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new Chain;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef CHAIN_H
|
||||
#define CHAIN_H
|
||||
|
||||
class Chain : public Test
|
||||
{
|
||||
public:
|
||||
Chain()
|
||||
{
|
||||
b2Body* ground = {};
|
||||
{
|
||||
b2BodyDef bd;
|
||||
ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.6f, 0.125f);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 20.0f;
|
||||
fd.friction = 0.2f;
|
||||
|
||||
b2RevoluteJointDef jd;
|
||||
jd.collideConnected = false;
|
||||
|
||||
const float32 y = 25.0f;
|
||||
b2Body* prevBody = ground;
|
||||
for (int i = 0; i < 30; ++i)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(0.5f + i, y);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&fd);
|
||||
|
||||
b2Vec2 anchor(float32(i), y);
|
||||
jd.Initialize(prevBody, body, anchor);
|
||||
m_world->CreateJoint(&jd);
|
||||
|
||||
prevBody = body;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new Chain;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,253 +1,253 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2010 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef CHARACTER_COLLISION_H
|
||||
#define CHARACTER_COLLISION_H
|
||||
|
||||
/// This is a test of typical character collision scenarios. This does not
|
||||
/// show how you should implement a character in your application.
|
||||
/// Instead this is used to test smooth collision on edge chains.
|
||||
class CharacterCollision : public Test
|
||||
{
|
||||
public:
|
||||
CharacterCollision()
|
||||
{
|
||||
// Ground body
|
||||
{
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-20.0f, 0.0f), b2Vec2(20.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
// Collinear edges with no adjacency information.
|
||||
// This shows the problematic case where a box shape can hit
|
||||
// an internal vertex.
|
||||
{
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-8.0f, 1.0f), b2Vec2(-6.0f, 1.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
shape.Set(b2Vec2(-6.0f, 1.0f), b2Vec2(-4.0f, 1.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
shape.Set(b2Vec2(-4.0f, 1.0f), b2Vec2(-2.0f, 1.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
// Chain shape
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.angle = 0.25f * b2_pi;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2Vec2 vs[4];
|
||||
vs[0].Set(5.0f, 7.0f);
|
||||
vs[1].Set(6.0f, 8.0f);
|
||||
vs[2].Set(7.0f, 8.0f);
|
||||
vs[3].Set(8.0f, 7.0f);
|
||||
b2ChainShape shape;
|
||||
shape.CreateChain(vs, 4);
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
// Square tiles. This shows that adjacency shapes may
|
||||
// have non-smooth collision. There is no solution
|
||||
// to this problem.
|
||||
{
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(1.0f, 1.0f, b2Vec2(4.0f, 3.0f), 0.0f);
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
shape.SetAsBox(1.0f, 1.0f, b2Vec2(6.0f, 3.0f), 0.0f);
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
shape.SetAsBox(1.0f, 1.0f, b2Vec2(8.0f, 3.0f), 0.0f);
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
// Square made from an edge loop. Collision should be smooth.
|
||||
{
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2Vec2 vs[4];
|
||||
vs[0].Set(-1.0f, 3.0f);
|
||||
vs[1].Set(1.0f, 3.0f);
|
||||
vs[2].Set(1.0f, 5.0f);
|
||||
vs[3].Set(-1.0f, 5.0f);
|
||||
b2ChainShape shape;
|
||||
shape.CreateLoop(vs, 4);
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
// Edge loop. Collision should be smooth.
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(-10.0f, 4.0f);
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2Vec2 vs[10];
|
||||
vs[0].Set(0.0f, 0.0f);
|
||||
vs[1].Set(6.0f, 0.0f);
|
||||
vs[2].Set(6.0f, 2.0f);
|
||||
vs[3].Set(4.0f, 1.0f);
|
||||
vs[4].Set(2.0f, 2.0f);
|
||||
vs[5].Set(0.0f, 2.0f);
|
||||
vs[6].Set(-2.0f, 2.0f);
|
||||
vs[7].Set(-4.0f, 3.0f);
|
||||
vs[8].Set(-6.0f, 2.0f);
|
||||
vs[9].Set(-6.0f, 0.0f);
|
||||
b2ChainShape shape;
|
||||
shape.CreateLoop(vs, 10);
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
// Square character 1
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(-3.0f, 8.0f);
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.fixedRotation = true;
|
||||
bd.allowSleep = false;
|
||||
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.5f, 0.5f);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 20.0f;
|
||||
body->CreateFixture(&fd);
|
||||
}
|
||||
|
||||
// Square character 2
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(-5.0f, 5.0f);
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.fixedRotation = true;
|
||||
bd.allowSleep = false;
|
||||
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.25f, 0.25f);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 20.0f;
|
||||
body->CreateFixture(&fd);
|
||||
}
|
||||
|
||||
// Hexagon character
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(-5.0f, 8.0f);
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.fixedRotation = true;
|
||||
bd.allowSleep = false;
|
||||
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
float32 angle = 0.0f;
|
||||
float32 delta = b2_pi / 3.0f;
|
||||
b2Vec2 vertices[6];
|
||||
for (int32 i = 0; i < 6; ++i)
|
||||
{
|
||||
vertices[i].Set(0.5f * cosf(angle), 0.5f * sinf(angle));
|
||||
angle += delta;
|
||||
}
|
||||
|
||||
b2PolygonShape shape;
|
||||
shape.Set(vertices, 6);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 20.0f;
|
||||
body->CreateFixture(&fd);
|
||||
}
|
||||
|
||||
// Circle character
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(3.0f, 5.0f);
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.fixedRotation = true;
|
||||
bd.allowSleep = false;
|
||||
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
b2CircleShape shape;
|
||||
shape.m_radius = 0.5f;
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 20.0f;
|
||||
body->CreateFixture(&fd);
|
||||
}
|
||||
|
||||
// Circle character
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(-7.0f, 6.0f);
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.allowSleep = false;
|
||||
|
||||
m_character = m_world->CreateBody(&bd);
|
||||
|
||||
b2CircleShape shape;
|
||||
shape.m_radius = 0.25f;
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 20.0f;
|
||||
fd.friction = 1.0f;
|
||||
m_character->CreateFixture(&fd);
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
b2Vec2 v = m_character->GetLinearVelocity();
|
||||
v.x = -5.0f;
|
||||
m_character->SetLinearVelocity(v);
|
||||
|
||||
Test::Step(settings);
|
||||
m_debugDraw.DrawString(5, m_textLine, "This tests various character collision shapes.");
|
||||
m_textLine += 15;
|
||||
m_debugDraw.DrawString(5, m_textLine, "Limitation: square and hexagon can snag on aligned boxes.");
|
||||
m_textLine += 15;
|
||||
m_debugDraw.DrawString(5, m_textLine, "Feature: edge chains have smooth collision inside and out.");
|
||||
m_textLine += 15;
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new CharacterCollision;
|
||||
}
|
||||
|
||||
b2Body* m_character;
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2006-2010 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef CHARACTER_COLLISION_H
|
||||
#define CHARACTER_COLLISION_H
|
||||
|
||||
/// This is a test of typical character collision scenarios. This does not
|
||||
/// show how you should implement a character in your application.
|
||||
/// Instead this is used to test smooth collision on edge chains.
|
||||
class CharacterCollision : public Test
|
||||
{
|
||||
public:
|
||||
CharacterCollision()
|
||||
{
|
||||
// Ground body
|
||||
{
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-20.0f, 0.0f), b2Vec2(20.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
// Collinear edges with no adjacency information.
|
||||
// This shows the problematic case where a box shape can hit
|
||||
// an internal vertex.
|
||||
{
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-8.0f, 1.0f), b2Vec2(-6.0f, 1.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
shape.Set(b2Vec2(-6.0f, 1.0f), b2Vec2(-4.0f, 1.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
shape.Set(b2Vec2(-4.0f, 1.0f), b2Vec2(-2.0f, 1.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
// Chain shape
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.angle = 0.25f * b2_pi;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2Vec2 vs[4];
|
||||
vs[0].Set(5.0f, 7.0f);
|
||||
vs[1].Set(6.0f, 8.0f);
|
||||
vs[2].Set(7.0f, 8.0f);
|
||||
vs[3].Set(8.0f, 7.0f);
|
||||
b2ChainShape shape;
|
||||
shape.CreateChain(vs, 4);
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
// Square tiles. This shows that adjacency shapes may
|
||||
// have non-smooth collision. There is no solution
|
||||
// to this problem.
|
||||
{
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(1.0f, 1.0f, b2Vec2(4.0f, 3.0f), 0.0f);
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
shape.SetAsBox(1.0f, 1.0f, b2Vec2(6.0f, 3.0f), 0.0f);
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
shape.SetAsBox(1.0f, 1.0f, b2Vec2(8.0f, 3.0f), 0.0f);
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
// Square made from an edge loop. Collision should be smooth.
|
||||
{
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2Vec2 vs[4];
|
||||
vs[0].Set(-1.0f, 3.0f);
|
||||
vs[1].Set(1.0f, 3.0f);
|
||||
vs[2].Set(1.0f, 5.0f);
|
||||
vs[3].Set(-1.0f, 5.0f);
|
||||
b2ChainShape shape;
|
||||
shape.CreateLoop(vs, 4);
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
// Edge loop. Collision should be smooth.
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(-10.0f, 4.0f);
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2Vec2 vs[10];
|
||||
vs[0].Set(0.0f, 0.0f);
|
||||
vs[1].Set(6.0f, 0.0f);
|
||||
vs[2].Set(6.0f, 2.0f);
|
||||
vs[3].Set(4.0f, 1.0f);
|
||||
vs[4].Set(2.0f, 2.0f);
|
||||
vs[5].Set(0.0f, 2.0f);
|
||||
vs[6].Set(-2.0f, 2.0f);
|
||||
vs[7].Set(-4.0f, 3.0f);
|
||||
vs[8].Set(-6.0f, 2.0f);
|
||||
vs[9].Set(-6.0f, 0.0f);
|
||||
b2ChainShape shape;
|
||||
shape.CreateLoop(vs, 10);
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
// Square character 1
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(-3.0f, 8.0f);
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.fixedRotation = true;
|
||||
bd.allowSleep = false;
|
||||
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.5f, 0.5f);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 20.0f;
|
||||
body->CreateFixture(&fd);
|
||||
}
|
||||
|
||||
// Square character 2
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(-5.0f, 5.0f);
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.fixedRotation = true;
|
||||
bd.allowSleep = false;
|
||||
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.25f, 0.25f);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 20.0f;
|
||||
body->CreateFixture(&fd);
|
||||
}
|
||||
|
||||
// Hexagon character
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(-5.0f, 8.0f);
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.fixedRotation = true;
|
||||
bd.allowSleep = false;
|
||||
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
float32 angle = 0.0f;
|
||||
float32 delta = b2_pi / 3.0f;
|
||||
b2Vec2 vertices[6];
|
||||
for (int32 i = 0; i < 6; ++i)
|
||||
{
|
||||
vertices[i].Set(0.5f * cosf(angle), 0.5f * sinf(angle));
|
||||
angle += delta;
|
||||
}
|
||||
|
||||
b2PolygonShape shape;
|
||||
shape.Set(vertices, 6);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 20.0f;
|
||||
body->CreateFixture(&fd);
|
||||
}
|
||||
|
||||
// Circle character
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(3.0f, 5.0f);
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.fixedRotation = true;
|
||||
bd.allowSleep = false;
|
||||
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
b2CircleShape shape;
|
||||
shape.m_radius = 0.5f;
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 20.0f;
|
||||
body->CreateFixture(&fd);
|
||||
}
|
||||
|
||||
// Circle character
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(-7.0f, 6.0f);
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.allowSleep = false;
|
||||
|
||||
m_character = m_world->CreateBody(&bd);
|
||||
|
||||
b2CircleShape shape;
|
||||
shape.m_radius = 0.25f;
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 20.0f;
|
||||
fd.friction = 1.0f;
|
||||
m_character->CreateFixture(&fd);
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
b2Vec2 v = m_character->GetLinearVelocity();
|
||||
v.x = -5.0f;
|
||||
m_character->SetLinearVelocity(v);
|
||||
|
||||
Test::Step(settings);
|
||||
m_debugDraw.DrawString(5, m_textLine, "This tests various character collision shapes.");
|
||||
m_textLine += 15;
|
||||
m_debugDraw.DrawString(5, m_textLine, "Limitation: square and hexagon can snag on aligned boxes.");
|
||||
m_textLine += 15;
|
||||
m_debugDraw.DrawString(5, m_textLine, "Feature: edge chains have smooth collision inside and out.");
|
||||
m_textLine += 15;
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new CharacterCollision;
|
||||
}
|
||||
|
||||
b2Body* m_character;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,176 +1,176 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef COLLISION_FILTERING_H
|
||||
#define COLLISION_FILTERING_H
|
||||
|
||||
// This is a test of collision filtering.
|
||||
// There is a triangle, a box, and a circle.
|
||||
// There are 6 shapes. 3 large and 3 small.
|
||||
// The 3 small ones always collide.
|
||||
// The 3 large ones never collide.
|
||||
// The boxes don't collide with triangles (except if both are small).
|
||||
const int16 k_smallGroup = 1;
|
||||
const int16 k_largeGroup = -1;
|
||||
|
||||
const uint16 k_defaultCategory = 0x0001;
|
||||
const uint16 k_triangleCategory = 0x0002;
|
||||
const uint16 k_boxCategory = 0x0004;
|
||||
const uint16 k_circleCategory = 0x0008;
|
||||
|
||||
const uint16 k_triangleMask = 0xFFFF;
|
||||
const uint16 k_boxMask = 0xFFFF ^ k_triangleCategory;
|
||||
const uint16 k_circleMask = 0xFFFF;
|
||||
|
||||
class CollisionFiltering : public Test
|
||||
{
|
||||
public:
|
||||
CollisionFiltering()
|
||||
{
|
||||
// Ground body
|
||||
{
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
|
||||
b2FixtureDef sd;
|
||||
sd.shape = &shape;
|
||||
sd.friction = 0.3f;
|
||||
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
ground->CreateFixture(&sd);
|
||||
}
|
||||
|
||||
// Small triangle
|
||||
b2Vec2 vertices[3];
|
||||
vertices[0].Set(-1.0f, 0.0f);
|
||||
vertices[1].Set(1.0f, 0.0f);
|
||||
vertices[2].Set(0.0f, 2.0f);
|
||||
b2PolygonShape polygon;
|
||||
polygon.Set(vertices, 3);
|
||||
|
||||
b2FixtureDef triangleShapeDef;
|
||||
triangleShapeDef.shape = &polygon;
|
||||
triangleShapeDef.density = 1.0f;
|
||||
|
||||
triangleShapeDef.filter.groupIndex = k_smallGroup;
|
||||
triangleShapeDef.filter.categoryBits = k_triangleCategory;
|
||||
triangleShapeDef.filter.maskBits = k_triangleMask;
|
||||
|
||||
b2BodyDef triangleBodyDef;
|
||||
triangleBodyDef.type = b2_dynamicBody;
|
||||
triangleBodyDef.position.Set(-5.0f, 2.0f);
|
||||
|
||||
b2Body* body1 = m_world->CreateBody(&triangleBodyDef);
|
||||
body1->CreateFixture(&triangleShapeDef);
|
||||
|
||||
// Large triangle (recycle definitions)
|
||||
vertices[0] *= 2.0f;
|
||||
vertices[1] *= 2.0f;
|
||||
vertices[2] *= 2.0f;
|
||||
polygon.Set(vertices, 3);
|
||||
triangleShapeDef.filter.groupIndex = k_largeGroup;
|
||||
triangleBodyDef.position.Set(-5.0f, 6.0f);
|
||||
triangleBodyDef.fixedRotation = true; // look at me!
|
||||
|
||||
b2Body* body2 = m_world->CreateBody(&triangleBodyDef);
|
||||
body2->CreateFixture(&triangleShapeDef);
|
||||
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-5.0f, 10.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
b2PolygonShape p;
|
||||
p.SetAsBox(0.5f, 1.0f);
|
||||
body->CreateFixture(&p, 1.0f);
|
||||
|
||||
b2PrismaticJointDef jd;
|
||||
jd.bodyA = body2;
|
||||
jd.bodyB = body;
|
||||
jd.enableLimit = true;
|
||||
jd.localAnchorA.Set(0.0f, 4.0f);
|
||||
jd.localAnchorB.SetZero();
|
||||
jd.localAxisA.Set(0.0f, 1.0f);
|
||||
jd.lowerTranslation = -1.0f;
|
||||
jd.upperTranslation = 1.0f;
|
||||
|
||||
m_world->CreateJoint(&jd);
|
||||
}
|
||||
|
||||
// Small box
|
||||
polygon.SetAsBox(1.0f, 0.5f);
|
||||
b2FixtureDef boxShapeDef;
|
||||
boxShapeDef.shape = &polygon;
|
||||
boxShapeDef.density = 1.0f;
|
||||
boxShapeDef.restitution = 0.1f;
|
||||
|
||||
boxShapeDef.filter.groupIndex = k_smallGroup;
|
||||
boxShapeDef.filter.categoryBits = k_boxCategory;
|
||||
boxShapeDef.filter.maskBits = k_boxMask;
|
||||
|
||||
b2BodyDef boxBodyDef;
|
||||
boxBodyDef.type = b2_dynamicBody;
|
||||
boxBodyDef.position.Set(0.0f, 2.0f);
|
||||
|
||||
b2Body* body3 = m_world->CreateBody(&boxBodyDef);
|
||||
body3->CreateFixture(&boxShapeDef);
|
||||
|
||||
// Large box (recycle definitions)
|
||||
polygon.SetAsBox(2.0f, 1.0f);
|
||||
boxShapeDef.filter.groupIndex = k_largeGroup;
|
||||
boxBodyDef.position.Set(0.0f, 6.0f);
|
||||
|
||||
b2Body* body4 = m_world->CreateBody(&boxBodyDef);
|
||||
body4->CreateFixture(&boxShapeDef);
|
||||
|
||||
// Small circle
|
||||
b2CircleShape circle;
|
||||
circle.m_radius = 1.0f;
|
||||
|
||||
b2FixtureDef circleShapeDef;
|
||||
circleShapeDef.shape = &circle;
|
||||
circleShapeDef.density = 1.0f;
|
||||
|
||||
circleShapeDef.filter.groupIndex = k_smallGroup;
|
||||
circleShapeDef.filter.categoryBits = k_circleCategory;
|
||||
circleShapeDef.filter.maskBits = k_circleMask;
|
||||
|
||||
b2BodyDef circleBodyDef;
|
||||
circleBodyDef.type = b2_dynamicBody;
|
||||
circleBodyDef.position.Set(5.0f, 2.0f);
|
||||
|
||||
b2Body* body5 = m_world->CreateBody(&circleBodyDef);
|
||||
body5->CreateFixture(&circleShapeDef);
|
||||
|
||||
// Large circle
|
||||
circle.m_radius *= 2.0f;
|
||||
circleShapeDef.filter.groupIndex = k_largeGroup;
|
||||
circleBodyDef.position.Set(5.0f, 6.0f);
|
||||
|
||||
b2Body* body6 = m_world->CreateBody(&circleBodyDef);
|
||||
body6->CreateFixture(&circleShapeDef);
|
||||
}
|
||||
static Test* Create()
|
||||
{
|
||||
return new CollisionFiltering;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef COLLISION_FILTERING_H
|
||||
#define COLLISION_FILTERING_H
|
||||
|
||||
// This is a test of collision filtering.
|
||||
// There is a triangle, a box, and a circle.
|
||||
// There are 6 shapes. 3 large and 3 small.
|
||||
// The 3 small ones always collide.
|
||||
// The 3 large ones never collide.
|
||||
// The boxes don't collide with triangles (except if both are small).
|
||||
const int16 k_smallGroup = 1;
|
||||
const int16 k_largeGroup = -1;
|
||||
|
||||
const uint16 k_defaultCategory = 0x0001;
|
||||
const uint16 k_triangleCategory = 0x0002;
|
||||
const uint16 k_boxCategory = 0x0004;
|
||||
const uint16 k_circleCategory = 0x0008;
|
||||
|
||||
const uint16 k_triangleMask = 0xFFFF;
|
||||
const uint16 k_boxMask = 0xFFFF ^ k_triangleCategory;
|
||||
const uint16 k_circleMask = 0xFFFF;
|
||||
|
||||
class CollisionFiltering : public Test
|
||||
{
|
||||
public:
|
||||
CollisionFiltering()
|
||||
{
|
||||
// Ground body
|
||||
{
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
|
||||
b2FixtureDef sd;
|
||||
sd.shape = &shape;
|
||||
sd.friction = 0.3f;
|
||||
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
ground->CreateFixture(&sd);
|
||||
}
|
||||
|
||||
// Small triangle
|
||||
b2Vec2 vertices[3];
|
||||
vertices[0].Set(-1.0f, 0.0f);
|
||||
vertices[1].Set(1.0f, 0.0f);
|
||||
vertices[2].Set(0.0f, 2.0f);
|
||||
b2PolygonShape polygon;
|
||||
polygon.Set(vertices, 3);
|
||||
|
||||
b2FixtureDef triangleShapeDef;
|
||||
triangleShapeDef.shape = &polygon;
|
||||
triangleShapeDef.density = 1.0f;
|
||||
|
||||
triangleShapeDef.filter.groupIndex = k_smallGroup;
|
||||
triangleShapeDef.filter.categoryBits = k_triangleCategory;
|
||||
triangleShapeDef.filter.maskBits = k_triangleMask;
|
||||
|
||||
b2BodyDef triangleBodyDef;
|
||||
triangleBodyDef.type = b2_dynamicBody;
|
||||
triangleBodyDef.position.Set(-5.0f, 2.0f);
|
||||
|
||||
b2Body* body1 = m_world->CreateBody(&triangleBodyDef);
|
||||
body1->CreateFixture(&triangleShapeDef);
|
||||
|
||||
// Large triangle (recycle definitions)
|
||||
vertices[0] *= 2.0f;
|
||||
vertices[1] *= 2.0f;
|
||||
vertices[2] *= 2.0f;
|
||||
polygon.Set(vertices, 3);
|
||||
triangleShapeDef.filter.groupIndex = k_largeGroup;
|
||||
triangleBodyDef.position.Set(-5.0f, 6.0f);
|
||||
triangleBodyDef.fixedRotation = true; // look at me!
|
||||
|
||||
b2Body* body2 = m_world->CreateBody(&triangleBodyDef);
|
||||
body2->CreateFixture(&triangleShapeDef);
|
||||
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-5.0f, 10.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
b2PolygonShape p;
|
||||
p.SetAsBox(0.5f, 1.0f);
|
||||
body->CreateFixture(&p, 1.0f);
|
||||
|
||||
b2PrismaticJointDef jd;
|
||||
jd.bodyA = body2;
|
||||
jd.bodyB = body;
|
||||
jd.enableLimit = true;
|
||||
jd.localAnchorA.Set(0.0f, 4.0f);
|
||||
jd.localAnchorB.SetZero();
|
||||
jd.localAxisA.Set(0.0f, 1.0f);
|
||||
jd.lowerTranslation = -1.0f;
|
||||
jd.upperTranslation = 1.0f;
|
||||
|
||||
m_world->CreateJoint(&jd);
|
||||
}
|
||||
|
||||
// Small box
|
||||
polygon.SetAsBox(1.0f, 0.5f);
|
||||
b2FixtureDef boxShapeDef;
|
||||
boxShapeDef.shape = &polygon;
|
||||
boxShapeDef.density = 1.0f;
|
||||
boxShapeDef.restitution = 0.1f;
|
||||
|
||||
boxShapeDef.filter.groupIndex = k_smallGroup;
|
||||
boxShapeDef.filter.categoryBits = k_boxCategory;
|
||||
boxShapeDef.filter.maskBits = k_boxMask;
|
||||
|
||||
b2BodyDef boxBodyDef;
|
||||
boxBodyDef.type = b2_dynamicBody;
|
||||
boxBodyDef.position.Set(0.0f, 2.0f);
|
||||
|
||||
b2Body* body3 = m_world->CreateBody(&boxBodyDef);
|
||||
body3->CreateFixture(&boxShapeDef);
|
||||
|
||||
// Large box (recycle definitions)
|
||||
polygon.SetAsBox(2.0f, 1.0f);
|
||||
boxShapeDef.filter.groupIndex = k_largeGroup;
|
||||
boxBodyDef.position.Set(0.0f, 6.0f);
|
||||
|
||||
b2Body* body4 = m_world->CreateBody(&boxBodyDef);
|
||||
body4->CreateFixture(&boxShapeDef);
|
||||
|
||||
// Small circle
|
||||
b2CircleShape circle;
|
||||
circle.m_radius = 1.0f;
|
||||
|
||||
b2FixtureDef circleShapeDef;
|
||||
circleShapeDef.shape = &circle;
|
||||
circleShapeDef.density = 1.0f;
|
||||
|
||||
circleShapeDef.filter.groupIndex = k_smallGroup;
|
||||
circleShapeDef.filter.categoryBits = k_circleCategory;
|
||||
circleShapeDef.filter.maskBits = k_circleMask;
|
||||
|
||||
b2BodyDef circleBodyDef;
|
||||
circleBodyDef.type = b2_dynamicBody;
|
||||
circleBodyDef.position.Set(5.0f, 2.0f);
|
||||
|
||||
b2Body* body5 = m_world->CreateBody(&circleBodyDef);
|
||||
body5->CreateFixture(&circleShapeDef);
|
||||
|
||||
// Large circle
|
||||
circle.m_radius *= 2.0f;
|
||||
circleShapeDef.filter.groupIndex = k_largeGroup;
|
||||
circleBodyDef.position.Set(5.0f, 6.0f);
|
||||
|
||||
b2Body* body6 = m_world->CreateBody(&circleBodyDef);
|
||||
body6->CreateFixture(&circleShapeDef);
|
||||
}
|
||||
static Test* Create()
|
||||
{
|
||||
return new CollisionFiltering;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,188 +1,188 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef COLLISION_PROCESSING_H
|
||||
#define COLLISION_PROCESSING_H
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
// This test shows collision processing and tests
|
||||
// deferred body destruction.
|
||||
class CollisionProcessing : public Test
|
||||
{
|
||||
public:
|
||||
CollisionProcessing()
|
||||
{
|
||||
// Ground body
|
||||
{
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-50.0f, 0.0f), b2Vec2(50.0f, 0.0f));
|
||||
|
||||
b2FixtureDef sd;
|
||||
sd.shape = &shape;;
|
||||
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
ground->CreateFixture(&sd);
|
||||
}
|
||||
|
||||
float32 xLo = -5.0f, xHi = 5.0f;
|
||||
float32 yLo = 2.0f, yHi = 35.0f;
|
||||
|
||||
// Small triangle
|
||||
b2Vec2 vertices[3];
|
||||
vertices[0].Set(-1.0f, 0.0f);
|
||||
vertices[1].Set(1.0f, 0.0f);
|
||||
vertices[2].Set(0.0f, 2.0f);
|
||||
|
||||
b2PolygonShape polygon;
|
||||
polygon.Set(vertices, 3);
|
||||
|
||||
b2FixtureDef triangleShapeDef;
|
||||
triangleShapeDef.shape = &polygon;
|
||||
triangleShapeDef.density = 1.0f;
|
||||
|
||||
b2BodyDef triangleBodyDef;
|
||||
triangleBodyDef.type = b2_dynamicBody;
|
||||
triangleBodyDef.position.Set(RandomFloat(xLo, xHi), RandomFloat(yLo, yHi));
|
||||
|
||||
b2Body* body1 = m_world->CreateBody(&triangleBodyDef);
|
||||
body1->CreateFixture(&triangleShapeDef);
|
||||
|
||||
// Large triangle (recycle definitions)
|
||||
vertices[0] *= 2.0f;
|
||||
vertices[1] *= 2.0f;
|
||||
vertices[2] *= 2.0f;
|
||||
polygon.Set(vertices, 3);
|
||||
|
||||
triangleBodyDef.position.Set(RandomFloat(xLo, xHi), RandomFloat(yLo, yHi));
|
||||
|
||||
b2Body* body2 = m_world->CreateBody(&triangleBodyDef);
|
||||
body2->CreateFixture(&triangleShapeDef);
|
||||
|
||||
// Small box
|
||||
polygon.SetAsBox(1.0f, 0.5f);
|
||||
|
||||
b2FixtureDef boxShapeDef;
|
||||
boxShapeDef.shape = &polygon;
|
||||
boxShapeDef.density = 1.0f;
|
||||
|
||||
b2BodyDef boxBodyDef;
|
||||
boxBodyDef.type = b2_dynamicBody;
|
||||
boxBodyDef.position.Set(RandomFloat(xLo, xHi), RandomFloat(yLo, yHi));
|
||||
|
||||
b2Body* body3 = m_world->CreateBody(&boxBodyDef);
|
||||
body3->CreateFixture(&boxShapeDef);
|
||||
|
||||
// Large box (recycle definitions)
|
||||
polygon.SetAsBox(2.0f, 1.0f);
|
||||
boxBodyDef.position.Set(RandomFloat(xLo, xHi), RandomFloat(yLo, yHi));
|
||||
|
||||
b2Body* body4 = m_world->CreateBody(&boxBodyDef);
|
||||
body4->CreateFixture(&boxShapeDef);
|
||||
|
||||
// Small circle
|
||||
b2CircleShape circle;
|
||||
circle.m_radius = 1.0f;
|
||||
|
||||
b2FixtureDef circleShapeDef;
|
||||
circleShapeDef.shape = &circle;
|
||||
circleShapeDef.density = 1.0f;
|
||||
|
||||
b2BodyDef circleBodyDef;
|
||||
circleBodyDef.type = b2_dynamicBody;
|
||||
circleBodyDef.position.Set(RandomFloat(xLo, xHi), RandomFloat(yLo, yHi));
|
||||
|
||||
b2Body* body5 = m_world->CreateBody(&circleBodyDef);
|
||||
body5->CreateFixture(&circleShapeDef);
|
||||
|
||||
// Large circle
|
||||
circle.m_radius *= 2.0f;
|
||||
circleBodyDef.position.Set(RandomFloat(xLo, xHi), RandomFloat(yLo, yHi));
|
||||
|
||||
b2Body* body6 = m_world->CreateBody(&circleBodyDef);
|
||||
body6->CreateFixture(&circleShapeDef);
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
Test::Step(settings);
|
||||
|
||||
// We are going to destroy some bodies according to contact
|
||||
// points. We must buffer the bodies that should be destroyed
|
||||
// because they may belong to multiple contact points.
|
||||
const int32 k_maxNuke = 6;
|
||||
b2Body* nuke[k_maxNuke];
|
||||
int32 nukeCount = 0;
|
||||
|
||||
// Traverse the contact results. Destroy bodies that
|
||||
// are touching heavier bodies.
|
||||
for (int32 i = 0; i < m_pointCount; ++i)
|
||||
{
|
||||
ContactPoint* point = m_points + i;
|
||||
|
||||
b2Body* body1 = point->fixtureA->GetBody();
|
||||
b2Body* body2 = point->fixtureB->GetBody();
|
||||
float32 mass1 = body1->GetMass();
|
||||
float32 mass2 = body2->GetMass();
|
||||
|
||||
if (mass1 > 0.0f && mass2 > 0.0f)
|
||||
{
|
||||
if (mass2 > mass1)
|
||||
{
|
||||
nuke[nukeCount++] = body1;
|
||||
}
|
||||
else
|
||||
{
|
||||
nuke[nukeCount++] = body2;
|
||||
}
|
||||
|
||||
if (nukeCount == k_maxNuke)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Sort the nuke array to group duplicates.
|
||||
std::sort(nuke, nuke + nukeCount);
|
||||
|
||||
// Destroy the bodies, skipping duplicates.
|
||||
int32 i = 0;
|
||||
while (i < nukeCount)
|
||||
{
|
||||
b2Body* b = nuke[i++];
|
||||
while (i < nukeCount && nuke[i] == b)
|
||||
{
|
||||
++i;
|
||||
}
|
||||
|
||||
if (b != m_bomb)
|
||||
{
|
||||
m_world->DestroyBody(b);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new CollisionProcessing;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef COLLISION_PROCESSING_H
|
||||
#define COLLISION_PROCESSING_H
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
// This test shows collision processing and tests
|
||||
// deferred body destruction.
|
||||
class CollisionProcessing : public Test
|
||||
{
|
||||
public:
|
||||
CollisionProcessing()
|
||||
{
|
||||
// Ground body
|
||||
{
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-50.0f, 0.0f), b2Vec2(50.0f, 0.0f));
|
||||
|
||||
b2FixtureDef sd;
|
||||
sd.shape = &shape;;
|
||||
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
ground->CreateFixture(&sd);
|
||||
}
|
||||
|
||||
float32 xLo = -5.0f, xHi = 5.0f;
|
||||
float32 yLo = 2.0f, yHi = 35.0f;
|
||||
|
||||
// Small triangle
|
||||
b2Vec2 vertices[3];
|
||||
vertices[0].Set(-1.0f, 0.0f);
|
||||
vertices[1].Set(1.0f, 0.0f);
|
||||
vertices[2].Set(0.0f, 2.0f);
|
||||
|
||||
b2PolygonShape polygon;
|
||||
polygon.Set(vertices, 3);
|
||||
|
||||
b2FixtureDef triangleShapeDef;
|
||||
triangleShapeDef.shape = &polygon;
|
||||
triangleShapeDef.density = 1.0f;
|
||||
|
||||
b2BodyDef triangleBodyDef;
|
||||
triangleBodyDef.type = b2_dynamicBody;
|
||||
triangleBodyDef.position.Set(RandomFloat(xLo, xHi), RandomFloat(yLo, yHi));
|
||||
|
||||
b2Body* body1 = m_world->CreateBody(&triangleBodyDef);
|
||||
body1->CreateFixture(&triangleShapeDef);
|
||||
|
||||
// Large triangle (recycle definitions)
|
||||
vertices[0] *= 2.0f;
|
||||
vertices[1] *= 2.0f;
|
||||
vertices[2] *= 2.0f;
|
||||
polygon.Set(vertices, 3);
|
||||
|
||||
triangleBodyDef.position.Set(RandomFloat(xLo, xHi), RandomFloat(yLo, yHi));
|
||||
|
||||
b2Body* body2 = m_world->CreateBody(&triangleBodyDef);
|
||||
body2->CreateFixture(&triangleShapeDef);
|
||||
|
||||
// Small box
|
||||
polygon.SetAsBox(1.0f, 0.5f);
|
||||
|
||||
b2FixtureDef boxShapeDef;
|
||||
boxShapeDef.shape = &polygon;
|
||||
boxShapeDef.density = 1.0f;
|
||||
|
||||
b2BodyDef boxBodyDef;
|
||||
boxBodyDef.type = b2_dynamicBody;
|
||||
boxBodyDef.position.Set(RandomFloat(xLo, xHi), RandomFloat(yLo, yHi));
|
||||
|
||||
b2Body* body3 = m_world->CreateBody(&boxBodyDef);
|
||||
body3->CreateFixture(&boxShapeDef);
|
||||
|
||||
// Large box (recycle definitions)
|
||||
polygon.SetAsBox(2.0f, 1.0f);
|
||||
boxBodyDef.position.Set(RandomFloat(xLo, xHi), RandomFloat(yLo, yHi));
|
||||
|
||||
b2Body* body4 = m_world->CreateBody(&boxBodyDef);
|
||||
body4->CreateFixture(&boxShapeDef);
|
||||
|
||||
// Small circle
|
||||
b2CircleShape circle;
|
||||
circle.m_radius = 1.0f;
|
||||
|
||||
b2FixtureDef circleShapeDef;
|
||||
circleShapeDef.shape = &circle;
|
||||
circleShapeDef.density = 1.0f;
|
||||
|
||||
b2BodyDef circleBodyDef;
|
||||
circleBodyDef.type = b2_dynamicBody;
|
||||
circleBodyDef.position.Set(RandomFloat(xLo, xHi), RandomFloat(yLo, yHi));
|
||||
|
||||
b2Body* body5 = m_world->CreateBody(&circleBodyDef);
|
||||
body5->CreateFixture(&circleShapeDef);
|
||||
|
||||
// Large circle
|
||||
circle.m_radius *= 2.0f;
|
||||
circleBodyDef.position.Set(RandomFloat(xLo, xHi), RandomFloat(yLo, yHi));
|
||||
|
||||
b2Body* body6 = m_world->CreateBody(&circleBodyDef);
|
||||
body6->CreateFixture(&circleShapeDef);
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
Test::Step(settings);
|
||||
|
||||
// We are going to destroy some bodies according to contact
|
||||
// points. We must buffer the bodies that should be destroyed
|
||||
// because they may belong to multiple contact points.
|
||||
const int32 k_maxNuke = 6;
|
||||
b2Body* nuke[k_maxNuke];
|
||||
int32 nukeCount = 0;
|
||||
|
||||
// Traverse the contact results. Destroy bodies that
|
||||
// are touching heavier bodies.
|
||||
for (int32 i = 0; i < m_pointCount; ++i)
|
||||
{
|
||||
ContactPoint* point = m_points + i;
|
||||
|
||||
b2Body* body1 = point->fixtureA->GetBody();
|
||||
b2Body* body2 = point->fixtureB->GetBody();
|
||||
float32 mass1 = body1->GetMass();
|
||||
float32 mass2 = body2->GetMass();
|
||||
|
||||
if (mass1 > 0.0f && mass2 > 0.0f)
|
||||
{
|
||||
if (mass2 > mass1)
|
||||
{
|
||||
nuke[nukeCount++] = body1;
|
||||
}
|
||||
else
|
||||
{
|
||||
nuke[nukeCount++] = body2;
|
||||
}
|
||||
|
||||
if (nukeCount == k_maxNuke)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Sort the nuke array to group duplicates.
|
||||
std::sort(nuke, nuke + nukeCount);
|
||||
|
||||
// Destroy the bodies, skipping duplicates.
|
||||
int32 i = 0;
|
||||
while (i < nukeCount)
|
||||
{
|
||||
b2Body* b = nuke[i++];
|
||||
while (i < nukeCount && nuke[i] == b)
|
||||
{
|
||||
++i;
|
||||
}
|
||||
|
||||
if (b != m_bomb)
|
||||
{
|
||||
m_world->DestroyBody(b);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new CollisionProcessing;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,143 +1,143 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef COMPOUND_SHAPES_H
|
||||
#define COMPOUND_SHAPES_H
|
||||
|
||||
// TODO_ERIN test joints on compounds.
|
||||
class CompoundShapes : public Test
|
||||
{
|
||||
public:
|
||||
CompoundShapes()
|
||||
{
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(0.0f, 0.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(50.0f, 0.0f), b2Vec2(-50.0f, 0.0f));
|
||||
|
||||
body->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2CircleShape circle1;
|
||||
circle1.m_radius = 0.5f;
|
||||
circle1.m_p.Set(-0.5f, 0.5f);
|
||||
|
||||
b2CircleShape circle2;
|
||||
circle2.m_radius = 0.5f;
|
||||
circle2.m_p.Set(0.5f, 0.5f);
|
||||
|
||||
for (int i = 0; i < 10; ++i)
|
||||
{
|
||||
float32 x = RandomFloat(-0.1f, 0.1f);
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(x + 5.0f, 1.05f + 2.5f * i);
|
||||
bd.angle = RandomFloat(-b2_pi, b2_pi);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&circle1, 2.0f);
|
||||
body->CreateFixture(&circle2, 0.0f);
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape polygon1;
|
||||
polygon1.SetAsBox(0.25f, 0.5f);
|
||||
|
||||
b2PolygonShape polygon2;
|
||||
polygon2.SetAsBox(0.25f, 0.5f, b2Vec2(0.0f, -0.5f), 0.5f * b2_pi);
|
||||
|
||||
for (int i = 0; i < 10; ++i)
|
||||
{
|
||||
float32 x = RandomFloat(-0.1f, 0.1f);
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(x - 5.0f, 1.05f + 2.5f * i);
|
||||
bd.angle = RandomFloat(-b2_pi, b2_pi);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&polygon1, 2.0f);
|
||||
body->CreateFixture(&polygon2, 2.0f);
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
b2Transform xf1;
|
||||
xf1.q.Set(0.3524f * b2_pi);
|
||||
xf1.p = xf1.q.GetXAxis();
|
||||
|
||||
b2Vec2 vertices[3];
|
||||
|
||||
b2PolygonShape triangle1;
|
||||
vertices[0] = b2Mul(xf1, b2Vec2(-1.0f, 0.0f));
|
||||
vertices[1] = b2Mul(xf1, b2Vec2(1.0f, 0.0f));
|
||||
vertices[2] = b2Mul(xf1, b2Vec2(0.0f, 0.5f));
|
||||
triangle1.Set(vertices, 3);
|
||||
|
||||
b2Transform xf2;
|
||||
xf2.q.Set(-0.3524f * b2_pi);
|
||||
xf2.p = -xf2.q.GetXAxis();
|
||||
|
||||
b2PolygonShape triangle2;
|
||||
vertices[0] = b2Mul(xf2, b2Vec2(-1.0f, 0.0f));
|
||||
vertices[1] = b2Mul(xf2, b2Vec2(1.0f, 0.0f));
|
||||
vertices[2] = b2Mul(xf2, b2Vec2(0.0f, 0.5f));
|
||||
triangle2.Set(vertices, 3);
|
||||
|
||||
for (int32 i = 0; i < 10; ++i)
|
||||
{
|
||||
float32 x = RandomFloat(-0.1f, 0.1f);
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(x, 2.05f + 2.5f * i);
|
||||
bd.angle = 0.0f;
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&triangle1, 2.0f);
|
||||
body->CreateFixture(&triangle2, 2.0f);
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape bottom;
|
||||
bottom.SetAsBox( 1.5f, 0.15f );
|
||||
|
||||
b2PolygonShape left;
|
||||
left.SetAsBox(0.15f, 2.7f, b2Vec2(-1.45f, 2.35f), 0.2f);
|
||||
|
||||
b2PolygonShape right;
|
||||
right.SetAsBox(0.15f, 2.7f, b2Vec2(1.45f, 2.35f), -0.2f);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set( 0.0f, 2.0f );
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&bottom, 4.0f);
|
||||
body->CreateFixture(&left, 4.0f);
|
||||
body->CreateFixture(&right, 4.0f);
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new CompoundShapes;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef COMPOUND_SHAPES_H
|
||||
#define COMPOUND_SHAPES_H
|
||||
|
||||
// TODO_ERIN test joints on compounds.
|
||||
class CompoundShapes : public Test
|
||||
{
|
||||
public:
|
||||
CompoundShapes()
|
||||
{
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(0.0f, 0.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(50.0f, 0.0f), b2Vec2(-50.0f, 0.0f));
|
||||
|
||||
body->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2CircleShape circle1;
|
||||
circle1.m_radius = 0.5f;
|
||||
circle1.m_p.Set(-0.5f, 0.5f);
|
||||
|
||||
b2CircleShape circle2;
|
||||
circle2.m_radius = 0.5f;
|
||||
circle2.m_p.Set(0.5f, 0.5f);
|
||||
|
||||
for (int i = 0; i < 10; ++i)
|
||||
{
|
||||
float32 x = RandomFloat(-0.1f, 0.1f);
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(x + 5.0f, 1.05f + 2.5f * i);
|
||||
bd.angle = RandomFloat(-b2_pi, b2_pi);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&circle1, 2.0f);
|
||||
body->CreateFixture(&circle2, 0.0f);
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape polygon1;
|
||||
polygon1.SetAsBox(0.25f, 0.5f);
|
||||
|
||||
b2PolygonShape polygon2;
|
||||
polygon2.SetAsBox(0.25f, 0.5f, b2Vec2(0.0f, -0.5f), 0.5f * b2_pi);
|
||||
|
||||
for (int i = 0; i < 10; ++i)
|
||||
{
|
||||
float32 x = RandomFloat(-0.1f, 0.1f);
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(x - 5.0f, 1.05f + 2.5f * i);
|
||||
bd.angle = RandomFloat(-b2_pi, b2_pi);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&polygon1, 2.0f);
|
||||
body->CreateFixture(&polygon2, 2.0f);
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
b2Transform xf1;
|
||||
xf1.q.Set(0.3524f * b2_pi);
|
||||
xf1.p = xf1.q.GetXAxis();
|
||||
|
||||
b2Vec2 vertices[3];
|
||||
|
||||
b2PolygonShape triangle1;
|
||||
vertices[0] = b2Mul(xf1, b2Vec2(-1.0f, 0.0f));
|
||||
vertices[1] = b2Mul(xf1, b2Vec2(1.0f, 0.0f));
|
||||
vertices[2] = b2Mul(xf1, b2Vec2(0.0f, 0.5f));
|
||||
triangle1.Set(vertices, 3);
|
||||
|
||||
b2Transform xf2;
|
||||
xf2.q.Set(-0.3524f * b2_pi);
|
||||
xf2.p = -xf2.q.GetXAxis();
|
||||
|
||||
b2PolygonShape triangle2;
|
||||
vertices[0] = b2Mul(xf2, b2Vec2(-1.0f, 0.0f));
|
||||
vertices[1] = b2Mul(xf2, b2Vec2(1.0f, 0.0f));
|
||||
vertices[2] = b2Mul(xf2, b2Vec2(0.0f, 0.5f));
|
||||
triangle2.Set(vertices, 3);
|
||||
|
||||
for (int32 i = 0; i < 10; ++i)
|
||||
{
|
||||
float32 x = RandomFloat(-0.1f, 0.1f);
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(x, 2.05f + 2.5f * i);
|
||||
bd.angle = 0.0f;
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&triangle1, 2.0f);
|
||||
body->CreateFixture(&triangle2, 2.0f);
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape bottom;
|
||||
bottom.SetAsBox( 1.5f, 0.15f );
|
||||
|
||||
b2PolygonShape left;
|
||||
left.SetAsBox(0.15f, 2.7f, b2Vec2(-1.45f, 2.35f), 0.2f);
|
||||
|
||||
b2PolygonShape right;
|
||||
right.SetAsBox(0.15f, 2.7f, b2Vec2(1.45f, 2.35f), -0.2f);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set( 0.0f, 2.0f );
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&bottom, 4.0f);
|
||||
body->CreateFixture(&left, 4.0f);
|
||||
body->CreateFixture(&right, 4.0f);
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new CompoundShapes;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,167 +1,167 @@
|
||||
/*
|
||||
* Copyright (c) 2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef CONFINED_H
|
||||
#define CONFINED_H
|
||||
|
||||
class Confined : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
enum
|
||||
{
|
||||
e_columnCount = 0,
|
||||
e_rowCount = 0
|
||||
};
|
||||
|
||||
Confined()
|
||||
{
|
||||
{
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
|
||||
// Floor
|
||||
shape.Set(b2Vec2(-10.0f, 0.0f), b2Vec2(10.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
|
||||
// Left wall
|
||||
shape.Set(b2Vec2(-10.0f, 0.0f), b2Vec2(-10.0f, 20.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
|
||||
// Right wall
|
||||
shape.Set(b2Vec2(10.0f, 0.0f), b2Vec2(10.0f, 20.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
|
||||
// Roof
|
||||
shape.Set(b2Vec2(-10.0f, 20.0f), b2Vec2(10.0f, 20.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
float32 radius = 0.5f;
|
||||
b2CircleShape shape;
|
||||
shape.m_p.SetZero();
|
||||
shape.m_radius = radius;
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 1.0f;
|
||||
fd.friction = 0.1f;
|
||||
|
||||
for (int32 j = 0; j < e_columnCount; ++j)
|
||||
{
|
||||
for (int i = 0; i < e_rowCount; ++i)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-10.0f + (2.1f * j + 1.0f + 0.01f * i) * radius, (2.0f * i + 1.0f) * radius);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
body->CreateFixture(&fd);
|
||||
}
|
||||
}
|
||||
|
||||
m_world->SetGravity(b2Vec2(0.0f, 0.0f));
|
||||
}
|
||||
|
||||
void CreateCircle()
|
||||
{
|
||||
float32 radius = 2.0f;
|
||||
b2CircleShape shape;
|
||||
shape.m_p.SetZero();
|
||||
shape.m_radius = radius;
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 1.0f;
|
||||
fd.friction = 0.0f;
|
||||
|
||||
b2Vec2 p(RandomFloat(), 3.0f + RandomFloat());
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position = p;
|
||||
//bd.allowSleep = false;
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
body->CreateFixture(&fd);
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case 'c':
|
||||
CreateCircle();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
bool sleeping = true;
|
||||
for (b2Body* b = m_world->GetBodyList(); b; b = b->GetNext())
|
||||
{
|
||||
if (b->GetType() != b2_dynamicBody)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (b->IsAwake())
|
||||
{
|
||||
sleeping = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (m_stepCount == 180)
|
||||
{
|
||||
m_stepCount += 0;
|
||||
}
|
||||
|
||||
//if (sleeping)
|
||||
//{
|
||||
// CreateCircle();
|
||||
//}
|
||||
|
||||
Test::Step(settings);
|
||||
|
||||
for (b2Body* b = m_world->GetBodyList(); b; b = b->GetNext())
|
||||
{
|
||||
if (b->GetType() != b2_dynamicBody)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
b2Vec2 p = b->GetPosition();
|
||||
if (p.x <= -10.0f || 10.0f <= p.x || p.y <= 0.0f || 20.0f <= p.y)
|
||||
{
|
||||
p.x += 0.0;
|
||||
}
|
||||
}
|
||||
|
||||
m_debugDraw.DrawString(5, m_textLine, "Press 'c' to create a circle.");
|
||||
m_textLine += 15;
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new Confined;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef CONFINED_H
|
||||
#define CONFINED_H
|
||||
|
||||
class Confined : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
enum
|
||||
{
|
||||
e_columnCount = 0,
|
||||
e_rowCount = 0
|
||||
};
|
||||
|
||||
Confined()
|
||||
{
|
||||
{
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
|
||||
// Floor
|
||||
shape.Set(b2Vec2(-10.0f, 0.0f), b2Vec2(10.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
|
||||
// Left wall
|
||||
shape.Set(b2Vec2(-10.0f, 0.0f), b2Vec2(-10.0f, 20.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
|
||||
// Right wall
|
||||
shape.Set(b2Vec2(10.0f, 0.0f), b2Vec2(10.0f, 20.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
|
||||
// Roof
|
||||
shape.Set(b2Vec2(-10.0f, 20.0f), b2Vec2(10.0f, 20.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
float32 radius = 0.5f;
|
||||
b2CircleShape shape;
|
||||
shape.m_p.SetZero();
|
||||
shape.m_radius = radius;
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 1.0f;
|
||||
fd.friction = 0.1f;
|
||||
|
||||
for (int32 j = 0; j < e_columnCount; ++j)
|
||||
{
|
||||
for (int i = 0; i < e_rowCount; ++i)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-10.0f + (2.1f * j + 1.0f + 0.01f * i) * radius, (2.0f * i + 1.0f) * radius);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
body->CreateFixture(&fd);
|
||||
}
|
||||
}
|
||||
|
||||
m_world->SetGravity(b2Vec2(0.0f, 0.0f));
|
||||
}
|
||||
|
||||
void CreateCircle()
|
||||
{
|
||||
float32 radius = 2.0f;
|
||||
b2CircleShape shape;
|
||||
shape.m_p.SetZero();
|
||||
shape.m_radius = radius;
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 1.0f;
|
||||
fd.friction = 0.0f;
|
||||
|
||||
b2Vec2 p(RandomFloat(), 3.0f + RandomFloat());
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position = p;
|
||||
//bd.allowSleep = false;
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
body->CreateFixture(&fd);
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case 'c':
|
||||
CreateCircle();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
bool sleeping = true;
|
||||
for (b2Body* b = m_world->GetBodyList(); b; b = b->GetNext())
|
||||
{
|
||||
if (b->GetType() != b2_dynamicBody)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (b->IsAwake())
|
||||
{
|
||||
sleeping = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (m_stepCount == 180)
|
||||
{
|
||||
m_stepCount += 0;
|
||||
}
|
||||
|
||||
//if (sleeping)
|
||||
//{
|
||||
// CreateCircle();
|
||||
//}
|
||||
|
||||
Test::Step(settings);
|
||||
|
||||
for (b2Body* b = m_world->GetBodyList(); b; b = b->GetNext())
|
||||
{
|
||||
if (b->GetType() != b2_dynamicBody)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
b2Vec2 p = b->GetPosition();
|
||||
if (p.x <= -10.0f || 10.0f <= p.x || p.y <= 0.0f || 20.0f <= p.y)
|
||||
{
|
||||
p.x += 0.0;
|
||||
}
|
||||
}
|
||||
|
||||
m_debugDraw.DrawString(5, m_textLine, "Press 'c' to create a circle.");
|
||||
m_textLine += 15;
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new Confined;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,137 +1,137 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef CONTINUOUS_TEST_H
|
||||
#define CONTINUOUS_TEST_H
|
||||
|
||||
class ContinuousTest : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
ContinuousTest()
|
||||
{
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(0.0f, 0.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape edge;
|
||||
|
||||
edge.Set(b2Vec2(-10.0f, 0.0f), b2Vec2(10.0f, 0.0f));
|
||||
body->CreateFixture(&edge, 0.0f);
|
||||
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.2f, 1.0f, b2Vec2(0.5f, 1.0f), 0.0f);
|
||||
body->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
#if 1
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(0.0f, 20.0f);
|
||||
//bd.angle = 0.1f;
|
||||
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(2.0f, 0.1f);
|
||||
|
||||
m_body = m_world->CreateBody(&bd);
|
||||
m_body->CreateFixture(&shape, 1.0f);
|
||||
|
||||
m_angularVelocity = RandomFloat(-50.0f, 50.0f);
|
||||
//m_angularVelocity = 46.661274f;
|
||||
m_body->SetLinearVelocity(b2Vec2(0.0f, -100.0f));
|
||||
m_body->SetAngularVelocity(m_angularVelocity);
|
||||
}
|
||||
#else
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(0.0f, 2.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
b2CircleShape shape;
|
||||
shape.m_p.SetZero();
|
||||
shape.m_radius = 0.5f;
|
||||
body->CreateFixture(&shape, 1.0f);
|
||||
|
||||
bd.bullet = true;
|
||||
bd.position.Set(0.0f, 10.0f);
|
||||
body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&shape, 1.0f);
|
||||
body->SetLinearVelocity(b2Vec2(0.0f, -100.0f));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void Launch()
|
||||
{
|
||||
m_body->SetTransform(b2Vec2(0.0f, 20.0f), 0.0f);
|
||||
m_angularVelocity = RandomFloat(-50.0f, 50.0f);
|
||||
m_body->SetLinearVelocity(b2Vec2(0.0f, -100.0f));
|
||||
m_body->SetAngularVelocity(m_angularVelocity);
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
if (m_stepCount == 12)
|
||||
{
|
||||
m_stepCount += 0;
|
||||
}
|
||||
|
||||
Test::Step(settings);
|
||||
|
||||
extern int32 b2_gjkCalls, b2_gjkIters, b2_gjkMaxIters;
|
||||
|
||||
if (b2_gjkCalls > 0)
|
||||
{
|
||||
m_debugDraw.DrawString(5, m_textLine, "gjk calls = %d, ave gjk iters = %3.1f, max gjk iters = %d",
|
||||
b2_gjkCalls, b2_gjkIters / float32(b2_gjkCalls), b2_gjkMaxIters);
|
||||
m_textLine += 15;
|
||||
}
|
||||
|
||||
extern int32 b2_toiCalls, b2_toiIters;
|
||||
extern int32 b2_toiRootIters, b2_toiMaxRootIters;
|
||||
|
||||
if (b2_toiCalls > 0)
|
||||
{
|
||||
m_debugDraw.DrawString(5, m_textLine, "toi calls = %d, ave toi iters = %3.1f, max toi iters = %d",
|
||||
b2_toiCalls, b2_toiIters / float32(b2_toiCalls), b2_toiMaxRootIters);
|
||||
m_textLine += 15;
|
||||
|
||||
m_debugDraw.DrawString(5, m_textLine, "ave toi root iters = %3.1f, max toi root iters = %d",
|
||||
b2_toiRootIters / float32(b2_toiCalls), b2_toiMaxRootIters);
|
||||
m_textLine += 15;
|
||||
}
|
||||
|
||||
if (m_stepCount % 60 == 0)
|
||||
{
|
||||
//Launch();
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new ContinuousTest;
|
||||
}
|
||||
|
||||
b2Body* m_body;
|
||||
float32 m_angularVelocity;
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef CONTINUOUS_TEST_H
|
||||
#define CONTINUOUS_TEST_H
|
||||
|
||||
class ContinuousTest : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
ContinuousTest()
|
||||
{
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(0.0f, 0.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape edge;
|
||||
|
||||
edge.Set(b2Vec2(-10.0f, 0.0f), b2Vec2(10.0f, 0.0f));
|
||||
body->CreateFixture(&edge, 0.0f);
|
||||
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.2f, 1.0f, b2Vec2(0.5f, 1.0f), 0.0f);
|
||||
body->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
#if 1
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(0.0f, 20.0f);
|
||||
//bd.angle = 0.1f;
|
||||
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(2.0f, 0.1f);
|
||||
|
||||
m_body = m_world->CreateBody(&bd);
|
||||
m_body->CreateFixture(&shape, 1.0f);
|
||||
|
||||
m_angularVelocity = RandomFloat(-50.0f, 50.0f);
|
||||
//m_angularVelocity = 46.661274f;
|
||||
m_body->SetLinearVelocity(b2Vec2(0.0f, -100.0f));
|
||||
m_body->SetAngularVelocity(m_angularVelocity);
|
||||
}
|
||||
#else
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(0.0f, 2.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
b2CircleShape shape;
|
||||
shape.m_p.SetZero();
|
||||
shape.m_radius = 0.5f;
|
||||
body->CreateFixture(&shape, 1.0f);
|
||||
|
||||
bd.bullet = true;
|
||||
bd.position.Set(0.0f, 10.0f);
|
||||
body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&shape, 1.0f);
|
||||
body->SetLinearVelocity(b2Vec2(0.0f, -100.0f));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void Launch()
|
||||
{
|
||||
m_body->SetTransform(b2Vec2(0.0f, 20.0f), 0.0f);
|
||||
m_angularVelocity = RandomFloat(-50.0f, 50.0f);
|
||||
m_body->SetLinearVelocity(b2Vec2(0.0f, -100.0f));
|
||||
m_body->SetAngularVelocity(m_angularVelocity);
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
if (m_stepCount == 12)
|
||||
{
|
||||
m_stepCount += 0;
|
||||
}
|
||||
|
||||
Test::Step(settings);
|
||||
|
||||
extern int32 b2_gjkCalls, b2_gjkIters, b2_gjkMaxIters;
|
||||
|
||||
if (b2_gjkCalls > 0)
|
||||
{
|
||||
m_debugDraw.DrawString(5, m_textLine, "gjk calls = %d, ave gjk iters = %3.1f, max gjk iters = %d",
|
||||
b2_gjkCalls, b2_gjkIters / float32(b2_gjkCalls), b2_gjkMaxIters);
|
||||
m_textLine += 15;
|
||||
}
|
||||
|
||||
extern int32 b2_toiCalls, b2_toiIters;
|
||||
extern int32 b2_toiRootIters, b2_toiMaxRootIters;
|
||||
|
||||
if (b2_toiCalls > 0)
|
||||
{
|
||||
m_debugDraw.DrawString(5, m_textLine, "toi calls = %d, ave toi iters = %3.1f, max toi iters = %d",
|
||||
b2_toiCalls, b2_toiIters / float32(b2_toiCalls), b2_toiMaxRootIters);
|
||||
m_textLine += 15;
|
||||
|
||||
m_debugDraw.DrawString(5, m_textLine, "ave toi root iters = %3.1f, max toi root iters = %d",
|
||||
b2_toiRootIters / float32(b2_toiCalls), b2_toiMaxRootIters);
|
||||
m_textLine += 15;
|
||||
}
|
||||
|
||||
if (m_stepCount % 60 == 0)
|
||||
{
|
||||
//Launch();
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new ContinuousTest;
|
||||
}
|
||||
|
||||
b2Body* m_body;
|
||||
float32 m_angularVelocity;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,135 +1,135 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef DISTANCE_TEST_H
|
||||
#define DISTANCE_TEST_H
|
||||
|
||||
class DistanceTest : public Test
|
||||
{
|
||||
public:
|
||||
DistanceTest()
|
||||
{
|
||||
{
|
||||
m_transformA.SetIdentity();
|
||||
m_transformA.p.Set(0.0f, -0.2f);
|
||||
m_polygonA.SetAsBox(10.0f, 0.2f);
|
||||
}
|
||||
|
||||
{
|
||||
m_positionB.Set(12.017401f, 0.13678508f);
|
||||
m_angleB = -0.0109265f;
|
||||
m_transformB.Set(m_positionB, m_angleB);
|
||||
|
||||
m_polygonB.SetAsBox(2.0f, 0.1f);
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new DistanceTest;
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
Test::Step(settings);
|
||||
|
||||
b2DistanceInput input;
|
||||
input.proxyA.Set(&m_polygonA, 0);
|
||||
input.proxyB.Set(&m_polygonB, 0);
|
||||
input.transformA = m_transformA;
|
||||
input.transformB = m_transformB;
|
||||
input.useRadii = true;
|
||||
b2SimplexCache cache;
|
||||
cache.count = 0;
|
||||
b2DistanceOutput output;
|
||||
b2Distance(&output, &cache, &input);
|
||||
|
||||
m_debugDraw.DrawString(5, m_textLine, "distance = %g", output.distance);
|
||||
m_textLine += 15;
|
||||
|
||||
m_debugDraw.DrawString(5, m_textLine, "iterations = %d", output.iterations);
|
||||
m_textLine += 15;
|
||||
|
||||
{
|
||||
b2Color color(0.9f, 0.9f, 0.9f);
|
||||
b2Vec2 v[b2_maxPolygonVertices];
|
||||
for (int32 i = 0; i < m_polygonA.m_vertexCount; ++i)
|
||||
{
|
||||
v[i] = b2Mul(m_transformA, m_polygonA.m_vertices[i]);
|
||||
}
|
||||
m_debugDraw.DrawPolygon(v, m_polygonA.m_vertexCount, color);
|
||||
|
||||
for (int32 i = 0; i < m_polygonB.m_vertexCount; ++i)
|
||||
{
|
||||
v[i] = b2Mul(m_transformB, m_polygonB.m_vertices[i]);
|
||||
}
|
||||
m_debugDraw.DrawPolygon(v, m_polygonB.m_vertexCount, color);
|
||||
}
|
||||
|
||||
b2Vec2 x1 = output.pointA;
|
||||
b2Vec2 x2 = output.pointB;
|
||||
|
||||
b2Color c1(1.0f, 0.0f, 0.0f);
|
||||
m_debugDraw.DrawPoint(x1, 4.0f, c1);
|
||||
|
||||
b2Color c2(1.0f, 1.0f, 0.0f);
|
||||
m_debugDraw.DrawPoint(x2, 4.0f, c2);
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case 'a':
|
||||
m_positionB.x -= 0.1f;
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
m_positionB.x += 0.1f;
|
||||
break;
|
||||
|
||||
case 's':
|
||||
m_positionB.y -= 0.1f;
|
||||
break;
|
||||
|
||||
case 'w':
|
||||
m_positionB.y += 0.1f;
|
||||
break;
|
||||
|
||||
case 'q':
|
||||
m_angleB += 0.1f * b2_pi;
|
||||
break;
|
||||
|
||||
case 'e':
|
||||
m_angleB -= 0.1f * b2_pi;
|
||||
break;
|
||||
}
|
||||
|
||||
m_transformB.Set(m_positionB, m_angleB);
|
||||
}
|
||||
|
||||
b2Vec2 m_positionB;
|
||||
float32 m_angleB;
|
||||
|
||||
b2Transform m_transformA;
|
||||
b2Transform m_transformB;
|
||||
b2PolygonShape m_polygonA;
|
||||
b2PolygonShape m_polygonB;
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef DISTANCE_TEST_H
|
||||
#define DISTANCE_TEST_H
|
||||
|
||||
class DistanceTest : public Test
|
||||
{
|
||||
public:
|
||||
DistanceTest()
|
||||
{
|
||||
{
|
||||
m_transformA.SetIdentity();
|
||||
m_transformA.p.Set(0.0f, -0.2f);
|
||||
m_polygonA.SetAsBox(10.0f, 0.2f);
|
||||
}
|
||||
|
||||
{
|
||||
m_positionB.Set(12.017401f, 0.13678508f);
|
||||
m_angleB = -0.0109265f;
|
||||
m_transformB.Set(m_positionB, m_angleB);
|
||||
|
||||
m_polygonB.SetAsBox(2.0f, 0.1f);
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new DistanceTest;
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
Test::Step(settings);
|
||||
|
||||
b2DistanceInput input;
|
||||
input.proxyA.Set(&m_polygonA, 0);
|
||||
input.proxyB.Set(&m_polygonB, 0);
|
||||
input.transformA = m_transformA;
|
||||
input.transformB = m_transformB;
|
||||
input.useRadii = true;
|
||||
b2SimplexCache cache;
|
||||
cache.count = 0;
|
||||
b2DistanceOutput output;
|
||||
b2Distance(&output, &cache, &input);
|
||||
|
||||
m_debugDraw.DrawString(5, m_textLine, "distance = %g", output.distance);
|
||||
m_textLine += 15;
|
||||
|
||||
m_debugDraw.DrawString(5, m_textLine, "iterations = %d", output.iterations);
|
||||
m_textLine += 15;
|
||||
|
||||
{
|
||||
b2Color color(0.9f, 0.9f, 0.9f);
|
||||
b2Vec2 v[b2_maxPolygonVertices];
|
||||
for (int32 i = 0; i < m_polygonA.m_vertexCount; ++i)
|
||||
{
|
||||
v[i] = b2Mul(m_transformA, m_polygonA.m_vertices[i]);
|
||||
}
|
||||
m_debugDraw.DrawPolygon(v, m_polygonA.m_vertexCount, color);
|
||||
|
||||
for (int32 i = 0; i < m_polygonB.m_vertexCount; ++i)
|
||||
{
|
||||
v[i] = b2Mul(m_transformB, m_polygonB.m_vertices[i]);
|
||||
}
|
||||
m_debugDraw.DrawPolygon(v, m_polygonB.m_vertexCount, color);
|
||||
}
|
||||
|
||||
b2Vec2 x1 = output.pointA;
|
||||
b2Vec2 x2 = output.pointB;
|
||||
|
||||
b2Color c1(1.0f, 0.0f, 0.0f);
|
||||
m_debugDraw.DrawPoint(x1, 4.0f, c1);
|
||||
|
||||
b2Color c2(1.0f, 1.0f, 0.0f);
|
||||
m_debugDraw.DrawPoint(x2, 4.0f, c2);
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case 'a':
|
||||
m_positionB.x -= 0.1f;
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
m_positionB.x += 0.1f;
|
||||
break;
|
||||
|
||||
case 's':
|
||||
m_positionB.y -= 0.1f;
|
||||
break;
|
||||
|
||||
case 'w':
|
||||
m_positionB.y += 0.1f;
|
||||
break;
|
||||
|
||||
case 'q':
|
||||
m_angleB += 0.1f * b2_pi;
|
||||
break;
|
||||
|
||||
case 'e':
|
||||
m_angleB -= 0.1f * b2_pi;
|
||||
break;
|
||||
}
|
||||
|
||||
m_transformB.Set(m_positionB, m_angleB);
|
||||
}
|
||||
|
||||
b2Vec2 m_positionB;
|
||||
float32 m_angleB;
|
||||
|
||||
b2Transform m_transformA;
|
||||
b2Transform m_transformB;
|
||||
b2PolygonShape m_polygonA;
|
||||
b2PolygonShape m_polygonB;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,215 +1,215 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef DOMINOS_H
|
||||
#define DOMINOS_H
|
||||
|
||||
class Dominos : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
Dominos()
|
||||
{
|
||||
b2Body* b1;
|
||||
{
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
|
||||
b2BodyDef bd;
|
||||
b1 = m_world->CreateBody(&bd);
|
||||
b1->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(6.0f, 0.25f);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(-1.5f, 10.0f);
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.1f, 1.0f);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 20.0f;
|
||||
fd.friction = 0.1f;
|
||||
|
||||
for (int i = 0; i < 10; ++i)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-6.0f + 1.0f * i, 11.25f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&fd);
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(7.0f, 0.25f, b2Vec2_zero, 0.3f);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(1.0f, 6.0f);
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
b2Body* b2;
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.25f, 1.5f);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(-7.0f, 4.0f);
|
||||
b2 = m_world->CreateBody(&bd);
|
||||
b2->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
b2Body* b3;
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(6.0f, 0.125f);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-0.9f, 1.0f);
|
||||
bd.angle = -0.15f;
|
||||
|
||||
b3 = m_world->CreateBody(&bd);
|
||||
b3->CreateFixture(&shape, 10.0f);
|
||||
}
|
||||
|
||||
b2RevoluteJointDef jd;
|
||||
b2Vec2 anchor;
|
||||
|
||||
anchor.Set(-2.0f, 1.0f);
|
||||
jd.Initialize(b1, b3, anchor);
|
||||
jd.collideConnected = true;
|
||||
m_world->CreateJoint(&jd);
|
||||
|
||||
b2Body* b4;
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.25f, 0.25f);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-10.0f, 15.0f);
|
||||
b4 = m_world->CreateBody(&bd);
|
||||
b4->CreateFixture(&shape, 10.0f);
|
||||
}
|
||||
|
||||
anchor.Set(-7.0f, 15.0f);
|
||||
jd.Initialize(b2, b4, anchor);
|
||||
m_world->CreateJoint(&jd);
|
||||
|
||||
b2Body* b5;
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(6.5f, 3.0f);
|
||||
b5 = m_world->CreateBody(&bd);
|
||||
|
||||
b2PolygonShape shape;
|
||||
b2FixtureDef fd;
|
||||
|
||||
fd.shape = &shape;
|
||||
fd.density = 10.0f;
|
||||
fd.friction = 0.1f;
|
||||
|
||||
shape.SetAsBox(1.0f, 0.1f, b2Vec2(0.0f, -0.9f), 0.0f);
|
||||
b5->CreateFixture(&fd);
|
||||
|
||||
shape.SetAsBox(0.1f, 1.0f, b2Vec2(-0.9f, 0.0f), 0.0f);
|
||||
b5->CreateFixture(&fd);
|
||||
|
||||
shape.SetAsBox(0.1f, 1.0f, b2Vec2(0.9f, 0.0f), 0.0f);
|
||||
b5->CreateFixture(&fd);
|
||||
}
|
||||
|
||||
anchor.Set(6.0f, 2.0f);
|
||||
jd.Initialize(b1, b5, anchor);
|
||||
m_world->CreateJoint(&jd);
|
||||
|
||||
b2Body* b6;
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(1.0f, 0.1f);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(6.5f, 4.1f);
|
||||
b6 = m_world->CreateBody(&bd);
|
||||
b6->CreateFixture(&shape, 30.0f);
|
||||
}
|
||||
|
||||
anchor.Set(7.5f, 4.0f);
|
||||
jd.Initialize(b5, b6, anchor);
|
||||
m_world->CreateJoint(&jd);
|
||||
|
||||
b2Body* b7;
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.1f, 1.0f);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(7.4f, 1.0f);
|
||||
|
||||
b7 = m_world->CreateBody(&bd);
|
||||
b7->CreateFixture(&shape, 10.0f);
|
||||
}
|
||||
|
||||
b2DistanceJointDef djd;
|
||||
djd.bodyA = b3;
|
||||
djd.bodyB = b7;
|
||||
djd.localAnchorA.Set(6.0f, 0.0f);
|
||||
djd.localAnchorB.Set(0.0f, -1.0f);
|
||||
b2Vec2 d = djd.bodyB->GetWorldPoint(djd.localAnchorB) - djd.bodyA->GetWorldPoint(djd.localAnchorA);
|
||||
djd.length = d.Length();
|
||||
m_world->CreateJoint(&djd);
|
||||
|
||||
{
|
||||
float32 radius = 0.2f;
|
||||
|
||||
b2CircleShape shape;
|
||||
shape.m_radius = radius;
|
||||
|
||||
for (int i = 0; i < 4; ++i)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(5.9f + 2.0f * radius * i, 2.4f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&shape, 10.0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new Dominos;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef DOMINOS_H
|
||||
#define DOMINOS_H
|
||||
|
||||
class Dominos : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
Dominos()
|
||||
{
|
||||
b2Body* b1;
|
||||
{
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
|
||||
b2BodyDef bd;
|
||||
b1 = m_world->CreateBody(&bd);
|
||||
b1->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(6.0f, 0.25f);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(-1.5f, 10.0f);
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.1f, 1.0f);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 20.0f;
|
||||
fd.friction = 0.1f;
|
||||
|
||||
for (int i = 0; i < 10; ++i)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-6.0f + 1.0f * i, 11.25f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&fd);
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(7.0f, 0.25f, b2Vec2_zero, 0.3f);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(1.0f, 6.0f);
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
b2Body* b2;
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.25f, 1.5f);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(-7.0f, 4.0f);
|
||||
b2 = m_world->CreateBody(&bd);
|
||||
b2->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
b2Body* b3;
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(6.0f, 0.125f);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-0.9f, 1.0f);
|
||||
bd.angle = -0.15f;
|
||||
|
||||
b3 = m_world->CreateBody(&bd);
|
||||
b3->CreateFixture(&shape, 10.0f);
|
||||
}
|
||||
|
||||
b2RevoluteJointDef jd;
|
||||
b2Vec2 anchor;
|
||||
|
||||
anchor.Set(-2.0f, 1.0f);
|
||||
jd.Initialize(b1, b3, anchor);
|
||||
jd.collideConnected = true;
|
||||
m_world->CreateJoint(&jd);
|
||||
|
||||
b2Body* b4;
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.25f, 0.25f);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-10.0f, 15.0f);
|
||||
b4 = m_world->CreateBody(&bd);
|
||||
b4->CreateFixture(&shape, 10.0f);
|
||||
}
|
||||
|
||||
anchor.Set(-7.0f, 15.0f);
|
||||
jd.Initialize(b2, b4, anchor);
|
||||
m_world->CreateJoint(&jd);
|
||||
|
||||
b2Body* b5;
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(6.5f, 3.0f);
|
||||
b5 = m_world->CreateBody(&bd);
|
||||
|
||||
b2PolygonShape shape;
|
||||
b2FixtureDef fd;
|
||||
|
||||
fd.shape = &shape;
|
||||
fd.density = 10.0f;
|
||||
fd.friction = 0.1f;
|
||||
|
||||
shape.SetAsBox(1.0f, 0.1f, b2Vec2(0.0f, -0.9f), 0.0f);
|
||||
b5->CreateFixture(&fd);
|
||||
|
||||
shape.SetAsBox(0.1f, 1.0f, b2Vec2(-0.9f, 0.0f), 0.0f);
|
||||
b5->CreateFixture(&fd);
|
||||
|
||||
shape.SetAsBox(0.1f, 1.0f, b2Vec2(0.9f, 0.0f), 0.0f);
|
||||
b5->CreateFixture(&fd);
|
||||
}
|
||||
|
||||
anchor.Set(6.0f, 2.0f);
|
||||
jd.Initialize(b1, b5, anchor);
|
||||
m_world->CreateJoint(&jd);
|
||||
|
||||
b2Body* b6;
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(1.0f, 0.1f);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(6.5f, 4.1f);
|
||||
b6 = m_world->CreateBody(&bd);
|
||||
b6->CreateFixture(&shape, 30.0f);
|
||||
}
|
||||
|
||||
anchor.Set(7.5f, 4.0f);
|
||||
jd.Initialize(b5, b6, anchor);
|
||||
m_world->CreateJoint(&jd);
|
||||
|
||||
b2Body* b7;
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.1f, 1.0f);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(7.4f, 1.0f);
|
||||
|
||||
b7 = m_world->CreateBody(&bd);
|
||||
b7->CreateFixture(&shape, 10.0f);
|
||||
}
|
||||
|
||||
b2DistanceJointDef djd;
|
||||
djd.bodyA = b3;
|
||||
djd.bodyB = b7;
|
||||
djd.localAnchorA.Set(6.0f, 0.0f);
|
||||
djd.localAnchorB.Set(0.0f, -1.0f);
|
||||
b2Vec2 d = djd.bodyB->GetWorldPoint(djd.localAnchorB) - djd.bodyA->GetWorldPoint(djd.localAnchorA);
|
||||
djd.length = d.Length();
|
||||
m_world->CreateJoint(&djd);
|
||||
|
||||
{
|
||||
float32 radius = 0.2f;
|
||||
|
||||
b2CircleShape shape;
|
||||
shape.m_radius = radius;
|
||||
|
||||
for (int i = 0; i < 4; ++i)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(5.9f + 2.0f * radius * i, 2.4f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&shape, 10.0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new Dominos;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,267 +1,267 @@
|
||||
/*
|
||||
* Copyright (c) 2011 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef DUMP_SHELL_H
|
||||
#define DUMP_SHELL_H
|
||||
|
||||
// This test holds worlds dumped using b2World::Dump.
|
||||
class DumpShell : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
DumpShell()
|
||||
{
|
||||
|
||||
b2Vec2 g(0.000000000000000e+00f, 0.000000000000000e+00f);
|
||||
m_world->SetGravity(g);
|
||||
b2Body** bodies = (b2Body**)b2Alloc(3 * sizeof(b2Body*));
|
||||
b2Joint** joints = (b2Joint**)b2Alloc(2 * sizeof(b2Joint*));
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2BodyType(2);
|
||||
bd.position.Set(1.304347801208496e+01f, 2.500000000000000e+00f);
|
||||
bd.angle = 0.000000000000000e+00f;
|
||||
bd.linearVelocity.Set(0.000000000000000e+00f, 0.000000000000000e+00f);
|
||||
bd.angularVelocity = 0.000000000000000e+00f;
|
||||
bd.linearDamping = 5.000000000000000e-01f;
|
||||
bd.angularDamping = 5.000000000000000e-01f;
|
||||
bd.allowSleep = bool(4);
|
||||
bd.awake = bool(2);
|
||||
bd.fixedRotation = bool(0);
|
||||
bd.bullet = bool(0);
|
||||
bd.active = bool(32);
|
||||
bd.gravityScale = 1.000000000000000e+00f;
|
||||
bodies[0] = m_world->CreateBody(&bd);
|
||||
|
||||
{
|
||||
b2FixtureDef fd;
|
||||
fd.friction = 1.000000000000000e+00f;
|
||||
fd.restitution = 5.000000000000000e-01f;
|
||||
fd.density = 1.000000000000000e+01f;
|
||||
fd.isSensor = bool(0);
|
||||
fd.filter.categoryBits = uint16(1);
|
||||
fd.filter.maskBits = uint16(65535);
|
||||
fd.filter.groupIndex = int16(0);
|
||||
b2PolygonShape shape;
|
||||
b2Vec2 vs[8];
|
||||
vs[0].Set(-6.900000095367432e+00f, -3.000000119209290e-01f);
|
||||
vs[1].Set(2.000000029802322e-01f, -3.000000119209290e-01f);
|
||||
vs[2].Set(2.000000029802322e-01f, 2.000000029802322e-01f);
|
||||
vs[3].Set(-6.900000095367432e+00f, 2.000000029802322e-01f);
|
||||
shape.Set(vs, 4);
|
||||
|
||||
fd.shape = &shape;
|
||||
|
||||
bodies[0]->CreateFixture(&fd);
|
||||
}
|
||||
}
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2BodyType(2);
|
||||
bd.position.Set(8.478260636329651e-01f, 2.500000000000000e+00f);
|
||||
bd.angle = 0.000000000000000e+00f;
|
||||
bd.linearVelocity.Set(0.000000000000000e+00f, 0.000000000000000e+00f);
|
||||
bd.angularVelocity = 0.000000000000000e+00f;
|
||||
bd.linearDamping = 5.000000000000000e-01f;
|
||||
bd.angularDamping = 5.000000000000000e-01f;
|
||||
bd.allowSleep = bool(4);
|
||||
bd.awake = bool(2);
|
||||
bd.fixedRotation = bool(0);
|
||||
bd.bullet = bool(0);
|
||||
bd.active = bool(32);
|
||||
bd.gravityScale = 1.000000000000000e+00f;
|
||||
bodies[1] = m_world->CreateBody(&bd);
|
||||
|
||||
{
|
||||
b2FixtureDef fd;
|
||||
fd.friction = 1.000000000000000e+00f;
|
||||
fd.restitution = 5.000000000000000e-01f;
|
||||
fd.density = 1.000000000000000e+01f;
|
||||
fd.isSensor = bool(0);
|
||||
fd.filter.categoryBits = uint16(1);
|
||||
fd.filter.maskBits = uint16(65535);
|
||||
fd.filter.groupIndex = int16(0);
|
||||
b2PolygonShape shape;
|
||||
b2Vec2 vs[8];
|
||||
vs[0].Set(-3.228000104427338e-01f, -2.957000136375427e-01f);
|
||||
vs[1].Set(6.885900020599365e+00f, -3.641000092029572e-01f);
|
||||
vs[2].Set(6.907599925994873e+00f, 3.271999955177307e-01f);
|
||||
vs[3].Set(-3.228000104427338e-01f, 2.825999855995178e-01f);
|
||||
shape.Set(vs, 4);
|
||||
|
||||
fd.shape = &shape;
|
||||
|
||||
bodies[1]->CreateFixture(&fd);
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2BodyType(0);
|
||||
bd.position.Set(0.000000000000000e+00f, 0.000000000000000e+00f);
|
||||
bd.angle = 0.000000000000000e+00f;
|
||||
bd.linearVelocity.Set(0.000000000000000e+00f, 0.000000000000000e+00f);
|
||||
bd.angularVelocity = 0.000000000000000e+00f;
|
||||
bd.linearDamping = 0.000000000000000e+00f;
|
||||
bd.angularDamping = 0.000000000000000e+00f;
|
||||
bd.allowSleep = bool(4);
|
||||
bd.awake = bool(2);
|
||||
bd.fixedRotation = bool(0);
|
||||
bd.bullet = bool(0);
|
||||
bd.active = bool(32);
|
||||
bd.gravityScale = 1.000000000000000e+00f;
|
||||
bodies[2] = m_world->CreateBody(&bd);
|
||||
|
||||
{
|
||||
b2FixtureDef fd;
|
||||
fd.friction = 1.000000000000000e+01f;
|
||||
fd.restitution = 0.000000000000000e+00f;
|
||||
fd.density = 0.000000000000000e+00f;
|
||||
fd.isSensor = bool(0);
|
||||
fd.filter.categoryBits = uint16(1);
|
||||
fd.filter.maskBits = uint16(65535);
|
||||
fd.filter.groupIndex = int16(0);
|
||||
b2EdgeShape shape;
|
||||
shape.m_radius = 9.999999776482582e-03f;
|
||||
shape.m_vertex0.Set(0.000000000000000e+00f, 0.000000000000000e+00f);
|
||||
shape.m_vertex1.Set(4.452173995971680e+01f, 1.669565200805664e+01f);
|
||||
shape.m_vertex2.Set(4.452173995971680e+01f, 0.000000000000000e+00f);
|
||||
shape.m_vertex3.Set(0.000000000000000e+00f, 0.000000000000000e+00f);
|
||||
shape.m_hasVertex0 = bool(0);
|
||||
shape.m_hasVertex3 = bool(0);
|
||||
|
||||
fd.shape = &shape;
|
||||
|
||||
bodies[2]->CreateFixture(&fd);
|
||||
}
|
||||
{
|
||||
b2FixtureDef fd;
|
||||
fd.friction = 1.000000000000000e+01f;
|
||||
fd.restitution = 0.000000000000000e+00f;
|
||||
fd.density = 0.000000000000000e+00f;
|
||||
fd.isSensor = bool(0);
|
||||
fd.filter.categoryBits = uint16(1);
|
||||
fd.filter.maskBits = uint16(65535);
|
||||
fd.filter.groupIndex = int16(0);
|
||||
b2EdgeShape shape;
|
||||
shape.m_radius = 9.999999776482582e-03f;
|
||||
shape.m_vertex0.Set(0.000000000000000e+00f, 0.000000000000000e+00f);
|
||||
shape.m_vertex1.Set(0.000000000000000e+00f, 1.669565200805664e+01f);
|
||||
shape.m_vertex2.Set(0.000000000000000e+00f, 0.000000000000000e+00f);
|
||||
shape.m_vertex3.Set(0.000000000000000e+00f, 0.000000000000000e+00f);
|
||||
shape.m_hasVertex0 = bool(0);
|
||||
shape.m_hasVertex3 = bool(0);
|
||||
|
||||
fd.shape = &shape;
|
||||
|
||||
bodies[2]->CreateFixture(&fd);
|
||||
}
|
||||
{
|
||||
b2FixtureDef fd;
|
||||
fd.friction = 1.000000000000000e+01f;
|
||||
fd.restitution = 0.000000000000000e+00f;
|
||||
fd.density = 0.000000000000000e+00f;
|
||||
fd.isSensor = bool(0);
|
||||
fd.filter.categoryBits = uint16(1);
|
||||
fd.filter.maskBits = uint16(65535);
|
||||
fd.filter.groupIndex = int16(0);
|
||||
b2EdgeShape shape;
|
||||
shape.m_radius = 9.999999776482582e-03f;
|
||||
shape.m_vertex0.Set(0.000000000000000e+00f, 0.000000000000000e+00f);
|
||||
shape.m_vertex1.Set(0.000000000000000e+00f, 1.669565200805664e+01f);
|
||||
shape.m_vertex2.Set(4.452173995971680e+01f, 1.669565200805664e+01f);
|
||||
shape.m_vertex3.Set(0.000000000000000e+00f, 0.000000000000000e+00f);
|
||||
shape.m_hasVertex0 = bool(0);
|
||||
shape.m_hasVertex3 = bool(0);
|
||||
|
||||
fd.shape = &shape;
|
||||
|
||||
bodies[2]->CreateFixture(&fd);
|
||||
}
|
||||
{
|
||||
b2FixtureDef fd;
|
||||
fd.friction = 1.000000000000000e+01f;
|
||||
fd.restitution = 0.000000000000000e+00f;
|
||||
fd.density = 0.000000000000000e+00f;
|
||||
fd.isSensor = bool(0);
|
||||
fd.filter.categoryBits = uint16(1);
|
||||
fd.filter.maskBits = uint16(65535);
|
||||
fd.filter.groupIndex = int16(0);
|
||||
b2EdgeShape shape;
|
||||
shape.m_radius = 9.999999776482582e-03f;
|
||||
shape.m_vertex0.Set(0.000000000000000e+00f, 0.000000000000000e+00f);
|
||||
shape.m_vertex1.Set(0.000000000000000e+00f, 0.000000000000000e+00f);
|
||||
shape.m_vertex2.Set(4.452173995971680e+01f, 0.000000000000000e+00f);
|
||||
shape.m_vertex3.Set(0.000000000000000e+00f, 0.000000000000000e+00f);
|
||||
shape.m_hasVertex0 = bool(0);
|
||||
shape.m_hasVertex3 = bool(0);
|
||||
|
||||
fd.shape = &shape;
|
||||
|
||||
bodies[2]->CreateFixture(&fd);
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
b2PrismaticJointDef jd;
|
||||
jd.bodyA = bodies[1];
|
||||
jd.bodyB = bodies[0];
|
||||
jd.collideConnected = bool(0);
|
||||
jd.localAnchorA.Set(0.000000000000000e+00f, 0.000000000000000e+00f);
|
||||
jd.localAnchorB.Set(-1.219565200805664e+01f, 0.000000000000000e+00f);
|
||||
jd.localAxisA.Set(-1.219565200805664e+01f, 0.000000000000000e+00f);
|
||||
jd.referenceAngle = 0.000000000000000e+00f;
|
||||
jd.enableLimit = bool(1);
|
||||
jd.lowerTranslation = -2.000000000000000e+01f;
|
||||
jd.upperTranslation = 0.000000000000000e+00f;
|
||||
jd.enableMotor = bool(1);
|
||||
jd.motorSpeed = 0.000000000000000e+00f;
|
||||
jd.maxMotorForce = 1.000000000000000e+01f;
|
||||
joints[0] = m_world->CreateJoint(&jd);
|
||||
}
|
||||
{
|
||||
b2RevoluteJointDef jd;
|
||||
jd.bodyA = bodies[1];
|
||||
jd.bodyB = bodies[2];
|
||||
jd.collideConnected = bool(0);
|
||||
jd.localAnchorA.Set(0.000000000000000e+00f, 0.000000000000000e+00f);
|
||||
jd.localAnchorB.Set(8.478260636329651e-01f, 2.500000000000000e+00f);
|
||||
jd.referenceAngle = 0.000000000000000e+00f;
|
||||
jd.enableLimit = bool(0);
|
||||
jd.lowerAngle = 0.000000000000000e+00f;
|
||||
jd.upperAngle = 0.000000000000000e+00f;
|
||||
jd.enableMotor = bool(0);
|
||||
jd.motorSpeed = 0.000000000000000e+00f;
|
||||
jd.maxMotorTorque = 0.000000000000000e+00f;
|
||||
joints[1] = m_world->CreateJoint(&jd);
|
||||
}
|
||||
b2Free(joints);
|
||||
b2Free(bodies);
|
||||
joints = NULL;
|
||||
bodies = NULL;
|
||||
|
||||
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new DumpShell;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2011 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef DUMP_SHELL_H
|
||||
#define DUMP_SHELL_H
|
||||
|
||||
// This test holds worlds dumped using b2World::Dump.
|
||||
class DumpShell : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
DumpShell()
|
||||
{
|
||||
|
||||
b2Vec2 g(0.000000000000000e+00f, 0.000000000000000e+00f);
|
||||
m_world->SetGravity(g);
|
||||
b2Body** bodies = (b2Body**)b2Alloc(3 * sizeof(b2Body*));
|
||||
b2Joint** joints = (b2Joint**)b2Alloc(2 * sizeof(b2Joint*));
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2BodyType(2);
|
||||
bd.position.Set(1.304347801208496e+01f, 2.500000000000000e+00f);
|
||||
bd.angle = 0.000000000000000e+00f;
|
||||
bd.linearVelocity.Set(0.000000000000000e+00f, 0.000000000000000e+00f);
|
||||
bd.angularVelocity = 0.000000000000000e+00f;
|
||||
bd.linearDamping = 5.000000000000000e-01f;
|
||||
bd.angularDamping = 5.000000000000000e-01f;
|
||||
bd.allowSleep = bool(4);
|
||||
bd.awake = bool(2);
|
||||
bd.fixedRotation = bool(0);
|
||||
bd.bullet = bool(0);
|
||||
bd.active = bool(32);
|
||||
bd.gravityScale = 1.000000000000000e+00f;
|
||||
bodies[0] = m_world->CreateBody(&bd);
|
||||
|
||||
{
|
||||
b2FixtureDef fd;
|
||||
fd.friction = 1.000000000000000e+00f;
|
||||
fd.restitution = 5.000000000000000e-01f;
|
||||
fd.density = 1.000000000000000e+01f;
|
||||
fd.isSensor = bool(0);
|
||||
fd.filter.categoryBits = uint16(1);
|
||||
fd.filter.maskBits = uint16(65535);
|
||||
fd.filter.groupIndex = int16(0);
|
||||
b2PolygonShape shape;
|
||||
b2Vec2 vs[8];
|
||||
vs[0].Set(-6.900000095367432e+00f, -3.000000119209290e-01f);
|
||||
vs[1].Set(2.000000029802322e-01f, -3.000000119209290e-01f);
|
||||
vs[2].Set(2.000000029802322e-01f, 2.000000029802322e-01f);
|
||||
vs[3].Set(-6.900000095367432e+00f, 2.000000029802322e-01f);
|
||||
shape.Set(vs, 4);
|
||||
|
||||
fd.shape = &shape;
|
||||
|
||||
bodies[0]->CreateFixture(&fd);
|
||||
}
|
||||
}
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2BodyType(2);
|
||||
bd.position.Set(8.478260636329651e-01f, 2.500000000000000e+00f);
|
||||
bd.angle = 0.000000000000000e+00f;
|
||||
bd.linearVelocity.Set(0.000000000000000e+00f, 0.000000000000000e+00f);
|
||||
bd.angularVelocity = 0.000000000000000e+00f;
|
||||
bd.linearDamping = 5.000000000000000e-01f;
|
||||
bd.angularDamping = 5.000000000000000e-01f;
|
||||
bd.allowSleep = bool(4);
|
||||
bd.awake = bool(2);
|
||||
bd.fixedRotation = bool(0);
|
||||
bd.bullet = bool(0);
|
||||
bd.active = bool(32);
|
||||
bd.gravityScale = 1.000000000000000e+00f;
|
||||
bodies[1] = m_world->CreateBody(&bd);
|
||||
|
||||
{
|
||||
b2FixtureDef fd;
|
||||
fd.friction = 1.000000000000000e+00f;
|
||||
fd.restitution = 5.000000000000000e-01f;
|
||||
fd.density = 1.000000000000000e+01f;
|
||||
fd.isSensor = bool(0);
|
||||
fd.filter.categoryBits = uint16(1);
|
||||
fd.filter.maskBits = uint16(65535);
|
||||
fd.filter.groupIndex = int16(0);
|
||||
b2PolygonShape shape;
|
||||
b2Vec2 vs[8];
|
||||
vs[0].Set(-3.228000104427338e-01f, -2.957000136375427e-01f);
|
||||
vs[1].Set(6.885900020599365e+00f, -3.641000092029572e-01f);
|
||||
vs[2].Set(6.907599925994873e+00f, 3.271999955177307e-01f);
|
||||
vs[3].Set(-3.228000104427338e-01f, 2.825999855995178e-01f);
|
||||
shape.Set(vs, 4);
|
||||
|
||||
fd.shape = &shape;
|
||||
|
||||
bodies[1]->CreateFixture(&fd);
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2BodyType(0);
|
||||
bd.position.Set(0.000000000000000e+00f, 0.000000000000000e+00f);
|
||||
bd.angle = 0.000000000000000e+00f;
|
||||
bd.linearVelocity.Set(0.000000000000000e+00f, 0.000000000000000e+00f);
|
||||
bd.angularVelocity = 0.000000000000000e+00f;
|
||||
bd.linearDamping = 0.000000000000000e+00f;
|
||||
bd.angularDamping = 0.000000000000000e+00f;
|
||||
bd.allowSleep = bool(4);
|
||||
bd.awake = bool(2);
|
||||
bd.fixedRotation = bool(0);
|
||||
bd.bullet = bool(0);
|
||||
bd.active = bool(32);
|
||||
bd.gravityScale = 1.000000000000000e+00f;
|
||||
bodies[2] = m_world->CreateBody(&bd);
|
||||
|
||||
{
|
||||
b2FixtureDef fd;
|
||||
fd.friction = 1.000000000000000e+01f;
|
||||
fd.restitution = 0.000000000000000e+00f;
|
||||
fd.density = 0.000000000000000e+00f;
|
||||
fd.isSensor = bool(0);
|
||||
fd.filter.categoryBits = uint16(1);
|
||||
fd.filter.maskBits = uint16(65535);
|
||||
fd.filter.groupIndex = int16(0);
|
||||
b2EdgeShape shape;
|
||||
shape.m_radius = 9.999999776482582e-03f;
|
||||
shape.m_vertex0.Set(0.000000000000000e+00f, 0.000000000000000e+00f);
|
||||
shape.m_vertex1.Set(4.452173995971680e+01f, 1.669565200805664e+01f);
|
||||
shape.m_vertex2.Set(4.452173995971680e+01f, 0.000000000000000e+00f);
|
||||
shape.m_vertex3.Set(0.000000000000000e+00f, 0.000000000000000e+00f);
|
||||
shape.m_hasVertex0 = bool(0);
|
||||
shape.m_hasVertex3 = bool(0);
|
||||
|
||||
fd.shape = &shape;
|
||||
|
||||
bodies[2]->CreateFixture(&fd);
|
||||
}
|
||||
{
|
||||
b2FixtureDef fd;
|
||||
fd.friction = 1.000000000000000e+01f;
|
||||
fd.restitution = 0.000000000000000e+00f;
|
||||
fd.density = 0.000000000000000e+00f;
|
||||
fd.isSensor = bool(0);
|
||||
fd.filter.categoryBits = uint16(1);
|
||||
fd.filter.maskBits = uint16(65535);
|
||||
fd.filter.groupIndex = int16(0);
|
||||
b2EdgeShape shape;
|
||||
shape.m_radius = 9.999999776482582e-03f;
|
||||
shape.m_vertex0.Set(0.000000000000000e+00f, 0.000000000000000e+00f);
|
||||
shape.m_vertex1.Set(0.000000000000000e+00f, 1.669565200805664e+01f);
|
||||
shape.m_vertex2.Set(0.000000000000000e+00f, 0.000000000000000e+00f);
|
||||
shape.m_vertex3.Set(0.000000000000000e+00f, 0.000000000000000e+00f);
|
||||
shape.m_hasVertex0 = bool(0);
|
||||
shape.m_hasVertex3 = bool(0);
|
||||
|
||||
fd.shape = &shape;
|
||||
|
||||
bodies[2]->CreateFixture(&fd);
|
||||
}
|
||||
{
|
||||
b2FixtureDef fd;
|
||||
fd.friction = 1.000000000000000e+01f;
|
||||
fd.restitution = 0.000000000000000e+00f;
|
||||
fd.density = 0.000000000000000e+00f;
|
||||
fd.isSensor = bool(0);
|
||||
fd.filter.categoryBits = uint16(1);
|
||||
fd.filter.maskBits = uint16(65535);
|
||||
fd.filter.groupIndex = int16(0);
|
||||
b2EdgeShape shape;
|
||||
shape.m_radius = 9.999999776482582e-03f;
|
||||
shape.m_vertex0.Set(0.000000000000000e+00f, 0.000000000000000e+00f);
|
||||
shape.m_vertex1.Set(0.000000000000000e+00f, 1.669565200805664e+01f);
|
||||
shape.m_vertex2.Set(4.452173995971680e+01f, 1.669565200805664e+01f);
|
||||
shape.m_vertex3.Set(0.000000000000000e+00f, 0.000000000000000e+00f);
|
||||
shape.m_hasVertex0 = bool(0);
|
||||
shape.m_hasVertex3 = bool(0);
|
||||
|
||||
fd.shape = &shape;
|
||||
|
||||
bodies[2]->CreateFixture(&fd);
|
||||
}
|
||||
{
|
||||
b2FixtureDef fd;
|
||||
fd.friction = 1.000000000000000e+01f;
|
||||
fd.restitution = 0.000000000000000e+00f;
|
||||
fd.density = 0.000000000000000e+00f;
|
||||
fd.isSensor = bool(0);
|
||||
fd.filter.categoryBits = uint16(1);
|
||||
fd.filter.maskBits = uint16(65535);
|
||||
fd.filter.groupIndex = int16(0);
|
||||
b2EdgeShape shape;
|
||||
shape.m_radius = 9.999999776482582e-03f;
|
||||
shape.m_vertex0.Set(0.000000000000000e+00f, 0.000000000000000e+00f);
|
||||
shape.m_vertex1.Set(0.000000000000000e+00f, 0.000000000000000e+00f);
|
||||
shape.m_vertex2.Set(4.452173995971680e+01f, 0.000000000000000e+00f);
|
||||
shape.m_vertex3.Set(0.000000000000000e+00f, 0.000000000000000e+00f);
|
||||
shape.m_hasVertex0 = bool(0);
|
||||
shape.m_hasVertex3 = bool(0);
|
||||
|
||||
fd.shape = &shape;
|
||||
|
||||
bodies[2]->CreateFixture(&fd);
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
b2PrismaticJointDef jd;
|
||||
jd.bodyA = bodies[1];
|
||||
jd.bodyB = bodies[0];
|
||||
jd.collideConnected = bool(0);
|
||||
jd.localAnchorA.Set(0.000000000000000e+00f, 0.000000000000000e+00f);
|
||||
jd.localAnchorB.Set(-1.219565200805664e+01f, 0.000000000000000e+00f);
|
||||
jd.localAxisA.Set(-1.219565200805664e+01f, 0.000000000000000e+00f);
|
||||
jd.referenceAngle = 0.000000000000000e+00f;
|
||||
jd.enableLimit = bool(1);
|
||||
jd.lowerTranslation = -2.000000000000000e+01f;
|
||||
jd.upperTranslation = 0.000000000000000e+00f;
|
||||
jd.enableMotor = bool(1);
|
||||
jd.motorSpeed = 0.000000000000000e+00f;
|
||||
jd.maxMotorForce = 1.000000000000000e+01f;
|
||||
joints[0] = m_world->CreateJoint(&jd);
|
||||
}
|
||||
{
|
||||
b2RevoluteJointDef jd;
|
||||
jd.bodyA = bodies[1];
|
||||
jd.bodyB = bodies[2];
|
||||
jd.collideConnected = bool(0);
|
||||
jd.localAnchorA.Set(0.000000000000000e+00f, 0.000000000000000e+00f);
|
||||
jd.localAnchorB.Set(8.478260636329651e-01f, 2.500000000000000e+00f);
|
||||
jd.referenceAngle = 0.000000000000000e+00f;
|
||||
jd.enableLimit = bool(0);
|
||||
jd.lowerAngle = 0.000000000000000e+00f;
|
||||
jd.upperAngle = 0.000000000000000e+00f;
|
||||
jd.enableMotor = bool(0);
|
||||
jd.motorSpeed = 0.000000000000000e+00f;
|
||||
jd.maxMotorTorque = 0.000000000000000e+00f;
|
||||
joints[1] = m_world->CreateJoint(&jd);
|
||||
}
|
||||
b2Free(joints);
|
||||
b2Free(bodies);
|
||||
joints = NULL;
|
||||
bodies = NULL;
|
||||
|
||||
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new DumpShell;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,357 +1,357 @@
|
||||
/*
|
||||
* Copyright (c) 2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef DYNAMIC_TREE_TEST_H
|
||||
#define DYNAMIC_TREE_TEST_H
|
||||
|
||||
class DynamicTreeTest : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
enum
|
||||
{
|
||||
e_actorCount = 128
|
||||
};
|
||||
|
||||
DynamicTreeTest()
|
||||
{
|
||||
m_worldExtent = 15.0f;
|
||||
m_proxyExtent = 0.5f;
|
||||
|
||||
srand(888);
|
||||
|
||||
for (int32 i = 0; i < e_actorCount; ++i)
|
||||
{
|
||||
Actor* actor = m_actors + i;
|
||||
GetRandomAABB(&actor->aabb);
|
||||
actor->proxyId = m_tree.CreateProxy(actor->aabb, actor);
|
||||
}
|
||||
|
||||
m_stepCount = 0;
|
||||
|
||||
float32 h = m_worldExtent;
|
||||
m_queryAABB.lowerBound.Set(-3.0f, -4.0f + h);
|
||||
m_queryAABB.upperBound.Set(5.0f, 6.0f + h);
|
||||
|
||||
m_rayCastInput.p1.Set(-5.0, 5.0f + h);
|
||||
m_rayCastInput.p2.Set(7.0f, -4.0f + h);
|
||||
//m_rayCastInput.p1.Set(0.0f, 2.0f + h);
|
||||
//m_rayCastInput.p2.Set(0.0f, -2.0f + h);
|
||||
m_rayCastInput.maxFraction = 1.0f;
|
||||
|
||||
m_automated = false;
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new DynamicTreeTest;
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
B2_NOT_USED(settings);
|
||||
|
||||
m_rayActor = NULL;
|
||||
for (int32 i = 0; i < e_actorCount; ++i)
|
||||
{
|
||||
m_actors[i].fraction = 1.0f;
|
||||
m_actors[i].overlap = false;
|
||||
}
|
||||
|
||||
if (m_automated == true)
|
||||
{
|
||||
int32 actionCount = b2Max(1, e_actorCount >> 2);
|
||||
|
||||
for (int32 i = 0; i < actionCount; ++i)
|
||||
{
|
||||
Action();
|
||||
}
|
||||
}
|
||||
|
||||
Query();
|
||||
RayCast();
|
||||
|
||||
for (int32 i = 0; i < e_actorCount; ++i)
|
||||
{
|
||||
Actor* actor = m_actors + i;
|
||||
if (actor->proxyId == b2_nullNode)
|
||||
continue;
|
||||
|
||||
b2Color c(0.9f, 0.9f, 0.9f);
|
||||
if (actor == m_rayActor && actor->overlap)
|
||||
{
|
||||
c.Set(0.9f, 0.6f, 0.6f);
|
||||
}
|
||||
else if (actor == m_rayActor)
|
||||
{
|
||||
c.Set(0.6f, 0.9f, 0.6f);
|
||||
}
|
||||
else if (actor->overlap)
|
||||
{
|
||||
c.Set(0.6f, 0.6f, 0.9f);
|
||||
}
|
||||
|
||||
m_debugDraw.DrawAABB(&actor->aabb, c);
|
||||
}
|
||||
|
||||
b2Color c(0.7f, 0.7f, 0.7f);
|
||||
m_debugDraw.DrawAABB(&m_queryAABB, c);
|
||||
|
||||
m_debugDraw.DrawSegment(m_rayCastInput.p1, m_rayCastInput.p2, c);
|
||||
|
||||
b2Color c1(0.2f, 0.9f, 0.2f);
|
||||
b2Color c2(0.9f, 0.2f, 0.2f);
|
||||
m_debugDraw.DrawPoint(m_rayCastInput.p1, 6.0f, c1);
|
||||
m_debugDraw.DrawPoint(m_rayCastInput.p2, 6.0f, c2);
|
||||
|
||||
if (m_rayActor)
|
||||
{
|
||||
b2Color cr(0.2f, 0.2f, 0.9f);
|
||||
b2Vec2 p = m_rayCastInput.p1 + m_rayActor->fraction * (m_rayCastInput.p2 - m_rayCastInput.p1);
|
||||
m_debugDraw.DrawPoint(p, 6.0f, cr);
|
||||
}
|
||||
|
||||
{
|
||||
int32 height = m_tree.GetHeight();
|
||||
m_debugDraw.DrawString(5, m_textLine, "dynamic tree height = %d", height);
|
||||
m_textLine += 15;
|
||||
}
|
||||
|
||||
++m_stepCount;
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case 'a':
|
||||
m_automated = !m_automated;
|
||||
break;
|
||||
|
||||
case 'c':
|
||||
CreateProxy();
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
DestroyProxy();
|
||||
break;
|
||||
|
||||
case 'm':
|
||||
MoveProxy();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
bool QueryCallback(int32 proxyId)
|
||||
{
|
||||
Actor* actor = (Actor*)m_tree.GetUserData(proxyId);
|
||||
actor->overlap = b2TestOverlap(m_queryAABB, actor->aabb);
|
||||
return true;
|
||||
}
|
||||
|
||||
float32 RayCastCallback(const b2RayCastInput& input, int32 proxyId)
|
||||
{
|
||||
Actor* actor = (Actor*)m_tree.GetUserData(proxyId);
|
||||
|
||||
b2RayCastOutput output;
|
||||
bool hit = actor->aabb.RayCast(&output, input);
|
||||
|
||||
if (hit)
|
||||
{
|
||||
m_rayCastOutput = output;
|
||||
m_rayActor = actor;
|
||||
m_rayActor->fraction = output.fraction;
|
||||
return output.fraction;
|
||||
}
|
||||
|
||||
return input.maxFraction;
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
struct Actor
|
||||
{
|
||||
b2AABB aabb;
|
||||
float32 fraction;
|
||||
bool overlap;
|
||||
int32 proxyId;
|
||||
};
|
||||
|
||||
void GetRandomAABB(b2AABB* aabb)
|
||||
{
|
||||
b2Vec2 w; w.Set(2.0f * m_proxyExtent, 2.0f * m_proxyExtent);
|
||||
//aabb->lowerBound.x = -m_proxyExtent;
|
||||
//aabb->lowerBound.y = -m_proxyExtent + m_worldExtent;
|
||||
aabb->lowerBound.x = RandomFloat(-m_worldExtent, m_worldExtent);
|
||||
aabb->lowerBound.y = RandomFloat(0.0f, 2.0f * m_worldExtent);
|
||||
aabb->upperBound = aabb->lowerBound + w;
|
||||
}
|
||||
|
||||
void MoveAABB(b2AABB* aabb)
|
||||
{
|
||||
b2Vec2 d;
|
||||
d.x = RandomFloat(-0.5f, 0.5f);
|
||||
d.y = RandomFloat(-0.5f, 0.5f);
|
||||
//d.x = 2.0f;
|
||||
//d.y = 0.0f;
|
||||
aabb->lowerBound += d;
|
||||
aabb->upperBound += d;
|
||||
|
||||
b2Vec2 c0 = 0.5f * (aabb->lowerBound + aabb->upperBound);
|
||||
b2Vec2 min; min.Set(-m_worldExtent, 0.0f);
|
||||
b2Vec2 max; max.Set(m_worldExtent, 2.0f * m_worldExtent);
|
||||
b2Vec2 c = b2Clamp(c0, min, max);
|
||||
|
||||
aabb->lowerBound += c - c0;
|
||||
aabb->upperBound += c - c0;
|
||||
}
|
||||
|
||||
void CreateProxy()
|
||||
{
|
||||
for (int32 i = 0; i < e_actorCount; ++i)
|
||||
{
|
||||
int32 j = rand() % e_actorCount;
|
||||
Actor* actor = m_actors + j;
|
||||
if (actor->proxyId == b2_nullNode)
|
||||
{
|
||||
GetRandomAABB(&actor->aabb);
|
||||
actor->proxyId = m_tree.CreateProxy(actor->aabb, actor);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DestroyProxy()
|
||||
{
|
||||
for (int32 i = 0; i < e_actorCount; ++i)
|
||||
{
|
||||
int32 j = rand() % e_actorCount;
|
||||
Actor* actor = m_actors + j;
|
||||
if (actor->proxyId != b2_nullNode)
|
||||
{
|
||||
m_tree.DestroyProxy(actor->proxyId);
|
||||
actor->proxyId = b2_nullNode;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MoveProxy()
|
||||
{
|
||||
for (int32 i = 0; i < e_actorCount; ++i)
|
||||
{
|
||||
int32 j = rand() % e_actorCount;
|
||||
Actor* actor = m_actors + j;
|
||||
if (actor->proxyId == b2_nullNode)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
b2AABB aabb0 = actor->aabb;
|
||||
MoveAABB(&actor->aabb);
|
||||
b2Vec2 displacement = actor->aabb.GetCenter() - aabb0.GetCenter();
|
||||
m_tree.MoveProxy(actor->proxyId, actor->aabb, displacement);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void Action()
|
||||
{
|
||||
int32 choice = rand() % 20;
|
||||
|
||||
switch (choice)
|
||||
{
|
||||
case 0:
|
||||
CreateProxy();
|
||||
break;
|
||||
|
||||
case 1:
|
||||
DestroyProxy();
|
||||
break;
|
||||
|
||||
default:
|
||||
MoveProxy();
|
||||
}
|
||||
}
|
||||
|
||||
void Query()
|
||||
{
|
||||
m_tree.Query(this, m_queryAABB);
|
||||
|
||||
for (int32 i = 0; i < e_actorCount; ++i)
|
||||
{
|
||||
if (m_actors[i].proxyId == b2_nullNode)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
bool overlap = b2TestOverlap(m_queryAABB, m_actors[i].aabb);
|
||||
B2_NOT_USED(overlap);
|
||||
b2Assert(overlap == m_actors[i].overlap);
|
||||
}
|
||||
}
|
||||
|
||||
void RayCast()
|
||||
{
|
||||
m_rayActor = NULL;
|
||||
|
||||
b2RayCastInput input = m_rayCastInput;
|
||||
|
||||
// Ray cast against the dynamic tree.
|
||||
m_tree.RayCast(this, input);
|
||||
|
||||
// Brute force ray cast.
|
||||
Actor* bruteActor = NULL;
|
||||
b2RayCastOutput bruteOutput;
|
||||
for (int32 i = 0; i < e_actorCount; ++i)
|
||||
{
|
||||
if (m_actors[i].proxyId == b2_nullNode)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
b2RayCastOutput output;
|
||||
bool hit = m_actors[i].aabb.RayCast(&output, input);
|
||||
if (hit)
|
||||
{
|
||||
bruteActor = m_actors + i;
|
||||
bruteOutput = output;
|
||||
input.maxFraction = output.fraction;
|
||||
}
|
||||
}
|
||||
|
||||
if (bruteActor != NULL)
|
||||
{
|
||||
b2Assert(bruteOutput.fraction == m_rayCastOutput.fraction);
|
||||
}
|
||||
}
|
||||
|
||||
float32 m_worldExtent;
|
||||
float32 m_proxyExtent;
|
||||
|
||||
b2DynamicTree m_tree;
|
||||
b2AABB m_queryAABB;
|
||||
b2RayCastInput m_rayCastInput;
|
||||
b2RayCastOutput m_rayCastOutput;
|
||||
Actor* m_rayActor;
|
||||
Actor m_actors[e_actorCount];
|
||||
int32 m_stepCount;
|
||||
bool m_automated;
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef DYNAMIC_TREE_TEST_H
|
||||
#define DYNAMIC_TREE_TEST_H
|
||||
|
||||
class DynamicTreeTest : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
enum
|
||||
{
|
||||
e_actorCount = 128
|
||||
};
|
||||
|
||||
DynamicTreeTest()
|
||||
{
|
||||
m_worldExtent = 15.0f;
|
||||
m_proxyExtent = 0.5f;
|
||||
|
||||
srand(888);
|
||||
|
||||
for (int32 i = 0; i < e_actorCount; ++i)
|
||||
{
|
||||
Actor* actor = m_actors + i;
|
||||
GetRandomAABB(&actor->aabb);
|
||||
actor->proxyId = m_tree.CreateProxy(actor->aabb, actor);
|
||||
}
|
||||
|
||||
m_stepCount = 0;
|
||||
|
||||
float32 h = m_worldExtent;
|
||||
m_queryAABB.lowerBound.Set(-3.0f, -4.0f + h);
|
||||
m_queryAABB.upperBound.Set(5.0f, 6.0f + h);
|
||||
|
||||
m_rayCastInput.p1.Set(-5.0, 5.0f + h);
|
||||
m_rayCastInput.p2.Set(7.0f, -4.0f + h);
|
||||
//m_rayCastInput.p1.Set(0.0f, 2.0f + h);
|
||||
//m_rayCastInput.p2.Set(0.0f, -2.0f + h);
|
||||
m_rayCastInput.maxFraction = 1.0f;
|
||||
|
||||
m_automated = false;
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new DynamicTreeTest;
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
B2_NOT_USED(settings);
|
||||
|
||||
m_rayActor = NULL;
|
||||
for (int32 i = 0; i < e_actorCount; ++i)
|
||||
{
|
||||
m_actors[i].fraction = 1.0f;
|
||||
m_actors[i].overlap = false;
|
||||
}
|
||||
|
||||
if (m_automated == true)
|
||||
{
|
||||
int32 actionCount = b2Max(1, e_actorCount >> 2);
|
||||
|
||||
for (int32 i = 0; i < actionCount; ++i)
|
||||
{
|
||||
Action();
|
||||
}
|
||||
}
|
||||
|
||||
Query();
|
||||
RayCast();
|
||||
|
||||
for (int32 i = 0; i < e_actorCount; ++i)
|
||||
{
|
||||
Actor* actor = m_actors + i;
|
||||
if (actor->proxyId == b2_nullNode)
|
||||
continue;
|
||||
|
||||
b2Color c(0.9f, 0.9f, 0.9f);
|
||||
if (actor == m_rayActor && actor->overlap)
|
||||
{
|
||||
c.Set(0.9f, 0.6f, 0.6f);
|
||||
}
|
||||
else if (actor == m_rayActor)
|
||||
{
|
||||
c.Set(0.6f, 0.9f, 0.6f);
|
||||
}
|
||||
else if (actor->overlap)
|
||||
{
|
||||
c.Set(0.6f, 0.6f, 0.9f);
|
||||
}
|
||||
|
||||
m_debugDraw.DrawAABB(&actor->aabb, c);
|
||||
}
|
||||
|
||||
b2Color c(0.7f, 0.7f, 0.7f);
|
||||
m_debugDraw.DrawAABB(&m_queryAABB, c);
|
||||
|
||||
m_debugDraw.DrawSegment(m_rayCastInput.p1, m_rayCastInput.p2, c);
|
||||
|
||||
b2Color c1(0.2f, 0.9f, 0.2f);
|
||||
b2Color c2(0.9f, 0.2f, 0.2f);
|
||||
m_debugDraw.DrawPoint(m_rayCastInput.p1, 6.0f, c1);
|
||||
m_debugDraw.DrawPoint(m_rayCastInput.p2, 6.0f, c2);
|
||||
|
||||
if (m_rayActor)
|
||||
{
|
||||
b2Color cr(0.2f, 0.2f, 0.9f);
|
||||
b2Vec2 p = m_rayCastInput.p1 + m_rayActor->fraction * (m_rayCastInput.p2 - m_rayCastInput.p1);
|
||||
m_debugDraw.DrawPoint(p, 6.0f, cr);
|
||||
}
|
||||
|
||||
{
|
||||
int32 height = m_tree.GetHeight();
|
||||
m_debugDraw.DrawString(5, m_textLine, "dynamic tree height = %d", height);
|
||||
m_textLine += 15;
|
||||
}
|
||||
|
||||
++m_stepCount;
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case 'a':
|
||||
m_automated = !m_automated;
|
||||
break;
|
||||
|
||||
case 'c':
|
||||
CreateProxy();
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
DestroyProxy();
|
||||
break;
|
||||
|
||||
case 'm':
|
||||
MoveProxy();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
bool QueryCallback(int32 proxyId)
|
||||
{
|
||||
Actor* actor = (Actor*)m_tree.GetUserData(proxyId);
|
||||
actor->overlap = b2TestOverlap(m_queryAABB, actor->aabb);
|
||||
return true;
|
||||
}
|
||||
|
||||
float32 RayCastCallback(const b2RayCastInput& input, int32 proxyId)
|
||||
{
|
||||
Actor* actor = (Actor*)m_tree.GetUserData(proxyId);
|
||||
|
||||
b2RayCastOutput output;
|
||||
bool hit = actor->aabb.RayCast(&output, input);
|
||||
|
||||
if (hit)
|
||||
{
|
||||
m_rayCastOutput = output;
|
||||
m_rayActor = actor;
|
||||
m_rayActor->fraction = output.fraction;
|
||||
return output.fraction;
|
||||
}
|
||||
|
||||
return input.maxFraction;
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
struct Actor
|
||||
{
|
||||
b2AABB aabb;
|
||||
float32 fraction;
|
||||
bool overlap;
|
||||
int32 proxyId;
|
||||
};
|
||||
|
||||
void GetRandomAABB(b2AABB* aabb)
|
||||
{
|
||||
b2Vec2 w; w.Set(2.0f * m_proxyExtent, 2.0f * m_proxyExtent);
|
||||
//aabb->lowerBound.x = -m_proxyExtent;
|
||||
//aabb->lowerBound.y = -m_proxyExtent + m_worldExtent;
|
||||
aabb->lowerBound.x = RandomFloat(-m_worldExtent, m_worldExtent);
|
||||
aabb->lowerBound.y = RandomFloat(0.0f, 2.0f * m_worldExtent);
|
||||
aabb->upperBound = aabb->lowerBound + w;
|
||||
}
|
||||
|
||||
void MoveAABB(b2AABB* aabb)
|
||||
{
|
||||
b2Vec2 d;
|
||||
d.x = RandomFloat(-0.5f, 0.5f);
|
||||
d.y = RandomFloat(-0.5f, 0.5f);
|
||||
//d.x = 2.0f;
|
||||
//d.y = 0.0f;
|
||||
aabb->lowerBound += d;
|
||||
aabb->upperBound += d;
|
||||
|
||||
b2Vec2 c0 = 0.5f * (aabb->lowerBound + aabb->upperBound);
|
||||
b2Vec2 min; min.Set(-m_worldExtent, 0.0f);
|
||||
b2Vec2 max; max.Set(m_worldExtent, 2.0f * m_worldExtent);
|
||||
b2Vec2 c = b2Clamp(c0, min, max);
|
||||
|
||||
aabb->lowerBound += c - c0;
|
||||
aabb->upperBound += c - c0;
|
||||
}
|
||||
|
||||
void CreateProxy()
|
||||
{
|
||||
for (int32 i = 0; i < e_actorCount; ++i)
|
||||
{
|
||||
int32 j = rand() % e_actorCount;
|
||||
Actor* actor = m_actors + j;
|
||||
if (actor->proxyId == b2_nullNode)
|
||||
{
|
||||
GetRandomAABB(&actor->aabb);
|
||||
actor->proxyId = m_tree.CreateProxy(actor->aabb, actor);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DestroyProxy()
|
||||
{
|
||||
for (int32 i = 0; i < e_actorCount; ++i)
|
||||
{
|
||||
int32 j = rand() % e_actorCount;
|
||||
Actor* actor = m_actors + j;
|
||||
if (actor->proxyId != b2_nullNode)
|
||||
{
|
||||
m_tree.DestroyProxy(actor->proxyId);
|
||||
actor->proxyId = b2_nullNode;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MoveProxy()
|
||||
{
|
||||
for (int32 i = 0; i < e_actorCount; ++i)
|
||||
{
|
||||
int32 j = rand() % e_actorCount;
|
||||
Actor* actor = m_actors + j;
|
||||
if (actor->proxyId == b2_nullNode)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
b2AABB aabb0 = actor->aabb;
|
||||
MoveAABB(&actor->aabb);
|
||||
b2Vec2 displacement = actor->aabb.GetCenter() - aabb0.GetCenter();
|
||||
m_tree.MoveProxy(actor->proxyId, actor->aabb, displacement);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void Action()
|
||||
{
|
||||
int32 choice = rand() % 20;
|
||||
|
||||
switch (choice)
|
||||
{
|
||||
case 0:
|
||||
CreateProxy();
|
||||
break;
|
||||
|
||||
case 1:
|
||||
DestroyProxy();
|
||||
break;
|
||||
|
||||
default:
|
||||
MoveProxy();
|
||||
}
|
||||
}
|
||||
|
||||
void Query()
|
||||
{
|
||||
m_tree.Query(this, m_queryAABB);
|
||||
|
||||
for (int32 i = 0; i < e_actorCount; ++i)
|
||||
{
|
||||
if (m_actors[i].proxyId == b2_nullNode)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
bool overlap = b2TestOverlap(m_queryAABB, m_actors[i].aabb);
|
||||
B2_NOT_USED(overlap);
|
||||
b2Assert(overlap == m_actors[i].overlap);
|
||||
}
|
||||
}
|
||||
|
||||
void RayCast()
|
||||
{
|
||||
m_rayActor = NULL;
|
||||
|
||||
b2RayCastInput input = m_rayCastInput;
|
||||
|
||||
// Ray cast against the dynamic tree.
|
||||
m_tree.RayCast(this, input);
|
||||
|
||||
// Brute force ray cast.
|
||||
Actor* bruteActor = NULL;
|
||||
b2RayCastOutput bruteOutput;
|
||||
for (int32 i = 0; i < e_actorCount; ++i)
|
||||
{
|
||||
if (m_actors[i].proxyId == b2_nullNode)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
b2RayCastOutput output;
|
||||
bool hit = m_actors[i].aabb.RayCast(&output, input);
|
||||
if (hit)
|
||||
{
|
||||
bruteActor = m_actors + i;
|
||||
bruteOutput = output;
|
||||
input.maxFraction = output.fraction;
|
||||
}
|
||||
}
|
||||
|
||||
if (bruteActor != NULL)
|
||||
{
|
||||
b2Assert(bruteOutput.fraction == m_rayCastOutput.fraction);
|
||||
}
|
||||
}
|
||||
|
||||
float32 m_worldExtent;
|
||||
float32 m_proxyExtent;
|
||||
|
||||
b2DynamicTree m_tree;
|
||||
b2AABB m_queryAABB;
|
||||
b2RayCastInput m_rayCastInput;
|
||||
b2RayCastOutput m_rayCastOutput;
|
||||
Actor* m_rayActor;
|
||||
Actor m_actors[e_actorCount];
|
||||
int32 m_stepCount;
|
||||
bool m_automated;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,249 +1,249 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2010 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef EDGE_SHAPES_H
|
||||
#define EDGE_SHAPES_H
|
||||
|
||||
class EdgeShapesCallback : public b2RayCastCallback
|
||||
{
|
||||
public:
|
||||
EdgeShapesCallback()
|
||||
{
|
||||
m_fixture = NULL;
|
||||
}
|
||||
|
||||
float32 ReportFixture( b2Fixture* fixture, const b2Vec2& point,
|
||||
const b2Vec2& normal, float32 fraction)
|
||||
{
|
||||
m_fixture = fixture;
|
||||
m_point = point;
|
||||
m_normal = normal;
|
||||
|
||||
return fraction;
|
||||
}
|
||||
|
||||
b2Fixture* m_fixture;
|
||||
b2Vec2 m_point;
|
||||
b2Vec2 m_normal;
|
||||
};
|
||||
|
||||
class EdgeShapes : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
enum
|
||||
{
|
||||
e_maxBodies = 256
|
||||
};
|
||||
|
||||
EdgeShapes()
|
||||
{
|
||||
// Ground body
|
||||
{
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
float32 x1 = -20.0f;
|
||||
float32 y1 = 2.0f * cosf(x1 / 10.0f * b2_pi);
|
||||
for (int32 i = 0; i < 80; ++i)
|
||||
{
|
||||
float32 x2 = x1 + 0.5f;
|
||||
float32 y2 = 2.0f * cosf(x2 / 10.0f * b2_pi);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(x1, y1), b2Vec2(x2, y2));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
|
||||
x1 = x2;
|
||||
y1 = y2;
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
b2Vec2 vertices[3];
|
||||
vertices[0].Set(-0.5f, 0.0f);
|
||||
vertices[1].Set(0.5f, 0.0f);
|
||||
vertices[2].Set(0.0f, 1.5f);
|
||||
m_polygons[0].Set(vertices, 3);
|
||||
}
|
||||
|
||||
{
|
||||
b2Vec2 vertices[3];
|
||||
vertices[0].Set(-0.1f, 0.0f);
|
||||
vertices[1].Set(0.1f, 0.0f);
|
||||
vertices[2].Set(0.0f, 1.5f);
|
||||
m_polygons[1].Set(vertices, 3);
|
||||
}
|
||||
|
||||
{
|
||||
float32 w = 1.0f;
|
||||
float32 b = w / (2.0f + b2Sqrt(2.0f));
|
||||
float32 s = b2Sqrt(2.0f) * b;
|
||||
|
||||
b2Vec2 vertices[8];
|
||||
vertices[0].Set(0.5f * s, 0.0f);
|
||||
vertices[1].Set(0.5f * w, b);
|
||||
vertices[2].Set(0.5f * w, b + s);
|
||||
vertices[3].Set(0.5f * s, w);
|
||||
vertices[4].Set(-0.5f * s, w);
|
||||
vertices[5].Set(-0.5f * w, b + s);
|
||||
vertices[6].Set(-0.5f * w, b);
|
||||
vertices[7].Set(-0.5f * s, 0.0f);
|
||||
|
||||
m_polygons[2].Set(vertices, 8);
|
||||
}
|
||||
|
||||
{
|
||||
m_polygons[3].SetAsBox(0.5f, 0.5f);
|
||||
}
|
||||
|
||||
{
|
||||
m_circle.m_radius = 0.5f;
|
||||
}
|
||||
|
||||
m_bodyIndex = 0;
|
||||
memset(m_bodies, 0, sizeof(m_bodies));
|
||||
|
||||
m_angle = 0.0f;
|
||||
}
|
||||
|
||||
void Create(int32 index)
|
||||
{
|
||||
if (m_bodies[m_bodyIndex] != NULL)
|
||||
{
|
||||
m_world->DestroyBody(m_bodies[m_bodyIndex]);
|
||||
m_bodies[m_bodyIndex] = NULL;
|
||||
}
|
||||
|
||||
b2BodyDef bd;
|
||||
|
||||
float32 x = RandomFloat(-10.0f, 10.0f);
|
||||
float32 y = RandomFloat(10.0f, 20.0f);
|
||||
bd.position.Set(x, y);
|
||||
bd.angle = RandomFloat(-b2_pi, b2_pi);
|
||||
bd.type = b2_dynamicBody;
|
||||
|
||||
if (index == 4)
|
||||
{
|
||||
bd.angularDamping = 0.02f;
|
||||
}
|
||||
|
||||
m_bodies[m_bodyIndex] = m_world->CreateBody(&bd);
|
||||
|
||||
if (index < 4)
|
||||
{
|
||||
b2FixtureDef fd;
|
||||
fd.shape = m_polygons + index;
|
||||
fd.friction = 0.3f;
|
||||
fd.density = 20.0f;
|
||||
m_bodies[m_bodyIndex]->CreateFixture(&fd);
|
||||
}
|
||||
else
|
||||
{
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &m_circle;
|
||||
fd.friction = 0.3f;
|
||||
fd.density = 20.0f;
|
||||
m_bodies[m_bodyIndex]->CreateFixture(&fd);
|
||||
}
|
||||
|
||||
m_bodyIndex = (m_bodyIndex + 1) % e_maxBodies;
|
||||
}
|
||||
|
||||
void DestroyBody()
|
||||
{
|
||||
for (int32 i = 0; i < e_maxBodies; ++i)
|
||||
{
|
||||
if (m_bodies[i] != NULL)
|
||||
{
|
||||
m_world->DestroyBody(m_bodies[i]);
|
||||
m_bodies[i] = NULL;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
Create(key - '1');
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
DestroyBody();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
bool advanceRay = settings->pause == 0 || settings->singleStep;
|
||||
|
||||
Test::Step(settings);
|
||||
m_debugDraw.DrawString(5, m_textLine, "Press 1-5 to drop stuff");
|
||||
m_textLine += 15;
|
||||
|
||||
float32 L = 25.0f;
|
||||
b2Vec2 point1(0.0f, 10.0f);
|
||||
b2Vec2 d(L * cosf(m_angle), -L * b2Abs(sinf(m_angle)));
|
||||
b2Vec2 point2 = point1 + d;
|
||||
|
||||
EdgeShapesCallback callback;
|
||||
|
||||
m_world->RayCast(&callback, point1, point2);
|
||||
|
||||
if (callback.m_fixture)
|
||||
{
|
||||
m_debugDraw.DrawPoint(callback.m_point, 5.0f, b2Color(0.4f, 0.9f, 0.4f));
|
||||
|
||||
m_debugDraw.DrawSegment(point1, callback.m_point, b2Color(0.8f, 0.8f, 0.8f));
|
||||
|
||||
b2Vec2 head = callback.m_point + 0.5f * callback.m_normal;
|
||||
m_debugDraw.DrawSegment(callback.m_point, head, b2Color(0.9f, 0.9f, 0.4f));
|
||||
}
|
||||
else
|
||||
{
|
||||
m_debugDraw.DrawSegment(point1, point2, b2Color(0.8f, 0.8f, 0.8f));
|
||||
}
|
||||
|
||||
if (advanceRay)
|
||||
{
|
||||
m_angle += 0.25f * b2_pi / 180.0f;
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new EdgeShapes;
|
||||
}
|
||||
|
||||
int32 m_bodyIndex;
|
||||
b2Body* m_bodies[e_maxBodies];
|
||||
b2PolygonShape m_polygons[4];
|
||||
b2CircleShape m_circle;
|
||||
|
||||
float32 m_angle;
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2006-2010 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef EDGE_SHAPES_H
|
||||
#define EDGE_SHAPES_H
|
||||
|
||||
class EdgeShapesCallback : public b2RayCastCallback
|
||||
{
|
||||
public:
|
||||
EdgeShapesCallback()
|
||||
{
|
||||
m_fixture = NULL;
|
||||
}
|
||||
|
||||
float32 ReportFixture( b2Fixture* fixture, const b2Vec2& point,
|
||||
const b2Vec2& normal, float32 fraction)
|
||||
{
|
||||
m_fixture = fixture;
|
||||
m_point = point;
|
||||
m_normal = normal;
|
||||
|
||||
return fraction;
|
||||
}
|
||||
|
||||
b2Fixture* m_fixture;
|
||||
b2Vec2 m_point;
|
||||
b2Vec2 m_normal;
|
||||
};
|
||||
|
||||
class EdgeShapes : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
enum
|
||||
{
|
||||
e_maxBodies = 256
|
||||
};
|
||||
|
||||
EdgeShapes()
|
||||
{
|
||||
// Ground body
|
||||
{
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
float32 x1 = -20.0f;
|
||||
float32 y1 = 2.0f * cosf(x1 / 10.0f * b2_pi);
|
||||
for (int32 i = 0; i < 80; ++i)
|
||||
{
|
||||
float32 x2 = x1 + 0.5f;
|
||||
float32 y2 = 2.0f * cosf(x2 / 10.0f * b2_pi);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(x1, y1), b2Vec2(x2, y2));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
|
||||
x1 = x2;
|
||||
y1 = y2;
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
b2Vec2 vertices[3];
|
||||
vertices[0].Set(-0.5f, 0.0f);
|
||||
vertices[1].Set(0.5f, 0.0f);
|
||||
vertices[2].Set(0.0f, 1.5f);
|
||||
m_polygons[0].Set(vertices, 3);
|
||||
}
|
||||
|
||||
{
|
||||
b2Vec2 vertices[3];
|
||||
vertices[0].Set(-0.1f, 0.0f);
|
||||
vertices[1].Set(0.1f, 0.0f);
|
||||
vertices[2].Set(0.0f, 1.5f);
|
||||
m_polygons[1].Set(vertices, 3);
|
||||
}
|
||||
|
||||
{
|
||||
float32 w = 1.0f;
|
||||
float32 b = w / (2.0f + b2Sqrt(2.0f));
|
||||
float32 s = b2Sqrt(2.0f) * b;
|
||||
|
||||
b2Vec2 vertices[8];
|
||||
vertices[0].Set(0.5f * s, 0.0f);
|
||||
vertices[1].Set(0.5f * w, b);
|
||||
vertices[2].Set(0.5f * w, b + s);
|
||||
vertices[3].Set(0.5f * s, w);
|
||||
vertices[4].Set(-0.5f * s, w);
|
||||
vertices[5].Set(-0.5f * w, b + s);
|
||||
vertices[6].Set(-0.5f * w, b);
|
||||
vertices[7].Set(-0.5f * s, 0.0f);
|
||||
|
||||
m_polygons[2].Set(vertices, 8);
|
||||
}
|
||||
|
||||
{
|
||||
m_polygons[3].SetAsBox(0.5f, 0.5f);
|
||||
}
|
||||
|
||||
{
|
||||
m_circle.m_radius = 0.5f;
|
||||
}
|
||||
|
||||
m_bodyIndex = 0;
|
||||
memset(m_bodies, 0, sizeof(m_bodies));
|
||||
|
||||
m_angle = 0.0f;
|
||||
}
|
||||
|
||||
void Create(int32 index)
|
||||
{
|
||||
if (m_bodies[m_bodyIndex] != NULL)
|
||||
{
|
||||
m_world->DestroyBody(m_bodies[m_bodyIndex]);
|
||||
m_bodies[m_bodyIndex] = NULL;
|
||||
}
|
||||
|
||||
b2BodyDef bd;
|
||||
|
||||
float32 x = RandomFloat(-10.0f, 10.0f);
|
||||
float32 y = RandomFloat(10.0f, 20.0f);
|
||||
bd.position.Set(x, y);
|
||||
bd.angle = RandomFloat(-b2_pi, b2_pi);
|
||||
bd.type = b2_dynamicBody;
|
||||
|
||||
if (index == 4)
|
||||
{
|
||||
bd.angularDamping = 0.02f;
|
||||
}
|
||||
|
||||
m_bodies[m_bodyIndex] = m_world->CreateBody(&bd);
|
||||
|
||||
if (index < 4)
|
||||
{
|
||||
b2FixtureDef fd;
|
||||
fd.shape = m_polygons + index;
|
||||
fd.friction = 0.3f;
|
||||
fd.density = 20.0f;
|
||||
m_bodies[m_bodyIndex]->CreateFixture(&fd);
|
||||
}
|
||||
else
|
||||
{
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &m_circle;
|
||||
fd.friction = 0.3f;
|
||||
fd.density = 20.0f;
|
||||
m_bodies[m_bodyIndex]->CreateFixture(&fd);
|
||||
}
|
||||
|
||||
m_bodyIndex = (m_bodyIndex + 1) % e_maxBodies;
|
||||
}
|
||||
|
||||
void DestroyBody()
|
||||
{
|
||||
for (int32 i = 0; i < e_maxBodies; ++i)
|
||||
{
|
||||
if (m_bodies[i] != NULL)
|
||||
{
|
||||
m_world->DestroyBody(m_bodies[i]);
|
||||
m_bodies[i] = NULL;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
Create(key - '1');
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
DestroyBody();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
bool advanceRay = settings->pause == 0 || settings->singleStep;
|
||||
|
||||
Test::Step(settings);
|
||||
m_debugDraw.DrawString(5, m_textLine, "Press 1-5 to drop stuff");
|
||||
m_textLine += 15;
|
||||
|
||||
float32 L = 25.0f;
|
||||
b2Vec2 point1(0.0f, 10.0f);
|
||||
b2Vec2 d(L * cosf(m_angle), -L * b2Abs(sinf(m_angle)));
|
||||
b2Vec2 point2 = point1 + d;
|
||||
|
||||
EdgeShapesCallback callback;
|
||||
|
||||
m_world->RayCast(&callback, point1, point2);
|
||||
|
||||
if (callback.m_fixture)
|
||||
{
|
||||
m_debugDraw.DrawPoint(callback.m_point, 5.0f, b2Color(0.4f, 0.9f, 0.4f));
|
||||
|
||||
m_debugDraw.DrawSegment(point1, callback.m_point, b2Color(0.8f, 0.8f, 0.8f));
|
||||
|
||||
b2Vec2 head = callback.m_point + 0.5f * callback.m_normal;
|
||||
m_debugDraw.DrawSegment(callback.m_point, head, b2Color(0.9f, 0.9f, 0.4f));
|
||||
}
|
||||
else
|
||||
{
|
||||
m_debugDraw.DrawSegment(point1, point2, b2Color(0.8f, 0.8f, 0.8f));
|
||||
}
|
||||
|
||||
if (advanceRay)
|
||||
{
|
||||
m_angle += 0.25f * b2_pi / 180.0f;
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new EdgeShapes;
|
||||
}
|
||||
|
||||
int32 m_bodyIndex;
|
||||
b2Body* m_bodies[e_maxBodies];
|
||||
b2PolygonShape m_polygons[4];
|
||||
b2CircleShape m_circle;
|
||||
|
||||
float32 m_angle;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,109 +1,109 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2010 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef EDGE_TEST_H
|
||||
#define EDGE_TEST_H
|
||||
|
||||
class EdgeTest : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
EdgeTest()
|
||||
{
|
||||
{
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2Vec2 v1(-10.0f, 0.0f), v2(-7.0f, -2.0f), v3(-4.0f, 0.0f);
|
||||
b2Vec2 v4(0.0f, 0.0f), v5(4.0f, 0.0f), v6(7.0f, 2.0f), v7(10.0f, 0.0f);
|
||||
|
||||
b2EdgeShape shape;
|
||||
|
||||
shape.Set(v1, v2);
|
||||
shape.m_hasVertex3 = true;
|
||||
shape.m_vertex3 = v3;
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
|
||||
shape.Set(v2, v3);
|
||||
shape.m_hasVertex0 = true;
|
||||
shape.m_hasVertex3 = true;
|
||||
shape.m_vertex0 = v1;
|
||||
shape.m_vertex3 = v4;
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
|
||||
shape.Set(v3, v4);
|
||||
shape.m_hasVertex0 = true;
|
||||
shape.m_hasVertex3 = true;
|
||||
shape.m_vertex0 = v2;
|
||||
shape.m_vertex3 = v5;
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
|
||||
shape.Set(v4, v5);
|
||||
shape.m_hasVertex0 = true;
|
||||
shape.m_hasVertex3 = true;
|
||||
shape.m_vertex0 = v3;
|
||||
shape.m_vertex3 = v6;
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
|
||||
shape.Set(v5, v6);
|
||||
shape.m_hasVertex0 = true;
|
||||
shape.m_hasVertex3 = true;
|
||||
shape.m_vertex0 = v4;
|
||||
shape.m_vertex3 = v7;
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
|
||||
shape.Set(v6, v7);
|
||||
shape.m_hasVertex0 = true;
|
||||
shape.m_vertex0 = v5;
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-0.5f, 0.6f);
|
||||
bd.allowSleep = false;
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
b2CircleShape shape;
|
||||
shape.m_radius = 0.5f;
|
||||
|
||||
body->CreateFixture(&shape, 1.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(1.0f, 0.6f);
|
||||
bd.allowSleep = false;
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.5f, 0.5f);
|
||||
|
||||
body->CreateFixture(&shape, 1.0f);
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new EdgeTest;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2006-2010 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef EDGE_TEST_H
|
||||
#define EDGE_TEST_H
|
||||
|
||||
class EdgeTest : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
EdgeTest()
|
||||
{
|
||||
{
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2Vec2 v1(-10.0f, 0.0f), v2(-7.0f, -2.0f), v3(-4.0f, 0.0f);
|
||||
b2Vec2 v4(0.0f, 0.0f), v5(4.0f, 0.0f), v6(7.0f, 2.0f), v7(10.0f, 0.0f);
|
||||
|
||||
b2EdgeShape shape;
|
||||
|
||||
shape.Set(v1, v2);
|
||||
shape.m_hasVertex3 = true;
|
||||
shape.m_vertex3 = v3;
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
|
||||
shape.Set(v2, v3);
|
||||
shape.m_hasVertex0 = true;
|
||||
shape.m_hasVertex3 = true;
|
||||
shape.m_vertex0 = v1;
|
||||
shape.m_vertex3 = v4;
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
|
||||
shape.Set(v3, v4);
|
||||
shape.m_hasVertex0 = true;
|
||||
shape.m_hasVertex3 = true;
|
||||
shape.m_vertex0 = v2;
|
||||
shape.m_vertex3 = v5;
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
|
||||
shape.Set(v4, v5);
|
||||
shape.m_hasVertex0 = true;
|
||||
shape.m_hasVertex3 = true;
|
||||
shape.m_vertex0 = v3;
|
||||
shape.m_vertex3 = v6;
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
|
||||
shape.Set(v5, v6);
|
||||
shape.m_hasVertex0 = true;
|
||||
shape.m_hasVertex3 = true;
|
||||
shape.m_vertex0 = v4;
|
||||
shape.m_vertex3 = v7;
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
|
||||
shape.Set(v6, v7);
|
||||
shape.m_hasVertex0 = true;
|
||||
shape.m_vertex0 = v5;
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-0.5f, 0.6f);
|
||||
bd.allowSleep = false;
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
b2CircleShape shape;
|
||||
shape.m_radius = 0.5f;
|
||||
|
||||
body->CreateFixture(&shape, 1.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(1.0f, 0.6f);
|
||||
bd.allowSleep = false;
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.5f, 0.5f);
|
||||
|
||||
body->CreateFixture(&shape, 1.0f);
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new EdgeTest;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,187 +1,187 @@
|
||||
/*
|
||||
* Copyright (c) 2007-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef GEARS_H
|
||||
#define GEARS_H
|
||||
|
||||
class Gears : public Test
|
||||
{
|
||||
public:
|
||||
Gears()
|
||||
{
|
||||
b2Body* ground = NULL;
|
||||
{
|
||||
b2BodyDef bd;
|
||||
ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(50.0f, 0.0f), b2Vec2(-50.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
// Gears co
|
||||
{
|
||||
b2CircleShape circle1;
|
||||
circle1.m_radius = 1.0f;
|
||||
|
||||
b2PolygonShape box;
|
||||
box.SetAsBox(0.5f, 5.0f);
|
||||
|
||||
b2CircleShape circle2;
|
||||
circle2.m_radius = 2.0f;
|
||||
|
||||
b2BodyDef bd1;
|
||||
bd1.type = b2_staticBody;
|
||||
bd1.position.Set(10.0f, 9.0f);
|
||||
b2Body* body1 = m_world->CreateBody(&bd1);
|
||||
body1->CreateFixture(&circle1, 0.0f);
|
||||
|
||||
b2BodyDef bd2;
|
||||
bd2.type = b2_dynamicBody;
|
||||
bd2.position.Set(10.0f, 8.0f);
|
||||
b2Body* body2 = m_world->CreateBody(&bd2);
|
||||
body2->CreateFixture(&box, 5.0f);
|
||||
|
||||
b2BodyDef bd3;
|
||||
bd3.type = b2_dynamicBody;
|
||||
bd3.position.Set(10.0f, 6.0f);
|
||||
b2Body* body3 = m_world->CreateBody(&bd3);
|
||||
body3->CreateFixture(&circle2, 5.0f);
|
||||
|
||||
b2RevoluteJointDef jd1;
|
||||
jd1.Initialize(body2, body1, bd1.position);
|
||||
b2Joint* joint1 = m_world->CreateJoint(&jd1);
|
||||
|
||||
b2RevoluteJointDef jd2;
|
||||
jd2.Initialize(body2, body3, bd3.position);
|
||||
b2Joint* joint2 = m_world->CreateJoint(&jd2);
|
||||
|
||||
b2GearJointDef jd4;
|
||||
jd4.bodyA = body1;
|
||||
jd4.bodyB = body3;
|
||||
jd4.joint1 = joint1;
|
||||
jd4.joint2 = joint2;
|
||||
jd4.ratio = circle2.m_radius / circle1.m_radius;
|
||||
m_world->CreateJoint(&jd4);
|
||||
}
|
||||
|
||||
{
|
||||
b2CircleShape circle1;
|
||||
circle1.m_radius = 1.0f;
|
||||
|
||||
b2CircleShape circle2;
|
||||
circle2.m_radius = 2.0f;
|
||||
|
||||
b2PolygonShape box;
|
||||
box.SetAsBox(0.5f, 5.0f);
|
||||
|
||||
b2BodyDef bd1;
|
||||
bd1.type = b2_dynamicBody;
|
||||
bd1.position.Set(-3.0f, 12.0f);
|
||||
b2Body* body1 = m_world->CreateBody(&bd1);
|
||||
body1->CreateFixture(&circle1, 5.0f);
|
||||
|
||||
b2RevoluteJointDef jd1;
|
||||
jd1.bodyA = ground;
|
||||
jd1.bodyB = body1;
|
||||
jd1.localAnchorA = ground->GetLocalPoint(bd1.position);
|
||||
jd1.localAnchorB = body1->GetLocalPoint(bd1.position);
|
||||
jd1.referenceAngle = body1->GetAngle() - ground->GetAngle();
|
||||
m_joint1 = (b2RevoluteJoint*)m_world->CreateJoint(&jd1);
|
||||
|
||||
b2BodyDef bd2;
|
||||
bd2.type = b2_dynamicBody;
|
||||
bd2.position.Set(0.0f, 12.0f);
|
||||
b2Body* body2 = m_world->CreateBody(&bd2);
|
||||
body2->CreateFixture(&circle2, 5.0f);
|
||||
|
||||
b2RevoluteJointDef jd2;
|
||||
jd2.Initialize(ground, body2, bd2.position);
|
||||
m_joint2 = (b2RevoluteJoint*)m_world->CreateJoint(&jd2);
|
||||
|
||||
b2BodyDef bd3;
|
||||
bd3.type = b2_dynamicBody;
|
||||
bd3.position.Set(2.5f, 12.0f);
|
||||
b2Body* body3 = m_world->CreateBody(&bd3);
|
||||
body3->CreateFixture(&box, 5.0f);
|
||||
|
||||
b2PrismaticJointDef jd3;
|
||||
jd3.Initialize(ground, body3, bd3.position, b2Vec2(0.0f, 1.0f));
|
||||
jd3.lowerTranslation = -5.0f;
|
||||
jd3.upperTranslation = 5.0f;
|
||||
jd3.enableLimit = true;
|
||||
|
||||
m_joint3 = (b2PrismaticJoint*)m_world->CreateJoint(&jd3);
|
||||
|
||||
b2GearJointDef jd4;
|
||||
jd4.bodyA = body1;
|
||||
jd4.bodyB = body2;
|
||||
jd4.joint1 = m_joint1;
|
||||
jd4.joint2 = m_joint2;
|
||||
jd4.ratio = circle2.m_radius / circle1.m_radius;
|
||||
m_joint4 = (b2GearJoint*)m_world->CreateJoint(&jd4);
|
||||
|
||||
b2GearJointDef jd5;
|
||||
jd5.bodyA = body2;
|
||||
jd5.bodyB = body3;
|
||||
jd5.joint1 = m_joint2;
|
||||
jd5.joint2 = m_joint3;
|
||||
jd5.ratio = -1.0f / circle2.m_radius;
|
||||
m_joint5 = (b2GearJoint*)m_world->CreateJoint(&jd5);
|
||||
}
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case 0:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
Test::Step(settings);
|
||||
|
||||
float32 ratio, value;
|
||||
|
||||
ratio = m_joint4->GetRatio();
|
||||
value = m_joint1->GetJointAngle() + ratio * m_joint2->GetJointAngle();
|
||||
m_debugDraw.DrawString(5, m_textLine, "theta1 + %4.2f * theta2 = %4.2f", (float) ratio, (float) value);
|
||||
m_textLine += 15;
|
||||
|
||||
ratio = m_joint5->GetRatio();
|
||||
value = m_joint2->GetJointAngle() + ratio * m_joint3->GetJointTranslation();
|
||||
m_debugDraw.DrawString(5, m_textLine, "theta2 + %4.2f * delta = %4.2f", (float) ratio, (float) value);
|
||||
m_textLine += 15;
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new Gears;
|
||||
}
|
||||
|
||||
b2RevoluteJoint* m_joint1;
|
||||
b2RevoluteJoint* m_joint2;
|
||||
b2PrismaticJoint* m_joint3;
|
||||
b2GearJoint* m_joint4;
|
||||
b2GearJoint* m_joint5;
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2007-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef GEARS_H
|
||||
#define GEARS_H
|
||||
|
||||
class Gears : public Test
|
||||
{
|
||||
public:
|
||||
Gears()
|
||||
{
|
||||
b2Body* ground = NULL;
|
||||
{
|
||||
b2BodyDef bd;
|
||||
ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(50.0f, 0.0f), b2Vec2(-50.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
// Gears co
|
||||
{
|
||||
b2CircleShape circle1;
|
||||
circle1.m_radius = 1.0f;
|
||||
|
||||
b2PolygonShape box;
|
||||
box.SetAsBox(0.5f, 5.0f);
|
||||
|
||||
b2CircleShape circle2;
|
||||
circle2.m_radius = 2.0f;
|
||||
|
||||
b2BodyDef bd1;
|
||||
bd1.type = b2_staticBody;
|
||||
bd1.position.Set(10.0f, 9.0f);
|
||||
b2Body* body1 = m_world->CreateBody(&bd1);
|
||||
body1->CreateFixture(&circle1, 0.0f);
|
||||
|
||||
b2BodyDef bd2;
|
||||
bd2.type = b2_dynamicBody;
|
||||
bd2.position.Set(10.0f, 8.0f);
|
||||
b2Body* body2 = m_world->CreateBody(&bd2);
|
||||
body2->CreateFixture(&box, 5.0f);
|
||||
|
||||
b2BodyDef bd3;
|
||||
bd3.type = b2_dynamicBody;
|
||||
bd3.position.Set(10.0f, 6.0f);
|
||||
b2Body* body3 = m_world->CreateBody(&bd3);
|
||||
body3->CreateFixture(&circle2, 5.0f);
|
||||
|
||||
b2RevoluteJointDef jd1;
|
||||
jd1.Initialize(body2, body1, bd1.position);
|
||||
b2Joint* joint1 = m_world->CreateJoint(&jd1);
|
||||
|
||||
b2RevoluteJointDef jd2;
|
||||
jd2.Initialize(body2, body3, bd3.position);
|
||||
b2Joint* joint2 = m_world->CreateJoint(&jd2);
|
||||
|
||||
b2GearJointDef jd4;
|
||||
jd4.bodyA = body1;
|
||||
jd4.bodyB = body3;
|
||||
jd4.joint1 = joint1;
|
||||
jd4.joint2 = joint2;
|
||||
jd4.ratio = circle2.m_radius / circle1.m_radius;
|
||||
m_world->CreateJoint(&jd4);
|
||||
}
|
||||
|
||||
{
|
||||
b2CircleShape circle1;
|
||||
circle1.m_radius = 1.0f;
|
||||
|
||||
b2CircleShape circle2;
|
||||
circle2.m_radius = 2.0f;
|
||||
|
||||
b2PolygonShape box;
|
||||
box.SetAsBox(0.5f, 5.0f);
|
||||
|
||||
b2BodyDef bd1;
|
||||
bd1.type = b2_dynamicBody;
|
||||
bd1.position.Set(-3.0f, 12.0f);
|
||||
b2Body* body1 = m_world->CreateBody(&bd1);
|
||||
body1->CreateFixture(&circle1, 5.0f);
|
||||
|
||||
b2RevoluteJointDef jd1;
|
||||
jd1.bodyA = ground;
|
||||
jd1.bodyB = body1;
|
||||
jd1.localAnchorA = ground->GetLocalPoint(bd1.position);
|
||||
jd1.localAnchorB = body1->GetLocalPoint(bd1.position);
|
||||
jd1.referenceAngle = body1->GetAngle() - ground->GetAngle();
|
||||
m_joint1 = (b2RevoluteJoint*)m_world->CreateJoint(&jd1);
|
||||
|
||||
b2BodyDef bd2;
|
||||
bd2.type = b2_dynamicBody;
|
||||
bd2.position.Set(0.0f, 12.0f);
|
||||
b2Body* body2 = m_world->CreateBody(&bd2);
|
||||
body2->CreateFixture(&circle2, 5.0f);
|
||||
|
||||
b2RevoluteJointDef jd2;
|
||||
jd2.Initialize(ground, body2, bd2.position);
|
||||
m_joint2 = (b2RevoluteJoint*)m_world->CreateJoint(&jd2);
|
||||
|
||||
b2BodyDef bd3;
|
||||
bd3.type = b2_dynamicBody;
|
||||
bd3.position.Set(2.5f, 12.0f);
|
||||
b2Body* body3 = m_world->CreateBody(&bd3);
|
||||
body3->CreateFixture(&box, 5.0f);
|
||||
|
||||
b2PrismaticJointDef jd3;
|
||||
jd3.Initialize(ground, body3, bd3.position, b2Vec2(0.0f, 1.0f));
|
||||
jd3.lowerTranslation = -5.0f;
|
||||
jd3.upperTranslation = 5.0f;
|
||||
jd3.enableLimit = true;
|
||||
|
||||
m_joint3 = (b2PrismaticJoint*)m_world->CreateJoint(&jd3);
|
||||
|
||||
b2GearJointDef jd4;
|
||||
jd4.bodyA = body1;
|
||||
jd4.bodyB = body2;
|
||||
jd4.joint1 = m_joint1;
|
||||
jd4.joint2 = m_joint2;
|
||||
jd4.ratio = circle2.m_radius / circle1.m_radius;
|
||||
m_joint4 = (b2GearJoint*)m_world->CreateJoint(&jd4);
|
||||
|
||||
b2GearJointDef jd5;
|
||||
jd5.bodyA = body2;
|
||||
jd5.bodyB = body3;
|
||||
jd5.joint1 = m_joint2;
|
||||
jd5.joint2 = m_joint3;
|
||||
jd5.ratio = -1.0f / circle2.m_radius;
|
||||
m_joint5 = (b2GearJoint*)m_world->CreateJoint(&jd5);
|
||||
}
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case 0:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
Test::Step(settings);
|
||||
|
||||
float32 ratio, value;
|
||||
|
||||
ratio = m_joint4->GetRatio();
|
||||
value = m_joint1->GetJointAngle() + ratio * m_joint2->GetJointAngle();
|
||||
m_debugDraw.DrawString(5, m_textLine, "theta1 + %4.2f * theta2 = %4.2f", (float) ratio, (float) value);
|
||||
m_textLine += 15;
|
||||
|
||||
ratio = m_joint5->GetRatio();
|
||||
value = m_joint2->GetJointAngle() + ratio * m_joint3->GetJointTranslation();
|
||||
m_debugDraw.DrawString(5, m_textLine, "theta2 + %4.2f * delta = %4.2f", (float) ratio, (float) value);
|
||||
m_textLine += 15;
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new Gears;
|
||||
}
|
||||
|
||||
b2RevoluteJoint* m_joint1;
|
||||
b2RevoluteJoint* m_joint2;
|
||||
b2PrismaticJoint* m_joint3;
|
||||
b2GearJoint* m_joint4;
|
||||
b2GearJoint* m_joint5;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,120 +1,120 @@
|
||||
/*
|
||||
* Copyright (c) 2008-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef ONE_SIDED_PLATFORM_H
|
||||
#define ONE_SIDED_PLATFORM_H
|
||||
|
||||
class OneSidedPlatform : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
enum State
|
||||
{
|
||||
e_unknown,
|
||||
e_above,
|
||||
e_below
|
||||
};
|
||||
|
||||
OneSidedPlatform()
|
||||
{
|
||||
// Ground
|
||||
{
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-20.0f, 0.0f), b2Vec2(20.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
// Platform
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(0.0f, 10.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(3.0f, 0.5f);
|
||||
m_platform = body->CreateFixture(&shape, 0.0f);
|
||||
|
||||
m_bottom = 10.0f - 0.5f;
|
||||
m_top = 10.0f + 0.5f;
|
||||
}
|
||||
|
||||
// Actor
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(0.0f, 12.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
m_radius = 0.5f;
|
||||
b2CircleShape shape;
|
||||
shape.m_radius = m_radius;
|
||||
m_character = body->CreateFixture(&shape, 20.0f);
|
||||
|
||||
body->SetLinearVelocity(b2Vec2(0.0f, -50.0f));
|
||||
|
||||
m_state = e_unknown;
|
||||
}
|
||||
}
|
||||
|
||||
void PreSolve(b2Contact* contact, const b2Manifold* oldManifold)
|
||||
{
|
||||
Test::PreSolve(contact, oldManifold);
|
||||
|
||||
b2Fixture* fixtureA = contact->GetFixtureA();
|
||||
b2Fixture* fixtureB = contact->GetFixtureB();
|
||||
|
||||
if (fixtureA != m_platform && fixtureA != m_character)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (fixtureB != m_platform && fixtureB != m_character)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
b2Vec2 position = m_character->GetBody()->GetPosition();
|
||||
|
||||
if (position.y < m_top + m_radius - 3.0f * b2_linearSlop)
|
||||
{
|
||||
contact->SetEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
Test::Step(settings);
|
||||
m_debugDraw.DrawString(5, m_textLine, "Press: (c) create a shape, (d) destroy a shape.");
|
||||
m_textLine += 15;
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new OneSidedPlatform;
|
||||
}
|
||||
|
||||
float32 m_radius, m_top, m_bottom;
|
||||
State m_state;
|
||||
b2Fixture* m_platform;
|
||||
b2Fixture* m_character;
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2008-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef ONE_SIDED_PLATFORM_H
|
||||
#define ONE_SIDED_PLATFORM_H
|
||||
|
||||
class OneSidedPlatform : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
enum State
|
||||
{
|
||||
e_unknown,
|
||||
e_above,
|
||||
e_below
|
||||
};
|
||||
|
||||
OneSidedPlatform()
|
||||
{
|
||||
// Ground
|
||||
{
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-20.0f, 0.0f), b2Vec2(20.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
// Platform
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(0.0f, 10.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(3.0f, 0.5f);
|
||||
m_platform = body->CreateFixture(&shape, 0.0f);
|
||||
|
||||
m_bottom = 10.0f - 0.5f;
|
||||
m_top = 10.0f + 0.5f;
|
||||
}
|
||||
|
||||
// Actor
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(0.0f, 12.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
m_radius = 0.5f;
|
||||
b2CircleShape shape;
|
||||
shape.m_radius = m_radius;
|
||||
m_character = body->CreateFixture(&shape, 20.0f);
|
||||
|
||||
body->SetLinearVelocity(b2Vec2(0.0f, -50.0f));
|
||||
|
||||
m_state = e_unknown;
|
||||
}
|
||||
}
|
||||
|
||||
void PreSolve(b2Contact* contact, const b2Manifold* oldManifold)
|
||||
{
|
||||
Test::PreSolve(contact, oldManifold);
|
||||
|
||||
b2Fixture* fixtureA = contact->GetFixtureA();
|
||||
b2Fixture* fixtureB = contact->GetFixtureB();
|
||||
|
||||
if (fixtureA != m_platform && fixtureA != m_character)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (fixtureB != m_platform && fixtureB != m_character)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
b2Vec2 position = m_character->GetBody()->GetPosition();
|
||||
|
||||
if (position.y < m_top + m_radius - 3.0f * b2_linearSlop)
|
||||
{
|
||||
contact->SetEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
Test::Step(settings);
|
||||
m_debugDraw.DrawString(5, m_textLine, "Press: (c) create a shape, (d) destroy a shape.");
|
||||
m_textLine += 15;
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new OneSidedPlatform;
|
||||
}
|
||||
|
||||
float32 m_radius, m_top, m_bottom;
|
||||
State m_state;
|
||||
b2Fixture* m_platform;
|
||||
b2Fixture* m_character;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,169 +1,169 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2010 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef PINBALL_H
|
||||
#define PINBALL_H
|
||||
|
||||
/// This tests bullet collision and provides an example of a gameplay scenario.
|
||||
/// This also uses a loop shape.
|
||||
class Pinball : public Test
|
||||
{
|
||||
public:
|
||||
Pinball()
|
||||
{
|
||||
// Ground body
|
||||
b2Body* ground = NULL;
|
||||
{
|
||||
b2BodyDef bd;
|
||||
ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2Vec2 vs[5];
|
||||
vs[0].Set(0.0f, -2.0f);
|
||||
vs[1].Set(8.0f, 6.0f);
|
||||
vs[2].Set(8.0f, 20.0f);
|
||||
vs[3].Set(-8.0f, 20.0f);
|
||||
vs[4].Set(-8.0f, 6.0f);
|
||||
|
||||
b2ChainShape loop;
|
||||
loop.CreateLoop(vs, 5);
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &loop;
|
||||
fd.density = 0.0f;
|
||||
ground->CreateFixture(&fd);
|
||||
}
|
||||
|
||||
// Flippers
|
||||
{
|
||||
b2Vec2 p1(-2.0f, 0.0f), p2(2.0f, 0.0f);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
|
||||
bd.position = p1;
|
||||
b2Body* leftFlipper = m_world->CreateBody(&bd);
|
||||
|
||||
bd.position = p2;
|
||||
b2Body* rightFlipper = m_world->CreateBody(&bd);
|
||||
|
||||
b2PolygonShape box;
|
||||
box.SetAsBox(1.75f, 0.1f);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &box;
|
||||
fd.density = 1.0f;
|
||||
|
||||
leftFlipper->CreateFixture(&fd);
|
||||
rightFlipper->CreateFixture(&fd);
|
||||
|
||||
b2RevoluteJointDef jd;
|
||||
jd.bodyA = ground;
|
||||
jd.localAnchorB.SetZero();
|
||||
jd.enableMotor = true;
|
||||
jd.maxMotorTorque = 1000.0f;
|
||||
jd.enableLimit = true;
|
||||
|
||||
jd.motorSpeed = 0.0f;
|
||||
jd.localAnchorA = p1;
|
||||
jd.bodyB = leftFlipper;
|
||||
jd.lowerAngle = -30.0f * b2_pi / 180.0f;
|
||||
jd.upperAngle = 5.0f * b2_pi / 180.0f;
|
||||
m_leftJoint = (b2RevoluteJoint*)m_world->CreateJoint(&jd);
|
||||
|
||||
jd.motorSpeed = 0.0f;
|
||||
jd.localAnchorA = p2;
|
||||
jd.bodyB = rightFlipper;
|
||||
jd.lowerAngle = -5.0f * b2_pi / 180.0f;
|
||||
jd.upperAngle = 30.0f * b2_pi / 180.0f;
|
||||
m_rightJoint = (b2RevoluteJoint*)m_world->CreateJoint(&jd);
|
||||
}
|
||||
|
||||
// Circle character
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(1.0f, 15.0f);
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.bullet = true;
|
||||
|
||||
m_ball = m_world->CreateBody(&bd);
|
||||
|
||||
b2CircleShape shape;
|
||||
shape.m_radius = 0.2f;
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 1.0f;
|
||||
m_ball->CreateFixture(&fd);
|
||||
}
|
||||
|
||||
m_button = false;
|
||||
}
|
||||
|
||||
void Step()
|
||||
{
|
||||
if (m_button)
|
||||
{
|
||||
m_leftJoint->SetMotorSpeed(20.0f);
|
||||
m_rightJoint->SetMotorSpeed(-20.0f);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_leftJoint->SetMotorSpeed(-10.0f);
|
||||
m_rightJoint->SetMotorSpeed(10.0f);
|
||||
}
|
||||
|
||||
// Test::Step(settings);
|
||||
//
|
||||
// m_debugDraw.DrawString(5, m_textLine, "Press 'a' to control the flippers");
|
||||
// m_textLine += 15;
|
||||
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case 'a':
|
||||
case 'A':
|
||||
m_button = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void KeyboardUp(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case 'a':
|
||||
case 'A':
|
||||
m_button = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new Pinball;
|
||||
}
|
||||
|
||||
b2RevoluteJoint* m_leftJoint;
|
||||
b2RevoluteJoint* m_rightJoint;
|
||||
b2Body* m_ball;
|
||||
bool m_button;
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2006-2010 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef PINBALL_H
|
||||
#define PINBALL_H
|
||||
|
||||
/// This tests bullet collision and provides an example of a gameplay scenario.
|
||||
/// This also uses a loop shape.
|
||||
class Pinball : public Test
|
||||
{
|
||||
public:
|
||||
Pinball()
|
||||
{
|
||||
// Ground body
|
||||
b2Body* ground = NULL;
|
||||
{
|
||||
b2BodyDef bd;
|
||||
ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2Vec2 vs[5];
|
||||
vs[0].Set(0.0f, -2.0f);
|
||||
vs[1].Set(8.0f, 6.0f);
|
||||
vs[2].Set(8.0f, 20.0f);
|
||||
vs[3].Set(-8.0f, 20.0f);
|
||||
vs[4].Set(-8.0f, 6.0f);
|
||||
|
||||
b2ChainShape loop;
|
||||
loop.CreateLoop(vs, 5);
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &loop;
|
||||
fd.density = 0.0f;
|
||||
ground->CreateFixture(&fd);
|
||||
}
|
||||
|
||||
// Flippers
|
||||
{
|
||||
b2Vec2 p1(-2.0f, 0.0f), p2(2.0f, 0.0f);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
|
||||
bd.position = p1;
|
||||
b2Body* leftFlipper = m_world->CreateBody(&bd);
|
||||
|
||||
bd.position = p2;
|
||||
b2Body* rightFlipper = m_world->CreateBody(&bd);
|
||||
|
||||
b2PolygonShape box;
|
||||
box.SetAsBox(1.75f, 0.1f);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &box;
|
||||
fd.density = 1.0f;
|
||||
|
||||
leftFlipper->CreateFixture(&fd);
|
||||
rightFlipper->CreateFixture(&fd);
|
||||
|
||||
b2RevoluteJointDef jd;
|
||||
jd.bodyA = ground;
|
||||
jd.localAnchorB.SetZero();
|
||||
jd.enableMotor = true;
|
||||
jd.maxMotorTorque = 1000.0f;
|
||||
jd.enableLimit = true;
|
||||
|
||||
jd.motorSpeed = 0.0f;
|
||||
jd.localAnchorA = p1;
|
||||
jd.bodyB = leftFlipper;
|
||||
jd.lowerAngle = -30.0f * b2_pi / 180.0f;
|
||||
jd.upperAngle = 5.0f * b2_pi / 180.0f;
|
||||
m_leftJoint = (b2RevoluteJoint*)m_world->CreateJoint(&jd);
|
||||
|
||||
jd.motorSpeed = 0.0f;
|
||||
jd.localAnchorA = p2;
|
||||
jd.bodyB = rightFlipper;
|
||||
jd.lowerAngle = -5.0f * b2_pi / 180.0f;
|
||||
jd.upperAngle = 30.0f * b2_pi / 180.0f;
|
||||
m_rightJoint = (b2RevoluteJoint*)m_world->CreateJoint(&jd);
|
||||
}
|
||||
|
||||
// Circle character
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(1.0f, 15.0f);
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.bullet = true;
|
||||
|
||||
m_ball = m_world->CreateBody(&bd);
|
||||
|
||||
b2CircleShape shape;
|
||||
shape.m_radius = 0.2f;
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 1.0f;
|
||||
m_ball->CreateFixture(&fd);
|
||||
}
|
||||
|
||||
m_button = false;
|
||||
}
|
||||
|
||||
void Step()
|
||||
{
|
||||
if (m_button)
|
||||
{
|
||||
m_leftJoint->SetMotorSpeed(20.0f);
|
||||
m_rightJoint->SetMotorSpeed(-20.0f);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_leftJoint->SetMotorSpeed(-10.0f);
|
||||
m_rightJoint->SetMotorSpeed(10.0f);
|
||||
}
|
||||
|
||||
// Test::Step(settings);
|
||||
//
|
||||
// m_debugDraw.DrawString(5, m_textLine, "Press 'a' to control the flippers");
|
||||
// m_textLine += 15;
|
||||
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case 'a':
|
||||
case 'A':
|
||||
m_button = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void KeyboardUp(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case 'a':
|
||||
case 'A':
|
||||
m_button = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new Pinball;
|
||||
}
|
||||
|
||||
b2RevoluteJoint* m_leftJoint;
|
||||
b2RevoluteJoint* m_rightJoint;
|
||||
b2Body* m_ball;
|
||||
bool m_button;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,122 +1,122 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef POLYCOLLISION_H
|
||||
#define POLYCOLLISION_H
|
||||
|
||||
class PolyCollision : public Test
|
||||
{
|
||||
public:
|
||||
PolyCollision()
|
||||
{
|
||||
{
|
||||
m_polygonA.SetAsBox(0.2f, 0.4f);
|
||||
m_transformA.Set(b2Vec2(0.0f, 0.0f), 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
m_polygonB.SetAsBox(0.5f, 0.5f);
|
||||
m_positionB.Set(19.345284f, 1.5632932f);
|
||||
m_angleB = 1.9160721f;
|
||||
m_transformB.Set(m_positionB, m_angleB);
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new PolyCollision;
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
B2_NOT_USED(settings);
|
||||
|
||||
b2Manifold manifold;
|
||||
b2CollidePolygons(&manifold, &m_polygonA, m_transformA, &m_polygonB, m_transformB);
|
||||
|
||||
b2WorldManifold worldManifold;
|
||||
worldManifold.Initialize(&manifold, m_transformA, m_polygonA.m_radius, m_transformB, m_polygonB.m_radius);
|
||||
|
||||
m_debugDraw.DrawString(5, m_textLine, "point count = %d", manifold.pointCount);
|
||||
m_textLine += 15;
|
||||
|
||||
{
|
||||
b2Color color(0.9f, 0.9f, 0.9f);
|
||||
b2Vec2 v[b2_maxPolygonVertices];
|
||||
for (int32 i = 0; i < m_polygonA.m_vertexCount; ++i)
|
||||
{
|
||||
v[i] = b2Mul(m_transformA, m_polygonA.m_vertices[i]);
|
||||
}
|
||||
m_debugDraw.DrawPolygon(v, m_polygonA.m_vertexCount, color);
|
||||
|
||||
for (int32 i = 0; i < m_polygonB.m_vertexCount; ++i)
|
||||
{
|
||||
v[i] = b2Mul(m_transformB, m_polygonB.m_vertices[i]);
|
||||
}
|
||||
m_debugDraw.DrawPolygon(v, m_polygonB.m_vertexCount, color);
|
||||
}
|
||||
|
||||
for (int32 i = 0; i < manifold.pointCount; ++i)
|
||||
{
|
||||
m_debugDraw.DrawPoint(worldManifold.points[i], 4.0f, b2Color(0.9f, 0.3f, 0.3f));
|
||||
}
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case 'a':
|
||||
m_positionB.x -= 0.1f;
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
m_positionB.x += 0.1f;
|
||||
break;
|
||||
|
||||
case 's':
|
||||
m_positionB.y -= 0.1f;
|
||||
break;
|
||||
|
||||
case 'w':
|
||||
m_positionB.y += 0.1f;
|
||||
break;
|
||||
|
||||
case 'q':
|
||||
m_angleB += 0.1f * b2_pi;
|
||||
break;
|
||||
|
||||
case 'e':
|
||||
m_angleB -= 0.1f * b2_pi;
|
||||
break;
|
||||
}
|
||||
|
||||
m_transformB.Set(m_positionB, m_angleB);
|
||||
}
|
||||
|
||||
b2PolygonShape m_polygonA;
|
||||
b2PolygonShape m_polygonB;
|
||||
|
||||
b2Transform m_transformA;
|
||||
b2Transform m_transformB;
|
||||
|
||||
b2Vec2 m_positionB;
|
||||
float32 m_angleB;
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef POLYCOLLISION_H
|
||||
#define POLYCOLLISION_H
|
||||
|
||||
class PolyCollision : public Test
|
||||
{
|
||||
public:
|
||||
PolyCollision()
|
||||
{
|
||||
{
|
||||
m_polygonA.SetAsBox(0.2f, 0.4f);
|
||||
m_transformA.Set(b2Vec2(0.0f, 0.0f), 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
m_polygonB.SetAsBox(0.5f, 0.5f);
|
||||
m_positionB.Set(19.345284f, 1.5632932f);
|
||||
m_angleB = 1.9160721f;
|
||||
m_transformB.Set(m_positionB, m_angleB);
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new PolyCollision;
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
B2_NOT_USED(settings);
|
||||
|
||||
b2Manifold manifold;
|
||||
b2CollidePolygons(&manifold, &m_polygonA, m_transformA, &m_polygonB, m_transformB);
|
||||
|
||||
b2WorldManifold worldManifold;
|
||||
worldManifold.Initialize(&manifold, m_transformA, m_polygonA.m_radius, m_transformB, m_polygonB.m_radius);
|
||||
|
||||
m_debugDraw.DrawString(5, m_textLine, "point count = %d", manifold.pointCount);
|
||||
m_textLine += 15;
|
||||
|
||||
{
|
||||
b2Color color(0.9f, 0.9f, 0.9f);
|
||||
b2Vec2 v[b2_maxPolygonVertices];
|
||||
for (int32 i = 0; i < m_polygonA.m_vertexCount; ++i)
|
||||
{
|
||||
v[i] = b2Mul(m_transformA, m_polygonA.m_vertices[i]);
|
||||
}
|
||||
m_debugDraw.DrawPolygon(v, m_polygonA.m_vertexCount, color);
|
||||
|
||||
for (int32 i = 0; i < m_polygonB.m_vertexCount; ++i)
|
||||
{
|
||||
v[i] = b2Mul(m_transformB, m_polygonB.m_vertices[i]);
|
||||
}
|
||||
m_debugDraw.DrawPolygon(v, m_polygonB.m_vertexCount, color);
|
||||
}
|
||||
|
||||
for (int32 i = 0; i < manifold.pointCount; ++i)
|
||||
{
|
||||
m_debugDraw.DrawPoint(worldManifold.points[i], 4.0f, b2Color(0.9f, 0.3f, 0.3f));
|
||||
}
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case 'a':
|
||||
m_positionB.x -= 0.1f;
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
m_positionB.x += 0.1f;
|
||||
break;
|
||||
|
||||
case 's':
|
||||
m_positionB.y -= 0.1f;
|
||||
break;
|
||||
|
||||
case 'w':
|
||||
m_positionB.y += 0.1f;
|
||||
break;
|
||||
|
||||
case 'q':
|
||||
m_angleB += 0.1f * b2_pi;
|
||||
break;
|
||||
|
||||
case 'e':
|
||||
m_angleB -= 0.1f * b2_pi;
|
||||
break;
|
||||
}
|
||||
|
||||
m_transformB.Set(m_positionB, m_angleB);
|
||||
}
|
||||
|
||||
b2PolygonShape m_polygonA;
|
||||
b2PolygonShape m_polygonB;
|
||||
|
||||
b2Transform m_transformA;
|
||||
b2Transform m_transformB;
|
||||
|
||||
b2Vec2 m_positionB;
|
||||
float32 m_angleB;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,295 +1,295 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef POLY_SHAPES_H
|
||||
#define POLY_SHAPES_H
|
||||
|
||||
/// This tests stacking. It also shows how to use b2World::Query
|
||||
/// and b2TestOverlap.
|
||||
|
||||
const int32 k_maxBodies = 256;
|
||||
|
||||
/// This callback is called by b2World::QueryAABB. We find all the fixtures
|
||||
/// that overlap an AABB. Of those, we use b2TestOverlap to determine which fixtures
|
||||
/// overlap a circle. Up to 4 overlapped fixtures will be highlighted with a yellow border.
|
||||
class PolyShapesCallback : public b2QueryCallback
|
||||
{
|
||||
public:
|
||||
|
||||
enum
|
||||
{
|
||||
e_maxCount = 4
|
||||
};
|
||||
|
||||
PolyShapesCallback()
|
||||
{
|
||||
m_count = 0;
|
||||
}
|
||||
|
||||
void DrawFixture(b2Fixture* fixture)
|
||||
{
|
||||
b2Color color(0.95f, 0.95f, 0.6f);
|
||||
const b2Transform& xf = fixture->GetBody()->GetTransform();
|
||||
|
||||
switch (fixture->GetType())
|
||||
{
|
||||
case b2Shape::e_circle:
|
||||
{
|
||||
b2CircleShape* circle = (b2CircleShape*)fixture->GetShape();
|
||||
|
||||
b2Vec2 center = b2Mul(xf, circle->m_p);
|
||||
float32 radius = circle->m_radius;
|
||||
|
||||
m_debugDraw->DrawCircle(center, radius, color);
|
||||
}
|
||||
break;
|
||||
|
||||
case b2Shape::e_polygon:
|
||||
{
|
||||
b2PolygonShape* poly = (b2PolygonShape*)fixture->GetShape();
|
||||
int32 vertexCount = poly->m_vertexCount;
|
||||
b2Assert(vertexCount <= b2_maxPolygonVertices);
|
||||
b2Vec2 vertices[b2_maxPolygonVertices];
|
||||
|
||||
for (int32 i = 0; i < vertexCount; ++i)
|
||||
{
|
||||
vertices[i] = b2Mul(xf, poly->m_vertices[i]);
|
||||
}
|
||||
|
||||
m_debugDraw->DrawPolygon(vertices, vertexCount, color);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/// Called for each fixture found in the query AABB.
|
||||
/// @return false to terminate the query.
|
||||
bool ReportFixture(b2Fixture* fixture)
|
||||
{
|
||||
if (m_count == e_maxCount)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
b2Body* body = fixture->GetBody();
|
||||
b2Shape* shape = fixture->GetShape();
|
||||
|
||||
bool overlap = b2TestOverlap(shape, 0, &m_circle, 0, body->GetTransform(), m_transform);
|
||||
|
||||
if (overlap)
|
||||
{
|
||||
DrawFixture(fixture);
|
||||
++m_count;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
b2CircleShape m_circle;
|
||||
b2Transform m_transform;
|
||||
b2Draw* m_debugDraw;
|
||||
int32 m_count;
|
||||
};
|
||||
|
||||
class PolyShapes : public Test
|
||||
{
|
||||
public:
|
||||
PolyShapes()
|
||||
{
|
||||
// Ground body
|
||||
{
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2Vec2 vertices[3];
|
||||
vertices[0].Set(-0.5f, 0.0f);
|
||||
vertices[1].Set(0.5f, 0.0f);
|
||||
vertices[2].Set(0.0f, 1.5f);
|
||||
m_polygons[0].Set(vertices, 3);
|
||||
}
|
||||
|
||||
{
|
||||
b2Vec2 vertices[3];
|
||||
vertices[0].Set(-0.1f, 0.0f);
|
||||
vertices[1].Set(0.1f, 0.0f);
|
||||
vertices[2].Set(0.0f, 1.5f);
|
||||
m_polygons[1].Set(vertices, 3);
|
||||
}
|
||||
|
||||
{
|
||||
float32 w = 1.0f;
|
||||
float32 b = w / (2.0f + b2Sqrt(2.0f));
|
||||
float32 s = b2Sqrt(2.0f) * b;
|
||||
|
||||
b2Vec2 vertices[8];
|
||||
vertices[0].Set(0.5f * s, 0.0f);
|
||||
vertices[1].Set(0.5f * w, b);
|
||||
vertices[2].Set(0.5f * w, b + s);
|
||||
vertices[3].Set(0.5f * s, w);
|
||||
vertices[4].Set(-0.5f * s, w);
|
||||
vertices[5].Set(-0.5f * w, b + s);
|
||||
vertices[6].Set(-0.5f * w, b);
|
||||
vertices[7].Set(-0.5f * s, 0.0f);
|
||||
|
||||
m_polygons[2].Set(vertices, 8);
|
||||
}
|
||||
|
||||
{
|
||||
m_polygons[3].SetAsBox(0.5f, 0.5f);
|
||||
}
|
||||
|
||||
{
|
||||
m_circle.m_radius = 0.5f;
|
||||
}
|
||||
|
||||
m_bodyIndex = 0;
|
||||
memset(m_bodies, 0, sizeof(m_bodies));
|
||||
}
|
||||
|
||||
void Create(int32 index)
|
||||
{
|
||||
if (m_bodies[m_bodyIndex] != NULL)
|
||||
{
|
||||
m_world->DestroyBody(m_bodies[m_bodyIndex]);
|
||||
m_bodies[m_bodyIndex] = NULL;
|
||||
}
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
|
||||
float32 x = RandomFloat(-2.0f, 2.0f);
|
||||
bd.position.Set(x, 10.0f);
|
||||
bd.angle = RandomFloat(-b2_pi, b2_pi);
|
||||
|
||||
if (index == 4)
|
||||
{
|
||||
bd.angularDamping = 0.02f;
|
||||
}
|
||||
|
||||
m_bodies[m_bodyIndex] = m_world->CreateBody(&bd);
|
||||
|
||||
if (index < 4)
|
||||
{
|
||||
b2FixtureDef fd;
|
||||
fd.shape = m_polygons + index;
|
||||
fd.density = 1.0f;
|
||||
fd.friction = 0.3f;
|
||||
m_bodies[m_bodyIndex]->CreateFixture(&fd);
|
||||
}
|
||||
else
|
||||
{
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &m_circle;
|
||||
fd.density = 1.0f;
|
||||
fd.friction = 0.3f;
|
||||
|
||||
m_bodies[m_bodyIndex]->CreateFixture(&fd);
|
||||
}
|
||||
|
||||
m_bodyIndex = (m_bodyIndex + 1) % k_maxBodies;
|
||||
}
|
||||
|
||||
void DestroyBody()
|
||||
{
|
||||
for (int32 i = 0; i < k_maxBodies; ++i)
|
||||
{
|
||||
if (m_bodies[i] != NULL)
|
||||
{
|
||||
m_world->DestroyBody(m_bodies[i]);
|
||||
m_bodies[i] = NULL;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
Create(key - '1');
|
||||
break;
|
||||
|
||||
case 'a':
|
||||
for (int32 i = 0; i < k_maxBodies; i += 2)
|
||||
{
|
||||
if (m_bodies[i])
|
||||
{
|
||||
bool active = m_bodies[i]->IsActive();
|
||||
m_bodies[i]->SetActive(!active);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
DestroyBody();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
Test::Step(settings);
|
||||
|
||||
PolyShapesCallback callback;
|
||||
callback.m_circle.m_radius = 2.0f;
|
||||
callback.m_circle.m_p.Set(0.0f, 1.1f);
|
||||
callback.m_transform.SetIdentity();
|
||||
callback.m_debugDraw = &m_debugDraw;
|
||||
|
||||
b2AABB aabb;
|
||||
callback.m_circle.ComputeAABB(&aabb, callback.m_transform, 0);
|
||||
|
||||
m_world->QueryAABB(&callback, aabb);
|
||||
|
||||
b2Color color(0.4f, 0.7f, 0.8f);
|
||||
m_debugDraw.DrawCircle(callback.m_circle.m_p, callback.m_circle.m_radius, color);
|
||||
|
||||
m_debugDraw.DrawString(5, m_textLine, "Press 1-5 to drop stuff");
|
||||
m_textLine += 15;
|
||||
m_debugDraw.DrawString(5, m_textLine, "Press 'a' to (de)activate some bodies");
|
||||
m_textLine += 15;
|
||||
m_debugDraw.DrawString(5, m_textLine, "Press 'd' to destroy a body");
|
||||
m_textLine += 15;
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new PolyShapes;
|
||||
}
|
||||
|
||||
int32 m_bodyIndex;
|
||||
b2Body* m_bodies[k_maxBodies];
|
||||
b2PolygonShape m_polygons[4];
|
||||
b2CircleShape m_circle;
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef POLY_SHAPES_H
|
||||
#define POLY_SHAPES_H
|
||||
|
||||
/// This tests stacking. It also shows how to use b2World::Query
|
||||
/// and b2TestOverlap.
|
||||
|
||||
const int32 k_maxBodies = 256;
|
||||
|
||||
/// This callback is called by b2World::QueryAABB. We find all the fixtures
|
||||
/// that overlap an AABB. Of those, we use b2TestOverlap to determine which fixtures
|
||||
/// overlap a circle. Up to 4 overlapped fixtures will be highlighted with a yellow border.
|
||||
class PolyShapesCallback : public b2QueryCallback
|
||||
{
|
||||
public:
|
||||
|
||||
enum
|
||||
{
|
||||
e_maxCount = 4
|
||||
};
|
||||
|
||||
PolyShapesCallback()
|
||||
{
|
||||
m_count = 0;
|
||||
}
|
||||
|
||||
void DrawFixture(b2Fixture* fixture)
|
||||
{
|
||||
b2Color color(0.95f, 0.95f, 0.6f);
|
||||
const b2Transform& xf = fixture->GetBody()->GetTransform();
|
||||
|
||||
switch (fixture->GetType())
|
||||
{
|
||||
case b2Shape::e_circle:
|
||||
{
|
||||
b2CircleShape* circle = (b2CircleShape*)fixture->GetShape();
|
||||
|
||||
b2Vec2 center = b2Mul(xf, circle->m_p);
|
||||
float32 radius = circle->m_radius;
|
||||
|
||||
m_debugDraw->DrawCircle(center, radius, color);
|
||||
}
|
||||
break;
|
||||
|
||||
case b2Shape::e_polygon:
|
||||
{
|
||||
b2PolygonShape* poly = (b2PolygonShape*)fixture->GetShape();
|
||||
int32 vertexCount = poly->m_vertexCount;
|
||||
b2Assert(vertexCount <= b2_maxPolygonVertices);
|
||||
b2Vec2 vertices[b2_maxPolygonVertices];
|
||||
|
||||
for (int32 i = 0; i < vertexCount; ++i)
|
||||
{
|
||||
vertices[i] = b2Mul(xf, poly->m_vertices[i]);
|
||||
}
|
||||
|
||||
m_debugDraw->DrawPolygon(vertices, vertexCount, color);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/// Called for each fixture found in the query AABB.
|
||||
/// @return false to terminate the query.
|
||||
bool ReportFixture(b2Fixture* fixture)
|
||||
{
|
||||
if (m_count == e_maxCount)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
b2Body* body = fixture->GetBody();
|
||||
b2Shape* shape = fixture->GetShape();
|
||||
|
||||
bool overlap = b2TestOverlap(shape, 0, &m_circle, 0, body->GetTransform(), m_transform);
|
||||
|
||||
if (overlap)
|
||||
{
|
||||
DrawFixture(fixture);
|
||||
++m_count;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
b2CircleShape m_circle;
|
||||
b2Transform m_transform;
|
||||
b2Draw* m_debugDraw;
|
||||
int32 m_count;
|
||||
};
|
||||
|
||||
class PolyShapes : public Test
|
||||
{
|
||||
public:
|
||||
PolyShapes()
|
||||
{
|
||||
// Ground body
|
||||
{
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2Vec2 vertices[3];
|
||||
vertices[0].Set(-0.5f, 0.0f);
|
||||
vertices[1].Set(0.5f, 0.0f);
|
||||
vertices[2].Set(0.0f, 1.5f);
|
||||
m_polygons[0].Set(vertices, 3);
|
||||
}
|
||||
|
||||
{
|
||||
b2Vec2 vertices[3];
|
||||
vertices[0].Set(-0.1f, 0.0f);
|
||||
vertices[1].Set(0.1f, 0.0f);
|
||||
vertices[2].Set(0.0f, 1.5f);
|
||||
m_polygons[1].Set(vertices, 3);
|
||||
}
|
||||
|
||||
{
|
||||
float32 w = 1.0f;
|
||||
float32 b = w / (2.0f + b2Sqrt(2.0f));
|
||||
float32 s = b2Sqrt(2.0f) * b;
|
||||
|
||||
b2Vec2 vertices[8];
|
||||
vertices[0].Set(0.5f * s, 0.0f);
|
||||
vertices[1].Set(0.5f * w, b);
|
||||
vertices[2].Set(0.5f * w, b + s);
|
||||
vertices[3].Set(0.5f * s, w);
|
||||
vertices[4].Set(-0.5f * s, w);
|
||||
vertices[5].Set(-0.5f * w, b + s);
|
||||
vertices[6].Set(-0.5f * w, b);
|
||||
vertices[7].Set(-0.5f * s, 0.0f);
|
||||
|
||||
m_polygons[2].Set(vertices, 8);
|
||||
}
|
||||
|
||||
{
|
||||
m_polygons[3].SetAsBox(0.5f, 0.5f);
|
||||
}
|
||||
|
||||
{
|
||||
m_circle.m_radius = 0.5f;
|
||||
}
|
||||
|
||||
m_bodyIndex = 0;
|
||||
memset(m_bodies, 0, sizeof(m_bodies));
|
||||
}
|
||||
|
||||
void Create(int32 index)
|
||||
{
|
||||
if (m_bodies[m_bodyIndex] != NULL)
|
||||
{
|
||||
m_world->DestroyBody(m_bodies[m_bodyIndex]);
|
||||
m_bodies[m_bodyIndex] = NULL;
|
||||
}
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
|
||||
float32 x = RandomFloat(-2.0f, 2.0f);
|
||||
bd.position.Set(x, 10.0f);
|
||||
bd.angle = RandomFloat(-b2_pi, b2_pi);
|
||||
|
||||
if (index == 4)
|
||||
{
|
||||
bd.angularDamping = 0.02f;
|
||||
}
|
||||
|
||||
m_bodies[m_bodyIndex] = m_world->CreateBody(&bd);
|
||||
|
||||
if (index < 4)
|
||||
{
|
||||
b2FixtureDef fd;
|
||||
fd.shape = m_polygons + index;
|
||||
fd.density = 1.0f;
|
||||
fd.friction = 0.3f;
|
||||
m_bodies[m_bodyIndex]->CreateFixture(&fd);
|
||||
}
|
||||
else
|
||||
{
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &m_circle;
|
||||
fd.density = 1.0f;
|
||||
fd.friction = 0.3f;
|
||||
|
||||
m_bodies[m_bodyIndex]->CreateFixture(&fd);
|
||||
}
|
||||
|
||||
m_bodyIndex = (m_bodyIndex + 1) % k_maxBodies;
|
||||
}
|
||||
|
||||
void DestroyBody()
|
||||
{
|
||||
for (int32 i = 0; i < k_maxBodies; ++i)
|
||||
{
|
||||
if (m_bodies[i] != NULL)
|
||||
{
|
||||
m_world->DestroyBody(m_bodies[i]);
|
||||
m_bodies[i] = NULL;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
Create(key - '1');
|
||||
break;
|
||||
|
||||
case 'a':
|
||||
for (int32 i = 0; i < k_maxBodies; i += 2)
|
||||
{
|
||||
if (m_bodies[i])
|
||||
{
|
||||
bool active = m_bodies[i]->IsActive();
|
||||
m_bodies[i]->SetActive(!active);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
DestroyBody();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
Test::Step(settings);
|
||||
|
||||
PolyShapesCallback callback;
|
||||
callback.m_circle.m_radius = 2.0f;
|
||||
callback.m_circle.m_p.Set(0.0f, 1.1f);
|
||||
callback.m_transform.SetIdentity();
|
||||
callback.m_debugDraw = &m_debugDraw;
|
||||
|
||||
b2AABB aabb;
|
||||
callback.m_circle.ComputeAABB(&aabb, callback.m_transform, 0);
|
||||
|
||||
m_world->QueryAABB(&callback, aabb);
|
||||
|
||||
b2Color color(0.4f, 0.7f, 0.8f);
|
||||
m_debugDraw.DrawCircle(callback.m_circle.m_p, callback.m_circle.m_radius, color);
|
||||
|
||||
m_debugDraw.DrawString(5, m_textLine, "Press 1-5 to drop stuff");
|
||||
m_textLine += 15;
|
||||
m_debugDraw.DrawString(5, m_textLine, "Press 'a' to (de)activate some bodies");
|
||||
m_textLine += 15;
|
||||
m_debugDraw.DrawString(5, m_textLine, "Press 'd' to destroy a body");
|
||||
m_textLine += 15;
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new PolyShapes;
|
||||
}
|
||||
|
||||
int32 m_bodyIndex;
|
||||
b2Body* m_bodies[k_maxBodies];
|
||||
b2PolygonShape m_polygons[4];
|
||||
b2CircleShape m_circle;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,107 +1,107 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef PRISMATIC_H
|
||||
#define PRISMATIC_H
|
||||
|
||||
// The motor in this test gets smoother with higher velocity iterations.
|
||||
class Prismatic : public Test
|
||||
{
|
||||
public:
|
||||
Prismatic()
|
||||
{
|
||||
b2Body* ground = NULL;
|
||||
{
|
||||
b2BodyDef bd;
|
||||
ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(2.0f, 0.5f);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-10.0f, 10.0f);
|
||||
bd.angle = 0.5f * b2_pi;
|
||||
bd.allowSleep = false;
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&shape, 5.0f);
|
||||
|
||||
b2PrismaticJointDef pjd;
|
||||
|
||||
// Bouncy limit
|
||||
b2Vec2 axis(2.0f, 1.0f);
|
||||
axis.Normalize();
|
||||
pjd.Initialize(ground, body, b2Vec2(0.0f, 0.0f), axis);
|
||||
|
||||
// Non-bouncy limit
|
||||
//pjd.Initialize(ground, body, b2Vec2(-10.0f, 10.0f), b2Vec2(1.0f, 0.0f));
|
||||
|
||||
pjd.motorSpeed = 10.0f;
|
||||
pjd.maxMotorForce = 10000.0f;
|
||||
pjd.enableMotor = true;
|
||||
pjd.lowerTranslation = 0.0f;
|
||||
pjd.upperTranslation = 20.0f;
|
||||
pjd.enableLimit = true;
|
||||
|
||||
m_joint = (b2PrismaticJoint*)m_world->CreateJoint(&pjd);
|
||||
}
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case 'l':
|
||||
m_joint->EnableLimit(!m_joint->IsLimitEnabled());
|
||||
break;
|
||||
|
||||
case 'm':
|
||||
m_joint->EnableMotor(!m_joint->IsMotorEnabled());
|
||||
break;
|
||||
|
||||
case 's':
|
||||
m_joint->SetMotorSpeed(-m_joint->GetMotorSpeed());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
Test::Step(settings);
|
||||
m_debugDraw.DrawString(5, m_textLine, "Keys: (l) limits, (m) motors, (s) speed");
|
||||
m_textLine += 15;
|
||||
float32 force = m_joint->GetMotorForce(settings->hz);
|
||||
m_debugDraw.DrawString(5, m_textLine, "Motor Force = %4.0f", (float) force);
|
||||
m_textLine += 15;
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new Prismatic;
|
||||
}
|
||||
|
||||
b2PrismaticJoint* m_joint;
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef PRISMATIC_H
|
||||
#define PRISMATIC_H
|
||||
|
||||
// The motor in this test gets smoother with higher velocity iterations.
|
||||
class Prismatic : public Test
|
||||
{
|
||||
public:
|
||||
Prismatic()
|
||||
{
|
||||
b2Body* ground = NULL;
|
||||
{
|
||||
b2BodyDef bd;
|
||||
ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(2.0f, 0.5f);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-10.0f, 10.0f);
|
||||
bd.angle = 0.5f * b2_pi;
|
||||
bd.allowSleep = false;
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&shape, 5.0f);
|
||||
|
||||
b2PrismaticJointDef pjd;
|
||||
|
||||
// Bouncy limit
|
||||
b2Vec2 axis(2.0f, 1.0f);
|
||||
axis.Normalize();
|
||||
pjd.Initialize(ground, body, b2Vec2(0.0f, 0.0f), axis);
|
||||
|
||||
// Non-bouncy limit
|
||||
//pjd.Initialize(ground, body, b2Vec2(-10.0f, 10.0f), b2Vec2(1.0f, 0.0f));
|
||||
|
||||
pjd.motorSpeed = 10.0f;
|
||||
pjd.maxMotorForce = 10000.0f;
|
||||
pjd.enableMotor = true;
|
||||
pjd.lowerTranslation = 0.0f;
|
||||
pjd.upperTranslation = 20.0f;
|
||||
pjd.enableLimit = true;
|
||||
|
||||
m_joint = (b2PrismaticJoint*)m_world->CreateJoint(&pjd);
|
||||
}
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case 'l':
|
||||
m_joint->EnableLimit(!m_joint->IsLimitEnabled());
|
||||
break;
|
||||
|
||||
case 'm':
|
||||
m_joint->EnableMotor(!m_joint->IsMotorEnabled());
|
||||
break;
|
||||
|
||||
case 's':
|
||||
m_joint->SetMotorSpeed(-m_joint->GetMotorSpeed());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
Test::Step(settings);
|
||||
m_debugDraw.DrawString(5, m_textLine, "Keys: (l) limits, (m) motors, (s) speed");
|
||||
m_textLine += 15;
|
||||
float32 force = m_joint->GetMotorForce(settings->hz);
|
||||
m_debugDraw.DrawString(5, m_textLine, "Motor Force = %4.0f", (float) force);
|
||||
m_textLine += 15;
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new Prismatic;
|
||||
}
|
||||
|
||||
b2PrismaticJoint* m_joint;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,106 +1,106 @@
|
||||
/*
|
||||
* Copyright (c) 2007-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef PULLEYS_H
|
||||
#define PULLEYS_H
|
||||
|
||||
class Pulleys : public Test
|
||||
{
|
||||
public:
|
||||
Pulleys()
|
||||
{
|
||||
float32 y = 16.0f;
|
||||
float32 L = 12.0f;
|
||||
float32 a = 1.0f;
|
||||
float32 b = 2.0f;
|
||||
|
||||
b2Body* ground = NULL;
|
||||
{
|
||||
b2BodyDef bd;
|
||||
ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape edge;
|
||||
edge.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
//ground->CreateFixture(&shape, 0.0f);
|
||||
|
||||
b2CircleShape circle;
|
||||
circle.m_radius = 2.0f;
|
||||
|
||||
circle.m_p.Set(-10.0f, y + b + L);
|
||||
ground->CreateFixture(&circle, 0.0f);
|
||||
|
||||
circle.m_p.Set(10.0f, y + b + L);
|
||||
ground->CreateFixture(&circle, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(a, b);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
|
||||
//bd.fixedRotation = true;
|
||||
bd.position.Set(-10.0f, y);
|
||||
b2Body* body1 = m_world->CreateBody(&bd);
|
||||
body1->CreateFixture(&shape, 5.0f);
|
||||
|
||||
bd.position.Set(10.0f, y);
|
||||
b2Body* body2 = m_world->CreateBody(&bd);
|
||||
body2->CreateFixture(&shape, 5.0f);
|
||||
|
||||
b2PulleyJointDef pulleyDef;
|
||||
b2Vec2 anchor1(-10.0f, y + b);
|
||||
b2Vec2 anchor2(10.0f, y + b);
|
||||
b2Vec2 groundAnchor1(-10.0f, y + b + L);
|
||||
b2Vec2 groundAnchor2(10.0f, y + b + L);
|
||||
pulleyDef.Initialize(body1, body2, groundAnchor1, groundAnchor2, anchor1, anchor2, 1.5f);
|
||||
|
||||
m_joint1 = (b2PulleyJoint*)m_world->CreateJoint(&pulleyDef);
|
||||
}
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case 0:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
Test::Step(settings);
|
||||
|
||||
float32 ratio = m_joint1->GetRatio();
|
||||
float32 L = m_joint1->GetLengthA() + ratio * m_joint1->GetLengthB();
|
||||
m_debugDraw.DrawString(5, m_textLine, "L1 + %4.2f * L2 = %4.2f", (float) ratio, (float) L);
|
||||
m_textLine += 15;
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new Pulleys;
|
||||
}
|
||||
|
||||
b2PulleyJoint* m_joint1;
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2007-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef PULLEYS_H
|
||||
#define PULLEYS_H
|
||||
|
||||
class Pulleys : public Test
|
||||
{
|
||||
public:
|
||||
Pulleys()
|
||||
{
|
||||
float32 y = 16.0f;
|
||||
float32 L = 12.0f;
|
||||
float32 a = 1.0f;
|
||||
float32 b = 2.0f;
|
||||
|
||||
b2Body* ground = NULL;
|
||||
{
|
||||
b2BodyDef bd;
|
||||
ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape edge;
|
||||
edge.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
//ground->CreateFixture(&shape, 0.0f);
|
||||
|
||||
b2CircleShape circle;
|
||||
circle.m_radius = 2.0f;
|
||||
|
||||
circle.m_p.Set(-10.0f, y + b + L);
|
||||
ground->CreateFixture(&circle, 0.0f);
|
||||
|
||||
circle.m_p.Set(10.0f, y + b + L);
|
||||
ground->CreateFixture(&circle, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(a, b);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
|
||||
//bd.fixedRotation = true;
|
||||
bd.position.Set(-10.0f, y);
|
||||
b2Body* body1 = m_world->CreateBody(&bd);
|
||||
body1->CreateFixture(&shape, 5.0f);
|
||||
|
||||
bd.position.Set(10.0f, y);
|
||||
b2Body* body2 = m_world->CreateBody(&bd);
|
||||
body2->CreateFixture(&shape, 5.0f);
|
||||
|
||||
b2PulleyJointDef pulleyDef;
|
||||
b2Vec2 anchor1(-10.0f, y + b);
|
||||
b2Vec2 anchor2(10.0f, y + b);
|
||||
b2Vec2 groundAnchor1(-10.0f, y + b + L);
|
||||
b2Vec2 groundAnchor2(10.0f, y + b + L);
|
||||
pulleyDef.Initialize(body1, body2, groundAnchor1, groundAnchor2, anchor1, anchor2, 1.5f);
|
||||
|
||||
m_joint1 = (b2PulleyJoint*)m_world->CreateJoint(&pulleyDef);
|
||||
}
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case 0:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
Test::Step(settings);
|
||||
|
||||
float32 ratio = m_joint1->GetRatio();
|
||||
float32 L = m_joint1->GetLengthA() + ratio * m_joint1->GetLengthB();
|
||||
m_debugDraw.DrawString(5, m_textLine, "L1 + %4.2f * L2 = %4.2f", (float) ratio, (float) L);
|
||||
m_textLine += 15;
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new Pulleys;
|
||||
}
|
||||
|
||||
b2PulleyJoint* m_joint1;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,89 +1,89 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef PYRAMID_H
|
||||
#define PYRAMID_H
|
||||
|
||||
class Pyramid : public Test
|
||||
{
|
||||
public:
|
||||
enum
|
||||
{
|
||||
e_count = 20
|
||||
};
|
||||
|
||||
Pyramid()
|
||||
{
|
||||
{
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
float32 a = 0.5f;
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(a, a);
|
||||
|
||||
b2Vec2 x(-7.0f, 0.75f);
|
||||
b2Vec2 y;
|
||||
b2Vec2 deltaX(0.5625f, 1.25f);
|
||||
b2Vec2 deltaY(1.125f, 0.0f);
|
||||
|
||||
for (int32 i = 0; i < e_count; ++i)
|
||||
{
|
||||
y = x;
|
||||
|
||||
for (int32 j = i; j < e_count; ++j)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position = y;
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&shape, 5.0f);
|
||||
|
||||
y += deltaY;
|
||||
}
|
||||
|
||||
x += deltaX;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
Test::Step(settings);
|
||||
|
||||
//b2DynamicTree* tree = &m_world->m_contactManager.m_broadPhase.m_tree;
|
||||
|
||||
//if (m_stepCount == 400)
|
||||
//{
|
||||
// tree->RebuildBottomUp();
|
||||
//}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new Pyramid;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef PYRAMID_H
|
||||
#define PYRAMID_H
|
||||
|
||||
class Pyramid : public Test
|
||||
{
|
||||
public:
|
||||
enum
|
||||
{
|
||||
e_count = 20
|
||||
};
|
||||
|
||||
Pyramid()
|
||||
{
|
||||
{
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
float32 a = 0.5f;
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(a, a);
|
||||
|
||||
b2Vec2 x(-7.0f, 0.75f);
|
||||
b2Vec2 y;
|
||||
b2Vec2 deltaX(0.5625f, 1.25f);
|
||||
b2Vec2 deltaY(1.125f, 0.0f);
|
||||
|
||||
for (int32 i = 0; i < e_count; ++i)
|
||||
{
|
||||
y = x;
|
||||
|
||||
for (int32 j = i; j < e_count; ++j)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position = y;
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&shape, 5.0f);
|
||||
|
||||
y += deltaY;
|
||||
}
|
||||
|
||||
x += deltaX;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
Test::Step(settings);
|
||||
|
||||
//b2DynamicTree* tree = &m_world->m_contactManager.m_broadPhase.m_tree;
|
||||
|
||||
//if (m_stepCount == 400)
|
||||
//{
|
||||
// tree->RebuildBottomUp();
|
||||
//}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new Pyramid;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,440 +1,440 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef RAY_CAST_H
|
||||
#define RAY_CAST_H
|
||||
|
||||
// This test demonstrates how to use the world ray-cast feature.
|
||||
// NOTE: we are intentionally filtering one of the polygons, therefore
|
||||
// the ray will always miss one type of polygon.
|
||||
|
||||
// This callback finds the closest hit. Polygon 0 is filtered.
|
||||
class RayCastClosestCallback : public b2RayCastCallback
|
||||
{
|
||||
public:
|
||||
RayCastClosestCallback()
|
||||
{
|
||||
m_hit = false;
|
||||
}
|
||||
|
||||
float32 ReportFixture( b2Fixture* fixture, const b2Vec2& point,
|
||||
const b2Vec2& normal, float32 fraction)
|
||||
{
|
||||
b2Body* body = fixture->GetBody();
|
||||
void* userData = body->GetUserData();
|
||||
if (userData)
|
||||
{
|
||||
int32 index = *(int32*)userData;
|
||||
if (index == 0)
|
||||
{
|
||||
// filter
|
||||
return -1.0f;
|
||||
}
|
||||
}
|
||||
|
||||
m_hit = true;
|
||||
m_point = point;
|
||||
m_normal = normal;
|
||||
return fraction;
|
||||
}
|
||||
|
||||
bool m_hit;
|
||||
b2Vec2 m_point;
|
||||
b2Vec2 m_normal;
|
||||
};
|
||||
|
||||
// This callback finds any hit. Polygon 0 is filtered.
|
||||
class RayCastAnyCallback : public b2RayCastCallback
|
||||
{
|
||||
public:
|
||||
RayCastAnyCallback()
|
||||
{
|
||||
m_hit = false;
|
||||
}
|
||||
|
||||
float32 ReportFixture( b2Fixture* fixture, const b2Vec2& point,
|
||||
const b2Vec2& normal, float32 fraction)
|
||||
{
|
||||
b2Body* body = fixture->GetBody();
|
||||
void* userData = body->GetUserData();
|
||||
if (userData)
|
||||
{
|
||||
int32 index = *(int32*)userData;
|
||||
if (index == 0)
|
||||
{
|
||||
// filter
|
||||
return -1.0f;
|
||||
}
|
||||
}
|
||||
|
||||
m_hit = true;
|
||||
m_point = point;
|
||||
m_normal = normal;
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
bool m_hit;
|
||||
b2Vec2 m_point;
|
||||
b2Vec2 m_normal;
|
||||
};
|
||||
|
||||
// This ray cast collects multiple hits along the ray. Polygon 0 is filtered.
|
||||
class RayCastMultipleCallback : public b2RayCastCallback
|
||||
{
|
||||
public:
|
||||
enum
|
||||
{
|
||||
e_maxCount = 3
|
||||
};
|
||||
|
||||
RayCastMultipleCallback()
|
||||
{
|
||||
m_count = 0;
|
||||
}
|
||||
|
||||
float32 ReportFixture( b2Fixture* fixture, const b2Vec2& point,
|
||||
const b2Vec2& normal, float32 fraction)
|
||||
{
|
||||
b2Body* body = fixture->GetBody();
|
||||
void* userData = body->GetUserData();
|
||||
if (userData)
|
||||
{
|
||||
int32 index = *(int32*)userData;
|
||||
if (index == 0)
|
||||
{
|
||||
// filter
|
||||
return -1.0f;
|
||||
}
|
||||
}
|
||||
|
||||
b2Assert(m_count < e_maxCount);
|
||||
|
||||
m_points[m_count] = point;
|
||||
m_normals[m_count] = normal;
|
||||
++m_count;
|
||||
|
||||
if (m_count == e_maxCount)
|
||||
{
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
return 1.0f;
|
||||
}
|
||||
|
||||
b2Vec2 m_points[e_maxCount];
|
||||
b2Vec2 m_normals[e_maxCount];
|
||||
int32 m_count;
|
||||
};
|
||||
|
||||
|
||||
class RayCast : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
enum
|
||||
{
|
||||
e_maxBodies = 256
|
||||
};
|
||||
|
||||
enum Mode
|
||||
{
|
||||
e_closest,
|
||||
e_any,
|
||||
e_multiple
|
||||
};
|
||||
|
||||
RayCast()
|
||||
{
|
||||
// Ground body
|
||||
{
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2Vec2 vertices[3];
|
||||
vertices[0].Set(-0.5f, 0.0f);
|
||||
vertices[1].Set(0.5f, 0.0f);
|
||||
vertices[2].Set(0.0f, 1.5f);
|
||||
m_polygons[0].Set(vertices, 3);
|
||||
}
|
||||
|
||||
{
|
||||
b2Vec2 vertices[3];
|
||||
vertices[0].Set(-0.1f, 0.0f);
|
||||
vertices[1].Set(0.1f, 0.0f);
|
||||
vertices[2].Set(0.0f, 1.5f);
|
||||
m_polygons[1].Set(vertices, 3);
|
||||
}
|
||||
|
||||
{
|
||||
float32 w = 1.0f;
|
||||
float32 b = w / (2.0f + b2Sqrt(2.0f));
|
||||
float32 s = b2Sqrt(2.0f) * b;
|
||||
|
||||
b2Vec2 vertices[8];
|
||||
vertices[0].Set(0.5f * s, 0.0f);
|
||||
vertices[1].Set(0.5f * w, b);
|
||||
vertices[2].Set(0.5f * w, b + s);
|
||||
vertices[3].Set(0.5f * s, w);
|
||||
vertices[4].Set(-0.5f * s, w);
|
||||
vertices[5].Set(-0.5f * w, b + s);
|
||||
vertices[6].Set(-0.5f * w, b);
|
||||
vertices[7].Set(-0.5f * s, 0.0f);
|
||||
|
||||
m_polygons[2].Set(vertices, 8);
|
||||
}
|
||||
|
||||
{
|
||||
m_polygons[3].SetAsBox(0.5f, 0.5f);
|
||||
}
|
||||
|
||||
{
|
||||
m_circle.m_radius = 0.5f;
|
||||
}
|
||||
|
||||
m_bodyIndex = 0;
|
||||
memset(m_bodies, 0, sizeof(m_bodies));
|
||||
|
||||
m_angle = 0.0f;
|
||||
|
||||
m_mode = e_closest;
|
||||
}
|
||||
|
||||
void Create(int32 index)
|
||||
{
|
||||
if (m_bodies[m_bodyIndex] != NULL)
|
||||
{
|
||||
m_world->DestroyBody(m_bodies[m_bodyIndex]);
|
||||
m_bodies[m_bodyIndex] = NULL;
|
||||
}
|
||||
|
||||
b2BodyDef bd;
|
||||
|
||||
float32 x = RandomFloat(-10.0f, 10.0f);
|
||||
float32 y = RandomFloat(0.0f, 20.0f);
|
||||
bd.position.Set(x, y);
|
||||
bd.angle = RandomFloat(-b2_pi, b2_pi);
|
||||
|
||||
m_userData[m_bodyIndex] = index;
|
||||
bd.userData = m_userData + m_bodyIndex;
|
||||
|
||||
if (index == 4)
|
||||
{
|
||||
bd.angularDamping = 0.02f;
|
||||
}
|
||||
|
||||
m_bodies[m_bodyIndex] = m_world->CreateBody(&bd);
|
||||
|
||||
if (index < 4)
|
||||
{
|
||||
b2FixtureDef fd;
|
||||
fd.shape = m_polygons + index;
|
||||
fd.friction = 0.3f;
|
||||
m_bodies[m_bodyIndex]->CreateFixture(&fd);
|
||||
}
|
||||
else
|
||||
{
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &m_circle;
|
||||
fd.friction = 0.3f;
|
||||
|
||||
m_bodies[m_bodyIndex]->CreateFixture(&fd);
|
||||
}
|
||||
|
||||
m_bodyIndex = (m_bodyIndex + 1) % e_maxBodies;
|
||||
}
|
||||
|
||||
void DestroyBody()
|
||||
{
|
||||
for (int32 i = 0; i < e_maxBodies; ++i)
|
||||
{
|
||||
if (m_bodies[i] != NULL)
|
||||
{
|
||||
m_world->DestroyBody(m_bodies[i]);
|
||||
m_bodies[i] = NULL;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
Create(key - '1');
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
DestroyBody();
|
||||
break;
|
||||
|
||||
case 'm':
|
||||
if (m_mode == e_closest)
|
||||
{
|
||||
m_mode = e_any;
|
||||
}
|
||||
else if (m_mode == e_any)
|
||||
{
|
||||
m_mode = e_multiple;
|
||||
}
|
||||
else if (m_mode == e_multiple)
|
||||
{
|
||||
m_mode = e_closest;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
bool advanceRay = settings->pause == 0 || settings->singleStep;
|
||||
|
||||
Test::Step(settings);
|
||||
m_debugDraw.DrawString(5, m_textLine, "Press 1-5 to drop stuff, m to change the mode");
|
||||
m_textLine += 15;
|
||||
m_debugDraw.DrawString(5, m_textLine, "Mode = %d", m_mode);
|
||||
m_textLine += 15;
|
||||
|
||||
float32 L = 11.0f;
|
||||
b2Vec2 point1(0.0f, 10.0f);
|
||||
b2Vec2 d(L * cosf(m_angle), L * sinf(m_angle));
|
||||
b2Vec2 point2 = point1 + d;
|
||||
|
||||
if (m_mode == e_closest)
|
||||
{
|
||||
RayCastClosestCallback callback;
|
||||
m_world->RayCast(&callback, point1, point2);
|
||||
|
||||
if (callback.m_hit)
|
||||
{
|
||||
m_debugDraw.DrawPoint(callback.m_point, 5.0f, b2Color(0.4f, 0.9f, 0.4f));
|
||||
m_debugDraw.DrawSegment(point1, callback.m_point, b2Color(0.8f, 0.8f, 0.8f));
|
||||
b2Vec2 head = callback.m_point + 0.5f * callback.m_normal;
|
||||
m_debugDraw.DrawSegment(callback.m_point, head, b2Color(0.9f, 0.9f, 0.4f));
|
||||
}
|
||||
else
|
||||
{
|
||||
m_debugDraw.DrawSegment(point1, point2, b2Color(0.8f, 0.8f, 0.8f));
|
||||
}
|
||||
}
|
||||
else if (m_mode == e_any)
|
||||
{
|
||||
RayCastAnyCallback callback;
|
||||
m_world->RayCast(&callback, point1, point2);
|
||||
|
||||
if (callback.m_hit)
|
||||
{
|
||||
m_debugDraw.DrawPoint(callback.m_point, 5.0f, b2Color(0.4f, 0.9f, 0.4f));
|
||||
m_debugDraw.DrawSegment(point1, callback.m_point, b2Color(0.8f, 0.8f, 0.8f));
|
||||
b2Vec2 head = callback.m_point + 0.5f * callback.m_normal;
|
||||
m_debugDraw.DrawSegment(callback.m_point, head, b2Color(0.9f, 0.9f, 0.4f));
|
||||
}
|
||||
else
|
||||
{
|
||||
m_debugDraw.DrawSegment(point1, point2, b2Color(0.8f, 0.8f, 0.8f));
|
||||
}
|
||||
}
|
||||
else if (m_mode == e_multiple)
|
||||
{
|
||||
RayCastMultipleCallback callback;
|
||||
m_world->RayCast(&callback, point1, point2);
|
||||
m_debugDraw.DrawSegment(point1, point2, b2Color(0.8f, 0.8f, 0.8f));
|
||||
|
||||
for (int32 i = 0; i < callback.m_count; ++i)
|
||||
{
|
||||
b2Vec2 p = callback.m_points[i];
|
||||
b2Vec2 n = callback.m_normals[i];
|
||||
m_debugDraw.DrawPoint(p, 5.0f, b2Color(0.4f, 0.9f, 0.4f));
|
||||
m_debugDraw.DrawSegment(point1, p, b2Color(0.8f, 0.8f, 0.8f));
|
||||
b2Vec2 head = p + 0.5f * n;
|
||||
m_debugDraw.DrawSegment(p, head, b2Color(0.9f, 0.9f, 0.4f));
|
||||
}
|
||||
}
|
||||
|
||||
if (advanceRay)
|
||||
{
|
||||
m_angle += 0.25f * b2_pi / 180.0f;
|
||||
}
|
||||
|
||||
#if 0
|
||||
// This case was failing.
|
||||
{
|
||||
b2Vec2 vertices[4];
|
||||
//vertices[0].Set(-22.875f, -3.0f);
|
||||
//vertices[1].Set(22.875f, -3.0f);
|
||||
//vertices[2].Set(22.875f, 3.0f);
|
||||
//vertices[3].Set(-22.875f, 3.0f);
|
||||
|
||||
b2PolygonShape shape;
|
||||
//shape.Set(vertices, 4);
|
||||
shape.SetAsBox(22.875f, 3.0f);
|
||||
|
||||
b2RayCastInput input;
|
||||
input.p1.Set(10.2725f,1.71372f);
|
||||
input.p2.Set(10.2353f,2.21807f);
|
||||
//input.maxFraction = 0.567623f;
|
||||
input.maxFraction = 0.56762173f;
|
||||
|
||||
b2Transform xf;
|
||||
xf.SetIdentity();
|
||||
xf.position.Set(23.0f, 5.0f);
|
||||
|
||||
b2RayCastOutput output;
|
||||
bool hit;
|
||||
hit = shape.RayCast(&output, input, xf);
|
||||
hit = false;
|
||||
|
||||
b2Color color(1.0f, 1.0f, 1.0f);
|
||||
b2Vec2 vs[4];
|
||||
for (int32 i = 0; i < 4; ++i)
|
||||
{
|
||||
vs[i] = b2Mul(xf, shape.m_vertices[i]);
|
||||
}
|
||||
|
||||
m_debugDraw.DrawPolygon(vs, 4, color);
|
||||
m_debugDraw.DrawSegment(input.p1, input.p2, color);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new RayCast;
|
||||
}
|
||||
|
||||
int32 m_bodyIndex;
|
||||
b2Body* m_bodies[e_maxBodies];
|
||||
int32 m_userData[e_maxBodies];
|
||||
b2PolygonShape m_polygons[4];
|
||||
b2CircleShape m_circle;
|
||||
|
||||
float32 m_angle;
|
||||
|
||||
Mode m_mode;
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef RAY_CAST_H
|
||||
#define RAY_CAST_H
|
||||
|
||||
// This test demonstrates how to use the world ray-cast feature.
|
||||
// NOTE: we are intentionally filtering one of the polygons, therefore
|
||||
// the ray will always miss one type of polygon.
|
||||
|
||||
// This callback finds the closest hit. Polygon 0 is filtered.
|
||||
class RayCastClosestCallback : public b2RayCastCallback
|
||||
{
|
||||
public:
|
||||
RayCastClosestCallback()
|
||||
{
|
||||
m_hit = false;
|
||||
}
|
||||
|
||||
float32 ReportFixture( b2Fixture* fixture, const b2Vec2& point,
|
||||
const b2Vec2& normal, float32 fraction)
|
||||
{
|
||||
b2Body* body = fixture->GetBody();
|
||||
void* userData = body->GetUserData();
|
||||
if (userData)
|
||||
{
|
||||
int32 index = *(int32*)userData;
|
||||
if (index == 0)
|
||||
{
|
||||
// filter
|
||||
return -1.0f;
|
||||
}
|
||||
}
|
||||
|
||||
m_hit = true;
|
||||
m_point = point;
|
||||
m_normal = normal;
|
||||
return fraction;
|
||||
}
|
||||
|
||||
bool m_hit;
|
||||
b2Vec2 m_point;
|
||||
b2Vec2 m_normal;
|
||||
};
|
||||
|
||||
// This callback finds any hit. Polygon 0 is filtered.
|
||||
class RayCastAnyCallback : public b2RayCastCallback
|
||||
{
|
||||
public:
|
||||
RayCastAnyCallback()
|
||||
{
|
||||
m_hit = false;
|
||||
}
|
||||
|
||||
float32 ReportFixture( b2Fixture* fixture, const b2Vec2& point,
|
||||
const b2Vec2& normal, float32 fraction)
|
||||
{
|
||||
b2Body* body = fixture->GetBody();
|
||||
void* userData = body->GetUserData();
|
||||
if (userData)
|
||||
{
|
||||
int32 index = *(int32*)userData;
|
||||
if (index == 0)
|
||||
{
|
||||
// filter
|
||||
return -1.0f;
|
||||
}
|
||||
}
|
||||
|
||||
m_hit = true;
|
||||
m_point = point;
|
||||
m_normal = normal;
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
bool m_hit;
|
||||
b2Vec2 m_point;
|
||||
b2Vec2 m_normal;
|
||||
};
|
||||
|
||||
// This ray cast collects multiple hits along the ray. Polygon 0 is filtered.
|
||||
class RayCastMultipleCallback : public b2RayCastCallback
|
||||
{
|
||||
public:
|
||||
enum
|
||||
{
|
||||
e_maxCount = 3
|
||||
};
|
||||
|
||||
RayCastMultipleCallback()
|
||||
{
|
||||
m_count = 0;
|
||||
}
|
||||
|
||||
float32 ReportFixture( b2Fixture* fixture, const b2Vec2& point,
|
||||
const b2Vec2& normal, float32 fraction)
|
||||
{
|
||||
b2Body* body = fixture->GetBody();
|
||||
void* userData = body->GetUserData();
|
||||
if (userData)
|
||||
{
|
||||
int32 index = *(int32*)userData;
|
||||
if (index == 0)
|
||||
{
|
||||
// filter
|
||||
return -1.0f;
|
||||
}
|
||||
}
|
||||
|
||||
b2Assert(m_count < e_maxCount);
|
||||
|
||||
m_points[m_count] = point;
|
||||
m_normals[m_count] = normal;
|
||||
++m_count;
|
||||
|
||||
if (m_count == e_maxCount)
|
||||
{
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
return 1.0f;
|
||||
}
|
||||
|
||||
b2Vec2 m_points[e_maxCount];
|
||||
b2Vec2 m_normals[e_maxCount];
|
||||
int32 m_count;
|
||||
};
|
||||
|
||||
|
||||
class RayCast : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
enum
|
||||
{
|
||||
e_maxBodies = 256
|
||||
};
|
||||
|
||||
enum Mode
|
||||
{
|
||||
e_closest,
|
||||
e_any,
|
||||
e_multiple
|
||||
};
|
||||
|
||||
RayCast()
|
||||
{
|
||||
// Ground body
|
||||
{
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2Vec2 vertices[3];
|
||||
vertices[0].Set(-0.5f, 0.0f);
|
||||
vertices[1].Set(0.5f, 0.0f);
|
||||
vertices[2].Set(0.0f, 1.5f);
|
||||
m_polygons[0].Set(vertices, 3);
|
||||
}
|
||||
|
||||
{
|
||||
b2Vec2 vertices[3];
|
||||
vertices[0].Set(-0.1f, 0.0f);
|
||||
vertices[1].Set(0.1f, 0.0f);
|
||||
vertices[2].Set(0.0f, 1.5f);
|
||||
m_polygons[1].Set(vertices, 3);
|
||||
}
|
||||
|
||||
{
|
||||
float32 w = 1.0f;
|
||||
float32 b = w / (2.0f + b2Sqrt(2.0f));
|
||||
float32 s = b2Sqrt(2.0f) * b;
|
||||
|
||||
b2Vec2 vertices[8];
|
||||
vertices[0].Set(0.5f * s, 0.0f);
|
||||
vertices[1].Set(0.5f * w, b);
|
||||
vertices[2].Set(0.5f * w, b + s);
|
||||
vertices[3].Set(0.5f * s, w);
|
||||
vertices[4].Set(-0.5f * s, w);
|
||||
vertices[5].Set(-0.5f * w, b + s);
|
||||
vertices[6].Set(-0.5f * w, b);
|
||||
vertices[7].Set(-0.5f * s, 0.0f);
|
||||
|
||||
m_polygons[2].Set(vertices, 8);
|
||||
}
|
||||
|
||||
{
|
||||
m_polygons[3].SetAsBox(0.5f, 0.5f);
|
||||
}
|
||||
|
||||
{
|
||||
m_circle.m_radius = 0.5f;
|
||||
}
|
||||
|
||||
m_bodyIndex = 0;
|
||||
memset(m_bodies, 0, sizeof(m_bodies));
|
||||
|
||||
m_angle = 0.0f;
|
||||
|
||||
m_mode = e_closest;
|
||||
}
|
||||
|
||||
void Create(int32 index)
|
||||
{
|
||||
if (m_bodies[m_bodyIndex] != NULL)
|
||||
{
|
||||
m_world->DestroyBody(m_bodies[m_bodyIndex]);
|
||||
m_bodies[m_bodyIndex] = NULL;
|
||||
}
|
||||
|
||||
b2BodyDef bd;
|
||||
|
||||
float32 x = RandomFloat(-10.0f, 10.0f);
|
||||
float32 y = RandomFloat(0.0f, 20.0f);
|
||||
bd.position.Set(x, y);
|
||||
bd.angle = RandomFloat(-b2_pi, b2_pi);
|
||||
|
||||
m_userData[m_bodyIndex] = index;
|
||||
bd.userData = m_userData + m_bodyIndex;
|
||||
|
||||
if (index == 4)
|
||||
{
|
||||
bd.angularDamping = 0.02f;
|
||||
}
|
||||
|
||||
m_bodies[m_bodyIndex] = m_world->CreateBody(&bd);
|
||||
|
||||
if (index < 4)
|
||||
{
|
||||
b2FixtureDef fd;
|
||||
fd.shape = m_polygons + index;
|
||||
fd.friction = 0.3f;
|
||||
m_bodies[m_bodyIndex]->CreateFixture(&fd);
|
||||
}
|
||||
else
|
||||
{
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &m_circle;
|
||||
fd.friction = 0.3f;
|
||||
|
||||
m_bodies[m_bodyIndex]->CreateFixture(&fd);
|
||||
}
|
||||
|
||||
m_bodyIndex = (m_bodyIndex + 1) % e_maxBodies;
|
||||
}
|
||||
|
||||
void DestroyBody()
|
||||
{
|
||||
for (int32 i = 0; i < e_maxBodies; ++i)
|
||||
{
|
||||
if (m_bodies[i] != NULL)
|
||||
{
|
||||
m_world->DestroyBody(m_bodies[i]);
|
||||
m_bodies[i] = NULL;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
Create(key - '1');
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
DestroyBody();
|
||||
break;
|
||||
|
||||
case 'm':
|
||||
if (m_mode == e_closest)
|
||||
{
|
||||
m_mode = e_any;
|
||||
}
|
||||
else if (m_mode == e_any)
|
||||
{
|
||||
m_mode = e_multiple;
|
||||
}
|
||||
else if (m_mode == e_multiple)
|
||||
{
|
||||
m_mode = e_closest;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
bool advanceRay = settings->pause == 0 || settings->singleStep;
|
||||
|
||||
Test::Step(settings);
|
||||
m_debugDraw.DrawString(5, m_textLine, "Press 1-5 to drop stuff, m to change the mode");
|
||||
m_textLine += 15;
|
||||
m_debugDraw.DrawString(5, m_textLine, "Mode = %d", m_mode);
|
||||
m_textLine += 15;
|
||||
|
||||
float32 L = 11.0f;
|
||||
b2Vec2 point1(0.0f, 10.0f);
|
||||
b2Vec2 d(L * cosf(m_angle), L * sinf(m_angle));
|
||||
b2Vec2 point2 = point1 + d;
|
||||
|
||||
if (m_mode == e_closest)
|
||||
{
|
||||
RayCastClosestCallback callback;
|
||||
m_world->RayCast(&callback, point1, point2);
|
||||
|
||||
if (callback.m_hit)
|
||||
{
|
||||
m_debugDraw.DrawPoint(callback.m_point, 5.0f, b2Color(0.4f, 0.9f, 0.4f));
|
||||
m_debugDraw.DrawSegment(point1, callback.m_point, b2Color(0.8f, 0.8f, 0.8f));
|
||||
b2Vec2 head = callback.m_point + 0.5f * callback.m_normal;
|
||||
m_debugDraw.DrawSegment(callback.m_point, head, b2Color(0.9f, 0.9f, 0.4f));
|
||||
}
|
||||
else
|
||||
{
|
||||
m_debugDraw.DrawSegment(point1, point2, b2Color(0.8f, 0.8f, 0.8f));
|
||||
}
|
||||
}
|
||||
else if (m_mode == e_any)
|
||||
{
|
||||
RayCastAnyCallback callback;
|
||||
m_world->RayCast(&callback, point1, point2);
|
||||
|
||||
if (callback.m_hit)
|
||||
{
|
||||
m_debugDraw.DrawPoint(callback.m_point, 5.0f, b2Color(0.4f, 0.9f, 0.4f));
|
||||
m_debugDraw.DrawSegment(point1, callback.m_point, b2Color(0.8f, 0.8f, 0.8f));
|
||||
b2Vec2 head = callback.m_point + 0.5f * callback.m_normal;
|
||||
m_debugDraw.DrawSegment(callback.m_point, head, b2Color(0.9f, 0.9f, 0.4f));
|
||||
}
|
||||
else
|
||||
{
|
||||
m_debugDraw.DrawSegment(point1, point2, b2Color(0.8f, 0.8f, 0.8f));
|
||||
}
|
||||
}
|
||||
else if (m_mode == e_multiple)
|
||||
{
|
||||
RayCastMultipleCallback callback;
|
||||
m_world->RayCast(&callback, point1, point2);
|
||||
m_debugDraw.DrawSegment(point1, point2, b2Color(0.8f, 0.8f, 0.8f));
|
||||
|
||||
for (int32 i = 0; i < callback.m_count; ++i)
|
||||
{
|
||||
b2Vec2 p = callback.m_points[i];
|
||||
b2Vec2 n = callback.m_normals[i];
|
||||
m_debugDraw.DrawPoint(p, 5.0f, b2Color(0.4f, 0.9f, 0.4f));
|
||||
m_debugDraw.DrawSegment(point1, p, b2Color(0.8f, 0.8f, 0.8f));
|
||||
b2Vec2 head = p + 0.5f * n;
|
||||
m_debugDraw.DrawSegment(p, head, b2Color(0.9f, 0.9f, 0.4f));
|
||||
}
|
||||
}
|
||||
|
||||
if (advanceRay)
|
||||
{
|
||||
m_angle += 0.25f * b2_pi / 180.0f;
|
||||
}
|
||||
|
||||
#if 0
|
||||
// This case was failing.
|
||||
{
|
||||
b2Vec2 vertices[4];
|
||||
//vertices[0].Set(-22.875f, -3.0f);
|
||||
//vertices[1].Set(22.875f, -3.0f);
|
||||
//vertices[2].Set(22.875f, 3.0f);
|
||||
//vertices[3].Set(-22.875f, 3.0f);
|
||||
|
||||
b2PolygonShape shape;
|
||||
//shape.Set(vertices, 4);
|
||||
shape.SetAsBox(22.875f, 3.0f);
|
||||
|
||||
b2RayCastInput input;
|
||||
input.p1.Set(10.2725f,1.71372f);
|
||||
input.p2.Set(10.2353f,2.21807f);
|
||||
//input.maxFraction = 0.567623f;
|
||||
input.maxFraction = 0.56762173f;
|
||||
|
||||
b2Transform xf;
|
||||
xf.SetIdentity();
|
||||
xf.position.Set(23.0f, 5.0f);
|
||||
|
||||
b2RayCastOutput output;
|
||||
bool hit;
|
||||
hit = shape.RayCast(&output, input, xf);
|
||||
hit = false;
|
||||
|
||||
b2Color color(1.0f, 1.0f, 1.0f);
|
||||
b2Vec2 vs[4];
|
||||
for (int32 i = 0; i < 4; ++i)
|
||||
{
|
||||
vs[i] = b2Mul(xf, shape.m_vertices[i]);
|
||||
}
|
||||
|
||||
m_debugDraw.DrawPolygon(vs, 4, color);
|
||||
m_debugDraw.DrawSegment(input.p1, input.p2, color);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new RayCast;
|
||||
}
|
||||
|
||||
int32 m_bodyIndex;
|
||||
b2Body* m_bodies[e_maxBodies];
|
||||
int32 m_userData[e_maxBodies];
|
||||
b2PolygonShape m_polygons[4];
|
||||
b2CircleShape m_circle;
|
||||
|
||||
float32 m_angle;
|
||||
|
||||
Mode m_mode;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,166 +1,166 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef REVOLUTE_H
|
||||
#define REVOLUTE_H
|
||||
|
||||
class Revolute : public Test
|
||||
{
|
||||
public:
|
||||
Revolute()
|
||||
{
|
||||
b2Body* ground = NULL;
|
||||
{
|
||||
b2BodyDef bd;
|
||||
ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
//fd.filter.categoryBits = 2;
|
||||
|
||||
ground->CreateFixture(&fd);
|
||||
}
|
||||
|
||||
{
|
||||
b2CircleShape shape;
|
||||
shape.m_radius = 0.5f;
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
|
||||
b2RevoluteJointDef rjd;
|
||||
|
||||
bd.position.Set(-10.0f, 20.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&shape, 5.0f);
|
||||
|
||||
float32 w = 100.0f;
|
||||
body->SetAngularVelocity(w);
|
||||
body->SetLinearVelocity(b2Vec2(-8.0f * w, 0.0f));
|
||||
|
||||
rjd.Initialize(ground, body, b2Vec2(-10.0f, 12.0f));
|
||||
rjd.motorSpeed = 1.0f * b2_pi;
|
||||
rjd.maxMotorTorque = 10000.0f;
|
||||
rjd.enableMotor = false;
|
||||
rjd.lowerAngle = -0.25f * b2_pi;
|
||||
rjd.upperAngle = 0.5f * b2_pi;
|
||||
rjd.enableLimit = true;
|
||||
rjd.collideConnected = true;
|
||||
|
||||
m_joint = (b2RevoluteJoint*)m_world->CreateJoint(&rjd);
|
||||
}
|
||||
|
||||
{
|
||||
b2CircleShape circle_shape;
|
||||
circle_shape.m_radius = 3.0f;
|
||||
|
||||
b2BodyDef circle_bd;
|
||||
circle_bd.type = b2_dynamicBody;
|
||||
circle_bd.position.Set(5.0f, 30.0f);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.density = 5.0f;
|
||||
fd.filter.maskBits = 1;
|
||||
fd.shape = &circle_shape;
|
||||
|
||||
m_ball = m_world->CreateBody(&circle_bd);
|
||||
m_ball->CreateFixture(&fd);
|
||||
|
||||
b2PolygonShape polygon_shape;
|
||||
polygon_shape.SetAsBox(10.0f, 0.2f, b2Vec2 (-10.0f, 0.0f), 0.0f);
|
||||
|
||||
b2BodyDef polygon_bd;
|
||||
polygon_bd.position.Set(20.0f, 10.0f);
|
||||
polygon_bd.type = b2_dynamicBody;
|
||||
polygon_bd.bullet = true;
|
||||
b2Body* polygon_body = m_world->CreateBody(&polygon_bd);
|
||||
polygon_body->CreateFixture(&polygon_shape, 2.0f);
|
||||
|
||||
b2RevoluteJointDef rjd;
|
||||
rjd.Initialize(ground, polygon_body, b2Vec2(20.0f, 10.0f));
|
||||
rjd.lowerAngle = -0.25f * b2_pi;
|
||||
rjd.upperAngle = 0.0f * b2_pi;
|
||||
rjd.enableLimit = true;
|
||||
m_world->CreateJoint(&rjd);
|
||||
}
|
||||
|
||||
// Tests mass computation of a small object far from the origin
|
||||
{
|
||||
b2BodyDef bodyDef;
|
||||
bodyDef.type = b2_dynamicBody;
|
||||
b2Body* body = m_world->CreateBody(&bodyDef);
|
||||
|
||||
b2PolygonShape polyShape;
|
||||
b2Vec2 verts[3];
|
||||
verts[0].Set( 17.63f, 36.31f );
|
||||
verts[1].Set( 17.52f, 36.69f );
|
||||
verts[2].Set( 17.19f, 36.36f );
|
||||
polyShape.Set(verts, 3);
|
||||
|
||||
b2FixtureDef polyFixtureDef;
|
||||
polyFixtureDef.shape = &polyShape;
|
||||
polyFixtureDef.density = 1;
|
||||
|
||||
body->CreateFixture(&polyFixtureDef); //assertion hits inside here
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case 'l':
|
||||
m_joint->EnableLimit(!m_joint->IsLimitEnabled());
|
||||
break;
|
||||
|
||||
case 'm':
|
||||
m_joint->EnableMotor(!m_joint->IsMotorEnabled());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
Test::Step(settings);
|
||||
m_debugDraw.DrawString(5, m_textLine, "Keys: (l) limits, (m) motor");
|
||||
m_textLine += 15;
|
||||
|
||||
//if (m_stepCount == 360)
|
||||
//{
|
||||
// m_ball->SetTransform(b2Vec2(0.0f, 0.5f), 0.0f);
|
||||
//}
|
||||
|
||||
//float32 torque1 = m_joint1->GetMotorTorque();
|
||||
//m_debugDraw.DrawString(5, m_textLine, "Motor Torque = %4.0f, %4.0f : Motor Force = %4.0f", (float) torque1, (float) torque2, (float) force3);
|
||||
//m_textLine += 15;
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new Revolute;
|
||||
}
|
||||
|
||||
b2Body* m_ball;
|
||||
b2RevoluteJoint* m_joint;
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef REVOLUTE_H
|
||||
#define REVOLUTE_H
|
||||
|
||||
class Revolute : public Test
|
||||
{
|
||||
public:
|
||||
Revolute()
|
||||
{
|
||||
b2Body* ground = NULL;
|
||||
{
|
||||
b2BodyDef bd;
|
||||
ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
//fd.filter.categoryBits = 2;
|
||||
|
||||
ground->CreateFixture(&fd);
|
||||
}
|
||||
|
||||
{
|
||||
b2CircleShape shape;
|
||||
shape.m_radius = 0.5f;
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
|
||||
b2RevoluteJointDef rjd;
|
||||
|
||||
bd.position.Set(-10.0f, 20.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&shape, 5.0f);
|
||||
|
||||
float32 w = 100.0f;
|
||||
body->SetAngularVelocity(w);
|
||||
body->SetLinearVelocity(b2Vec2(-8.0f * w, 0.0f));
|
||||
|
||||
rjd.Initialize(ground, body, b2Vec2(-10.0f, 12.0f));
|
||||
rjd.motorSpeed = 1.0f * b2_pi;
|
||||
rjd.maxMotorTorque = 10000.0f;
|
||||
rjd.enableMotor = false;
|
||||
rjd.lowerAngle = -0.25f * b2_pi;
|
||||
rjd.upperAngle = 0.5f * b2_pi;
|
||||
rjd.enableLimit = true;
|
||||
rjd.collideConnected = true;
|
||||
|
||||
m_joint = (b2RevoluteJoint*)m_world->CreateJoint(&rjd);
|
||||
}
|
||||
|
||||
{
|
||||
b2CircleShape circle_shape;
|
||||
circle_shape.m_radius = 3.0f;
|
||||
|
||||
b2BodyDef circle_bd;
|
||||
circle_bd.type = b2_dynamicBody;
|
||||
circle_bd.position.Set(5.0f, 30.0f);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.density = 5.0f;
|
||||
fd.filter.maskBits = 1;
|
||||
fd.shape = &circle_shape;
|
||||
|
||||
m_ball = m_world->CreateBody(&circle_bd);
|
||||
m_ball->CreateFixture(&fd);
|
||||
|
||||
b2PolygonShape polygon_shape;
|
||||
polygon_shape.SetAsBox(10.0f, 0.2f, b2Vec2 (-10.0f, 0.0f), 0.0f);
|
||||
|
||||
b2BodyDef polygon_bd;
|
||||
polygon_bd.position.Set(20.0f, 10.0f);
|
||||
polygon_bd.type = b2_dynamicBody;
|
||||
polygon_bd.bullet = true;
|
||||
b2Body* polygon_body = m_world->CreateBody(&polygon_bd);
|
||||
polygon_body->CreateFixture(&polygon_shape, 2.0f);
|
||||
|
||||
b2RevoluteJointDef rjd;
|
||||
rjd.Initialize(ground, polygon_body, b2Vec2(20.0f, 10.0f));
|
||||
rjd.lowerAngle = -0.25f * b2_pi;
|
||||
rjd.upperAngle = 0.0f * b2_pi;
|
||||
rjd.enableLimit = true;
|
||||
m_world->CreateJoint(&rjd);
|
||||
}
|
||||
|
||||
// Tests mass computation of a small object far from the origin
|
||||
{
|
||||
b2BodyDef bodyDef;
|
||||
bodyDef.type = b2_dynamicBody;
|
||||
b2Body* body = m_world->CreateBody(&bodyDef);
|
||||
|
||||
b2PolygonShape polyShape;
|
||||
b2Vec2 verts[3];
|
||||
verts[0].Set( 17.63f, 36.31f );
|
||||
verts[1].Set( 17.52f, 36.69f );
|
||||
verts[2].Set( 17.19f, 36.36f );
|
||||
polyShape.Set(verts, 3);
|
||||
|
||||
b2FixtureDef polyFixtureDef;
|
||||
polyFixtureDef.shape = &polyShape;
|
||||
polyFixtureDef.density = 1;
|
||||
|
||||
body->CreateFixture(&polyFixtureDef); //assertion hits inside here
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case 'l':
|
||||
m_joint->EnableLimit(!m_joint->IsLimitEnabled());
|
||||
break;
|
||||
|
||||
case 'm':
|
||||
m_joint->EnableMotor(!m_joint->IsMotorEnabled());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
Test::Step(settings);
|
||||
m_debugDraw.DrawString(5, m_textLine, "Keys: (l) limits, (m) motor");
|
||||
m_textLine += 15;
|
||||
|
||||
//if (m_stepCount == 360)
|
||||
//{
|
||||
// m_ball->SetTransform(b2Vec2(0.0f, 0.5f), 0.0f);
|
||||
//}
|
||||
|
||||
//float32 torque1 = m_joint1->GetMotorTorque();
|
||||
//m_debugDraw.DrawString(5, m_textLine, "Motor Torque = %4.0f, %4.0f : Motor Force = %4.0f", (float) torque1, (float) torque2, (float) force3);
|
||||
//m_textLine += 15;
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new Revolute;
|
||||
}
|
||||
|
||||
b2Body* m_ball;
|
||||
b2RevoluteJoint* m_joint;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,101 +1,101 @@
|
||||
/*
|
||||
* Copyright (c) 2011 Erin Catto http://box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef ROPE_H
|
||||
#define ROPE_H
|
||||
|
||||
///
|
||||
class Rope : public Test
|
||||
{
|
||||
public:
|
||||
Rope()
|
||||
{
|
||||
const int32 N = 40;
|
||||
b2Vec2 vertices[N];
|
||||
float32 masses[N];
|
||||
|
||||
for (int32 i = 0; i < N; ++i)
|
||||
{
|
||||
vertices[i].Set(0.0f, 20.0f - 0.25f * i);
|
||||
masses[i] = 1.0f;
|
||||
}
|
||||
masses[0] = 0.0f;
|
||||
masses[1] = 0.0f;
|
||||
|
||||
b2RopeDef def;
|
||||
def.vertices = vertices;
|
||||
def.count = N;
|
||||
def.gravity.Set(0.0f, -10.0f);
|
||||
def.masses = masses;
|
||||
def.damping = 0.1f;
|
||||
def.k2 = 1.0f;
|
||||
def.k3 = 0.5f;
|
||||
|
||||
m_rope.Initialize(&def);
|
||||
|
||||
m_angle = 0.0f;
|
||||
m_rope.SetAngle(m_angle);
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case 'q':
|
||||
m_angle = b2Max(-b2_pi, m_angle - 0.05f * b2_pi);
|
||||
m_rope.SetAngle(m_angle);
|
||||
break;
|
||||
|
||||
case 'e':
|
||||
m_angle = b2Min(b2_pi, m_angle + 0.05f * b2_pi);
|
||||
m_rope.SetAngle(m_angle);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
float32 dt = settings->hz > 0.0f ? 1.0f / settings->hz : 0.0f;
|
||||
|
||||
if (settings->pause == 1 && settings->singleStep == 0)
|
||||
{
|
||||
dt = 0.0f;
|
||||
}
|
||||
|
||||
m_rope.Step(dt, 1);
|
||||
|
||||
Test::Step(settings);
|
||||
|
||||
m_rope.Draw(&m_debugDraw);
|
||||
|
||||
m_debugDraw.DrawString(5, m_textLine, "Press (q,e) to adjust target angle");
|
||||
m_textLine += 15;
|
||||
m_debugDraw.DrawString(5, m_textLine, "Target angle = %g degrees", m_angle * 180.0f / b2_pi);
|
||||
m_textLine += 15;
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new Rope;
|
||||
}
|
||||
|
||||
b2Rope m_rope;
|
||||
float32 m_angle;
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2011 Erin Catto http://box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef ROPE_H
|
||||
#define ROPE_H
|
||||
|
||||
///
|
||||
class Rope : public Test
|
||||
{
|
||||
public:
|
||||
Rope()
|
||||
{
|
||||
const int32 N = 40;
|
||||
b2Vec2 vertices[N];
|
||||
float32 masses[N];
|
||||
|
||||
for (int32 i = 0; i < N; ++i)
|
||||
{
|
||||
vertices[i].Set(0.0f, 20.0f - 0.25f * i);
|
||||
masses[i] = 1.0f;
|
||||
}
|
||||
masses[0] = 0.0f;
|
||||
masses[1] = 0.0f;
|
||||
|
||||
b2RopeDef def;
|
||||
def.vertices = vertices;
|
||||
def.count = N;
|
||||
def.gravity.Set(0.0f, -10.0f);
|
||||
def.masses = masses;
|
||||
def.damping = 0.1f;
|
||||
def.k2 = 1.0f;
|
||||
def.k3 = 0.5f;
|
||||
|
||||
m_rope.Initialize(&def);
|
||||
|
||||
m_angle = 0.0f;
|
||||
m_rope.SetAngle(m_angle);
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case 'q':
|
||||
m_angle = b2Max(-b2_pi, m_angle - 0.05f * b2_pi);
|
||||
m_rope.SetAngle(m_angle);
|
||||
break;
|
||||
|
||||
case 'e':
|
||||
m_angle = b2Min(b2_pi, m_angle + 0.05f * b2_pi);
|
||||
m_rope.SetAngle(m_angle);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
float32 dt = settings->hz > 0.0f ? 1.0f / settings->hz : 0.0f;
|
||||
|
||||
if (settings->pause == 1 && settings->singleStep == 0)
|
||||
{
|
||||
dt = 0.0f;
|
||||
}
|
||||
|
||||
m_rope.Step(dt, 1);
|
||||
|
||||
Test::Step(settings);
|
||||
|
||||
m_rope.Draw(&m_debugDraw);
|
||||
|
||||
m_debugDraw.DrawString(5, m_textLine, "Press (q,e) to adjust target angle");
|
||||
m_textLine += 15;
|
||||
m_debugDraw.DrawString(5, m_textLine, "Target angle = %g degrees", m_angle * 180.0f / b2_pi);
|
||||
m_textLine += 15;
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new Rope;
|
||||
}
|
||||
|
||||
b2Rope m_rope;
|
||||
float32 m_angle;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,145 +1,145 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2010 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef ROPE_JOINT_H
|
||||
#define ROPE_JOINT_H
|
||||
|
||||
/// This test shows how a rope joint can be used to stabilize a chain of
|
||||
/// bodies with a heavy payload. Notice that the rope joint just prevents
|
||||
/// excessive stretching and has no other effect.
|
||||
/// By disabling the rope joint you can see that the Box2D solver has trouble
|
||||
/// supporting heavy bodies with light bodies. Try playing around with the
|
||||
/// densities, time step, and iterations to see how they affect stability.
|
||||
/// This test also shows how to use contact filtering. Filtering is configured
|
||||
/// so that the payload does not collide with the chain.
|
||||
class RopeJoint : public Test
|
||||
{
|
||||
public:
|
||||
RopeJoint()
|
||||
{
|
||||
b2Body* ground = NULL;
|
||||
{
|
||||
b2BodyDef bd;
|
||||
ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.5f, 0.125f);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 20.0f;
|
||||
fd.friction = 0.2f;
|
||||
fd.filter.categoryBits = 0x0001;
|
||||
fd.filter.maskBits = 0xFFFF & ~0x0002;
|
||||
|
||||
b2RevoluteJointDef jd;
|
||||
jd.collideConnected = false;
|
||||
|
||||
const int32 N = 10;
|
||||
const float32 y = 15.0f;
|
||||
m_ropeDef.localAnchorA.Set(0.0f, y);
|
||||
|
||||
b2Body* prevBody = ground;
|
||||
for (int32 i = 0; i < N; ++i)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(0.5f + 1.0f * i, y);
|
||||
if (i == N - 1)
|
||||
{
|
||||
shape.SetAsBox(1.5f, 1.5f);
|
||||
fd.density = 100.0f;
|
||||
fd.filter.categoryBits = 0x0002;
|
||||
bd.position.Set(1.0f * i, y);
|
||||
bd.angularDamping = 0.4f;
|
||||
}
|
||||
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
body->CreateFixture(&fd);
|
||||
|
||||
b2Vec2 anchor(float32(i), y);
|
||||
jd.Initialize(prevBody, body, anchor);
|
||||
m_world->CreateJoint(&jd);
|
||||
|
||||
prevBody = body;
|
||||
}
|
||||
|
||||
m_ropeDef.localAnchorB.SetZero();
|
||||
|
||||
float32 extraLength = 0.01f;
|
||||
m_ropeDef.maxLength = N - 1.0f + extraLength;
|
||||
m_ropeDef.bodyB = prevBody;
|
||||
}
|
||||
|
||||
{
|
||||
m_ropeDef.bodyA = ground;
|
||||
m_rope = m_world->CreateJoint(&m_ropeDef);
|
||||
}
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case 'j':
|
||||
if (m_rope)
|
||||
{
|
||||
m_world->DestroyJoint(m_rope);
|
||||
m_rope = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_rope = m_world->CreateJoint(&m_ropeDef);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
Test::Step(settings);
|
||||
m_debugDraw.DrawString(5, m_textLine, "Press (j) to toggle the rope joint.");
|
||||
m_textLine += 15;
|
||||
if (m_rope)
|
||||
{
|
||||
m_debugDraw.DrawString(5, m_textLine, "Rope ON");
|
||||
}
|
||||
else
|
||||
{
|
||||
m_debugDraw.DrawString(5, m_textLine, "Rope OFF");
|
||||
}
|
||||
m_textLine += 15;
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new RopeJoint;
|
||||
}
|
||||
|
||||
b2RopeJointDef m_ropeDef;
|
||||
b2Joint* m_rope;
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2006-2010 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef ROPE_JOINT_H
|
||||
#define ROPE_JOINT_H
|
||||
|
||||
/// This test shows how a rope joint can be used to stabilize a chain of
|
||||
/// bodies with a heavy payload. Notice that the rope joint just prevents
|
||||
/// excessive stretching and has no other effect.
|
||||
/// By disabling the rope joint you can see that the Box2D solver has trouble
|
||||
/// supporting heavy bodies with light bodies. Try playing around with the
|
||||
/// densities, time step, and iterations to see how they affect stability.
|
||||
/// This test also shows how to use contact filtering. Filtering is configured
|
||||
/// so that the payload does not collide with the chain.
|
||||
class RopeJoint : public Test
|
||||
{
|
||||
public:
|
||||
RopeJoint()
|
||||
{
|
||||
b2Body* ground = NULL;
|
||||
{
|
||||
b2BodyDef bd;
|
||||
ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.5f, 0.125f);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 20.0f;
|
||||
fd.friction = 0.2f;
|
||||
fd.filter.categoryBits = 0x0001;
|
||||
fd.filter.maskBits = 0xFFFF & ~0x0002;
|
||||
|
||||
b2RevoluteJointDef jd;
|
||||
jd.collideConnected = false;
|
||||
|
||||
const int32 N = 10;
|
||||
const float32 y = 15.0f;
|
||||
m_ropeDef.localAnchorA.Set(0.0f, y);
|
||||
|
||||
b2Body* prevBody = ground;
|
||||
for (int32 i = 0; i < N; ++i)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(0.5f + 1.0f * i, y);
|
||||
if (i == N - 1)
|
||||
{
|
||||
shape.SetAsBox(1.5f, 1.5f);
|
||||
fd.density = 100.0f;
|
||||
fd.filter.categoryBits = 0x0002;
|
||||
bd.position.Set(1.0f * i, y);
|
||||
bd.angularDamping = 0.4f;
|
||||
}
|
||||
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
body->CreateFixture(&fd);
|
||||
|
||||
b2Vec2 anchor(float32(i), y);
|
||||
jd.Initialize(prevBody, body, anchor);
|
||||
m_world->CreateJoint(&jd);
|
||||
|
||||
prevBody = body;
|
||||
}
|
||||
|
||||
m_ropeDef.localAnchorB.SetZero();
|
||||
|
||||
float32 extraLength = 0.01f;
|
||||
m_ropeDef.maxLength = N - 1.0f + extraLength;
|
||||
m_ropeDef.bodyB = prevBody;
|
||||
}
|
||||
|
||||
{
|
||||
m_ropeDef.bodyA = ground;
|
||||
m_rope = m_world->CreateJoint(&m_ropeDef);
|
||||
}
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case 'j':
|
||||
if (m_rope)
|
||||
{
|
||||
m_world->DestroyJoint(m_rope);
|
||||
m_rope = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_rope = m_world->CreateJoint(&m_ropeDef);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
Test::Step(settings);
|
||||
m_debugDraw.DrawString(5, m_textLine, "Press (j) to toggle the rope joint.");
|
||||
m_textLine += 15;
|
||||
if (m_rope)
|
||||
{
|
||||
m_debugDraw.DrawString(5, m_textLine, "Rope ON");
|
||||
}
|
||||
else
|
||||
{
|
||||
m_debugDraw.DrawString(5, m_textLine, "Rope OFF");
|
||||
}
|
||||
m_textLine += 15;
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new RopeJoint;
|
||||
}
|
||||
|
||||
b2RopeJointDef m_ropeDef;
|
||||
b2Joint* m_rope;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,181 +1,181 @@
|
||||
/*
|
||||
* Copyright (c) 2008-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef SENSOR_TEST_H
|
||||
#define SENSOR_TEST_H
|
||||
|
||||
// This is used to test sensor shapes.
|
||||
class SensorTest : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
enum
|
||||
{
|
||||
e_count = 7
|
||||
};
|
||||
|
||||
SensorTest()
|
||||
{
|
||||
{
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
{
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
#if 0
|
||||
{
|
||||
b2FixtureDef sd;
|
||||
sd.SetAsBox(10.0f, 2.0f, b2Vec2(0.0f, 20.0f), 0.0f);
|
||||
sd.isSensor = true;
|
||||
m_sensor = ground->CreateFixture(&sd);
|
||||
}
|
||||
#else
|
||||
{
|
||||
b2CircleShape shape;
|
||||
shape.m_radius = 5.0f;
|
||||
shape.m_p.Set(0.0f, 10.0f);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.isSensor = true;
|
||||
m_sensor = ground->CreateFixture(&fd);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
{
|
||||
b2CircleShape shape;
|
||||
shape.m_radius = 1.0f;
|
||||
|
||||
for (int32 i = 0; i < e_count; ++i)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-10.0f + 3.0f * i, 20.0f);
|
||||
bd.userData = m_touching + i;
|
||||
|
||||
m_touching[i] = false;
|
||||
m_bodies[i] = m_world->CreateBody(&bd);
|
||||
|
||||
m_bodies[i]->CreateFixture(&shape, 1.0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Implement contact listener.
|
||||
void BeginContact(b2Contact* contact)
|
||||
{
|
||||
b2Fixture* fixtureA = contact->GetFixtureA();
|
||||
b2Fixture* fixtureB = contact->GetFixtureB();
|
||||
|
||||
if (fixtureA == m_sensor)
|
||||
{
|
||||
void* userData = fixtureB->GetBody()->GetUserData();
|
||||
if (userData)
|
||||
{
|
||||
bool* touching = (bool*)userData;
|
||||
*touching = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (fixtureB == m_sensor)
|
||||
{
|
||||
void* userData = fixtureA->GetBody()->GetUserData();
|
||||
if (userData)
|
||||
{
|
||||
bool* touching = (bool*)userData;
|
||||
*touching = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Implement contact listener.
|
||||
void EndContact(b2Contact* contact)
|
||||
{
|
||||
b2Fixture* fixtureA = contact->GetFixtureA();
|
||||
b2Fixture* fixtureB = contact->GetFixtureB();
|
||||
|
||||
if (fixtureA == m_sensor)
|
||||
{
|
||||
void* userData = fixtureB->GetBody()->GetUserData();
|
||||
if (userData)
|
||||
{
|
||||
bool* touching = (bool*)userData;
|
||||
*touching = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (fixtureB == m_sensor)
|
||||
{
|
||||
void* userData = fixtureA->GetBody()->GetUserData();
|
||||
if (userData)
|
||||
{
|
||||
bool* touching = (bool*)userData;
|
||||
*touching = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
Test::Step(settings);
|
||||
|
||||
// Traverse the contact results. Apply a force on shapes
|
||||
// that overlap the sensor.
|
||||
for (int32 i = 0; i < e_count; ++i)
|
||||
{
|
||||
if (m_touching[i] == false)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
b2Body* body = m_bodies[i];
|
||||
b2Body* ground = m_sensor->GetBody();
|
||||
|
||||
b2CircleShape* circle = (b2CircleShape*)m_sensor->GetShape();
|
||||
b2Vec2 center = ground->GetWorldPoint(circle->m_p);
|
||||
|
||||
b2Vec2 position = body->GetPosition();
|
||||
|
||||
b2Vec2 d = center - position;
|
||||
if (d.LengthSquared() < FLT_EPSILON * FLT_EPSILON)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
d.Normalize();
|
||||
b2Vec2 F = 100.0f * d;
|
||||
body->ApplyForce(F, position);
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new SensorTest;
|
||||
}
|
||||
|
||||
b2Fixture* m_sensor;
|
||||
b2Body* m_bodies[e_count];
|
||||
bool m_touching[e_count];
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2008-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef SENSOR_TEST_H
|
||||
#define SENSOR_TEST_H
|
||||
|
||||
// This is used to test sensor shapes.
|
||||
class SensorTest : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
enum
|
||||
{
|
||||
e_count = 7
|
||||
};
|
||||
|
||||
SensorTest()
|
||||
{
|
||||
{
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
{
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
#if 0
|
||||
{
|
||||
b2FixtureDef sd;
|
||||
sd.SetAsBox(10.0f, 2.0f, b2Vec2(0.0f, 20.0f), 0.0f);
|
||||
sd.isSensor = true;
|
||||
m_sensor = ground->CreateFixture(&sd);
|
||||
}
|
||||
#else
|
||||
{
|
||||
b2CircleShape shape;
|
||||
shape.m_radius = 5.0f;
|
||||
shape.m_p.Set(0.0f, 10.0f);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.isSensor = true;
|
||||
m_sensor = ground->CreateFixture(&fd);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
{
|
||||
b2CircleShape shape;
|
||||
shape.m_radius = 1.0f;
|
||||
|
||||
for (int32 i = 0; i < e_count; ++i)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-10.0f + 3.0f * i, 20.0f);
|
||||
bd.userData = m_touching + i;
|
||||
|
||||
m_touching[i] = false;
|
||||
m_bodies[i] = m_world->CreateBody(&bd);
|
||||
|
||||
m_bodies[i]->CreateFixture(&shape, 1.0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Implement contact listener.
|
||||
void BeginContact(b2Contact* contact)
|
||||
{
|
||||
b2Fixture* fixtureA = contact->GetFixtureA();
|
||||
b2Fixture* fixtureB = contact->GetFixtureB();
|
||||
|
||||
if (fixtureA == m_sensor)
|
||||
{
|
||||
void* userData = fixtureB->GetBody()->GetUserData();
|
||||
if (userData)
|
||||
{
|
||||
bool* touching = (bool*)userData;
|
||||
*touching = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (fixtureB == m_sensor)
|
||||
{
|
||||
void* userData = fixtureA->GetBody()->GetUserData();
|
||||
if (userData)
|
||||
{
|
||||
bool* touching = (bool*)userData;
|
||||
*touching = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Implement contact listener.
|
||||
void EndContact(b2Contact* contact)
|
||||
{
|
||||
b2Fixture* fixtureA = contact->GetFixtureA();
|
||||
b2Fixture* fixtureB = contact->GetFixtureB();
|
||||
|
||||
if (fixtureA == m_sensor)
|
||||
{
|
||||
void* userData = fixtureB->GetBody()->GetUserData();
|
||||
if (userData)
|
||||
{
|
||||
bool* touching = (bool*)userData;
|
||||
*touching = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (fixtureB == m_sensor)
|
||||
{
|
||||
void* userData = fixtureA->GetBody()->GetUserData();
|
||||
if (userData)
|
||||
{
|
||||
bool* touching = (bool*)userData;
|
||||
*touching = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
Test::Step(settings);
|
||||
|
||||
// Traverse the contact results. Apply a force on shapes
|
||||
// that overlap the sensor.
|
||||
for (int32 i = 0; i < e_count; ++i)
|
||||
{
|
||||
if (m_touching[i] == false)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
b2Body* body = m_bodies[i];
|
||||
b2Body* ground = m_sensor->GetBody();
|
||||
|
||||
b2CircleShape* circle = (b2CircleShape*)m_sensor->GetShape();
|
||||
b2Vec2 center = ground->GetWorldPoint(circle->m_p);
|
||||
|
||||
b2Vec2 position = body->GetPosition();
|
||||
|
||||
b2Vec2 d = center - position;
|
||||
if (d.LengthSquared() < FLT_EPSILON * FLT_EPSILON)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
d.Normalize();
|
||||
b2Vec2 F = 100.0f * d;
|
||||
body->ApplyForce(F, position);
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new SensorTest;
|
||||
}
|
||||
|
||||
b2Fixture* m_sensor;
|
||||
b2Body* m_bodies[e_count];
|
||||
bool m_touching[e_count];
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,105 +1,105 @@
|
||||
/*
|
||||
* Copyright (c) 2008-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef SHAPE_EDITING_H
|
||||
#define SHAPE_EDITING_H
|
||||
|
||||
class ShapeEditing : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
ShapeEditing()
|
||||
{
|
||||
{
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(0.0f, 10.0f);
|
||||
m_body = m_world->CreateBody(&bd);
|
||||
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(4.0f, 4.0f, b2Vec2(0.0f, 0.0f), 0.0f);
|
||||
m_fixture1 = m_body->CreateFixture(&shape, 10.0f);
|
||||
|
||||
m_fixture2 = NULL;
|
||||
|
||||
m_sensor = false;
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case 'c':
|
||||
if (m_fixture2 == NULL)
|
||||
{
|
||||
b2CircleShape shape;
|
||||
shape.m_radius = 3.0f;
|
||||
shape.m_p.Set(0.5f, -4.0f);
|
||||
m_fixture2 = m_body->CreateFixture(&shape, 10.0f);
|
||||
m_body->SetAwake(true);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
if (m_fixture2 != NULL)
|
||||
{
|
||||
m_body->DestroyFixture(m_fixture2);
|
||||
m_fixture2 = NULL;
|
||||
m_body->SetAwake(true);
|
||||
}
|
||||
break;
|
||||
|
||||
case 's':
|
||||
if (m_fixture2 != NULL)
|
||||
{
|
||||
m_sensor = !m_sensor;
|
||||
m_fixture2->SetSensor(m_sensor);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
Test::Step(settings);
|
||||
m_debugDraw.DrawString(5, m_textLine, "Press: (c) create a shape, (d) destroy a shape.");
|
||||
m_textLine += 15;
|
||||
m_debugDraw.DrawString(5, m_textLine, "sensor = %d", m_sensor);
|
||||
m_textLine += 15;
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new ShapeEditing;
|
||||
}
|
||||
|
||||
b2Body* m_body;
|
||||
b2Fixture* m_fixture1;
|
||||
b2Fixture* m_fixture2;
|
||||
bool m_sensor;
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2008-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef SHAPE_EDITING_H
|
||||
#define SHAPE_EDITING_H
|
||||
|
||||
class ShapeEditing : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
ShapeEditing()
|
||||
{
|
||||
{
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(0.0f, 10.0f);
|
||||
m_body = m_world->CreateBody(&bd);
|
||||
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(4.0f, 4.0f, b2Vec2(0.0f, 0.0f), 0.0f);
|
||||
m_fixture1 = m_body->CreateFixture(&shape, 10.0f);
|
||||
|
||||
m_fixture2 = NULL;
|
||||
|
||||
m_sensor = false;
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case 'c':
|
||||
if (m_fixture2 == NULL)
|
||||
{
|
||||
b2CircleShape shape;
|
||||
shape.m_radius = 3.0f;
|
||||
shape.m_p.Set(0.5f, -4.0f);
|
||||
m_fixture2 = m_body->CreateFixture(&shape, 10.0f);
|
||||
m_body->SetAwake(true);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
if (m_fixture2 != NULL)
|
||||
{
|
||||
m_body->DestroyFixture(m_fixture2);
|
||||
m_fixture2 = NULL;
|
||||
m_body->SetAwake(true);
|
||||
}
|
||||
break;
|
||||
|
||||
case 's':
|
||||
if (m_fixture2 != NULL)
|
||||
{
|
||||
m_sensor = !m_sensor;
|
||||
m_fixture2->SetSensor(m_sensor);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
Test::Step(settings);
|
||||
m_debugDraw.DrawString(5, m_textLine, "Press: (c) create a shape, (d) destroy a shape.");
|
||||
m_textLine += 15;
|
||||
m_debugDraw.DrawString(5, m_textLine, "sensor = %d", m_sensor);
|
||||
m_textLine += 15;
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new ShapeEditing;
|
||||
}
|
||||
|
||||
b2Body* m_body;
|
||||
b2Fixture* m_fixture1;
|
||||
b2Fixture* m_fixture2;
|
||||
bool m_sensor;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,156 +1,156 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef SLIDER_CRANK_H
|
||||
#define SLIDER_CRANK_H
|
||||
|
||||
// A motor driven slider crank with joint friction.
|
||||
|
||||
class SliderCrank : public Test
|
||||
{
|
||||
public:
|
||||
SliderCrank()
|
||||
{
|
||||
b2Body* ground = NULL;
|
||||
{
|
||||
b2BodyDef bd;
|
||||
ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2Body* prevBody = ground;
|
||||
|
||||
// Define crank.
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.5f, 2.0f);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(0.0f, 7.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&shape, 2.0f);
|
||||
|
||||
b2RevoluteJointDef rjd;
|
||||
rjd.Initialize(prevBody, body, b2Vec2(0.0f, 5.0f));
|
||||
rjd.motorSpeed = 1.0f * b2_pi;
|
||||
rjd.maxMotorTorque = 10000.0f;
|
||||
rjd.enableMotor = true;
|
||||
m_joint1 = (b2RevoluteJoint*)m_world->CreateJoint(&rjd);
|
||||
|
||||
prevBody = body;
|
||||
}
|
||||
|
||||
// Define follower.
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.5f, 4.0f);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(0.0f, 13.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&shape, 2.0f);
|
||||
|
||||
b2RevoluteJointDef rjd;
|
||||
rjd.Initialize(prevBody, body, b2Vec2(0.0f, 9.0f));
|
||||
rjd.enableMotor = false;
|
||||
m_world->CreateJoint(&rjd);
|
||||
|
||||
prevBody = body;
|
||||
}
|
||||
|
||||
// Define piston
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(1.5f, 1.5f);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.fixedRotation = true;
|
||||
bd.position.Set(0.0f, 17.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&shape, 2.0f);
|
||||
|
||||
b2RevoluteJointDef rjd;
|
||||
rjd.Initialize(prevBody, body, b2Vec2(0.0f, 17.0f));
|
||||
m_world->CreateJoint(&rjd);
|
||||
|
||||
b2PrismaticJointDef pjd;
|
||||
pjd.Initialize(ground, body, b2Vec2(0.0f, 17.0f), b2Vec2(0.0f, 1.0f));
|
||||
|
||||
pjd.maxMotorForce = 1000.0f;
|
||||
pjd.enableMotor = true;
|
||||
|
||||
m_joint2 = (b2PrismaticJoint*)m_world->CreateJoint(&pjd);
|
||||
}
|
||||
|
||||
// Create a payload
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(1.5f, 1.5f);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(0.0f, 23.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&shape, 2.0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case 'f':
|
||||
m_joint2->EnableMotor(!m_joint2->IsMotorEnabled());
|
||||
m_joint2->GetBodyB()->SetAwake(true);
|
||||
break;
|
||||
|
||||
case 'm':
|
||||
m_joint1->EnableMotor(!m_joint1->IsMotorEnabled());
|
||||
m_joint1->GetBodyB()->SetAwake(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
Test::Step(settings);
|
||||
m_debugDraw.DrawString(5, m_textLine, "Keys: (f) toggle friction, (m) toggle motor");
|
||||
m_textLine += 15;
|
||||
float32 torque = m_joint1->GetMotorTorque(settings->hz);
|
||||
m_debugDraw.DrawString(5, m_textLine, "Motor Torque = %5.0f", (float) torque);
|
||||
m_textLine += 15;
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new SliderCrank;
|
||||
}
|
||||
|
||||
b2RevoluteJoint* m_joint1;
|
||||
b2PrismaticJoint* m_joint2;
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef SLIDER_CRANK_H
|
||||
#define SLIDER_CRANK_H
|
||||
|
||||
// A motor driven slider crank with joint friction.
|
||||
|
||||
class SliderCrank : public Test
|
||||
{
|
||||
public:
|
||||
SliderCrank()
|
||||
{
|
||||
b2Body* ground = NULL;
|
||||
{
|
||||
b2BodyDef bd;
|
||||
ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2Body* prevBody = ground;
|
||||
|
||||
// Define crank.
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.5f, 2.0f);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(0.0f, 7.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&shape, 2.0f);
|
||||
|
||||
b2RevoluteJointDef rjd;
|
||||
rjd.Initialize(prevBody, body, b2Vec2(0.0f, 5.0f));
|
||||
rjd.motorSpeed = 1.0f * b2_pi;
|
||||
rjd.maxMotorTorque = 10000.0f;
|
||||
rjd.enableMotor = true;
|
||||
m_joint1 = (b2RevoluteJoint*)m_world->CreateJoint(&rjd);
|
||||
|
||||
prevBody = body;
|
||||
}
|
||||
|
||||
// Define follower.
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.5f, 4.0f);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(0.0f, 13.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&shape, 2.0f);
|
||||
|
||||
b2RevoluteJointDef rjd;
|
||||
rjd.Initialize(prevBody, body, b2Vec2(0.0f, 9.0f));
|
||||
rjd.enableMotor = false;
|
||||
m_world->CreateJoint(&rjd);
|
||||
|
||||
prevBody = body;
|
||||
}
|
||||
|
||||
// Define piston
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(1.5f, 1.5f);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.fixedRotation = true;
|
||||
bd.position.Set(0.0f, 17.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&shape, 2.0f);
|
||||
|
||||
b2RevoluteJointDef rjd;
|
||||
rjd.Initialize(prevBody, body, b2Vec2(0.0f, 17.0f));
|
||||
m_world->CreateJoint(&rjd);
|
||||
|
||||
b2PrismaticJointDef pjd;
|
||||
pjd.Initialize(ground, body, b2Vec2(0.0f, 17.0f), b2Vec2(0.0f, 1.0f));
|
||||
|
||||
pjd.maxMotorForce = 1000.0f;
|
||||
pjd.enableMotor = true;
|
||||
|
||||
m_joint2 = (b2PrismaticJoint*)m_world->CreateJoint(&pjd);
|
||||
}
|
||||
|
||||
// Create a payload
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(1.5f, 1.5f);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(0.0f, 23.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&shape, 2.0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case 'f':
|
||||
m_joint2->EnableMotor(!m_joint2->IsMotorEnabled());
|
||||
m_joint2->GetBodyB()->SetAwake(true);
|
||||
break;
|
||||
|
||||
case 'm':
|
||||
m_joint1->EnableMotor(!m_joint1->IsMotorEnabled());
|
||||
m_joint1->GetBodyB()->SetAwake(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
Test::Step(settings);
|
||||
m_debugDraw.DrawString(5, m_textLine, "Keys: (f) toggle friction, (m) toggle motor");
|
||||
m_textLine += 15;
|
||||
float32 torque = m_joint1->GetMotorTorque(settings->hz);
|
||||
m_debugDraw.DrawString(5, m_textLine, "Motor Torque = %5.0f", (float) torque);
|
||||
m_textLine += 15;
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new SliderCrank;
|
||||
}
|
||||
|
||||
b2RevoluteJoint* m_joint1;
|
||||
b2PrismaticJoint* m_joint2;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,86 +1,86 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef SPHERE_STACK_H
|
||||
#define SPHERE_STACK_H
|
||||
|
||||
class SphereStack : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
enum
|
||||
{
|
||||
e_count = 10
|
||||
};
|
||||
|
||||
SphereStack()
|
||||
{
|
||||
{
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2CircleShape shape;
|
||||
shape.m_radius = 1.0f;
|
||||
|
||||
for (int32 i = 0; i < e_count; ++i)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(0.0, 4.0f + 3.0f * i);
|
||||
|
||||
m_bodies[i] = m_world->CreateBody(&bd);
|
||||
|
||||
m_bodies[i]->CreateFixture(&shape, 1.0f);
|
||||
|
||||
m_bodies[i]->SetLinearVelocity(b2Vec2(0.0f, -50.0f));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
Test::Step(settings);
|
||||
|
||||
//for (int32 i = 0; i < e_count; ++i)
|
||||
//{
|
||||
// printf("%g ", m_bodies[i]->GetWorldCenter().y);
|
||||
//}
|
||||
|
||||
//for (int32 i = 0; i < e_count; ++i)
|
||||
//{
|
||||
// printf("%g ", m_bodies[i]->GetLinearVelocity().y);
|
||||
//}
|
||||
|
||||
//printf("\n");
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new SphereStack;
|
||||
}
|
||||
|
||||
b2Body* m_bodies[e_count];
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef SPHERE_STACK_H
|
||||
#define SPHERE_STACK_H
|
||||
|
||||
class SphereStack : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
enum
|
||||
{
|
||||
e_count = 10
|
||||
};
|
||||
|
||||
SphereStack()
|
||||
{
|
||||
{
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2CircleShape shape;
|
||||
shape.m_radius = 1.0f;
|
||||
|
||||
for (int32 i = 0; i < e_count; ++i)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(0.0, 4.0f + 3.0f * i);
|
||||
|
||||
m_bodies[i] = m_world->CreateBody(&bd);
|
||||
|
||||
m_bodies[i]->CreateFixture(&shape, 1.0f);
|
||||
|
||||
m_bodies[i]->SetLinearVelocity(b2Vec2(0.0f, -50.0f));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
Test::Step(settings);
|
||||
|
||||
//for (int32 i = 0; i < e_count; ++i)
|
||||
//{
|
||||
// printf("%g ", m_bodies[i]->GetWorldCenter().y);
|
||||
//}
|
||||
|
||||
//for (int32 i = 0; i < e_count; ++i)
|
||||
//{
|
||||
// printf("%g ", m_bodies[i]->GetLinearVelocity().y);
|
||||
//}
|
||||
|
||||
//printf("\n");
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new SphereStack;
|
||||
}
|
||||
|
||||
b2Body* m_bodies[e_count];
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,125 +1,125 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#include "../Framework/Test.h"
|
||||
#include "../Framework/Render.h"
|
||||
|
||||
#ifdef __APPLE__
|
||||
#include <GLUT/glut.h>
|
||||
#else
|
||||
#include "freeglut/freeglut.h"
|
||||
#endif
|
||||
|
||||
#include <cstring>
|
||||
using namespace std;
|
||||
|
||||
#include "AddPair.h"
|
||||
#include "ApplyForce.h"
|
||||
#include "BodyTypes.h"
|
||||
#include "Breakable.h"
|
||||
#include "Bridge.h"
|
||||
#include "BulletTest.h"
|
||||
#include "Cantilever.h"
|
||||
#include "Car.h"
|
||||
#include "ContinuousTest.h"
|
||||
#include "Chain.h"
|
||||
#include "CharacterCollision.h"
|
||||
#include "CollisionFiltering.h"
|
||||
#include "CollisionProcessing.h"
|
||||
#include "CompoundShapes.h"
|
||||
#include "Confined.h"
|
||||
#include "DistanceTest.h"
|
||||
#include "Dominos.h"
|
||||
#include "DumpShell.h"
|
||||
#include "DynamicTreeTest.h"
|
||||
#include "EdgeShapes.h"
|
||||
#include "EdgeTest.h"
|
||||
#include "Gears.h"
|
||||
#include "OneSidedPlatform.h"
|
||||
#include "Pinball.h"
|
||||
#include "PolyCollision.h"
|
||||
#include "PolyShapes.h"
|
||||
#include "Prismatic.h"
|
||||
#include "Pulleys.h"
|
||||
#include "Pyramid.h"
|
||||
#include "RayCast.h"
|
||||
#include "Revolute.h"
|
||||
//#include "Rope.h"
|
||||
#include "RopeJoint.h"
|
||||
#include "SensorTest.h"
|
||||
#include "ShapeEditing.h"
|
||||
#include "SliderCrank.h"
|
||||
#include "SphereStack.h"
|
||||
#include "TheoJansen.h"
|
||||
#include "Tiles.h"
|
||||
#include "TimeOfImpact.h"
|
||||
#include "Tumbler.h"
|
||||
#include "VaryingFriction.h"
|
||||
#include "VaryingRestitution.h"
|
||||
#include "VerticalStack.h"
|
||||
#include "Web.h"
|
||||
|
||||
TestEntry g_testEntries[] =
|
||||
{
|
||||
{"Tumbler", Tumbler::Create},
|
||||
{"Tiles", Tiles::Create},
|
||||
{"Dump Shell", DumpShell::Create},
|
||||
{"Gears", Gears::Create},
|
||||
{"Cantilever", Cantilever::Create},
|
||||
{"Varying Restitution", VaryingRestitution::Create},
|
||||
{"Character Collision", CharacterCollision::Create},
|
||||
{"Edge Test", EdgeTest::Create},
|
||||
{"Body Types", BodyTypes::Create},
|
||||
{"Shape Editing", ShapeEditing::Create},
|
||||
{"Car", Car::Create},
|
||||
{"Apply Force", ApplyForce::Create},
|
||||
{"Prismatic", Prismatic::Create},
|
||||
{"Vertical Stack", VerticalStack::Create},
|
||||
{"SphereStack", SphereStack::Create},
|
||||
{"Revolute", Revolute::Create},
|
||||
{"Pulleys", Pulleys::Create},
|
||||
{"Polygon Shapes", PolyShapes::Create},
|
||||
//{"Rope", Rope::Create},
|
||||
{"Web", Web::Create},
|
||||
{"RopeJoint", RopeJoint::Create},
|
||||
{"One-Sided Platform", OneSidedPlatform::Create},
|
||||
{"Pinball", Pinball::Create},
|
||||
{"Bullet Test", BulletTest::Create},
|
||||
{"Continuous Test", ContinuousTest::Create},
|
||||
{"Time of Impact", TimeOfImpact::Create},
|
||||
{"Ray-Cast", RayCast::Create},
|
||||
{"Confined", Confined::Create},
|
||||
{"Pyramid", Pyramid::Create},
|
||||
{"Theo Jansen's Walker", TheoJansen::Create},
|
||||
{"Edge Shapes", EdgeShapes::Create},
|
||||
{"PolyCollision", PolyCollision::Create},
|
||||
{"Bridge", Bridge::Create},
|
||||
{"Breakable", Breakable::Create},
|
||||
{"Chain", Chain::Create},
|
||||
{"Collision Filtering", CollisionFiltering::Create},
|
||||
{"Collision Processing", CollisionProcessing::Create},
|
||||
{"Compound Shapes", CompoundShapes::Create},
|
||||
{"Distance Test", DistanceTest::Create},
|
||||
{"Dominos", Dominos::Create},
|
||||
{"Dynamic Tree", DynamicTreeTest::Create},
|
||||
{"Sensor Test", SensorTest::Create},
|
||||
{"Slider Crank", SliderCrank::Create},
|
||||
{"Varying Friction", VaryingFriction::Create},
|
||||
{"Add Pair Stress Test", AddPair::Create},
|
||||
{NULL, NULL}
|
||||
};
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#include "../Framework/Test.h"
|
||||
#include "../Framework/Render.h"
|
||||
|
||||
#ifdef __APPLE__
|
||||
#include <GLUT/glut.h>
|
||||
#else
|
||||
#include "freeglut/freeglut.h"
|
||||
#endif
|
||||
|
||||
#include <cstring>
|
||||
using namespace std;
|
||||
|
||||
#include "AddPair.h"
|
||||
#include "ApplyForce.h"
|
||||
#include "BodyTypes.h"
|
||||
#include "Breakable.h"
|
||||
#include "Bridge.h"
|
||||
#include "BulletTest.h"
|
||||
#include "Cantilever.h"
|
||||
#include "Car.h"
|
||||
#include "ContinuousTest.h"
|
||||
#include "Chain.h"
|
||||
#include "CharacterCollision.h"
|
||||
#include "CollisionFiltering.h"
|
||||
#include "CollisionProcessing.h"
|
||||
#include "CompoundShapes.h"
|
||||
#include "Confined.h"
|
||||
#include "DistanceTest.h"
|
||||
#include "Dominos.h"
|
||||
#include "DumpShell.h"
|
||||
#include "DynamicTreeTest.h"
|
||||
#include "EdgeShapes.h"
|
||||
#include "EdgeTest.h"
|
||||
#include "Gears.h"
|
||||
#include "OneSidedPlatform.h"
|
||||
#include "Pinball.h"
|
||||
#include "PolyCollision.h"
|
||||
#include "PolyShapes.h"
|
||||
#include "Prismatic.h"
|
||||
#include "Pulleys.h"
|
||||
#include "Pyramid.h"
|
||||
#include "RayCast.h"
|
||||
#include "Revolute.h"
|
||||
//#include "Rope.h"
|
||||
#include "RopeJoint.h"
|
||||
#include "SensorTest.h"
|
||||
#include "ShapeEditing.h"
|
||||
#include "SliderCrank.h"
|
||||
#include "SphereStack.h"
|
||||
#include "TheoJansen.h"
|
||||
#include "Tiles.h"
|
||||
#include "TimeOfImpact.h"
|
||||
#include "Tumbler.h"
|
||||
#include "VaryingFriction.h"
|
||||
#include "VaryingRestitution.h"
|
||||
#include "VerticalStack.h"
|
||||
#include "Web.h"
|
||||
|
||||
TestEntry g_testEntries[] =
|
||||
{
|
||||
{"Tumbler", Tumbler::Create},
|
||||
{"Tiles", Tiles::Create},
|
||||
{"Dump Shell", DumpShell::Create},
|
||||
{"Gears", Gears::Create},
|
||||
{"Cantilever", Cantilever::Create},
|
||||
{"Varying Restitution", VaryingRestitution::Create},
|
||||
{"Character Collision", CharacterCollision::Create},
|
||||
{"Edge Test", EdgeTest::Create},
|
||||
{"Body Types", BodyTypes::Create},
|
||||
{"Shape Editing", ShapeEditing::Create},
|
||||
{"Car", Car::Create},
|
||||
{"Apply Force", ApplyForce::Create},
|
||||
{"Prismatic", Prismatic::Create},
|
||||
{"Vertical Stack", VerticalStack::Create},
|
||||
{"SphereStack", SphereStack::Create},
|
||||
{"Revolute", Revolute::Create},
|
||||
{"Pulleys", Pulleys::Create},
|
||||
{"Polygon Shapes", PolyShapes::Create},
|
||||
//{"Rope", Rope::Create},
|
||||
{"Web", Web::Create},
|
||||
{"RopeJoint", RopeJoint::Create},
|
||||
{"One-Sided Platform", OneSidedPlatform::Create},
|
||||
{"Pinball", Pinball::Create},
|
||||
{"Bullet Test", BulletTest::Create},
|
||||
{"Continuous Test", ContinuousTest::Create},
|
||||
{"Time of Impact", TimeOfImpact::Create},
|
||||
{"Ray-Cast", RayCast::Create},
|
||||
{"Confined", Confined::Create},
|
||||
{"Pyramid", Pyramid::Create},
|
||||
{"Theo Jansen's Walker", TheoJansen::Create},
|
||||
{"Edge Shapes", EdgeShapes::Create},
|
||||
{"PolyCollision", PolyCollision::Create},
|
||||
{"Bridge", Bridge::Create},
|
||||
{"Breakable", Breakable::Create},
|
||||
{"Chain", Chain::Create},
|
||||
{"Collision Filtering", CollisionFiltering::Create},
|
||||
{"Collision Processing", CollisionProcessing::Create},
|
||||
{"Compound Shapes", CompoundShapes::Create},
|
||||
{"Distance Test", DistanceTest::Create},
|
||||
{"Dominos", Dominos::Create},
|
||||
{"Dynamic Tree", DynamicTreeTest::Create},
|
||||
{"Sensor Test", SensorTest::Create},
|
||||
{"Slider Crank", SliderCrank::Create},
|
||||
{"Varying Friction", VaryingFriction::Create},
|
||||
{"Add Pair Stress Test", AddPair::Create},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
@@ -1,256 +1,256 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
// Inspired by a contribution by roman_m
|
||||
// Dimensions scooped from APE (http://www.cove.org/ape/index.htm)
|
||||
|
||||
#ifndef THEO_JANSEN_H
|
||||
#define THEO_JANSEN_H
|
||||
|
||||
class TheoJansen : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
void CreateLeg(float32 s, const b2Vec2& wheelAnchor)
|
||||
{
|
||||
b2Vec2 p1(5.4f * s, -6.1f);
|
||||
b2Vec2 p2(7.2f * s, -1.2f);
|
||||
b2Vec2 p3(4.3f * s, -1.9f);
|
||||
b2Vec2 p4(3.1f * s, 0.8f);
|
||||
b2Vec2 p5(6.0f * s, 1.5f);
|
||||
b2Vec2 p6(2.5f * s, 3.7f);
|
||||
|
||||
b2FixtureDef fd1, fd2;
|
||||
fd1.filter.groupIndex = -1;
|
||||
fd2.filter.groupIndex = -1;
|
||||
fd1.density = 1.0f;
|
||||
fd2.density = 1.0f;
|
||||
|
||||
b2PolygonShape poly1, poly2;
|
||||
|
||||
if (s > 0.0f)
|
||||
{
|
||||
b2Vec2 vertices[3];
|
||||
|
||||
vertices[0] = p1;
|
||||
vertices[1] = p2;
|
||||
vertices[2] = p3;
|
||||
poly1.Set(vertices, 3);
|
||||
|
||||
vertices[0] = b2Vec2_zero;
|
||||
vertices[1] = p5 - p4;
|
||||
vertices[2] = p6 - p4;
|
||||
poly2.Set(vertices, 3);
|
||||
}
|
||||
else
|
||||
{
|
||||
b2Vec2 vertices[3];
|
||||
|
||||
vertices[0] = p1;
|
||||
vertices[1] = p3;
|
||||
vertices[2] = p2;
|
||||
poly1.Set(vertices, 3);
|
||||
|
||||
vertices[0] = b2Vec2_zero;
|
||||
vertices[1] = p6 - p4;
|
||||
vertices[2] = p5 - p4;
|
||||
poly2.Set(vertices, 3);
|
||||
}
|
||||
|
||||
fd1.shape = &poly1;
|
||||
fd2.shape = &poly2;
|
||||
|
||||
b2BodyDef bd1, bd2;
|
||||
bd1.type = b2_dynamicBody;
|
||||
bd2.type = b2_dynamicBody;
|
||||
bd1.position = m_offset;
|
||||
bd2.position = p4 + m_offset;
|
||||
|
||||
bd1.angularDamping = 10.0f;
|
||||
bd2.angularDamping = 10.0f;
|
||||
|
||||
b2Body* body1 = m_world->CreateBody(&bd1);
|
||||
b2Body* body2 = m_world->CreateBody(&bd2);
|
||||
|
||||
body1->CreateFixture(&fd1);
|
||||
body2->CreateFixture(&fd2);
|
||||
|
||||
b2DistanceJointDef djd;
|
||||
|
||||
// Using a soft distance constraint can reduce some jitter.
|
||||
// It also makes the structure seem a bit more fluid by
|
||||
// acting like a suspension system.
|
||||
djd.dampingRatio = 0.5f;
|
||||
djd.frequencyHz = 10.0f;
|
||||
|
||||
djd.Initialize(body1, body2, p2 + m_offset, p5 + m_offset);
|
||||
m_world->CreateJoint(&djd);
|
||||
|
||||
djd.Initialize(body1, body2, p3 + m_offset, p4 + m_offset);
|
||||
m_world->CreateJoint(&djd);
|
||||
|
||||
djd.Initialize(body1, m_wheel, p3 + m_offset, wheelAnchor + m_offset);
|
||||
m_world->CreateJoint(&djd);
|
||||
|
||||
djd.Initialize(body2, m_wheel, p6 + m_offset, wheelAnchor + m_offset);
|
||||
m_world->CreateJoint(&djd);
|
||||
|
||||
b2RevoluteJointDef rjd;
|
||||
|
||||
rjd.Initialize(body2, m_chassis, p4 + m_offset);
|
||||
m_world->CreateJoint(&rjd);
|
||||
}
|
||||
|
||||
TheoJansen()
|
||||
{
|
||||
m_offset.Set(0.0f, 8.0f);
|
||||
m_motorSpeed = 2.0f;
|
||||
m_motorOn = true;
|
||||
b2Vec2 pivot(0.0f, 0.8f);
|
||||
|
||||
// Ground
|
||||
{
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-50.0f, 0.0f), b2Vec2(50.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
|
||||
shape.Set(b2Vec2(-50.0f, 0.0f), b2Vec2(-50.0f, 10.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
|
||||
shape.Set(b2Vec2(50.0f, 0.0f), b2Vec2(50.0f, 10.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
// Balls
|
||||
for (int32 i = 0; i < 40; ++i)
|
||||
{
|
||||
b2CircleShape shape;
|
||||
shape.m_radius = 0.25f;
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-40.0f + 2.0f * i, 0.5f);
|
||||
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&shape, 1.0f);
|
||||
}
|
||||
|
||||
// Chassis
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(2.5f, 1.0f);
|
||||
|
||||
b2FixtureDef sd;
|
||||
sd.density = 1.0f;
|
||||
sd.shape = &shape;
|
||||
sd.filter.groupIndex = -1;
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position = pivot + m_offset;
|
||||
m_chassis = m_world->CreateBody(&bd);
|
||||
m_chassis->CreateFixture(&sd);
|
||||
}
|
||||
|
||||
{
|
||||
b2CircleShape shape;
|
||||
shape.m_radius = 1.6f;
|
||||
|
||||
b2FixtureDef sd;
|
||||
sd.density = 1.0f;
|
||||
sd.shape = &shape;
|
||||
sd.filter.groupIndex = -1;
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position = pivot + m_offset;
|
||||
m_wheel = m_world->CreateBody(&bd);
|
||||
m_wheel->CreateFixture(&sd);
|
||||
}
|
||||
|
||||
{
|
||||
b2RevoluteJointDef jd;
|
||||
jd.Initialize(m_wheel, m_chassis, pivot + m_offset);
|
||||
jd.collideConnected = false;
|
||||
jd.motorSpeed = m_motorSpeed;
|
||||
jd.maxMotorTorque = 400.0f;
|
||||
jd.enableMotor = m_motorOn;
|
||||
m_motorJoint = (b2RevoluteJoint*)m_world->CreateJoint(&jd);
|
||||
}
|
||||
|
||||
b2Vec2 wheelAnchor;
|
||||
|
||||
wheelAnchor = pivot + b2Vec2(0.0f, -0.8f);
|
||||
|
||||
CreateLeg(-1.0f, wheelAnchor);
|
||||
CreateLeg(1.0f, wheelAnchor);
|
||||
|
||||
m_wheel->SetTransform(m_wheel->GetPosition(), 120.0f * b2_pi / 180.0f);
|
||||
CreateLeg(-1.0f, wheelAnchor);
|
||||
CreateLeg(1.0f, wheelAnchor);
|
||||
|
||||
m_wheel->SetTransform(m_wheel->GetPosition(), -120.0f * b2_pi / 180.0f);
|
||||
CreateLeg(-1.0f, wheelAnchor);
|
||||
CreateLeg(1.0f, wheelAnchor);
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
m_debugDraw.DrawString(5, m_textLine, "Keys: left = a, brake = s, right = d, toggle motor = m");
|
||||
m_textLine += 15;
|
||||
|
||||
Test::Step(settings);
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case 'a':
|
||||
m_motorJoint->SetMotorSpeed(-m_motorSpeed);
|
||||
break;
|
||||
|
||||
case 's':
|
||||
m_motorJoint->SetMotorSpeed(0.0f);
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
m_motorJoint->SetMotorSpeed(m_motorSpeed);
|
||||
break;
|
||||
|
||||
case 'm':
|
||||
m_motorJoint->EnableMotor(!m_motorJoint->IsMotorEnabled());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new TheoJansen;
|
||||
}
|
||||
|
||||
b2Vec2 m_offset;
|
||||
b2Body* m_chassis;
|
||||
b2Body* m_wheel;
|
||||
b2RevoluteJoint* m_motorJoint;
|
||||
bool m_motorOn;
|
||||
float32 m_motorSpeed;
|
||||
};
|
||||
|
||||
#endif // THEO_JANSEN_H
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
// Inspired by a contribution by roman_m
|
||||
// Dimensions scooped from APE (http://www.cove.org/ape/index.htm)
|
||||
|
||||
#ifndef THEO_JANSEN_H
|
||||
#define THEO_JANSEN_H
|
||||
|
||||
class TheoJansen : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
void CreateLeg(float32 s, const b2Vec2& wheelAnchor)
|
||||
{
|
||||
b2Vec2 p1(5.4f * s, -6.1f);
|
||||
b2Vec2 p2(7.2f * s, -1.2f);
|
||||
b2Vec2 p3(4.3f * s, -1.9f);
|
||||
b2Vec2 p4(3.1f * s, 0.8f);
|
||||
b2Vec2 p5(6.0f * s, 1.5f);
|
||||
b2Vec2 p6(2.5f * s, 3.7f);
|
||||
|
||||
b2FixtureDef fd1, fd2;
|
||||
fd1.filter.groupIndex = -1;
|
||||
fd2.filter.groupIndex = -1;
|
||||
fd1.density = 1.0f;
|
||||
fd2.density = 1.0f;
|
||||
|
||||
b2PolygonShape poly1, poly2;
|
||||
|
||||
if (s > 0.0f)
|
||||
{
|
||||
b2Vec2 vertices[3];
|
||||
|
||||
vertices[0] = p1;
|
||||
vertices[1] = p2;
|
||||
vertices[2] = p3;
|
||||
poly1.Set(vertices, 3);
|
||||
|
||||
vertices[0] = b2Vec2_zero;
|
||||
vertices[1] = p5 - p4;
|
||||
vertices[2] = p6 - p4;
|
||||
poly2.Set(vertices, 3);
|
||||
}
|
||||
else
|
||||
{
|
||||
b2Vec2 vertices[3];
|
||||
|
||||
vertices[0] = p1;
|
||||
vertices[1] = p3;
|
||||
vertices[2] = p2;
|
||||
poly1.Set(vertices, 3);
|
||||
|
||||
vertices[0] = b2Vec2_zero;
|
||||
vertices[1] = p6 - p4;
|
||||
vertices[2] = p5 - p4;
|
||||
poly2.Set(vertices, 3);
|
||||
}
|
||||
|
||||
fd1.shape = &poly1;
|
||||
fd2.shape = &poly2;
|
||||
|
||||
b2BodyDef bd1, bd2;
|
||||
bd1.type = b2_dynamicBody;
|
||||
bd2.type = b2_dynamicBody;
|
||||
bd1.position = m_offset;
|
||||
bd2.position = p4 + m_offset;
|
||||
|
||||
bd1.angularDamping = 10.0f;
|
||||
bd2.angularDamping = 10.0f;
|
||||
|
||||
b2Body* body1 = m_world->CreateBody(&bd1);
|
||||
b2Body* body2 = m_world->CreateBody(&bd2);
|
||||
|
||||
body1->CreateFixture(&fd1);
|
||||
body2->CreateFixture(&fd2);
|
||||
|
||||
b2DistanceJointDef djd;
|
||||
|
||||
// Using a soft distance constraint can reduce some jitter.
|
||||
// It also makes the structure seem a bit more fluid by
|
||||
// acting like a suspension system.
|
||||
djd.dampingRatio = 0.5f;
|
||||
djd.frequencyHz = 10.0f;
|
||||
|
||||
djd.Initialize(body1, body2, p2 + m_offset, p5 + m_offset);
|
||||
m_world->CreateJoint(&djd);
|
||||
|
||||
djd.Initialize(body1, body2, p3 + m_offset, p4 + m_offset);
|
||||
m_world->CreateJoint(&djd);
|
||||
|
||||
djd.Initialize(body1, m_wheel, p3 + m_offset, wheelAnchor + m_offset);
|
||||
m_world->CreateJoint(&djd);
|
||||
|
||||
djd.Initialize(body2, m_wheel, p6 + m_offset, wheelAnchor + m_offset);
|
||||
m_world->CreateJoint(&djd);
|
||||
|
||||
b2RevoluteJointDef rjd;
|
||||
|
||||
rjd.Initialize(body2, m_chassis, p4 + m_offset);
|
||||
m_world->CreateJoint(&rjd);
|
||||
}
|
||||
|
||||
TheoJansen()
|
||||
{
|
||||
m_offset.Set(0.0f, 8.0f);
|
||||
m_motorSpeed = 2.0f;
|
||||
m_motorOn = true;
|
||||
b2Vec2 pivot(0.0f, 0.8f);
|
||||
|
||||
// Ground
|
||||
{
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-50.0f, 0.0f), b2Vec2(50.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
|
||||
shape.Set(b2Vec2(-50.0f, 0.0f), b2Vec2(-50.0f, 10.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
|
||||
shape.Set(b2Vec2(50.0f, 0.0f), b2Vec2(50.0f, 10.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
// Balls
|
||||
for (int32 i = 0; i < 40; ++i)
|
||||
{
|
||||
b2CircleShape shape;
|
||||
shape.m_radius = 0.25f;
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-40.0f + 2.0f * i, 0.5f);
|
||||
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&shape, 1.0f);
|
||||
}
|
||||
|
||||
// Chassis
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(2.5f, 1.0f);
|
||||
|
||||
b2FixtureDef sd;
|
||||
sd.density = 1.0f;
|
||||
sd.shape = &shape;
|
||||
sd.filter.groupIndex = -1;
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position = pivot + m_offset;
|
||||
m_chassis = m_world->CreateBody(&bd);
|
||||
m_chassis->CreateFixture(&sd);
|
||||
}
|
||||
|
||||
{
|
||||
b2CircleShape shape;
|
||||
shape.m_radius = 1.6f;
|
||||
|
||||
b2FixtureDef sd;
|
||||
sd.density = 1.0f;
|
||||
sd.shape = &shape;
|
||||
sd.filter.groupIndex = -1;
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position = pivot + m_offset;
|
||||
m_wheel = m_world->CreateBody(&bd);
|
||||
m_wheel->CreateFixture(&sd);
|
||||
}
|
||||
|
||||
{
|
||||
b2RevoluteJointDef jd;
|
||||
jd.Initialize(m_wheel, m_chassis, pivot + m_offset);
|
||||
jd.collideConnected = false;
|
||||
jd.motorSpeed = m_motorSpeed;
|
||||
jd.maxMotorTorque = 400.0f;
|
||||
jd.enableMotor = m_motorOn;
|
||||
m_motorJoint = (b2RevoluteJoint*)m_world->CreateJoint(&jd);
|
||||
}
|
||||
|
||||
b2Vec2 wheelAnchor;
|
||||
|
||||
wheelAnchor = pivot + b2Vec2(0.0f, -0.8f);
|
||||
|
||||
CreateLeg(-1.0f, wheelAnchor);
|
||||
CreateLeg(1.0f, wheelAnchor);
|
||||
|
||||
m_wheel->SetTransform(m_wheel->GetPosition(), 120.0f * b2_pi / 180.0f);
|
||||
CreateLeg(-1.0f, wheelAnchor);
|
||||
CreateLeg(1.0f, wheelAnchor);
|
||||
|
||||
m_wheel->SetTransform(m_wheel->GetPosition(), -120.0f * b2_pi / 180.0f);
|
||||
CreateLeg(-1.0f, wheelAnchor);
|
||||
CreateLeg(1.0f, wheelAnchor);
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
m_debugDraw.DrawString(5, m_textLine, "Keys: left = a, brake = s, right = d, toggle motor = m");
|
||||
m_textLine += 15;
|
||||
|
||||
Test::Step(settings);
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case 'a':
|
||||
m_motorJoint->SetMotorSpeed(-m_motorSpeed);
|
||||
break;
|
||||
|
||||
case 's':
|
||||
m_motorJoint->SetMotorSpeed(0.0f);
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
m_motorJoint->SetMotorSpeed(m_motorSpeed);
|
||||
break;
|
||||
|
||||
case 'm':
|
||||
m_motorJoint->EnableMotor(!m_motorJoint->IsMotorEnabled());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new TheoJansen;
|
||||
}
|
||||
|
||||
b2Vec2 m_offset;
|
||||
b2Body* m_chassis;
|
||||
b2Body* m_wheel;
|
||||
b2RevoluteJoint* m_motorJoint;
|
||||
bool m_motorOn;
|
||||
float32 m_motorSpeed;
|
||||
};
|
||||
|
||||
#endif // THEO_JANSEN_H
|
||||
|
||||
@@ -1,156 +1,156 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef TILES_H
|
||||
#define TILES_H
|
||||
|
||||
/// This stress tests the dynamic tree broad-phase. This also shows that tile
|
||||
/// based collision is _not_ smooth due to Box2D not knowing about adjacency.
|
||||
class Tiles : public Test
|
||||
{
|
||||
public:
|
||||
enum
|
||||
{
|
||||
e_count = 20
|
||||
};
|
||||
|
||||
Tiles()
|
||||
{
|
||||
m_fixtureCount = 0;
|
||||
b2Timer timer;
|
||||
|
||||
{
|
||||
float32 a = 0.5f;
|
||||
b2BodyDef bd;
|
||||
bd.position.y = -a;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
#if 1
|
||||
int32 N = 200;
|
||||
int32 M = 10;
|
||||
b2Vec2 position;
|
||||
position.y = 0.0f;
|
||||
for (int32 j = 0; j < M; ++j)
|
||||
{
|
||||
position.x = -N * a;
|
||||
for (int32 i = 0; i < N; ++i)
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(a, a, position, 0.0f);
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
++m_fixtureCount;
|
||||
position.x += 2.0f * a;
|
||||
}
|
||||
position.y -= 2.0f * a;
|
||||
}
|
||||
#else
|
||||
int32 N = 200;
|
||||
int32 M = 10;
|
||||
b2Vec2 position;
|
||||
position.x = -N * a;
|
||||
for (int32 i = 0; i < N; ++i)
|
||||
{
|
||||
position.y = 0.0f;
|
||||
for (int32 j = 0; j < M; ++j)
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(a, a, position, 0.0f);
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
position.y -= 2.0f * a;
|
||||
}
|
||||
position.x += 2.0f * a;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
{
|
||||
float32 a = 0.5f;
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(a, a);
|
||||
|
||||
b2Vec2 x(-7.0f, 0.75f);
|
||||
b2Vec2 y;
|
||||
b2Vec2 deltaX(0.5625f, 1.25f);
|
||||
b2Vec2 deltaY(1.125f, 0.0f);
|
||||
|
||||
for (int32 i = 0; i < e_count; ++i)
|
||||
{
|
||||
y = x;
|
||||
|
||||
for (int32 j = i; j < e_count; ++j)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position = y;
|
||||
|
||||
//if (i == 0 && j == 0)
|
||||
//{
|
||||
// bd.allowSleep = false;
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// bd.allowSleep = true;
|
||||
//}
|
||||
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&shape, 5.0f);
|
||||
++m_fixtureCount;
|
||||
y += deltaY;
|
||||
}
|
||||
|
||||
x += deltaX;
|
||||
}
|
||||
}
|
||||
|
||||
m_createTime = timer.GetMilliseconds();
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
const b2ContactManager& cm = m_world->GetContactManager();
|
||||
int32 height = cm.m_broadPhase.GetTreeHeight();
|
||||
int32 leafCount = cm.m_broadPhase.GetProxyCount();
|
||||
int32 minimumNodeCount = 2 * leafCount - 1;
|
||||
float32 minimumHeight = ceilf(logf(float32(minimumNodeCount)) / logf(2.0f));
|
||||
m_debugDraw.DrawString(5, m_textLine, "dynamic tree height = %d, min = %d", height, int32(minimumHeight));
|
||||
m_textLine += 15;
|
||||
|
||||
Test::Step(settings);
|
||||
|
||||
m_debugDraw.DrawString(5, m_textLine, "create time = %6.2f ms, fixture count = %d",
|
||||
m_createTime, m_fixtureCount);
|
||||
m_textLine += 15;
|
||||
|
||||
//b2DynamicTree* tree = &m_world->m_contactManager.m_broadPhase.m_tree;
|
||||
|
||||
//if (m_stepCount == 400)
|
||||
//{
|
||||
// tree->RebuildBottomUp();
|
||||
//}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new Tiles;
|
||||
}
|
||||
|
||||
int32 m_fixtureCount;
|
||||
float32 m_createTime;
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef TILES_H
|
||||
#define TILES_H
|
||||
|
||||
/// This stress tests the dynamic tree broad-phase. This also shows that tile
|
||||
/// based collision is _not_ smooth due to Box2D not knowing about adjacency.
|
||||
class Tiles : public Test
|
||||
{
|
||||
public:
|
||||
enum
|
||||
{
|
||||
e_count = 20
|
||||
};
|
||||
|
||||
Tiles()
|
||||
{
|
||||
m_fixtureCount = 0;
|
||||
b2Timer timer;
|
||||
|
||||
{
|
||||
float32 a = 0.5f;
|
||||
b2BodyDef bd;
|
||||
bd.position.y = -a;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
#if 1
|
||||
int32 N = 200;
|
||||
int32 M = 10;
|
||||
b2Vec2 position;
|
||||
position.y = 0.0f;
|
||||
for (int32 j = 0; j < M; ++j)
|
||||
{
|
||||
position.x = -N * a;
|
||||
for (int32 i = 0; i < N; ++i)
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(a, a, position, 0.0f);
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
++m_fixtureCount;
|
||||
position.x += 2.0f * a;
|
||||
}
|
||||
position.y -= 2.0f * a;
|
||||
}
|
||||
#else
|
||||
int32 N = 200;
|
||||
int32 M = 10;
|
||||
b2Vec2 position;
|
||||
position.x = -N * a;
|
||||
for (int32 i = 0; i < N; ++i)
|
||||
{
|
||||
position.y = 0.0f;
|
||||
for (int32 j = 0; j < M; ++j)
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(a, a, position, 0.0f);
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
position.y -= 2.0f * a;
|
||||
}
|
||||
position.x += 2.0f * a;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
{
|
||||
float32 a = 0.5f;
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(a, a);
|
||||
|
||||
b2Vec2 x(-7.0f, 0.75f);
|
||||
b2Vec2 y;
|
||||
b2Vec2 deltaX(0.5625f, 1.25f);
|
||||
b2Vec2 deltaY(1.125f, 0.0f);
|
||||
|
||||
for (int32 i = 0; i < e_count; ++i)
|
||||
{
|
||||
y = x;
|
||||
|
||||
for (int32 j = i; j < e_count; ++j)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position = y;
|
||||
|
||||
//if (i == 0 && j == 0)
|
||||
//{
|
||||
// bd.allowSleep = false;
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// bd.allowSleep = true;
|
||||
//}
|
||||
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
body->CreateFixture(&shape, 5.0f);
|
||||
++m_fixtureCount;
|
||||
y += deltaY;
|
||||
}
|
||||
|
||||
x += deltaX;
|
||||
}
|
||||
}
|
||||
|
||||
m_createTime = timer.GetMilliseconds();
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
const b2ContactManager& cm = m_world->GetContactManager();
|
||||
int32 height = cm.m_broadPhase.GetTreeHeight();
|
||||
int32 leafCount = cm.m_broadPhase.GetProxyCount();
|
||||
int32 minimumNodeCount = 2 * leafCount - 1;
|
||||
float32 minimumHeight = ceilf(logf(float32(minimumNodeCount)) / logf(2.0f));
|
||||
m_debugDraw.DrawString(5, m_textLine, "dynamic tree height = %d, min = %d", height, int32(minimumHeight));
|
||||
m_textLine += 15;
|
||||
|
||||
Test::Step(settings);
|
||||
|
||||
m_debugDraw.DrawString(5, m_textLine, "create time = %6.2f ms, fixture count = %d",
|
||||
m_createTime, m_fixtureCount);
|
||||
m_textLine += 15;
|
||||
|
||||
//b2DynamicTree* tree = &m_world->m_contactManager.m_broadPhase.m_tree;
|
||||
|
||||
//if (m_stepCount == 400)
|
||||
//{
|
||||
// tree->RebuildBottomUp();
|
||||
//}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new Tiles;
|
||||
}
|
||||
|
||||
int32 m_fixtureCount;
|
||||
float32 m_createTime;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,131 +1,131 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef TIME_OF_IMPACT_H
|
||||
#define TIME_OF_IMPACT_H
|
||||
|
||||
class TimeOfImpact : public Test
|
||||
{
|
||||
public:
|
||||
TimeOfImpact()
|
||||
{
|
||||
m_shapeA.SetAsBox(25.0f, 5.0f);
|
||||
m_shapeB.SetAsBox(2.5f, 2.5f);
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new TimeOfImpact;
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
Test::Step(settings);
|
||||
|
||||
b2Sweep sweepA;
|
||||
sweepA.c0.Set(24.0f, -60.0f);
|
||||
sweepA.a0 = 2.95f;
|
||||
sweepA.c = sweepA.c0;
|
||||
sweepA.a = sweepA.a0;
|
||||
sweepA.localCenter.SetZero();
|
||||
|
||||
b2Sweep sweepB;
|
||||
sweepB.c0.Set(53.474274f, -50.252514f);
|
||||
sweepB.a0 = 513.36676f; // - 162.0f * b2_pi;
|
||||
sweepB.c.Set(54.595478f, -51.083473f);
|
||||
sweepB.a = 513.62781f; // - 162.0f * b2_pi;
|
||||
sweepB.localCenter.SetZero();
|
||||
|
||||
//sweepB.a0 -= 300.0f * b2_pi;
|
||||
//sweepB.a -= 300.0f * b2_pi;
|
||||
|
||||
b2TOIInput input;
|
||||
input.proxyA.Set(&m_shapeA, 0);
|
||||
input.proxyB.Set(&m_shapeB, 0);
|
||||
input.sweepA = sweepA;
|
||||
input.sweepB = sweepB;
|
||||
input.tMax = 1.0f;
|
||||
|
||||
b2TOIOutput output;
|
||||
|
||||
b2TimeOfImpact(&output, &input);
|
||||
|
||||
m_debugDraw.DrawString(5, m_textLine, "toi = %g", output.t);
|
||||
m_textLine += 15;
|
||||
|
||||
extern int32 b2_toiMaxIters, b2_toiMaxRootIters;
|
||||
m_debugDraw.DrawString(5, m_textLine, "max toi iters = %d, max root iters = %d", b2_toiMaxIters, b2_toiMaxRootIters);
|
||||
m_textLine += 15;
|
||||
|
||||
b2Vec2 vertices[b2_maxPolygonVertices];
|
||||
|
||||
b2Transform transformA;
|
||||
sweepA.GetTransform(&transformA, 0.0f);
|
||||
for (int32 i = 0; i < m_shapeA.m_vertexCount; ++i)
|
||||
{
|
||||
vertices[i] = b2Mul(transformA, m_shapeA.m_vertices[i]);
|
||||
}
|
||||
m_debugDraw.DrawPolygon(vertices, m_shapeA.m_vertexCount, b2Color(0.9f, 0.9f, 0.9f));
|
||||
|
||||
b2Transform transformB;
|
||||
sweepB.GetTransform(&transformB, 0.0f);
|
||||
|
||||
b2Vec2 localPoint(2.0f, -0.1f);
|
||||
b2Vec2 rB = b2Mul(transformB, localPoint) - sweepB.c0;
|
||||
float32 wB = sweepB.a - sweepB.a0;
|
||||
b2Vec2 vB = sweepB.c - sweepB.c0;
|
||||
b2Vec2 v = vB + b2Cross(wB, rB);
|
||||
|
||||
for (int32 i = 0; i < m_shapeB.m_vertexCount; ++i)
|
||||
{
|
||||
vertices[i] = b2Mul(transformB, m_shapeB.m_vertices[i]);
|
||||
}
|
||||
m_debugDraw.DrawPolygon(vertices, m_shapeB.m_vertexCount, b2Color(0.5f, 0.9f, 0.5f));
|
||||
|
||||
sweepB.GetTransform(&transformB, output.t);
|
||||
for (int32 i = 0; i < m_shapeB.m_vertexCount; ++i)
|
||||
{
|
||||
vertices[i] = b2Mul(transformB, m_shapeB.m_vertices[i]);
|
||||
}
|
||||
m_debugDraw.DrawPolygon(vertices, m_shapeB.m_vertexCount, b2Color(0.5f, 0.7f, 0.9f));
|
||||
|
||||
sweepB.GetTransform(&transformB, 1.0f);
|
||||
for (int32 i = 0; i < m_shapeB.m_vertexCount; ++i)
|
||||
{
|
||||
vertices[i] = b2Mul(transformB, m_shapeB.m_vertices[i]);
|
||||
}
|
||||
m_debugDraw.DrawPolygon(vertices, m_shapeB.m_vertexCount, b2Color(0.9f, 0.5f, 0.5f));
|
||||
|
||||
#if 0
|
||||
for (float32 t = 0.0f; t < 1.0f; t += 0.1f)
|
||||
{
|
||||
sweepB.GetTransform(&transformB, t);
|
||||
for (int32 i = 0; i < m_shapeB.m_vertexCount; ++i)
|
||||
{
|
||||
vertices[i] = b2Mul(transformB, m_shapeB.m_vertices[i]);
|
||||
}
|
||||
m_debugDraw.DrawPolygon(vertices, m_shapeB.m_vertexCount, b2Color(0.9f, 0.5f, 0.5f));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
b2PolygonShape m_shapeA;
|
||||
b2PolygonShape m_shapeB;
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef TIME_OF_IMPACT_H
|
||||
#define TIME_OF_IMPACT_H
|
||||
|
||||
class TimeOfImpact : public Test
|
||||
{
|
||||
public:
|
||||
TimeOfImpact()
|
||||
{
|
||||
m_shapeA.SetAsBox(25.0f, 5.0f);
|
||||
m_shapeB.SetAsBox(2.5f, 2.5f);
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new TimeOfImpact;
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
Test::Step(settings);
|
||||
|
||||
b2Sweep sweepA;
|
||||
sweepA.c0.Set(24.0f, -60.0f);
|
||||
sweepA.a0 = 2.95f;
|
||||
sweepA.c = sweepA.c0;
|
||||
sweepA.a = sweepA.a0;
|
||||
sweepA.localCenter.SetZero();
|
||||
|
||||
b2Sweep sweepB;
|
||||
sweepB.c0.Set(53.474274f, -50.252514f);
|
||||
sweepB.a0 = 513.36676f; // - 162.0f * b2_pi;
|
||||
sweepB.c.Set(54.595478f, -51.083473f);
|
||||
sweepB.a = 513.62781f; // - 162.0f * b2_pi;
|
||||
sweepB.localCenter.SetZero();
|
||||
|
||||
//sweepB.a0 -= 300.0f * b2_pi;
|
||||
//sweepB.a -= 300.0f * b2_pi;
|
||||
|
||||
b2TOIInput input;
|
||||
input.proxyA.Set(&m_shapeA, 0);
|
||||
input.proxyB.Set(&m_shapeB, 0);
|
||||
input.sweepA = sweepA;
|
||||
input.sweepB = sweepB;
|
||||
input.tMax = 1.0f;
|
||||
|
||||
b2TOIOutput output;
|
||||
|
||||
b2TimeOfImpact(&output, &input);
|
||||
|
||||
m_debugDraw.DrawString(5, m_textLine, "toi = %g", output.t);
|
||||
m_textLine += 15;
|
||||
|
||||
extern int32 b2_toiMaxIters, b2_toiMaxRootIters;
|
||||
m_debugDraw.DrawString(5, m_textLine, "max toi iters = %d, max root iters = %d", b2_toiMaxIters, b2_toiMaxRootIters);
|
||||
m_textLine += 15;
|
||||
|
||||
b2Vec2 vertices[b2_maxPolygonVertices];
|
||||
|
||||
b2Transform transformA;
|
||||
sweepA.GetTransform(&transformA, 0.0f);
|
||||
for (int32 i = 0; i < m_shapeA.m_vertexCount; ++i)
|
||||
{
|
||||
vertices[i] = b2Mul(transformA, m_shapeA.m_vertices[i]);
|
||||
}
|
||||
m_debugDraw.DrawPolygon(vertices, m_shapeA.m_vertexCount, b2Color(0.9f, 0.9f, 0.9f));
|
||||
|
||||
b2Transform transformB;
|
||||
sweepB.GetTransform(&transformB, 0.0f);
|
||||
|
||||
b2Vec2 localPoint(2.0f, -0.1f);
|
||||
b2Vec2 rB = b2Mul(transformB, localPoint) - sweepB.c0;
|
||||
float32 wB = sweepB.a - sweepB.a0;
|
||||
b2Vec2 vB = sweepB.c - sweepB.c0;
|
||||
b2Vec2 v = vB + b2Cross(wB, rB);
|
||||
|
||||
for (int32 i = 0; i < m_shapeB.m_vertexCount; ++i)
|
||||
{
|
||||
vertices[i] = b2Mul(transformB, m_shapeB.m_vertices[i]);
|
||||
}
|
||||
m_debugDraw.DrawPolygon(vertices, m_shapeB.m_vertexCount, b2Color(0.5f, 0.9f, 0.5f));
|
||||
|
||||
sweepB.GetTransform(&transformB, output.t);
|
||||
for (int32 i = 0; i < m_shapeB.m_vertexCount; ++i)
|
||||
{
|
||||
vertices[i] = b2Mul(transformB, m_shapeB.m_vertices[i]);
|
||||
}
|
||||
m_debugDraw.DrawPolygon(vertices, m_shapeB.m_vertexCount, b2Color(0.5f, 0.7f, 0.9f));
|
||||
|
||||
sweepB.GetTransform(&transformB, 1.0f);
|
||||
for (int32 i = 0; i < m_shapeB.m_vertexCount; ++i)
|
||||
{
|
||||
vertices[i] = b2Mul(transformB, m_shapeB.m_vertices[i]);
|
||||
}
|
||||
m_debugDraw.DrawPolygon(vertices, m_shapeB.m_vertexCount, b2Color(0.9f, 0.5f, 0.5f));
|
||||
|
||||
#if 0
|
||||
for (float32 t = 0.0f; t < 1.0f; t += 0.1f)
|
||||
{
|
||||
sweepB.GetTransform(&transformB, t);
|
||||
for (int32 i = 0; i < m_shapeB.m_vertexCount; ++i)
|
||||
{
|
||||
vertices[i] = b2Mul(transformB, m_shapeB.m_vertices[i]);
|
||||
}
|
||||
m_debugDraw.DrawPolygon(vertices, m_shapeB.m_vertexCount, b2Color(0.9f, 0.5f, 0.5f));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
b2PolygonShape m_shapeA;
|
||||
b2PolygonShape m_shapeB;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,99 +1,99 @@
|
||||
/*
|
||||
* Copyright (c) 2011 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef TUMBLER_H
|
||||
#define TUMBLER_H
|
||||
|
||||
class Tumbler : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
enum
|
||||
{
|
||||
e_count = 800
|
||||
};
|
||||
|
||||
Tumbler()
|
||||
{
|
||||
b2Body* ground = NULL;
|
||||
{
|
||||
b2BodyDef bd;
|
||||
ground = m_world->CreateBody(&bd);
|
||||
}
|
||||
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.allowSleep = false;
|
||||
bd.position.Set(0.0f, 10.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.5f, 10.0f, b2Vec2( 10.0f, 0.0f), 0.0);
|
||||
body->CreateFixture(&shape, 5.0f);
|
||||
shape.SetAsBox(0.5f, 10.0f, b2Vec2(-10.0f, 0.0f), 0.0);
|
||||
body->CreateFixture(&shape, 5.0f);
|
||||
shape.SetAsBox(10.0f, 0.5f, b2Vec2(0.0f, 10.0f), 0.0);
|
||||
body->CreateFixture(&shape, 5.0f);
|
||||
shape.SetAsBox(10.0f, 0.5f, b2Vec2(0.0f, -10.0f), 0.0);
|
||||
body->CreateFixture(&shape, 5.0f);
|
||||
|
||||
b2RevoluteJointDef jd;
|
||||
jd.bodyA = ground;
|
||||
jd.bodyB = body;
|
||||
jd.localAnchorA.Set(0.0f, 10.0f);
|
||||
jd.localAnchorB.Set(0.0f, 0.0f);
|
||||
jd.referenceAngle = 0.0f;
|
||||
jd.motorSpeed = 0.05f * b2_pi;
|
||||
jd.maxMotorTorque = 1e8f;
|
||||
jd.enableMotor = true;
|
||||
m_joint = (b2RevoluteJoint*)m_world->CreateJoint(&jd);
|
||||
}
|
||||
|
||||
m_count = 0;
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
Test::Step(settings);
|
||||
|
||||
if (m_count < e_count)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(0.0f, 10.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.125f, 0.125f);
|
||||
body->CreateFixture(&shape, 1.0f);
|
||||
|
||||
++m_count;
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new Tumbler;
|
||||
}
|
||||
|
||||
b2RevoluteJoint* m_joint;
|
||||
int32 m_count;
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2011 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef TUMBLER_H
|
||||
#define TUMBLER_H
|
||||
|
||||
class Tumbler : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
enum
|
||||
{
|
||||
e_count = 800
|
||||
};
|
||||
|
||||
Tumbler()
|
||||
{
|
||||
b2Body* ground = NULL;
|
||||
{
|
||||
b2BodyDef bd;
|
||||
ground = m_world->CreateBody(&bd);
|
||||
}
|
||||
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.allowSleep = false;
|
||||
bd.position.Set(0.0f, 10.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.5f, 10.0f, b2Vec2( 10.0f, 0.0f), 0.0);
|
||||
body->CreateFixture(&shape, 5.0f);
|
||||
shape.SetAsBox(0.5f, 10.0f, b2Vec2(-10.0f, 0.0f), 0.0);
|
||||
body->CreateFixture(&shape, 5.0f);
|
||||
shape.SetAsBox(10.0f, 0.5f, b2Vec2(0.0f, 10.0f), 0.0);
|
||||
body->CreateFixture(&shape, 5.0f);
|
||||
shape.SetAsBox(10.0f, 0.5f, b2Vec2(0.0f, -10.0f), 0.0);
|
||||
body->CreateFixture(&shape, 5.0f);
|
||||
|
||||
b2RevoluteJointDef jd;
|
||||
jd.bodyA = ground;
|
||||
jd.bodyB = body;
|
||||
jd.localAnchorA.Set(0.0f, 10.0f);
|
||||
jd.localAnchorB.Set(0.0f, 0.0f);
|
||||
jd.referenceAngle = 0.0f;
|
||||
jd.motorSpeed = 0.05f * b2_pi;
|
||||
jd.maxMotorTorque = 1e8f;
|
||||
jd.enableMotor = true;
|
||||
m_joint = (b2RevoluteJoint*)m_world->CreateJoint(&jd);
|
||||
}
|
||||
|
||||
m_count = 0;
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
Test::Step(settings);
|
||||
|
||||
if (m_count < e_count)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(0.0f, 10.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.125f, 0.125f);
|
||||
body->CreateFixture(&shape, 1.0f);
|
||||
|
||||
++m_count;
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new Tumbler;
|
||||
}
|
||||
|
||||
b2RevoluteJoint* m_joint;
|
||||
int32 m_count;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,124 +1,124 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef VARYING_FRICTION_H
|
||||
#define VARYING_FRICTION_H
|
||||
|
||||
class VaryingFriction : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
VaryingFriction()
|
||||
{
|
||||
{
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(13.0f, 0.25f);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(-4.0f, 22.0f);
|
||||
bd.angle = -0.25f;
|
||||
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.25f, 1.0f);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(10.5f, 19.0f);
|
||||
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(13.0f, 0.25f);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(4.0f, 14.0f);
|
||||
bd.angle = 0.25f;
|
||||
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.25f, 1.0f);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(-10.5f, 11.0f);
|
||||
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(13.0f, 0.25f);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(-4.0f, 6.0f);
|
||||
bd.angle = -0.25f;
|
||||
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.5f, 0.5f);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 25.0f;
|
||||
|
||||
float friction[5] = {0.75f, 0.5f, 0.35f, 0.1f, 0.0f};
|
||||
|
||||
for (int i = 0; i < 5; ++i)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-15.0f + 4.0f * i, 28.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
fd.friction = friction[i];
|
||||
body->CreateFixture(&fd);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new VaryingFriction;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef VARYING_FRICTION_H
|
||||
#define VARYING_FRICTION_H
|
||||
|
||||
class VaryingFriction : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
VaryingFriction()
|
||||
{
|
||||
{
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(13.0f, 0.25f);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(-4.0f, 22.0f);
|
||||
bd.angle = -0.25f;
|
||||
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.25f, 1.0f);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(10.5f, 19.0f);
|
||||
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(13.0f, 0.25f);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(4.0f, 14.0f);
|
||||
bd.angle = 0.25f;
|
||||
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.25f, 1.0f);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(-10.5f, 11.0f);
|
||||
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(13.0f, 0.25f);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.position.Set(-4.0f, 6.0f);
|
||||
bd.angle = -0.25f;
|
||||
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.5f, 0.5f);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 25.0f;
|
||||
|
||||
float friction[5] = {0.75f, 0.5f, 0.35f, 0.1f, 0.0f};
|
||||
|
||||
for (int i = 0; i < 5; ++i)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-15.0f + 4.0f * i, 28.0f);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
fd.friction = friction[i];
|
||||
body->CreateFixture(&fd);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new VaryingFriction;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,69 +1,69 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef VARYING_RESTITUTION_H
|
||||
#define VARYING_RESTITUTION_H
|
||||
|
||||
// Note: even with a restitution of 1.0, there is some energy change
|
||||
// due to position correction.
|
||||
class VaryingRestitution : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
VaryingRestitution()
|
||||
{
|
||||
{
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2CircleShape shape;
|
||||
shape.m_radius = 1.0f;
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 1.0f;
|
||||
|
||||
float32 restitution[7] = {0.0f, 0.1f, 0.3f, 0.5f, 0.75f, 0.9f, 1.0f};
|
||||
|
||||
for (int32 i = 0; i < 7; ++i)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-10.0f + 3.0f * i, 20.0f);
|
||||
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
fd.restitution = restitution[i];
|
||||
body->CreateFixture(&fd);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new VaryingRestitution;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef VARYING_RESTITUTION_H
|
||||
#define VARYING_RESTITUTION_H
|
||||
|
||||
// Note: even with a restitution of 1.0, there is some energy change
|
||||
// due to position correction.
|
||||
class VaryingRestitution : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
VaryingRestitution()
|
||||
{
|
||||
{
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2CircleShape shape;
|
||||
shape.m_radius = 1.0f;
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 1.0f;
|
||||
|
||||
float32 restitution[7] = {0.0f, 0.1f, 0.3f, 0.5f, 0.75f, 0.9f, 1.0f};
|
||||
|
||||
for (int32 i = 0; i < 7; ++i)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.position.Set(-10.0f + 3.0f * i, 20.0f);
|
||||
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
fd.restitution = restitution[i];
|
||||
body->CreateFixture(&fd);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new VaryingRestitution;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,165 +1,165 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef VERTICAL_STACK_H
|
||||
#define VERTICAL_STACK_H
|
||||
|
||||
class VerticalStack : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
enum
|
||||
{
|
||||
e_columnCount = 5,
|
||||
e_rowCount = 16
|
||||
//e_columnCount = 1,
|
||||
//e_rowCount = 1
|
||||
};
|
||||
|
||||
VerticalStack()
|
||||
{
|
||||
{
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
|
||||
shape.Set(b2Vec2(20.0f, 0.0f), b2Vec2(20.0f, 20.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
float32 xs[5] = {0.0f, -10.0f, -5.0f, 5.0f, 10.0f};
|
||||
|
||||
for (int32 j = 0; j < e_columnCount; ++j)
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.5f, 0.5f);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 1.0f;
|
||||
fd.friction = 0.3f;
|
||||
|
||||
for (int i = 0; i < e_rowCount; ++i)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
|
||||
int32 n = j * e_rowCount + i;
|
||||
b2Assert(n < e_rowCount * e_columnCount);
|
||||
m_indices[n] = n;
|
||||
bd.userData = m_indices + n;
|
||||
|
||||
float32 x = 0.0f;
|
||||
//float32 x = RandomFloat(-0.02f, 0.02f);
|
||||
//float32 x = i % 2 == 0 ? -0.025f : 0.025f;
|
||||
bd.position.Set(xs[j] + x, 0.752f + 1.54f * i);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
m_bodies[n] = body;
|
||||
|
||||
body->CreateFixture(&fd);
|
||||
}
|
||||
}
|
||||
|
||||
m_bullet = NULL;
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case ',':
|
||||
if (m_bullet != NULL)
|
||||
{
|
||||
m_world->DestroyBody(m_bullet);
|
||||
m_bullet = NULL;
|
||||
}
|
||||
|
||||
{
|
||||
b2CircleShape shape;
|
||||
shape.m_radius = 0.25f;
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 20.0f;
|
||||
fd.restitution = 0.05f;
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.bullet = true;
|
||||
bd.position.Set(-31.0f, 5.0f);
|
||||
|
||||
m_bullet = m_world->CreateBody(&bd);
|
||||
m_bullet->CreateFixture(&fd);
|
||||
|
||||
m_bullet->SetLinearVelocity(b2Vec2(400.0f, 0.0f));
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
Test::Step(settings);
|
||||
m_debugDraw.DrawString(5, m_textLine, "Press: (,) to launch a bullet.");
|
||||
m_textLine += 15;
|
||||
|
||||
//if (m_stepCount == 300)
|
||||
//{
|
||||
// if (m_bullet != NULL)
|
||||
// {
|
||||
// m_world->DestroyBody(m_bullet);
|
||||
// m_bullet = NULL;
|
||||
// }
|
||||
|
||||
// {
|
||||
// b2CircleShape shape;
|
||||
// shape.m_radius = 0.25f;
|
||||
|
||||
// b2FixtureDef fd;
|
||||
// fd.shape = &shape;
|
||||
// fd.density = 20.0f;
|
||||
// fd.restitution = 0.05f;
|
||||
|
||||
// b2BodyDef bd;
|
||||
// bd.type = b2_dynamicBody;
|
||||
// bd.bullet = true;
|
||||
// bd.position.Set(-31.0f, 5.0f);
|
||||
|
||||
// m_bullet = m_world->CreateBody(&bd);
|
||||
// m_bullet->CreateFixture(&fd);
|
||||
|
||||
// m_bullet->SetLinearVelocity(b2Vec2(400.0f, 0.0f));
|
||||
// }
|
||||
//}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new VerticalStack;
|
||||
}
|
||||
|
||||
b2Body* m_bullet;
|
||||
b2Body* m_bodies[e_rowCount * e_columnCount];
|
||||
int32 m_indices[e_rowCount * e_columnCount];
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef VERTICAL_STACK_H
|
||||
#define VERTICAL_STACK_H
|
||||
|
||||
class VerticalStack : public Test
|
||||
{
|
||||
public:
|
||||
|
||||
enum
|
||||
{
|
||||
e_columnCount = 5,
|
||||
e_rowCount = 16
|
||||
//e_columnCount = 1,
|
||||
//e_rowCount = 1
|
||||
};
|
||||
|
||||
VerticalStack()
|
||||
{
|
||||
{
|
||||
b2BodyDef bd;
|
||||
b2Body* ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
|
||||
shape.Set(b2Vec2(20.0f, 0.0f), b2Vec2(20.0f, 20.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
float32 xs[5] = {0.0f, -10.0f, -5.0f, 5.0f, 10.0f};
|
||||
|
||||
for (int32 j = 0; j < e_columnCount; ++j)
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.5f, 0.5f);
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 1.0f;
|
||||
fd.friction = 0.3f;
|
||||
|
||||
for (int i = 0; i < e_rowCount; ++i)
|
||||
{
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
|
||||
int32 n = j * e_rowCount + i;
|
||||
b2Assert(n < e_rowCount * e_columnCount);
|
||||
m_indices[n] = n;
|
||||
bd.userData = m_indices + n;
|
||||
|
||||
float32 x = 0.0f;
|
||||
//float32 x = RandomFloat(-0.02f, 0.02f);
|
||||
//float32 x = i % 2 == 0 ? -0.025f : 0.025f;
|
||||
bd.position.Set(xs[j] + x, 0.752f + 1.54f * i);
|
||||
b2Body* body = m_world->CreateBody(&bd);
|
||||
|
||||
m_bodies[n] = body;
|
||||
|
||||
body->CreateFixture(&fd);
|
||||
}
|
||||
}
|
||||
|
||||
m_bullet = NULL;
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case ',':
|
||||
if (m_bullet != NULL)
|
||||
{
|
||||
m_world->DestroyBody(m_bullet);
|
||||
m_bullet = NULL;
|
||||
}
|
||||
|
||||
{
|
||||
b2CircleShape shape;
|
||||
shape.m_radius = 0.25f;
|
||||
|
||||
b2FixtureDef fd;
|
||||
fd.shape = &shape;
|
||||
fd.density = 20.0f;
|
||||
fd.restitution = 0.05f;
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
bd.bullet = true;
|
||||
bd.position.Set(-31.0f, 5.0f);
|
||||
|
||||
m_bullet = m_world->CreateBody(&bd);
|
||||
m_bullet->CreateFixture(&fd);
|
||||
|
||||
m_bullet->SetLinearVelocity(b2Vec2(400.0f, 0.0f));
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
Test::Step(settings);
|
||||
m_debugDraw.DrawString(5, m_textLine, "Press: (,) to launch a bullet.");
|
||||
m_textLine += 15;
|
||||
|
||||
//if (m_stepCount == 300)
|
||||
//{
|
||||
// if (m_bullet != NULL)
|
||||
// {
|
||||
// m_world->DestroyBody(m_bullet);
|
||||
// m_bullet = NULL;
|
||||
// }
|
||||
|
||||
// {
|
||||
// b2CircleShape shape;
|
||||
// shape.m_radius = 0.25f;
|
||||
|
||||
// b2FixtureDef fd;
|
||||
// fd.shape = &shape;
|
||||
// fd.density = 20.0f;
|
||||
// fd.restitution = 0.05f;
|
||||
|
||||
// b2BodyDef bd;
|
||||
// bd.type = b2_dynamicBody;
|
||||
// bd.bullet = true;
|
||||
// bd.position.Set(-31.0f, 5.0f);
|
||||
|
||||
// m_bullet = m_world->CreateBody(&bd);
|
||||
// m_bullet->CreateFixture(&fd);
|
||||
|
||||
// m_bullet->SetLinearVelocity(b2Vec2(400.0f, 0.0f));
|
||||
// }
|
||||
//}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new VerticalStack;
|
||||
}
|
||||
|
||||
b2Body* m_bullet;
|
||||
b2Body* m_bodies[e_rowCount * e_columnCount];
|
||||
int32 m_indices[e_rowCount * e_columnCount];
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,209 +1,209 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef WEB_H
|
||||
#define WEB_H
|
||||
|
||||
// This tests distance joints, body destruction, and joint destruction.
|
||||
class Web : public Test
|
||||
{
|
||||
public:
|
||||
Web()
|
||||
{
|
||||
b2Body* ground = NULL;
|
||||
{
|
||||
b2BodyDef bd;
|
||||
ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.5f, 0.5f);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
|
||||
bd.position.Set(-5.0f, 5.0f);
|
||||
m_bodies[0] = m_world->CreateBody(&bd);
|
||||
m_bodies[0]->CreateFixture(&shape, 5.0f);
|
||||
|
||||
bd.position.Set(5.0f, 5.0f);
|
||||
m_bodies[1] = m_world->CreateBody(&bd);
|
||||
m_bodies[1]->CreateFixture(&shape, 5.0f);
|
||||
|
||||
bd.position.Set(5.0f, 15.0f);
|
||||
m_bodies[2] = m_world->CreateBody(&bd);
|
||||
m_bodies[2]->CreateFixture(&shape, 5.0f);
|
||||
|
||||
bd.position.Set(-5.0f, 15.0f);
|
||||
m_bodies[3] = m_world->CreateBody(&bd);
|
||||
m_bodies[3]->CreateFixture(&shape, 5.0f);
|
||||
|
||||
b2DistanceJointDef jd;
|
||||
b2Vec2 p1, p2, d;
|
||||
|
||||
jd.frequencyHz = 2.0f;
|
||||
jd.dampingRatio = 0.0f;
|
||||
|
||||
jd.bodyA = ground;
|
||||
jd.bodyB = m_bodies[0];
|
||||
jd.localAnchorA.Set(-10.0f, 0.0f);
|
||||
jd.localAnchorB.Set(-0.5f, -0.5f);
|
||||
p1 = jd.bodyA->GetWorldPoint(jd.localAnchorA);
|
||||
p2 = jd.bodyB->GetWorldPoint(jd.localAnchorB);
|
||||
d = p2 - p1;
|
||||
jd.length = d.Length();
|
||||
m_joints[0] = m_world->CreateJoint(&jd);
|
||||
|
||||
jd.bodyA = ground;
|
||||
jd.bodyB = m_bodies[1];
|
||||
jd.localAnchorA.Set(10.0f, 0.0f);
|
||||
jd.localAnchorB.Set(0.5f, -0.5f);
|
||||
p1 = jd.bodyA->GetWorldPoint(jd.localAnchorA);
|
||||
p2 = jd.bodyB->GetWorldPoint(jd.localAnchorB);
|
||||
d = p2 - p1;
|
||||
jd.length = d.Length();
|
||||
m_joints[1] = m_world->CreateJoint(&jd);
|
||||
|
||||
jd.bodyA = ground;
|
||||
jd.bodyB = m_bodies[2];
|
||||
jd.localAnchorA.Set(10.0f, 20.0f);
|
||||
jd.localAnchorB.Set(0.5f, 0.5f);
|
||||
p1 = jd.bodyA->GetWorldPoint(jd.localAnchorA);
|
||||
p2 = jd.bodyB->GetWorldPoint(jd.localAnchorB);
|
||||
d = p2 - p1;
|
||||
jd.length = d.Length();
|
||||
m_joints[2] = m_world->CreateJoint(&jd);
|
||||
|
||||
jd.bodyA = ground;
|
||||
jd.bodyB = m_bodies[3];
|
||||
jd.localAnchorA.Set(-10.0f, 20.0f);
|
||||
jd.localAnchorB.Set(-0.5f, 0.5f);
|
||||
p1 = jd.bodyA->GetWorldPoint(jd.localAnchorA);
|
||||
p2 = jd.bodyB->GetWorldPoint(jd.localAnchorB);
|
||||
d = p2 - p1;
|
||||
jd.length = d.Length();
|
||||
m_joints[3] = m_world->CreateJoint(&jd);
|
||||
|
||||
jd.bodyA = m_bodies[0];
|
||||
jd.bodyB = m_bodies[1];
|
||||
jd.localAnchorA.Set(0.5f, 0.0f);
|
||||
jd.localAnchorB.Set(-0.5f, 0.0f);;
|
||||
p1 = jd.bodyA->GetWorldPoint(jd.localAnchorA);
|
||||
p2 = jd.bodyB->GetWorldPoint(jd.localAnchorB);
|
||||
d = p2 - p1;
|
||||
jd.length = d.Length();
|
||||
m_joints[4] = m_world->CreateJoint(&jd);
|
||||
|
||||
jd.bodyA = m_bodies[1];
|
||||
jd.bodyB = m_bodies[2];
|
||||
jd.localAnchorA.Set(0.0f, 0.5f);
|
||||
jd.localAnchorB.Set(0.0f, -0.5f);
|
||||
p1 = jd.bodyA->GetWorldPoint(jd.localAnchorA);
|
||||
p2 = jd.bodyB->GetWorldPoint(jd.localAnchorB);
|
||||
d = p2 - p1;
|
||||
jd.length = d.Length();
|
||||
m_joints[5] = m_world->CreateJoint(&jd);
|
||||
|
||||
jd.bodyA = m_bodies[2];
|
||||
jd.bodyB = m_bodies[3];
|
||||
jd.localAnchorA.Set(-0.5f, 0.0f);
|
||||
jd.localAnchorB.Set(0.5f, 0.0f);
|
||||
p1 = jd.bodyA->GetWorldPoint(jd.localAnchorA);
|
||||
p2 = jd.bodyB->GetWorldPoint(jd.localAnchorB);
|
||||
d = p2 - p1;
|
||||
jd.length = d.Length();
|
||||
m_joints[6] = m_world->CreateJoint(&jd);
|
||||
|
||||
jd.bodyA = m_bodies[3];
|
||||
jd.bodyB = m_bodies[0];
|
||||
jd.localAnchorA.Set(0.0f, -0.5f);
|
||||
jd.localAnchorB.Set(0.0f, 0.5f);
|
||||
p1 = jd.bodyA->GetWorldPoint(jd.localAnchorA);
|
||||
p2 = jd.bodyB->GetWorldPoint(jd.localAnchorB);
|
||||
d = p2 - p1;
|
||||
jd.length = d.Length();
|
||||
m_joints[7] = m_world->CreateJoint(&jd);
|
||||
}
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case 'b':
|
||||
for (int32 i = 0; i < 4; ++i)
|
||||
{
|
||||
if (m_bodies[i])
|
||||
{
|
||||
m_world->DestroyBody(m_bodies[i]);
|
||||
m_bodies[i] = NULL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 'j':
|
||||
for (int32 i = 0; i < 8; ++i)
|
||||
{
|
||||
if (m_joints[i])
|
||||
{
|
||||
m_world->DestroyJoint(m_joints[i]);
|
||||
m_joints[i] = NULL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
Test::Step(settings);
|
||||
m_debugDraw.DrawString(5, m_textLine, "This demonstrates a soft distance joint.");
|
||||
m_textLine += 15;
|
||||
m_debugDraw.DrawString(5, m_textLine, "Press: (b) to delete a body, (j) to delete a joint");
|
||||
m_textLine += 15;
|
||||
}
|
||||
|
||||
void JointDestroyed(b2Joint* joint)
|
||||
{
|
||||
for (int32 i = 0; i < 8; ++i)
|
||||
{
|
||||
if (m_joints[i] == joint)
|
||||
{
|
||||
m_joints[i] = NULL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new Web;
|
||||
}
|
||||
|
||||
b2Body* m_bodies[4];
|
||||
b2Joint* m_joints[8];
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef WEB_H
|
||||
#define WEB_H
|
||||
|
||||
// This tests distance joints, body destruction, and joint destruction.
|
||||
class Web : public Test
|
||||
{
|
||||
public:
|
||||
Web()
|
||||
{
|
||||
b2Body* ground = NULL;
|
||||
{
|
||||
b2BodyDef bd;
|
||||
ground = m_world->CreateBody(&bd);
|
||||
|
||||
b2EdgeShape shape;
|
||||
shape.Set(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
|
||||
ground->CreateFixture(&shape, 0.0f);
|
||||
}
|
||||
|
||||
{
|
||||
b2PolygonShape shape;
|
||||
shape.SetAsBox(0.5f, 0.5f);
|
||||
|
||||
b2BodyDef bd;
|
||||
bd.type = b2_dynamicBody;
|
||||
|
||||
bd.position.Set(-5.0f, 5.0f);
|
||||
m_bodies[0] = m_world->CreateBody(&bd);
|
||||
m_bodies[0]->CreateFixture(&shape, 5.0f);
|
||||
|
||||
bd.position.Set(5.0f, 5.0f);
|
||||
m_bodies[1] = m_world->CreateBody(&bd);
|
||||
m_bodies[1]->CreateFixture(&shape, 5.0f);
|
||||
|
||||
bd.position.Set(5.0f, 15.0f);
|
||||
m_bodies[2] = m_world->CreateBody(&bd);
|
||||
m_bodies[2]->CreateFixture(&shape, 5.0f);
|
||||
|
||||
bd.position.Set(-5.0f, 15.0f);
|
||||
m_bodies[3] = m_world->CreateBody(&bd);
|
||||
m_bodies[3]->CreateFixture(&shape, 5.0f);
|
||||
|
||||
b2DistanceJointDef jd;
|
||||
b2Vec2 p1, p2, d;
|
||||
|
||||
jd.frequencyHz = 2.0f;
|
||||
jd.dampingRatio = 0.0f;
|
||||
|
||||
jd.bodyA = ground;
|
||||
jd.bodyB = m_bodies[0];
|
||||
jd.localAnchorA.Set(-10.0f, 0.0f);
|
||||
jd.localAnchorB.Set(-0.5f, -0.5f);
|
||||
p1 = jd.bodyA->GetWorldPoint(jd.localAnchorA);
|
||||
p2 = jd.bodyB->GetWorldPoint(jd.localAnchorB);
|
||||
d = p2 - p1;
|
||||
jd.length = d.Length();
|
||||
m_joints[0] = m_world->CreateJoint(&jd);
|
||||
|
||||
jd.bodyA = ground;
|
||||
jd.bodyB = m_bodies[1];
|
||||
jd.localAnchorA.Set(10.0f, 0.0f);
|
||||
jd.localAnchorB.Set(0.5f, -0.5f);
|
||||
p1 = jd.bodyA->GetWorldPoint(jd.localAnchorA);
|
||||
p2 = jd.bodyB->GetWorldPoint(jd.localAnchorB);
|
||||
d = p2 - p1;
|
||||
jd.length = d.Length();
|
||||
m_joints[1] = m_world->CreateJoint(&jd);
|
||||
|
||||
jd.bodyA = ground;
|
||||
jd.bodyB = m_bodies[2];
|
||||
jd.localAnchorA.Set(10.0f, 20.0f);
|
||||
jd.localAnchorB.Set(0.5f, 0.5f);
|
||||
p1 = jd.bodyA->GetWorldPoint(jd.localAnchorA);
|
||||
p2 = jd.bodyB->GetWorldPoint(jd.localAnchorB);
|
||||
d = p2 - p1;
|
||||
jd.length = d.Length();
|
||||
m_joints[2] = m_world->CreateJoint(&jd);
|
||||
|
||||
jd.bodyA = ground;
|
||||
jd.bodyB = m_bodies[3];
|
||||
jd.localAnchorA.Set(-10.0f, 20.0f);
|
||||
jd.localAnchorB.Set(-0.5f, 0.5f);
|
||||
p1 = jd.bodyA->GetWorldPoint(jd.localAnchorA);
|
||||
p2 = jd.bodyB->GetWorldPoint(jd.localAnchorB);
|
||||
d = p2 - p1;
|
||||
jd.length = d.Length();
|
||||
m_joints[3] = m_world->CreateJoint(&jd);
|
||||
|
||||
jd.bodyA = m_bodies[0];
|
||||
jd.bodyB = m_bodies[1];
|
||||
jd.localAnchorA.Set(0.5f, 0.0f);
|
||||
jd.localAnchorB.Set(-0.5f, 0.0f);;
|
||||
p1 = jd.bodyA->GetWorldPoint(jd.localAnchorA);
|
||||
p2 = jd.bodyB->GetWorldPoint(jd.localAnchorB);
|
||||
d = p2 - p1;
|
||||
jd.length = d.Length();
|
||||
m_joints[4] = m_world->CreateJoint(&jd);
|
||||
|
||||
jd.bodyA = m_bodies[1];
|
||||
jd.bodyB = m_bodies[2];
|
||||
jd.localAnchorA.Set(0.0f, 0.5f);
|
||||
jd.localAnchorB.Set(0.0f, -0.5f);
|
||||
p1 = jd.bodyA->GetWorldPoint(jd.localAnchorA);
|
||||
p2 = jd.bodyB->GetWorldPoint(jd.localAnchorB);
|
||||
d = p2 - p1;
|
||||
jd.length = d.Length();
|
||||
m_joints[5] = m_world->CreateJoint(&jd);
|
||||
|
||||
jd.bodyA = m_bodies[2];
|
||||
jd.bodyB = m_bodies[3];
|
||||
jd.localAnchorA.Set(-0.5f, 0.0f);
|
||||
jd.localAnchorB.Set(0.5f, 0.0f);
|
||||
p1 = jd.bodyA->GetWorldPoint(jd.localAnchorA);
|
||||
p2 = jd.bodyB->GetWorldPoint(jd.localAnchorB);
|
||||
d = p2 - p1;
|
||||
jd.length = d.Length();
|
||||
m_joints[6] = m_world->CreateJoint(&jd);
|
||||
|
||||
jd.bodyA = m_bodies[3];
|
||||
jd.bodyB = m_bodies[0];
|
||||
jd.localAnchorA.Set(0.0f, -0.5f);
|
||||
jd.localAnchorB.Set(0.0f, 0.5f);
|
||||
p1 = jd.bodyA->GetWorldPoint(jd.localAnchorA);
|
||||
p2 = jd.bodyB->GetWorldPoint(jd.localAnchorB);
|
||||
d = p2 - p1;
|
||||
jd.length = d.Length();
|
||||
m_joints[7] = m_world->CreateJoint(&jd);
|
||||
}
|
||||
}
|
||||
|
||||
void Keyboard(unsigned char key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case 'b':
|
||||
for (int32 i = 0; i < 4; ++i)
|
||||
{
|
||||
if (m_bodies[i])
|
||||
{
|
||||
m_world->DestroyBody(m_bodies[i]);
|
||||
m_bodies[i] = NULL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 'j':
|
||||
for (int32 i = 0; i < 8; ++i)
|
||||
{
|
||||
if (m_joints[i])
|
||||
{
|
||||
m_world->DestroyJoint(m_joints[i]);
|
||||
m_joints[i] = NULL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Step(Settings* settings)
|
||||
{
|
||||
Test::Step(settings);
|
||||
m_debugDraw.DrawString(5, m_textLine, "This demonstrates a soft distance joint.");
|
||||
m_textLine += 15;
|
||||
m_debugDraw.DrawString(5, m_textLine, "Press: (b) to delete a body, (j) to delete a joint");
|
||||
m_textLine += 15;
|
||||
}
|
||||
|
||||
void JointDestroyed(b2Joint* joint)
|
||||
{
|
||||
for (int32 i = 0; i < 8; ++i)
|
||||
{
|
||||
if (m_joints[i] == joint)
|
||||
{
|
||||
m_joints[i] = NULL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static Test* Create()
|
||||
{
|
||||
return new Web;
|
||||
}
|
||||
|
||||
b2Body* m_bodies[4];
|
||||
b2Joint* m_joints[8];
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,246 +1,245 @@
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE examples.
|
||||
Copyright (c) 2020 - Raw Material Software Limited
|
||||
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
To use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES,
|
||||
WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR
|
||||
PURPOSE, ARE DISCLAIMED.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <JuceHeader.h>
|
||||
|
||||
#ifndef PIP_DEMO_UTILITIES_INCLUDED
|
||||
#define PIP_DEMO_UTILITIES_INCLUDED 1
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
/*
|
||||
This file contains a bunch of miscellaneous utilities that are
|
||||
used by the various demos.
|
||||
*/
|
||||
|
||||
//==============================================================================
|
||||
inline Colour getRandomColour (float brightness) noexcept
|
||||
{
|
||||
return Colour::fromHSV (Random::getSystemRandom().nextFloat(), 0.5f, brightness, 1.0f);
|
||||
}
|
||||
|
||||
inline Colour getRandomBrightColour() noexcept { return getRandomColour (0.8f); }
|
||||
inline Colour getRandomDarkColour() noexcept { return getRandomColour (0.3f); }
|
||||
|
||||
inline Colour getUIColourIfAvailable (LookAndFeel_V4::ColourScheme::UIColour uiColour, Colour fallback = Colour (0xff4d4d4d)) noexcept
|
||||
{
|
||||
if (auto* v4 = dynamic_cast<LookAndFeel_V4*> (&LookAndFeel::getDefaultLookAndFeel()))
|
||||
return v4->getCurrentColourScheme().getUIColour (uiColour);
|
||||
|
||||
return fallback;
|
||||
}
|
||||
|
||||
inline File getExamplesDirectory() noexcept
|
||||
{
|
||||
#ifdef PIP_JUCE_EXAMPLES_DIRECTORY
|
||||
MemoryOutputStream mo;
|
||||
|
||||
auto success = Base64::convertFromBase64 (mo, JUCE_STRINGIFY (PIP_JUCE_EXAMPLES_DIRECTORY));
|
||||
ignoreUnused (success);
|
||||
jassert (success);
|
||||
|
||||
return mo.toString();
|
||||
#elif defined PIP_JUCE_EXAMPLES_DIRECTORY_STRING
|
||||
return File { CharPointer_UTF8 { PIP_JUCE_EXAMPLES_DIRECTORY_STRING } };
|
||||
#else
|
||||
auto currentFile = File::getSpecialLocation (File::SpecialLocationType::currentApplicationFile);
|
||||
auto exampleDir = currentFile.getParentDirectory().getChildFile ("examples");
|
||||
|
||||
if (exampleDir.exists())
|
||||
return exampleDir;
|
||||
|
||||
// keep track of the number of parent directories so we don't go on endlessly
|
||||
for (int numTries = 0; numTries < 15; ++numTries)
|
||||
{
|
||||
if (currentFile.getFileName() == "examples")
|
||||
return currentFile;
|
||||
|
||||
const auto sibling = currentFile.getSiblingFile ("examples");
|
||||
|
||||
if (sibling.exists())
|
||||
return sibling;
|
||||
|
||||
currentFile = currentFile.getParentDirectory();
|
||||
}
|
||||
|
||||
return currentFile;
|
||||
#endif
|
||||
}
|
||||
|
||||
inline std::unique_ptr<InputStream> createAssetInputStream (const char* resourcePath)
|
||||
{
|
||||
#if JUCE_ANDROID
|
||||
ZipFile apkZip (File::getSpecialLocation (File::invokedExecutableFile));
|
||||
return std::unique_ptr<InputStream> (apkZip.createStreamForEntry (apkZip.getIndexOfFileName ("assets/" + String (resourcePath))));
|
||||
#else
|
||||
#if JUCE_IOS
|
||||
auto assetsDir = File::getSpecialLocation (File::currentExecutableFile)
|
||||
.getParentDirectory().getChildFile ("Assets");
|
||||
#elif JUCE_MAC
|
||||
auto assetsDir = File::getSpecialLocation (File::currentExecutableFile)
|
||||
.getParentDirectory().getParentDirectory().getChildFile ("Resources").getChildFile ("Assets");
|
||||
|
||||
if (! assetsDir.exists())
|
||||
assetsDir = getExamplesDirectory().getChildFile ("Assets");
|
||||
#else
|
||||
auto assetsDir = getExamplesDirectory().getChildFile ("Assets");
|
||||
#endif
|
||||
|
||||
auto resourceFile = assetsDir.getChildFile (resourcePath);
|
||||
jassert (resourceFile.existsAsFile());
|
||||
|
||||
return resourceFile.createInputStream();
|
||||
#endif
|
||||
}
|
||||
|
||||
inline Image getImageFromAssets (const char* assetName)
|
||||
{
|
||||
auto hashCode = (String (assetName) + "@juce_demo_assets").hashCode64();
|
||||
auto img = ImageCache::getFromHashCode (hashCode);
|
||||
|
||||
if (img.isNull())
|
||||
{
|
||||
std::unique_ptr<InputStream> juceIconStream (createAssetInputStream (assetName));
|
||||
|
||||
if (juceIconStream == nullptr)
|
||||
return {};
|
||||
|
||||
img = ImageFileFormat::loadFrom (*juceIconStream);
|
||||
|
||||
ImageCache::addImageToCache (img, hashCode);
|
||||
}
|
||||
|
||||
return img;
|
||||
}
|
||||
|
||||
inline String loadEntireAssetIntoString (const char* assetName)
|
||||
{
|
||||
std::unique_ptr<InputStream> input (createAssetInputStream (assetName));
|
||||
|
||||
if (input == nullptr)
|
||||
return {};
|
||||
|
||||
return input->readString();
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
inline Path getJUCELogoPath()
|
||||
{
|
||||
return Drawable::parseSVGPath (
|
||||
"M72.87 84.28A42.36 42.36 0 0130.4 42.14a42.48 42.48 0 0184.95 0 42.36 42.36 0 01-42.48 42.14zm0-78.67A36.74 36.74 0 0036 42.14a36.88 36.88 0 0073.75 0A36.75 36.75 0 0072.87 5.61z"
|
||||
"M77.62 49.59a177.77 177.77 0 008.74 18.93A4.38 4.38 0 0092.69 70a34.5 34.5 0 008.84-9 4.3 4.3 0 00-2.38-6.49A176.73 176.73 0 0180 47.32a1.78 1.78 0 00-2.38 2.27zM81.05 44.27a169.68 169.68 0 0020.13 7.41 4.39 4.39 0 005.52-3.41 34.42 34.42 0 00.55-6.13 33.81 33.81 0 00-.67-6.72 4.37 4.37 0 00-6.31-3A192.32 192.32 0 0181.1 41a1.76 1.76 0 00-.05 3.27zM74.47 50.44a1.78 1.78 0 00-3.29 0 165.54 165.54 0 00-7.46 19.89 4.33 4.33 0 003.47 5.48 35.49 35.49 0 005.68.46 34.44 34.44 0 007.13-.79 4.32 4.32 0 003-6.25 187.83 187.83 0 01-8.53-18.79zM71.59 34.12a1.78 1.78 0 003.29.05 163.9 163.9 0 007.52-20.11A4.34 4.34 0 0079 8.59a35.15 35.15 0 00-13.06.17 4.32 4.32 0 00-3 6.26 188.41 188.41 0 018.65 19.1zM46.32 30.3a176.2 176.2 0 0120 7.48 1.78 1.78 0 002.37-2.28 180.72 180.72 0 00-9.13-19.84 4.38 4.38 0 00-6.33-1.47 34.27 34.27 0 00-9.32 9.65 4.31 4.31 0 002.41 6.46zM68.17 49.18a1.77 1.77 0 00-2.29-2.34 181.71 181.71 0 00-19.51 8.82A4.3 4.3 0 0044.91 62a34.36 34.36 0 009.42 8.88 4.36 4.36 0 006.5-2.38 175.11 175.11 0 017.34-19.32zM77.79 35.59a1.78 1.78 0 002.3 2.35 182.51 182.51 0 0019.6-8.88 4.3 4.3 0 001.5-6.25 34.4 34.4 0 00-9.41-9.14A4.36 4.36 0 0085.24 16a174.51 174.51 0 01-7.45 19.59zM64.69 40.6a167.72 167.72 0 00-20.22-7.44A4.36 4.36 0 0039 36.6a33.68 33.68 0 00-.45 5.54 34 34 0 00.81 7.4 4.36 4.36 0 006.28 2.84 189.19 189.19 0 0119-8.52 1.76 1.76 0 00.05-3.26zM20 129.315c0 5-2.72 8.16-7.11 8.16-2.37 0-4.17-1-6.2-3.56l-.69-.78-6 5 .57.76c3.25 4.36 7.16 6.39 12.31 6.39 9 0 15.34-6.57 15.34-16v-28.1H20zM61.69 126.505c0 6.66-3.76 11-9.57 11-5.81 0-9.56-4.31-9.56-11v-25.32h-8.23v25.69c0 10.66 7.4 18.4 17.6 18.4 10 0 17.61-7.72 18-18.4v-25.69h-8.24zM106.83 134.095c-3.58 2.43-6.18 3.38-9.25 3.38a14.53 14.53 0 010-29c3.24 0 5.66.88 9.25 3.38l.76.53 4.78-6-.75-.62a22.18 22.18 0 00-14.22-5.1 22.33 22.33 0 100 44.65 21.53 21.53 0 0014.39-5.08l.81-.64-5-6zM145.75 137.285h-19.06v-10.72h18.3v-7.61h-18.3v-10.16h19.06v-7.61h-27.28v43.53h27.28z"
|
||||
"M68.015 83.917c-7.723-.902-15.472-4.123-21.566-8.966-8.475-6.736-14.172-16.823-15.574-27.575C29.303 35.31 33.538 22.7 42.21 13.631 49.154 6.368 58.07 1.902 68.042.695c2.15-.26 7.524-.26 9.675 0 12.488 1.512 23.464 8.25 30.437 18.686 8.332 12.471 9.318 28.123 2.605 41.368-2.28 4.5-4.337 7.359-7.85 10.909A42.273 42.273 0 0177.613 83.92c-2.027.227-7.644.225-9.598-.003zm7.823-5.596c8.435-.415 17.446-4.678 23.683-11.205 5.976-6.254 9.35-13.723 10.181-22.537.632-6.705-1.346-14.948-5.065-21.108C98.88 13.935 89.397 7.602 78.34 5.906c-2.541-.39-8.398-.386-10.96.006C53.54 8.034 42.185 17.542 37.81 30.67c-2.807 8.426-2.421 17.267 1.11 25.444 4.877 11.297 14.959 19.41 26.977 21.709 2.136.408 6.1.755 7.377.645.325-.028 1.48-.094 2.564-.147z"
|
||||
);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
#if JUCE_MODULE_AVAILABLE_juce_gui_extra
|
||||
inline CodeEditorComponent::ColourScheme getDarkCodeEditorColourScheme()
|
||||
{
|
||||
struct Type
|
||||
{
|
||||
const char* name;
|
||||
juce::uint32 colour;
|
||||
};
|
||||
|
||||
const Type types[] =
|
||||
{
|
||||
{ "Error", 0xffe60000 },
|
||||
{ "Comment", 0xff72d20c },
|
||||
{ "Keyword", 0xffee6f6f },
|
||||
{ "Operator", 0xffc4eb19 },
|
||||
{ "Identifier", 0xffcfcfcf },
|
||||
{ "Integer", 0xff42c8c4 },
|
||||
{ "Float", 0xff885500 },
|
||||
{ "String", 0xffbc45dd },
|
||||
{ "Bracket", 0xff058202 },
|
||||
{ "Punctuation", 0xffcfbeff },
|
||||
{ "Preprocessor Text", 0xfff8f631 }
|
||||
};
|
||||
|
||||
CodeEditorComponent::ColourScheme cs;
|
||||
|
||||
for (auto& t : types)
|
||||
cs.set (t.name, Colour (t.colour));
|
||||
|
||||
return cs;
|
||||
}
|
||||
|
||||
inline CodeEditorComponent::ColourScheme getLightCodeEditorColourScheme()
|
||||
{
|
||||
struct Type
|
||||
{
|
||||
const char* name;
|
||||
juce::uint32 colour;
|
||||
};
|
||||
|
||||
const Type types[] =
|
||||
{
|
||||
{ "Error", 0xffcc0000 },
|
||||
{ "Comment", 0xff00aa00 },
|
||||
{ "Keyword", 0xff0000cc },
|
||||
{ "Operator", 0xff225500 },
|
||||
{ "Identifier", 0xff000000 },
|
||||
{ "Integer", 0xff880000 },
|
||||
{ "Float", 0xff885500 },
|
||||
{ "String", 0xff990099 },
|
||||
{ "Bracket", 0xff000055 },
|
||||
{ "Punctuation", 0xff004400 },
|
||||
{ "Preprocessor Text", 0xff660000 }
|
||||
};
|
||||
|
||||
CodeEditorComponent::ColourScheme cs;
|
||||
|
||||
for (auto& t : types)
|
||||
cs.set (t.name, Colour (t.colour));
|
||||
|
||||
return cs;
|
||||
}
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
// This is basically a sawtooth wave generator - maps a value that bounces between
|
||||
// 0.0 and 1.0 at a random speed
|
||||
struct BouncingNumber
|
||||
{
|
||||
BouncingNumber()
|
||||
: speed (0.0004 + 0.0007 * Random::getSystemRandom().nextDouble()),
|
||||
phase (Random::getSystemRandom().nextDouble())
|
||||
{
|
||||
}
|
||||
|
||||
float getValue() const
|
||||
{
|
||||
double v = fmod (phase + speed * Time::getMillisecondCounterHiRes(), 2.0);
|
||||
return (float) (v >= 1.0 ? (2.0 - v) : v);
|
||||
}
|
||||
|
||||
protected:
|
||||
double speed, phase;
|
||||
};
|
||||
|
||||
struct SlowerBouncingNumber : public BouncingNumber
|
||||
{
|
||||
SlowerBouncingNumber()
|
||||
{
|
||||
speed *= 0.3;
|
||||
}
|
||||
};
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE examples.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
To use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES,
|
||||
WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR
|
||||
PURPOSE, ARE DISCLAIMED.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#ifndef PIP_DEMO_UTILITIES_INCLUDED
|
||||
#define PIP_DEMO_UTILITIES_INCLUDED 1
|
||||
|
||||
#include <JuceHeader.h>
|
||||
|
||||
//==============================================================================
|
||||
/*
|
||||
This file contains a bunch of miscellaneous utilities that are
|
||||
used by the various demos.
|
||||
*/
|
||||
|
||||
//==============================================================================
|
||||
inline Colour getRandomColour (float brightness) noexcept
|
||||
{
|
||||
return Colour::fromHSV (Random::getSystemRandom().nextFloat(), 0.5f, brightness, 1.0f);
|
||||
}
|
||||
|
||||
inline Colour getRandomBrightColour() noexcept { return getRandomColour (0.8f); }
|
||||
inline Colour getRandomDarkColour() noexcept { return getRandomColour (0.3f); }
|
||||
|
||||
inline Colour getUIColourIfAvailable (LookAndFeel_V4::ColourScheme::UIColour uiColour, Colour fallback = Colour (0xff4d4d4d)) noexcept
|
||||
{
|
||||
if (auto* v4 = dynamic_cast<LookAndFeel_V4*> (&LookAndFeel::getDefaultLookAndFeel()))
|
||||
return v4->getCurrentColourScheme().getUIColour (uiColour);
|
||||
|
||||
return fallback;
|
||||
}
|
||||
|
||||
inline File getExamplesDirectory() noexcept
|
||||
{
|
||||
#ifdef PIP_JUCE_EXAMPLES_DIRECTORY
|
||||
MemoryOutputStream mo;
|
||||
|
||||
auto success = Base64::convertFromBase64 (mo, JUCE_STRINGIFY (PIP_JUCE_EXAMPLES_DIRECTORY));
|
||||
ignoreUnused (success);
|
||||
jassert (success);
|
||||
|
||||
return mo.toString();
|
||||
#elif defined PIP_JUCE_EXAMPLES_DIRECTORY_STRING
|
||||
return File { CharPointer_UTF8 { PIP_JUCE_EXAMPLES_DIRECTORY_STRING } };
|
||||
#else
|
||||
auto currentFile = File::getSpecialLocation (File::SpecialLocationType::currentApplicationFile);
|
||||
auto exampleDir = currentFile.getParentDirectory().getChildFile ("examples");
|
||||
|
||||
if (exampleDir.exists())
|
||||
return exampleDir;
|
||||
|
||||
// keep track of the number of parent directories so we don't go on endlessly
|
||||
for (int numTries = 0; numTries < 15; ++numTries)
|
||||
{
|
||||
if (currentFile.getFileName() == "examples")
|
||||
return currentFile;
|
||||
|
||||
const auto sibling = currentFile.getSiblingFile ("examples");
|
||||
|
||||
if (sibling.exists())
|
||||
return sibling;
|
||||
|
||||
currentFile = currentFile.getParentDirectory();
|
||||
}
|
||||
|
||||
return currentFile;
|
||||
#endif
|
||||
}
|
||||
|
||||
inline std::unique_ptr<InputStream> createAssetInputStream (const char* resourcePath)
|
||||
{
|
||||
#if JUCE_ANDROID
|
||||
ZipFile apkZip (File::getSpecialLocation (File::invokedExecutableFile));
|
||||
return std::unique_ptr<InputStream> (apkZip.createStreamForEntry (apkZip.getIndexOfFileName ("assets/" + String (resourcePath))));
|
||||
#else
|
||||
#if JUCE_IOS
|
||||
auto assetsDir = File::getSpecialLocation (File::currentExecutableFile)
|
||||
.getParentDirectory().getChildFile ("Assets");
|
||||
#elif JUCE_MAC
|
||||
auto assetsDir = File::getSpecialLocation (File::currentExecutableFile)
|
||||
.getParentDirectory().getParentDirectory().getChildFile ("Resources").getChildFile ("Assets");
|
||||
|
||||
if (! assetsDir.exists())
|
||||
assetsDir = getExamplesDirectory().getChildFile ("Assets");
|
||||
#else
|
||||
auto assetsDir = getExamplesDirectory().getChildFile ("Assets");
|
||||
#endif
|
||||
|
||||
auto resourceFile = assetsDir.getChildFile (resourcePath);
|
||||
jassert (resourceFile.existsAsFile());
|
||||
|
||||
return resourceFile.createInputStream();
|
||||
#endif
|
||||
}
|
||||
|
||||
inline Image getImageFromAssets (const char* assetName)
|
||||
{
|
||||
auto hashCode = (String (assetName) + "@juce_demo_assets").hashCode64();
|
||||
auto img = ImageCache::getFromHashCode (hashCode);
|
||||
|
||||
if (img.isNull())
|
||||
{
|
||||
std::unique_ptr<InputStream> juceIconStream (createAssetInputStream (assetName));
|
||||
|
||||
if (juceIconStream == nullptr)
|
||||
return {};
|
||||
|
||||
img = ImageFileFormat::loadFrom (*juceIconStream);
|
||||
|
||||
ImageCache::addImageToCache (img, hashCode);
|
||||
}
|
||||
|
||||
return img;
|
||||
}
|
||||
|
||||
inline String loadEntireAssetIntoString (const char* assetName)
|
||||
{
|
||||
std::unique_ptr<InputStream> input (createAssetInputStream (assetName));
|
||||
|
||||
if (input == nullptr)
|
||||
return {};
|
||||
|
||||
return input->readString();
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
inline Path getJUCELogoPath()
|
||||
{
|
||||
return Drawable::parseSVGPath (
|
||||
"M72.87 84.28A42.36 42.36 0 0130.4 42.14a42.48 42.48 0 0184.95 0 42.36 42.36 0 01-42.48 42.14zm0-78.67A36.74 36.74 0 0036 42.14a36.88 36.88 0 0073.75 0A36.75 36.75 0 0072.87 5.61z"
|
||||
"M77.62 49.59a177.77 177.77 0 008.74 18.93A4.38 4.38 0 0092.69 70a34.5 34.5 0 008.84-9 4.3 4.3 0 00-2.38-6.49A176.73 176.73 0 0180 47.32a1.78 1.78 0 00-2.38 2.27zM81.05 44.27a169.68 169.68 0 0020.13 7.41 4.39 4.39 0 005.52-3.41 34.42 34.42 0 00.55-6.13 33.81 33.81 0 00-.67-6.72 4.37 4.37 0 00-6.31-3A192.32 192.32 0 0181.1 41a1.76 1.76 0 00-.05 3.27zM74.47 50.44a1.78 1.78 0 00-3.29 0 165.54 165.54 0 00-7.46 19.89 4.33 4.33 0 003.47 5.48 35.49 35.49 0 005.68.46 34.44 34.44 0 007.13-.79 4.32 4.32 0 003-6.25 187.83 187.83 0 01-8.53-18.79zM71.59 34.12a1.78 1.78 0 003.29.05 163.9 163.9 0 007.52-20.11A4.34 4.34 0 0079 8.59a35.15 35.15 0 00-13.06.17 4.32 4.32 0 00-3 6.26 188.41 188.41 0 018.65 19.1zM46.32 30.3a176.2 176.2 0 0120 7.48 1.78 1.78 0 002.37-2.28 180.72 180.72 0 00-9.13-19.84 4.38 4.38 0 00-6.33-1.47 34.27 34.27 0 00-9.32 9.65 4.31 4.31 0 002.41 6.46zM68.17 49.18a1.77 1.77 0 00-2.29-2.34 181.71 181.71 0 00-19.51 8.82A4.3 4.3 0 0044.91 62a34.36 34.36 0 009.42 8.88 4.36 4.36 0 006.5-2.38 175.11 175.11 0 017.34-19.32zM77.79 35.59a1.78 1.78 0 002.3 2.35 182.51 182.51 0 0019.6-8.88 4.3 4.3 0 001.5-6.25 34.4 34.4 0 00-9.41-9.14A4.36 4.36 0 0085.24 16a174.51 174.51 0 01-7.45 19.59zM64.69 40.6a167.72 167.72 0 00-20.22-7.44A4.36 4.36 0 0039 36.6a33.68 33.68 0 00-.45 5.54 34 34 0 00.81 7.4 4.36 4.36 0 006.28 2.84 189.19 189.19 0 0119-8.52 1.76 1.76 0 00.05-3.26zM20 129.315c0 5-2.72 8.16-7.11 8.16-2.37 0-4.17-1-6.2-3.56l-.69-.78-6 5 .57.76c3.25 4.36 7.16 6.39 12.31 6.39 9 0 15.34-6.57 15.34-16v-28.1H20zM61.69 126.505c0 6.66-3.76 11-9.57 11-5.81 0-9.56-4.31-9.56-11v-25.32h-8.23v25.69c0 10.66 7.4 18.4 17.6 18.4 10 0 17.61-7.72 18-18.4v-25.69h-8.24zM106.83 134.095c-3.58 2.43-6.18 3.38-9.25 3.38a14.53 14.53 0 010-29c3.24 0 5.66.88 9.25 3.38l.76.53 4.78-6-.75-.62a22.18 22.18 0 00-14.22-5.1 22.33 22.33 0 100 44.65 21.53 21.53 0 0014.39-5.08l.81-.64-5-6zM145.75 137.285h-19.06v-10.72h18.3v-7.61h-18.3v-10.16h19.06v-7.61h-27.28v43.53h27.28z"
|
||||
"M68.015 83.917c-7.723-.902-15.472-4.123-21.566-8.966-8.475-6.736-14.172-16.823-15.574-27.575C29.303 35.31 33.538 22.7 42.21 13.631 49.154 6.368 58.07 1.902 68.042.695c2.15-.26 7.524-.26 9.675 0 12.488 1.512 23.464 8.25 30.437 18.686 8.332 12.471 9.318 28.123 2.605 41.368-2.28 4.5-4.337 7.359-7.85 10.909A42.273 42.273 0 0177.613 83.92c-2.027.227-7.644.225-9.598-.003zm7.823-5.596c8.435-.415 17.446-4.678 23.683-11.205 5.976-6.254 9.35-13.723 10.181-22.537.632-6.705-1.346-14.948-5.065-21.108C98.88 13.935 89.397 7.602 78.34 5.906c-2.541-.39-8.398-.386-10.96.006C53.54 8.034 42.185 17.542 37.81 30.67c-2.807 8.426-2.421 17.267 1.11 25.444 4.877 11.297 14.959 19.41 26.977 21.709 2.136.408 6.1.755 7.377.645.325-.028 1.48-.094 2.564-.147z"
|
||||
);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
#if JUCE_MODULE_AVAILABLE_juce_gui_extra
|
||||
inline CodeEditorComponent::ColourScheme getDarkCodeEditorColourScheme()
|
||||
{
|
||||
struct Type
|
||||
{
|
||||
const char* name;
|
||||
juce::uint32 colour;
|
||||
};
|
||||
|
||||
const Type types[] =
|
||||
{
|
||||
{ "Error", 0xffe60000 },
|
||||
{ "Comment", 0xff72d20c },
|
||||
{ "Keyword", 0xffee6f6f },
|
||||
{ "Operator", 0xffc4eb19 },
|
||||
{ "Identifier", 0xffcfcfcf },
|
||||
{ "Integer", 0xff42c8c4 },
|
||||
{ "Float", 0xff885500 },
|
||||
{ "String", 0xffbc45dd },
|
||||
{ "Bracket", 0xff058202 },
|
||||
{ "Punctuation", 0xffcfbeff },
|
||||
{ "Preprocessor Text", 0xfff8f631 }
|
||||
};
|
||||
|
||||
CodeEditorComponent::ColourScheme cs;
|
||||
|
||||
for (auto& t : types)
|
||||
cs.set (t.name, Colour (t.colour));
|
||||
|
||||
return cs;
|
||||
}
|
||||
|
||||
inline CodeEditorComponent::ColourScheme getLightCodeEditorColourScheme()
|
||||
{
|
||||
struct Type
|
||||
{
|
||||
const char* name;
|
||||
juce::uint32 colour;
|
||||
};
|
||||
|
||||
const Type types[] =
|
||||
{
|
||||
{ "Error", 0xffcc0000 },
|
||||
{ "Comment", 0xff00aa00 },
|
||||
{ "Keyword", 0xff0000cc },
|
||||
{ "Operator", 0xff225500 },
|
||||
{ "Identifier", 0xff000000 },
|
||||
{ "Integer", 0xff880000 },
|
||||
{ "Float", 0xff885500 },
|
||||
{ "String", 0xff990099 },
|
||||
{ "Bracket", 0xff000055 },
|
||||
{ "Punctuation", 0xff004400 },
|
||||
{ "Preprocessor Text", 0xff660000 }
|
||||
};
|
||||
|
||||
CodeEditorComponent::ColourScheme cs;
|
||||
|
||||
for (auto& t : types)
|
||||
cs.set (t.name, Colour (t.colour));
|
||||
|
||||
return cs;
|
||||
}
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
// This is basically a sawtooth wave generator - maps a value that bounces between
|
||||
// 0.0 and 1.0 at a random speed
|
||||
struct BouncingNumber
|
||||
{
|
||||
BouncingNumber()
|
||||
: speed (0.0004 + 0.0007 * Random::getSystemRandom().nextDouble()),
|
||||
phase (Random::getSystemRandom().nextDouble())
|
||||
{
|
||||
}
|
||||
|
||||
float getValue() const
|
||||
{
|
||||
double v = fmod (phase + speed * Time::getMillisecondCounterHiRes(), 2.0);
|
||||
return (float) (v >= 1.0 ? (2.0 - v) : v);
|
||||
}
|
||||
|
||||
protected:
|
||||
double speed, phase;
|
||||
};
|
||||
|
||||
struct SlowerBouncingNumber : public BouncingNumber
|
||||
{
|
||||
SlowerBouncingNumber()
|
||||
{
|
||||
speed *= 0.3;
|
||||
}
|
||||
};
|
||||
|
||||
#endif // PIP_DEMO_UTILITIES_INCLUDED
|
||||
|
||||
@@ -1,365 +1,365 @@
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE examples.
|
||||
Copyright (c) 2020 - Raw Material Software Limited
|
||||
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
To use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES,
|
||||
WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR
|
||||
PURPOSE, ARE DISCLAIMED.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <map>
|
||||
|
||||
//==============================================================================
|
||||
/**
|
||||
This is a quick-and-dirty parser for the 3D OBJ file format.
|
||||
|
||||
Just call load() and if there aren't any errors, the 'shapes' array should
|
||||
be filled with all the shape objects that were loaded from the file.
|
||||
*/
|
||||
class WavefrontObjFile
|
||||
{
|
||||
public:
|
||||
WavefrontObjFile() {}
|
||||
|
||||
Result load (const String& objFileContent)
|
||||
{
|
||||
shapes.clear();
|
||||
return parseObjFile (StringArray::fromLines (objFileContent));
|
||||
}
|
||||
|
||||
Result load (const File& file)
|
||||
{
|
||||
sourceFile = file;
|
||||
return load (file.loadFileAsString());
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
typedef juce::uint32 Index;
|
||||
|
||||
struct Vertex { float x, y, z; };
|
||||
struct TextureCoord { float x, y; };
|
||||
|
||||
struct Mesh
|
||||
{
|
||||
Array<Vertex> vertices, normals;
|
||||
Array<TextureCoord> textureCoords;
|
||||
Array<Index> indices;
|
||||
};
|
||||
|
||||
struct Material
|
||||
{
|
||||
Material() noexcept
|
||||
{
|
||||
zerostruct (ambient);
|
||||
zerostruct (diffuse);
|
||||
zerostruct (specular);
|
||||
zerostruct (transmittance);
|
||||
zerostruct (emission);
|
||||
}
|
||||
|
||||
String name;
|
||||
|
||||
Vertex ambient, diffuse, specular, transmittance, emission;
|
||||
float shininess = 1.0f, refractiveIndex = 0.0f;
|
||||
|
||||
String ambientTextureName, diffuseTextureName,
|
||||
specularTextureName, normalTextureName;
|
||||
|
||||
StringPairArray parameters;
|
||||
};
|
||||
|
||||
struct Shape
|
||||
{
|
||||
String name;
|
||||
Mesh mesh;
|
||||
Material material;
|
||||
};
|
||||
|
||||
OwnedArray<Shape> shapes;
|
||||
|
||||
private:
|
||||
//==============================================================================
|
||||
File sourceFile;
|
||||
|
||||
struct TripleIndex
|
||||
{
|
||||
TripleIndex() noexcept {}
|
||||
|
||||
bool operator< (const TripleIndex& other) const noexcept
|
||||
{
|
||||
if (this == &other)
|
||||
return false;
|
||||
|
||||
if (vertexIndex != other.vertexIndex)
|
||||
return vertexIndex < other.vertexIndex;
|
||||
|
||||
if (textureIndex != other.textureIndex)
|
||||
return textureIndex < other.textureIndex;
|
||||
|
||||
return normalIndex < other.normalIndex;
|
||||
}
|
||||
|
||||
int vertexIndex = -1, textureIndex = -1, normalIndex = -1;
|
||||
};
|
||||
|
||||
struct IndexMap
|
||||
{
|
||||
std::map<TripleIndex, Index> map;
|
||||
|
||||
Index getIndexFor (TripleIndex i, Mesh& newMesh, const Mesh& srcMesh)
|
||||
{
|
||||
const std::map<TripleIndex, Index>::iterator it (map.find (i));
|
||||
|
||||
if (it != map.end())
|
||||
return it->second;
|
||||
|
||||
auto index = (Index) newMesh.vertices.size();
|
||||
|
||||
if (isPositiveAndBelow (i.vertexIndex, srcMesh.vertices.size()))
|
||||
newMesh.vertices.add (srcMesh.vertices.getReference (i.vertexIndex));
|
||||
|
||||
if (isPositiveAndBelow (i.normalIndex, srcMesh.normals.size()))
|
||||
newMesh.normals.add (srcMesh.normals.getReference (i.normalIndex));
|
||||
|
||||
if (isPositiveAndBelow (i.textureIndex, srcMesh.textureCoords.size()))
|
||||
newMesh.textureCoords.add (srcMesh.textureCoords.getReference (i.textureIndex));
|
||||
|
||||
map[i] = index;
|
||||
return index;
|
||||
}
|
||||
};
|
||||
|
||||
static float parseFloat (String::CharPointerType& t)
|
||||
{
|
||||
t.incrementToEndOfWhitespace();
|
||||
return (float) CharacterFunctions::readDoubleValue (t);
|
||||
}
|
||||
|
||||
static Vertex parseVertex (String::CharPointerType t)
|
||||
{
|
||||
Vertex v;
|
||||
v.x = parseFloat (t);
|
||||
v.y = parseFloat (t);
|
||||
v.z = parseFloat (t);
|
||||
return v;
|
||||
}
|
||||
|
||||
static TextureCoord parseTextureCoord (String::CharPointerType t)
|
||||
{
|
||||
TextureCoord tc;
|
||||
tc.x = parseFloat (t);
|
||||
tc.y = parseFloat (t);
|
||||
return tc;
|
||||
}
|
||||
|
||||
static bool matchToken (String::CharPointerType& t, const char* token)
|
||||
{
|
||||
auto len = (int) strlen (token);
|
||||
|
||||
if (CharacterFunctions::compareUpTo (CharPointer_ASCII (token), t, len) == 0)
|
||||
{
|
||||
auto end = t + len;
|
||||
|
||||
if (end.isEmpty() || end.isWhitespace())
|
||||
{
|
||||
t = end.findEndOfWhitespace();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
struct Face
|
||||
{
|
||||
Face (String::CharPointerType t)
|
||||
{
|
||||
while (! t.isEmpty())
|
||||
triples.add (parseTriple (t));
|
||||
}
|
||||
|
||||
Array<TripleIndex> triples;
|
||||
|
||||
void addIndices (Mesh& newMesh, const Mesh& srcMesh, IndexMap& indexMap)
|
||||
{
|
||||
TripleIndex i0 (triples[0]), i1, i2 (triples[1]);
|
||||
|
||||
for (auto i = 2; i < triples.size(); ++i)
|
||||
{
|
||||
i1 = i2;
|
||||
i2 = triples.getReference (i);
|
||||
|
||||
newMesh.indices.add (indexMap.getIndexFor (i0, newMesh, srcMesh));
|
||||
newMesh.indices.add (indexMap.getIndexFor (i1, newMesh, srcMesh));
|
||||
newMesh.indices.add (indexMap.getIndexFor (i2, newMesh, srcMesh));
|
||||
}
|
||||
}
|
||||
|
||||
static TripleIndex parseTriple (String::CharPointerType& t)
|
||||
{
|
||||
TripleIndex i;
|
||||
|
||||
t.incrementToEndOfWhitespace();
|
||||
i.vertexIndex = t.getIntValue32() - 1;
|
||||
t = findEndOfFaceToken (t);
|
||||
|
||||
if (t.isEmpty() || t.getAndAdvance() != '/')
|
||||
return i;
|
||||
|
||||
if (*t == '/')
|
||||
{
|
||||
++t;
|
||||
}
|
||||
else
|
||||
{
|
||||
i.textureIndex = t.getIntValue32() - 1;
|
||||
t = findEndOfFaceToken (t);
|
||||
|
||||
if (t.isEmpty() || t.getAndAdvance() != '/')
|
||||
return i;
|
||||
}
|
||||
|
||||
i.normalIndex = t.getIntValue32() - 1;
|
||||
t = findEndOfFaceToken (t);
|
||||
return i;
|
||||
}
|
||||
|
||||
static String::CharPointerType findEndOfFaceToken (String::CharPointerType t) noexcept
|
||||
{
|
||||
return CharacterFunctions::findEndOfToken (t, CharPointer_ASCII ("/ \t"), String().getCharPointer());
|
||||
}
|
||||
};
|
||||
|
||||
static Shape* parseFaceGroup (const Mesh& srcMesh,
|
||||
Array<Face>& faceGroup,
|
||||
const Material& material,
|
||||
const String& name)
|
||||
{
|
||||
if (faceGroup.size() == 0)
|
||||
return nullptr;
|
||||
|
||||
std::unique_ptr<Shape> shape (new Shape());
|
||||
shape->name = name;
|
||||
shape->material = material;
|
||||
|
||||
IndexMap indexMap;
|
||||
|
||||
for (auto& f : faceGroup)
|
||||
f.addIndices (shape->mesh, srcMesh, indexMap);
|
||||
|
||||
return shape.release();
|
||||
}
|
||||
|
||||
Result parseObjFile (const StringArray& lines)
|
||||
{
|
||||
Mesh mesh;
|
||||
Array<Face> faceGroup;
|
||||
|
||||
Array<Material> knownMaterials;
|
||||
Material lastMaterial;
|
||||
String lastName;
|
||||
|
||||
for (auto lineNum = 0; lineNum < lines.size(); ++lineNum)
|
||||
{
|
||||
auto l = lines[lineNum].getCharPointer().findEndOfWhitespace();
|
||||
|
||||
if (matchToken (l, "v")) { mesh.vertices .add (parseVertex (l)); continue; }
|
||||
if (matchToken (l, "vn")) { mesh.normals .add (parseVertex (l)); continue; }
|
||||
if (matchToken (l, "vt")) { mesh.textureCoords.add (parseTextureCoord (l)); continue; }
|
||||
if (matchToken (l, "f")) { faceGroup .add (Face (l)); continue; }
|
||||
|
||||
if (matchToken (l, "usemtl"))
|
||||
{
|
||||
auto name = String (l).trim();
|
||||
|
||||
for (auto i = knownMaterials.size(); --i >= 0;)
|
||||
{
|
||||
if (knownMaterials.getReference (i).name == name)
|
||||
{
|
||||
lastMaterial = knownMaterials.getReference (i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if (matchToken (l, "mtllib"))
|
||||
{
|
||||
auto r = parseMaterial (knownMaterials, String (l).trim());
|
||||
continue;
|
||||
}
|
||||
|
||||
if (matchToken (l, "g") || matchToken (l, "o"))
|
||||
{
|
||||
if (auto* shape = parseFaceGroup (mesh, faceGroup, lastMaterial, lastName))
|
||||
shapes.add (shape);
|
||||
|
||||
faceGroup.clear();
|
||||
lastName = StringArray::fromTokens (l, " \t", "")[0];
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (auto* shape = parseFaceGroup (mesh, faceGroup, lastMaterial, lastName))
|
||||
shapes.add (shape);
|
||||
|
||||
return Result::ok();
|
||||
}
|
||||
|
||||
Result parseMaterial (Array<Material>& materials, const String& filename)
|
||||
{
|
||||
jassert (sourceFile.exists());
|
||||
auto f = sourceFile.getSiblingFile (filename);
|
||||
|
||||
if (! f.exists())
|
||||
return Result::fail ("Cannot open file: " + filename);
|
||||
|
||||
auto lines = StringArray::fromLines (f.loadFileAsString());
|
||||
|
||||
materials.clear();
|
||||
Material material;
|
||||
|
||||
for (auto line : lines)
|
||||
{
|
||||
auto l = line.getCharPointer().findEndOfWhitespace();
|
||||
|
||||
if (matchToken (l, "newmtl")) { materials.add (material); material.name = String (l).trim(); continue; }
|
||||
|
||||
if (matchToken (l, "Ka")) { material.ambient = parseVertex (l); continue; }
|
||||
if (matchToken (l, "Kd")) { material.diffuse = parseVertex (l); continue; }
|
||||
if (matchToken (l, "Ks")) { material.specular = parseVertex (l); continue; }
|
||||
if (matchToken (l, "Kt")) { material.transmittance = parseVertex (l); continue; }
|
||||
if (matchToken (l, "Ke")) { material.emission = parseVertex (l); continue; }
|
||||
if (matchToken (l, "Ni")) { material.refractiveIndex = parseFloat (l); continue; }
|
||||
if (matchToken (l, "Ns")) { material.shininess = parseFloat (l); continue; }
|
||||
|
||||
if (matchToken (l, "map_Ka")) { material.ambientTextureName = String (l).trim(); continue; }
|
||||
if (matchToken (l, "map_Kd")) { material.diffuseTextureName = String (l).trim(); continue; }
|
||||
if (matchToken (l, "map_Ks")) { material.specularTextureName = String (l).trim(); continue; }
|
||||
if (matchToken (l, "map_Ns")) { material.normalTextureName = String (l).trim(); continue; }
|
||||
|
||||
auto tokens = StringArray::fromTokens (l, " \t", "");
|
||||
|
||||
if (tokens.size() >= 2)
|
||||
material.parameters.set (tokens[0].trim(), tokens[1].trim());
|
||||
}
|
||||
|
||||
materials.add (material);
|
||||
return Result::ok();
|
||||
}
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (WavefrontObjFile)
|
||||
};
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE examples.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
To use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES,
|
||||
WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR
|
||||
PURPOSE, ARE DISCLAIMED.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <map>
|
||||
|
||||
//==============================================================================
|
||||
/**
|
||||
This is a quick-and-dirty parser for the 3D OBJ file format.
|
||||
|
||||
Just call load() and if there aren't any errors, the 'shapes' array should
|
||||
be filled with all the shape objects that were loaded from the file.
|
||||
*/
|
||||
class WavefrontObjFile
|
||||
{
|
||||
public:
|
||||
WavefrontObjFile() {}
|
||||
|
||||
Result load (const String& objFileContent)
|
||||
{
|
||||
shapes.clear();
|
||||
return parseObjFile (StringArray::fromLines (objFileContent));
|
||||
}
|
||||
|
||||
Result load (const File& file)
|
||||
{
|
||||
sourceFile = file;
|
||||
return load (file.loadFileAsString());
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
typedef juce::uint32 Index;
|
||||
|
||||
struct Vertex { float x, y, z; };
|
||||
struct TextureCoord { float x, y; };
|
||||
|
||||
struct Mesh
|
||||
{
|
||||
Array<Vertex> vertices, normals;
|
||||
Array<TextureCoord> textureCoords;
|
||||
Array<Index> indices;
|
||||
};
|
||||
|
||||
struct Material
|
||||
{
|
||||
Material() noexcept
|
||||
{
|
||||
zerostruct (ambient);
|
||||
zerostruct (diffuse);
|
||||
zerostruct (specular);
|
||||
zerostruct (transmittance);
|
||||
zerostruct (emission);
|
||||
}
|
||||
|
||||
String name;
|
||||
|
||||
Vertex ambient, diffuse, specular, transmittance, emission;
|
||||
float shininess = 1.0f, refractiveIndex = 0.0f;
|
||||
|
||||
String ambientTextureName, diffuseTextureName,
|
||||
specularTextureName, normalTextureName;
|
||||
|
||||
StringPairArray parameters;
|
||||
};
|
||||
|
||||
struct Shape
|
||||
{
|
||||
String name;
|
||||
Mesh mesh;
|
||||
Material material;
|
||||
};
|
||||
|
||||
OwnedArray<Shape> shapes;
|
||||
|
||||
private:
|
||||
//==============================================================================
|
||||
File sourceFile;
|
||||
|
||||
struct TripleIndex
|
||||
{
|
||||
TripleIndex() noexcept {}
|
||||
|
||||
bool operator< (const TripleIndex& other) const noexcept
|
||||
{
|
||||
if (this == &other)
|
||||
return false;
|
||||
|
||||
if (vertexIndex != other.vertexIndex)
|
||||
return vertexIndex < other.vertexIndex;
|
||||
|
||||
if (textureIndex != other.textureIndex)
|
||||
return textureIndex < other.textureIndex;
|
||||
|
||||
return normalIndex < other.normalIndex;
|
||||
}
|
||||
|
||||
int vertexIndex = -1, textureIndex = -1, normalIndex = -1;
|
||||
};
|
||||
|
||||
struct IndexMap
|
||||
{
|
||||
std::map<TripleIndex, Index> map;
|
||||
|
||||
Index getIndexFor (TripleIndex i, Mesh& newMesh, const Mesh& srcMesh)
|
||||
{
|
||||
const std::map<TripleIndex, Index>::iterator it (map.find (i));
|
||||
|
||||
if (it != map.end())
|
||||
return it->second;
|
||||
|
||||
auto index = (Index) newMesh.vertices.size();
|
||||
|
||||
if (isPositiveAndBelow (i.vertexIndex, srcMesh.vertices.size()))
|
||||
newMesh.vertices.add (srcMesh.vertices.getReference (i.vertexIndex));
|
||||
|
||||
if (isPositiveAndBelow (i.normalIndex, srcMesh.normals.size()))
|
||||
newMesh.normals.add (srcMesh.normals.getReference (i.normalIndex));
|
||||
|
||||
if (isPositiveAndBelow (i.textureIndex, srcMesh.textureCoords.size()))
|
||||
newMesh.textureCoords.add (srcMesh.textureCoords.getReference (i.textureIndex));
|
||||
|
||||
map[i] = index;
|
||||
return index;
|
||||
}
|
||||
};
|
||||
|
||||
static float parseFloat (String::CharPointerType& t)
|
||||
{
|
||||
t.incrementToEndOfWhitespace();
|
||||
return (float) CharacterFunctions::readDoubleValue (t);
|
||||
}
|
||||
|
||||
static Vertex parseVertex (String::CharPointerType t)
|
||||
{
|
||||
Vertex v;
|
||||
v.x = parseFloat (t);
|
||||
v.y = parseFloat (t);
|
||||
v.z = parseFloat (t);
|
||||
return v;
|
||||
}
|
||||
|
||||
static TextureCoord parseTextureCoord (String::CharPointerType t)
|
||||
{
|
||||
TextureCoord tc;
|
||||
tc.x = parseFloat (t);
|
||||
tc.y = parseFloat (t);
|
||||
return tc;
|
||||
}
|
||||
|
||||
static bool matchToken (String::CharPointerType& t, const char* token)
|
||||
{
|
||||
auto len = (int) strlen (token);
|
||||
|
||||
if (CharacterFunctions::compareUpTo (CharPointer_ASCII (token), t, len) == 0)
|
||||
{
|
||||
auto end = t + len;
|
||||
|
||||
if (end.isEmpty() || end.isWhitespace())
|
||||
{
|
||||
t = end.findEndOfWhitespace();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
struct Face
|
||||
{
|
||||
Face (String::CharPointerType t)
|
||||
{
|
||||
while (! t.isEmpty())
|
||||
triples.add (parseTriple (t));
|
||||
}
|
||||
|
||||
Array<TripleIndex> triples;
|
||||
|
||||
void addIndices (Mesh& newMesh, const Mesh& srcMesh, IndexMap& indexMap)
|
||||
{
|
||||
TripleIndex i0 (triples[0]), i1, i2 (triples[1]);
|
||||
|
||||
for (auto i = 2; i < triples.size(); ++i)
|
||||
{
|
||||
i1 = i2;
|
||||
i2 = triples.getReference (i);
|
||||
|
||||
newMesh.indices.add (indexMap.getIndexFor (i0, newMesh, srcMesh));
|
||||
newMesh.indices.add (indexMap.getIndexFor (i1, newMesh, srcMesh));
|
||||
newMesh.indices.add (indexMap.getIndexFor (i2, newMesh, srcMesh));
|
||||
}
|
||||
}
|
||||
|
||||
static TripleIndex parseTriple (String::CharPointerType& t)
|
||||
{
|
||||
TripleIndex i;
|
||||
|
||||
t.incrementToEndOfWhitespace();
|
||||
i.vertexIndex = t.getIntValue32() - 1;
|
||||
t = findEndOfFaceToken (t);
|
||||
|
||||
if (t.isEmpty() || t.getAndAdvance() != '/')
|
||||
return i;
|
||||
|
||||
if (*t == '/')
|
||||
{
|
||||
++t;
|
||||
}
|
||||
else
|
||||
{
|
||||
i.textureIndex = t.getIntValue32() - 1;
|
||||
t = findEndOfFaceToken (t);
|
||||
|
||||
if (t.isEmpty() || t.getAndAdvance() != '/')
|
||||
return i;
|
||||
}
|
||||
|
||||
i.normalIndex = t.getIntValue32() - 1;
|
||||
t = findEndOfFaceToken (t);
|
||||
return i;
|
||||
}
|
||||
|
||||
static String::CharPointerType findEndOfFaceToken (String::CharPointerType t) noexcept
|
||||
{
|
||||
return CharacterFunctions::findEndOfToken (t, CharPointer_ASCII ("/ \t"), String().getCharPointer());
|
||||
}
|
||||
};
|
||||
|
||||
static Shape* parseFaceGroup (const Mesh& srcMesh,
|
||||
Array<Face>& faceGroup,
|
||||
const Material& material,
|
||||
const String& name)
|
||||
{
|
||||
if (faceGroup.size() == 0)
|
||||
return nullptr;
|
||||
|
||||
std::unique_ptr<Shape> shape (new Shape());
|
||||
shape->name = name;
|
||||
shape->material = material;
|
||||
|
||||
IndexMap indexMap;
|
||||
|
||||
for (auto& f : faceGroup)
|
||||
f.addIndices (shape->mesh, srcMesh, indexMap);
|
||||
|
||||
return shape.release();
|
||||
}
|
||||
|
||||
Result parseObjFile (const StringArray& lines)
|
||||
{
|
||||
Mesh mesh;
|
||||
Array<Face> faceGroup;
|
||||
|
||||
Array<Material> knownMaterials;
|
||||
Material lastMaterial;
|
||||
String lastName;
|
||||
|
||||
for (auto lineNum = 0; lineNum < lines.size(); ++lineNum)
|
||||
{
|
||||
auto l = lines[lineNum].getCharPointer().findEndOfWhitespace();
|
||||
|
||||
if (matchToken (l, "v")) { mesh.vertices .add (parseVertex (l)); continue; }
|
||||
if (matchToken (l, "vn")) { mesh.normals .add (parseVertex (l)); continue; }
|
||||
if (matchToken (l, "vt")) { mesh.textureCoords.add (parseTextureCoord (l)); continue; }
|
||||
if (matchToken (l, "f")) { faceGroup .add (Face (l)); continue; }
|
||||
|
||||
if (matchToken (l, "usemtl"))
|
||||
{
|
||||
auto name = String (l).trim();
|
||||
|
||||
for (auto i = knownMaterials.size(); --i >= 0;)
|
||||
{
|
||||
if (knownMaterials.getReference (i).name == name)
|
||||
{
|
||||
lastMaterial = knownMaterials.getReference (i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if (matchToken (l, "mtllib"))
|
||||
{
|
||||
auto r = parseMaterial (knownMaterials, String (l).trim());
|
||||
continue;
|
||||
}
|
||||
|
||||
if (matchToken (l, "g") || matchToken (l, "o"))
|
||||
{
|
||||
if (auto* shape = parseFaceGroup (mesh, faceGroup, lastMaterial, lastName))
|
||||
shapes.add (shape);
|
||||
|
||||
faceGroup.clear();
|
||||
lastName = StringArray::fromTokens (l, " \t", "")[0];
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (auto* shape = parseFaceGroup (mesh, faceGroup, lastMaterial, lastName))
|
||||
shapes.add (shape);
|
||||
|
||||
return Result::ok();
|
||||
}
|
||||
|
||||
Result parseMaterial (Array<Material>& materials, const String& filename)
|
||||
{
|
||||
jassert (sourceFile.exists());
|
||||
auto f = sourceFile.getSiblingFile (filename);
|
||||
|
||||
if (! f.exists())
|
||||
return Result::fail ("Cannot open file: " + filename);
|
||||
|
||||
auto lines = StringArray::fromLines (f.loadFileAsString());
|
||||
|
||||
materials.clear();
|
||||
Material material;
|
||||
|
||||
for (auto line : lines)
|
||||
{
|
||||
auto l = line.getCharPointer().findEndOfWhitespace();
|
||||
|
||||
if (matchToken (l, "newmtl")) { materials.add (material); material.name = String (l).trim(); continue; }
|
||||
|
||||
if (matchToken (l, "Ka")) { material.ambient = parseVertex (l); continue; }
|
||||
if (matchToken (l, "Kd")) { material.diffuse = parseVertex (l); continue; }
|
||||
if (matchToken (l, "Ks")) { material.specular = parseVertex (l); continue; }
|
||||
if (matchToken (l, "Kt")) { material.transmittance = parseVertex (l); continue; }
|
||||
if (matchToken (l, "Ke")) { material.emission = parseVertex (l); continue; }
|
||||
if (matchToken (l, "Ni")) { material.refractiveIndex = parseFloat (l); continue; }
|
||||
if (matchToken (l, "Ns")) { material.shininess = parseFloat (l); continue; }
|
||||
|
||||
if (matchToken (l, "map_Ka")) { material.ambientTextureName = String (l).trim(); continue; }
|
||||
if (matchToken (l, "map_Kd")) { material.diffuseTextureName = String (l).trim(); continue; }
|
||||
if (matchToken (l, "map_Ks")) { material.specularTextureName = String (l).trim(); continue; }
|
||||
if (matchToken (l, "map_Ns")) { material.normalTextureName = String (l).trim(); continue; }
|
||||
|
||||
auto tokens = StringArray::fromTokens (l, " \t", "");
|
||||
|
||||
if (tokens.size() >= 2)
|
||||
material.parameters.set (tokens[0].trim(), tokens[1].trim());
|
||||
}
|
||||
|
||||
materials.add (material);
|
||||
return Result::ok();
|
||||
}
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (WavefrontObjFile)
|
||||
};
|
||||
|
||||
@@ -11,6 +11,10 @@ endif
|
||||
# (this disables dependency generation if multiple architectures are set)
|
||||
DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD)
|
||||
|
||||
ifndef PKG_CONFIG
|
||||
PKG_CONFIG=pkg-config
|
||||
endif
|
||||
|
||||
ifndef STRIP
|
||||
STRIP=strip
|
||||
endif
|
||||
@@ -35,13 +39,13 @@ ifeq ($(CONFIG),Debug)
|
||||
TARGET_ARCH :=
|
||||
endif
|
||||
|
||||
JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DDEBUG=1" "-D_DEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x60102" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_dsp=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_WASAPI=1" "-DJUCE_DIRECTSOUND=1" "-DJUCE_ALSA=1" "-DJUCE_USE_FLAC=0" "-DJUCE_USE_OGGVORBIS=1" "-DJUCE_PLUGINHOST_VST3=1" "-DJUCE_PLUGINHOST_AU=1" "-DJUCE_PLUGINHOST_LADSPA=1" "-DJUCE_USE_CDREADER=0" "-DJUCE_USE_CDBURNER=0" "-DJUCE_WEB_BROWSER=0" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" $(shell pkg-config --cflags alsa freetype2 libcurl) -pthread -I../../../../modules/juce_audio_processors/format_types/VST3_SDK -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
|
||||
JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_RTAS=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0"
|
||||
JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DDEBUG=1" "-D_DEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x70002" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_dsp=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_WASAPI=1" "-DJUCE_DIRECTSOUND=1" "-DJUCE_ALSA=1" "-DJUCE_USE_FLAC=0" "-DJUCE_USE_OGGVORBIS=1" "-DJUCE_PLUGINHOST_VST3=1" "-DJUCE_PLUGINHOST_AU=1" "-DJUCE_PLUGINHOST_LADSPA=1" "-DJUCE_PLUGINHOST_LV2=1" "-DJUCE_USE_CDREADER=0" "-DJUCE_USE_CDBURNER=0" "-DJUCE_WEB_BROWSER=0" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" $(shell $(PKG_CONFIG) --cflags alsa freetype2 libcurl) -pthread -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 -I../../../../modules/juce_audio_processors/format_types/LV2_SDK -I../../../../modules/juce_audio_processors/format_types/VST3_SDK -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
|
||||
JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0"
|
||||
JUCE_TARGET_APP := AudioPluginHost
|
||||
|
||||
JUCE_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 $(CFLAGS)
|
||||
JUCE_CXXFLAGS += $(JUCE_CFLAGS) -std=c++14 $(CXXFLAGS)
|
||||
JUCE_LDFLAGS += $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) $(shell pkg-config --libs alsa freetype2 libcurl) -fvisibility=hidden -lrt -ldl -lpthread -lGL $(LDFLAGS)
|
||||
JUCE_LDFLAGS += $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) $(shell $(PKG_CONFIG) --libs alsa freetype2 libcurl) -fvisibility=hidden -lrt -ldl -lpthread -lGL $(LDFLAGS)
|
||||
|
||||
CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR)
|
||||
endif
|
||||
@@ -56,28 +60,32 @@ ifeq ($(CONFIG),Release)
|
||||
TARGET_ARCH :=
|
||||
endif
|
||||
|
||||
JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x60102" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_dsp=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_WASAPI=1" "-DJUCE_DIRECTSOUND=1" "-DJUCE_ALSA=1" "-DJUCE_USE_FLAC=0" "-DJUCE_USE_OGGVORBIS=1" "-DJUCE_PLUGINHOST_VST3=1" "-DJUCE_PLUGINHOST_AU=1" "-DJUCE_PLUGINHOST_LADSPA=1" "-DJUCE_USE_CDREADER=0" "-DJUCE_USE_CDBURNER=0" "-DJUCE_WEB_BROWSER=0" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" $(shell pkg-config --cflags alsa freetype2 libcurl) -pthread -I../../../../modules/juce_audio_processors/format_types/VST3_SDK -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
|
||||
JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_RTAS=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0"
|
||||
JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x70002" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_dsp=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_WASAPI=1" "-DJUCE_DIRECTSOUND=1" "-DJUCE_ALSA=1" "-DJUCE_USE_FLAC=0" "-DJUCE_USE_OGGVORBIS=1" "-DJUCE_PLUGINHOST_VST3=1" "-DJUCE_PLUGINHOST_AU=1" "-DJUCE_PLUGINHOST_LADSPA=1" "-DJUCE_PLUGINHOST_LV2=1" "-DJUCE_USE_CDREADER=0" "-DJUCE_USE_CDBURNER=0" "-DJUCE_WEB_BROWSER=0" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" $(shell $(PKG_CONFIG) --cflags alsa freetype2 libcurl) -pthread -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 -I../../../../modules/juce_audio_processors/format_types/LV2_SDK -I../../../../modules/juce_audio_processors/format_types/VST3_SDK -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
|
||||
JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0"
|
||||
JUCE_TARGET_APP := AudioPluginHost
|
||||
|
||||
JUCE_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -Os $(CFLAGS)
|
||||
JUCE_CXXFLAGS += $(JUCE_CFLAGS) -std=c++14 $(CXXFLAGS)
|
||||
JUCE_LDFLAGS += $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) $(shell pkg-config --libs alsa freetype2 libcurl) -fvisibility=hidden -lrt -ldl -lpthread -lGL $(LDFLAGS)
|
||||
JUCE_LDFLAGS += $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) $(shell $(PKG_CONFIG) --libs alsa freetype2 libcurl) -fvisibility=hidden -lrt -ldl -lpthread -lGL $(LDFLAGS)
|
||||
|
||||
CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR)
|
||||
endif
|
||||
|
||||
OBJECTS_APP := \
|
||||
$(JUCE_OBJDIR)/ARAPlugin_e9864935.o \
|
||||
$(JUCE_OBJDIR)/InternalPlugins_8278e3f5.o \
|
||||
$(JUCE_OBJDIR)/IOConfigurationWindow_d71a5732.o \
|
||||
$(JUCE_OBJDIR)/PluginGraph_6bd15e2d.o \
|
||||
$(JUCE_OBJDIR)/GraphEditorPanel_2223d925.o \
|
||||
$(JUCE_OBJDIR)/MainHostWindow_b3494acd.o \
|
||||
$(JUCE_OBJDIR)/HostStartup_5ce96f96.o \
|
||||
$(JUCE_OBJDIR)/BinaryData_ce4232d4.o \
|
||||
$(JUCE_OBJDIR)/include_juce_audio_basics_8a4e984a.o \
|
||||
$(JUCE_OBJDIR)/include_juce_audio_devices_63111d02.o \
|
||||
$(JUCE_OBJDIR)/include_juce_audio_formats_15f82001.o \
|
||||
$(JUCE_OBJDIR)/include_juce_audio_processors_10c03666.o \
|
||||
$(JUCE_OBJDIR)/include_juce_audio_processors_ara_2a4c6ef7.o \
|
||||
$(JUCE_OBJDIR)/include_juce_audio_processors_lv2_libs_12bdca08.o \
|
||||
$(JUCE_OBJDIR)/include_juce_audio_utils_9f9fb2d6.o \
|
||||
$(JUCE_OBJDIR)/include_juce_core_f26d17db.o \
|
||||
$(JUCE_OBJDIR)/include_juce_cryptography_8cb807a8.o \
|
||||
@@ -94,14 +102,19 @@ OBJECTS_APP := \
|
||||
all : $(JUCE_OUTDIR)/$(JUCE_TARGET_APP)
|
||||
|
||||
$(JUCE_OUTDIR)/$(JUCE_TARGET_APP) : $(OBJECTS_APP) $(RESOURCES)
|
||||
@command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; }
|
||||
@pkg-config --print-errors alsa freetype2 libcurl
|
||||
@command -v $(PKG_CONFIG) >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; }
|
||||
@$(PKG_CONFIG) --print-errors alsa freetype2 libcurl
|
||||
@echo Linking "AudioPluginHost - App"
|
||||
-$(V_AT)mkdir -p $(JUCE_BINDIR)
|
||||
-$(V_AT)mkdir -p $(JUCE_LIBDIR)
|
||||
-$(V_AT)mkdir -p $(JUCE_OUTDIR)
|
||||
$(V_AT)$(CXX) -o $(JUCE_OUTDIR)/$(JUCE_TARGET_APP) $(OBJECTS_APP) $(JUCE_LDFLAGS) $(JUCE_LDFLAGS_APP) $(RESOURCES) $(TARGET_ARCH)
|
||||
|
||||
$(JUCE_OBJDIR)/ARAPlugin_e9864935.o: ../../Source/Plugins/ARAPlugin.cpp
|
||||
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
|
||||
@echo "Compiling ARAPlugin.cpp"
|
||||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/InternalPlugins_8278e3f5.o: ../../Source/Plugins/InternalPlugins.cpp
|
||||
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
|
||||
@echo "Compiling InternalPlugins.cpp"
|
||||
@@ -132,6 +145,11 @@ $(JUCE_OBJDIR)/HostStartup_5ce96f96.o: ../../Source/HostStartup.cpp
|
||||
@echo "Compiling HostStartup.cpp"
|
||||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/BinaryData_ce4232d4.o: ../../JuceLibraryCode/BinaryData.cpp
|
||||
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
|
||||
@echo "Compiling BinaryData.cpp"
|
||||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/include_juce_audio_basics_8a4e984a.o: ../../JuceLibraryCode/include_juce_audio_basics.cpp
|
||||
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
|
||||
@echo "Compiling include_juce_audio_basics.cpp"
|
||||
@@ -152,6 +170,16 @@ $(JUCE_OBJDIR)/include_juce_audio_processors_10c03666.o: ../../JuceLibraryCode/i
|
||||
@echo "Compiling include_juce_audio_processors.cpp"
|
||||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/include_juce_audio_processors_ara_2a4c6ef7.o: ../../JuceLibraryCode/include_juce_audio_processors_ara.cpp
|
||||
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
|
||||
@echo "Compiling include_juce_audio_processors_ara.cpp"
|
||||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/include_juce_audio_processors_lv2_libs_12bdca08.o: ../../JuceLibraryCode/include_juce_audio_processors_lv2_libs.cpp
|
||||
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
|
||||
@echo "Compiling include_juce_audio_processors_lv2_libs.cpp"
|
||||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/include_juce_audio_utils_9f9fb2d6.o: ../../JuceLibraryCode/include_juce_audio_utils.cpp
|
||||
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
|
||||
@echo "Compiling include_juce_audio_utils.cpp"
|
||||
|
||||
@@ -7,146 +7,170 @@
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
025B22813EA4E34CE3630B9A /* IOConfigurationWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C37B2E77AAB6C9E13729BF99 /* IOConfigurationWindow.cpp */; };
|
||||
075C54DDDBDEA5AAD2F60154 /* include_juce_graphics.mm in Sources */ = {isa = PBXBuildFile; fileRef = 82800DBA287EF4BAB13B42FB /* include_juce_graphics.mm */; };
|
||||
09309BD494A05931864B6730 /* PluginGraph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0B1CC8C80F6F99BDE7D6AEC9 /* PluginGraph.cpp */; };
|
||||
0F20A4AE04736634F097F5A6 /* include_juce_audio_utils.mm in Sources */ = {isa = PBXBuildFile; fileRef = B285CAB91AE928C476CA4F9C /* include_juce_audio_utils.mm */; };
|
||||
15CCE43D7DCFC649638919D4 /* include_juce_audio_basics.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4C7D82F9274A4F9DBF11235C /* include_juce_audio_basics.mm */; };
|
||||
21D330A5B13178B12BEAFC3C /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D4EBC17BDB7F88CCBC76730B /* AudioToolbox.framework */; };
|
||||
2727A191DB1BAAC9C04B9081 /* include_juce_opengl.mm in Sources */ = {isa = PBXBuildFile; fileRef = 37E4D5C341406B7072120006 /* include_juce_opengl.mm */; };
|
||||
2B4B9CF71F94BDD1E3AC89AE /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B0935EBBA4F6E2B05F3D1C0A /* Carbon.framework */; };
|
||||
2C3D221D2AA87F07B3F1044D /* include_juce_gui_basics.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8FE7B37CDE0818DB27BDDEBD /* include_juce_gui_basics.mm */; };
|
||||
3E1689E23B9C85F03209DCEF /* GraphEditorPanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3D78A731234A833CA112AE45 /* GraphEditorPanel.cpp */; };
|
||||
443244451A0F2064D4767337 /* Icon.icns in Resources */ = {isa = PBXBuildFile; fileRef = 2A6983F82B13F9E8B10299AE /* Icon.icns */; };
|
||||
4DB15177DDC357F4503F88CF /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B457EE687507BF1DEEA7581F /* WebKit.framework */; };
|
||||
5C4D406B924230F83E3580AD /* include_juce_audio_devices.mm in Sources */ = {isa = PBXBuildFile; fileRef = 65968EA1B476D71F14DE1D58 /* include_juce_audio_devices.mm */; };
|
||||
68FBFDA1FE637B3EDA09A592 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DF6E6E41E10965AD169143B /* IOKit.framework */; };
|
||||
70580743C3D5695F065FF698 /* CoreAudioKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E68018DE199135B7F738FB17 /* CoreAudioKit.framework */; };
|
||||
73E371F1B912FCCAE0CD7E5D /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 86CA337014D3F67E906FFD28 /* Accelerate.framework */; };
|
||||
76A80851698FC773D2479B4E /* include_juce_core.mm in Sources */ = {isa = PBXBuildFile; fileRef = 683CEE986A2467C850FE99E6 /* include_juce_core.mm */; };
|
||||
7DE202DC1D876F49266D9E7D /* include_juce_events.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8290D7BAC160B3A56B66891A /* include_juce_events.mm */; };
|
||||
7FF8A938915488310A7F5921 /* InternalPlugins.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 87A7AAB053051C49EAF4EE88 /* InternalPlugins.cpp */; };
|
||||
88D98B8A2787AA3200F9F48E /* MacSpecific.mm in Sources */ = {isa = PBXBuildFile; fileRef = 88D98B892787AA3200F9F48E /* MacSpecific.mm */; };
|
||||
9056B642BEF870098DE344E5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03FA420AACDD03D50AA16E4A /* Foundation.framework */; };
|
||||
A02C9F4C4B840C27B6CAFEBD /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 89309C0C5F3269BD06BE7F27 /* QuartzCore.framework */; };
|
||||
A09E93F1B354E1FF8B3E9ABE /* include_juce_data_structures.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5EF1D381F42AA8764597F189 /* include_juce_data_structures.mm */; };
|
||||
A1B0416DA378BB0C3AD6F74B /* HostStartup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A66EFAC64B1B67B536C73415 /* HostStartup.cpp */; };
|
||||
A5F0B3B7175766C8AF1D6C3E /* include_juce_dsp.mm in Sources */ = {isa = PBXBuildFile; fileRef = 36689CA4EFC2AF183A0848AE /* include_juce_dsp.mm */; };
|
||||
AC3BED74AC7C6D9F5739F38B /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9794142D24966F93FFDE51A1 /* Cocoa.framework */; };
|
||||
B288A89F96704F142ED8E939 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5ACC21AA45BBF48C3C64D56D /* AudioUnit.framework */; };
|
||||
BBA1733CF8B064A5FD0B4CF4 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D313CF37B25D7FD313C4F336 /* OpenGL.framework */; };
|
||||
C38D14DC58F1941DD5E4BF60 /* include_juce_gui_extra.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2BE6C2DFD6EBB9A89109AEB5 /* include_juce_gui_extra.mm */; };
|
||||
CAF0DE157C8F7D9F168AA3B6 /* include_juce_audio_processors.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5FBD6C402617272052BB4D81 /* include_juce_audio_processors.mm */; };
|
||||
D92C7BF86C9CCF6B4D14F809 /* RecentFilesMenuTemplate.nib in Resources */ = {isa = PBXBuildFile; fileRef = 7DA35787B5F6F7440D667CC8 /* RecentFilesMenuTemplate.nib */; };
|
||||
E092A70431B046BF1F50A482 /* CoreMIDI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5AF0CA7CDFCA90B4DE1F55C3 /* CoreMIDI.framework */; };
|
||||
E2BAA7CFC729809530FD71EE /* DiscRecording.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B8774D8AD307D798831C0DF7 /* DiscRecording.framework */; };
|
||||
E3CB85BA817BC9E3942A8AB0 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F9B445E6755CAA19E4344ED /* CoreAudio.framework */; };
|
||||
E4A926EF695823F0F13268FF /* include_juce_cryptography.mm in Sources */ = {isa = PBXBuildFile; fileRef = B8E24A5CEE6B7055537725CF /* include_juce_cryptography.mm */; };
|
||||
F4DD98B9310B679D50A2C8A6 /* include_juce_audio_formats.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5D250A57C7DEA80248F30EED /* include_juce_audio_formats.mm */; };
|
||||
F635D974599DEC2ED91E6A88 /* MainHostWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 04AABCD3491318FB32E844B4 /* MainHostWindow.cpp */; };
|
||||
FE22E1AF24FA9ED43E983B81 /* Assets in Resources */ = {isa = PBXBuildFile; fileRef = 5F0ADA39C70C892758A941F6 /* Assets */; };
|
||||
025B22813EA4E34CE3630B9A /* IOConfigurationWindow.cpp */ = {isa = PBXBuildFile; fileRef = C37B2E77AAB6C9E13729BF99; };
|
||||
075C54DDDBDEA5AAD2F60154 /* include_juce_graphics.mm */ = {isa = PBXBuildFile; fileRef = 82800DBA287EF4BAB13B42FB; };
|
||||
09309BD494A05931864B6730 /* PluginGraph.cpp */ = {isa = PBXBuildFile; fileRef = 0B1CC8C80F6F99BDE7D6AEC9; };
|
||||
0F20A4AE04736634F097F5A6 /* include_juce_audio_utils.mm */ = {isa = PBXBuildFile; fileRef = B285CAB91AE928C476CA4F9C; };
|
||||
15CCE43D7DCFC649638919D4 /* include_juce_audio_basics.mm */ = {isa = PBXBuildFile; fileRef = 4C7D82F9274A4F9DBF11235C; };
|
||||
21D330A5B13178B12BEAFC3C /* AudioToolbox.framework */ = {isa = PBXBuildFile; fileRef = D4EBC17BDB7F88CCBC76730B; };
|
||||
2727A191DB1BAAC9C04B9081 /* include_juce_opengl.mm */ = {isa = PBXBuildFile; fileRef = 37E4D5C341406B7072120006; };
|
||||
2C3D221D2AA87F07B3F1044D /* include_juce_gui_basics.mm */ = {isa = PBXBuildFile; fileRef = 8FE7B37CDE0818DB27BDDEBD; };
|
||||
3E1689E23B9C85F03209DCEF /* GraphEditorPanel.cpp */ = {isa = PBXBuildFile; fileRef = 3D78A731234A833CA112AE45; };
|
||||
443244451A0F2064D4767337 /* Icon.icns */ = {isa = PBXBuildFile; fileRef = 2A6983F82B13F9E8B10299AE; };
|
||||
4DB15177DDC357F4503F88CF /* WebKit.framework */ = {isa = PBXBuildFile; fileRef = B457EE687507BF1DEEA7581F; };
|
||||
5C4D406B924230F83E3580AD /* include_juce_audio_devices.mm */ = {isa = PBXBuildFile; fileRef = 65968EA1B476D71F14DE1D58; };
|
||||
60BBD03840ABDD719FED194F /* include_juce_audio_processors_lv2_libs.cpp */ = {isa = PBXBuildFile; fileRef = 5183A94449F6317518C48B0C; };
|
||||
68FBFDA1FE637B3EDA09A592 /* IOKit.framework */ = {isa = PBXBuildFile; fileRef = 4DF6E6E41E10965AD169143B; };
|
||||
70580743C3D5695F065FF698 /* CoreAudioKit.framework */ = {isa = PBXBuildFile; fileRef = E68018DE199135B7F738FB17; };
|
||||
73E371F1B912FCCAE0CD7E5D /* Accelerate.framework */ = {isa = PBXBuildFile; fileRef = 86CA337014D3F67E906FFD28; };
|
||||
76A80851698FC773D2479B4E /* include_juce_core.mm */ = {isa = PBXBuildFile; fileRef = 683CEE986A2467C850FE99E6; };
|
||||
7DE202DC1D876F49266D9E7D /* include_juce_events.mm */ = {isa = PBXBuildFile; fileRef = 8290D7BAC160B3A56B66891A; };
|
||||
7FF8A938915488310A7F5921 /* InternalPlugins.cpp */ = {isa = PBXBuildFile; fileRef = 87A7AAB053051C49EAF4EE88; };
|
||||
9056B642BEF870098DE344E5 /* Foundation.framework */ = {isa = PBXBuildFile; fileRef = 03FA420AACDD03D50AA16E4A; };
|
||||
970A893BD34180916C9D01C4 /* ARAPlugin.cpp */ = {isa = PBXBuildFile; fileRef = 6A01D5F304346E0332264056; };
|
||||
A0144A682BF4843C8CF53FE4 /* BinaryData.cpp */ = {isa = PBXBuildFile; fileRef = 6D107D7946DC5976B766345B; };
|
||||
A02C9F4C4B840C27B6CAFEBD /* QuartzCore.framework */ = {isa = PBXBuildFile; fileRef = 89309C0C5F3269BD06BE7F27; };
|
||||
A09E93F1B354E1FF8B3E9ABE /* include_juce_data_structures.mm */ = {isa = PBXBuildFile; fileRef = 5EF1D381F42AA8764597F189; };
|
||||
A1B0416DA378BB0C3AD6F74B /* HostStartup.cpp */ = {isa = PBXBuildFile; fileRef = A66EFAC64B1B67B536C73415; };
|
||||
A5F0B3B7175766C8AF1D6C3E /* include_juce_dsp.mm */ = {isa = PBXBuildFile; fileRef = 36689CA4EFC2AF183A0848AE; };
|
||||
AC3BED74AC7C6D9F5739F38B /* Cocoa.framework */ = {isa = PBXBuildFile; fileRef = 9794142D24966F93FFDE51A1; };
|
||||
B288A89F96704F142ED8E939 /* AudioUnit.framework */ = {isa = PBXBuildFile; fileRef = 5ACC21AA45BBF48C3C64D56D; };
|
||||
BBA1733CF8B064A5FD0B4CF4 /* OpenGL.framework */ = {isa = PBXBuildFile; fileRef = D313CF37B25D7FD313C4F336; };
|
||||
C38D14DC58F1941DD5E4BF60 /* include_juce_gui_extra.mm */ = {isa = PBXBuildFile; fileRef = 2BE6C2DFD6EBB9A89109AEB5; };
|
||||
CAC10E4345428CAEE6F0DA1B /* include_juce_audio_processors_ara.cpp */ = {isa = PBXBuildFile; fileRef = A43CE79CB190C2D69E17E1E3; };
|
||||
CAF0DE157C8F7D9F168AA3B6 /* include_juce_audio_processors.mm */ = {isa = PBXBuildFile; fileRef = 5FBD6C402617272052BB4D81; };
|
||||
D92C7BF86C9CCF6B4D14F809 /* RecentFilesMenuTemplate.nib */ = {isa = PBXBuildFile; fileRef = 7DA35787B5F6F7440D667CC8; };
|
||||
E092A70431B046BF1F50A482 /* CoreMIDI.framework */ = {isa = PBXBuildFile; fileRef = 5AF0CA7CDFCA90B4DE1F55C3; };
|
||||
E2BAA7CFC729809530FD71EE /* DiscRecording.framework */ = {isa = PBXBuildFile; fileRef = B8774D8AD307D798831C0DF7; };
|
||||
E3CB85BA817BC9E3942A8AB0 /* CoreAudio.framework */ = {isa = PBXBuildFile; fileRef = 9F9B445E6755CAA19E4344ED; };
|
||||
E4A926EF695823F0F13268FF /* include_juce_cryptography.mm */ = {isa = PBXBuildFile; fileRef = B8E24A5CEE6B7055537725CF; };
|
||||
F4DD98B9310B679D50A2C8A6 /* include_juce_audio_formats.mm */ = {isa = PBXBuildFile; fileRef = 5D250A57C7DEA80248F30EED; };
|
||||
F635D974599DEC2ED91E6A88 /* MainHostWindow.cpp */ = {isa = PBXBuildFile; fileRef = 04AABCD3491318FB32E844B4; };
|
||||
FCDB1F8A93F59E0F97821456 /* App */ = {isa = PBXBuildFile; fileRef = 8D8BBC353637DA442C5575DA; };
|
||||
FE22E1AF24FA9ED43E983B81 /* Assets */ = {isa = PBXBuildFile; fileRef = 5F0ADA39C70C892758A941F6; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
03FA420AACDD03D50AA16E4A /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
|
||||
04AABCD3491318FB32E844B4 /* MainHostWindow.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = MainHostWindow.cpp; path = ../../Source/UI/MainHostWindow.cpp; sourceTree = SOURCE_ROOT; };
|
||||
04DB9A49969ECC740CC25665 /* GraphEditorPanel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = GraphEditorPanel.h; path = ../../Source/UI/GraphEditorPanel.h; sourceTree = SOURCE_ROOT; };
|
||||
0B1CC8C80F6F99BDE7D6AEC9 /* PluginGraph.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = PluginGraph.cpp; path = ../../Source/Plugins/PluginGraph.cpp; sourceTree = SOURCE_ROOT; };
|
||||
2A6983F82B13F9E8B10299AE /* Icon.icns */ = {isa = PBXFileReference; lastKnownFileType = file.icns; path = Icon.icns; sourceTree = SOURCE_ROOT; };
|
||||
2BE6C2DFD6EBB9A89109AEB5 /* include_juce_gui_extra.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_gui_extra.mm; path = ../../JuceLibraryCode/include_juce_gui_extra.mm; sourceTree = SOURCE_ROOT; };
|
||||
36689CA4EFC2AF183A0848AE /* include_juce_dsp.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_dsp.mm; path = ../../JuceLibraryCode/include_juce_dsp.mm; sourceTree = SOURCE_ROOT; };
|
||||
37E4D5C341406B7072120006 /* include_juce_opengl.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_opengl.mm; path = ../../JuceLibraryCode/include_juce_opengl.mm; sourceTree = SOURCE_ROOT; };
|
||||
3C070DD522CDD11FFC87425D /* juce_audio_utils */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_audio_utils; path = ../../../../modules/juce_audio_utils; sourceTree = SOURCE_ROOT; };
|
||||
3D57FE2A8877F12A61054726 /* juce_core */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_core; path = ../../../../modules/juce_core; sourceTree = SOURCE_ROOT; };
|
||||
3D78A731234A833CA112AE45 /* GraphEditorPanel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = GraphEditorPanel.cpp; path = ../../Source/UI/GraphEditorPanel.cpp; sourceTree = SOURCE_ROOT; };
|
||||
46C3C2CD301CD59C51FD02D6 /* PluginGraph.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PluginGraph.h; path = ../../Source/Plugins/PluginGraph.h; sourceTree = SOURCE_ROOT; };
|
||||
4C7D82F9274A4F9DBF11235C /* include_juce_audio_basics.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_audio_basics.mm; path = ../../JuceLibraryCode/include_juce_audio_basics.mm; sourceTree = SOURCE_ROOT; };
|
||||
4DF6E6E41E10965AD169143B /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; };
|
||||
5313EB852E41EE58B199B9A2 /* juce_audio_devices */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_audio_devices; path = ../../../../modules/juce_audio_devices; sourceTree = SOURCE_ROOT; };
|
||||
57DF618F1DE781556B7AFC32 /* Info-App.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info-App.plist"; sourceTree = SOURCE_ROOT; };
|
||||
59842A98E5EBBC54B50C04CD /* juce_events */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_events; path = ../../../../modules/juce_events; sourceTree = SOURCE_ROOT; };
|
||||
5ACC21AA45BBF48C3C64D56D /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = System/Library/Frameworks/AudioUnit.framework; sourceTree = SDKROOT; };
|
||||
5AF0CA7CDFCA90B4DE1F55C3 /* CoreMIDI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; };
|
||||
5D250A57C7DEA80248F30EED /* include_juce_audio_formats.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_audio_formats.mm; path = ../../JuceLibraryCode/include_juce_audio_formats.mm; sourceTree = SOURCE_ROOT; };
|
||||
5EF1D381F42AA8764597F189 /* include_juce_data_structures.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_data_structures.mm; path = ../../JuceLibraryCode/include_juce_data_structures.mm; sourceTree = SOURCE_ROOT; };
|
||||
5F0ADA39C70C892758A941F6 /* Assets */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Assets; path = ../../../../examples/Assets; sourceTree = "<group>"; };
|
||||
5FBD6C402617272052BB4D81 /* include_juce_audio_processors.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_audio_processors.mm; path = ../../JuceLibraryCode/include_juce_audio_processors.mm; sourceTree = SOURCE_ROOT; };
|
||||
65968EA1B476D71F14DE1D58 /* include_juce_audio_devices.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_audio_devices.mm; path = ../../JuceLibraryCode/include_juce_audio_devices.mm; sourceTree = SOURCE_ROOT; };
|
||||
683CEE986A2467C850FE99E6 /* include_juce_core.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_core.mm; path = ../../JuceLibraryCode/include_juce_core.mm; sourceTree = SOURCE_ROOT; };
|
||||
6A71B2BCAC4239072BC2BD7E /* juce_audio_basics */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_audio_basics; path = ../../../../modules/juce_audio_basics; sourceTree = SOURCE_ROOT; };
|
||||
7DA35787B5F6F7440D667CC8 /* RecentFilesMenuTemplate.nib */ = {isa = PBXFileReference; lastKnownFileType = file.nib; path = RecentFilesMenuTemplate.nib; sourceTree = SOURCE_ROOT; };
|
||||
81C1A7770E082F56FE5A90A7 /* juce_opengl */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_opengl; path = ../../../../modules/juce_opengl; sourceTree = SOURCE_ROOT; };
|
||||
82800DBA287EF4BAB13B42FB /* include_juce_graphics.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_graphics.mm; path = ../../JuceLibraryCode/include_juce_graphics.mm; sourceTree = SOURCE_ROOT; };
|
||||
8290D7BAC160B3A56B66891A /* include_juce_events.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_events.mm; path = ../../JuceLibraryCode/include_juce_events.mm; sourceTree = SOURCE_ROOT; };
|
||||
86CA337014D3F67E906FFD28 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; };
|
||||
87A7AAB053051C49EAF4EE88 /* InternalPlugins.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = InternalPlugins.cpp; path = ../../Source/Plugins/InternalPlugins.cpp; sourceTree = SOURCE_ROOT; };
|
||||
88D98B892787AA3200F9F48E /* MacSpecific.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MacSpecific.mm; path = ../../Source/MacSpecific.mm; sourceTree = "<group>"; };
|
||||
88D98B8B2787AA7D00F9F48E /* MacSpecific.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MacSpecific.h; path = ../../Source/MacSpecific.h; sourceTree = "<group>"; };
|
||||
89309C0C5F3269BD06BE7F27 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
|
||||
8D8BBC353637DA442C5575DA /* AudioPluginHost.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AudioPluginHost.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
8FE7B37CDE0818DB27BDDEBD /* include_juce_gui_basics.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_gui_basics.mm; path = ../../JuceLibraryCode/include_juce_gui_basics.mm; sourceTree = SOURCE_ROOT; };
|
||||
9320A145F2A8ACD687D6608E /* juce_dsp */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_dsp; path = ../../../../modules/juce_dsp; sourceTree = SOURCE_ROOT; };
|
||||
938AE72315C6C93949F6220E /* juce_gui_basics */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_gui_basics; path = ../../../../modules/juce_gui_basics; sourceTree = SOURCE_ROOT; };
|
||||
94CB96C8E4B51F52776C2638 /* juce_graphics */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_graphics; path = ../../../../modules/juce_graphics; sourceTree = SOURCE_ROOT; };
|
||||
97918AB43AD460AFA8FA2FFE /* PluginWindow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PluginWindow.h; path = ../../Source/UI/PluginWindow.h; sourceTree = SOURCE_ROOT; };
|
||||
9794142D24966F93FFDE51A1 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
|
||||
9F9B445E6755CAA19E4344ED /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = System/Library/Frameworks/CoreAudio.framework; sourceTree = SDKROOT; };
|
||||
A5DFC13E4F09134B0D226A3E /* MainHostWindow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MainHostWindow.h; path = ../../Source/UI/MainHostWindow.h; sourceTree = SOURCE_ROOT; };
|
||||
A5E7CA8A71D049BE2BD33861 /* JuceHeader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JuceHeader.h; path = ../../JuceLibraryCode/JuceHeader.h; sourceTree = SOURCE_ROOT; };
|
||||
A66EFAC64B1B67B536C73415 /* HostStartup.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = HostStartup.cpp; path = ../../Source/HostStartup.cpp; sourceTree = SOURCE_ROOT; };
|
||||
B0935EBBA4F6E2B05F3D1C0A /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; };
|
||||
B285CAB91AE928C476CA4F9C /* include_juce_audio_utils.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_audio_utils.mm; path = ../../JuceLibraryCode/include_juce_audio_utils.mm; sourceTree = SOURCE_ROOT; };
|
||||
B2A1E626CC120982805754F6 /* JUCEAppIcon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = JUCEAppIcon.png; path = ../../Source/JUCEAppIcon.png; sourceTree = SOURCE_ROOT; };
|
||||
B457EE687507BF1DEEA7581F /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; };
|
||||
B86B918291E1090C6A720971 /* juce_data_structures */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_data_structures; path = ../../../../modules/juce_data_structures; sourceTree = SOURCE_ROOT; };
|
||||
B8774D8AD307D798831C0DF7 /* DiscRecording.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiscRecording.framework; path = System/Library/Frameworks/DiscRecording.framework; sourceTree = SDKROOT; };
|
||||
B8E24A5CEE6B7055537725CF /* include_juce_cryptography.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_cryptography.mm; path = ../../JuceLibraryCode/include_juce_cryptography.mm; sourceTree = SOURCE_ROOT; };
|
||||
B95B9D6774059DBB19F2B4E2 /* InternalPlugins.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = InternalPlugins.h; path = ../../Source/Plugins/InternalPlugins.h; sourceTree = SOURCE_ROOT; };
|
||||
C37B2E77AAB6C9E13729BF99 /* IOConfigurationWindow.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = IOConfigurationWindow.cpp; path = ../../Source/Plugins/IOConfigurationWindow.cpp; sourceTree = SOURCE_ROOT; };
|
||||
D313CF37B25D7FD313C4F336 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; };
|
||||
D4EBC17BDB7F88CCBC76730B /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
|
||||
E68018DE199135B7F738FB17 /* CoreAudioKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudioKit.framework; path = System/Library/Frameworks/CoreAudioKit.framework; sourceTree = SDKROOT; };
|
||||
F14CDB17EFE157DA3C3A5A91 /* IOConfigurationWindow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = IOConfigurationWindow.h; path = ../../Source/Plugins/IOConfigurationWindow.h; sourceTree = SOURCE_ROOT; };
|
||||
F299BECFB2AEA6105F014848 /* juce_gui_extra */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_gui_extra; path = ../../../../modules/juce_gui_extra; sourceTree = SOURCE_ROOT; };
|
||||
F9AC862E9A3583B6C1488EE0 /* juce_audio_formats */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_audio_formats; path = ../../../../modules/juce_audio_formats; sourceTree = SOURCE_ROOT; };
|
||||
FA21631C5536EA3DF55C7FA6 /* juce_cryptography */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_cryptography; path = ../../../../modules/juce_cryptography; sourceTree = SOURCE_ROOT; };
|
||||
FAF867E9E731D0880D40511F /* juce_audio_processors */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_audio_processors; path = ../../../../modules/juce_audio_processors; sourceTree = SOURCE_ROOT; };
|
||||
03FA420AACDD03D50AA16E4A /* Foundation.framework */ /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
|
||||
04AABCD3491318FB32E844B4 /* MainHostWindow.cpp */ /* MainHostWindow.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = MainHostWindow.cpp; path = ../../Source/UI/MainHostWindow.cpp; sourceTree = SOURCE_ROOT; };
|
||||
04DB9A49969ECC740CC25665 /* GraphEditorPanel.h */ /* GraphEditorPanel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = GraphEditorPanel.h; path = ../../Source/UI/GraphEditorPanel.h; sourceTree = SOURCE_ROOT; };
|
||||
0B1CC8C80F6F99BDE7D6AEC9 /* PluginGraph.cpp */ /* PluginGraph.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = PluginGraph.cpp; path = ../../Source/Plugins/PluginGraph.cpp; sourceTree = SOURCE_ROOT; };
|
||||
11E6340DB6A6F68F5040101B /* reverb_ir.wav */ /* reverb_ir.wav */ = {isa = PBXFileReference; lastKnownFileType = file.wav; name = reverb_ir.wav; path = ../../../../examples/Assets/reverb_ir.wav; sourceTree = SOURCE_ROOT; };
|
||||
17A29FEB16D4439351511947 /* guitar_amp.wav */ /* guitar_amp.wav */ = {isa = PBXFileReference; lastKnownFileType = file.wav; name = guitar_amp.wav; path = ../../../../examples/Assets/guitar_amp.wav; sourceTree = SOURCE_ROOT; };
|
||||
1DADAD8E34AAF4AFF1C69DC4 /* BinaryData.h */ /* BinaryData.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = BinaryData.h; path = ../../JuceLibraryCode/BinaryData.h; sourceTree = SOURCE_ROOT; };
|
||||
2A6983F82B13F9E8B10299AE /* Icon.icns */ /* Icon.icns */ = {isa = PBXFileReference; lastKnownFileType = file.icns; name = Icon.icns; path = Icon.icns; sourceTree = SOURCE_ROOT; };
|
||||
2BE6C2DFD6EBB9A89109AEB5 /* include_juce_gui_extra.mm */ /* include_juce_gui_extra.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_gui_extra.mm; path = ../../JuceLibraryCode/include_juce_gui_extra.mm; sourceTree = SOURCE_ROOT; };
|
||||
36689CA4EFC2AF183A0848AE /* include_juce_dsp.mm */ /* include_juce_dsp.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_dsp.mm; path = ../../JuceLibraryCode/include_juce_dsp.mm; sourceTree = SOURCE_ROOT; };
|
||||
37E4D5C341406B7072120006 /* include_juce_opengl.mm */ /* include_juce_opengl.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_opengl.mm; path = ../../JuceLibraryCode/include_juce_opengl.mm; sourceTree = SOURCE_ROOT; };
|
||||
3C070DD522CDD11FFC87425D /* juce_audio_utils */ /* juce_audio_utils */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_audio_utils; path = ../../../../modules/juce_audio_utils; sourceTree = SOURCE_ROOT; };
|
||||
3D57FE2A8877F12A61054726 /* juce_core */ /* juce_core */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_core; path = ../../../../modules/juce_core; sourceTree = SOURCE_ROOT; };
|
||||
3D78A731234A833CA112AE45 /* GraphEditorPanel.cpp */ /* GraphEditorPanel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = GraphEditorPanel.cpp; path = ../../Source/UI/GraphEditorPanel.cpp; sourceTree = SOURCE_ROOT; };
|
||||
45098BAF7E088D41A4E69E42 /* singing.ogg */ /* singing.ogg */ = {isa = PBXFileReference; lastKnownFileType = file.ogg; name = singing.ogg; path = ../../../../examples/Assets/singing.ogg; sourceTree = SOURCE_ROOT; };
|
||||
46C3C2CD301CD59C51FD02D6 /* PluginGraph.h */ /* PluginGraph.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PluginGraph.h; path = ../../Source/Plugins/PluginGraph.h; sourceTree = SOURCE_ROOT; };
|
||||
4C7D82F9274A4F9DBF11235C /* include_juce_audio_basics.mm */ /* include_juce_audio_basics.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_audio_basics.mm; path = ../../JuceLibraryCode/include_juce_audio_basics.mm; sourceTree = SOURCE_ROOT; };
|
||||
4DF6E6E41E10965AD169143B /* IOKit.framework */ /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; };
|
||||
5183A94449F6317518C48B0C /* include_juce_audio_processors_lv2_libs.cpp */ /* include_juce_audio_processors_lv2_libs.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = include_juce_audio_processors_lv2_libs.cpp; path = ../../JuceLibraryCode/include_juce_audio_processors_lv2_libs.cpp; sourceTree = SOURCE_ROOT; };
|
||||
5313EB852E41EE58B199B9A2 /* juce_audio_devices */ /* juce_audio_devices */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_audio_devices; path = ../../../../modules/juce_audio_devices; sourceTree = SOURCE_ROOT; };
|
||||
57DF618F1DE781556B7AFC32 /* Info-App.plist */ /* Info-App.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "Info-App.plist"; path = "Info-App.plist"; sourceTree = SOURCE_ROOT; };
|
||||
59842A98E5EBBC54B50C04CD /* juce_events */ /* juce_events */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_events; path = ../../../../modules/juce_events; sourceTree = SOURCE_ROOT; };
|
||||
5ACC21AA45BBF48C3C64D56D /* AudioUnit.framework */ /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = System/Library/Frameworks/AudioUnit.framework; sourceTree = SDKROOT; };
|
||||
5AF0CA7CDFCA90B4DE1F55C3 /* CoreMIDI.framework */ /* CoreMIDI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; };
|
||||
5D250A57C7DEA80248F30EED /* include_juce_audio_formats.mm */ /* include_juce_audio_formats.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_audio_formats.mm; path = ../../JuceLibraryCode/include_juce_audio_formats.mm; sourceTree = SOURCE_ROOT; };
|
||||
5EF1D381F42AA8764597F189 /* include_juce_data_structures.mm */ /* include_juce_data_structures.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_data_structures.mm; path = ../../JuceLibraryCode/include_juce_data_structures.mm; sourceTree = SOURCE_ROOT; };
|
||||
5F0ADA39C70C892758A941F6 /* Assets */ /* Assets */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Assets; path = ../../../../examples/Assets; sourceTree = "<group>"; };
|
||||
5FBD6C402617272052BB4D81 /* include_juce_audio_processors.mm */ /* include_juce_audio_processors.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_audio_processors.mm; path = ../../JuceLibraryCode/include_juce_audio_processors.mm; sourceTree = SOURCE_ROOT; };
|
||||
65968EA1B476D71F14DE1D58 /* include_juce_audio_devices.mm */ /* include_juce_audio_devices.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_audio_devices.mm; path = ../../JuceLibraryCode/include_juce_audio_devices.mm; sourceTree = SOURCE_ROOT; };
|
||||
683CEE986A2467C850FE99E6 /* include_juce_core.mm */ /* include_juce_core.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_core.mm; path = ../../JuceLibraryCode/include_juce_core.mm; sourceTree = SOURCE_ROOT; };
|
||||
6A01D5F304346E0332264056 /* ARAPlugin.cpp */ /* ARAPlugin.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ARAPlugin.cpp; path = ../../Source/Plugins/ARAPlugin.cpp; sourceTree = SOURCE_ROOT; };
|
||||
6A71B2BCAC4239072BC2BD7E /* juce_audio_basics */ /* juce_audio_basics */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_audio_basics; path = ../../../../modules/juce_audio_basics; sourceTree = SOURCE_ROOT; };
|
||||
6D107D7946DC5976B766345B /* BinaryData.cpp */ /* BinaryData.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = BinaryData.cpp; path = ../../JuceLibraryCode/BinaryData.cpp; sourceTree = SOURCE_ROOT; };
|
||||
7DA35787B5F6F7440D667CC8 /* RecentFilesMenuTemplate.nib */ /* RecentFilesMenuTemplate.nib */ = {isa = PBXFileReference; lastKnownFileType = file.nib; name = RecentFilesMenuTemplate.nib; path = RecentFilesMenuTemplate.nib; sourceTree = SOURCE_ROOT; };
|
||||
81C1A7770E082F56FE5A90A7 /* juce_opengl */ /* juce_opengl */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_opengl; path = ../../../../modules/juce_opengl; sourceTree = SOURCE_ROOT; };
|
||||
82800DBA287EF4BAB13B42FB /* include_juce_graphics.mm */ /* include_juce_graphics.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_graphics.mm; path = ../../JuceLibraryCode/include_juce_graphics.mm; sourceTree = SOURCE_ROOT; };
|
||||
8290D7BAC160B3A56B66891A /* include_juce_events.mm */ /* include_juce_events.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_events.mm; path = ../../JuceLibraryCode/include_juce_events.mm; sourceTree = SOURCE_ROOT; };
|
||||
86CA337014D3F67E906FFD28 /* Accelerate.framework */ /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; };
|
||||
87A7AAB053051C49EAF4EE88 /* InternalPlugins.cpp */ /* InternalPlugins.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = InternalPlugins.cpp; path = ../../Source/Plugins/InternalPlugins.cpp; sourceTree = SOURCE_ROOT; };
|
||||
89309C0C5F3269BD06BE7F27 /* QuartzCore.framework */ /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
|
||||
8D8BBC353637DA442C5575DA /* App */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AudioPluginHost.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
8FE7B37CDE0818DB27BDDEBD /* include_juce_gui_basics.mm */ /* include_juce_gui_basics.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_gui_basics.mm; path = ../../JuceLibraryCode/include_juce_gui_basics.mm; sourceTree = SOURCE_ROOT; };
|
||||
9320A145F2A8ACD687D6608E /* juce_dsp */ /* juce_dsp */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_dsp; path = ../../../../modules/juce_dsp; sourceTree = SOURCE_ROOT; };
|
||||
938AE72315C6C93949F6220E /* juce_gui_basics */ /* juce_gui_basics */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_gui_basics; path = ../../../../modules/juce_gui_basics; sourceTree = SOURCE_ROOT; };
|
||||
94CB96C8E4B51F52776C2638 /* juce_graphics */ /* juce_graphics */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_graphics; path = ../../../../modules/juce_graphics; sourceTree = SOURCE_ROOT; };
|
||||
97918AB43AD460AFA8FA2FFE /* PluginWindow.h */ /* PluginWindow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PluginWindow.h; path = ../../Source/UI/PluginWindow.h; sourceTree = SOURCE_ROOT; };
|
||||
9794142D24966F93FFDE51A1 /* Cocoa.framework */ /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
|
||||
97E63C295843A1E665E70473 /* cello.wav */ /* cello.wav */ = {isa = PBXFileReference; lastKnownFileType = file.wav; name = cello.wav; path = ../../../../examples/Assets/cello.wav; sourceTree = SOURCE_ROOT; };
|
||||
9F9B445E6755CAA19E4344ED /* CoreAudio.framework */ /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = System/Library/Frameworks/CoreAudio.framework; sourceTree = SDKROOT; };
|
||||
A43CE79CB190C2D69E17E1E3 /* include_juce_audio_processors_ara.cpp */ /* include_juce_audio_processors_ara.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = include_juce_audio_processors_ara.cpp; path = ../../JuceLibraryCode/include_juce_audio_processors_ara.cpp; sourceTree = SOURCE_ROOT; };
|
||||
A5DFC13E4F09134B0D226A3E /* MainHostWindow.h */ /* MainHostWindow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MainHostWindow.h; path = ../../Source/UI/MainHostWindow.h; sourceTree = SOURCE_ROOT; };
|
||||
A5E7CA8A71D049BE2BD33861 /* JuceHeader.h */ /* JuceHeader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JuceHeader.h; path = ../../JuceLibraryCode/JuceHeader.h; sourceTree = SOURCE_ROOT; };
|
||||
A66EFAC64B1B67B536C73415 /* HostStartup.cpp */ /* HostStartup.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = HostStartup.cpp; path = ../../Source/HostStartup.cpp; sourceTree = SOURCE_ROOT; };
|
||||
A692426308435C2002F988FE /* proaudio.path */ /* proaudio.path */ = {isa = PBXFileReference; lastKnownFileType = file.path; name = proaudio.path; path = ../../../../examples/Assets/proaudio.path; sourceTree = SOURCE_ROOT; };
|
||||
A872AF2CAFFC72109B9C6348 /* cassette_recorder.wav */ /* cassette_recorder.wav */ = {isa = PBXFileReference; lastKnownFileType = file.wav; name = cassette_recorder.wav; path = ../../../../examples/Assets/cassette_recorder.wav; sourceTree = SOURCE_ROOT; };
|
||||
B285CAB91AE928C476CA4F9C /* include_juce_audio_utils.mm */ /* include_juce_audio_utils.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_audio_utils.mm; path = ../../JuceLibraryCode/include_juce_audio_utils.mm; sourceTree = SOURCE_ROOT; };
|
||||
B2A1E626CC120982805754F6 /* JUCEAppIcon.png */ /* JUCEAppIcon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = JUCEAppIcon.png; path = ../../Source/JUCEAppIcon.png; sourceTree = SOURCE_ROOT; };
|
||||
B457EE687507BF1DEEA7581F /* WebKit.framework */ /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; };
|
||||
B86B918291E1090C6A720971 /* juce_data_structures */ /* juce_data_structures */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_data_structures; path = ../../../../modules/juce_data_structures; sourceTree = SOURCE_ROOT; };
|
||||
B8774D8AD307D798831C0DF7 /* DiscRecording.framework */ /* DiscRecording.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiscRecording.framework; path = System/Library/Frameworks/DiscRecording.framework; sourceTree = SDKROOT; };
|
||||
B8E24A5CEE6B7055537725CF /* include_juce_cryptography.mm */ /* include_juce_cryptography.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_cryptography.mm; path = ../../JuceLibraryCode/include_juce_cryptography.mm; sourceTree = SOURCE_ROOT; };
|
||||
B95B9D6774059DBB19F2B4E2 /* InternalPlugins.h */ /* InternalPlugins.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = InternalPlugins.h; path = ../../Source/Plugins/InternalPlugins.h; sourceTree = SOURCE_ROOT; };
|
||||
C37B2E77AAB6C9E13729BF99 /* IOConfigurationWindow.cpp */ /* IOConfigurationWindow.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = IOConfigurationWindow.cpp; path = ../../Source/Plugins/IOConfigurationWindow.cpp; sourceTree = SOURCE_ROOT; };
|
||||
CA726B9AA0EC87B58D005C8D /* ARAPlugin.h */ /* ARAPlugin.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ARAPlugin.h; path = ../../Source/Plugins/ARAPlugin.h; sourceTree = SOURCE_ROOT; };
|
||||
D313CF37B25D7FD313C4F336 /* OpenGL.framework */ /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; };
|
||||
D4EBC17BDB7F88CCBC76730B /* AudioToolbox.framework */ /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
|
||||
E68018DE199135B7F738FB17 /* CoreAudioKit.framework */ /* CoreAudioKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudioKit.framework; path = System/Library/Frameworks/CoreAudioKit.framework; sourceTree = SDKROOT; };
|
||||
F14CDB17EFE157DA3C3A5A91 /* IOConfigurationWindow.h */ /* IOConfigurationWindow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = IOConfigurationWindow.h; path = ../../Source/Plugins/IOConfigurationWindow.h; sourceTree = SOURCE_ROOT; };
|
||||
F299BECFB2AEA6105F014848 /* juce_gui_extra */ /* juce_gui_extra */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_gui_extra; path = ../../../../modules/juce_gui_extra; sourceTree = SOURCE_ROOT; };
|
||||
F9AC862E9A3583B6C1488EE0 /* juce_audio_formats */ /* juce_audio_formats */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_audio_formats; path = ../../../../modules/juce_audio_formats; sourceTree = SOURCE_ROOT; };
|
||||
FA21631C5536EA3DF55C7FA6 /* juce_cryptography */ /* juce_cryptography */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_cryptography; path = ../../../../modules/juce_cryptography; sourceTree = SOURCE_ROOT; };
|
||||
FAF867E9E731D0880D40511F /* juce_audio_processors */ /* juce_audio_processors */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_audio_processors; path = ../../../../modules/juce_audio_processors; sourceTree = SOURCE_ROOT; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
C515A1FE1A53D3968C22FAEF /* Frameworks */ = {
|
||||
C515A1FE1A53D3968C22FAEF = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
B288A89F96704F142ED8E939 /* AudioUnit.framework in Frameworks */,
|
||||
73E371F1B912FCCAE0CD7E5D /* Accelerate.framework in Frameworks */,
|
||||
21D330A5B13178B12BEAFC3C /* AudioToolbox.framework in Frameworks */,
|
||||
2B4B9CF71F94BDD1E3AC89AE /* Carbon.framework in Frameworks */,
|
||||
AC3BED74AC7C6D9F5739F38B /* Cocoa.framework in Frameworks */,
|
||||
E3CB85BA817BC9E3942A8AB0 /* CoreAudio.framework in Frameworks */,
|
||||
70580743C3D5695F065FF698 /* CoreAudioKit.framework in Frameworks */,
|
||||
E092A70431B046BF1F50A482 /* CoreMIDI.framework in Frameworks */,
|
||||
E2BAA7CFC729809530FD71EE /* DiscRecording.framework in Frameworks */,
|
||||
9056B642BEF870098DE344E5 /* Foundation.framework in Frameworks */,
|
||||
68FBFDA1FE637B3EDA09A592 /* IOKit.framework in Frameworks */,
|
||||
BBA1733CF8B064A5FD0B4CF4 /* OpenGL.framework in Frameworks */,
|
||||
A02C9F4C4B840C27B6CAFEBD /* QuartzCore.framework in Frameworks */,
|
||||
4DB15177DDC357F4503F88CF /* WebKit.framework in Frameworks */,
|
||||
B288A89F96704F142ED8E939,
|
||||
73E371F1B912FCCAE0CD7E5D,
|
||||
21D330A5B13178B12BEAFC3C,
|
||||
AC3BED74AC7C6D9F5739F38B,
|
||||
E3CB85BA817BC9E3942A8AB0,
|
||||
70580743C3D5695F065FF698,
|
||||
E092A70431B046BF1F50A482,
|
||||
E2BAA7CFC729809530FD71EE,
|
||||
9056B642BEF870098DE344E5,
|
||||
68FBFDA1FE637B3EDA09A592,
|
||||
BBA1733CF8B064A5FD0B4CF4,
|
||||
A02C9F4C4B840C27B6CAFEBD,
|
||||
4DB15177DDC357F4503F88CF,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
49E2649CEC2DE569A9C985E6 /* BinaryData */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
A872AF2CAFFC72109B9C6348,
|
||||
97E63C295843A1E665E70473,
|
||||
17A29FEB16D4439351511947,
|
||||
A692426308435C2002F988FE,
|
||||
11E6340DB6A6F68F5040101B,
|
||||
45098BAF7E088D41A4E69E42,
|
||||
);
|
||||
name = BinaryData;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
65BEFC705A89E5C8A9E35C97 /* Source */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
97790EAEA01CFA5C3CA9737A /* AudioPluginHost */,
|
||||
9D8FE1F65CAD416AA606C47A /* JUCE Modules */,
|
||||
7E30376DDAD775FEFE64944C /* JUCE Library Code */,
|
||||
A97EE73C79DA3F729D46AF48 /* Resources */,
|
||||
D1C4804CD275CB57A5C89A2D /* Frameworks */,
|
||||
D85C0D11EE4F6C73B9EB5BCD /* Products */,
|
||||
97790EAEA01CFA5C3CA9737A,
|
||||
9D8FE1F65CAD416AA606C47A,
|
||||
7E30376DDAD775FEFE64944C,
|
||||
A97EE73C79DA3F729D46AF48,
|
||||
D1C4804CD275CB57A5C89A2D,
|
||||
D85C0D11EE4F6C73B9EB5BCD,
|
||||
);
|
||||
name = Source;
|
||||
sourceTree = "<group>";
|
||||
@@ -154,21 +178,25 @@
|
||||
7E30376DDAD775FEFE64944C /* JUCE Library Code */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4C7D82F9274A4F9DBF11235C /* include_juce_audio_basics.mm */,
|
||||
65968EA1B476D71F14DE1D58 /* include_juce_audio_devices.mm */,
|
||||
5D250A57C7DEA80248F30EED /* include_juce_audio_formats.mm */,
|
||||
5FBD6C402617272052BB4D81 /* include_juce_audio_processors.mm */,
|
||||
B285CAB91AE928C476CA4F9C /* include_juce_audio_utils.mm */,
|
||||
683CEE986A2467C850FE99E6 /* include_juce_core.mm */,
|
||||
B8E24A5CEE6B7055537725CF /* include_juce_cryptography.mm */,
|
||||
5EF1D381F42AA8764597F189 /* include_juce_data_structures.mm */,
|
||||
36689CA4EFC2AF183A0848AE /* include_juce_dsp.mm */,
|
||||
8290D7BAC160B3A56B66891A /* include_juce_events.mm */,
|
||||
82800DBA287EF4BAB13B42FB /* include_juce_graphics.mm */,
|
||||
8FE7B37CDE0818DB27BDDEBD /* include_juce_gui_basics.mm */,
|
||||
2BE6C2DFD6EBB9A89109AEB5 /* include_juce_gui_extra.mm */,
|
||||
37E4D5C341406B7072120006 /* include_juce_opengl.mm */,
|
||||
A5E7CA8A71D049BE2BD33861 /* JuceHeader.h */,
|
||||
6D107D7946DC5976B766345B,
|
||||
1DADAD8E34AAF4AFF1C69DC4,
|
||||
4C7D82F9274A4F9DBF11235C,
|
||||
65968EA1B476D71F14DE1D58,
|
||||
5D250A57C7DEA80248F30EED,
|
||||
5FBD6C402617272052BB4D81,
|
||||
A43CE79CB190C2D69E17E1E3,
|
||||
5183A94449F6317518C48B0C,
|
||||
B285CAB91AE928C476CA4F9C,
|
||||
683CEE986A2467C850FE99E6,
|
||||
B8E24A5CEE6B7055537725CF,
|
||||
5EF1D381F42AA8764597F189,
|
||||
36689CA4EFC2AF183A0848AE,
|
||||
8290D7BAC160B3A56B66891A,
|
||||
82800DBA287EF4BAB13B42FB,
|
||||
8FE7B37CDE0818DB27BDDEBD,
|
||||
2BE6C2DFD6EBB9A89109AEB5,
|
||||
37E4D5C341406B7072120006,
|
||||
A5E7CA8A71D049BE2BD33861,
|
||||
);
|
||||
name = "JUCE Library Code";
|
||||
sourceTree = "<group>";
|
||||
@@ -176,7 +204,8 @@
|
||||
97790EAEA01CFA5C3CA9737A /* AudioPluginHost */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
B225B7F2CAABD28A41E7C339 /* Source */,
|
||||
B225B7F2CAABD28A41E7C339,
|
||||
49E2649CEC2DE569A9C985E6,
|
||||
);
|
||||
name = AudioPluginHost;
|
||||
sourceTree = "<group>";
|
||||
@@ -184,20 +213,20 @@
|
||||
9D8FE1F65CAD416AA606C47A /* JUCE Modules */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
6A71B2BCAC4239072BC2BD7E /* juce_audio_basics */,
|
||||
5313EB852E41EE58B199B9A2 /* juce_audio_devices */,
|
||||
F9AC862E9A3583B6C1488EE0 /* juce_audio_formats */,
|
||||
FAF867E9E731D0880D40511F /* juce_audio_processors */,
|
||||
3C070DD522CDD11FFC87425D /* juce_audio_utils */,
|
||||
3D57FE2A8877F12A61054726 /* juce_core */,
|
||||
FA21631C5536EA3DF55C7FA6 /* juce_cryptography */,
|
||||
B86B918291E1090C6A720971 /* juce_data_structures */,
|
||||
9320A145F2A8ACD687D6608E /* juce_dsp */,
|
||||
59842A98E5EBBC54B50C04CD /* juce_events */,
|
||||
94CB96C8E4B51F52776C2638 /* juce_graphics */,
|
||||
938AE72315C6C93949F6220E /* juce_gui_basics */,
|
||||
F299BECFB2AEA6105F014848 /* juce_gui_extra */,
|
||||
81C1A7770E082F56FE5A90A7 /* juce_opengl */,
|
||||
6A71B2BCAC4239072BC2BD7E,
|
||||
5313EB852E41EE58B199B9A2,
|
||||
F9AC862E9A3583B6C1488EE0,
|
||||
FAF867E9E731D0880D40511F,
|
||||
3C070DD522CDD11FFC87425D,
|
||||
3D57FE2A8877F12A61054726,
|
||||
FA21631C5536EA3DF55C7FA6,
|
||||
B86B918291E1090C6A720971,
|
||||
9320A145F2A8ACD687D6608E,
|
||||
59842A98E5EBBC54B50C04CD,
|
||||
94CB96C8E4B51F52776C2638,
|
||||
938AE72315C6C93949F6220E,
|
||||
F299BECFB2AEA6105F014848,
|
||||
81C1A7770E082F56FE5A90A7,
|
||||
);
|
||||
name = "JUCE Modules";
|
||||
sourceTree = "<group>";
|
||||
@@ -205,12 +234,14 @@
|
||||
9F51E92D8C77FA9DDD1F7B10 /* Plugins */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
87A7AAB053051C49EAF4EE88 /* InternalPlugins.cpp */,
|
||||
B95B9D6774059DBB19F2B4E2 /* InternalPlugins.h */,
|
||||
C37B2E77AAB6C9E13729BF99 /* IOConfigurationWindow.cpp */,
|
||||
F14CDB17EFE157DA3C3A5A91 /* IOConfigurationWindow.h */,
|
||||
0B1CC8C80F6F99BDE7D6AEC9 /* PluginGraph.cpp */,
|
||||
46C3C2CD301CD59C51FD02D6 /* PluginGraph.h */,
|
||||
6A01D5F304346E0332264056,
|
||||
CA726B9AA0EC87B58D005C8D,
|
||||
87A7AAB053051C49EAF4EE88,
|
||||
B95B9D6774059DBB19F2B4E2,
|
||||
C37B2E77AAB6C9E13729BF99,
|
||||
F14CDB17EFE157DA3C3A5A91,
|
||||
0B1CC8C80F6F99BDE7D6AEC9,
|
||||
46C3C2CD301CD59C51FD02D6,
|
||||
);
|
||||
name = Plugins;
|
||||
sourceTree = "<group>";
|
||||
@@ -218,10 +249,10 @@
|
||||
A97EE73C79DA3F729D46AF48 /* Resources */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
5F0ADA39C70C892758A941F6 /* Assets */,
|
||||
57DF618F1DE781556B7AFC32 /* Info-App.plist */,
|
||||
7DA35787B5F6F7440D667CC8 /* RecentFilesMenuTemplate.nib */,
|
||||
2A6983F82B13F9E8B10299AE /* Icon.icns */,
|
||||
5F0ADA39C70C892758A941F6,
|
||||
57DF618F1DE781556B7AFC32,
|
||||
7DA35787B5F6F7440D667CC8,
|
||||
2A6983F82B13F9E8B10299AE,
|
||||
);
|
||||
name = Resources;
|
||||
sourceTree = "<group>";
|
||||
@@ -229,12 +260,10 @@
|
||||
B225B7F2CAABD28A41E7C339 /* Source */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
9F51E92D8C77FA9DDD1F7B10 /* Plugins */,
|
||||
DE7B77306553B1204071B39A /* UI */,
|
||||
A66EFAC64B1B67B536C73415 /* HostStartup.cpp */,
|
||||
88D98B892787AA3200F9F48E /* MacSpecific.mm */,
|
||||
88D98B8B2787AA7D00F9F48E /* MacSpecific.h */,
|
||||
B2A1E626CC120982805754F6 /* JUCEAppIcon.png */,
|
||||
9F51E92D8C77FA9DDD1F7B10,
|
||||
DE7B77306553B1204071B39A,
|
||||
A66EFAC64B1B67B536C73415,
|
||||
B2A1E626CC120982805754F6,
|
||||
);
|
||||
name = Source;
|
||||
sourceTree = "<group>";
|
||||
@@ -242,20 +271,19 @@
|
||||
D1C4804CD275CB57A5C89A2D /* Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
5ACC21AA45BBF48C3C64D56D /* AudioUnit.framework */,
|
||||
86CA337014D3F67E906FFD28 /* Accelerate.framework */,
|
||||
D4EBC17BDB7F88CCBC76730B /* AudioToolbox.framework */,
|
||||
B0935EBBA4F6E2B05F3D1C0A /* Carbon.framework */,
|
||||
9794142D24966F93FFDE51A1 /* Cocoa.framework */,
|
||||
9F9B445E6755CAA19E4344ED /* CoreAudio.framework */,
|
||||
E68018DE199135B7F738FB17 /* CoreAudioKit.framework */,
|
||||
5AF0CA7CDFCA90B4DE1F55C3 /* CoreMIDI.framework */,
|
||||
B8774D8AD307D798831C0DF7 /* DiscRecording.framework */,
|
||||
03FA420AACDD03D50AA16E4A /* Foundation.framework */,
|
||||
4DF6E6E41E10965AD169143B /* IOKit.framework */,
|
||||
D313CF37B25D7FD313C4F336 /* OpenGL.framework */,
|
||||
89309C0C5F3269BD06BE7F27 /* QuartzCore.framework */,
|
||||
B457EE687507BF1DEEA7581F /* WebKit.framework */,
|
||||
5ACC21AA45BBF48C3C64D56D,
|
||||
86CA337014D3F67E906FFD28,
|
||||
D4EBC17BDB7F88CCBC76730B,
|
||||
9794142D24966F93FFDE51A1,
|
||||
9F9B445E6755CAA19E4344ED,
|
||||
E68018DE199135B7F738FB17,
|
||||
5AF0CA7CDFCA90B4DE1F55C3,
|
||||
B8774D8AD307D798831C0DF7,
|
||||
03FA420AACDD03D50AA16E4A,
|
||||
4DF6E6E41E10965AD169143B,
|
||||
D313CF37B25D7FD313C4F336,
|
||||
89309C0C5F3269BD06BE7F27,
|
||||
B457EE687507BF1DEEA7581F,
|
||||
);
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
@@ -263,7 +291,7 @@
|
||||
D85C0D11EE4F6C73B9EB5BCD /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
8D8BBC353637DA442C5575DA /* AudioPluginHost.app */,
|
||||
8D8BBC353637DA442C5575DA,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
@@ -271,11 +299,11 @@
|
||||
DE7B77306553B1204071B39A /* UI */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3D78A731234A833CA112AE45 /* GraphEditorPanel.cpp */,
|
||||
04DB9A49969ECC740CC25665 /* GraphEditorPanel.h */,
|
||||
04AABCD3491318FB32E844B4 /* MainHostWindow.cpp */,
|
||||
A5DFC13E4F09134B0D226A3E /* MainHostWindow.h */,
|
||||
97918AB43AD460AFA8FA2FFE /* PluginWindow.h */,
|
||||
3D78A731234A833CA112AE45,
|
||||
04DB9A49969ECC740CC25665,
|
||||
04AABCD3491318FB32E844B4,
|
||||
A5DFC13E4F09134B0D226A3E,
|
||||
97918AB43AD460AFA8FA2FFE,
|
||||
);
|
||||
name = UI;
|
||||
sourceTree = "<group>";
|
||||
@@ -285,11 +313,11 @@
|
||||
/* Begin PBXNativeTarget section */
|
||||
DE12B7643D374BFF7E4FEB1C /* AudioPluginHost - App */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = E4ECAE24A646A7D1585F776C /* Build configuration list for PBXNativeTarget "AudioPluginHost - App" */;
|
||||
buildConfigurationList = E4ECAE24A646A7D1585F776C;
|
||||
buildPhases = (
|
||||
2429BB4D705CC57F49418CFB /* Resources */,
|
||||
E8E94B3C187DA578BFCBDA98 /* Sources */,
|
||||
C515A1FE1A53D3968C22FAEF /* Frameworks */,
|
||||
2429BB4D705CC57F49418CFB,
|
||||
E8E94B3C187DA578BFCBDA98,
|
||||
C515A1FE1A53D3968C22FAEF,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
@@ -297,16 +325,16 @@
|
||||
);
|
||||
name = "AudioPluginHost - App";
|
||||
productName = AudioPluginHost;
|
||||
productReference = 8D8BBC353637DA442C5575DA /* AudioPluginHost.app */;
|
||||
productReference = 8D8BBC353637DA442C5575DA;
|
||||
productType = "com.apple.product-type.application";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
ADE6E539DB98A302483A82D0 /* Project object */ = {
|
||||
ADE6E539DB98A302483A82D0 = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastUpgradeCheck = 1300;
|
||||
LastUpgradeCheck = 1340;
|
||||
ORGANIZATIONNAME = "Raw Material Software Limited";
|
||||
TargetAttributes = {
|
||||
DE12B7643D374BFF7E4FEB1C = {
|
||||
@@ -333,62 +361,64 @@
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = 493C2C5E457692E5149C5525 /* Build configuration list for PBXProject "AudioPluginHost" */;
|
||||
buildConfigurationList = 493C2C5E457692E5149C5525;
|
||||
compatibilityVersion = "Xcode 3.2";
|
||||
developmentRegion = en;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
Base,
|
||||
);
|
||||
mainGroup = 65BEFC705A89E5C8A9E35C97 /* Source */;
|
||||
mainGroup = 65BEFC705A89E5C8A9E35C97;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
DE12B7643D374BFF7E4FEB1C /* AudioPluginHost - App */,
|
||||
DE12B7643D374BFF7E4FEB1C,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXResourcesBuildPhase section */
|
||||
2429BB4D705CC57F49418CFB /* Resources */ = {
|
||||
2429BB4D705CC57F49418CFB = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
FE22E1AF24FA9ED43E983B81 /* Assets in Resources */,
|
||||
D92C7BF86C9CCF6B4D14F809 /* RecentFilesMenuTemplate.nib in Resources */,
|
||||
443244451A0F2064D4767337 /* Icon.icns in Resources */,
|
||||
FE22E1AF24FA9ED43E983B81,
|
||||
D92C7BF86C9CCF6B4D14F809,
|
||||
443244451A0F2064D4767337,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
E8E94B3C187DA578BFCBDA98 /* Sources */ = {
|
||||
E8E94B3C187DA578BFCBDA98 = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
7FF8A938915488310A7F5921 /* InternalPlugins.cpp in Sources */,
|
||||
025B22813EA4E34CE3630B9A /* IOConfigurationWindow.cpp in Sources */,
|
||||
09309BD494A05931864B6730 /* PluginGraph.cpp in Sources */,
|
||||
3E1689E23B9C85F03209DCEF /* GraphEditorPanel.cpp in Sources */,
|
||||
F635D974599DEC2ED91E6A88 /* MainHostWindow.cpp in Sources */,
|
||||
A1B0416DA378BB0C3AD6F74B /* HostStartup.cpp in Sources */,
|
||||
15CCE43D7DCFC649638919D4 /* include_juce_audio_basics.mm in Sources */,
|
||||
5C4D406B924230F83E3580AD /* include_juce_audio_devices.mm in Sources */,
|
||||
F4DD98B9310B679D50A2C8A6 /* include_juce_audio_formats.mm in Sources */,
|
||||
CAF0DE157C8F7D9F168AA3B6 /* include_juce_audio_processors.mm in Sources */,
|
||||
0F20A4AE04736634F097F5A6 /* include_juce_audio_utils.mm in Sources */,
|
||||
76A80851698FC773D2479B4E /* include_juce_core.mm in Sources */,
|
||||
88D98B8A2787AA3200F9F48E /* MacSpecific.mm in Sources */,
|
||||
E4A926EF695823F0F13268FF /* include_juce_cryptography.mm in Sources */,
|
||||
A09E93F1B354E1FF8B3E9ABE /* include_juce_data_structures.mm in Sources */,
|
||||
A5F0B3B7175766C8AF1D6C3E /* include_juce_dsp.mm in Sources */,
|
||||
7DE202DC1D876F49266D9E7D /* include_juce_events.mm in Sources */,
|
||||
075C54DDDBDEA5AAD2F60154 /* include_juce_graphics.mm in Sources */,
|
||||
2C3D221D2AA87F07B3F1044D /* include_juce_gui_basics.mm in Sources */,
|
||||
C38D14DC58F1941DD5E4BF60 /* include_juce_gui_extra.mm in Sources */,
|
||||
2727A191DB1BAAC9C04B9081 /* include_juce_opengl.mm in Sources */,
|
||||
970A893BD34180916C9D01C4,
|
||||
7FF8A938915488310A7F5921,
|
||||
025B22813EA4E34CE3630B9A,
|
||||
09309BD494A05931864B6730,
|
||||
3E1689E23B9C85F03209DCEF,
|
||||
F635D974599DEC2ED91E6A88,
|
||||
A1B0416DA378BB0C3AD6F74B,
|
||||
A0144A682BF4843C8CF53FE4,
|
||||
15CCE43D7DCFC649638919D4,
|
||||
5C4D406B924230F83E3580AD,
|
||||
F4DD98B9310B679D50A2C8A6,
|
||||
CAF0DE157C8F7D9F168AA3B6,
|
||||
CAC10E4345428CAEE6F0DA1B,
|
||||
60BBD03840ABDD719FED194F,
|
||||
0F20A4AE04736634F097F5A6,
|
||||
76A80851698FC773D2479B4E,
|
||||
E4A926EF695823F0F13268FF,
|
||||
A09E93F1B354E1FF8B3E9ABE,
|
||||
A5F0B3B7175766C8AF1D6C3E,
|
||||
7DE202DC1D876F49266D9E7D,
|
||||
075C54DDDBDEA5AAD2F60154,
|
||||
2C3D221D2AA87F07B3F1044D,
|
||||
C38D14DC58F1941DD5E4BF60,
|
||||
2727A191DB1BAAC9C04B9081,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -405,6 +435,7 @@
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
CONFIGURATION_BUILD_DIR = "$(PROJECT_DIR)/build/$(CONFIGURATION)";
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
EXCLUDED_ARCHS = "";
|
||||
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
|
||||
GCC_OPTIMIZATION_LEVEL = s;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
@@ -412,7 +443,7 @@
|
||||
"NDEBUG=1",
|
||||
"JUCE_DISPLAY_SPLASH_SCREEN=0",
|
||||
"JUCE_USE_DARK_SPLASH_SCREEN=1",
|
||||
"JUCE_PROJUCER_VERSION=0x60102",
|
||||
"JUCE_PROJUCER_VERSION=0x70002",
|
||||
"JUCE_MODULE_AVAILABLE_juce_audio_basics=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_audio_devices=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_audio_formats=1",
|
||||
@@ -436,6 +467,7 @@
|
||||
"JUCE_PLUGINHOST_VST3=1",
|
||||
"JUCE_PLUGINHOST_AU=1",
|
||||
"JUCE_PLUGINHOST_LADSPA=1",
|
||||
"JUCE_PLUGINHOST_LV2=1",
|
||||
"JUCE_USE_CDREADER=0",
|
||||
"JUCE_USE_CDBURNER=0",
|
||||
"JUCE_WEB_BROWSER=0",
|
||||
@@ -447,77 +479,37 @@
|
||||
"JucePlugin_Build_VST3=0",
|
||||
"JucePlugin_Build_AU=0",
|
||||
"JucePlugin_Build_AUv3=0",
|
||||
"JucePlugin_Build_RTAS=0",
|
||||
"JucePlugin_Build_AAX=0",
|
||||
"JucePlugin_Build_Standalone=0",
|
||||
"JucePlugin_Build_Unity=0",
|
||||
"JucePlugin_Build_LV2=0",
|
||||
);
|
||||
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
|
||||
HEADER_SEARCH_PATHS = (
|
||||
"$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src",
|
||||
"$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv",
|
||||
"$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom",
|
||||
"$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src",
|
||||
"$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord",
|
||||
"$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd",
|
||||
"$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2",
|
||||
"$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK",
|
||||
"$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK",
|
||||
"$(SRCROOT)/../../JuceLibraryCode",
|
||||
"$(SRCROOT)/../../../../modules",
|
||||
"$(inherited)",
|
||||
);
|
||||
INFOPLIST_FILE = "Info-App.plist";
|
||||
INFOPLIST_FILE = Info-App.plist;
|
||||
INFOPLIST_PREPROCESS = NO;
|
||||
INSTALL_PATH = "$(HOME)/Applications";
|
||||
LLVM_LTO = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.11;
|
||||
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules";
|
||||
OTHER_CFLAGS = (
|
||||
"-Wall",
|
||||
"-Wstrict-aliasing",
|
||||
"-Wuninitialized",
|
||||
"-Wunused-parameter",
|
||||
"-Wswitch-enum",
|
||||
"-Wsign-conversion",
|
||||
"-Wsign-compare",
|
||||
"-Wunreachable-code",
|
||||
"-Wcast-align",
|
||||
"-Wno-ignored-qualifiers",
|
||||
"-Wshorten-64-to-32",
|
||||
"-Wconversion",
|
||||
"-Wint-conversion",
|
||||
"-Wconditional-uninitialized",
|
||||
"-Wconstant-conversion",
|
||||
"-Wbool-conversion",
|
||||
"-Wextra-semi",
|
||||
"-Wshift-sign-overflow",
|
||||
"-Wno-missing-field-initializers",
|
||||
"-Wshadow-all",
|
||||
"-Wnullable-to-nonnull-conversion",
|
||||
);
|
||||
OTHER_CPLUSPLUSFLAGS = (
|
||||
"-Woverloaded-virtual",
|
||||
"-Wreorder",
|
||||
"-Wzero-as-null-pointer-constant",
|
||||
"-Wunused-private-field",
|
||||
"-Winconsistent-missing-destructor-override",
|
||||
"-Wall",
|
||||
"-Wstrict-aliasing",
|
||||
"-Wuninitialized",
|
||||
"-Wunused-parameter",
|
||||
"-Wswitch-enum",
|
||||
"-Wsign-conversion",
|
||||
"-Wsign-compare",
|
||||
"-Wunreachable-code",
|
||||
"-Wcast-align",
|
||||
"-Wno-ignored-qualifiers",
|
||||
"-Wshorten-64-to-32",
|
||||
"-Wconversion",
|
||||
"-Wint-conversion",
|
||||
"-Wconditional-uninitialized",
|
||||
"-Wconstant-conversion",
|
||||
"-Wbool-conversion",
|
||||
"-Wextra-semi",
|
||||
"-Wshift-sign-overflow",
|
||||
"-Wno-missing-field-initializers",
|
||||
"-Wshadow-all",
|
||||
"-Wnullable-to-nonnull-conversion",
|
||||
);
|
||||
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules";
|
||||
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes -Wunguarded-availability -Wunguarded-availability-new";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes -Wunguarded-availability -Wunguarded-availability-new";
|
||||
OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.juce.pluginhost;
|
||||
PRODUCT_NAME = AudioPluginHost;
|
||||
PRODUCT_NAME = "AudioPluginHost";
|
||||
USE_HEADERMAP = NO;
|
||||
VALIDATE_WORKSPACE_SKIPPED_SDK_FRAMEWORKS = OpenGL;
|
||||
VALID_ARCHS = "i386 x86_64 arm64 arm64e";
|
||||
@@ -566,7 +558,7 @@
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
PRODUCT_NAME = AudioPluginHost;
|
||||
PRODUCT_NAME = "AudioPluginHost";
|
||||
SDKROOT = macosx;
|
||||
WARNING_CFLAGS = "-Wreorder";
|
||||
ZERO_LINK = NO;
|
||||
@@ -583,6 +575,7 @@
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
CONFIGURATION_BUILD_DIR = "$(PROJECT_DIR)/build/$(CONFIGURATION)";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
EXCLUDED_ARCHS = "";
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
@@ -590,7 +583,7 @@
|
||||
"DEBUG=1",
|
||||
"JUCE_DISPLAY_SPLASH_SCREEN=0",
|
||||
"JUCE_USE_DARK_SPLASH_SCREEN=1",
|
||||
"JUCE_PROJUCER_VERSION=0x60102",
|
||||
"JUCE_PROJUCER_VERSION=0x70002",
|
||||
"JUCE_MODULE_AVAILABLE_juce_audio_basics=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_audio_devices=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_audio_formats=1",
|
||||
@@ -614,6 +607,7 @@
|
||||
"JUCE_PLUGINHOST_VST3=1",
|
||||
"JUCE_PLUGINHOST_AU=1",
|
||||
"JUCE_PLUGINHOST_LADSPA=1",
|
||||
"JUCE_PLUGINHOST_LV2=1",
|
||||
"JUCE_USE_CDREADER=0",
|
||||
"JUCE_USE_CDBURNER=0",
|
||||
"JUCE_WEB_BROWSER=0",
|
||||
@@ -625,76 +619,36 @@
|
||||
"JucePlugin_Build_VST3=0",
|
||||
"JucePlugin_Build_AU=0",
|
||||
"JucePlugin_Build_AUv3=0",
|
||||
"JucePlugin_Build_RTAS=0",
|
||||
"JucePlugin_Build_AAX=0",
|
||||
"JucePlugin_Build_Standalone=0",
|
||||
"JucePlugin_Build_Unity=0",
|
||||
"JucePlugin_Build_LV2=0",
|
||||
);
|
||||
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
|
||||
HEADER_SEARCH_PATHS = (
|
||||
"$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src",
|
||||
"$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv",
|
||||
"$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom",
|
||||
"$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src",
|
||||
"$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord",
|
||||
"$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd",
|
||||
"$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2",
|
||||
"$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK",
|
||||
"$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK",
|
||||
"$(SRCROOT)/../../JuceLibraryCode",
|
||||
"$(SRCROOT)/../../../../modules",
|
||||
"$(inherited)",
|
||||
);
|
||||
INFOPLIST_FILE = "Info-App.plist";
|
||||
INFOPLIST_FILE = Info-App.plist;
|
||||
INFOPLIST_PREPROCESS = NO;
|
||||
INSTALL_PATH = "$(HOME)/Applications";
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.11;
|
||||
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules";
|
||||
OTHER_CFLAGS = (
|
||||
"-Wall",
|
||||
"-Wstrict-aliasing",
|
||||
"-Wuninitialized",
|
||||
"-Wunused-parameter",
|
||||
"-Wswitch-enum",
|
||||
"-Wsign-conversion",
|
||||
"-Wsign-compare",
|
||||
"-Wunreachable-code",
|
||||
"-Wcast-align",
|
||||
"-Wno-ignored-qualifiers",
|
||||
"-Wshorten-64-to-32",
|
||||
"-Wconversion",
|
||||
"-Wint-conversion",
|
||||
"-Wconditional-uninitialized",
|
||||
"-Wconstant-conversion",
|
||||
"-Wbool-conversion",
|
||||
"-Wextra-semi",
|
||||
"-Wshift-sign-overflow",
|
||||
"-Wno-missing-field-initializers",
|
||||
"-Wshadow-all",
|
||||
"-Wnullable-to-nonnull-conversion",
|
||||
);
|
||||
OTHER_CPLUSPLUSFLAGS = (
|
||||
"-Woverloaded-virtual",
|
||||
"-Wreorder",
|
||||
"-Wzero-as-null-pointer-constant",
|
||||
"-Wunused-private-field",
|
||||
"-Winconsistent-missing-destructor-override",
|
||||
"-Wall",
|
||||
"-Wstrict-aliasing",
|
||||
"-Wuninitialized",
|
||||
"-Wunused-parameter",
|
||||
"-Wswitch-enum",
|
||||
"-Wsign-conversion",
|
||||
"-Wsign-compare",
|
||||
"-Wunreachable-code",
|
||||
"-Wcast-align",
|
||||
"-Wno-ignored-qualifiers",
|
||||
"-Wshorten-64-to-32",
|
||||
"-Wconversion",
|
||||
"-Wint-conversion",
|
||||
"-Wconditional-uninitialized",
|
||||
"-Wconstant-conversion",
|
||||
"-Wbool-conversion",
|
||||
"-Wextra-semi",
|
||||
"-Wshift-sign-overflow",
|
||||
"-Wno-missing-field-initializers",
|
||||
"-Wshadow-all",
|
||||
"-Wnullable-to-nonnull-conversion",
|
||||
);
|
||||
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules";
|
||||
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes -Wunguarded-availability -Wunguarded-availability-new";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes -Wunguarded-availability -Wunguarded-availability-new";
|
||||
OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.juce.pluginhost;
|
||||
PRODUCT_NAME = AudioPluginHost;
|
||||
PRODUCT_NAME = "AudioPluginHost";
|
||||
USE_HEADERMAP = NO;
|
||||
VALIDATE_WORKSPACE_SKIPPED_SDK_FRAMEWORKS = OpenGL;
|
||||
VALID_ARCHS = "i386 x86_64 arm64 arm64e";
|
||||
@@ -742,7 +696,7 @@
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
PRODUCT_NAME = AudioPluginHost;
|
||||
PRODUCT_NAME = "AudioPluginHost";
|
||||
SDKROOT = macosx;
|
||||
WARNING_CFLAGS = "-Wreorder";
|
||||
ZERO_LINK = NO;
|
||||
@@ -752,20 +706,20 @@
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
493C2C5E457692E5149C5525 /* Build configuration list for PBXProject "AudioPluginHost" */ = {
|
||||
493C2C5E457692E5149C5525 = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
8D1CA827F1EFD443BDCF198A /* Debug */,
|
||||
C9295196717FABE454A210B7 /* Release */,
|
||||
8D1CA827F1EFD443BDCF198A,
|
||||
C9295196717FABE454A210B7,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Debug;
|
||||
};
|
||||
E4ECAE24A646A7D1585F776C /* Build configuration list for PBXNativeTarget "AudioPluginHost - App" */ = {
|
||||
E4ECAE24A646A7D1585F776C = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
C8B793AC1BEFBE7A99BE8352 /* Debug */,
|
||||
49453CC5AD9F08D2738464AC /* Release */,
|
||||
C8B793AC1BEFBE7A99BE8352,
|
||||
49453CC5AD9F08D2738464AC,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Debug;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
Microsoft Visual Studio Solution File, Format Version 11.00
|
||||
# Visual Studio 2017
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 11.00
|
||||
# Visual Studio 15
|
||||
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AudioPluginHost - App", "AudioPluginHost_App.vcxproj", "{5666EAA2-C82B-D06A-5228-D0E810428536}"
|
||||
EndProject
|
||||
|
||||
@@ -63,8 +63,8 @@
|
||||
<ClCompile>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60102;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70002;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
<RuntimeTypeInfo>true</RuntimeTypeInfo>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
@@ -78,7 +78,8 @@
|
||||
<LanguageStandard>stdcpp14</LanguageStandard>
|
||||
</ClCompile>
|
||||
<ResourceCompile>
|
||||
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70002;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ResourceCompile>
|
||||
<Link>
|
||||
<OutputFile>$(OutDir)\AudioPluginHost.exe</OutputFile>
|
||||
@@ -105,8 +106,8 @@
|
||||
</Midl>
|
||||
<ClCompile>
|
||||
<Optimization>Full</Optimization>
|
||||
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60102;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70002;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
<RuntimeTypeInfo>true</RuntimeTypeInfo>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
@@ -120,7 +121,8 @@
|
||||
<LanguageStandard>stdcpp14</LanguageStandard>
|
||||
</ClCompile>
|
||||
<ResourceCompile>
|
||||
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70002;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ResourceCompile>
|
||||
<Link>
|
||||
<OutputFile>$(OutDir)\AudioPluginHost.exe</OutputFile>
|
||||
@@ -141,6 +143,7 @@
|
||||
<Lib/>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\Source\Plugins\ARAPlugin.cpp"/>
|
||||
<ClCompile Include="..\..\Source\Plugins\InternalPlugins.cpp"/>
|
||||
<ClCompile Include="..\..\Source\Plugins\IOConfigurationWindow.cpp"/>
|
||||
<ClCompile Include="..\..\Source\Plugins\PluginGraph.cpp"/>
|
||||
@@ -159,15 +162,15 @@
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\buffers\juce_FloatVectorOperations.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMP_test.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPMidi1ToMidi2DefaultTranslator.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPSysEx7.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPTests.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPUtils.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
@@ -276,7 +279,7 @@
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_devices\audio_io\juce_AudioIODeviceType.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_devices\midi_io\ump\juce_UMPTests.cpp">
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_devices\audio_io\juce_SampleRateHelpers.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_devices\midi_io\juce_MidiDevices.cpp">
|
||||
@@ -645,6 +648,9 @@
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_formats\codecs\juce_WindowsMediaAudioFormat.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_formats\format\juce_ARAAudioReaders.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_formats\format\juce_AudioFormat.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
@@ -678,6 +684,123 @@
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format\juce_AudioPluginFormatManager.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\zix\tree.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\collections.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\filesystem.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\instance.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\lib.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\node.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\plugin.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\pluginclass.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\port.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\query.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\scalepoint.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\state.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\ui.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\util.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\world.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\atom\atom-test-utils.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\atom\atom-test.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\atom\forge-overflow-test.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\base64.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\byte_source.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\env.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\n3.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\node.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\reader.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\serdi.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\string.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\system.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\uri.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\writer.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src\zix\btree.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src\zix\digest.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src\zix\hash.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src\sord.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src\sord_test.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src\sord_validate.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src\sordi.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src\sordmm_test.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src\syntax.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom\src\sratom.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\base\source\baseiids.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
@@ -747,15 +870,33 @@
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\vstpresetfile.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_ARACommon.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_ARAHosting.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_LADSPAPluginFormat.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_LegacyAudioParameter.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_LV2PluginFormat.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_LV2PluginFormat_test.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_LV2SupportLibs.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat_test.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTPluginFormat.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
@@ -789,6 +930,24 @@
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\scanning\juce_PluginListComponent.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\ARA\juce_ARA_utils.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\ARA\juce_ARADocumentController.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\ARA\juce_ARADocumentControllerCommon.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\ARA\juce_ARAModelObjects.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\ARA\juce_ARAPlugInInstanceRoles.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\ARA\juce_AudioProcessor_ARAExtensions.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_AudioParameterBool.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
@@ -807,6 +966,9 @@
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_AudioProcessorValueTreeState.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_NativeScaleFactorNotifier.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_ParameterAttachments.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
@@ -819,6 +981,12 @@
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\juce_audio_processors.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\juce_audio_processors_ara.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\juce_audio_processors_lv2_libs.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_utils\audio_cd\juce_AudioCDReader.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
@@ -837,9 +1005,15 @@
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_utils\gui\juce_AudioVisualiserComponent.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_utils\gui\juce_KeyboardComponentBase.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_utils\gui\juce_MidiKeyboardComponent.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_utils\gui\juce_MPEKeyboardComponent.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_utils\native\juce_android_BluetoothMidiDevicePairingDialogue.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
@@ -879,9 +1053,15 @@
|
||||
<ClCompile Include="..\..\..\..\modules\juce_core\containers\juce_HashMap_test.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_core\containers\juce_ListenerList.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_core\containers\juce_NamedValueSet.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_core\containers\juce_Optional_test.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_core\containers\juce_OwnedArray.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
@@ -897,6 +1077,9 @@
|
||||
<ClCompile Include="..\..\..\..\modules\juce_core\containers\juce_Variant.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_core\files\juce_common_MimeTypes.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_core\files\juce_DirectoryIterator.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
@@ -963,6 +1146,9 @@
|
||||
<ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_Uuid.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_core\native\juce_android_AndroidDocument.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_core\native\juce_android_Files.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
@@ -1218,10 +1404,10 @@
|
||||
<ClCompile Include="..\..\..\..\modules\juce_data_structures\values\juce_ValueTree.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_data_structures\values\juce_ValueTreeSynchroniser.cpp">
|
||||
<ClCompile Include="..\..\..\..\modules\juce_data_structures\values\juce_ValueTreePropertyWithDefault_test.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_data_structures\values\juce_ValueWithDefault.cpp">
|
||||
<ClCompile Include="..\..\..\..\modules\juce_data_structures\values\juce_ValueTreeSynchroniser.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_data_structures\juce_data_structures.cpp">
|
||||
@@ -1452,6 +1638,9 @@
|
||||
<ClCompile Include="..\..\..\..\modules\juce_graphics\geometry\juce_PathStrokeType.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_graphics\geometry\juce_Rectangle_test.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_graphics\image_formats\jpglib\jcapimin.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
@@ -1929,6 +2118,9 @@
|
||||
<ClCompile Include="..\..\..\..\modules\juce_gui_basics\misc\juce_DropShadower.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_gui_basics\misc\juce_FocusOutline.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_gui_basics\misc\juce_JUCESplashScreen.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
@@ -1953,6 +2145,9 @@
|
||||
<ClCompile Include="..\..\..\..\modules\juce_gui_basics\mouse\juce_MouseListener.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_AccessibilityTextHelpers_test.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_android_Accessibility.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
@@ -1980,9 +2175,6 @@
|
||||
<ClCompile Include="..\..\..\..\modules\juce_gui_basics\native\juce_android_Windowing.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_gui_basics\native\juce_common_MimeTypes.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_gui_basics\native\juce_ios_ContentSharer.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
@@ -2241,10 +2433,15 @@
|
||||
<ClCompile Include="..\..\..\..\modules\juce_opengl\juce_opengl.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\JuceLibraryCode\BinaryData.cpp"/>
|
||||
<ClCompile Include="..\..\JuceLibraryCode\include_juce_audio_basics.cpp"/>
|
||||
<ClCompile Include="..\..\JuceLibraryCode\include_juce_audio_devices.cpp"/>
|
||||
<ClCompile Include="..\..\JuceLibraryCode\include_juce_audio_formats.cpp"/>
|
||||
<ClCompile Include="..\..\JuceLibraryCode\include_juce_audio_processors.cpp"/>
|
||||
<ClCompile Include="..\..\JuceLibraryCode\include_juce_audio_processors.cpp">
|
||||
<AdditionalOptions> /bigobj %(AdditionalOptions)</AdditionalOptions>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\JuceLibraryCode\include_juce_audio_processors_ara.cpp"/>
|
||||
<ClCompile Include="..\..\JuceLibraryCode\include_juce_audio_processors_lv2_libs.cpp"/>
|
||||
<ClCompile Include="..\..\JuceLibraryCode\include_juce_audio_utils.cpp"/>
|
||||
<ClCompile Include="..\..\JuceLibraryCode\include_juce_core.cpp"/>
|
||||
<ClCompile Include="..\..\JuceLibraryCode\include_juce_cryptography.cpp"/>
|
||||
@@ -2259,6 +2456,7 @@
|
||||
<ClCompile Include="..\..\JuceLibraryCode\include_juce_opengl.cpp"/>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\Source\Plugins\ARAPlugin.h"/>
|
||||
<ClInclude Include="..\..\Source\Plugins\InternalPlugins.h"/>
|
||||
<ClInclude Include="..\..\Source\Plugins\IOConfigurationWindow.h"/>
|
||||
<ClInclude Include="..\..\Source\Plugins\PluginGraph.h"/>
|
||||
@@ -2303,6 +2501,7 @@
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEValue.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEZoneLayout.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_basics\native\juce_mac_CoreAudioLayouts.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_basics\native\juce_mac_CoreAudioTimeConversions.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_basics\sources\juce_AudioSource.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_basics\sources\juce_BufferingAudioSource.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_basics\sources\juce_ChannelRemappingAudioSource.h"/>
|
||||
@@ -2491,6 +2690,7 @@
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_formats\codecs\juce_OggVorbisAudioFormat.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_formats\codecs\juce_WavAudioFormat.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_formats\codecs\juce_WindowsMediaAudioFormat.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_formats\format\juce_ARAAudioReaders.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_formats\format\juce_AudioFormat.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_formats\format\juce_AudioFormatManager.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_formats\format\juce_AudioFormatReader.h"/>
|
||||
@@ -2503,6 +2703,76 @@
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_formats\juce_audio_formats.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format\juce_AudioPluginFormat.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format\juce_AudioPluginFormatManager.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\lilv\lilv.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\lilv\lilvmm.hpp"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\zix\common.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\zix\tree.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\filesystem.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\lilv_internal.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\atom\atom.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\atom\forge.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\atom\util.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\buf-size\buf-size.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\core\attributes.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\core\lv2.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\core\lv2_util.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\data-access\data-access.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\dynmanifest\dynmanifest.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\event\event-helpers.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\event\event.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\instance-access\instance-access.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\log\log.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\log\logger.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\midi\midi.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\morph\morph.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\options\options.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\parameters\parameters.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\patch\patch.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\port-groups\port-groups.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\port-props\port-props.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\presets\presets.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\resize-port\resize-port.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\state\state.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\time\time.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\ui\ui.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\units\units.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\uri-map\uri-map.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\urid\urid.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\worker\worker.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\serd\serd.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\attributes.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\base64.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\byte_sink.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\byte_source.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\node.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\reader.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\serd_config.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\serd_internal.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\stack.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\string_utils.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\system.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\uri_utils.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\sord\sord.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\sord\sordmm.hpp"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src\zix\btree.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src\zix\common.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src\zix\digest.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src\zix\hash.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src\sord_config.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src\sord_internal.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom\sratom\sratom.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\juce_lv2_config.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv_config.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd_config.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord_config.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\pslextensions\ipslcontextinfo.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\pslextensions\ipsleditcontroller.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\pslextensions\ipslgainreduction.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\pslextensions\ipslhostcommands.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\pslextensions\ipslviewembedding.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\pslextensions\ipslviewscaling.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\pslextensions\pslauextensions.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\pslextensions\pslvst2extensions.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\base\source\classfactoryhelpers.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\base\source\fbuffer.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\base\source\fdebug.h"/>
|
||||
@@ -2568,9 +2838,14 @@
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\vsteditcontroller.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\vstparameters.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\vstpresetfile.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_ARACommon.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_ARAHosting.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_AU_Shared.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_AudioUnitPluginFormat.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_LADSPAPluginFormat.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_LV2Common.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_LV2PluginFormat.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_LV2Resources.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Common.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Headers.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h"/>
|
||||
@@ -2586,10 +2861,17 @@
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\processors\juce_AudioProcessorParameter.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\processors\juce_AudioProcessorParameterGroup.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\processors\juce_GenericAudioProcessorEditor.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\processors\juce_HostedAudioProcessorParameter.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\processors\juce_PluginDescription.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\scanning\juce_KnownPluginList.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\scanning\juce_PluginDirectoryScanner.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\scanning\juce_PluginListComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\utilities\ARA\juce_ARA_utils.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\utilities\ARA\juce_ARADebug.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\utilities\ARA\juce_ARADocumentController.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\utilities\ARA\juce_ARAModelObjects.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\utilities\ARA\juce_ARAPlugInInstanceRoles.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\utilities\ARA\juce_AudioProcessor_ARAExtensions.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_AudioParameterBool.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_AudioParameterChoice.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_AudioParameterFloat.h"/>
|
||||
@@ -2597,6 +2879,8 @@
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_AudioProcessorParameterWithID.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_AudioProcessorValueTreeState.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_ExtensionsVisitor.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_FlagCache.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_NativeScaleFactorNotifier.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_ParameterAttachments.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_PluginHostType.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_RangedAudioParameter.h"/>
|
||||
@@ -2612,7 +2896,9 @@
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_utils\gui\juce_AudioThumbnailCache.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_utils\gui\juce_AudioVisualiserComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_utils\gui\juce_BluetoothMidiDevicePairingDialogue.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_utils\gui\juce_KeyboardComponentBase.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_utils\gui\juce_MidiKeyboardComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_utils\gui\juce_MPEKeyboardComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_utils\players\juce_AudioProcessorPlayer.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_utils\players\juce_SoundPlayer.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_utils\juce_audio_utils.h"/>
|
||||
@@ -2626,13 +2912,17 @@
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_LinkedListPointer.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_ListenerList.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_NamedValueSet.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_Optional.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_OwnedArray.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_PropertySet.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_ReferenceCountedArray.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_ScopedValueSetter.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_SingleThreadedAbstractFifo.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_SortedSet.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_SparseSet.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_Variant.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\files\juce_AndroidDocument.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\files\juce_common_MimeTypes.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\files\juce_DirectoryIterator.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\files\juce_File.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\files\juce_FileFilter.h"/>
|
||||
@@ -2665,6 +2955,7 @@
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\memory\juce_OptionalScopedPointer.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\memory\juce_ReferenceCountedObject.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\memory\juce_Reservoir.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\memory\juce_ScopedPointer.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\memory\juce_SharedResourcePointer.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\memory\juce_Singleton.h"/>
|
||||
@@ -2689,6 +2980,7 @@
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\network\juce_Socket.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\network\juce_URL.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\network\juce_WebInputStream.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\streams\juce_AndroidDocumentInputSource.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\streams\juce_BufferedInputStream.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\streams\juce_FileInputSource.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\streams\juce_InputSource.h"/>
|
||||
@@ -2771,8 +3063,8 @@
|
||||
<ClInclude Include="..\..\..\..\modules\juce_data_structures\values\juce_CachedValue.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_data_structures\values\juce_Value.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_data_structures\values\juce_ValueTree.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_data_structures\values\juce_ValueTreePropertyWithDefault.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_data_structures\values\juce_ValueTreeSynchroniser.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_data_structures\values\juce_ValueWithDefault.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_data_structures\juce_data_structures.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_dsp\containers\juce_AudioBlock.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_dsp\containers\juce_FixedSizeFunction.h"/>
|
||||
@@ -2840,6 +3132,7 @@
|
||||
<ClInclude Include="..\..\..\..\modules\juce_events\messages\juce_MountedVolumeListChangeDetector.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_events\messages\juce_NotificationType.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_events\native\juce_linux_EventLoop.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_events\native\juce_linux_EventLoopInternal.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_events\native\juce_osx_MessageQueue.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_events\native\juce_ScopedLowPowerModeDisabler.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_events\native\juce_win32_HiddenMessageWindow.h"/>
|
||||
@@ -2899,6 +3192,7 @@
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\images\juce_ImageCache.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\images\juce_ImageConvolutionKernel.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\images\juce_ImageFileFormat.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\images\juce_ScaledImage.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_mac_CoreGraphicsContext.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_mac_CoreGraphicsHelpers.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_RenderingHelpers.h"/>
|
||||
@@ -3001,6 +3295,7 @@
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\menus\juce_PopupMenu.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\misc\juce_BubbleComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\misc\juce_DropShadower.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\misc\juce_FocusOutline.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\misc\juce_JUCESplashScreen.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\mouse\juce_ComponentDragger.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\mouse\juce_DragAndDropContainer.h"/>
|
||||
@@ -3012,11 +3307,13 @@
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\mouse\juce_MouseInactivityDetector.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\mouse\juce_MouseInputSource.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\mouse\juce_MouseListener.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\mouse\juce_PointerState.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\mouse\juce_SelectedItemSet.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\mouse\juce_TextDragAndDropTarget.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\mouse\juce_TooltipClient.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_AccessibilityTextHelpers.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_AccessibilityElement.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_ComInterfaces.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_UIAExpandCollapseProvider.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_UIAGridItemProvider.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_UIAGridProvider.h"/>
|
||||
@@ -3034,7 +3331,9 @@
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_MultiTouchMapper.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_ScopedDPIAwarenessDisabler.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_win32_ScopedThreadDPIAwarenessSetter.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\positioning\juce_MarkerList.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\positioning\juce_RelativeCoordinate.h"/>
|
||||
@@ -3089,7 +3388,6 @@
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\embedding\juce_AndroidViewComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\embedding\juce_HWNDComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\embedding\juce_NSViewComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\embedding\juce_ScopedDPIAwarenessDisabler.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\embedding\juce_UIViewComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\embedding\juce_XEmbedComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_AnimatedAppComponent.h"/>
|
||||
@@ -3104,7 +3402,7 @@
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SplashScreen.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_CarbonViewWrapperComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_NSViewFrameWatcher.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\juce_gui_extra.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_opengl\geometry\juce_Draggable3DOrientation.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_opengl\geometry\juce_Matrix3D.h"/>
|
||||
@@ -3131,15 +3429,23 @@
|
||||
<ClInclude Include="..\..\..\..\modules\juce_opengl\opengl\juce_wgl.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_opengl\utils\juce_OpenGLAppComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_opengl\juce_opengl.h"/>
|
||||
<ClInclude Include="..\..\JuceLibraryCode\BinaryData.h"/>
|
||||
<ClInclude Include="..\..\JuceLibraryCode\JuceHeader.h"/>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\..\Source\JUCEAppIcon.png"/>
|
||||
<None Include="..\..\..\..\examples\Assets\cassette_recorder.wav"/>
|
||||
<None Include="..\..\..\..\examples\Assets\cello.wav"/>
|
||||
<None Include="..\..\..\..\examples\Assets\guitar_amp.wav"/>
|
||||
<None Include="..\..\..\..\examples\Assets\proaudio.path"/>
|
||||
<None Include="..\..\..\..\examples\Assets\reverb_ir.wav"/>
|
||||
<None Include="..\..\..\..\examples\Assets\singing.ogg"/>
|
||||
<None Include="..\..\..\..\modules\juce_audio_devices\native\oboe\CMakeLists.txt"/>
|
||||
<None Include="..\..\..\..\modules\juce_audio_devices\native\oboe\README.md"/>
|
||||
<None Include="..\..\..\..\modules\juce_audio_formats\codecs\flac\Flac Licence.txt"/>
|
||||
<None Include="..\..\..\..\modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\README.md"/>
|
||||
<None Include="..\..\..\..\modules\juce_audio_formats\codecs\oggvorbis\Ogg Vorbis Licence.txt"/>
|
||||
<None Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\README.md"/>
|
||||
<None Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\base\LICENSE.txt"/>
|
||||
<None Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\base\README.md"/>
|
||||
<None Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\LICENSE.txt"/>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,6 @@
|
||||
Microsoft Visual Studio Solution File, Format Version 11.00
|
||||
# Visual Studio 2019
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 11.00
|
||||
# Visual Studio Version 16
|
||||
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AudioPluginHost - App", "AudioPluginHost_App.vcxproj", "{5666EAA2-C82B-D06A-5228-D0E810428536}"
|
||||
EndProject
|
||||
|
||||
@@ -63,8 +63,8 @@
|
||||
<ClCompile>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60102;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70002;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
<RuntimeTypeInfo>true</RuntimeTypeInfo>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
@@ -78,7 +78,8 @@
|
||||
<LanguageStandard>stdcpp14</LanguageStandard>
|
||||
</ClCompile>
|
||||
<ResourceCompile>
|
||||
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70002;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ResourceCompile>
|
||||
<Link>
|
||||
<OutputFile>$(OutDir)\AudioPluginHost.exe</OutputFile>
|
||||
@@ -105,8 +106,8 @@
|
||||
</Midl>
|
||||
<ClCompile>
|
||||
<Optimization>Full</Optimization>
|
||||
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60102;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70002;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
<RuntimeTypeInfo>true</RuntimeTypeInfo>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
@@ -120,7 +121,8 @@
|
||||
<LanguageStandard>stdcpp14</LanguageStandard>
|
||||
</ClCompile>
|
||||
<ResourceCompile>
|
||||
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x70002;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ResourceCompile>
|
||||
<Link>
|
||||
<OutputFile>$(OutDir)\AudioPluginHost.exe</OutputFile>
|
||||
@@ -141,6 +143,7 @@
|
||||
<Lib/>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\Source\Plugins\ARAPlugin.cpp"/>
|
||||
<ClCompile Include="..\..\Source\Plugins\InternalPlugins.cpp"/>
|
||||
<ClCompile Include="..\..\Source\Plugins\IOConfigurationWindow.cpp"/>
|
||||
<ClCompile Include="..\..\Source\Plugins\PluginGraph.cpp"/>
|
||||
@@ -159,15 +162,15 @@
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\buffers\juce_FloatVectorOperations.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMP_test.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPMidi1ToMidi2DefaultTranslator.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPSysEx7.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPTests.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\midi\ump\juce_UMPUtils.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
@@ -276,7 +279,7 @@
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_devices\audio_io\juce_AudioIODeviceType.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_devices\midi_io\ump\juce_UMPTests.cpp">
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_devices\audio_io\juce_SampleRateHelpers.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_devices\midi_io\juce_MidiDevices.cpp">
|
||||
@@ -645,6 +648,9 @@
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_formats\codecs\juce_WindowsMediaAudioFormat.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_formats\format\juce_ARAAudioReaders.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_formats\format\juce_AudioFormat.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
@@ -678,6 +684,123 @@
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format\juce_AudioPluginFormatManager.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\zix\tree.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\collections.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\filesystem.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\instance.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\lib.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\node.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\plugin.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\pluginclass.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\port.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\query.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\scalepoint.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\state.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\ui.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\util.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\world.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\atom\atom-test-utils.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\atom\atom-test.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\atom\forge-overflow-test.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\base64.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\byte_source.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\env.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\n3.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\node.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\reader.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\serdi.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\string.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\system.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\uri.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\writer.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src\zix\btree.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src\zix\digest.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src\zix\hash.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src\sord.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src\sord_test.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src\sord_validate.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src\sordi.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src\sordmm_test.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src\syntax.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom\src\sratom.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\base\source\baseiids.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
@@ -747,15 +870,33 @@
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\vstpresetfile.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_ARACommon.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_ARAHosting.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_LADSPAPluginFormat.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_LegacyAudioParameter.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_LV2PluginFormat.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_LV2PluginFormat_test.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_LV2SupportLibs.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat_test.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VSTPluginFormat.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
@@ -789,6 +930,24 @@
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\scanning\juce_PluginListComponent.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\ARA\juce_ARA_utils.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\ARA\juce_ARADocumentController.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\ARA\juce_ARADocumentControllerCommon.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\ARA\juce_ARAModelObjects.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\ARA\juce_ARAPlugInInstanceRoles.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\ARA\juce_AudioProcessor_ARAExtensions.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_AudioParameterBool.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
@@ -807,6 +966,9 @@
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_AudioProcessorValueTreeState.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_NativeScaleFactorNotifier.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_ParameterAttachments.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
@@ -819,6 +981,12 @@
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\juce_audio_processors.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\juce_audio_processors_ara.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\juce_audio_processors_lv2_libs.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_utils\audio_cd\juce_AudioCDReader.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
@@ -837,9 +1005,15 @@
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_utils\gui\juce_AudioVisualiserComponent.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_utils\gui\juce_KeyboardComponentBase.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_utils\gui\juce_MidiKeyboardComponent.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_utils\gui\juce_MPEKeyboardComponent.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_audio_utils\native\juce_android_BluetoothMidiDevicePairingDialogue.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
@@ -879,9 +1053,15 @@
|
||||
<ClCompile Include="..\..\..\..\modules\juce_core\containers\juce_HashMap_test.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_core\containers\juce_ListenerList.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_core\containers\juce_NamedValueSet.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_core\containers\juce_Optional_test.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_core\containers\juce_OwnedArray.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
@@ -897,6 +1077,9 @@
|
||||
<ClCompile Include="..\..\..\..\modules\juce_core\containers\juce_Variant.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_core\files\juce_common_MimeTypes.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_core\files\juce_DirectoryIterator.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
@@ -963,6 +1146,9 @@
|
||||
<ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_Uuid.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_core\native\juce_android_AndroidDocument.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_core\native\juce_android_Files.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
@@ -1218,10 +1404,10 @@
|
||||
<ClCompile Include="..\..\..\..\modules\juce_data_structures\values\juce_ValueTree.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_data_structures\values\juce_ValueTreeSynchroniser.cpp">
|
||||
<ClCompile Include="..\..\..\..\modules\juce_data_structures\values\juce_ValueTreePropertyWithDefault_test.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_data_structures\values\juce_ValueWithDefault.cpp">
|
||||
<ClCompile Include="..\..\..\..\modules\juce_data_structures\values\juce_ValueTreeSynchroniser.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_data_structures\juce_data_structures.cpp">
|
||||
@@ -1452,6 +1638,9 @@
|
||||
<ClCompile Include="..\..\..\..\modules\juce_graphics\geometry\juce_PathStrokeType.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_graphics\geometry\juce_Rectangle_test.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_graphics\image_formats\jpglib\jcapimin.c">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
@@ -1929,6 +2118,9 @@
|
||||
<ClCompile Include="..\..\..\..\modules\juce_gui_basics\misc\juce_DropShadower.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_gui_basics\misc\juce_FocusOutline.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_gui_basics\misc\juce_JUCESplashScreen.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
@@ -1953,6 +2145,9 @@
|
||||
<ClCompile Include="..\..\..\..\modules\juce_gui_basics\mouse\juce_MouseListener.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_AccessibilityTextHelpers_test.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_android_Accessibility.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
@@ -1980,9 +2175,6 @@
|
||||
<ClCompile Include="..\..\..\..\modules\juce_gui_basics\native\juce_android_Windowing.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_gui_basics\native\juce_common_MimeTypes.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\modules\juce_gui_basics\native\juce_ios_ContentSharer.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
@@ -2241,10 +2433,15 @@
|
||||
<ClCompile Include="..\..\..\..\modules\juce_opengl\juce_opengl.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\JuceLibraryCode\BinaryData.cpp"/>
|
||||
<ClCompile Include="..\..\JuceLibraryCode\include_juce_audio_basics.cpp"/>
|
||||
<ClCompile Include="..\..\JuceLibraryCode\include_juce_audio_devices.cpp"/>
|
||||
<ClCompile Include="..\..\JuceLibraryCode\include_juce_audio_formats.cpp"/>
|
||||
<ClCompile Include="..\..\JuceLibraryCode\include_juce_audio_processors.cpp"/>
|
||||
<ClCompile Include="..\..\JuceLibraryCode\include_juce_audio_processors.cpp">
|
||||
<AdditionalOptions> /bigobj %(AdditionalOptions)</AdditionalOptions>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\JuceLibraryCode\include_juce_audio_processors_ara.cpp"/>
|
||||
<ClCompile Include="..\..\JuceLibraryCode\include_juce_audio_processors_lv2_libs.cpp"/>
|
||||
<ClCompile Include="..\..\JuceLibraryCode\include_juce_audio_utils.cpp"/>
|
||||
<ClCompile Include="..\..\JuceLibraryCode\include_juce_core.cpp"/>
|
||||
<ClCompile Include="..\..\JuceLibraryCode\include_juce_cryptography.cpp"/>
|
||||
@@ -2259,6 +2456,7 @@
|
||||
<ClCompile Include="..\..\JuceLibraryCode\include_juce_opengl.cpp"/>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\Source\Plugins\ARAPlugin.h"/>
|
||||
<ClInclude Include="..\..\Source\Plugins\InternalPlugins.h"/>
|
||||
<ClInclude Include="..\..\Source\Plugins\IOConfigurationWindow.h"/>
|
||||
<ClInclude Include="..\..\Source\Plugins\PluginGraph.h"/>
|
||||
@@ -2303,6 +2501,7 @@
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEValue.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEZoneLayout.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_basics\native\juce_mac_CoreAudioLayouts.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_basics\native\juce_mac_CoreAudioTimeConversions.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_basics\sources\juce_AudioSource.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_basics\sources\juce_BufferingAudioSource.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_basics\sources\juce_ChannelRemappingAudioSource.h"/>
|
||||
@@ -2491,6 +2690,7 @@
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_formats\codecs\juce_OggVorbisAudioFormat.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_formats\codecs\juce_WavAudioFormat.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_formats\codecs\juce_WindowsMediaAudioFormat.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_formats\format\juce_ARAAudioReaders.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_formats\format\juce_AudioFormat.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_formats\format\juce_AudioFormatManager.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_formats\format\juce_AudioFormatReader.h"/>
|
||||
@@ -2503,6 +2703,76 @@
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_formats\juce_audio_formats.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format\juce_AudioPluginFormat.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format\juce_AudioPluginFormatManager.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\lilv\lilv.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\lilv\lilvmm.hpp"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\zix\common.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\zix\tree.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\filesystem.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\lilv_internal.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\atom\atom.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\atom\forge.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\atom\util.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\buf-size\buf-size.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\core\attributes.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\core\lv2.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\core\lv2_util.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\data-access\data-access.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\dynmanifest\dynmanifest.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\event\event-helpers.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\event\event.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\instance-access\instance-access.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\log\log.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\log\logger.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\midi\midi.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\morph\morph.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\options\options.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\parameters\parameters.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\patch\patch.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\port-groups\port-groups.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\port-props\port-props.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\presets\presets.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\resize-port\resize-port.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\state\state.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\time\time.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\ui\ui.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\units\units.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\uri-map\uri-map.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\urid\urid.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\worker\worker.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\serd\serd.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\attributes.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\base64.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\byte_sink.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\byte_source.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\node.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\reader.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\serd_config.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\serd_internal.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\stack.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\string_utils.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\system.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd\src\uri_utils.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\sord\sord.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\sord\sordmm.hpp"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src\zix\btree.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src\zix\common.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src\zix\digest.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src\zix\hash.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src\sord_config.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src\sord_internal.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom\sratom\sratom.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\juce_lv2_config.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv_config.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd_config.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord_config.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\pslextensions\ipslcontextinfo.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\pslextensions\ipsleditcontroller.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\pslextensions\ipslgainreduction.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\pslextensions\ipslhostcommands.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\pslextensions\ipslviewembedding.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\pslextensions\ipslviewscaling.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\pslextensions\pslauextensions.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\pslextensions\pslvst2extensions.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\base\source\classfactoryhelpers.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\base\source\fbuffer.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\base\source\fdebug.h"/>
|
||||
@@ -2568,9 +2838,14 @@
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\vsteditcontroller.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\vstparameters.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\vstpresetfile.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_ARACommon.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_ARAHosting.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_AU_Shared.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_AudioUnitPluginFormat.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_LADSPAPluginFormat.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_LV2Common.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_LV2PluginFormat.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_LV2Resources.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Common.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3Headers.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\juce_VST3PluginFormat.h"/>
|
||||
@@ -2586,10 +2861,17 @@
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\processors\juce_AudioProcessorParameter.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\processors\juce_AudioProcessorParameterGroup.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\processors\juce_GenericAudioProcessorEditor.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\processors\juce_HostedAudioProcessorParameter.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\processors\juce_PluginDescription.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\scanning\juce_KnownPluginList.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\scanning\juce_PluginDirectoryScanner.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\scanning\juce_PluginListComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\utilities\ARA\juce_ARA_utils.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\utilities\ARA\juce_ARADebug.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\utilities\ARA\juce_ARADocumentController.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\utilities\ARA\juce_ARAModelObjects.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\utilities\ARA\juce_ARAPlugInInstanceRoles.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\utilities\ARA\juce_AudioProcessor_ARAExtensions.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_AudioParameterBool.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_AudioParameterChoice.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_AudioParameterFloat.h"/>
|
||||
@@ -2597,6 +2879,8 @@
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_AudioProcessorParameterWithID.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_AudioProcessorValueTreeState.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_ExtensionsVisitor.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_FlagCache.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_NativeScaleFactorNotifier.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_ParameterAttachments.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_PluginHostType.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\utilities\juce_RangedAudioParameter.h"/>
|
||||
@@ -2612,7 +2896,9 @@
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_utils\gui\juce_AudioThumbnailCache.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_utils\gui\juce_AudioVisualiserComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_utils\gui\juce_BluetoothMidiDevicePairingDialogue.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_utils\gui\juce_KeyboardComponentBase.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_utils\gui\juce_MidiKeyboardComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_utils\gui\juce_MPEKeyboardComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_utils\players\juce_AudioProcessorPlayer.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_utils\players\juce_SoundPlayer.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_audio_utils\juce_audio_utils.h"/>
|
||||
@@ -2626,13 +2912,17 @@
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_LinkedListPointer.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_ListenerList.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_NamedValueSet.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_Optional.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_OwnedArray.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_PropertySet.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_ReferenceCountedArray.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_ScopedValueSetter.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_SingleThreadedAbstractFifo.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_SortedSet.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_SparseSet.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_Variant.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\files\juce_AndroidDocument.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\files\juce_common_MimeTypes.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\files\juce_DirectoryIterator.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\files\juce_File.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\files\juce_FileFilter.h"/>
|
||||
@@ -2665,6 +2955,7 @@
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\memory\juce_OptionalScopedPointer.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\memory\juce_ReferenceCountedObject.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\memory\juce_Reservoir.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\memory\juce_ScopedPointer.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\memory\juce_SharedResourcePointer.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\memory\juce_Singleton.h"/>
|
||||
@@ -2689,6 +2980,7 @@
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\network\juce_Socket.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\network\juce_URL.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\network\juce_WebInputStream.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\streams\juce_AndroidDocumentInputSource.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\streams\juce_BufferedInputStream.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\streams\juce_FileInputSource.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_core\streams\juce_InputSource.h"/>
|
||||
@@ -2771,8 +3063,8 @@
|
||||
<ClInclude Include="..\..\..\..\modules\juce_data_structures\values\juce_CachedValue.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_data_structures\values\juce_Value.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_data_structures\values\juce_ValueTree.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_data_structures\values\juce_ValueTreePropertyWithDefault.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_data_structures\values\juce_ValueTreeSynchroniser.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_data_structures\values\juce_ValueWithDefault.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_data_structures\juce_data_structures.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_dsp\containers\juce_AudioBlock.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_dsp\containers\juce_FixedSizeFunction.h"/>
|
||||
@@ -2840,6 +3132,7 @@
|
||||
<ClInclude Include="..\..\..\..\modules\juce_events\messages\juce_MountedVolumeListChangeDetector.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_events\messages\juce_NotificationType.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_events\native\juce_linux_EventLoop.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_events\native\juce_linux_EventLoopInternal.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_events\native\juce_osx_MessageQueue.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_events\native\juce_ScopedLowPowerModeDisabler.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_events\native\juce_win32_HiddenMessageWindow.h"/>
|
||||
@@ -2899,6 +3192,7 @@
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\images\juce_ImageCache.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\images\juce_ImageConvolutionKernel.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\images\juce_ImageFileFormat.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\images\juce_ScaledImage.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_mac_CoreGraphicsContext.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_mac_CoreGraphicsHelpers.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_RenderingHelpers.h"/>
|
||||
@@ -3001,6 +3295,7 @@
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\menus\juce_PopupMenu.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\misc\juce_BubbleComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\misc\juce_DropShadower.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\misc\juce_FocusOutline.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\misc\juce_JUCESplashScreen.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\mouse\juce_ComponentDragger.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\mouse\juce_DragAndDropContainer.h"/>
|
||||
@@ -3012,11 +3307,13 @@
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\mouse\juce_MouseInactivityDetector.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\mouse\juce_MouseInputSource.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\mouse\juce_MouseListener.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\mouse\juce_PointerState.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\mouse\juce_SelectedItemSet.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\mouse\juce_TextDragAndDropTarget.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\mouse\juce_TooltipClient.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_AccessibilityTextHelpers.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_AccessibilityElement.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_ComInterfaces.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_UIAExpandCollapseProvider.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_UIAGridItemProvider.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_UIAGridProvider.h"/>
|
||||
@@ -3034,7 +3331,9 @@
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_MultiTouchMapper.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_ScopedDPIAwarenessDisabler.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_win32_ScopedThreadDPIAwarenessSetter.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\positioning\juce_MarkerList.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\positioning\juce_RelativeCoordinate.h"/>
|
||||
@@ -3089,7 +3388,6 @@
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\embedding\juce_AndroidViewComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\embedding\juce_HWNDComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\embedding\juce_NSViewComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\embedding\juce_ScopedDPIAwarenessDisabler.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\embedding\juce_UIViewComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\embedding\juce_XEmbedComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_AnimatedAppComponent.h"/>
|
||||
@@ -3104,7 +3402,7 @@
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SplashScreen.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_CarbonViewWrapperComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_NSViewFrameWatcher.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\juce_gui_extra.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_opengl\geometry\juce_Draggable3DOrientation.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_opengl\geometry\juce_Matrix3D.h"/>
|
||||
@@ -3131,15 +3429,23 @@
|
||||
<ClInclude Include="..\..\..\..\modules\juce_opengl\opengl\juce_wgl.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_opengl\utils\juce_OpenGLAppComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_opengl\juce_opengl.h"/>
|
||||
<ClInclude Include="..\..\JuceLibraryCode\BinaryData.h"/>
|
||||
<ClInclude Include="..\..\JuceLibraryCode\JuceHeader.h"/>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\..\Source\JUCEAppIcon.png"/>
|
||||
<None Include="..\..\..\..\examples\Assets\cassette_recorder.wav"/>
|
||||
<None Include="..\..\..\..\examples\Assets\cello.wav"/>
|
||||
<None Include="..\..\..\..\examples\Assets\guitar_amp.wav"/>
|
||||
<None Include="..\..\..\..\examples\Assets\proaudio.path"/>
|
||||
<None Include="..\..\..\..\examples\Assets\reverb_ir.wav"/>
|
||||
<None Include="..\..\..\..\examples\Assets\singing.ogg"/>
|
||||
<None Include="..\..\..\..\modules\juce_audio_devices\native\oboe\CMakeLists.txt"/>
|
||||
<None Include="..\..\..\..\modules\juce_audio_devices\native\oboe\README.md"/>
|
||||
<None Include="..\..\..\..\modules\juce_audio_formats\codecs\flac\Flac Licence.txt"/>
|
||||
<None Include="..\..\..\..\modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\README.md"/>
|
||||
<None Include="..\..\..\..\modules\juce_audio_formats\codecs\oggvorbis\Ogg Vorbis Licence.txt"/>
|
||||
<None Include="..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\README.md"/>
|
||||
<None Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\base\LICENSE.txt"/>
|
||||
<None Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\base\README.md"/>
|
||||
<None Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\LICENSE.txt"/>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,20 +1,21 @@
|
||||
Microsoft Visual Studio Solution File, Format Version 11.00
|
||||
# Visual Studio 2015
|
||||
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AudioPluginHost - App", "AudioPluginHost_App.vcxproj", "{5666EAA2-C82B-D06A-5228-D0E810428536}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|x64 = Debug|x64
|
||||
Release|x64 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{5666EAA2-C82B-D06A-5228-D0E810428536}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{5666EAA2-C82B-D06A-5228-D0E810428536}.Debug|x64.Build.0 = Debug|x64
|
||||
{5666EAA2-C82B-D06A-5228-D0E810428536}.Release|x64.ActiveCfg = Release|x64
|
||||
{5666EAA2-C82B-D06A-5228-D0E810428536}.Release|x64.Build.0 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 11.00
|
||||
# Visual Studio Version 17
|
||||
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AudioPluginHost - App", "AudioPluginHost_App.vcxproj", "{5666EAA2-C82B-D06A-5228-D0E810428536}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|x64 = Debug|x64
|
||||
Release|x64 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{5666EAA2-C82B-D06A-5228-D0E810428536}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{5666EAA2-C82B-D06A-5228-D0E810428536}.Debug|x64.Build.0 = Debug|x64
|
||||
{5666EAA2-C82B-D06A-5228-D0E810428536}.Release|x64.ActiveCfg = Release|x64
|
||||
{5666EAA2-C82B-D06A-5228-D0E810428536}.Release|x64.Build.0 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 42 KiB |
@@ -1,36 +1,36 @@
|
||||
#pragma code_page(65001)
|
||||
|
||||
#ifdef JUCE_USER_DEFINED_RC_FILE
|
||||
#include JUCE_USER_DEFINED_RC_FILE
|
||||
#else
|
||||
|
||||
#undef WIN32_LEAN_AND_MEAN
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 1,0,0,0
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904E4"
|
||||
BEGIN
|
||||
VALUE "CompanyName", "Raw Material Software Limited\0"
|
||||
VALUE "LegalCopyright", "Raw Material Software Limited\0"
|
||||
VALUE "FileDescription", "AudioPluginHost\0"
|
||||
VALUE "FileVersion", "1.0.0\0"
|
||||
VALUE "ProductName", "AudioPluginHost\0"
|
||||
VALUE "ProductVersion", "1.0.0\0"
|
||||
END
|
||||
END
|
||||
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x409, 1252
|
||||
END
|
||||
END
|
||||
|
||||
#endif
|
||||
|
||||
IDI_ICON1 ICON DISCARDABLE "icon.ico"
|
||||
#pragma code_page(65001)
|
||||
|
||||
#ifdef JUCE_USER_DEFINED_RC_FILE
|
||||
#include JUCE_USER_DEFINED_RC_FILE
|
||||
#else
|
||||
|
||||
#undef WIN32_LEAN_AND_MEAN
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 1,0,0,0
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904E4"
|
||||
BEGIN
|
||||
VALUE "CompanyName", "Raw Material Software Limited\0"
|
||||
VALUE "LegalCopyright", "Raw Material Software Limited\0"
|
||||
VALUE "FileDescription", "AudioPluginHost\0"
|
||||
VALUE "FileVersion", "1.0.0\0"
|
||||
VALUE "ProductName", "AudioPluginHost\0"
|
||||
VALUE "ProductVersion", "1.0.0\0"
|
||||
END
|
||||
END
|
||||
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x409, 1252
|
||||
END
|
||||
END
|
||||
|
||||
#endif
|
||||
|
||||
IDI_ICON1 ICON DISCARDABLE "icon.ico"
|
||||
IDI_ICON2 ICON DISCARDABLE "icon.ico"
|
||||
@@ -23,6 +23,7 @@
|
||||
50AFD116DCA6EC228EFB322D /* UIKit.framework */ = {isa = PBXBuildFile; fileRef = F9EDC54DFBCF3A63E0AA5D73; };
|
||||
59F4F23BFFDAB414B4801F85 /* Images.xcassets */ = {isa = PBXBuildFile; fileRef = 29E0972229FB44D969035B4E; };
|
||||
5C4D406B924230F83E3580AD /* include_juce_audio_devices.mm */ = {isa = PBXBuildFile; fileRef = 65968EA1B476D71F14DE1D58; };
|
||||
60BBD03840ABDD719FED194F /* include_juce_audio_processors_lv2_libs.cpp */ = {isa = PBXBuildFile; fileRef = 5183A94449F6317518C48B0C; };
|
||||
70580743C3D5695F065FF698 /* CoreAudioKit.framework */ = {isa = PBXBuildFile; fileRef = E68018DE199135B7F738FB17; };
|
||||
73E371F1B912FCCAE0CD7E5D /* Accelerate.framework */ = {isa = PBXBuildFile; fileRef = 86CA337014D3F67E906FFD28; };
|
||||
76A80851698FC773D2479B4E /* include_juce_core.mm */ = {isa = PBXBuildFile; fileRef = 683CEE986A2467C850FE99E6; };
|
||||
@@ -31,6 +32,8 @@
|
||||
851C1165C9E4ACDD19C56A96 /* AVFoundation.framework */ = {isa = PBXBuildFile; fileRef = 942A0F04EFB8D0B2FF9780BA; };
|
||||
9056B642BEF870098DE344E5 /* Foundation.framework */ = {isa = PBXBuildFile; fileRef = 03FA420AACDD03D50AA16E4A; };
|
||||
92EE84159C7027A137F06204 /* CoreText.framework */ = {isa = PBXBuildFile; fileRef = 66643EDF46AE8C5B7956B91D; };
|
||||
970A893BD34180916C9D01C4 /* ARAPlugin.cpp */ = {isa = PBXBuildFile; fileRef = 6A01D5F304346E0332264056; };
|
||||
A0144A682BF4843C8CF53FE4 /* BinaryData.cpp */ = {isa = PBXBuildFile; fileRef = 6D107D7946DC5976B766345B; };
|
||||
A02C9F4C4B840C27B6CAFEBD /* QuartzCore.framework */ = {isa = PBXBuildFile; fileRef = 89309C0C5F3269BD06BE7F27; };
|
||||
A09E93F1B354E1FF8B3E9ABE /* include_juce_data_structures.mm */ = {isa = PBXBuildFile; fileRef = 5EF1D381F42AA8764597F189; };
|
||||
A1B0416DA378BB0C3AD6F74B /* HostStartup.cpp */ = {isa = PBXBuildFile; fileRef = A66EFAC64B1B67B536C73415; };
|
||||
@@ -38,6 +41,7 @@
|
||||
B0D5475F716126465FCE1586 /* CoreImage.framework */ = {isa = PBXBuildFile; fileRef = CFFA8E9A7820C5A27B4393C9; };
|
||||
C38D14DC58F1941DD5E4BF60 /* include_juce_gui_extra.mm */ = {isa = PBXBuildFile; fileRef = 2BE6C2DFD6EBB9A89109AEB5; };
|
||||
C81D59C798F9F1F1A549FF07 /* CoreServices.framework */ = {isa = PBXBuildFile; fileRef = 7D924E83DABA5B54205C52F4; };
|
||||
CAC10E4345428CAEE6F0DA1B /* include_juce_audio_processors_ara.cpp */ = {isa = PBXBuildFile; fileRef = A43CE79CB190C2D69E17E1E3; };
|
||||
CAF0DE157C8F7D9F168AA3B6 /* include_juce_audio_processors.mm */ = {isa = PBXBuildFile; fileRef = 5FBD6C402617272052BB4D81; };
|
||||
E092A70431B046BF1F50A482 /* CoreMIDI.framework */ = {isa = PBXBuildFile; fileRef = 5AF0CA7CDFCA90B4DE1F55C3; };
|
||||
E283262A07376A7EDFCEAF6F /* LaunchScreen.storyboard */ = {isa = PBXBuildFile; fileRef = F58EBA72DA53F75945B91321; };
|
||||
@@ -54,6 +58,9 @@
|
||||
04AABCD3491318FB32E844B4 /* MainHostWindow.cpp */ /* MainHostWindow.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = MainHostWindow.cpp; path = ../../Source/UI/MainHostWindow.cpp; sourceTree = SOURCE_ROOT; };
|
||||
04DB9A49969ECC740CC25665 /* GraphEditorPanel.h */ /* GraphEditorPanel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = GraphEditorPanel.h; path = ../../Source/UI/GraphEditorPanel.h; sourceTree = SOURCE_ROOT; };
|
||||
0B1CC8C80F6F99BDE7D6AEC9 /* PluginGraph.cpp */ /* PluginGraph.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = PluginGraph.cpp; path = ../../Source/Plugins/PluginGraph.cpp; sourceTree = SOURCE_ROOT; };
|
||||
11E6340DB6A6F68F5040101B /* reverb_ir.wav */ /* reverb_ir.wav */ = {isa = PBXFileReference; lastKnownFileType = file.wav; name = reverb_ir.wav; path = ../../../../examples/Assets/reverb_ir.wav; sourceTree = SOURCE_ROOT; };
|
||||
17A29FEB16D4439351511947 /* guitar_amp.wav */ /* guitar_amp.wav */ = {isa = PBXFileReference; lastKnownFileType = file.wav; name = guitar_amp.wav; path = ../../../../examples/Assets/guitar_amp.wav; sourceTree = SOURCE_ROOT; };
|
||||
1DADAD8E34AAF4AFF1C69DC4 /* BinaryData.h */ /* BinaryData.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = BinaryData.h; path = ../../JuceLibraryCode/BinaryData.h; sourceTree = SOURCE_ROOT; };
|
||||
29E0972229FB44D969035B4E /* Images.xcassets */ /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = AudioPluginHost/Images.xcassets; sourceTree = SOURCE_ROOT; };
|
||||
2A6983F82B13F9E8B10299AE /* Icon.icns */ /* Icon.icns */ = {isa = PBXFileReference; lastKnownFileType = file.icns; name = Icon.icns; path = Icon.icns; sourceTree = SOURCE_ROOT; };
|
||||
2BE6C2DFD6EBB9A89109AEB5 /* include_juce_gui_extra.mm */ /* include_juce_gui_extra.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_gui_extra.mm; path = ../../JuceLibraryCode/include_juce_gui_extra.mm; sourceTree = SOURCE_ROOT; };
|
||||
@@ -63,8 +70,10 @@
|
||||
3C070DD522CDD11FFC87425D /* juce_audio_utils */ /* juce_audio_utils */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_audio_utils; path = ../../../../modules/juce_audio_utils; sourceTree = SOURCE_ROOT; };
|
||||
3D57FE2A8877F12A61054726 /* juce_core */ /* juce_core */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_core; path = ../../../../modules/juce_core; sourceTree = SOURCE_ROOT; };
|
||||
3D78A731234A833CA112AE45 /* GraphEditorPanel.cpp */ /* GraphEditorPanel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = GraphEditorPanel.cpp; path = ../../Source/UI/GraphEditorPanel.cpp; sourceTree = SOURCE_ROOT; };
|
||||
45098BAF7E088D41A4E69E42 /* singing.ogg */ /* singing.ogg */ = {isa = PBXFileReference; lastKnownFileType = file.ogg; name = singing.ogg; path = ../../../../examples/Assets/singing.ogg; sourceTree = SOURCE_ROOT; };
|
||||
46C3C2CD301CD59C51FD02D6 /* PluginGraph.h */ /* PluginGraph.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PluginGraph.h; path = ../../Source/Plugins/PluginGraph.h; sourceTree = SOURCE_ROOT; };
|
||||
4C7D82F9274A4F9DBF11235C /* include_juce_audio_basics.mm */ /* include_juce_audio_basics.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_audio_basics.mm; path = ../../JuceLibraryCode/include_juce_audio_basics.mm; sourceTree = SOURCE_ROOT; };
|
||||
5183A94449F6317518C48B0C /* include_juce_audio_processors_lv2_libs.cpp */ /* include_juce_audio_processors_lv2_libs.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = include_juce_audio_processors_lv2_libs.cpp; path = ../../JuceLibraryCode/include_juce_audio_processors_lv2_libs.cpp; sourceTree = SOURCE_ROOT; };
|
||||
5313EB852E41EE58B199B9A2 /* juce_audio_devices */ /* juce_audio_devices */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_audio_devices; path = ../../../../modules/juce_audio_devices; sourceTree = SOURCE_ROOT; };
|
||||
57DF618F1DE781556B7AFC32 /* Info-App.plist */ /* Info-App.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "Info-App.plist"; path = "Info-App.plist"; sourceTree = SOURCE_ROOT; };
|
||||
59842A98E5EBBC54B50C04CD /* juce_events */ /* juce_events */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_events; path = ../../../../modules/juce_events; sourceTree = SOURCE_ROOT; };
|
||||
@@ -76,7 +85,9 @@
|
||||
65968EA1B476D71F14DE1D58 /* include_juce_audio_devices.mm */ /* include_juce_audio_devices.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_audio_devices.mm; path = ../../JuceLibraryCode/include_juce_audio_devices.mm; sourceTree = SOURCE_ROOT; };
|
||||
66643EDF46AE8C5B7956B91D /* CoreText.framework */ /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; };
|
||||
683CEE986A2467C850FE99E6 /* include_juce_core.mm */ /* include_juce_core.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_core.mm; path = ../../JuceLibraryCode/include_juce_core.mm; sourceTree = SOURCE_ROOT; };
|
||||
6A01D5F304346E0332264056 /* ARAPlugin.cpp */ /* ARAPlugin.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ARAPlugin.cpp; path = ../../Source/Plugins/ARAPlugin.cpp; sourceTree = SOURCE_ROOT; };
|
||||
6A71B2BCAC4239072BC2BD7E /* juce_audio_basics */ /* juce_audio_basics */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_audio_basics; path = ../../../../modules/juce_audio_basics; sourceTree = SOURCE_ROOT; };
|
||||
6D107D7946DC5976B766345B /* BinaryData.cpp */ /* BinaryData.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = BinaryData.cpp; path = ../../JuceLibraryCode/BinaryData.cpp; sourceTree = SOURCE_ROOT; };
|
||||
7D924E83DABA5B54205C52F4 /* CoreServices.framework */ /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = System/Library/Frameworks/CoreServices.framework; sourceTree = SDKROOT; };
|
||||
81C1A7770E082F56FE5A90A7 /* juce_opengl */ /* juce_opengl */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_opengl; path = ../../../../modules/juce_opengl; sourceTree = SOURCE_ROOT; };
|
||||
82800DBA287EF4BAB13B42FB /* include_juce_graphics.mm */ /* include_juce_graphics.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_graphics.mm; path = ../../JuceLibraryCode/include_juce_graphics.mm; sourceTree = SOURCE_ROOT; };
|
||||
@@ -91,10 +102,14 @@
|
||||
942A0F04EFB8D0B2FF9780BA /* AVFoundation.framework */ /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
|
||||
94CB96C8E4B51F52776C2638 /* juce_graphics */ /* juce_graphics */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_graphics; path = ../../../../modules/juce_graphics; sourceTree = SOURCE_ROOT; };
|
||||
97918AB43AD460AFA8FA2FFE /* PluginWindow.h */ /* PluginWindow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PluginWindow.h; path = ../../Source/UI/PluginWindow.h; sourceTree = SOURCE_ROOT; };
|
||||
97E63C295843A1E665E70473 /* cello.wav */ /* cello.wav */ = {isa = PBXFileReference; lastKnownFileType = file.wav; name = cello.wav; path = ../../../../examples/Assets/cello.wav; sourceTree = SOURCE_ROOT; };
|
||||
9F9B445E6755CAA19E4344ED /* CoreAudio.framework */ /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = System/Library/Frameworks/CoreAudio.framework; sourceTree = SDKROOT; };
|
||||
A43CE79CB190C2D69E17E1E3 /* include_juce_audio_processors_ara.cpp */ /* include_juce_audio_processors_ara.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = include_juce_audio_processors_ara.cpp; path = ../../JuceLibraryCode/include_juce_audio_processors_ara.cpp; sourceTree = SOURCE_ROOT; };
|
||||
A5DFC13E4F09134B0D226A3E /* MainHostWindow.h */ /* MainHostWindow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MainHostWindow.h; path = ../../Source/UI/MainHostWindow.h; sourceTree = SOURCE_ROOT; };
|
||||
A5E7CA8A71D049BE2BD33861 /* JuceHeader.h */ /* JuceHeader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JuceHeader.h; path = ../../JuceLibraryCode/JuceHeader.h; sourceTree = SOURCE_ROOT; };
|
||||
A66EFAC64B1B67B536C73415 /* HostStartup.cpp */ /* HostStartup.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = HostStartup.cpp; path = ../../Source/HostStartup.cpp; sourceTree = SOURCE_ROOT; };
|
||||
A692426308435C2002F988FE /* proaudio.path */ /* proaudio.path */ = {isa = PBXFileReference; lastKnownFileType = file.path; name = proaudio.path; path = ../../../../examples/Assets/proaudio.path; sourceTree = SOURCE_ROOT; };
|
||||
A872AF2CAFFC72109B9C6348 /* cassette_recorder.wav */ /* cassette_recorder.wav */ = {isa = PBXFileReference; lastKnownFileType = file.wav; name = cassette_recorder.wav; path = ../../../../examples/Assets/cassette_recorder.wav; sourceTree = SOURCE_ROOT; };
|
||||
B285CAB91AE928C476CA4F9C /* include_juce_audio_utils.mm */ /* include_juce_audio_utils.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_audio_utils.mm; path = ../../JuceLibraryCode/include_juce_audio_utils.mm; sourceTree = SOURCE_ROOT; };
|
||||
B2A1E626CC120982805754F6 /* JUCEAppIcon.png */ /* JUCEAppIcon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = JUCEAppIcon.png; path = ../../Source/JUCEAppIcon.png; sourceTree = SOURCE_ROOT; };
|
||||
B457EE687507BF1DEEA7581F /* WebKit.framework */ /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; };
|
||||
@@ -102,6 +117,7 @@
|
||||
B8E24A5CEE6B7055537725CF /* include_juce_cryptography.mm */ /* include_juce_cryptography.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_cryptography.mm; path = ../../JuceLibraryCode/include_juce_cryptography.mm; sourceTree = SOURCE_ROOT; };
|
||||
B95B9D6774059DBB19F2B4E2 /* InternalPlugins.h */ /* InternalPlugins.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = InternalPlugins.h; path = ../../Source/Plugins/InternalPlugins.h; sourceTree = SOURCE_ROOT; };
|
||||
C37B2E77AAB6C9E13729BF99 /* IOConfigurationWindow.cpp */ /* IOConfigurationWindow.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = IOConfigurationWindow.cpp; path = ../../Source/Plugins/IOConfigurationWindow.cpp; sourceTree = SOURCE_ROOT; };
|
||||
CA726B9AA0EC87B58D005C8D /* ARAPlugin.h */ /* ARAPlugin.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ARAPlugin.h; path = ../../Source/Plugins/ARAPlugin.h; sourceTree = SOURCE_ROOT; };
|
||||
CFFA8E9A7820C5A27B4393C9 /* CoreImage.framework */ /* CoreImage.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreImage.framework; path = System/Library/Frameworks/CoreImage.framework; sourceTree = SDKROOT; };
|
||||
D0026F0A29B486D87E92BB8B /* OpenGLES.framework */ /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; };
|
||||
D4EBC17BDB7F88CCBC76730B /* AudioToolbox.framework */ /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
|
||||
@@ -141,6 +157,19 @@
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
49E2649CEC2DE569A9C985E6 /* BinaryData */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
A872AF2CAFFC72109B9C6348,
|
||||
97E63C295843A1E665E70473,
|
||||
17A29FEB16D4439351511947,
|
||||
A692426308435C2002F988FE,
|
||||
11E6340DB6A6F68F5040101B,
|
||||
45098BAF7E088D41A4E69E42,
|
||||
);
|
||||
name = BinaryData;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
65BEFC705A89E5C8A9E35C97 /* Source */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -157,10 +186,14 @@
|
||||
7E30376DDAD775FEFE64944C /* JUCE Library Code */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
6D107D7946DC5976B766345B,
|
||||
1DADAD8E34AAF4AFF1C69DC4,
|
||||
4C7D82F9274A4F9DBF11235C,
|
||||
65968EA1B476D71F14DE1D58,
|
||||
5D250A57C7DEA80248F30EED,
|
||||
5FBD6C402617272052BB4D81,
|
||||
A43CE79CB190C2D69E17E1E3,
|
||||
5183A94449F6317518C48B0C,
|
||||
B285CAB91AE928C476CA4F9C,
|
||||
683CEE986A2467C850FE99E6,
|
||||
B8E24A5CEE6B7055537725CF,
|
||||
@@ -180,6 +213,7 @@
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
B225B7F2CAABD28A41E7C339,
|
||||
49E2649CEC2DE569A9C985E6,
|
||||
);
|
||||
name = AudioPluginHost;
|
||||
sourceTree = "<group>";
|
||||
@@ -208,6 +242,8 @@
|
||||
9F51E92D8C77FA9DDD1F7B10 /* Plugins */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
6A01D5F304346E0332264056,
|
||||
CA726B9AA0EC87B58D005C8D,
|
||||
87A7AAB053051C49EAF4EE88,
|
||||
B95B9D6774059DBB19F2B4E2,
|
||||
C37B2E77AAB6C9E13729BF99,
|
||||
@@ -309,7 +345,7 @@
|
||||
ADE6E539DB98A302483A82D0 = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastUpgradeCheck = 1300;
|
||||
LastUpgradeCheck = 1340;
|
||||
ORGANIZATIONNAME = "Raw Material Software Limited";
|
||||
TargetAttributes = {
|
||||
DE12B7643D374BFF7E4FEB1C = {
|
||||
@@ -371,16 +407,20 @@
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
970A893BD34180916C9D01C4,
|
||||
7FF8A938915488310A7F5921,
|
||||
025B22813EA4E34CE3630B9A,
|
||||
09309BD494A05931864B6730,
|
||||
3E1689E23B9C85F03209DCEF,
|
||||
F635D974599DEC2ED91E6A88,
|
||||
A1B0416DA378BB0C3AD6F74B,
|
||||
A0144A682BF4843C8CF53FE4,
|
||||
15CCE43D7DCFC649638919D4,
|
||||
5C4D406B924230F83E3580AD,
|
||||
F4DD98B9310B679D50A2C8A6,
|
||||
CAF0DE157C8F7D9F168AA3B6,
|
||||
CAC10E4345428CAEE6F0DA1B,
|
||||
60BBD03840ABDD719FED194F,
|
||||
0F20A4AE04736634F097F5A6,
|
||||
76A80851698FC773D2479B4E,
|
||||
E4A926EF695823F0F13268FF,
|
||||
@@ -416,7 +456,7 @@
|
||||
"JUCE_CONTENT_SHARING=1",
|
||||
"JUCE_DISPLAY_SPLASH_SCREEN=0",
|
||||
"JUCE_USE_DARK_SPLASH_SCREEN=1",
|
||||
"JUCE_PROJUCER_VERSION=0x60102",
|
||||
"JUCE_PROJUCER_VERSION=0x70002",
|
||||
"JUCE_MODULE_AVAILABLE_juce_audio_basics=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_audio_devices=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_audio_formats=1",
|
||||
@@ -440,6 +480,7 @@
|
||||
"JUCE_PLUGINHOST_VST3=1",
|
||||
"JUCE_PLUGINHOST_AU=1",
|
||||
"JUCE_PLUGINHOST_LADSPA=1",
|
||||
"JUCE_PLUGINHOST_LV2=1",
|
||||
"JUCE_USE_CDREADER=0",
|
||||
"JUCE_USE_CDBURNER=0",
|
||||
"JUCE_WEB_BROWSER=0",
|
||||
@@ -451,13 +492,21 @@
|
||||
"JucePlugin_Build_VST3=0",
|
||||
"JucePlugin_Build_AU=0",
|
||||
"JucePlugin_Build_AUv3=0",
|
||||
"JucePlugin_Build_RTAS=0",
|
||||
"JucePlugin_Build_AAX=0",
|
||||
"JucePlugin_Build_Standalone=0",
|
||||
"JucePlugin_Build_Unity=0",
|
||||
"JucePlugin_Build_LV2=0",
|
||||
);
|
||||
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
|
||||
HEADER_SEARCH_PATHS = (
|
||||
"$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src",
|
||||
"$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv",
|
||||
"$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom",
|
||||
"$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src",
|
||||
"$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord",
|
||||
"$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd",
|
||||
"$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2",
|
||||
"$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK",
|
||||
"$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK",
|
||||
"$(SRCROOT)/../../JuceLibraryCode",
|
||||
"$(SRCROOT)/../../../../modules",
|
||||
@@ -467,9 +516,10 @@
|
||||
INFOPLIST_PREPROCESS = NO;
|
||||
INSTALL_PATH = "$(HOME)/Applications";
|
||||
LLVM_LTO = YES;
|
||||
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules";
|
||||
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion";
|
||||
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules";
|
||||
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes -Wunguarded-availability -Wunguarded-availability-new";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes -Wunguarded-availability -Wunguarded-availability-new";
|
||||
OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit -weak_framework UserNotifications";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.juce.pluginhost;
|
||||
PRODUCT_NAME = "Plugin Host";
|
||||
USE_HEADERMAP = NO;
|
||||
@@ -547,7 +597,7 @@
|
||||
"JUCE_CONTENT_SHARING=1",
|
||||
"JUCE_DISPLAY_SPLASH_SCREEN=0",
|
||||
"JUCE_USE_DARK_SPLASH_SCREEN=1",
|
||||
"JUCE_PROJUCER_VERSION=0x60102",
|
||||
"JUCE_PROJUCER_VERSION=0x70002",
|
||||
"JUCE_MODULE_AVAILABLE_juce_audio_basics=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_audio_devices=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_audio_formats=1",
|
||||
@@ -571,6 +621,7 @@
|
||||
"JUCE_PLUGINHOST_VST3=1",
|
||||
"JUCE_PLUGINHOST_AU=1",
|
||||
"JUCE_PLUGINHOST_LADSPA=1",
|
||||
"JUCE_PLUGINHOST_LV2=1",
|
||||
"JUCE_USE_CDREADER=0",
|
||||
"JUCE_USE_CDBURNER=0",
|
||||
"JUCE_WEB_BROWSER=0",
|
||||
@@ -582,13 +633,21 @@
|
||||
"JucePlugin_Build_VST3=0",
|
||||
"JucePlugin_Build_AU=0",
|
||||
"JucePlugin_Build_AUv3=0",
|
||||
"JucePlugin_Build_RTAS=0",
|
||||
"JucePlugin_Build_AAX=0",
|
||||
"JucePlugin_Build_Standalone=0",
|
||||
"JucePlugin_Build_Unity=0",
|
||||
"JucePlugin_Build_LV2=0",
|
||||
);
|
||||
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
|
||||
HEADER_SEARCH_PATHS = (
|
||||
"$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src",
|
||||
"$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv",
|
||||
"$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom",
|
||||
"$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src",
|
||||
"$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord",
|
||||
"$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd",
|
||||
"$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2",
|
||||
"$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK",
|
||||
"$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK",
|
||||
"$(SRCROOT)/../../JuceLibraryCode",
|
||||
"$(SRCROOT)/../../../../modules",
|
||||
@@ -597,9 +656,10 @@
|
||||
INFOPLIST_FILE = Info-App.plist;
|
||||
INFOPLIST_PREPROCESS = NO;
|
||||
INSTALL_PATH = "$(HOME)/Applications";
|
||||
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules";
|
||||
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion";
|
||||
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules";
|
||||
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes -Wunguarded-availability -Wunguarded-availability-new";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes -Wunguarded-availability -Wunguarded-availability-new";
|
||||
OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit -weak_framework UserNotifications";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.juce.pluginhost;
|
||||
PRODUCT_NAME = "Plugin Host";
|
||||
USE_HEADERMAP = NO;
|
||||
|
||||
@@ -42,18 +42,6 @@
|
||||
"filename": "Icon-Spotlight-40@3x.png",
|
||||
"scale": "3x"
|
||||
},
|
||||
{
|
||||
"idiom": "iphone",
|
||||
"size": "57x57",
|
||||
"filename": "Icon.png",
|
||||
"scale": "1x"
|
||||
},
|
||||
{
|
||||
"idiom": "iphone",
|
||||
"size": "57x57",
|
||||
"filename": "Icon@2x.png",
|
||||
"scale": "2x"
|
||||
},
|
||||
{
|
||||
"idiom": "iphone",
|
||||
"size": "60x60",
|
||||
@@ -102,30 +90,6 @@
|
||||
"filename": "Icon-Spotlight-40@2x-1.png",
|
||||
"scale": "2x"
|
||||
},
|
||||
{
|
||||
"idiom": "ipad",
|
||||
"size": "50x50",
|
||||
"filename": "Icon-Small-50.png",
|
||||
"scale": "1x"
|
||||
},
|
||||
{
|
||||
"idiom": "ipad",
|
||||
"size": "50x50",
|
||||
"filename": "Icon-Small-50@2x.png",
|
||||
"scale": "2x"
|
||||
},
|
||||
{
|
||||
"idiom": "ipad",
|
||||
"size": "72x72",
|
||||
"filename": "Icon-72.png",
|
||||
"scale": "1x"
|
||||
},
|
||||
{
|
||||
"idiom": "ipad",
|
||||
"size": "72x72",
|
||||
"filename": "Icon-72@2x.png",
|
||||
"scale": "2x"
|
||||
},
|
||||
{
|
||||
"idiom": "ipad",
|
||||
"size": "76x76",
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 5.5 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 13 KiB |
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user