massive refactoring for new feature-sets system

This commit is contained in:
Eric Froemling 2023-05-16 10:34:23 -07:00
parent 41c5ea0996
commit e1f37bfd93
No known key found for this signature in database
GPG Key ID: 89C93F0F8D6D5A98
1305 changed files with 102706 additions and 83000 deletions

View File

@ -16,12 +16,13 @@ root = true
end_of_line = lf
trim_trailing_whitespace = true
insert_final_newline = true
max_line_length = 80
# Python overrides.
[*.py]
indent_style = space
indent_size = 4
max_line_length = 79
max_line_length = 80
charset = utf-8
# Makefile overrides.

File diff suppressed because it is too large Load Diff

View File

@ -20,7 +20,7 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.10'
python-version: '3.11'
- name: Install dependencies
run: tools/pcommand install_pip_reqs
- name: Run checks and tests
@ -35,7 +35,7 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.10'
python-version: '3.11'
- name: Compile binary
run: make _cmake-simple-ci-server-build
@ -51,7 +51,7 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.10'
python-version: '3.11'
- name: Install dependencies
run: |
python -m pip install --upgrade pip

64
.gitignore vendored
View File

@ -57,7 +57,6 @@ gen/
# ew - want to ignore libs built by NDK but not a few specific others..
libs/
!**/GameCircleSDK/libs
!**/PlatformSDK/Android/libs
# Visual Studio
@ -81,31 +80,19 @@ libs/
!pythonw_d.exe
!**/OculusSDK/Tools/**/*.exe
# Note: specifying exact Debug/Release dirs for now; we wind up ignoring
# some files under LibOVR if we try to glob these together.
ballisticacore-windows/Debug
ballisticacore-windows/Release
ballisticacore-windows/BallisticaCore/Debug
ballisticacore-windows/BallisticaCore/Release
ballisticacore-windows/BallisticaCoreHeadless/Debug
ballisticacore-windows/BallisticaCoreHeadless/Release
ballisticacore-windows-oculus/BallisticaCoreVR/Projects/Windows/VS2015/Debug
ballisticacore-windows-oculus/BallisticaCoreVR/Projects/Windows/VS2015/Release
# Android Studio
# I'm keeping most IDEA related files out of git and only including gradle stuff;
# It's nice to be able to cleanly re-import the project.
# As time goes on, I'm making explicit exceptions for some key files (dictionaries, etc)
# which are nice to keep around.
ballisticacore-android/**/*.iml
ballisticakit-android/**/*.iml
.gradle
ballisticacore-android/.idea/*
ballisticakit-android/.idea/*
# Android Studio Stuff we *DO* want to keep
!ballisticacore-android/.idea/dictionaries
!ballisticacore-android/.idea/inspectionProfiles
!ballisticacore-android/.idea/codeStyles
!ballisticakit-android/.idea/dictionaries
!ballisticakit-android/.idea/inspectionProfiles
!ballisticakit-android/.idea/codeStyles
# NDK
.cxx
@ -114,31 +101,28 @@ ballisticacore-android/.idea/*
Thumbs.db
# Asset master source link
assets/src_master
# Asset build cache
.assetcache
src/assets/src_master
# XCode
xcuserdata/
# Generated sources
/src/ballistica/generated
/assets/src/ba_data/python/ba/_generated
/src/meta/bametainternal/generated
# Meta-generated sources
/src/ballistica/mgen
/src/ballistica/*/mgen
/src/assets/ba_data/python/*/_mgen
/src/meta/*/mgen
# Dynamically generated resource files
/ballisticacore-android/BallisticaCore/src/cardboard/res/drawable-*/vr_icon.png
/ballisticacore-android/BallisticaCore/src/cardboard/res/drawable-*/vr_icon_background.png
/ballisticacore-android/BallisticaCore/src/cardboard/res/drawable-*/icon.png
/ballisticacore-android/BallisticaCore/src/main/res/drawable-*/banner.png
/ballisticacore-android/BallisticaCore/src/main/res/mipmap-*/ic_launcher*.png
/ballisticacore-android/BallisticaCore/src/cardboard/res/mipmap-*/ic_launcher*.png
BallisticaCore.ico
/ballisticacore-xcode/BallisticaCore Shared/Assets.xcassets/AppIcon iOS.appiconset/icon_*.png
/ballisticacore-xcode/BallisticaCore Shared/Assets.xcassets/AppIcon macOS.appiconset/icon_*.png
/ballisticacore-xcode/BallisticaCore Shared/Assets.xcassets/tvOS App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Layer*.imagestacklayer/Content.imageset/*.png
/ballisticacore-xcode/BallisticaCore Shared/Assets.xcassets/tvOS App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Layer*.imagestacklayer/Content.imageset/*.png
/ballisticacore-xcode/BallisticaCore Shared/Assets.xcassets/tvOS App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/*.png
/ballisticacore-xcode/BallisticaCore Shared/Assets.xcassets/tvOS App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/*.png
/ballisticakit-android/BallisticaKit/src/cardboard/res/drawable-*/vr_icon.png
/ballisticakit-android/BallisticaKit/src/cardboard/res/drawable-*/vr_icon_background.png
/ballisticakit-android/BallisticaKit/src/cardboard/res/drawable-*/icon.png
/ballisticakit-android/BallisticaKit/src/main/res/drawable-*/banner.png
/ballisticakit-android/BallisticaKit/src/main/res/mipmap-*/ic_launcher*.png
/ballisticakit-android/BallisticaKit/src/cardboard/res/mipmap-*/ic_launcher*.png
BallisticaKit.ico
/ballisticakit-xcode/BallisticaKit Shared/Assets.xcassets/AppIcon iOS.appiconset/icon_*.png
/ballisticakit-xcode/BallisticaKit Shared/Assets.xcassets/AppIcon macOS.appiconset/icon_*.png
/ballisticakit-xcode/BallisticaKit Shared/Assets.xcassets/tvOS App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Layer*.imagestacklayer/Content.imageset/*.png
/ballisticakit-xcode/BallisticaKit Shared/Assets.xcassets/tvOS App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Layer*.imagestacklayer/Content.imageset/*.png
/ballisticakit-xcode/BallisticaKit Shared/Assets.xcassets/tvOS App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/*.png
/ballisticakit-xcode/BallisticaKit Shared/Assets.xcassets/tvOS App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/*.png

View File

@ -2,31 +2,29 @@
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/assets/src/ba_data/python" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/assets/ba_data/python" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/tools" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/generated_src/ballistica" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/meta" isTestSource="false" />
<excludeFolder url="file://$MODULE_DIR$/.efrocache" />
<excludeFolder url="file://$MODULE_DIR$/assets/build" />
<excludeFolder url="file://$MODULE_DIR$/assets/src/ba_data/audio" />
<excludeFolder url="file://$MODULE_DIR$/assets/src/ba_data/data" />
<excludeFolder url="file://$MODULE_DIR$/assets/src/ba_data/data/languages" />
<excludeFolder url="file://$MODULE_DIR$/assets/src/ba_data/data/maps" />
<excludeFolder url="file://$MODULE_DIR$/assets/src/ba_data/fonts" />
<excludeFolder url="file://$MODULE_DIR$/assets/src/ba_data/models" />
<excludeFolder url="file://$MODULE_DIR$/assets/src/ba_data/python-site-packages" />
<excludeFolder url="file://$MODULE_DIR$/assets/src/ba_data/textures" />
<excludeFolder url="file://$MODULE_DIR$/assets/src/pylib-android" />
<excludeFolder url="file://$MODULE_DIR$/assets/src/pylib-apple" />
<excludeFolder url="file://$MODULE_DIR$/assets/src/pylib-site-packages" />
<excludeFolder url="file://$MODULE_DIR$/assets/src/windows" />
<excludeFolder url="file://$MODULE_DIR$/ballisticacore-android" />
<excludeFolder url="file://$MODULE_DIR$/ballisticacore-cmake" />
<excludeFolder url="file://$MODULE_DIR$/ballisticacore-ios.xcodeproj" />
<excludeFolder url="file://$MODULE_DIR$/ballisticacore-mac.xcodeproj" />
<excludeFolder url="file://$MODULE_DIR$/ballisticacore-windows" />
<excludeFolder url="file://$MODULE_DIR$/ballisticacore-windows-oculus" />
<excludeFolder url="file://$MODULE_DIR$/ballisticacore-xcode" />
<excludeFolder url="file://$MODULE_DIR$/src/assets/ba_data/audio" />
<excludeFolder url="file://$MODULE_DIR$/src/assets/ba_data/data" />
<excludeFolder url="file://$MODULE_DIR$/src/assets/ba_data/data/languages" />
<excludeFolder url="file://$MODULE_DIR$/src/assets/ba_data/data/maps" />
<excludeFolder url="file://$MODULE_DIR$/src/assets/ba_data/fonts" />
<excludeFolder url="file://$MODULE_DIR$/src/assets/ba_data/models" />
<excludeFolder url="file://$MODULE_DIR$/src/assets/ba_data/python-site-packages" />
<excludeFolder url="file://$MODULE_DIR$/src/assets/ba_data/textures" />
<excludeFolder url="file://$MODULE_DIR$/src/assets/pylib-android" />
<excludeFolder url="file://$MODULE_DIR$/src/assets/pylib-apple" />
<excludeFolder url="file://$MODULE_DIR$/src/assets/pylib-site-packages" />
<excludeFolder url="file://$MODULE_DIR$/src/assets/windows" />
<excludeFolder url="file://$MODULE_DIR$/ballisticakit-android" />
<excludeFolder url="file://$MODULE_DIR$/ballisticakit-cmake" />
<excludeFolder url="file://$MODULE_DIR$/ballisticakit-ios.xcodeproj" />
<excludeFolder url="file://$MODULE_DIR$/ballisticakit-mac.xcodeproj" />
<excludeFolder url="file://$MODULE_DIR$/ballisticakit-windows" />
<excludeFolder url="file://$MODULE_DIR$/ballisticakit-windows-oculus" />
<excludeFolder url="file://$MODULE_DIR$/ballisticakit-xcode" />
<excludeFolder url="file://$MODULE_DIR$/build" />
<excludeFolder url="file://$MODULE_DIR$/config" />
<excludeFolder url="file://$MODULE_DIR$/docs" />
@ -65,7 +63,8 @@
<excludePattern pattern=".pytest_cache" />
<excludePattern pattern=".editorconfig" />
</content>
<orderEntry type="jdk" jdkName="Python 3.10" jdkType="Python SDK" />
<content url="file://$MODULE_DIR$/build/dummymodules" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="PackageRequirementsSettings">

View File

@ -1,6 +1,7 @@
<component name="ProjectDictionaryState">
<dictionary name="ericf">
<words>
<w>_babase</w>
<w>aaaa</w>
<w>aaab</w>
<w>aaac</w>
@ -121,6 +122,8 @@
<w>appstate</w>
<w>appstore</w>
<w>apptime</w>
<w>apptimer</w>
<w>apptimers</w>
<w>apputils</w>
<w>archivepath</w>
<w>archivepathbase</w>
@ -189,29 +192,35 @@
<w>awaitable</w>
<w>awaitables</w>
<w>axismotion</w>
<w>babase</w>
<w>babasemeta</w>
<w>bacfg</w>
<w>backgrounded</w>
<w>backgrounding</w>
<w>backporting</w>
<w>backwin</w>
<w>baclassic</w>
<w>bacloud</w>
<w>bacloudcmd</w>
<w>bacommon</w>
<w>badguy</w>
<w>baenv</w>
<w>bafoundation</w>
<w>bainternal</w>
<w>ballistica</w>
<w>ballistica's</w>
<w>ballisticacore</w>
<w>ballisticacorecb</w>
<w>ballisticakit</w>
<w>ballisticakitcb</w>
<w>bamaster</w>
<w>bamasteraddr</w>
<w>bamasterlegacy</w>
<w>bameta</w>
<w>bametainternal</w>
<w>baplus</w>
<w>barcolor</w>
<w>barebones</w>
<w>bargs</w>
<w>bascenev</w>
<w>baseaddr</w>
<w>baseh</w>
<w>baseimps</w>
@ -220,6 +229,7 @@
<w>baservnode</w>
<w>basespaz</w>
<w>basetime</w>
<w>basetimer</w>
<w>baseurl</w>
<w>baseval</w>
<w>basew</w>
@ -229,9 +239,11 @@
<w>basnmessagesender</w>
<w>basntoclient</w>
<w>bastd</w>
<w>batemplatefs</w>
<w>batocloud</w>
<w>batools</w>
<w>batoolsinternal</w>
<w>bauiv</w>
<w>baworker</w>
<w>bbbb</w>
<w>bblk</w>
@ -272,6 +284,7 @@
<w>bmag</w>
<w>bmas</w>
<w>bmasl</w>
<w>bmcjphh</w>
<w>bname</w>
<w>bndl</w>
<w>boffs</w>
@ -281,6 +294,7 @@
<w>bombsquadgame</w>
<w>bools</w>
<w>bootlocale</w>
<w>bootlog</w>
<w>bootsubprocess</w>
<w>borhani</w>
<w>bot's</w>
@ -530,6 +544,7 @@
<w>copyswiftlibs</w>
<w>cornerpin</w>
<w>coroutines</w>
<w>correcthash</w>
<w>countdownsounds</w>
<w>cpbd</w>
<w>cpnf</w>
@ -605,10 +620,12 @@
<w>dcls</w>
<w>dcmake</w>
<w>deathmatch</w>
<w>debugger's</w>
<w>deek</w>
<w>defs</w>
<w>defsline</w>
<w>deivit</w>
<w>depchecks</w>
<w>depcls</w>
<w>depdata</w>
<w>depdatas</w>
@ -651,6 +668,8 @@
<w>disllowed</w>
<w>dispatchmethod</w>
<w>displayname</w>
<w>displaytime</w>
<w>displaytimer</w>
<w>distro</w>
<w>distroot</w>
<w>distros</w>
@ -871,6 +890,7 @@
<w>fdesc</w>
<w>fdict</w>
<w>fdout</w>
<w>featureset</w>
<w>fecfc</w>
<w>feedparser</w>
<w>fentry</w>
@ -1050,6 +1070,7 @@
<w>getcollide</w>
<w>getcollidemodel</w>
<w>getcollision</w>
<w>getcollisionmesh</w>
<w>getconf</w>
<w>getconfig</w>
<w>getcurrency</w>
@ -1068,6 +1089,7 @@
<w>getlog</w>
<w>getlogin</w>
<w>getmaps</w>
<w>getmesh</w>
<w>getmodel</w>
<w>getname</w>
<w>getnodes</w>
@ -1084,6 +1106,7 @@
<w>getscanresults</w>
<w>getscoreconfig</w>
<w>getsession</w>
<w>getsimplesound</w>
<w>getsockname</w>
<w>getsound</w>
<w>getspaz</w>
@ -1091,6 +1114,7 @@
<w>gettext</w>
<w>gettexture</w>
<w>gettime</w>
<w>getuisound</w>
<w>gfile</w>
<w>gfxb</w>
<w>ghnc</w>
@ -1145,6 +1169,7 @@
<w>hashtype</w>
<w>hashval</w>
<w>hasstarted</w>
<w>hastouchscreen</w>
<w>hatmotion</w>
<w>hattach</w>
<w>hcalc</w>
@ -1180,6 +1205,7 @@
<w>hostconfig</w>
<w>hostingconfig</w>
<w>hostingstate</w>
<w>hostsession</w>
<w>hostuser</w>
<w>hout</w>
<w>howtoplay</w>
@ -1205,6 +1231,7 @@
<w>ifeq</w>
<w>ifneq</w>
<w>iiarcade</w>
<w>iiiiisssi</w>
<w>iircade</w>
<w>ilang</w>
<w>ilck</w>
@ -1357,6 +1384,7 @@
<w>langtarget</w>
<w>langutils</w>
<w>langval</w>
<w>lanst</w>
<w>larmbeast</w>
<w>lasthash</w>
<w>lastline</w>
@ -1387,7 +1415,7 @@
<w>levelstr</w>
<w>lfull</w>
<w>lfval</w>
<w>libballisticacore</w>
<w>libballisticakit</w>
<w>libbz</w>
<w>libbzip</w>
<w>libcrypto</w>
@ -1556,6 +1584,7 @@
<w>memfunctions</w>
<w>menubar</w>
<w>meryu</w>
<w>mesh</w>
<w>messagetype</w>
<w>metallink</w>
<w>metamakefile</w>
@ -1568,6 +1597,7 @@
<w>mhend</w>
<w>mhsh</w>
<w>microprotocols</w>
<w>microsecs</w>
<w>mikirog</w>
<w>millisecs</w>
<w>mimetypes</w>
@ -1761,9 +1791,11 @@
<w>nyko</w>
<w>obj's</w>
<w>objb</w>
<w>objcount</w>
<w>objid</w>
<w>objname</w>
<w>objs</w>
<w>objset</w>
<w>objsizes</w>
<w>objt</w>
<w>objtoyaml</w>
@ -1785,6 +1817,7 @@
<w>oival</w>
<w>okbtn</w>
<w>oldbook</w>
<w>olde</w>
<w>oldlady</w>
<w>oldtoken</w>
<w>onln</w>
@ -1964,6 +1997,7 @@
<w>poweruptype</w>
<w>powervr</w>
<w>ppos</w>
<w>pppp</w>
<w>ppre</w>
<w>pproxy</w>
<w>pptabcom</w>
@ -1974,6 +2008,7 @@
<w>precommand</w>
<w>precompiling</w>
<w>preconfig</w>
<w>predeclares</w>
<w>preexec</w>
<w>prefablib</w>
<w>preflightfast</w>
@ -2030,6 +2065,7 @@
<w>proxykey</w>
<w>prtb</w>
<w>prunedir</w>
<w>prunetask</w>
<w>prval</w>
<w>pstats</w>
<w>pstr</w>
@ -2100,6 +2136,7 @@
<w>pygram</w>
<w>pyio</w>
<w>pylib</w>
<w>pylibpath</w>
<w>pylibs</w>
<w>pylint</w>
<w>pylintfast</w>
@ -2141,6 +2178,7 @@
<w>rawkey</w>
<w>rawpath</w>
<w>rawpaths</w>
<w>rayd</w>
<w>rcade</w>
<w>rcfile</w>
<w>rcva</w>
@ -2153,6 +2191,7 @@
<w>realpath</w>
<w>realsies</w>
<w>recache</w>
<w>reconverge</w>
<w>recursed</w>
<w>recursing</w>
<w>recv</w>
@ -2172,6 +2211,7 @@
<w>rentry</w>
<w>representer</w>
<w>reprlib</w>
<w>repro</w>
<w>reqs</w>
<w>reqtype</w>
<w>reqtypes</w>
@ -2264,6 +2304,7 @@
<w>scenefile</w>
<w>scenefiles</w>
<w>scenename</w>
<w>scenepacket</w>
<w>sched</w>
<w>sclx</w>
<w>scly</w>
@ -2601,6 +2642,7 @@
<w>tempfile</w>
<w>tempfilepath</w>
<w>templatecb</w>
<w>templatefs</w>
<w>tenum</w>
<w>termcolors</w>
<w>termios</w>
@ -2628,9 +2670,11 @@
<w>testpath</w>
<w>testpt</w>
<w>testresponse</w>
<w>testrunnable</w>
<w>testsealable</w>
<w>testsentinel</w>
<w>testsoundtrack</w>
<w>testtask</w>
<w>testthread</w>
<w>testval</w>
<w>testwith</w>
@ -2699,6 +2743,7 @@
<w>tournamententry</w>
<w>tournamentscores</w>
<w>tpartial</w>
<w>tpexl</w>
<w>tpimport</w>
<w>tpimportex</w>
<w>tpimports</w>
@ -2886,6 +2931,7 @@
<w>whatevs</w>
<w>whatisv</w>
<w>wheee</w>
<w>wheeee</w>
<w>whos</w>
<w>widgetdeathtime</w>
<w>wiimote</w>

View File

@ -49,6 +49,7 @@
<option value="E128" />
<option value="E741" />
<option value="E402" />
<option value="E203" />
</list>
</option>
</inspection_tool>

3
.idea/jsonSchemas.xml generated
View File

@ -13,7 +13,8 @@
<option name="patterns">
<list>
<Item>
<option name="path" value="assets/manifest.json" />
<option name="path" value="src/assets/.asset_manifest_public.json" />
<option name="path" value="src/assets/.asset_manifest_private.json" />
</Item>
</list>
</option>

2
.idea/misc.xml generated
View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10" project-jdk-type="Python SDK" />
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.11" project-jdk-type="Python SDK" />
<component name="PythonCompatibilityInspectionAdvertiser">
<option name="version" value="3" />
</component>

2
.idea/modules.xml generated
View File

@ -2,7 +2,7 @@
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/ballisticacore.iml" filepath="$PROJECT_DIR$/.idea/ballisticacore.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/ballisticakit.iml" filepath="$PROJECT_DIR$/.idea/ballisticakit.iml" />
</modules>
</component>
</project>

View File

@ -1,3 +1,3 @@
<component name="DependencyValidationManager">
<scope name="PyIgnoreProtectedAccess" pattern="file[ballisticacore]:assets/src/ba_data/python/ba//*" />
<scope name="PyIgnoreProtectedAccess" pattern="file[ballisticakit]:src/assets/ba_data/python/babase//*" />
</component>

View File

@ -1,3 +1,3 @@
<component name="DependencyValidationManager">
<scope name="PyIgnoreUnresolved" pattern="file:tools/pcommand||file:src/meta/bametainternal/python_embedded/internal_api.py||file:tools/bacloud||file:assets/src/ba_data/python/bastd/maps.py" />
<scope name="PyIgnoreUnresolved" pattern="file:tools/pcommand||file:src/meta/bametainternal/python_embedded/internal_api.py||file:tools/bacloud||file:src/assets/ba_data/python/bastd/maps.py" />
</component>

View File

@ -1,3 +1,3 @@
<component name="DependencyValidationManager">
<scope name="UncheckedPython" pattern="file:assets/src/ba_data/python/_ba.py||file:src/meta/bameta/python_embedded/binding.py||file:assets/src/ba_data/python/_bainternal.py" />
<scope name="UncheckedPython" pattern="file:src/assets/ba_data/python/_ba.py||file:src/meta/bameta/python_embedded/binding.py||file:src/assets/ba_data/python/_bainternal.py" />
</component>

File diff suppressed because it is too large Load Diff

634
Makefile

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,6 @@
<img src="https://files.ballistica.net/ballistica_media/ballistica_logo_half.png" height="50">
<img
src="https://files.ballistica.net/ballistica_media/ballistica_logo_half.png"
height="50" alt="logo">
***bal·lis·tic***: physics of an object in motion; behaving like a projectile.
@ -6,38 +8,82 @@
![](https://github.com/efroemling/ballistica/workflows/CI/badge.svg)
The Ballistica project is the foundation for [BombSquad](https://www.froemling.net/apps/bombsquad) and potentially other future projects.
The Ballistica project is the foundation for
[BombSquad](https://www.froemling.net/apps/bombsquad) and potentially other
future projects.
[Head to the project wiki to get started](https://github.com/efroemling/ballistica/wiki), or learn more about the project below.
[Head to the project wiki to get started
](https://github.com/efroemling/ballistica/wiki), or learn more about the
project below.
### Project Goals
* **Do one thing and do it well**
Ballistica is not aiming to be a general purpose game engine. Rather, its goal is to support creating one particular type of experience: 'physics based multiplayer action on small diorama-like environments built from real-world objects'. If you've got something you'd like to create that can fit within that box (as BombSquad itself does), give Ballistica a look. Of course, there is nothing preventing you from going and building an FPS out of this stuff, but I wouldn't recommend it.
Ballistica is not aiming to be a general purpose game engine. Rather, its goal
is to support creating one particular type of experience: 'physics based
multiplayer action on small diorama-like environments built from real-world
objects'. If you've got something you'd like to create that can fit within that
box (as BombSquad itself does), give Ballistica a look. Of course, there is
nothing preventing you from going and building a first person shooter out of
this stuff, but I wouldn't recommend it.
* **Python tomfoolery**
Ballistica is built on a C++ core for performance-sensitive code with a Python layer for high level game/app logic. This Python layer is designed to be mucked with. Users can override core game functionality, write their own mini games, or anything else they can dream up, either by directly accessing files on disk or by working through an integrated web-based editor. It can be a fun way to learn Python without the danger of getting actual work done.
Ballistica is built on a C++ core for performance-sensitive code with a
Python layer for high level game/app logic. This Python layer is designed to be
mucked with. Users can override core game functionality, write their own mini
games, or anything else they can dream up, either by directly accessing files on
disk or by working through an integrated web-based editor. It can be a fun way
to learn Python without the danger of getting actual work done.
* **Physics-y goodness**
I love playing with physics simulations, and Ballistica was built partly to scratch this itch. Though the game physics in BombSquad have stayed largely unchanged for a while, my future plans for the engine lean heavily on making this more flexible and open-ended, opening up lots of fun multiplayer physics-y potential. Stay tuned...
I love playing with physics simulations, and Ballistica was built partly to
scratch this itch. Though the game physics in BombSquad have stayed largely
unchanged for a while, my future plans for the engine lean heavily on making
this more flexible and open-ended, opening up lots of fun multiplayer physics-y
potential. Stay tuned...
* **Community**
BombSquad started as a 'just for fun' project to play with my friends, and I want to keep that spirit alive as the Ballistica project moves forward. Whether this means making it easier to share mods, organize tournaments, join up with friends, teach each other some Python, or whatever else. Life is short; let's play some games. Or make them. Maybe both.
BombSquad started as a 'just for fun' project to play with my friends, and I
want to keep that spirit alive as the Ballistica project moves forward. Whether
this means making it easier to share mods, organize tournaments, join up with
friends, teach each other some Python, or whatever else. Life is short; let's
play some games. Or make them. Maybe both.
### Frequently Asked Questions
* **Q: What's with this name? Is it BombSquad or Ballistica?**
* A: BombSquad is the game. Ballistica is the engine.
* **Q: Does this mean BombSquad is open source?**
* A: Yes and no. All code contained in this repo is MIT licensed and free for use anywhere. This includes game scripts, pipeline tools, and most of the binary engine sources. Anything not directly contained in this repository, however, even if automatically downloaded by build scripts, is still proprietary and cannot be redistributed without explicit consent. This includes assets and prebuilt libraries/binaries. So in a nutshell: create and share mods or use any of this code in your own projects, but please don't distribute your own complete copies of BombSquad without permission. Please email support@froemling.net if you have any questions about this.
* A: Yes and no. All code contained in this repo is MIT licensed and free for
use anywhere. This includes game scripts, pipeline tools, and most of the
binary engine sources. Anything not directly contained in this repository,
however, even if automatically downloaded by build scripts, is still
proprietary and cannot be redistributed without explicit consent. This
includes assets and prebuilt libraries/binaries. So in a nutshell: create and
share mods or use any of this code in your own projects, but please don't
distribute your own complete copies of BombSquad without permission. Please
email support@froemling.net if you have any questions about this.
* **Q: When are you adding more maps/characters/minigames/etc. to BombSquad!?!?**
* A: Check out the [Ballistica Roadmap](https://github.com/efroemling/ballistica/wiki/Roadmap) to get a sense of what's planned for when. And for the record, the answer to that particular question is basically '1.8'.
* **Q: When are you adding more maps/characters/minigames/etc. to
BombSquad!?!?**
* A: Check out the [Ballistica
Roadmap](https://github.com/efroemling/ballistica/wiki/Roadmap) to get a sense
of what's planned for when. And for the record, the answer to that particular
question is basically '1.8'.
* **Q: When will BombSquad be released on iOS / Steam / Switch / XBox / Playstation / My Toaster??**
* A: The 2.0 update will be the big 'relaunch' release and the plan is to launch on at least iOS and Steam at that time. I'm trying to get there as fast as I can. As far as consoles, I'd love to and hope to at some point but have nothing to announce just yet. See the [Ballistica Roadmap](https://github.com/efroemling/ballistica/wiki/Roadmap) for more details or check the [Ballistica Downloads](https://ballistica.net/downloads) page for early test builds on some platforms.
* **Q: When will BombSquad be released on iOS / Steam / Switch / XBox /
Playstation / My Toaster??**
* A: The 2.0 update will be the big 'relaunch' release and the plan is to
launch on at least iOS and Steam at that time. I'm trying to get there as fast
as I can. As far as consoles, I'd love to and hope to at some point but have
nothing to announce just yet. See the
* [Ballistica Roadmap](https://github.com/efroemling/ballistica/wiki/Roadmap)
for more details or check the [Ballistica
Downloads](https://ballistica.net/downloads) page for early test builds on
some platforms.

View File

@ -1,572 +0,0 @@
[
"ba_data/python/__pycache__/_bainternal.cpython-310.opt-1.pyc",
"ba_data/python/_bainternal.py",
"ba_data/python/ba/__init__.py",
"ba_data/python/ba/__pycache__/__init__.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_accountv1.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_accountv2.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_achievement.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_activity.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_activitytypes.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_actor.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_ads.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_analytics.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_app.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_appcomponent.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_appconfig.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_appdelegate.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_appmode.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_apputils.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_assetmanager.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_asyncio.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_benchmark.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_bootstrap.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_campaign.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_cloud.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_collision.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_coopgame.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_coopsession.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_dependency.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_dualteamsession.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_error.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_freeforallsession.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_gameactivity.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_gameresults.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_gameutils.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_general.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_hooks.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_input.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_internal.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_keyboard.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_language.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_level.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_lobby.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_login.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_map.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_math.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_messages.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_meta.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_multiteamsession.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_music.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_net.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_nodeactor.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_player.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_playlist.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_plugin.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_powerup.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_profile.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_score.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_servermode.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_session.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_settings.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_stats.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_store.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_team.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_teamgame.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_tips.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_tournament.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_ui.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/_workspace.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/internal.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/macmusicapp.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/modutils.cpython-310.opt-1.pyc",
"ba_data/python/ba/__pycache__/osmusic.cpython-310.opt-1.pyc",
"ba_data/python/ba/_accountv1.py",
"ba_data/python/ba/_accountv2.py",
"ba_data/python/ba/_achievement.py",
"ba_data/python/ba/_activity.py",
"ba_data/python/ba/_activitytypes.py",
"ba_data/python/ba/_actor.py",
"ba_data/python/ba/_ads.py",
"ba_data/python/ba/_analytics.py",
"ba_data/python/ba/_app.py",
"ba_data/python/ba/_appcomponent.py",
"ba_data/python/ba/_appconfig.py",
"ba_data/python/ba/_appdelegate.py",
"ba_data/python/ba/_appmode.py",
"ba_data/python/ba/_apputils.py",
"ba_data/python/ba/_assetmanager.py",
"ba_data/python/ba/_asyncio.py",
"ba_data/python/ba/_benchmark.py",
"ba_data/python/ba/_bootstrap.py",
"ba_data/python/ba/_campaign.py",
"ba_data/python/ba/_cloud.py",
"ba_data/python/ba/_collision.py",
"ba_data/python/ba/_coopgame.py",
"ba_data/python/ba/_coopsession.py",
"ba_data/python/ba/_dependency.py",
"ba_data/python/ba/_dualteamsession.py",
"ba_data/python/ba/_error.py",
"ba_data/python/ba/_freeforallsession.py",
"ba_data/python/ba/_gameactivity.py",
"ba_data/python/ba/_gameresults.py",
"ba_data/python/ba/_gameutils.py",
"ba_data/python/ba/_general.py",
"ba_data/python/ba/_generated/__init__.py",
"ba_data/python/ba/_generated/__pycache__/__init__.cpython-310.opt-1.pyc",
"ba_data/python/ba/_generated/__pycache__/enums.cpython-310.opt-1.pyc",
"ba_data/python/ba/_generated/enums.py",
"ba_data/python/ba/_hooks.py",
"ba_data/python/ba/_input.py",
"ba_data/python/ba/_internal.py",
"ba_data/python/ba/_keyboard.py",
"ba_data/python/ba/_language.py",
"ba_data/python/ba/_level.py",
"ba_data/python/ba/_lobby.py",
"ba_data/python/ba/_login.py",
"ba_data/python/ba/_map.py",
"ba_data/python/ba/_math.py",
"ba_data/python/ba/_messages.py",
"ba_data/python/ba/_meta.py",
"ba_data/python/ba/_multiteamsession.py",
"ba_data/python/ba/_music.py",
"ba_data/python/ba/_net.py",
"ba_data/python/ba/_nodeactor.py",
"ba_data/python/ba/_player.py",
"ba_data/python/ba/_playlist.py",
"ba_data/python/ba/_plugin.py",
"ba_data/python/ba/_powerup.py",
"ba_data/python/ba/_profile.py",
"ba_data/python/ba/_score.py",
"ba_data/python/ba/_servermode.py",
"ba_data/python/ba/_session.py",
"ba_data/python/ba/_settings.py",
"ba_data/python/ba/_stats.py",
"ba_data/python/ba/_store.py",
"ba_data/python/ba/_team.py",
"ba_data/python/ba/_teamgame.py",
"ba_data/python/ba/_tips.py",
"ba_data/python/ba/_tournament.py",
"ba_data/python/ba/_ui.py",
"ba_data/python/ba/_workspace.py",
"ba_data/python/ba/internal.py",
"ba_data/python/ba/macmusicapp.py",
"ba_data/python/ba/modutils.py",
"ba_data/python/ba/osmusic.py",
"ba_data/python/ba/ui/__init__.py",
"ba_data/python/ba/ui/__pycache__/__init__.cpython-310.opt-1.pyc",
"ba_data/python/bacommon/__init__.py",
"ba_data/python/bacommon/__pycache__/__init__.cpython-310.opt-1.pyc",
"ba_data/python/bacommon/__pycache__/assets.cpython-310.opt-1.pyc",
"ba_data/python/bacommon/__pycache__/bacloud.cpython-310.opt-1.pyc",
"ba_data/python/bacommon/__pycache__/build.cpython-310.opt-1.pyc",
"ba_data/python/bacommon/__pycache__/cloud.cpython-310.opt-1.pyc",
"ba_data/python/bacommon/__pycache__/login.cpython-310.opt-1.pyc",
"ba_data/python/bacommon/__pycache__/net.cpython-310.opt-1.pyc",
"ba_data/python/bacommon/__pycache__/servermanager.cpython-310.opt-1.pyc",
"ba_data/python/bacommon/__pycache__/transfer.cpython-310.opt-1.pyc",
"ba_data/python/bacommon/assets.py",
"ba_data/python/bacommon/bacloud.py",
"ba_data/python/bacommon/build.py",
"ba_data/python/bacommon/cloud.py",
"ba_data/python/bacommon/login.py",
"ba_data/python/bacommon/net.py",
"ba_data/python/bacommon/servermanager.py",
"ba_data/python/bacommon/transfer.py",
"ba_data/python/bastd/__init__.py",
"ba_data/python/bastd/__pycache__/__init__.cpython-310.opt-1.pyc",
"ba_data/python/bastd/__pycache__/appdelegate.cpython-310.opt-1.pyc",
"ba_data/python/bastd/__pycache__/gameutils.cpython-310.opt-1.pyc",
"ba_data/python/bastd/__pycache__/mainmenu.cpython-310.opt-1.pyc",
"ba_data/python/bastd/__pycache__/maps.cpython-310.opt-1.pyc",
"ba_data/python/bastd/__pycache__/stdmap.cpython-310.opt-1.pyc",
"ba_data/python/bastd/__pycache__/tutorial.cpython-310.opt-1.pyc",
"ba_data/python/bastd/activity/__init__.py",
"ba_data/python/bastd/activity/__pycache__/__init__.cpython-310.opt-1.pyc",
"ba_data/python/bastd/activity/__pycache__/coopjoin.cpython-310.opt-1.pyc",
"ba_data/python/bastd/activity/__pycache__/coopscore.cpython-310.opt-1.pyc",
"ba_data/python/bastd/activity/__pycache__/drawscore.cpython-310.opt-1.pyc",
"ba_data/python/bastd/activity/__pycache__/dualteamscore.cpython-310.opt-1.pyc",
"ba_data/python/bastd/activity/__pycache__/freeforallvictory.cpython-310.opt-1.pyc",
"ba_data/python/bastd/activity/__pycache__/multiteamjoin.cpython-310.opt-1.pyc",
"ba_data/python/bastd/activity/__pycache__/multiteamscore.cpython-310.opt-1.pyc",
"ba_data/python/bastd/activity/__pycache__/multiteamvictory.cpython-310.opt-1.pyc",
"ba_data/python/bastd/activity/coopjoin.py",
"ba_data/python/bastd/activity/coopscore.py",
"ba_data/python/bastd/activity/drawscore.py",
"ba_data/python/bastd/activity/dualteamscore.py",
"ba_data/python/bastd/activity/freeforallvictory.py",
"ba_data/python/bastd/activity/multiteamjoin.py",
"ba_data/python/bastd/activity/multiteamscore.py",
"ba_data/python/bastd/activity/multiteamvictory.py",
"ba_data/python/bastd/actor/__init__.py",
"ba_data/python/bastd/actor/__pycache__/__init__.cpython-310.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/background.cpython-310.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/bomb.cpython-310.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/controlsguide.cpython-310.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/flag.cpython-310.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/image.cpython-310.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/onscreencountdown.cpython-310.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/onscreentimer.cpython-310.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/playerspaz.cpython-310.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/popuptext.cpython-310.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/powerupbox.cpython-310.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/respawnicon.cpython-310.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/scoreboard.cpython-310.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/spawner.cpython-310.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/spaz.cpython-310.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/spazappearance.cpython-310.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/spazbot.cpython-310.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/spazfactory.cpython-310.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/text.cpython-310.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/tipstext.cpython-310.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/zoomtext.cpython-310.opt-1.pyc",
"ba_data/python/bastd/actor/background.py",
"ba_data/python/bastd/actor/bomb.py",
"ba_data/python/bastd/actor/controlsguide.py",
"ba_data/python/bastd/actor/flag.py",
"ba_data/python/bastd/actor/image.py",
"ba_data/python/bastd/actor/onscreencountdown.py",
"ba_data/python/bastd/actor/onscreentimer.py",
"ba_data/python/bastd/actor/playerspaz.py",
"ba_data/python/bastd/actor/popuptext.py",
"ba_data/python/bastd/actor/powerupbox.py",
"ba_data/python/bastd/actor/respawnicon.py",
"ba_data/python/bastd/actor/scoreboard.py",
"ba_data/python/bastd/actor/spawner.py",
"ba_data/python/bastd/actor/spaz.py",
"ba_data/python/bastd/actor/spazappearance.py",
"ba_data/python/bastd/actor/spazbot.py",
"ba_data/python/bastd/actor/spazfactory.py",
"ba_data/python/bastd/actor/text.py",
"ba_data/python/bastd/actor/tipstext.py",
"ba_data/python/bastd/actor/zoomtext.py",
"ba_data/python/bastd/appdelegate.py",
"ba_data/python/bastd/game/__init__.py",
"ba_data/python/bastd/game/__pycache__/__init__.cpython-310.opt-1.pyc",
"ba_data/python/bastd/game/__pycache__/assault.cpython-310.opt-1.pyc",
"ba_data/python/bastd/game/__pycache__/capturetheflag.cpython-310.opt-1.pyc",
"ba_data/python/bastd/game/__pycache__/chosenone.cpython-310.opt-1.pyc",
"ba_data/python/bastd/game/__pycache__/conquest.cpython-310.opt-1.pyc",
"ba_data/python/bastd/game/__pycache__/deathmatch.cpython-310.opt-1.pyc",
"ba_data/python/bastd/game/__pycache__/easteregghunt.cpython-310.opt-1.pyc",
"ba_data/python/bastd/game/__pycache__/elimination.cpython-310.opt-1.pyc",
"ba_data/python/bastd/game/__pycache__/football.cpython-310.opt-1.pyc",
"ba_data/python/bastd/game/__pycache__/hockey.cpython-310.opt-1.pyc",
"ba_data/python/bastd/game/__pycache__/keepaway.cpython-310.opt-1.pyc",
"ba_data/python/bastd/game/__pycache__/kingofthehill.cpython-310.opt-1.pyc",
"ba_data/python/bastd/game/__pycache__/meteorshower.cpython-310.opt-1.pyc",
"ba_data/python/bastd/game/__pycache__/ninjafight.cpython-310.opt-1.pyc",
"ba_data/python/bastd/game/__pycache__/onslaught.cpython-310.opt-1.pyc",
"ba_data/python/bastd/game/__pycache__/race.cpython-310.opt-1.pyc",
"ba_data/python/bastd/game/__pycache__/runaround.cpython-310.opt-1.pyc",
"ba_data/python/bastd/game/__pycache__/targetpractice.cpython-310.opt-1.pyc",
"ba_data/python/bastd/game/__pycache__/thelaststand.cpython-310.opt-1.pyc",
"ba_data/python/bastd/game/assault.py",
"ba_data/python/bastd/game/capturetheflag.py",
"ba_data/python/bastd/game/chosenone.py",
"ba_data/python/bastd/game/conquest.py",
"ba_data/python/bastd/game/deathmatch.py",
"ba_data/python/bastd/game/easteregghunt.py",
"ba_data/python/bastd/game/elimination.py",
"ba_data/python/bastd/game/football.py",
"ba_data/python/bastd/game/hockey.py",
"ba_data/python/bastd/game/keepaway.py",
"ba_data/python/bastd/game/kingofthehill.py",
"ba_data/python/bastd/game/meteorshower.py",
"ba_data/python/bastd/game/ninjafight.py",
"ba_data/python/bastd/game/onslaught.py",
"ba_data/python/bastd/game/race.py",
"ba_data/python/bastd/game/runaround.py",
"ba_data/python/bastd/game/targetpractice.py",
"ba_data/python/bastd/game/thelaststand.py",
"ba_data/python/bastd/gameutils.py",
"ba_data/python/bastd/keyboard/__init__.py",
"ba_data/python/bastd/keyboard/__pycache__/__init__.cpython-310.opt-1.pyc",
"ba_data/python/bastd/keyboard/__pycache__/englishkeyboard.cpython-310.opt-1.pyc",
"ba_data/python/bastd/keyboard/englishkeyboard.py",
"ba_data/python/bastd/mainmenu.py",
"ba_data/python/bastd/mapdata/__init__.py",
"ba_data/python/bastd/mapdata/__pycache__/__init__.cpython-310.opt-1.pyc",
"ba_data/python/bastd/mapdata/__pycache__/big_g.cpython-310.opt-1.pyc",
"ba_data/python/bastd/mapdata/__pycache__/bridgit.cpython-310.opt-1.pyc",
"ba_data/python/bastd/mapdata/__pycache__/courtyard.cpython-310.opt-1.pyc",
"ba_data/python/bastd/mapdata/__pycache__/crag_castle.cpython-310.opt-1.pyc",
"ba_data/python/bastd/mapdata/__pycache__/doom_shroom.cpython-310.opt-1.pyc",
"ba_data/python/bastd/mapdata/__pycache__/football_stadium.cpython-310.opt-1.pyc",
"ba_data/python/bastd/mapdata/__pycache__/happy_thoughts.cpython-310.opt-1.pyc",
"ba_data/python/bastd/mapdata/__pycache__/hockey_stadium.cpython-310.opt-1.pyc",
"ba_data/python/bastd/mapdata/__pycache__/lake_frigid.cpython-310.opt-1.pyc",
"ba_data/python/bastd/mapdata/__pycache__/monkey_face.cpython-310.opt-1.pyc",
"ba_data/python/bastd/mapdata/__pycache__/rampage.cpython-310.opt-1.pyc",
"ba_data/python/bastd/mapdata/__pycache__/roundabout.cpython-310.opt-1.pyc",
"ba_data/python/bastd/mapdata/__pycache__/step_right_up.cpython-310.opt-1.pyc",
"ba_data/python/bastd/mapdata/__pycache__/the_pad.cpython-310.opt-1.pyc",
"ba_data/python/bastd/mapdata/__pycache__/tip_top.cpython-310.opt-1.pyc",
"ba_data/python/bastd/mapdata/__pycache__/tower_d.cpython-310.opt-1.pyc",
"ba_data/python/bastd/mapdata/__pycache__/zig_zag.cpython-310.opt-1.pyc",
"ba_data/python/bastd/mapdata/big_g.py",
"ba_data/python/bastd/mapdata/bridgit.py",
"ba_data/python/bastd/mapdata/courtyard.py",
"ba_data/python/bastd/mapdata/crag_castle.py",
"ba_data/python/bastd/mapdata/doom_shroom.py",
"ba_data/python/bastd/mapdata/football_stadium.py",
"ba_data/python/bastd/mapdata/happy_thoughts.py",
"ba_data/python/bastd/mapdata/hockey_stadium.py",
"ba_data/python/bastd/mapdata/lake_frigid.py",
"ba_data/python/bastd/mapdata/monkey_face.py",
"ba_data/python/bastd/mapdata/rampage.py",
"ba_data/python/bastd/mapdata/roundabout.py",
"ba_data/python/bastd/mapdata/step_right_up.py",
"ba_data/python/bastd/mapdata/the_pad.py",
"ba_data/python/bastd/mapdata/tip_top.py",
"ba_data/python/bastd/mapdata/tower_d.py",
"ba_data/python/bastd/mapdata/zig_zag.py",
"ba_data/python/bastd/maps.py",
"ba_data/python/bastd/session/__init__.py",
"ba_data/python/bastd/session/__pycache__/__init__.cpython-310.opt-1.pyc",
"ba_data/python/bastd/stdmap.py",
"ba_data/python/bastd/tutorial.py",
"ba_data/python/bastd/ui/__init__.py",
"ba_data/python/bastd/ui/__pycache__/__init__.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/achievements.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/appinvite.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/characterpicker.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/colorpicker.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/config.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/configerror.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/confirm.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/continues.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/creditslist.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/debug.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/feedback.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/fileselector.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/getcurrency.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/getremote.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/helpui.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/iconpicker.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/kiosk.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/mainmenu.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/onscreenkeyboard.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/party.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/partyqueue.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/play.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/playoptions.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/popup.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/promocode.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/purchase.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/qrcode.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/radiogroup.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/report.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/resourcetypeinfo.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/serverdialog.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/specialoffer.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/tabs.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/teamnamescolors.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/telnet.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/tournamententry.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/tournamentscores.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/trophies.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/url.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/v2upgrade.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/watch.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/account/__init__.py",
"ba_data/python/bastd/ui/account/__pycache__/__init__.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/account/__pycache__/link.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/account/__pycache__/settings.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/account/__pycache__/unlink.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/account/__pycache__/v2proxy.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/account/__pycache__/viewer.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/account/link.py",
"ba_data/python/bastd/ui/account/settings.py",
"ba_data/python/bastd/ui/account/unlink.py",
"ba_data/python/bastd/ui/account/v2proxy.py",
"ba_data/python/bastd/ui/account/viewer.py",
"ba_data/python/bastd/ui/achievements.py",
"ba_data/python/bastd/ui/appinvite.py",
"ba_data/python/bastd/ui/characterpicker.py",
"ba_data/python/bastd/ui/colorpicker.py",
"ba_data/python/bastd/ui/config.py",
"ba_data/python/bastd/ui/configerror.py",
"ba_data/python/bastd/ui/confirm.py",
"ba_data/python/bastd/ui/continues.py",
"ba_data/python/bastd/ui/coop/__init__.py",
"ba_data/python/bastd/ui/coop/__pycache__/__init__.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/coop/__pycache__/browser.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/coop/__pycache__/gamebutton.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/coop/__pycache__/level.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/coop/__pycache__/tournamentbutton.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/coop/browser.py",
"ba_data/python/bastd/ui/coop/gamebutton.py",
"ba_data/python/bastd/ui/coop/level.py",
"ba_data/python/bastd/ui/coop/tournamentbutton.py",
"ba_data/python/bastd/ui/creditslist.py",
"ba_data/python/bastd/ui/debug.py",
"ba_data/python/bastd/ui/feedback.py",
"ba_data/python/bastd/ui/fileselector.py",
"ba_data/python/bastd/ui/gather/__init__.py",
"ba_data/python/bastd/ui/gather/__pycache__/__init__.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/gather/__pycache__/abouttab.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/gather/__pycache__/manualtab.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/gather/__pycache__/nearbytab.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/gather/__pycache__/privatetab.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/gather/__pycache__/publictab.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/gather/abouttab.py",
"ba_data/python/bastd/ui/gather/manualtab.py",
"ba_data/python/bastd/ui/gather/nearbytab.py",
"ba_data/python/bastd/ui/gather/privatetab.py",
"ba_data/python/bastd/ui/gather/publictab.py",
"ba_data/python/bastd/ui/getcurrency.py",
"ba_data/python/bastd/ui/getremote.py",
"ba_data/python/bastd/ui/helpui.py",
"ba_data/python/bastd/ui/iconpicker.py",
"ba_data/python/bastd/ui/kiosk.py",
"ba_data/python/bastd/ui/league/__init__.py",
"ba_data/python/bastd/ui/league/__pycache__/__init__.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/league/__pycache__/rankbutton.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/league/__pycache__/rankwindow.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/league/rankbutton.py",
"ba_data/python/bastd/ui/league/rankwindow.py",
"ba_data/python/bastd/ui/mainmenu.py",
"ba_data/python/bastd/ui/onscreenkeyboard.py",
"ba_data/python/bastd/ui/party.py",
"ba_data/python/bastd/ui/partyqueue.py",
"ba_data/python/bastd/ui/play.py",
"ba_data/python/bastd/ui/playlist/__init__.py",
"ba_data/python/bastd/ui/playlist/__pycache__/__init__.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/playlist/__pycache__/addgame.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/playlist/__pycache__/browser.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/playlist/__pycache__/customizebrowser.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/playlist/__pycache__/edit.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/playlist/__pycache__/editcontroller.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/playlist/__pycache__/editgame.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/playlist/__pycache__/mapselect.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/playlist/__pycache__/share.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/playlist/addgame.py",
"ba_data/python/bastd/ui/playlist/browser.py",
"ba_data/python/bastd/ui/playlist/customizebrowser.py",
"ba_data/python/bastd/ui/playlist/edit.py",
"ba_data/python/bastd/ui/playlist/editcontroller.py",
"ba_data/python/bastd/ui/playlist/editgame.py",
"ba_data/python/bastd/ui/playlist/mapselect.py",
"ba_data/python/bastd/ui/playlist/share.py",
"ba_data/python/bastd/ui/playoptions.py",
"ba_data/python/bastd/ui/popup.py",
"ba_data/python/bastd/ui/profile/__init__.py",
"ba_data/python/bastd/ui/profile/__pycache__/__init__.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/profile/__pycache__/browser.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/profile/__pycache__/edit.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/profile/__pycache__/upgrade.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/profile/browser.py",
"ba_data/python/bastd/ui/profile/edit.py",
"ba_data/python/bastd/ui/profile/upgrade.py",
"ba_data/python/bastd/ui/promocode.py",
"ba_data/python/bastd/ui/purchase.py",
"ba_data/python/bastd/ui/qrcode.py",
"ba_data/python/bastd/ui/radiogroup.py",
"ba_data/python/bastd/ui/report.py",
"ba_data/python/bastd/ui/resourcetypeinfo.py",
"ba_data/python/bastd/ui/serverdialog.py",
"ba_data/python/bastd/ui/settings/__init__.py",
"ba_data/python/bastd/ui/settings/__pycache__/__init__.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/settings/__pycache__/advanced.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/settings/__pycache__/allsettings.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/settings/__pycache__/audio.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/settings/__pycache__/controls.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/settings/__pycache__/gamepad.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/settings/__pycache__/gamepadadvanced.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/settings/__pycache__/gamepadselect.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/settings/__pycache__/graphics.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/settings/__pycache__/keyboard.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/settings/__pycache__/nettesting.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/settings/__pycache__/plugins.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/settings/__pycache__/pluginsettings.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/settings/__pycache__/remoteapp.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/settings/__pycache__/testing.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/settings/__pycache__/touchscreen.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/settings/__pycache__/vrtesting.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/settings/__pycache__/xbox360controller.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/settings/advanced.py",
"ba_data/python/bastd/ui/settings/allsettings.py",
"ba_data/python/bastd/ui/settings/audio.py",
"ba_data/python/bastd/ui/settings/controls.py",
"ba_data/python/bastd/ui/settings/gamepad.py",
"ba_data/python/bastd/ui/settings/gamepadadvanced.py",
"ba_data/python/bastd/ui/settings/gamepadselect.py",
"ba_data/python/bastd/ui/settings/graphics.py",
"ba_data/python/bastd/ui/settings/keyboard.py",
"ba_data/python/bastd/ui/settings/nettesting.py",
"ba_data/python/bastd/ui/settings/plugins.py",
"ba_data/python/bastd/ui/settings/pluginsettings.py",
"ba_data/python/bastd/ui/settings/remoteapp.py",
"ba_data/python/bastd/ui/settings/testing.py",
"ba_data/python/bastd/ui/settings/touchscreen.py",
"ba_data/python/bastd/ui/settings/vrtesting.py",
"ba_data/python/bastd/ui/settings/xbox360controller.py",
"ba_data/python/bastd/ui/soundtrack/__init__.py",
"ba_data/python/bastd/ui/soundtrack/__pycache__/__init__.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/soundtrack/__pycache__/browser.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/soundtrack/__pycache__/edit.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/soundtrack/__pycache__/entrytypeselect.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/soundtrack/__pycache__/macmusicapp.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/soundtrack/browser.py",
"ba_data/python/bastd/ui/soundtrack/edit.py",
"ba_data/python/bastd/ui/soundtrack/entrytypeselect.py",
"ba_data/python/bastd/ui/soundtrack/macmusicapp.py",
"ba_data/python/bastd/ui/specialoffer.py",
"ba_data/python/bastd/ui/store/__init__.py",
"ba_data/python/bastd/ui/store/__pycache__/__init__.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/store/__pycache__/browser.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/store/__pycache__/button.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/store/__pycache__/item.cpython-310.opt-1.pyc",
"ba_data/python/bastd/ui/store/browser.py",
"ba_data/python/bastd/ui/store/button.py",
"ba_data/python/bastd/ui/store/item.py",
"ba_data/python/bastd/ui/tabs.py",
"ba_data/python/bastd/ui/teamnamescolors.py",
"ba_data/python/bastd/ui/telnet.py",
"ba_data/python/bastd/ui/tournamententry.py",
"ba_data/python/bastd/ui/tournamentscores.py",
"ba_data/python/bastd/ui/trophies.py",
"ba_data/python/bastd/ui/url.py",
"ba_data/python/bastd/ui/v2upgrade.py",
"ba_data/python/bastd/ui/watch.py",
"ba_data/python/efro/__init__.py",
"ba_data/python/efro/__pycache__/__init__.cpython-310.opt-1.pyc",
"ba_data/python/efro/__pycache__/call.cpython-310.opt-1.pyc",
"ba_data/python/efro/__pycache__/cloudshell.cpython-310.opt-1.pyc",
"ba_data/python/efro/__pycache__/debug.cpython-310.opt-1.pyc",
"ba_data/python/efro/__pycache__/error.cpython-310.opt-1.pyc",
"ba_data/python/efro/__pycache__/log.cpython-310.opt-1.pyc",
"ba_data/python/efro/__pycache__/rpc.cpython-310.opt-1.pyc",
"ba_data/python/efro/__pycache__/terminal.cpython-310.opt-1.pyc",
"ba_data/python/efro/__pycache__/util.cpython-310.opt-1.pyc",
"ba_data/python/efro/call.py",
"ba_data/python/efro/cloudshell.py",
"ba_data/python/efro/dataclassio/__init__.py",
"ba_data/python/efro/dataclassio/__pycache__/__init__.cpython-310.opt-1.pyc",
"ba_data/python/efro/dataclassio/__pycache__/_api.cpython-310.opt-1.pyc",
"ba_data/python/efro/dataclassio/__pycache__/_base.cpython-310.opt-1.pyc",
"ba_data/python/efro/dataclassio/__pycache__/_inputter.cpython-310.opt-1.pyc",
"ba_data/python/efro/dataclassio/__pycache__/_outputter.cpython-310.opt-1.pyc",
"ba_data/python/efro/dataclassio/__pycache__/_pathcapture.cpython-310.opt-1.pyc",
"ba_data/python/efro/dataclassio/__pycache__/_prep.cpython-310.opt-1.pyc",
"ba_data/python/efro/dataclassio/__pycache__/extras.cpython-310.opt-1.pyc",
"ba_data/python/efro/dataclassio/_api.py",
"ba_data/python/efro/dataclassio/_base.py",
"ba_data/python/efro/dataclassio/_inputter.py",
"ba_data/python/efro/dataclassio/_outputter.py",
"ba_data/python/efro/dataclassio/_pathcapture.py",
"ba_data/python/efro/dataclassio/_prep.py",
"ba_data/python/efro/dataclassio/extras.py",
"ba_data/python/efro/debug.py",
"ba_data/python/efro/error.py",
"ba_data/python/efro/log.py",
"ba_data/python/efro/message/__init__.py",
"ba_data/python/efro/message/__pycache__/__init__.cpython-310.opt-1.pyc",
"ba_data/python/efro/message/__pycache__/_message.cpython-310.opt-1.pyc",
"ba_data/python/efro/message/__pycache__/_module.cpython-310.opt-1.pyc",
"ba_data/python/efro/message/__pycache__/_protocol.cpython-310.opt-1.pyc",
"ba_data/python/efro/message/__pycache__/_receiver.cpython-310.opt-1.pyc",
"ba_data/python/efro/message/__pycache__/_sender.cpython-310.opt-1.pyc",
"ba_data/python/efro/message/_message.py",
"ba_data/python/efro/message/_module.py",
"ba_data/python/efro/message/_protocol.py",
"ba_data/python/efro/message/_receiver.py",
"ba_data/python/efro/message/_sender.py",
"ba_data/python/efro/rpc.py",
"ba_data/python/efro/terminal.py",
"ba_data/python/efro/util.py",
"server/__pycache__/ballisticacore_server.cpython-310.opt-1.pyc",
"server/ballisticacore_server.py"
]

File diff suppressed because it is too large Load Diff

View File

@ -1 +0,0 @@
71864217068887285722858773141608052966

View File

@ -1 +0,0 @@
139020022013133168311319486434408589898

File diff suppressed because it is too large Load Diff

View File

@ -1,277 +0,0 @@
# Released under the MIT License. See LICENSE for details.
#
"""A dummy stub module for the real _bainternal.
The real _bainternal is a compiled extension module and only available
in the live engine. This dummy-module allows Pylint/Mypy/etc. to
function reasonably well outside of that environment.
Make sure this file is never included in dirs seen by the engine!
In the future perhaps this can be a stub (.pyi) file, but we will need
to make sure that it works with all our tools (mypy, pylint, pycharm).
NOTE: This file was autogenerated by batools.dummymodule; do not edit by hand.
"""
# I'm sorry Pylint. I know this file saddens you. Be strong.
# pylint: disable=useless-suppression
# pylint: disable=unnecessary-pass
# pylint: disable=use-dict-literal
# pylint: disable=use-list-literal
# pylint: disable=unused-argument
# pylint: disable=missing-docstring
# pylint: disable=too-many-locals
# pylint: disable=redefined-builtin
# pylint: disable=too-many-lines
# pylint: disable=redefined-outer-name
# pylint: disable=invalid-name
# pylint: disable=no-value-for-parameter
from __future__ import annotations
from typing import TYPE_CHECKING, TypeVar
if TYPE_CHECKING:
from typing import Any, Callable
_T = TypeVar('_T')
def _uninferrable() -> Any:
"""Get an "Any" in mypy and "uninferrable" in Pylint."""
# pylint: disable=undefined-variable
return _not_a_real_variable # type: ignore
def add_transaction(
transaction: dict, callback: Callable | None = None
) -> None:
"""(internal)"""
return None
def game_service_has_leaderboard(game: str, config: str) -> bool:
"""(internal)
Given a game and config string, returns whether there is a leaderboard
for it on the game service.
"""
return bool()
def get_master_server_address(source: int = -1, version: int = 1) -> str:
"""(internal)
Return the address of the master server.
"""
return str()
def get_news_show() -> str:
"""(internal)"""
return str()
def get_price(item: str) -> str | None:
"""(internal)"""
return ''
def get_public_login_id() -> str | None:
"""(internal)"""
return ''
def get_purchased(item: str) -> bool:
"""(internal)"""
return bool()
def get_purchases_state() -> int:
"""(internal)"""
return int()
def get_v1_account_display_string(full: bool = True) -> str:
"""(internal)"""
return str()
def get_v1_account_misc_read_val(name: str, default_value: Any) -> Any:
"""(internal)"""
return _uninferrable()
def get_v1_account_misc_read_val_2(name: str, default_value: Any) -> Any:
"""(internal)"""
return _uninferrable()
def get_v1_account_misc_val(name: str, default_value: Any) -> Any:
"""(internal)"""
return _uninferrable()
def get_v1_account_name() -> str:
"""(internal)"""
return str()
def get_v1_account_state() -> str:
"""(internal)"""
return str()
def get_v1_account_state_num() -> int:
"""(internal)"""
return int()
def get_v1_account_ticket_count() -> int:
"""(internal)
Returns the number of tickets for the current account.
"""
return int()
def get_v1_account_type() -> str:
"""(internal)"""
return str()
def get_v2_fleet() -> str:
"""(internal)"""
return str()
def have_outstanding_transactions() -> bool:
"""(internal)"""
return bool()
def in_game_purchase(item: str, price: int) -> None:
"""(internal)"""
return None
def is_blessed() -> bool:
"""(internal)"""
return bool()
def mark_config_dirty() -> None:
"""(internal)
Category: General Utility Functions
"""
return None
def power_ranking_query(callback: Callable, season: Any = None) -> None:
"""(internal)"""
return None
def purchase(item: str) -> None:
"""(internal)"""
return None
def report_achievement(achievement: str, pass_to_account: bool = True) -> None:
"""(internal)"""
return None
def reset_achievements() -> None:
"""(internal)"""
return None
def restore_purchases() -> None:
"""(internal)"""
return None
def run_transactions() -> None:
"""(internal)"""
return None
def sign_in_v1(account_type: str) -> None:
"""(internal)
Category: General Utility Functions
"""
return None
def sign_out_v1(v2_embedded: bool = False) -> None:
"""(internal)
Category: General Utility Functions
"""
return None
def submit_score(
game: str,
config: str,
name: Any,
score: int | None,
callback: Callable,
order: str = 'increasing',
tournament_id: str | None = None,
score_type: str = 'points',
campaign: str | None = None,
level: str | None = None,
) -> None:
"""(internal)
Submit a score to the server; callback will be called with the results.
As a courtesy, please don't send fake scores to the server. I'd prefer
to devote my time to improving the game instead of trying to make the
score server more mischief-proof.
"""
return None
def tournament_query(
callback: Callable[[dict | None], None], args: dict
) -> None:
"""(internal)"""
return None

View File

@ -1,396 +0,0 @@
# Released under the MIT License. See LICENSE for details.
#
"""The public face of Ballistica.
This top level module is a collection of most commonly used functionality.
For many modding purposes, the bits exposed here are all you'll need.
In some specific cases you may need to pull in individual submodules instead.
"""
# pylint: disable=redefined-builtin
from _ba import (
CollideModel,
Context,
ContextCall,
Data,
InputDevice,
Material,
Model,
Node,
SessionPlayer,
Sound,
Texture,
Timer,
Vec3,
Widget,
buttonwidget,
camerashake,
checkboxwidget,
columnwidget,
containerwidget,
do_once,
emitfx,
getactivity,
getcollidemodel,
getmodel,
getnodes,
getsession,
getsound,
gettexture,
hscrollwidget,
imagewidget,
newactivity,
newnode,
playsound,
printnodes,
ls_objects,
ls_input_devices,
pushcall,
quit,
rowwidget,
safecolor,
screenmessage,
scrollwidget,
set_analytics_screen,
charstr,
textwidget,
time,
timer,
open_url,
widget,
clipboard_is_supported,
clipboard_has_text,
clipboard_get_text,
clipboard_set_text,
getdata,
in_logic_thread,
)
from ba._accountv2 import AccountV2Handle
from ba._activity import Activity
from ba._plugin import PotentialPlugin, Plugin, PluginSubsystem
from ba._actor import Actor
from ba._player import PlayerInfo, Player, EmptyPlayer, StandLocation
from ba._nodeactor import NodeActor
from ba._app import App
from ba._cloud import CloudSubsystem
from ba._coopgame import CoopGameActivity
from ba._coopsession import CoopSession
from ba._dependency import (
Dependency,
DependencyComponent,
DependencySet,
AssetPackage,
)
from ba._generated.enums import (
TimeType,
Permission,
TimeFormat,
SpecialChar,
InputType,
UIScale,
)
from ba._error import (
print_exception,
print_error,
ContextError,
NotFoundError,
PlayerNotFoundError,
SessionPlayerNotFoundError,
NodeNotFoundError,
ActorNotFoundError,
InputDeviceNotFoundError,
WidgetNotFoundError,
ActivityNotFoundError,
TeamNotFoundError,
MapNotFoundError,
SessionTeamNotFoundError,
SessionNotFoundError,
DelegateNotFoundError,
DependencyError,
)
from ba._freeforallsession import FreeForAllSession
from ba._gameactivity import GameActivity
from ba._gameresults import GameResults
from ba._settings import (
Setting,
IntSetting,
FloatSetting,
ChoiceSetting,
BoolSetting,
IntChoiceSetting,
FloatChoiceSetting,
)
from ba._language import Lstr, LanguageSubsystem
from ba._map import Map, getmaps
from ba._session import Session
from ba._ui import UISubsystem
from ba._servermode import ServerController
from ba._score import ScoreType, ScoreConfig
from ba._stats import PlayerScoredMessage, PlayerRecord, Stats
from ba._team import SessionTeam, Team, EmptyTeam
from ba._teamgame import TeamGameActivity
from ba._dualteamsession import DualTeamSession
from ba._achievement import Achievement, AchievementSubsystem
from ba._appconfig import AppConfig
from ba._appdelegate import AppDelegate
from ba._apputils import is_browser_likely_available, garbage_collect
from ba._campaign import Campaign
from ba._gameutils import (
GameTip,
animate,
animate_array,
show_damage_count,
timestring,
cameraflash,
)
from ba._general import (
WeakCall,
Call,
existing,
Existable,
verify_object_death,
storagename,
getclass,
)
from ba._keyboard import Keyboard
from ba._level import Level
from ba._lobby import Lobby, Chooser
from ba._math import normalized_color, is_point_in_box, vec3validate
from ba._meta import MetadataSubsystem
from ba._messages import (
UNHANDLED,
OutOfBoundsMessage,
DeathType,
DieMessage,
PlayerDiedMessage,
StandMessage,
PickUpMessage,
DropMessage,
PickedUpMessage,
DroppedMessage,
ShouldShatterMessage,
ImpactDamageMessage,
FreezeMessage,
ThawMessage,
HitMessage,
CelebrateMessage,
)
from ba._music import (
setmusic,
MusicPlayer,
MusicType,
MusicPlayMode,
MusicSubsystem,
)
from ba._powerup import PowerupMessage, PowerupAcceptMessage
from ba._multiteamsession import MultiTeamSession
from ba.ui import Window, UIController, uicleanupcheck
from ba._collision import Collision, getcollision
app: App
__all__ = [
'AccountV2Handle',
'Achievement',
'AchievementSubsystem',
'Activity',
'ActivityNotFoundError',
'Actor',
'ActorNotFoundError',
'animate',
'animate_array',
'app',
'App',
'AppConfig',
'AppDelegate',
'AssetPackage',
'BoolSetting',
'buttonwidget',
'Call',
'cameraflash',
'camerashake',
'Campaign',
'CelebrateMessage',
'charstr',
'checkboxwidget',
'ChoiceSetting',
'Chooser',
'clipboard_get_text',
'clipboard_has_text',
'clipboard_is_supported',
'clipboard_set_text',
'CollideModel',
'Collision',
'columnwidget',
'containerwidget',
'Context',
'ContextCall',
'ContextError',
'CloudSubsystem',
'CoopGameActivity',
'CoopSession',
'Data',
'DeathType',
'DelegateNotFoundError',
'Dependency',
'DependencyComponent',
'DependencyError',
'DependencySet',
'DieMessage',
'do_once',
'DropMessage',
'DroppedMessage',
'DualTeamSession',
'emitfx',
'EmptyPlayer',
'EmptyTeam',
'Existable',
'existing',
'FloatChoiceSetting',
'FloatSetting',
'FreeForAllSession',
'FreezeMessage',
'GameActivity',
'GameResults',
'GameTip',
'garbage_collect',
'getactivity',
'getclass',
'getcollidemodel',
'getcollision',
'getdata',
'getmaps',
'getmodel',
'getnodes',
'getsession',
'getsound',
'gettexture',
'HitMessage',
'hscrollwidget',
'imagewidget',
'ImpactDamageMessage',
'in_logic_thread',
'InputDevice',
'InputDeviceNotFoundError',
'InputType',
'IntChoiceSetting',
'IntSetting',
'is_browser_likely_available',
'is_point_in_box',
'Keyboard',
'LanguageSubsystem',
'Level',
'Lobby',
'Lstr',
'Map',
'MapNotFoundError',
'Material',
'MetadataSubsystem',
'Model',
'MultiTeamSession',
'MusicPlayer',
'MusicPlayMode',
'MusicSubsystem',
'MusicType',
'newactivity',
'newnode',
'Node',
'NodeActor',
'NodeNotFoundError',
'normalized_color',
'NotFoundError',
'open_url',
'OutOfBoundsMessage',
'Permission',
'PickedUpMessage',
'PickUpMessage',
'Player',
'PlayerDiedMessage',
'PlayerInfo',
'PlayerNotFoundError',
'PlayerRecord',
'PlayerScoredMessage',
'playsound',
'Plugin',
'PluginSubsystem',
'PotentialPlugin',
'PowerupAcceptMessage',
'PowerupMessage',
'print_error',
'print_exception',
'printnodes',
'ls_objects',
'ls_input_devices',
'pushcall',
'quit',
'rowwidget',
'safecolor',
'ScoreConfig',
'ScoreType',
'screenmessage',
'scrollwidget',
'ServerController',
'Session',
'SessionNotFoundError',
'SessionPlayer',
'SessionPlayerNotFoundError',
'SessionTeam',
'SessionTeamNotFoundError',
'set_analytics_screen',
'setmusic',
'Setting',
'ShouldShatterMessage',
'show_damage_count',
'Sound',
'SpecialChar',
'StandLocation',
'StandMessage',
'Stats',
'storagename',
'Team',
'TeamGameActivity',
'TeamNotFoundError',
'Texture',
'textwidget',
'ThawMessage',
'time',
'TimeFormat',
'Timer',
'timer',
'timestring',
'TimeType',
'uicleanupcheck',
'UIController',
'UIScale',
'UISubsystem',
'UNHANDLED',
'Vec3',
'vec3validate',
'verify_object_death',
'WeakCall',
'Widget',
'widget',
'WidgetNotFoundError',
'Window',
]
# Have these things present themselves cleanly as 'ba.Foo'
# instead of 'ba._submodule.Foo'
def _simplify_module_names() -> None:
import os
# Though pdoc gets confused when we override __module__,
# so let's make an exception for it.
if os.environ.get('BA_DOCS_GENERATION', '0') != '1':
from efro.util import set_canonical_module
globs = globals()
set_canonical_module(
module_globals=globs,
names=[n for n in globs.keys() if not n.startswith('_')],
)
_simplify_module_names()
del _simplify_module_names

View File

@ -1,83 +0,0 @@
# Released under the MIT License. See LICENSE for details.
#
"""Functionality related to analytics."""
from __future__ import annotations
from typing import TYPE_CHECKING
import _ba
if TYPE_CHECKING:
pass
def game_begin_analytics() -> None:
"""Update analytics events for the start of a game."""
# pylint: disable=too-many-branches
# pylint: disable=cyclic-import
from ba._dualteamsession import DualTeamSession
from ba._freeforallsession import FreeForAllSession
from ba._coopsession import CoopSession
from ba._gameactivity import GameActivity
activity = _ba.getactivity(False)
session = _ba.getsession(False)
# Fail gracefully if we didn't cleanly get a session and game activity.
if not activity or not session or not isinstance(activity, GameActivity):
return
if isinstance(session, CoopSession):
campaign = session.campaign
assert campaign is not None
_ba.set_analytics_screen(
'Coop Game: '
+ campaign.name
+ ' '
+ campaign.getlevel(_ba.app.coop_session_args['level']).name
)
_ba.increment_analytics_count('Co-op round start')
if len(activity.players) == 1:
_ba.increment_analytics_count('Co-op round start 1 human player')
elif len(activity.players) == 2:
_ba.increment_analytics_count('Co-op round start 2 human players')
elif len(activity.players) == 3:
_ba.increment_analytics_count('Co-op round start 3 human players')
elif len(activity.players) >= 4:
_ba.increment_analytics_count('Co-op round start 4+ human players')
elif isinstance(session, DualTeamSession):
_ba.set_analytics_screen('Teams Game: ' + activity.getname())
_ba.increment_analytics_count('Teams round start')
if len(activity.players) == 1:
_ba.increment_analytics_count('Teams round start 1 human player')
elif 1 < len(activity.players) < 8:
_ba.increment_analytics_count(
'Teams round start '
+ str(len(activity.players))
+ ' human players'
)
elif len(activity.players) >= 8:
_ba.increment_analytics_count('Teams round start 8+ human players')
elif isinstance(session, FreeForAllSession):
_ba.set_analytics_screen('FreeForAll Game: ' + activity.getname())
_ba.increment_analytics_count('Free-for-all round start')
if len(activity.players) == 1:
_ba.increment_analytics_count(
'Free-for-all round start 1 human player'
)
elif 1 < len(activity.players) < 8:
_ba.increment_analytics_count(
'Free-for-all round start '
+ str(len(activity.players))
+ ' human players'
)
elif len(activity.players) >= 8:
_ba.increment_analytics_count(
'Free-for-all round start 8+ human players'
)
# For some analytics tracking on the c layer.
_ba.reset_game_activity_tracking()

View File

@ -1,769 +0,0 @@
# Released under the MIT License. See LICENSE for details.
#
"""Functionality related to the high level state of the app."""
from __future__ import annotations
import random
import logging
from enum import Enum
from typing import TYPE_CHECKING
from concurrent.futures import ThreadPoolExecutor
import _ba
from ba._music import MusicSubsystem
from ba._language import LanguageSubsystem
from ba._ui import UISubsystem
from ba._achievement import AchievementSubsystem
from ba._plugin import PluginSubsystem
from ba._accountv1 import AccountV1Subsystem
from ba._meta import MetadataSubsystem
from ba._ads import AdsSubsystem
from ba._net import NetworkSubsystem
from ba._workspace import WorkspaceSubsystem
from ba._appcomponent import AppComponentSubsystem
from ba import _internal
if TYPE_CHECKING:
import asyncio
from typing import Any, Callable
import efro.log
import ba
from ba._cloud import CloudSubsystem
from bastd.actor import spazappearance
from ba._accountv2 import AccountV2Subsystem
from ba._level import Level
from ba._apputils import AppHealthMonitor
class App:
"""A class for high level app functionality and state.
Category: **App Classes**
Use ba.app to access the single shared instance of this class.
Note that properties not documented here should be considered internal
and subject to change without warning.
"""
# pylint: disable=too-many-public-methods
# Implementations for these will be filled in by internal libs.
accounts_v2: AccountV2Subsystem
cloud: CloudSubsystem
log_handler: efro.log.LogHandler
health_monitor: AppHealthMonitor
class State(Enum):
"""High level state the app can be in."""
# The launch process has not yet begun.
INITIAL = 0
# Our app subsystems are being inited but should not yet interact.
LAUNCHING = 1
# App subsystems are inited and interacting, but the app has not
# yet embarked on a high level course of action. It is doing initial
# account logins, workspace & asset downloads, etc. in order to
# prepare for this.
LOADING = 2
# All pieces are in place and the app is now doing its thing.
RUNNING = 3
# The app is backgrounded or otherwise suspended.
PAUSED = 4
# The app is shutting down.
SHUTTING_DOWN = 5
@property
def aioloop(self) -> asyncio.AbstractEventLoop:
"""The Logic Thread's Asyncio Event Loop.
This allow async tasks to be run in the logic thread.
Note that, at this time, the asyncio loop is encapsulated
and explicitly stepped by the engine's logic thread loop and
thus things like asyncio.get_running_loop() will not return this
loop from most places in the logic thread; only from within a
task explicitly created in this loop.
"""
assert self._aioloop is not None
return self._aioloop
@property
def build_number(self) -> int:
"""Integer build number.
This value increases by at least 1 with each release of the game.
It is independent of the human readable ba.App.version string.
"""
assert isinstance(self._env['build_number'], int)
return self._env['build_number']
@property
def device_name(self) -> str:
"""Name of the device running the game."""
assert isinstance(self._env['device_name'], str)
return self._env['device_name']
@property
def config_file_path(self) -> str:
"""Where the game's config file is stored on disk."""
assert isinstance(self._env['config_file_path'], str)
return self._env['config_file_path']
@property
def user_agent_string(self) -> str:
"""String containing various bits of info about OS/device/etc."""
assert isinstance(self._env['user_agent_string'], str)
return self._env['user_agent_string']
@property
def version(self) -> str:
"""Human-readable version string; something like '1.3.24'.
This should not be interpreted as a number; it may contain
string elements such as 'alpha', 'beta', 'test', etc.
If a numeric version is needed, use 'ba.App.build_number'.
"""
assert isinstance(self._env['version'], str)
return self._env['version']
@property
def debug_build(self) -> bool:
"""Whether the app was compiled in debug mode.
Debug builds generally run substantially slower than non-debug
builds due to compiler optimizations being disabled and extra
checks being run.
"""
assert isinstance(self._env['debug_build'], bool)
return self._env['debug_build']
@property
def test_build(self) -> bool:
"""Whether the game was compiled in test mode.
Test mode enables extra checks and features that are useful for
release testing but which do not slow the game down significantly.
"""
assert isinstance(self._env['test_build'], bool)
return self._env['test_build']
@property
def python_directory_user(self) -> str:
"""Path where the app looks for custom user scripts."""
assert isinstance(self._env['python_directory_user'], str)
return self._env['python_directory_user']
@property
def python_directory_app(self) -> str:
"""Path where the app looks for its bundled scripts."""
assert isinstance(self._env['python_directory_app'], str)
return self._env['python_directory_app']
@property
def python_directory_app_site(self) -> str:
"""Path containing pip packages bundled with the app."""
assert isinstance(self._env['python_directory_app_site'], str)
return self._env['python_directory_app_site']
@property
def config(self) -> ba.AppConfig:
"""The ba.AppConfig instance representing the app's config state."""
assert self._config is not None
return self._config
@property
def platform(self) -> str:
"""Name of the current platform.
Examples are: 'mac', 'windows', android'.
"""
assert isinstance(self._env['platform'], str)
return self._env['platform']
@property
def subplatform(self) -> str:
"""String for subplatform.
Can be empty. For the 'android' platform, subplatform may
be 'google', 'amazon', etc.
"""
assert isinstance(self._env['subplatform'], str)
return self._env['subplatform']
@property
def api_version(self) -> int:
"""The game's api version.
Only Python modules and packages associated with the current API
version number will be detected by the game (see the ba_meta tag).
This value will change whenever backward-incompatible changes are
introduced to game APIs. When that happens, scripts should be updated
accordingly and set to target the new API version number.
"""
from ba._meta import CURRENT_API_VERSION
return CURRENT_API_VERSION
@property
def on_tv(self) -> bool:
"""Whether the game is currently running on a TV."""
assert isinstance(self._env['on_tv'], bool)
return self._env['on_tv']
@property
def vr_mode(self) -> bool:
"""Whether the game is currently running in VR."""
assert isinstance(self._env['vr_mode'], bool)
return self._env['vr_mode']
@property
def ui_bounds(self) -> tuple[float, float, float, float]:
"""Bounds of the 'safe' screen area in ui space.
This tuple contains: (x-min, x-max, y-min, y-max)
"""
return _ba.uibounds()
def __init__(self) -> None:
"""(internal)
Do not instantiate this class; use ba.app to access
the single shared instance.
"""
# pylint: disable=too-many-statements
self.state = self.State.INITIAL
self._bootstrapping_completed = False
self._called_on_app_launching = False
self._launch_completed = False
self._initial_sign_in_completed = False
self._meta_scan_completed = False
self._called_on_app_loading = False
self._called_on_app_running = False
self._app_paused = False
# Config.
self.config_file_healthy = False
# This is incremented any time the app is backgrounded/foregrounded;
# can be a simple way to determine if network data should be
# refreshed/etc.
self.fg_state = 0
self._aioloop: asyncio.AbstractEventLoop | None = None
self._env = _ba.env()
self.protocol_version: int = self._env['protocol_version']
assert isinstance(self.protocol_version, int)
self.toolbar_test: bool = self._env['toolbar_test']
assert isinstance(self.toolbar_test, bool)
self.demo_mode: bool = self._env['demo_mode']
assert isinstance(self.demo_mode, bool)
self.arcade_mode: bool = self._env['arcade_mode']
assert isinstance(self.arcade_mode, bool)
self.headless_mode: bool = self._env['headless_mode']
assert isinstance(self.headless_mode, bool)
self.iircade_mode: bool = self._env['iircade_mode']
assert isinstance(self.iircade_mode, bool)
self.allow_ticket_purchases: bool = not self.iircade_mode
# Default executor which can be used for misc background processing.
# It should also be passed to any asyncio loops we create so that
# everything shares the same single set of threads.
self.threadpool = ThreadPoolExecutor(thread_name_prefix='baworker')
# Misc.
self.tips: list[str] = []
self.stress_test_reset_timer: ba.Timer | None = None
self.did_weak_call_warning = False
self.log_have_new = False
self.log_upload_timer_started = False
self._config: ba.AppConfig | None = None
self.printed_live_object_warning = False
# We include this extra hash with shared input-mapping names so
# that we don't share mappings between differently-configured
# systems. For instance, different android devices may give different
# key values for the same controller type so we keep their mappings
# distinct.
self.input_map_hash: str | None = None
# Co-op Campaigns.
self.campaigns: dict[str, ba.Campaign] = {}
self.custom_coop_practice_games: list[str] = []
# Server Mode.
self.server: ba.ServerController | None = None
self.components = AppComponentSubsystem()
self.meta = MetadataSubsystem()
self.accounts_v1 = AccountV1Subsystem()
self.plugins = PluginSubsystem()
self.music = MusicSubsystem()
self.lang = LanguageSubsystem()
self.ach = AchievementSubsystem()
self.ui = UISubsystem()
self.ads = AdsSubsystem()
self.net = NetworkSubsystem()
self.workspaces = WorkspaceSubsystem()
# Lobby.
self.lobby_random_profile_index: int = 1
self.lobby_random_char_index_offset = random.randrange(1000)
self.lobby_account_profile_device_id: int | None = None
# Main Menu.
self.main_menu_did_initial_transition = False
self.main_menu_last_news_fetch_time: float | None = None
# Spaz.
self.spaz_appearances: dict[str, spazappearance.Appearance] = {}
self.last_spaz_turbo_warn_time: float = -99999.0
# Maps.
self.maps: dict[str, type[ba.Map]] = {}
# Gameplay.
self.teams_series_length = 7
self.ffa_series_length = 24
self.coop_session_args: dict = {}
self.value_test_defaults: dict = {}
self.first_main_menu = True # FIXME: Move to mainmenu class.
self.did_menu_intro = False # FIXME: Move to mainmenu class.
self.main_menu_window_refresh_check_count = 0 # FIXME: Mv to mainmenu.
self.main_menu_resume_callbacks: list = [] # Can probably go away.
self.special_offer: dict | None = None
self.ping_thread_count = 0
self.invite_confirm_windows: list[Any] = [] # FIXME: Don't use Any.
self.store_layout: dict[str, list[dict[str, Any]]] | None = None
self.store_items: dict[str, dict] | None = None
self.pro_sale_start_time: int | None = None
self.pro_sale_start_val: int | None = None
self.delegate: ba.AppDelegate | None = None
self._asyncio_timer: ba.Timer | None = None
def on_app_launching(self) -> None:
"""Called when the app is first entering the launching state."""
# pylint: disable=cyclic-import
# pylint: disable=too-many-locals
from ba import _asyncio
from ba import _appconfig
from ba import _map
from ba import _campaign
from bastd import appdelegate
from bastd import maps as stdmaps
from bastd.actor import spazappearance
from ba._generated.enums import TimeType
from ba._apputils import (
log_dumped_app_state,
handle_leftover_v1_cloud_log_file,
AppHealthMonitor,
)
assert _ba.in_logic_thread()
self._aioloop = _asyncio.setup_asyncio()
self.health_monitor = AppHealthMonitor()
cfg = self.config
self.delegate = appdelegate.AppDelegate()
self.ui.on_app_launch()
spazappearance.register_appearances()
_campaign.init_campaigns()
# FIXME: This should not be hard-coded.
for maptype in [
stdmaps.HockeyStadium,
stdmaps.FootballStadium,
stdmaps.Bridgit,
stdmaps.BigG,
stdmaps.Roundabout,
stdmaps.MonkeyFace,
stdmaps.ZigZag,
stdmaps.ThePad,
stdmaps.DoomShroom,
stdmaps.LakeFrigid,
stdmaps.TipTop,
stdmaps.CragCastle,
stdmaps.TowerD,
stdmaps.HappyThoughts,
stdmaps.StepRightUp,
stdmaps.Courtyard,
stdmaps.Rampage,
]:
_map.register_map(maptype)
# Non-test, non-debug builds should generally be blessed; warn if not.
# (so I don't accidentally release a build that can't play tourneys)
if (
not self.debug_build
and not self.test_build
and not _internal.is_blessed()
):
_ba.screenmessage('WARNING: NON-BLESSED BUILD', color=(1, 0, 0))
# If there's a leftover log file, attempt to upload it to the
# master-server and/or get rid of it.
handle_leftover_v1_cloud_log_file()
# Only do this stuff if our config file is healthy so we don't
# overwrite a broken one or whatnot and wipe out data.
if not self.config_file_healthy:
if self.platform in ('mac', 'linux', 'windows'):
from bastd.ui.configerror import ConfigErrorWindow
_ba.pushcall(ConfigErrorWindow)
return
# For now on other systems we just overwrite the bum config.
# At this point settings are already set; lets just commit them
# to disk.
_appconfig.commit_app_config(force=True)
self.music.on_app_launch()
launch_count = cfg.get('launchCount', 0)
launch_count += 1
# So we know how many times we've run the game at various
# version milestones.
for key in ('lc14173', 'lc14292'):
cfg.setdefault(key, launch_count)
cfg['launchCount'] = launch_count
cfg.commit()
# Run a test in a few seconds to see if we should pop up an existing
# pending special offer.
def check_special_offer() -> None:
from bastd.ui.specialoffer import show_offer
config = self.config
if (
'pendingSpecialOffer' in config
and _internal.get_public_login_id()
== config['pendingSpecialOffer']['a']
):
self.special_offer = config['pendingSpecialOffer']['o']
show_offer()
if not self.headless_mode:
_ba.timer(3.0, check_special_offer, timetype=TimeType.REAL)
# Get meta-system scanning built-in stuff in the bg.
self.meta.start_scan(scan_complete_cb=self.on_meta_scan_complete)
self.accounts_v2.on_app_launch()
self.accounts_v1.on_app_launch()
# See note below in on_app_pause.
if self.state != self.State.LAUNCHING:
logging.error(
'on_app_launch found state %s; expected LAUNCHING.', self.state
)
# If any traceback dumps happened last run, log and clear them.
log_dumped_app_state()
self._launch_completed = True
self._update_state()
def on_app_loading(self) -> None:
"""Called when initially entering the loading state."""
def on_app_running(self) -> None:
"""Called when initially entering the running state."""
self.plugins.on_app_running()
# from ba._dependency import test_depset
# test_depset()
def on_bootstrapping_completed(self) -> None:
"""Called by the C++ layer once its ready to rock."""
assert _ba.in_logic_thread()
assert not self._bootstrapping_completed
self._bootstrapping_completed = True
self._update_state()
def on_meta_scan_complete(self) -> None:
"""Called by meta-scan when it is done doing its thing."""
assert _ba.in_logic_thread()
self.plugins.on_meta_scan_complete()
assert not self._meta_scan_completed
self._meta_scan_completed = True
self._update_state()
def _update_state(self) -> None:
assert _ba.in_logic_thread()
if self._app_paused:
# Entering paused state:
if self.state is not self.State.PAUSED:
self.state = self.State.PAUSED
self.cloud.on_app_pause()
self.accounts_v1.on_app_pause()
self.plugins.on_app_pause()
self.health_monitor.on_app_pause()
else:
# Leaving paused state:
if self.state is self.State.PAUSED:
self.fg_state += 1
self.cloud.on_app_resume()
self.accounts_v1.on_app_resume()
self.music.on_app_resume()
self.plugins.on_app_resume()
self.health_monitor.on_app_resume()
# Handle initially entering or returning to other states.
if self._initial_sign_in_completed and self._meta_scan_completed:
self.state = self.State.RUNNING
if not self._called_on_app_running:
self._called_on_app_running = True
self.on_app_running()
elif self._launch_completed:
self.state = self.State.LOADING
if not self._called_on_app_loading:
self._called_on_app_loading = True
self.on_app_loading()
else:
# Only thing left is launching. We shouldn't be getting
# called before at least that is complete.
assert self._bootstrapping_completed
self.state = self.State.LAUNCHING
if not self._called_on_app_launching:
self._called_on_app_launching = True
self.on_app_launching()
def on_app_pause(self) -> None:
"""Called when the app goes to a suspended state."""
assert not self._app_paused # Should avoid redundant calls.
self._app_paused = True
self._update_state()
def on_app_resume(self) -> None:
"""Run when the app resumes from a suspended state."""
assert self._app_paused # Should avoid redundant calls.
self._app_paused = False
self._update_state()
def on_app_shutdown(self) -> None:
"""(internal)"""
self.state = self.State.SHUTTING_DOWN
self.music.on_app_shutdown()
self.plugins.on_app_shutdown()
def read_config(self) -> None:
"""(internal)"""
from ba._appconfig import read_config
self._config, self.config_file_healthy = read_config()
def pause(self) -> None:
"""Pause the game due to a user request or menu popping up.
If there's a foreground host-activity that says it's pausable, tell it
to pause ..we now no longer pause if there are connected clients.
"""
activity: ba.Activity | None = _ba.get_foreground_host_activity()
if (
activity is not None
and activity.allow_pausing
and not _ba.have_connected_clients()
):
from ba._language import Lstr
from ba._nodeactor import NodeActor
# FIXME: Shouldn't be touching scene stuff here;
# should just pass the request on to the host-session.
with _ba.Context(activity):
globs = activity.globalsnode
if not globs.paused:
_ba.playsound(_ba.getsound('refWhistle'))
globs.paused = True
# FIXME: This should not be an attr on Actor.
activity.paused_text = NodeActor(
_ba.newnode(
'text',
attrs={
'text': Lstr(resource='pausedByHostText'),
'client_only': True,
'flatness': 1.0,
'h_align': 'center',
},
)
)
def resume(self) -> None:
"""Resume the game due to a user request or menu closing.
If there's a foreground host-activity that's currently paused, tell it
to resume.
"""
# FIXME: Shouldn't be touching scene stuff here;
# should just pass the request on to the host-session.
activity = _ba.get_foreground_host_activity()
if activity is not None:
with _ba.Context(activity):
globs = activity.globalsnode
if globs.paused:
_ba.playsound(_ba.getsound('refWhistle'))
globs.paused = False
# FIXME: This should not be an actor attr.
activity.paused_text = None
def add_coop_practice_level(self, level: Level) -> None:
"""Adds an individual level to the 'practice' section in Co-op."""
# Assign this level to our catch-all campaign.
self.campaigns['Challenges'].addlevel(level)
# Make note to add it to our challenges UI.
self.custom_coop_practice_games.append(f'Challenges:{level.name}')
def return_to_main_menu_session_gracefully(
self, reset_ui: bool = True
) -> None:
"""Attempt to cleanly get back to the main menu."""
# pylint: disable=cyclic-import
from ba import _benchmark
from ba._general import Call
from bastd.mainmenu import MainMenuSession
if reset_ui:
_ba.app.ui.clear_main_menu_window()
if isinstance(_ba.get_foreground_host_session(), MainMenuSession):
# It may be possible we're on the main menu but the screen is faded
# so fade back in.
_ba.fade_screen(True)
return
_benchmark.stop_stress_test() # Stop stress-test if in progress.
# If we're in a host-session, tell them to end.
# This lets them tear themselves down gracefully.
host_session: ba.Session | None = _ba.get_foreground_host_session()
if host_session is not None:
# Kick off a little transaction so we'll hopefully have all the
# latest account state when we get back to the menu.
_internal.add_transaction(
{'type': 'END_SESSION', 'sType': str(type(host_session))}
)
_internal.run_transactions()
host_session.end()
# Otherwise just force the issue.
else:
_ba.pushcall(Call(_ba.new_host_session, MainMenuSession))
def add_main_menu_close_callback(self, call: Callable[[], Any]) -> None:
"""(internal)"""
# If there's no main menu up, just call immediately.
if not self.ui.has_main_menu_window():
with _ba.Context('ui'):
call()
else:
self.main_menu_resume_callbacks.append(call)
def launch_coop_game(
self, game: str, force: bool = False, args: dict | None = None
) -> bool:
"""High level way to launch a local co-op session."""
# pylint: disable=cyclic-import
from ba._campaign import getcampaign
from bastd.ui.coop.level import CoopLevelLockedWindow
if args is None:
args = {}
if game == '':
raise ValueError('empty game name')
campaignname, levelname = game.split(':')
campaign = getcampaign(campaignname)
# If this campaign is sequential, make sure we've completed the
# one before this.
if campaign.sequential and not force:
for level in campaign.levels:
if level.name == levelname:
break
if not level.complete:
CoopLevelLockedWindow(
campaign.getlevel(levelname).displayname,
campaign.getlevel(level.name).displayname,
)
return False
# Ok, we're good to go.
self.coop_session_args = {
'campaign': campaignname,
'level': levelname,
}
for arg_name, arg_val in list(args.items()):
self.coop_session_args[arg_name] = arg_val
def _fade_end() -> None:
from ba import _coopsession
try:
_ba.new_host_session(_coopsession.CoopSession)
except Exception:
from ba import _error
_error.print_exception()
from bastd.mainmenu import MainMenuSession
_ba.new_host_session(MainMenuSession)
_ba.fade_screen(False, endcall=_fade_end)
return True
def handle_deep_link(self, url: str) -> None:
"""Handle a deep link URL."""
from ba._language import Lstr
appname = _ba.appname()
if url.startswith(f'{appname}://code/'):
code = url.replace(f'{appname}://code/', '')
self.accounts_v1.add_pending_promo_code(code)
else:
_ba.screenmessage(Lstr(resource='errorText'), color=(1, 0, 0))
_ba.playsound(_ba.getsound('error'))
def on_initial_sign_in_completed(self) -> None:
"""Callback to be run after initial sign-in (or lack thereof).
This period includes things such as syncing account workspaces
or other data so it may take a substantial amount of time.
This should also run after a short amount of time if no login
has occurred.
"""
# Tell meta it can start scanning extra stuff that just showed up
# (account workspaces).
self.meta.start_extra_scan()
self._initial_sign_in_completed = True
self._update_state()

View File

@ -1,3 +0,0 @@
# Released under the MIT License. See LICENSE for details.
#
"""Functionality related to the high level state of the app."""

View File

@ -1,192 +0,0 @@
# Released under the MIT License. See LICENSE for details.
#
"""Bootstrapping."""
from __future__ import annotations
import os
import sys
from typing import TYPE_CHECKING
from efro.log import setup_logging, LogLevel
import _ba
if TYPE_CHECKING:
from typing import Any
from efro.log import LogEntry
_g_did_bootstrap = False # pylint: disable=invalid-name
def bootstrap() -> None:
"""Run bootstrapping logic.
This is the very first ballistica code that runs (aside from imports).
It sets up low level environment bits and creates the app instance.
"""
global _g_did_bootstrap # pylint: disable=global-statement, invalid-name
if _g_did_bootstrap:
raise RuntimeError('Bootstrap has already been called.')
_g_did_bootstrap = True
# The first thing we do is set up our logging system and feed
# Python's stdout/stderr into it. Then we can at least debug problems
# on systems where native stdout/stderr is not easily accessible
# such as Android.
log_handler = setup_logging(
log_path=None,
level=LogLevel.DEBUG,
suppress_non_root_debug=True,
log_stdout_stderr=True,
cache_size_limit=1024 * 1024,
)
log_handler.add_callback(_on_log)
env = _ba.env()
# Give a soft warning if we're being used with a different binary
# version than we expect.
expected_build = 21005
running_build: int = env['build_number']
if running_build != expected_build:
print(
f'WARNING: These script files are meant to be used with'
f' Ballistica build {expected_build}.\n'
f' You are running build {running_build}.'
f' This might cause the app to error or misbehave.',
file=sys.stderr,
)
# In bootstrap_monolithic.py we told Python not to handle SIGINT itself
# (because that must be done in the main thread). Now we finish the
# job by adding our own handler to replace it.
# Note: I've found we need to set up our C signal handling AFTER
# we've told Python to disable its own; otherwise (on Mac at least) it
# wipes out our existing C handler.
_ba.setup_sigint()
# Sanity check: we should always be run in UTF-8 mode.
if sys.flags.utf8_mode != 1:
print(
'ERROR: Python\'s UTF-8 mode is not set.'
' This will likely result in errors.',
file=sys.stderr,
)
debug_build = env['debug_build']
# We expect dev_mode on in debug builds and off otherwise.
if debug_build != sys.flags.dev_mode:
print(
f'WARNING: Mismatch in debug_build {debug_build}'
f' and sys.flags.dev_mode {sys.flags.dev_mode}',
file=sys.stderr,
)
# In embedded situations (when we're providing our own Python) let's
# also provide our own root certs so ssl works. We can consider overriding
# this in particular embedded cases if we can verify that system certs
# are working.
# (We also allow forcing this via an env var if the user desires)
if (
_ba.contains_python_dist()
or os.environ.get('BA_USE_BUNDLED_ROOT_CERTS') == '1'
):
import certifi
# Let both OpenSSL and requests (if present) know to use this.
os.environ['SSL_CERT_FILE'] = os.environ[
'REQUESTS_CA_BUNDLE'
] = certifi.where()
# On Windows I'm seeing the following error creating asyncio loops in
# background threads with the default proactor setup:
# ValueError: set_wakeup_fd only works in main thread of the main
# interpreter
# So let's explicitly request selector loops.
# Interestingly this error only started showing up once I moved
# Python init to the main thread; previously the various asyncio
# bg thread loops were working fine (maybe something caused them
# to default to selector in that case?..
if sys.platform == 'win32':
import asyncio
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
# pylint: disable=c-extension-no-member
if not TYPE_CHECKING:
import __main__
# Clear out the standard quit/exit messages since they don't
# work in our embedded situation (should revisit this once we're
# usable from a standard interpreter).
del __main__.__builtins__.quit
del __main__.__builtins__.exit
# Also replace standard interactive help with our simplified
# one which is more friendly to cloud/in-game console situations.
__main__.__builtins__.help = _CustomHelper()
# Now spin up our App instance and store it on both _ba and ba.
from ba._app import App
import ba
_ba.app = ba.app = App()
_ba.app.log_handler = log_handler
class _CustomHelper:
"""Replacement 'help' that behaves better for our setup."""
def __repr__(self) -> str:
return 'Type help(object) for help about object.'
def __call__(self, *args: Any, **kwds: Any) -> Any:
# We get an ugly error importing pydoc on our embedded
# platforms due to _sysconfigdata_xxx.py not being present
# (but then things mostly work). Let's get the ugly error out
# of the way explicitly.
import sysconfig
try:
# This errors once but seems to run cleanly after, so let's
# get the error out of the way.
sysconfig.get_path('stdlib')
except ModuleNotFoundError:
pass
import pydoc
# Disable pager and interactive help since neither works well
# with our funky multi-threaded setup or in-game/cloud consoles.
# Let's just do simple text dumps.
pydoc.pager = pydoc.plainpager
if not args and not kwds:
print(
'Interactive help is not available in this environment.\n'
'Type help(object) for help about object.'
)
return None
return pydoc.help(*args, **kwds)
def _on_log(entry: LogEntry) -> None:
# Just forward this along to the engine to display in the in-game console,
# in the Android log, etc.
_ba.display_log(
name=entry.name,
level=entry.level.name,
message=entry.message,
)
# We also want to feed some logs to the old V1-cloud-log system.
# Let's go with anything warning or higher as well as the stdout/stderr
# log messages that ba.app.log_handler creates for us.
if entry.level.value >= LogLevel.WARNING.value or entry.name in (
'stdout',
'stderr',
):
_ba.v1_cloud_log(entry.message)

View File

@ -1,498 +0,0 @@
# Released under the MIT License. See LICENSE for details.
#
"""Snippets of code for use by the internal layer.
History: originally the engine would dynamically compile/eval various Python
code from within C++ code, but the major downside there was that none of it
was type-checked so if names or arguments changed it would go unnoticed
until it broke at runtime. By instead defining such snippets here and then
capturing references to them all at launch it is possible to allow linting
and type-checking magic to happen and most issues will be caught immediately.
"""
# (most of these are self-explanatory)
# pylint: disable=missing-function-docstring
from __future__ import annotations
from typing import TYPE_CHECKING
import _ba
from ba import _internal
if TYPE_CHECKING:
from typing import Sequence, Any
import ba
def finish_bootstrapping() -> None:
"""Do final bootstrapping related bits."""
assert _ba.in_logic_thread()
# Ok, low level bootstrapping is done; time to get Python stuff started.
_ba.app.on_bootstrapping_completed()
def reset_to_main_menu() -> None:
"""Reset the game to the main menu gracefully."""
_ba.app.return_to_main_menu_session_gracefully()
def set_config_fullscreen_on() -> None:
"""The app has set fullscreen on its own and we should note it."""
_ba.app.config['Fullscreen'] = True
_ba.app.config.commit()
def set_config_fullscreen_off() -> None:
"""The app has set fullscreen on its own and we should note it."""
_ba.app.config['Fullscreen'] = False
_ba.app.config.commit()
def not_signed_in_screen_message() -> None:
from ba._language import Lstr
_ba.screenmessage(Lstr(resource='notSignedInErrorText'))
def connecting_to_party_message() -> None:
from ba._language import Lstr
_ba.screenmessage(
Lstr(resource='internal.connectingToPartyText'), color=(1, 1, 1)
)
def rejecting_invite_already_in_party_message() -> None:
from ba._language import Lstr
_ba.screenmessage(
Lstr(resource='internal.rejectingInviteAlreadyInPartyText'),
color=(1, 0.5, 0),
)
def connection_failed_message() -> None:
from ba._language import Lstr
_ba.screenmessage(
Lstr(resource='internal.connectionFailedText'), color=(1, 0.5, 0)
)
def temporarily_unavailable_message() -> None:
from ba._language import Lstr
_ba.playsound(_ba.getsound('error'))
_ba.screenmessage(
Lstr(resource='getTicketsWindow.unavailableTemporarilyText'),
color=(1, 0, 0),
)
def in_progress_message() -> None:
from ba._language import Lstr
_ba.playsound(_ba.getsound('error'))
_ba.screenmessage(
Lstr(resource='getTicketsWindow.inProgressText'), color=(1, 0, 0)
)
def error_message() -> None:
from ba._language import Lstr
_ba.playsound(_ba.getsound('error'))
_ba.screenmessage(Lstr(resource='errorText'), color=(1, 0, 0))
def purchase_not_valid_error() -> None:
from ba._language import Lstr
_ba.playsound(_ba.getsound('error'))
_ba.screenmessage(
Lstr(
resource='store.purchaseNotValidError',
subs=[('${EMAIL}', 'support@froemling.net')],
),
color=(1, 0, 0),
)
def purchase_already_in_progress_error() -> None:
from ba._language import Lstr
_ba.playsound(_ba.getsound('error'))
_ba.screenmessage(
Lstr(resource='store.purchaseAlreadyInProgressText'), color=(1, 0, 0)
)
def gear_vr_controller_warning() -> None:
from ba._language import Lstr
_ba.playsound(_ba.getsound('error'))
_ba.screenmessage(
Lstr(resource='usesExternalControllerText'), color=(1, 0, 0)
)
def uuid_str() -> str:
import uuid
return str(uuid.uuid4())
def orientation_reset_cb_message() -> None:
from ba._language import Lstr
_ba.screenmessage(
Lstr(resource='internal.vrOrientationResetCardboardText'),
color=(0, 1, 0),
)
def orientation_reset_message() -> None:
from ba._language import Lstr
_ba.screenmessage(
Lstr(resource='internal.vrOrientationResetText'), color=(0, 1, 0)
)
def on_app_pause() -> None:
_ba.app.on_app_pause()
def on_app_resume() -> None:
_ba.app.on_app_resume()
def launch_main_menu_session() -> None:
from bastd.mainmenu import MainMenuSession
_ba.new_host_session(MainMenuSession)
def language_test_toggle() -> None:
_ba.app.lang.setlanguage(
'Gibberish' if _ba.app.lang.language == 'English' else 'English'
)
def award_in_control_achievement() -> None:
_ba.app.ach.award_local_achievement('In Control')
def award_dual_wielding_achievement() -> None:
_ba.app.ach.award_local_achievement('Dual Wielding')
def play_gong_sound() -> None:
_ba.playsound(_ba.getsound('gong'))
def launch_coop_game(name: str) -> None:
_ba.app.launch_coop_game(name)
def purchases_restored_message() -> None:
from ba._language import Lstr
_ba.screenmessage(
Lstr(resource='getTicketsWindow.purchasesRestoredText'), color=(0, 1, 0)
)
def dismiss_wii_remotes_window() -> None:
call = _ba.app.ui.dismiss_wii_remotes_window_call
if call is not None:
call()
def unavailable_message() -> None:
from ba._language import Lstr
_ba.screenmessage(
Lstr(resource='getTicketsWindow.unavailableText'), color=(1, 0, 0)
)
def submit_analytics_counts(sval: str) -> None:
_internal.add_transaction({'type': 'ANALYTICS_COUNTS', 'values': sval})
_internal.run_transactions()
def set_last_ad_network(sval: str) -> None:
import time
_ba.app.ads.last_ad_network = sval
_ba.app.ads.last_ad_network_set_time = time.time()
def no_game_circle_message() -> None:
from ba._language import Lstr
_ba.screenmessage(Lstr(resource='noGameCircleText'), color=(1, 0, 0))
def google_play_purchases_not_available_message() -> None:
from ba._language import Lstr
_ba.screenmessage(
Lstr(resource='googlePlayPurchasesNotAvailableText'), color=(1, 0, 0)
)
def google_play_services_not_available_message() -> None:
from ba._language import Lstr
_ba.screenmessage(
Lstr(resource='googlePlayServicesNotAvailableText'), color=(1, 0, 0)
)
def empty_call() -> None:
pass
def level_icon_press() -> None:
print('LEVEL ICON PRESSED')
def trophy_icon_press() -> None:
print('TROPHY ICON PRESSED')
def coin_icon_press() -> None:
print('COIN ICON PRESSED')
def ticket_icon_press() -> None:
from bastd.ui.resourcetypeinfo import ResourceTypeInfoWindow
ResourceTypeInfoWindow(
origin_widget=_ba.get_special_widget('tickets_info_button')
)
def back_button_press() -> None:
_ba.back_press()
def friends_button_press() -> None:
print('FRIEND BUTTON PRESSED!')
def print_trace() -> None:
import traceback
print('Python Traceback (most recent call last):')
traceback.print_stack()
def toggle_fullscreen() -> None:
cfg = _ba.app.config
cfg['Fullscreen'] = not cfg.resolve('Fullscreen')
cfg.apply_and_commit()
def party_icon_activate(origin: Sequence[float]) -> None:
import weakref
from bastd.ui.party import PartyWindow
app = _ba.app
_ba.playsound(_ba.getsound('swish'))
# If it exists, dismiss it; otherwise make a new one.
if app.ui.party_window is not None and app.ui.party_window() is not None:
app.ui.party_window().close()
else:
app.ui.party_window = weakref.ref(PartyWindow(origin=origin))
def read_config() -> None:
_ba.app.read_config()
def ui_remote_press() -> None:
"""Handle a press by a remote device that is only usable for nav."""
from ba._language import Lstr
# Can be called without a context; need a context for getsound.
with _ba.Context('ui'):
_ba.screenmessage(
Lstr(resource='internal.controllerForMenusOnlyText'),
color=(1, 0, 0),
)
_ba.playsound(_ba.getsound('error'))
def quit_window() -> None:
from bastd.ui.confirm import QuitWindow
QuitWindow()
def remove_in_game_ads_message() -> None:
_ba.app.ads.do_remove_in_game_ads_message()
def telnet_access_request() -> None:
from bastd.ui.telnet import TelnetAccessRequestWindow
TelnetAccessRequestWindow()
def do_quit() -> None:
_ba.quit()
def shutdown() -> None:
_ba.app.on_app_shutdown()
def gc_disable() -> None:
import gc
gc.disable()
def device_menu_press(device: ba.InputDevice) -> None:
from bastd.ui.mainmenu import MainMenuWindow
in_main_menu = _ba.app.ui.has_main_menu_window()
if not in_main_menu:
_ba.set_ui_input_device(device)
_ba.playsound(_ba.getsound('swish'))
_ba.app.ui.set_main_menu_window(MainMenuWindow().get_root_widget())
def show_url_window(address: str) -> None:
from bastd.ui.url import ShowURLWindow
ShowURLWindow(address)
def party_invite_revoke(invite_id: str) -> None:
# If there's a confirm window up for joining this particular
# invite, kill it.
for winref in _ba.app.invite_confirm_windows:
win = winref()
if win is not None and win.ew_party_invite_id == invite_id:
_ba.containerwidget(
edit=win.get_root_widget(), transition='out_right'
)
def filter_chat_message(msg: str, client_id: int) -> str | None:
"""Intercept/filter chat messages.
Called for all chat messages while hosting.
Messages originating from the host will have clientID -1.
Should filter and return the string to be displayed, or return None
to ignore the message.
"""
del client_id # Unused by default.
return msg
def local_chat_message(msg: str) -> None:
if (
_ba.app.ui.party_window is not None
and _ba.app.ui.party_window() is not None
):
_ba.app.ui.party_window().on_chat_message(msg)
def get_player_icon(sessionplayer: ba.SessionPlayer) -> dict[str, Any]:
info = sessionplayer.get_icon_info()
return {
'texture': _ba.gettexture(info['texture']),
'tint_texture': _ba.gettexture(info['tint_texture']),
'tint_color': info['tint_color'],
'tint2_color': info['tint2_color'],
}
def hash_strings(inputs: list[str]) -> str:
"""Hash provided strings into a short output string."""
import hashlib
sha = hashlib.sha1()
for inp in inputs:
sha.update(inp.encode())
return sha.hexdigest()
def have_account_v2_credentials() -> bool:
"""Do we have primary account-v2 credentials set?"""
return _ba.app.accounts_v2.have_primary_credentials()
def implicit_sign_in(
login_type_str: str, login_id: str, display_name: str
) -> None:
"""An implicit login happened."""
from bacommon.login import LoginType
_ba.app.accounts_v2.on_implicit_sign_in(
login_type=LoginType(login_type_str),
login_id=login_id,
display_name=display_name,
)
def implicit_sign_out(login_type_str: str) -> None:
"""An implicit logout happened."""
from bacommon.login import LoginType
_ba.app.accounts_v2.on_implicit_sign_out(
login_type=LoginType(login_type_str)
)
def login_adapter_get_sign_in_token_response(
login_type_str: str, attempt_id_str: str, result_str: str
) -> None:
"""Login adapter do-sign-in completed."""
from bacommon.login import LoginType
from ba._login import LoginAdapterNative
login_type = LoginType(login_type_str)
attempt_id = int(attempt_id_str)
result = None if result_str == '' else result_str
with _ba.Context('ui'):
adapter = _ba.app.accounts_v2.login_adapters[login_type]
assert isinstance(adapter, LoginAdapterNative)
adapter.on_sign_in_complete(attempt_id=attempt_id, result=result)
def show_client_too_old_error() -> None:
"""Called at launch if the server tells us we're too old to talk to it."""
from ba._language import Lstr
# If you are using an old build of the app and would like to stop
# seeing this error at launch, do:
# ba.app.config['SuppressClientTooOldErrorForBuild'] = ba.app.build_number
# ba.app.config.commit()
# Note that you will have to do that again later if you update to
# a newer build.
if (
_ba.app.config.get('SuppressClientTooOldErrorForBuild')
== _ba.app.build_number
):
return
_ba.playsound(_ba.getsound('error'))
_ba.screenmessage(
Lstr(
translate=(
'serverResponses',
'Server functionality is no longer supported'
' in this version of the game;\n'
'Please update to a newer version.',
)
),
color=(1, 0, 0),
)

View File

@ -1,381 +0,0 @@
# Released under the MIT License. See LICENSE for details.
#
"""A soft wrapper around _bainternal.
This allows code to use _bainternal functionality and get warnings
or fallbacks in some cases instead of hard errors. Code that absolutely
relies on the presence of _bainternal can just use that module directly.
"""
from __future__ import annotations
from typing import TYPE_CHECKING
try:
# noinspection PyUnresolvedReferences
import _bainternal
HAVE_INTERNAL = True
except ImportError:
HAVE_INTERNAL = False
if TYPE_CHECKING:
from typing import Callable, Any
# Code that will function without _bainternal but which should be updated
# to account for its absence should call this to draw attention to itself.
def _no_bainternal_warning() -> None:
import logging
logging.warning('INTERNAL CALL RUN WITHOUT INTERNAL PRESENT.')
# Code that won't work without _bainternal should raise these errors.
def _no_bainternal_error() -> RuntimeError:
raise RuntimeError('_bainternal is not present')
def get_v2_fleet() -> str:
"""(internal)"""
if HAVE_INTERNAL:
return _bainternal.get_v2_fleet()
raise _no_bainternal_error()
def get_master_server_address(source: int = -1, version: int = 1) -> str:
"""(internal)
Return the address of the master server.
"""
if HAVE_INTERNAL:
return _bainternal.get_master_server_address(
source=source, version=version
)
raise _no_bainternal_error()
def is_blessed() -> bool:
"""(internal)"""
if HAVE_INTERNAL:
return _bainternal.is_blessed()
# Harmless to always just say no here.
return False
def get_news_show() -> str:
"""(internal)"""
if HAVE_INTERNAL:
return _bainternal.get_news_show()
raise _no_bainternal_error()
def game_service_has_leaderboard(game: str, config: str) -> bool:
"""(internal)
Given a game and config string, returns whether there is a leaderboard
for it on the game service.
"""
if HAVE_INTERNAL:
return _bainternal.game_service_has_leaderboard(
game=game, config=config
)
# Harmless to always just say no here.
return False
def report_achievement(achievement: str, pass_to_account: bool = True) -> None:
"""(internal)"""
if HAVE_INTERNAL:
_bainternal.report_achievement(
achievement=achievement, pass_to_account=pass_to_account
)
return
# Need to see if this actually still works as expected.. warning for now.
_no_bainternal_warning()
# noinspection PyUnresolvedReferences
def submit_score(
game: str,
config: str,
name: Any,
score: int | None,
callback: Callable,
order: str = 'increasing',
tournament_id: str | None = None,
score_type: str = 'points',
campaign: str | None = None,
level: str | None = None,
) -> None:
"""(internal)
Submit a score to the server; callback will be called with the results.
As a courtesy, please don't send fake scores to the server. I'd prefer
to devote my time to improving the game instead of trying to make the
score server more mischief-proof.
"""
if HAVE_INTERNAL:
_bainternal.submit_score(
game=game,
config=config,
name=name,
score=score,
callback=callback,
order=order,
tournament_id=tournament_id,
score_type=score_type,
campaign=campaign,
level=level,
)
return
# This technically breaks since callback will never be called/etc.
raise _no_bainternal_error()
def tournament_query(
callback: Callable[[dict | None], None], args: dict
) -> None:
"""(internal)"""
if HAVE_INTERNAL:
_bainternal.tournament_query(callback=callback, args=args)
return
# This technically breaks since callback will never be called/etc.
raise _no_bainternal_error()
def power_ranking_query(callback: Callable, season: Any = None) -> None:
"""(internal)"""
if HAVE_INTERNAL:
_bainternal.power_ranking_query(callback=callback, season=season)
return
# This technically breaks since callback will never be called/etc.
raise _no_bainternal_error()
def restore_purchases() -> None:
"""(internal)"""
if HAVE_INTERNAL:
_bainternal.restore_purchases()
return
# This shouldn't break anything but should try to avoid calling it.
_no_bainternal_warning()
def purchase(item: str) -> None:
"""(internal)"""
if HAVE_INTERNAL:
_bainternal.purchase(item)
return
# This won't break messily but won't function as intended.
_no_bainternal_warning()
def get_purchases_state() -> int:
"""(internal)"""
if HAVE_INTERNAL:
return _bainternal.get_purchases_state()
# This won't function correctly without internal.
raise _no_bainternal_error()
def get_purchased(item: str) -> bool:
"""(internal)"""
if HAVE_INTERNAL:
return _bainternal.get_purchased(item)
# Without internal we can just assume no purchases.
return False
def get_price(item: str) -> str | None:
"""(internal)"""
if HAVE_INTERNAL:
return _bainternal.get_price(item)
# Without internal we can just assume no prices.
return None
def in_game_purchase(item: str, price: int) -> None:
"""(internal)"""
if HAVE_INTERNAL:
_bainternal.in_game_purchase(item=item, price=price)
return
# Without internal this doesn't function as expected.
raise _no_bainternal_error()
# noinspection PyUnresolvedReferences
def add_transaction(
transaction: dict, callback: Callable | None = None
) -> None:
"""(internal)"""
if HAVE_INTERNAL:
_bainternal.add_transaction(transaction=transaction, callback=callback)
return
# This won't function correctly without internal (callback never called).
raise _no_bainternal_error()
def reset_achievements() -> None:
"""(internal)"""
if HAVE_INTERNAL:
_bainternal.reset_achievements()
return
# Technically doesnt break but won't do anything.
_no_bainternal_warning()
def get_public_login_id() -> str | None:
"""(internal)"""
if HAVE_INTERNAL:
return _bainternal.get_public_login_id()
# Harmless to return nothing in this case.
return None
def have_outstanding_transactions() -> bool:
"""(internal)"""
if HAVE_INTERNAL:
return _bainternal.have_outstanding_transactions()
# Harmless to return False here.
return False
def run_transactions() -> None:
"""(internal)"""
if HAVE_INTERNAL:
_bainternal.run_transactions()
# Harmless no-op in this case.
def get_v1_account_misc_read_val(name: str, default_value: Any) -> Any:
"""(internal)"""
if HAVE_INTERNAL:
return _bainternal.get_v1_account_misc_read_val(
name=name, default_value=default_value
)
raise _no_bainternal_error()
def get_v1_account_misc_read_val_2(name: str, default_value: Any) -> Any:
"""(internal)"""
if HAVE_INTERNAL:
return _bainternal.get_v1_account_misc_read_val_2(
name=name, default_value=default_value
)
raise _no_bainternal_error()
def get_v1_account_misc_val(name: str, default_value: Any) -> Any:
"""(internal)"""
if HAVE_INTERNAL:
return _bainternal.get_v1_account_misc_val(
name=name, default_value=default_value
)
raise _no_bainternal_error()
def get_v1_account_ticket_count() -> int:
"""(internal)
Returns the number of tickets for the current account.
"""
if HAVE_INTERNAL:
return _bainternal.get_v1_account_ticket_count()
return 0
def get_v1_account_state_num() -> int:
"""(internal)"""
if HAVE_INTERNAL:
return _bainternal.get_v1_account_state_num()
return 0
def get_v1_account_state() -> str:
"""(internal)"""
if HAVE_INTERNAL:
return _bainternal.get_v1_account_state()
# Without internal present just consider ourself always signed out.
return 'signed_out'
def get_v1_account_display_string(full: bool = True) -> str:
"""(internal)"""
if HAVE_INTERNAL:
return _bainternal.get_v1_account_display_string(full=full)
raise _no_bainternal_error()
def get_v1_account_type() -> str:
"""(internal)"""
if HAVE_INTERNAL:
return _bainternal.get_v1_account_type()
raise _no_bainternal_error()
def get_v1_account_name() -> str:
"""(internal)"""
if HAVE_INTERNAL:
return _bainternal.get_v1_account_name()
raise _no_bainternal_error()
def sign_out_v1(v2_embedded: bool = False) -> None:
"""(internal)
Category: General Utility Functions
"""
if HAVE_INTERNAL:
_bainternal.sign_out_v1(v2_embedded=v2_embedded)
return
raise _no_bainternal_error()
def sign_in_v1(account_type: str) -> None:
"""(internal)
Category: General Utility Functions
"""
if HAVE_INTERNAL:
_bainternal.sign_in_v1(account_type=account_type)
return
raise _no_bainternal_error()
def mark_config_dirty() -> None:
"""(internal)
Category: General Utility Functions
"""
if HAVE_INTERNAL:
_bainternal.mark_config_dirty()
return
# Note to self - need to fix config writing to not rely on
# internal lib.
_no_bainternal_warning()

View File

@ -1,498 +0,0 @@
# Released under the MIT License. See LICENSE for details.
#
"""Store related functionality for classic mode."""
from __future__ import annotations
from typing import TYPE_CHECKING
import _ba
from ba import _internal
if TYPE_CHECKING:
from typing import Any
import ba
def get_store_item(item: str) -> dict[str, Any]:
"""(internal)"""
return get_store_items()[item]
def get_store_item_name_translated(item_name: str) -> ba.Lstr:
"""Return a ba.Lstr for a store item name."""
# pylint: disable=cyclic-import
from ba import _language
from ba import _map
item_info = get_store_item(item_name)
if item_name.startswith('characters.'):
return _language.Lstr(
translate=('characterNames', item_info['character'])
)
if item_name in ['merch']:
return _language.Lstr(resource='merchText')
if item_name in ['upgrades.pro', 'pro']:
return _language.Lstr(
resource='store.bombSquadProNameText',
subs=[('${APP_NAME}', _language.Lstr(resource='titleText'))],
)
if item_name.startswith('maps.'):
map_type: type[ba.Map] = item_info['map_type']
return _map.get_map_display_string(map_type.name)
if item_name.startswith('games.'):
gametype: type[ba.GameActivity] = item_info['gametype']
return gametype.get_display_string()
if item_name.startswith('icons.'):
return _language.Lstr(resource='editProfileWindow.iconText')
raise ValueError('unrecognized item: ' + item_name)
def get_store_item_display_size(item_name: str) -> tuple[float, float]:
"""(internal)"""
if item_name.startswith('characters.'):
return 340 * 0.6, 430 * 0.6
if item_name in ['pro', 'upgrades.pro', 'merch']:
from ba._generated.enums import UIScale
return 650 * 0.9, 500 * (
0.72
if (
_ba.app.config.get('Merch Link')
and _ba.app.ui.uiscale is UIScale.SMALL
)
else 0.85
)
if item_name.startswith('maps.'):
return 510 * 0.6, 450 * 0.6
if item_name.startswith('icons.'):
return 265 * 0.6, 250 * 0.6
return 450 * 0.6, 450 * 0.6
def get_store_items() -> dict[str, dict]:
"""Returns info about purchasable items.
(internal)
"""
# pylint: disable=cyclic-import
from ba._generated.enums import SpecialChar
from bastd import maps
if _ba.app.store_items is None:
from bastd.game import ninjafight
from bastd.game import meteorshower
from bastd.game import targetpractice
from bastd.game import easteregghunt
# IMPORTANT - need to keep this synced with the master server.
# (doing so manually for now)
_ba.app.store_items = {
'characters.kronk': {'character': 'Kronk'},
'characters.zoe': {'character': 'Zoe'},
'characters.jackmorgan': {'character': 'Jack Morgan'},
'characters.mel': {'character': 'Mel'},
'characters.snakeshadow': {'character': 'Snake Shadow'},
'characters.bones': {'character': 'Bones'},
'characters.bernard': {
'character': 'Bernard',
'highlight': (0.6, 0.5, 0.8),
},
'characters.pixie': {'character': 'Pixel'},
'characters.wizard': {'character': 'Grumbledorf'},
'characters.frosty': {'character': 'Frosty'},
'characters.pascal': {'character': 'Pascal'},
'characters.cyborg': {'character': 'B-9000'},
'characters.agent': {'character': 'Agent Johnson'},
'characters.taobaomascot': {'character': 'Taobao Mascot'},
'characters.santa': {'character': 'Santa Claus'},
'characters.bunny': {'character': 'Easter Bunny'},
'merch': {},
'pro': {},
'maps.lake_frigid': {'map_type': maps.LakeFrigid},
'games.ninja_fight': {
'gametype': ninjafight.NinjaFightGame,
'previewTex': 'courtyardPreview',
},
'games.meteor_shower': {
'gametype': meteorshower.MeteorShowerGame,
'previewTex': 'rampagePreview',
},
'games.target_practice': {
'gametype': targetpractice.TargetPracticeGame,
'previewTex': 'doomShroomPreview',
},
'games.easter_egg_hunt': {
'gametype': easteregghunt.EasterEggHuntGame,
'previewTex': 'towerDPreview',
},
'icons.flag_us': {
'icon': _ba.charstr(SpecialChar.FLAG_UNITED_STATES)
},
'icons.flag_mexico': {'icon': _ba.charstr(SpecialChar.FLAG_MEXICO)},
'icons.flag_germany': {
'icon': _ba.charstr(SpecialChar.FLAG_GERMANY)
},
'icons.flag_brazil': {'icon': _ba.charstr(SpecialChar.FLAG_BRAZIL)},
'icons.flag_russia': {'icon': _ba.charstr(SpecialChar.FLAG_RUSSIA)},
'icons.flag_china': {'icon': _ba.charstr(SpecialChar.FLAG_CHINA)},
'icons.flag_uk': {
'icon': _ba.charstr(SpecialChar.FLAG_UNITED_KINGDOM)
},
'icons.flag_canada': {'icon': _ba.charstr(SpecialChar.FLAG_CANADA)},
'icons.flag_india': {'icon': _ba.charstr(SpecialChar.FLAG_INDIA)},
'icons.flag_japan': {'icon': _ba.charstr(SpecialChar.FLAG_JAPAN)},
'icons.flag_france': {'icon': _ba.charstr(SpecialChar.FLAG_FRANCE)},
'icons.flag_indonesia': {
'icon': _ba.charstr(SpecialChar.FLAG_INDONESIA)
},
'icons.flag_italy': {'icon': _ba.charstr(SpecialChar.FLAG_ITALY)},
'icons.flag_south_korea': {
'icon': _ba.charstr(SpecialChar.FLAG_SOUTH_KOREA)
},
'icons.flag_netherlands': {
'icon': _ba.charstr(SpecialChar.FLAG_NETHERLANDS)
},
'icons.flag_uae': {
'icon': _ba.charstr(SpecialChar.FLAG_UNITED_ARAB_EMIRATES)
},
'icons.flag_qatar': {'icon': _ba.charstr(SpecialChar.FLAG_QATAR)},
'icons.flag_egypt': {'icon': _ba.charstr(SpecialChar.FLAG_EGYPT)},
'icons.flag_kuwait': {'icon': _ba.charstr(SpecialChar.FLAG_KUWAIT)},
'icons.flag_algeria': {
'icon': _ba.charstr(SpecialChar.FLAG_ALGERIA)
},
'icons.flag_saudi_arabia': {
'icon': _ba.charstr(SpecialChar.FLAG_SAUDI_ARABIA)
},
'icons.flag_malaysia': {
'icon': _ba.charstr(SpecialChar.FLAG_MALAYSIA)
},
'icons.flag_czech_republic': {
'icon': _ba.charstr(SpecialChar.FLAG_CZECH_REPUBLIC)
},
'icons.flag_australia': {
'icon': _ba.charstr(SpecialChar.FLAG_AUSTRALIA)
},
'icons.flag_singapore': {
'icon': _ba.charstr(SpecialChar.FLAG_SINGAPORE)
},
'icons.flag_iran': {'icon': _ba.charstr(SpecialChar.FLAG_IRAN)},
'icons.flag_poland': {'icon': _ba.charstr(SpecialChar.FLAG_POLAND)},
'icons.flag_argentina': {
'icon': _ba.charstr(SpecialChar.FLAG_ARGENTINA)
},
'icons.flag_philippines': {
'icon': _ba.charstr(SpecialChar.FLAG_PHILIPPINES)
},
'icons.flag_chile': {'icon': _ba.charstr(SpecialChar.FLAG_CHILE)},
'icons.fedora': {'icon': _ba.charstr(SpecialChar.FEDORA)},
'icons.hal': {'icon': _ba.charstr(SpecialChar.HAL)},
'icons.crown': {'icon': _ba.charstr(SpecialChar.CROWN)},
'icons.yinyang': {'icon': _ba.charstr(SpecialChar.YIN_YANG)},
'icons.eyeball': {'icon': _ba.charstr(SpecialChar.EYE_BALL)},
'icons.skull': {'icon': _ba.charstr(SpecialChar.SKULL)},
'icons.heart': {'icon': _ba.charstr(SpecialChar.HEART)},
'icons.dragon': {'icon': _ba.charstr(SpecialChar.DRAGON)},
'icons.helmet': {'icon': _ba.charstr(SpecialChar.HELMET)},
'icons.mushroom': {'icon': _ba.charstr(SpecialChar.MUSHROOM)},
'icons.ninja_star': {'icon': _ba.charstr(SpecialChar.NINJA_STAR)},
'icons.viking_helmet': {
'icon': _ba.charstr(SpecialChar.VIKING_HELMET)
},
'icons.moon': {'icon': _ba.charstr(SpecialChar.MOON)},
'icons.spider': {'icon': _ba.charstr(SpecialChar.SPIDER)},
'icons.fireball': {'icon': _ba.charstr(SpecialChar.FIREBALL)},
'icons.mikirog': {'icon': _ba.charstr(SpecialChar.MIKIROG)},
}
return _ba.app.store_items
def get_store_layout() -> dict[str, list[dict[str, Any]]]:
"""Return what's available in the store at a given time.
Categorized by tab and by section."""
if _ba.app.store_layout is None:
_ba.app.store_layout = {
'characters': [{'items': []}],
'extras': [{'items': ['pro']}],
'maps': [{'items': ['maps.lake_frigid']}],
'minigames': [],
'icons': [
{
'items': [
'icons.mushroom',
'icons.heart',
'icons.eyeball',
'icons.yinyang',
'icons.hal',
'icons.flag_us',
'icons.flag_mexico',
'icons.flag_germany',
'icons.flag_brazil',
'icons.flag_russia',
'icons.flag_china',
'icons.flag_uk',
'icons.flag_canada',
'icons.flag_india',
'icons.flag_japan',
'icons.flag_france',
'icons.flag_indonesia',
'icons.flag_italy',
'icons.flag_south_korea',
'icons.flag_netherlands',
'icons.flag_uae',
'icons.flag_qatar',
'icons.flag_egypt',
'icons.flag_kuwait',
'icons.flag_algeria',
'icons.flag_saudi_arabia',
'icons.flag_malaysia',
'icons.flag_czech_republic',
'icons.flag_australia',
'icons.flag_singapore',
'icons.flag_iran',
'icons.flag_poland',
'icons.flag_argentina',
'icons.flag_philippines',
'icons.flag_chile',
'icons.moon',
'icons.fedora',
'icons.spider',
'icons.ninja_star',
'icons.skull',
'icons.dragon',
'icons.viking_helmet',
'icons.fireball',
'icons.helmet',
'icons.crown',
]
}
],
}
store_layout = _ba.app.store_layout
store_layout['characters'] = [
{
'items': [
'characters.kronk',
'characters.zoe',
'characters.jackmorgan',
'characters.mel',
'characters.snakeshadow',
'characters.bones',
'characters.bernard',
'characters.agent',
'characters.frosty',
'characters.pascal',
'characters.pixie',
]
}
]
store_layout['minigames'] = [
{
'items': [
'games.ninja_fight',
'games.meteor_shower',
'games.target_practice',
]
}
]
if _internal.get_v1_account_misc_read_val('xmas', False):
store_layout['characters'][0]['items'].append('characters.santa')
store_layout['characters'][0]['items'].append('characters.wizard')
store_layout['characters'][0]['items'].append('characters.cyborg')
if _internal.get_v1_account_misc_read_val('easter', False):
store_layout['characters'].append(
{'title': 'store.holidaySpecialText', 'items': ['characters.bunny']}
)
store_layout['minigames'].append(
{
'title': 'store.holidaySpecialText',
'items': ['games.easter_egg_hunt'],
}
)
# This will cause merch to show only if the master-server has
# given us a link (which means merch is available in our region).
store_layout['extras'] = [{'items': ['pro']}]
if _ba.app.config.get('Merch Link'):
store_layout['extras'][0]['items'].append('merch')
return store_layout
def get_clean_price(price_string: str) -> str:
"""(internal)"""
# I'm not brave enough to try and do any numerical
# manipulation on formatted price strings, but lets do a
# few swap-outs to tidy things up a bit.
psubs = {
'$2.99': '$3.00',
'$4.99': '$5.00',
'$9.99': '$10.00',
'$19.99': '$20.00',
'$49.99': '$50.00',
}
return psubs.get(price_string, price_string)
def get_available_purchase_count(tab: str | None = None) -> int:
"""(internal)"""
try:
if _internal.get_v1_account_state() != 'signed_in':
return 0
count = 0
our_tickets = _internal.get_v1_account_ticket_count()
store_data = get_store_layout()
if tab is not None:
tabs = [(tab, store_data[tab])]
else:
tabs = list(store_data.items())
for tab_name, tabval in tabs:
if tab_name == 'icons':
continue # too many of these; don't show..
count = _calc_count_for_tab(tabval, our_tickets, count)
return count
except Exception:
from ba import _error
_error.print_exception('error calcing available purchases')
return 0
def _calc_count_for_tab(
tabval: list[dict[str, Any]], our_tickets: int, count: int
) -> int:
for section in tabval:
for item in section['items']:
ticket_cost = _internal.get_v1_account_misc_read_val(
'price.' + item, None
)
if ticket_cost is not None:
if our_tickets >= ticket_cost and not _internal.get_purchased(
item
):
count += 1
return count
def get_available_sale_time(tab: str) -> int | None:
"""(internal)"""
# pylint: disable=too-many-branches
# pylint: disable=too-many-nested-blocks
# pylint: disable=too-many-locals
try:
import datetime
from ba._generated.enums import TimeType, TimeFormat
app = _ba.app
sale_times: list[int | None] = []
# Calc time for our pro sale (old special case).
if tab == 'extras':
config = app.config
if app.accounts_v1.have_pro():
return None
# If we haven't calced/loaded start times yet.
if app.pro_sale_start_time is None:
# If we've got a time-remaining in our config, start there.
if 'PSTR' in config:
app.pro_sale_start_time = int(
_ba.time(TimeType.REAL, TimeFormat.MILLISECONDS)
)
app.pro_sale_start_val = config['PSTR']
else:
# We start the timer once we get the duration from
# the server.
start_duration = _internal.get_v1_account_misc_read_val(
'proSaleDurationMinutes', None
)
if start_duration is not None:
app.pro_sale_start_time = int(
_ba.time(TimeType.REAL, TimeFormat.MILLISECONDS)
)
app.pro_sale_start_val = 60000 * start_duration
# If we haven't heard from the server yet, no sale..
else:
return None
assert app.pro_sale_start_val is not None
val: int | None = max(
0,
app.pro_sale_start_val
- (
_ba.time(TimeType.REAL, TimeFormat.MILLISECONDS)
- app.pro_sale_start_time
),
)
# Keep the value in the config up to date. I suppose we should
# write the config occasionally but it should happen often enough
# for other reasons.
config['PSTR'] = val
if val == 0:
val = None
sale_times.append(val)
# Now look for sales in this tab.
sales_raw = _internal.get_v1_account_misc_read_val('sales', {})
store_layout = get_store_layout()
for section in store_layout[tab]:
for item in section['items']:
if item in sales_raw:
if not _internal.get_purchased(item):
to_end = (
datetime.datetime.utcfromtimestamp(
sales_raw[item]['e']
)
- datetime.datetime.utcnow()
).total_seconds()
if to_end > 0:
sale_times.append(int(to_end * 1000))
# Return the smallest time I guess?
sale_times_int = [t for t in sale_times if isinstance(t, int)]
return min(sale_times_int) if sale_times_int else None
except Exception:
from ba import _error
_error.print_exception('error calcing sale time')
return None
def get_unowned_maps() -> list[str]:
"""Return the list of local maps not owned by the current account.
Category: **Asset Functions**
"""
unowned_maps: set[str] = set()
if not _ba.app.headless_mode:
for map_section in get_store_layout()['maps']:
for mapitem in map_section['items']:
if not _internal.get_purchased(mapitem):
m_info = get_store_item(mapitem)
unowned_maps.add(m_info['map_type'].name)
return sorted(unowned_maps)
def get_unowned_game_types() -> set[type[ba.GameActivity]]:
"""Return present game types not owned by the current account."""
try:
unowned_games: set[type[ba.GameActivity]] = set()
if not _ba.app.headless_mode:
for section in get_store_layout()['minigames']:
for mname in section['items']:
if not _internal.get_purchased(mname):
m_info = get_store_item(mname)
unowned_games.add(m_info['gametype'])
return unowned_games
except Exception:
from ba import _error
_error.print_exception('error calcing un-owned games')
return set()

View File

@ -1,339 +0,0 @@
# Released under the MIT License. See LICENSE for details.
#
"""Exposed functionality not intended for full public use.
Classes and functions contained here, while technically 'public', may change
or disappear without warning, so should be avoided (or used sparingly and
defensively) in mods.
"""
from __future__ import annotations
from _ba import (
show_online_score_ui,
set_ui_input_device,
is_party_icon_visible,
getinputdevice,
add_clean_frame_callback,
unlock_all_input,
increment_analytics_count,
set_debug_speed_exponent,
get_special_widget,
get_qrcode_texture,
get_string_height,
get_string_width,
show_app_invite,
appnameupper,
lock_all_input,
open_file_externally,
fade_screen,
appname,
have_incentivized_ad,
has_video_ads,
workspaces_in_use,
set_party_icon_always_visible,
connect_to_party,
get_game_port,
end_host_scanning,
host_scan_cycle,
charstr,
get_public_party_enabled,
get_public_party_max_size,
set_public_party_name,
set_public_party_max_size,
set_public_party_queue_enabled,
set_authenticate_clients,
set_public_party_enabled,
reset_random_player_names,
new_host_session,
get_foreground_host_session,
get_local_active_input_devices_count,
get_ui_input_device,
is_in_replay,
set_replay_speed_exponent,
get_replay_speed_exponent,
disconnect_from_host,
set_party_window_open,
get_connection_to_host_info,
get_chat_messages,
get_game_roster,
disconnect_client,
chatmessage,
get_random_names,
have_permission,
request_permission,
have_touchscreen_input,
is_xcode_build,
set_low_level_config_value,
get_low_level_config_value,
capture_gamepad_input,
release_gamepad_input,
has_gamma_control,
get_max_graphics_quality,
get_display_resolution,
capture_keyboard_input,
release_keyboard_input,
value_test,
set_touchscreen_editing,
is_running_on_fire_tv,
android_get_external_files_dir,
set_telnet_access_enabled,
new_replay_session,
get_replays_dir,
)
from ba._login import LoginAdapter
from ba._map import (
get_map_class,
register_map,
preload_map_preview_media,
get_map_display_string,
get_filtered_map_name,
)
from ba._appconfig import commit_app_config
from ba._input import (
get_device_value,
get_input_map_hash,
get_input_device_config,
)
from ba._general import getclass, json_prep, get_type_name
from ba._activitytypes import JoinActivity, ScoreScreenActivity
from ba._apputils import (
is_browser_likely_available,
get_remote_app_name,
should_submit_debug_info,
dump_app_state,
log_dumped_app_state,
)
from ba._benchmark import (
run_gpu_benchmark,
run_cpu_benchmark,
run_media_reload_benchmark,
run_stress_test,
)
from ba._campaign import getcampaign
from ba._messages import PlayerProfilesChangedMessage
from ba._multiteamsession import DEFAULT_TEAM_COLORS, DEFAULT_TEAM_NAMES
from ba._music import do_play_music
from ba._net import (
master_server_get,
master_server_post,
get_ip_address_type,
DEFAULT_REQUEST_TIMEOUT_SECONDS,
)
from ba._powerup import get_default_powerup_distribution
from ba._profile import (
get_player_profile_colors,
get_player_profile_icon,
get_player_colors,
)
from ba._tips import get_next_tip
from ba._playlist import (
get_default_free_for_all_playlist,
get_default_teams_playlist,
filter_playlist,
)
from ba._store import (
get_available_sale_time,
get_available_purchase_count,
get_store_item_name_translated,
get_store_item_display_size,
get_store_layout,
get_store_item,
get_clean_price,
get_unowned_maps,
get_unowned_game_types,
)
from ba._tournament import get_tournament_prize_strings
from ba._gameutils import get_trophy_string
from ba._internal import (
get_v2_fleet,
get_master_server_address,
is_blessed,
get_news_show,
game_service_has_leaderboard,
report_achievement,
submit_score,
tournament_query,
power_ranking_query,
restore_purchases,
purchase,
get_purchases_state,
get_purchased,
get_price,
in_game_purchase,
add_transaction,
reset_achievements,
get_public_login_id,
have_outstanding_transactions,
run_transactions,
get_v1_account_misc_read_val,
get_v1_account_misc_read_val_2,
get_v1_account_misc_val,
get_v1_account_ticket_count,
get_v1_account_state_num,
get_v1_account_state,
get_v1_account_display_string,
get_v1_account_type,
get_v1_account_name,
sign_out_v1,
sign_in_v1,
mark_config_dirty,
)
__all__ = [
'LoginAdapter',
'show_online_score_ui',
'set_ui_input_device',
'is_party_icon_visible',
'getinputdevice',
'add_clean_frame_callback',
'unlock_all_input',
'increment_analytics_count',
'set_debug_speed_exponent',
'get_special_widget',
'get_qrcode_texture',
'get_string_height',
'get_string_width',
'show_app_invite',
'appnameupper',
'lock_all_input',
'open_file_externally',
'fade_screen',
'appname',
'have_incentivized_ad',
'has_video_ads',
'workspaces_in_use',
'set_party_icon_always_visible',
'connect_to_party',
'get_game_port',
'end_host_scanning',
'host_scan_cycle',
'charstr',
'get_public_party_enabled',
'get_public_party_max_size',
'set_public_party_name',
'set_public_party_max_size',
'set_public_party_queue_enabled',
'set_authenticate_clients',
'set_public_party_enabled',
'reset_random_player_names',
'new_host_session',
'get_foreground_host_session',
'get_local_active_input_devices_count',
'get_ui_input_device',
'is_in_replay',
'set_replay_speed_exponent',
'get_replay_speed_exponent',
'disconnect_from_host',
'set_party_window_open',
'get_connection_to_host_info',
'get_chat_messages',
'get_game_roster',
'disconnect_client',
'chatmessage',
'get_random_names',
'have_permission',
'request_permission',
'have_touchscreen_input',
'is_xcode_build',
'set_low_level_config_value',
'get_low_level_config_value',
'capture_gamepad_input',
'release_gamepad_input',
'has_gamma_control',
'get_max_graphics_quality',
'get_display_resolution',
'capture_keyboard_input',
'release_keyboard_input',
'value_test',
'set_touchscreen_editing',
'is_running_on_fire_tv',
'android_get_external_files_dir',
'set_telnet_access_enabled',
'new_replay_session',
'get_replays_dir',
'get_unowned_maps',
'get_unowned_game_types',
'get_map_class',
'register_map',
'preload_map_preview_media',
'get_map_display_string',
'get_filtered_map_name',
'commit_app_config',
'get_device_value',
'get_input_map_hash',
'get_input_device_config',
'getclass',
'json_prep',
'get_type_name',
'JoinActivity',
'ScoreScreenActivity',
'is_browser_likely_available',
'get_remote_app_name',
'should_submit_debug_info',
'run_gpu_benchmark',
'run_cpu_benchmark',
'run_media_reload_benchmark',
'run_stress_test',
'getcampaign',
'PlayerProfilesChangedMessage',
'DEFAULT_TEAM_COLORS',
'DEFAULT_TEAM_NAMES',
'do_play_music',
'master_server_get',
'master_server_post',
'get_ip_address_type',
'DEFAULT_REQUEST_TIMEOUT_SECONDS',
'get_default_powerup_distribution',
'get_player_profile_colors',
'get_player_profile_icon',
'get_player_colors',
'get_next_tip',
'get_default_free_for_all_playlist',
'get_default_teams_playlist',
'filter_playlist',
'get_available_sale_time',
'get_available_purchase_count',
'get_store_item_name_translated',
'get_store_item_display_size',
'get_store_layout',
'get_store_item',
'get_clean_price',
'get_tournament_prize_strings',
'get_trophy_string',
'get_v2_fleet',
'get_master_server_address',
'is_blessed',
'get_news_show',
'game_service_has_leaderboard',
'report_achievement',
'submit_score',
'tournament_query',
'power_ranking_query',
'restore_purchases',
'purchase',
'get_purchases_state',
'get_purchased',
'get_price',
'in_game_purchase',
'add_transaction',
'reset_achievements',
'get_public_login_id',
'have_outstanding_transactions',
'run_transactions',
'get_v1_account_misc_read_val',
'get_v1_account_misc_read_val_2',
'get_v1_account_misc_val',
'get_v1_account_ticket_count',
'get_v1_account_state_num',
'get_v1_account_state',
'get_v1_account_display_string',
'get_v1_account_type',
'get_v1_account_name',
'sign_out_v1',
'sign_in_v1',
'mark_config_dirty',
'dump_app_state',
'log_dumped_app_state',
]

View File

@ -1,37 +0,0 @@
# Released under the MIT License. See LICENSE for details.
#
"""Provide our delegate for high level app functionality."""
from __future__ import annotations
from typing import TYPE_CHECKING
import ba
if TYPE_CHECKING:
from typing import Any, Callable
class AppDelegate(ba.AppDelegate):
"""Defines handlers for high level app functionality."""
def create_default_game_settings_ui(
self,
gameclass: type[ba.GameActivity],
sessiontype: type[ba.Session],
settings: dict | None,
completion_call: Callable[[dict | None], Any],
) -> None:
"""(internal)"""
# Replace the main window once we come up successfully.
from bastd.ui.playlist.editgame import PlaylistEditGameWindow
ba.app.ui.clear_main_menu_window(transition='out_left')
ba.app.ui.set_main_menu_window(
PlaylistEditGameWindow(
gameclass,
sessiontype,
settings,
completion_call=completion_call,
).get_root_widget()
)

View File

@ -1,39 +0,0 @@
# Released under the MIT License. See LICENSE for details.
#
"""Defines standard map type."""
from __future__ import annotations
from typing import TYPE_CHECKING
import ba
if TYPE_CHECKING:
from typing import Any
def _get_map_data(name: str) -> dict[str, Any]:
import json
print('Would get map data', name)
with open(
'ba_data/data/maps/' + name + '.json', encoding='utf-8'
) as infile:
mapdata = json.loads(infile.read())
assert isinstance(mapdata, dict)
return mapdata
class StdMap(ba.Map):
"""A map completely defined by asset data."""
_data: dict[str, Any] | None = None
@classmethod
def _getdata(cls) -> dict[str, Any]:
if cls._data is None:
cls._data = _get_map_data('bridgit')
return cls._data
def __init__(self) -> None:
super().__init__()

View File

@ -1,449 +0,0 @@
# Released under the MIT License. See LICENSE for details.
#
"""UI functionality related to inviting people to try the game."""
from __future__ import annotations
import copy
import time
from typing import TYPE_CHECKING
import ba
import ba.internal
if TYPE_CHECKING:
from typing import Any
class AppInviteWindow(ba.Window):
"""Window for showing different ways to invite people to try the game."""
def __init__(self) -> None:
ba.set_analytics_screen('AppInviteWindow')
self._data: dict[str, Any] | None = None
self._width = 650
self._height = 400
uiscale = ba.app.ui.uiscale
super().__init__(
root_widget=ba.containerwidget(
size=(self._width, self._height),
transition='in_scale',
scale=(
1.8
if uiscale is ba.UIScale.SMALL
else 1.35
if uiscale is ba.UIScale.MEDIUM
else 1.0
),
)
)
self._cancel_button = ba.buttonwidget(
parent=self._root_widget,
scale=0.8,
position=(60, self._height - 50),
size=(50, 50),
label='',
on_activate_call=self.close,
autoselect=True,
color=(0.4, 0.4, 0.6),
icon=ba.gettexture('crossOut'),
iconscale=1.2,
)
ba.containerwidget(
edit=self._root_widget, cancel_button=self._cancel_button
)
ba.textwidget(
parent=self._root_widget,
size=(0, 0),
position=(self._width * 0.5, self._height * 0.5 + 110),
autoselect=True,
scale=0.8,
maxwidth=self._width * 0.9,
h_align='center',
v_align='center',
color=(0.3, 0.8, 0.3),
flatness=1.0,
text=ba.Lstr(
resource='gatherWindow.earnTicketsForRecommendingAmountText',
fallback_resource=(
'gatherWindow.earnTicketsForRecommendingText'
),
subs=[
(
'${COUNT}',
str(
ba.internal.get_v1_account_misc_read_val(
'friendTryTickets', 300
)
),
),
(
'${YOU_COUNT}',
str(
ba.internal.get_v1_account_misc_read_val(
'friendTryAwardTickets', 100
)
),
),
],
),
)
or_text = (
ba.Lstr(resource='orText', subs=[('${A}', ''), ('${B}', '')])
.evaluate()
.strip()
)
ba.buttonwidget(
parent=self._root_widget,
size=(250, 150),
position=(self._width * 0.5 - 125, self._height * 0.5 - 80),
autoselect=True,
button_type='square',
label=ba.Lstr(resource='gatherWindow.inviteFriendsText'),
on_activate_call=ba.WeakCall(self._google_invites),
)
ba.textwidget(
parent=self._root_widget,
size=(0, 0),
position=(self._width * 0.5, self._height * 0.5 - 94),
autoselect=True,
scale=0.9,
h_align='center',
v_align='center',
color=(0.5, 0.5, 0.5),
flatness=1.0,
text=or_text,
)
ba.buttonwidget(
parent=self._root_widget,
size=(180, 50),
position=(self._width * 0.5 - 90, self._height * 0.5 - 170),
autoselect=True,
color=(0.5, 0.5, 0.6),
textcolor=(0.7, 0.7, 0.8),
text_scale=0.8,
label=ba.Lstr(resource='gatherWindow.appInviteSendACodeText'),
on_activate_call=ba.WeakCall(self._send_code),
)
# kick off a transaction to get our code
ba.internal.add_transaction(
{
'type': 'FRIEND_PROMO_CODE_REQUEST',
'ali': False,
'expire_time': time.time() + 20,
},
callback=ba.WeakCall(self._on_code_result),
)
ba.internal.run_transactions()
def _on_code_result(self, result: dict[str, Any] | None) -> None:
if result is not None:
self._data = result
def _send_code(self) -> None:
handle_app_invites_press(force_code=True)
def _google_invites(self) -> None:
if self._data is None:
ba.screenmessage(
ba.Lstr(resource='getTicketsWindow.unavailableTemporarilyText'),
color=(1, 0, 0),
)
ba.playsound(ba.getsound('error'))
return
if ba.internal.get_v1_account_state() == 'signed_in':
ba.set_analytics_screen('App Invite UI')
ba.internal.show_app_invite(
ba.Lstr(
resource='gatherWindow.appInviteTitleText',
subs=[('${APP_NAME}', ba.Lstr(resource='titleText'))],
).evaluate(),
ba.Lstr(
resource='gatherWindow.appInviteMessageText',
subs=[
('${COUNT}', str(self._data['tickets'])),
(
'${NAME}',
ba.internal.get_v1_account_name().split()[0],
),
('${APP_NAME}', ba.Lstr(resource='titleText')),
],
).evaluate(),
self._data['code'],
)
else:
ba.playsound(ba.getsound('error'))
def close(self) -> None:
"""Close the window."""
ba.containerwidget(edit=self._root_widget, transition='out_scale')
class ShowFriendCodeWindow(ba.Window):
"""Window showing a code for sharing with friends."""
def __init__(self, data: dict[str, Any]):
from ba.internal import is_browser_likely_available
ba.set_analytics_screen('Friend Promo Code')
self._width = 650
self._height = 400
uiscale = ba.app.ui.uiscale
super().__init__(
root_widget=ba.containerwidget(
size=(self._width, self._height),
color=(0.45, 0.63, 0.15),
transition='in_scale',
scale=(
1.7
if uiscale is ba.UIScale.SMALL
else 1.35
if uiscale is ba.UIScale.MEDIUM
else 1.0
),
)
)
self._data = copy.deepcopy(data)
ba.playsound(ba.getsound('cashRegister'))
ba.playsound(ba.getsound('swish'))
self._cancel_button = ba.buttonwidget(
parent=self._root_widget,
scale=0.7,
position=(50, self._height - 50),
size=(60, 60),
label='',
on_activate_call=self.close,
autoselect=True,
color=(0.45, 0.63, 0.15),
icon=ba.gettexture('crossOut'),
iconscale=1.2,
)
ba.containerwidget(
edit=self._root_widget, cancel_button=self._cancel_button
)
ba.textwidget(
parent=self._root_widget,
position=(self._width * 0.5, self._height * 0.8),
size=(0, 0),
color=ba.app.ui.infotextcolor,
scale=1.0,
flatness=1.0,
h_align='center',
v_align='center',
text=ba.Lstr(resource='gatherWindow.shareThisCodeWithFriendsText'),
maxwidth=self._width * 0.85,
)
ba.textwidget(
parent=self._root_widget,
position=(self._width * 0.5, self._height * 0.645),
size=(0, 0),
color=(1.0, 3.0, 1.0),
scale=2.0,
h_align='center',
v_align='center',
text=data['code'],
maxwidth=self._width * 0.85,
)
award_str: str | ba.Lstr | None
if self._data['awardTickets'] != 0:
award_str = ba.Lstr(
resource='gatherWindow.friendPromoCodeAwardText',
subs=[('${COUNT}', str(self._data['awardTickets']))],
)
else:
award_str = ''
ba.textwidget(
parent=self._root_widget,
position=(self._width * 0.5, self._height * 0.37),
size=(0, 0),
color=ba.app.ui.infotextcolor,
scale=1.0,
flatness=1.0,
h_align='center',
v_align='center',
text=ba.Lstr(
value='${A}\n${B}\n${C}\n${D}',
subs=[
(
'${A}',
ba.Lstr(
resource=(
'gatherWindow.friendPromoCodeRedeemLongText'
),
subs=[
('${COUNT}', str(self._data['tickets'])),
(
'${MAX_USES}',
str(self._data['usesRemaining']),
),
],
),
),
(
'${B}',
ba.Lstr(
resource=(
'gatherWindow.friendPromoCodeWhereToEnterText'
)
),
),
('${C}', award_str),
(
'${D}',
ba.Lstr(
resource='gatherWindow.friendPromoCodeExpireText',
subs=[
(
'${EXPIRE_HOURS}',
str(self._data['expireHours']),
)
],
),
),
],
),
maxwidth=self._width * 0.9,
max_height=self._height * 0.35,
)
if is_browser_likely_available():
xoffs = 0
ba.buttonwidget(
parent=self._root_widget,
size=(200, 40),
position=(self._width * 0.5 - 100 + xoffs, 39),
autoselect=True,
label=ba.Lstr(resource='gatherWindow.emailItText'),
on_activate_call=ba.WeakCall(self._email),
)
def _google_invites(self) -> None:
ba.set_analytics_screen('App Invite UI')
ba.internal.show_app_invite(
ba.Lstr(
resource='gatherWindow.appInviteTitleText',
subs=[('${APP_NAME}', ba.Lstr(resource='titleText'))],
).evaluate(),
ba.Lstr(
resource='gatherWindow.appInviteMessageText',
subs=[
('${COUNT}', str(self._data['tickets'])),
('${NAME}', ba.internal.get_v1_account_name().split()[0]),
('${APP_NAME}', ba.Lstr(resource='titleText')),
],
).evaluate(),
self._data['code'],
)
def _email(self) -> None:
import urllib.parse
# If somehow we got signed out.
if ba.internal.get_v1_account_state() != 'signed_in':
ba.screenmessage(
ba.Lstr(resource='notSignedInText'), color=(1, 0, 0)
)
ba.playsound(ba.getsound('error'))
return
ba.set_analytics_screen('Email Friend Code')
subject = (
ba.Lstr(resource='gatherWindow.friendHasSentPromoCodeText')
.evaluate()
.replace('${NAME}', ba.internal.get_v1_account_name())
.replace('${APP_NAME}', ba.Lstr(resource='titleText').evaluate())
.replace('${COUNT}', str(self._data['tickets']))
)
body = (
ba.Lstr(resource='gatherWindow.youHaveBeenSentAPromoCodeText')
.evaluate()
.replace('${APP_NAME}', ba.Lstr(resource='titleText').evaluate())
+ '\n\n'
+ str(self._data['code'])
+ '\n\n'
)
body += (
(
ba.Lstr(resource='gatherWindow.friendPromoCodeRedeemShortText')
.evaluate()
.replace('${COUNT}', str(self._data['tickets']))
)
+ '\n\n'
+ ba.Lstr(resource='gatherWindow.friendPromoCodeInstructionsText')
.evaluate()
.replace('${APP_NAME}', ba.Lstr(resource='titleText').evaluate())
+ '\n'
+ ba.Lstr(resource='gatherWindow.friendPromoCodeExpireText')
.evaluate()
.replace('${EXPIRE_HOURS}', str(self._data['expireHours']))
+ '\n'
+ ba.Lstr(resource='enjoyText').evaluate()
)
ba.open_url(
'mailto:?subject='
+ urllib.parse.quote(subject)
+ '&body='
+ urllib.parse.quote(body)
)
def close(self) -> None:
"""Close the window."""
ba.containerwidget(edit=self._root_widget, transition='out_scale')
def handle_app_invites_press(force_code: bool = False) -> None:
"""(internal)"""
app = ba.app
do_app_invites = (
app.platform == 'android'
and app.subplatform == 'google'
and ba.internal.get_v1_account_misc_read_val('enableAppInvites', False)
and not app.on_tv
)
# Update: google's app invites are deprecated.
do_app_invites = False
if force_code:
do_app_invites = False
# FIXME: Should update this to grab a code before showing the invite UI.
if do_app_invites:
AppInviteWindow()
else:
ba.screenmessage(
ba.Lstr(resource='gatherWindow.requestingAPromoCodeText'),
color=(0, 1, 0),
)
def handle_result(result: dict[str, Any] | None) -> None:
with ba.Context('ui'):
if result is None:
ba.screenmessage(
ba.Lstr(resource='errorText'), color=(1, 0, 0)
)
ba.playsound(ba.getsound('error'))
else:
ShowFriendCodeWindow(result)
ba.internal.add_transaction(
{
'type': 'FRIEND_PROMO_CODE_REQUEST',
'ali': False,
'expire_time': time.time() + 10,
},
callback=handle_result,
)
ba.internal.run_transactions()

View File

@ -1,138 +0,0 @@
# Released under the MIT License. See LICENSE for details.
#
"""UI functionality related to using xbox360 controllers."""
from __future__ import annotations
from typing import TYPE_CHECKING
import ba
import ba.internal
if TYPE_CHECKING:
pass
class XBox360ControllerSettingsWindow(ba.Window):
"""UI showing info about xbox 360 controllers."""
def __init__(self) -> None:
self._r = 'xbox360ControllersWindow'
width = 700
height = 300 if ba.internal.is_running_on_fire_tv() else 485
spacing = 40
uiscale = ba.app.ui.uiscale
super().__init__(
root_widget=ba.containerwidget(
size=(width, height),
transition='in_right',
scale=(
1.4
if uiscale is ba.UIScale.SMALL
else 1.4
if uiscale is ba.UIScale.MEDIUM
else 1.0
),
)
)
btn = ba.buttonwidget(
parent=self._root_widget,
position=(35, height - 65),
size=(120, 60),
scale=0.84,
label=ba.Lstr(resource='backText'),
button_type='back',
autoselect=True,
on_activate_call=self._back,
)
ba.containerwidget(edit=self._root_widget, cancel_button=btn)
ba.textwidget(
parent=self._root_widget,
position=(width * 0.5, height - 42),
size=(0, 0),
scale=0.85,
text=ba.Lstr(
resource=self._r + '.titleText',
subs=[('${APP_NAME}', ba.Lstr(resource='titleText'))],
),
color=ba.app.ui.title_color,
maxwidth=400,
h_align='center',
v_align='center',
)
ba.buttonwidget(
edit=btn,
button_type='backSmall',
size=(60, 60),
label=ba.charstr(ba.SpecialChar.BACK),
)
v = height - 70
v -= spacing
if ba.internal.is_running_on_fire_tv():
ba.textwidget(
parent=self._root_widget,
position=(width * 0.5, height * 0.47),
size=(0, 0),
color=(0.7, 0.9, 0.7, 1.0),
maxwidth=width * 0.95,
max_height=height * 0.75,
scale=0.7,
text=ba.Lstr(resource=self._r + '.ouyaInstructionsText'),
h_align='center',
v_align='center',
)
else:
ba.textwidget(
parent=self._root_widget,
position=(width * 0.5, v - 1),
size=(0, 0),
color=(0.7, 0.9, 0.7, 1.0),
maxwidth=width * 0.95,
max_height=height * 0.22,
text=ba.Lstr(resource=self._r + '.macInstructionsText'),
scale=0.7,
h_align='center',
v_align='center',
)
v -= 90
b_width = 300
btn = ba.buttonwidget(
parent=self._root_widget,
position=((width - b_width) * 0.5, v - 10),
size=(b_width, 50),
label=ba.Lstr(resource=self._r + '.getDriverText'),
autoselect=True,
on_activate_call=ba.Call(
ba.open_url,
'https://github.com/360Controller/360Controller/releases',
),
)
ba.containerwidget(edit=self._root_widget, start_button=btn)
v -= 60
ba.textwidget(
parent=self._root_widget,
position=(width * 0.5, v - 85),
size=(0, 0),
color=(0.7, 0.9, 0.7, 1.0),
maxwidth=width * 0.95,
max_height=height * 0.46,
scale=0.7,
text=ba.Lstr(resource=self._r + '.macInstructions2Text'),
h_align='center',
v_align='center',
)
def _back(self) -> None:
from bastd.ui.settings import controls
ba.containerwidget(edit=self._root_widget, transition='out_right')
ba.app.ui.set_main_menu_window(
controls.ControlsSettingsWindow(
transition='in_left'
).get_root_widget()
)

View File

@ -1,67 +0,0 @@
# Released under the MIT License. See LICENSE for details.
#
"""UI functionality for telnet access."""
from __future__ import annotations
import ba
import ba.internal
class TelnetAccessRequestWindow(ba.Window):
"""Window asking the user whether to allow a telnet connection."""
def __init__(self) -> None:
width = 400
height = 100
text = ba.Lstr(resource='telnetAccessText')
uiscale = ba.app.ui.uiscale
super().__init__(
root_widget=ba.containerwidget(
size=(width, height + 40),
transition='in_right',
scale=(
1.7
if uiscale is ba.UIScale.SMALL
else 1.3
if uiscale is ba.UIScale.MEDIUM
else 1.0
),
)
)
padding = 20
ba.textwidget(
parent=self._root_widget,
position=(padding, padding + 33),
size=(width - 2 * padding, height - 2 * padding),
h_align='center',
v_align='top',
text=text,
)
btn = ba.buttonwidget(
parent=self._root_widget,
position=(20, 20),
size=(140, 50),
label=ba.Lstr(resource='denyText'),
on_activate_call=self._cancel,
)
ba.containerwidget(edit=self._root_widget, cancel_button=btn)
ba.containerwidget(edit=self._root_widget, selected_child=btn)
ba.buttonwidget(
parent=self._root_widget,
position=(width - 155, 20),
size=(140, 50),
label=ba.Lstr(resource='allowText'),
on_activate_call=self._ok,
)
def _cancel(self) -> None:
ba.containerwidget(edit=self._root_widget, transition='out_right')
ba.internal.set_telnet_access_enabled(False)
def _ok(self) -> None:
ba.containerwidget(edit=self._root_widget, transition='out_left')
ba.internal.set_telnet_access_enabled(True)
ba.screenmessage(ba.Lstr(resource='telnetAccessGrantedText'))

View File

@ -1,3 +0,0 @@
:: Simply run the ballisticacore_server.py script with the bundled
:: Python interpreter.
dist\\python.exe ballisticacore_server.py

View File

@ -1 +0,0 @@
BallisticaCore

View File

@ -1,2 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module classpath="CMake" type="CPP_MODULE" version="4" />

View File

@ -1,3 +0,0 @@
<component name="DependencyValidationManager">
<scope name="External" pattern="file[BallisticaCore]:src/external//*" />
</component>

View File

@ -1,3 +0,0 @@
<component name="DependencyValidationManager">
<scope name="Ignored" pattern="file[BallisticaCore]:src/ballistica/config/*&amp;&amp;!file:src/ballistica/config/config_cmake.h&amp;&amp;!file:src/ballistica/config/config_common.h" />
</component>

View File

@ -1,688 +0,0 @@
cmake_minimum_required(VERSION 3.12)
project(BallisticaCore)
include(CheckIncludeFile)
option(HEADLESS "build headless server" OFF)
option(TEST_BUILD "include testing features" OFF)
# Requiring minimum of C++17 currently.
set(CMAKE_CXX_STANDARD 17)
if (APPLE)
# Seems as of Mojave we need to explicitly pull in homebrew paths.
# Just hard-coding recommended homebrew install paths for now.
# Is there a more elegant way to do this?
if (CMAKE_SYSTEM_PROCESSOR MATCHES arm64)
list(APPEND CMAKE_PREFIX_PATH /opt/homebrew)
include_directories("/opt/homebrew/include")
link_directories("/opt/homebrew/lib")
else()
list(APPEND CMAKE_PREFIX_PATH /usr/local)
include_directories("/usr/local/include")
link_directories("/usr/local/lib")
endif()
# On Mac with homebrew it seems that Requesting 3.X when we've got
# 3.(X+1) installed will point us at the 3.(X+1) framework but will attempt
# to load a 3.X library from within it which doesn't exist. So we need
# to be a bit more explicit telling it where to look. Note: this was last
# tested with 3.7; should revisit sometime to make sure still applies.
execute_process(COMMAND "python3.10-config" "--prefix"
OUTPUT_VARIABLE Python_ROOT_DIR
OUTPUT_STRIP_TRAILING_WHITESPACE)
endif ()
find_package (Python 3.10 REQUIRED EXACT COMPONENTS Development)
if (HEADLESS)
add_definitions(-DBA_HEADLESS_BUILD=1)
else ()
find_package(SDL2 QUIET)
if (SDL2_FOUND)
if ("${SDL2_LIBRARIES}" STREQUAL "")
message(WARNING "SDL2_LIBRARIES wasn't set, manually setting to SDL2::SDL2")
set(SDL2_LIBRARIES "SDL2::SDL2")
endif ()
# Getting complaint about space at the end of this on ubuntu16.
string(STRIP "${SDL2_LIBRARIES}" SDL2_LIBRARIES)
else ()
message(FATAL_ERROR "SDL2 not found")
endif ()
find_package(OpenGL REQUIRED)
find_package(OpenAL REQUIRED)
if (APPLE)
# On mac this sets an include path that we don't need since
# we're using the system framework... should clean this up.
set(OPENAL_INCLUDE_DIR "")
endif ()
find_library(OGG_LIBRARY ogg)
find_library(VORBISFILE_LIBRARY vorbisfile)
if (NOT OGG_LIBRARY)
message(FATAL_ERROR "ogg library not found")
endif ()
if (NOT VORBISFILE_LIBRARY)
message(FATAL_ERROR "vorbisfile library not found")
endif ()
set(EXTRA_INCLUDE_DIRS ${OPENGL_INCLUDE_DIRS}
${OPENAL_INCLUDE_DIR} ${SDL2_INCLUDE_DIRS})
set(EXTRA_LIBRARIES ogg vorbisfile ${OPENGL_LIBRARIES} ${OPENAL_LIBRARY})
endif ()
if (TEST_BUILD)
add_definitions(-DBA_TEST_BUILD=1)
endif ()
# Currently seeing warnings about parameter order changing in GCC 7.1
# on Raspberry Pi builds. We never need to care about C++ abi compatibility
# so just silencing them for now. Can maybe remove this later if they stop.
if (CMAKE_CXX_COMPILER_ID MATCHES GNU)
set(CMAKE_CXX_FLAGS
"${CMAKE_CXX_FLAGS} -Wno-psabi")
endif()
set(BA_SRC_ROOT ../src)
include_directories(${BA_SRC_ROOT})
add_compile_options(-include ballistica/config/config_cmake.h)
if (CMAKE_BUILD_TYPE MATCHES Debug)
add_definitions(-DBA_DEBUG_BUILD=1)
else ()
# It seems that cmake can choose -O2 sometimes and -O3 sometimes
# for release builds (depending on Release vs RelWithDebInfo, etc).
# Let's keep all our non-debug builds consistent at -O3 for now; can
# revisit if it causes problems.
add_definitions(-O3)
endif ()
set(ODE_SRC_ROOT ${BA_SRC_ROOT}/external/open_dynamics_engine-ef)
add_library(ode
${ODE_SRC_ROOT}/ode/IceAABB.cpp
${ODE_SRC_ROOT}/ode/IceContainer.cpp
${ODE_SRC_ROOT}/ode/IceHPoint.cpp
${ODE_SRC_ROOT}/ode/IceIndexedTriangle.cpp
${ODE_SRC_ROOT}/ode/IceMatrix3x3.cpp
${ODE_SRC_ROOT}/ode/IceMatrix4x4.cpp
${ODE_SRC_ROOT}/ode/IceOBB.cpp
${ODE_SRC_ROOT}/ode/IcePlane.cpp
${ODE_SRC_ROOT}/ode/IcePoint.cpp
${ODE_SRC_ROOT}/ode/IceRandom.cpp
${ODE_SRC_ROOT}/ode/IceRay.cpp
${ODE_SRC_ROOT}/ode/IceRevisitedRadix.cpp
${ODE_SRC_ROOT}/ode/IceSegment.cpp
${ODE_SRC_ROOT}/ode/IceTriangle.cpp
${ODE_SRC_ROOT}/ode/IceUtils.cpp
${ODE_SRC_ROOT}/ode/ode.cpp
${ODE_SRC_ROOT}/ode/ode_array.cpp
${ODE_SRC_ROOT}/ode/ode_collision_cylinder_box.cpp
${ODE_SRC_ROOT}/ode/ode_collision_cylinder_plane.cpp
${ODE_SRC_ROOT}/ode/ode_collision_cylinder_sphere.cpp
${ODE_SRC_ROOT}/ode/ode_collision_cylinder_trimesh.cpp
${ODE_SRC_ROOT}/ode/ode_collision_kernel.cpp
${ODE_SRC_ROOT}/ode/ode_collision_quadtreespace.cpp
${ODE_SRC_ROOT}/ode/ode_collision_sapspace.cpp
${ODE_SRC_ROOT}/ode/ode_collision_space.cpp
${ODE_SRC_ROOT}/ode/ode_collision_std.cpp
${ODE_SRC_ROOT}/ode/ode_collision_transform.cpp
${ODE_SRC_ROOT}/ode/ode_collision_trimesh.cpp
${ODE_SRC_ROOT}/ode/ode_collision_trimesh_box.cpp
${ODE_SRC_ROOT}/ode/ode_collision_trimesh_ccylinder.cpp
${ODE_SRC_ROOT}/ode/ode_collision_trimesh_distance.cpp
${ODE_SRC_ROOT}/ode/ode_collision_trimesh_plane.cpp
${ODE_SRC_ROOT}/ode/ode_collision_trimesh_ray.cpp
${ODE_SRC_ROOT}/ode/ode_collision_trimesh_sphere.cpp
${ODE_SRC_ROOT}/ode/ode_collision_trimesh_trimesh.cpp
${ODE_SRC_ROOT}/ode/ode_collision_util.cpp
${ODE_SRC_ROOT}/ode/ode_error.cpp
${ODE_SRC_ROOT}/ode/ode_export-diff.cpp
${ODE_SRC_ROOT}/ode/ode_fastdot.cpp
${ODE_SRC_ROOT}/ode/ode_fastldlt.cpp
${ODE_SRC_ROOT}/ode/ode_fastlsolve.cpp
${ODE_SRC_ROOT}/ode/ode_fastltsolve.cpp
${ODE_SRC_ROOT}/ode/ode_joint.cpp
${ODE_SRC_ROOT}/ode/ode_lcp.cpp
${ODE_SRC_ROOT}/ode/ode_mass.cpp
${ODE_SRC_ROOT}/ode/ode_mat.cpp
${ODE_SRC_ROOT}/ode/ode_math.cpp
${ODE_SRC_ROOT}/ode/ode_matrix.cpp
${ODE_SRC_ROOT}/ode/ode_memory.cpp
${ODE_SRC_ROOT}/ode/ode_misc.cpp
${ODE_SRC_ROOT}/ode/ode_obstack.cpp
${ODE_SRC_ROOT}/ode/ode_quickstep.cpp
${ODE_SRC_ROOT}/ode/ode_rotation.cpp
${ODE_SRC_ROOT}/ode/ode_step.cpp
${ODE_SRC_ROOT}/ode/ode_stepfast.cpp
${ODE_SRC_ROOT}/ode/ode_timer.cpp
${ODE_SRC_ROOT}/ode/ode_util.cpp
${ODE_SRC_ROOT}/ode/OPC_AABBCollider.cpp
${ODE_SRC_ROOT}/ode/OPC_AABBTree.cpp
${ODE_SRC_ROOT}/ode/OPC_BaseModel.cpp
${ODE_SRC_ROOT}/ode/OPC_BoxPruning.cpp
${ODE_SRC_ROOT}/ode/OPC_Collider.cpp
${ODE_SRC_ROOT}/ode/OPC_HybridModel.cpp
${ODE_SRC_ROOT}/ode/OPC_LSSCollider.cpp
${ODE_SRC_ROOT}/ode/OPC_MeshInterface.cpp
${ODE_SRC_ROOT}/ode/OPC_Model.cpp
${ODE_SRC_ROOT}/ode/OPC_OBBCollider.cpp
${ODE_SRC_ROOT}/ode/OPC_OptimizedTree.cpp
${ODE_SRC_ROOT}/ode/OPC_PlanesCollider.cpp
${ODE_SRC_ROOT}/ode/OPC_RayCollider.cpp
${ODE_SRC_ROOT}/ode/OPC_SphereCollider.cpp
${ODE_SRC_ROOT}/ode/OPC_SweepAndPrune.cpp
${ODE_SRC_ROOT}/ode/OPC_TreeBuilders.cpp
${ODE_SRC_ROOT}/ode/OPC_TreeCollider.cpp
${ODE_SRC_ROOT}/ode/OPC_VolumeCollider.cpp
${ODE_SRC_ROOT}/ode/Opcode.cpp
)
target_include_directories(ode PRIVATE ${ODE_SRC_ROOT})
# NOTE: There used to be an issue with optimized GCC builds where mesh
# collisions would fail randomly, leading to characters falling through
# floors somewhat regularly. For this reason I was limiting optimization to
# -O1 for the rigid body library. However, as of April 2021, all seems
# well when testing on arm64 and x86-64 linux builds. (I think)
# The last time I remember seeing this bug was around 2016 I believe, but I
# haven't looked for it since. Perhaps GCC was fixed or perhaps the error
# was limited to 32 bit x86 builds; in either case we should be good, as
# we're no longer building any 32 bit x86 builds using GCC.
# Keeping this in here commented out just in case it rears its ugly head
# again though.
# if (CMAKE_BUILD_TYPE MATCHES Release)
# if (CMAKE_CXX_COMPILER_ID MATCHES GNU)
# target_compile_options(ode PRIVATE -O1)
# endif()
# endif ()
# BallisticaCore binary.
add_executable(ballisticacore
${BA_SRC_ROOT}/external/qr_code_generator/QrCode.cpp
# AUTOGENERATED_PUBLIC_BEGIN (this section is managed by the "update_project" tool)
${BA_SRC_ROOT}/ballistica/app/app.cc
${BA_SRC_ROOT}/ballistica/app/app.h
${BA_SRC_ROOT}/ballistica/app/app_config.cc
${BA_SRC_ROOT}/ballistica/app/app_config.h
${BA_SRC_ROOT}/ballistica/app/app_flavor.cc
${BA_SRC_ROOT}/ballistica/app/app_flavor.h
${BA_SRC_ROOT}/ballistica/app/app_flavor_headless.cc
${BA_SRC_ROOT}/ballistica/app/app_flavor_headless.h
${BA_SRC_ROOT}/ballistica/app/app_flavor_vr.cc
${BA_SRC_ROOT}/ballistica/app/app_flavor_vr.h
${BA_SRC_ROOT}/ballistica/app/stress_test.cc
${BA_SRC_ROOT}/ballistica/app/stress_test.h
${BA_SRC_ROOT}/ballistica/assets/assets.cc
${BA_SRC_ROOT}/ballistica/assets/assets.h
${BA_SRC_ROOT}/ballistica/assets/assets_server.cc
${BA_SRC_ROOT}/ballistica/assets/assets_server.h
${BA_SRC_ROOT}/ballistica/assets/component/asset_component.cc
${BA_SRC_ROOT}/ballistica/assets/component/asset_component.h
${BA_SRC_ROOT}/ballistica/assets/component/collide_model.cc
${BA_SRC_ROOT}/ballistica/assets/component/collide_model.h
${BA_SRC_ROOT}/ballistica/assets/component/cube_map_texture.cc
${BA_SRC_ROOT}/ballistica/assets/component/cube_map_texture.h
${BA_SRC_ROOT}/ballistica/assets/component/data.cc
${BA_SRC_ROOT}/ballistica/assets/component/data.h
${BA_SRC_ROOT}/ballistica/assets/component/model.cc
${BA_SRC_ROOT}/ballistica/assets/component/model.h
${BA_SRC_ROOT}/ballistica/assets/component/sound.cc
${BA_SRC_ROOT}/ballistica/assets/component/sound.h
${BA_SRC_ROOT}/ballistica/assets/component/texture.cc
${BA_SRC_ROOT}/ballistica/assets/component/texture.h
${BA_SRC_ROOT}/ballistica/assets/data/asset_component_data.cc
${BA_SRC_ROOT}/ballistica/assets/data/asset_component_data.h
${BA_SRC_ROOT}/ballistica/assets/data/collide_model_data.cc
${BA_SRC_ROOT}/ballistica/assets/data/collide_model_data.h
${BA_SRC_ROOT}/ballistica/assets/data/data_data.cc
${BA_SRC_ROOT}/ballistica/assets/data/data_data.h
${BA_SRC_ROOT}/ballistica/assets/data/model_data.cc
${BA_SRC_ROOT}/ballistica/assets/data/model_data.h
${BA_SRC_ROOT}/ballistica/assets/data/model_renderer_data.h
${BA_SRC_ROOT}/ballistica/assets/data/sound_data.cc
${BA_SRC_ROOT}/ballistica/assets/data/sound_data.h
${BA_SRC_ROOT}/ballistica/assets/data/texture_data.cc
${BA_SRC_ROOT}/ballistica/assets/data/texture_data.h
${BA_SRC_ROOT}/ballistica/assets/data/texture_preload_data.cc
${BA_SRC_ROOT}/ballistica/assets/data/texture_preload_data.h
${BA_SRC_ROOT}/ballistica/assets/data/texture_renderer_data.h
${BA_SRC_ROOT}/ballistica/audio/al_sys.cc
${BA_SRC_ROOT}/ballistica/audio/al_sys.h
${BA_SRC_ROOT}/ballistica/audio/audio.cc
${BA_SRC_ROOT}/ballistica/audio/audio.h
${BA_SRC_ROOT}/ballistica/audio/audio_server.cc
${BA_SRC_ROOT}/ballistica/audio/audio_server.h
${BA_SRC_ROOT}/ballistica/audio/audio_source.cc
${BA_SRC_ROOT}/ballistica/audio/audio_source.h
${BA_SRC_ROOT}/ballistica/audio/audio_streamer.cc
${BA_SRC_ROOT}/ballistica/audio/audio_streamer.h
${BA_SRC_ROOT}/ballistica/audio/ogg_stream.cc
${BA_SRC_ROOT}/ballistica/audio/ogg_stream.h
${BA_SRC_ROOT}/ballistica/ballistica.cc
${BA_SRC_ROOT}/ballistica/ballistica.h
${BA_SRC_ROOT}/ballistica/config/config_cmake.h
${BA_SRC_ROOT}/ballistica/config/config_common.h
${BA_SRC_ROOT}/ballistica/config/config_windows_common.h
${BA_SRC_ROOT}/ballistica/config/config_windows_generic.h
${BA_SRC_ROOT}/ballistica/config/config_windows_headless.h
${BA_SRC_ROOT}/ballistica/core/context.cc
${BA_SRC_ROOT}/ballistica/core/context.h
${BA_SRC_ROOT}/ballistica/core/exception.cc
${BA_SRC_ROOT}/ballistica/core/exception.h
${BA_SRC_ROOT}/ballistica/core/fatal_error.cc
${BA_SRC_ROOT}/ballistica/core/fatal_error.h
${BA_SRC_ROOT}/ballistica/core/inline.cc
${BA_SRC_ROOT}/ballistica/core/inline.h
${BA_SRC_ROOT}/ballistica/core/logging.cc
${BA_SRC_ROOT}/ballistica/core/logging.h
${BA_SRC_ROOT}/ballistica/core/macros.cc
${BA_SRC_ROOT}/ballistica/core/macros.h
${BA_SRC_ROOT}/ballistica/core/object.cc
${BA_SRC_ROOT}/ballistica/core/object.h
${BA_SRC_ROOT}/ballistica/core/thread.cc
${BA_SRC_ROOT}/ballistica/core/thread.h
${BA_SRC_ROOT}/ballistica/core/types.h
${BA_SRC_ROOT}/ballistica/dynamics/bg/bg_dynamics.cc
${BA_SRC_ROOT}/ballistica/dynamics/bg/bg_dynamics.h
${BA_SRC_ROOT}/ballistica/dynamics/bg/bg_dynamics_draw_snapshot.h
${BA_SRC_ROOT}/ballistica/dynamics/bg/bg_dynamics_fuse.cc
${BA_SRC_ROOT}/ballistica/dynamics/bg/bg_dynamics_fuse.h
${BA_SRC_ROOT}/ballistica/dynamics/bg/bg_dynamics_fuse_data.h
${BA_SRC_ROOT}/ballistica/dynamics/bg/bg_dynamics_height_cache.cc
${BA_SRC_ROOT}/ballistica/dynamics/bg/bg_dynamics_height_cache.h
${BA_SRC_ROOT}/ballistica/dynamics/bg/bg_dynamics_server.cc
${BA_SRC_ROOT}/ballistica/dynamics/bg/bg_dynamics_server.h
${BA_SRC_ROOT}/ballistica/dynamics/bg/bg_dynamics_shadow.cc
${BA_SRC_ROOT}/ballistica/dynamics/bg/bg_dynamics_shadow.h
${BA_SRC_ROOT}/ballistica/dynamics/bg/bg_dynamics_shadow_data.h
${BA_SRC_ROOT}/ballistica/dynamics/bg/bg_dynamics_volume_light.cc
${BA_SRC_ROOT}/ballistica/dynamics/bg/bg_dynamics_volume_light.h
${BA_SRC_ROOT}/ballistica/dynamics/bg/bg_dynamics_volume_light_data.h
${BA_SRC_ROOT}/ballistica/dynamics/collision.h
${BA_SRC_ROOT}/ballistica/dynamics/collision_cache.cc
${BA_SRC_ROOT}/ballistica/dynamics/collision_cache.h
${BA_SRC_ROOT}/ballistica/dynamics/dynamics.cc
${BA_SRC_ROOT}/ballistica/dynamics/dynamics.h
${BA_SRC_ROOT}/ballistica/dynamics/material/impact_sound_material_action.cc
${BA_SRC_ROOT}/ballistica/dynamics/material/impact_sound_material_action.h
${BA_SRC_ROOT}/ballistica/dynamics/material/material.cc
${BA_SRC_ROOT}/ballistica/dynamics/material/material.h
${BA_SRC_ROOT}/ballistica/dynamics/material/material_action.h
${BA_SRC_ROOT}/ballistica/dynamics/material/material_component.cc
${BA_SRC_ROOT}/ballistica/dynamics/material/material_component.h
${BA_SRC_ROOT}/ballistica/dynamics/material/material_condition_node.cc
${BA_SRC_ROOT}/ballistica/dynamics/material/material_condition_node.h
${BA_SRC_ROOT}/ballistica/dynamics/material/material_context.cc
${BA_SRC_ROOT}/ballistica/dynamics/material/material_context.h
${BA_SRC_ROOT}/ballistica/dynamics/material/node_message_material_action.cc
${BA_SRC_ROOT}/ballistica/dynamics/material/node_message_material_action.h
${BA_SRC_ROOT}/ballistica/dynamics/material/node_mod_material_action.cc
${BA_SRC_ROOT}/ballistica/dynamics/material/node_mod_material_action.h
${BA_SRC_ROOT}/ballistica/dynamics/material/node_user_message_material_action.cc
${BA_SRC_ROOT}/ballistica/dynamics/material/node_user_message_material_action.h
${BA_SRC_ROOT}/ballistica/dynamics/material/part_mod_material_action.cc
${BA_SRC_ROOT}/ballistica/dynamics/material/part_mod_material_action.h
${BA_SRC_ROOT}/ballistica/dynamics/material/python_call_material_action.cc
${BA_SRC_ROOT}/ballistica/dynamics/material/python_call_material_action.h
${BA_SRC_ROOT}/ballistica/dynamics/material/roll_sound_material_action.cc
${BA_SRC_ROOT}/ballistica/dynamics/material/roll_sound_material_action.h
${BA_SRC_ROOT}/ballistica/dynamics/material/skid_sound_material_action.cc
${BA_SRC_ROOT}/ballistica/dynamics/material/skid_sound_material_action.h
${BA_SRC_ROOT}/ballistica/dynamics/material/sound_material_action.cc
${BA_SRC_ROOT}/ballistica/dynamics/material/sound_material_action.h
${BA_SRC_ROOT}/ballistica/dynamics/part.cc
${BA_SRC_ROOT}/ballistica/dynamics/part.h
${BA_SRC_ROOT}/ballistica/dynamics/rigid_body.cc
${BA_SRC_ROOT}/ballistica/dynamics/rigid_body.h
${BA_SRC_ROOT}/ballistica/generic/base64.cc
${BA_SRC_ROOT}/ballistica/generic/base64.h
${BA_SRC_ROOT}/ballistica/generic/buffer.h
${BA_SRC_ROOT}/ballistica/generic/huffman.cc
${BA_SRC_ROOT}/ballistica/generic/huffman.h
${BA_SRC_ROOT}/ballistica/generic/json.cc
${BA_SRC_ROOT}/ballistica/generic/json.h
${BA_SRC_ROOT}/ballistica/generic/lambda_runnable.h
${BA_SRC_ROOT}/ballistica/generic/real_timer.h
${BA_SRC_ROOT}/ballistica/generic/runnable.cc
${BA_SRC_ROOT}/ballistica/generic/runnable.h
${BA_SRC_ROOT}/ballistica/generic/timer.cc
${BA_SRC_ROOT}/ballistica/generic/timer.h
${BA_SRC_ROOT}/ballistica/generic/timer_list.cc
${BA_SRC_ROOT}/ballistica/generic/timer_list.h
${BA_SRC_ROOT}/ballistica/generic/utf8.cc
${BA_SRC_ROOT}/ballistica/generic/utf8.h
${BA_SRC_ROOT}/ballistica/generic/utils.cc
${BA_SRC_ROOT}/ballistica/generic/utils.h
${BA_SRC_ROOT}/ballistica/graphics/area_of_interest.cc
${BA_SRC_ROOT}/ballistica/graphics/area_of_interest.h
${BA_SRC_ROOT}/ballistica/graphics/camera.cc
${BA_SRC_ROOT}/ballistica/graphics/camera.h
${BA_SRC_ROOT}/ballistica/graphics/component/empty_component.h
${BA_SRC_ROOT}/ballistica/graphics/component/object_component.cc
${BA_SRC_ROOT}/ballistica/graphics/component/object_component.h
${BA_SRC_ROOT}/ballistica/graphics/component/post_process_component.cc
${BA_SRC_ROOT}/ballistica/graphics/component/post_process_component.h
${BA_SRC_ROOT}/ballistica/graphics/component/render_component.cc
${BA_SRC_ROOT}/ballistica/graphics/component/render_component.h
${BA_SRC_ROOT}/ballistica/graphics/component/shield_component.cc
${BA_SRC_ROOT}/ballistica/graphics/component/shield_component.h
${BA_SRC_ROOT}/ballistica/graphics/component/simple_component.cc
${BA_SRC_ROOT}/ballistica/graphics/component/simple_component.h
${BA_SRC_ROOT}/ballistica/graphics/component/smoke_component.cc
${BA_SRC_ROOT}/ballistica/graphics/component/smoke_component.h
${BA_SRC_ROOT}/ballistica/graphics/component/special_component.cc
${BA_SRC_ROOT}/ballistica/graphics/component/special_component.h
${BA_SRC_ROOT}/ballistica/graphics/component/sprite_component.cc
${BA_SRC_ROOT}/ballistica/graphics/component/sprite_component.h
${BA_SRC_ROOT}/ballistica/graphics/frame_def.cc
${BA_SRC_ROOT}/ballistica/graphics/frame_def.h
${BA_SRC_ROOT}/ballistica/graphics/framebuffer.h
${BA_SRC_ROOT}/ballistica/graphics/gl/gl_sys.cc
${BA_SRC_ROOT}/ballistica/graphics/gl/gl_sys.h
${BA_SRC_ROOT}/ballistica/graphics/gl/renderer_gl.cc
${BA_SRC_ROOT}/ballistica/graphics/gl/renderer_gl.h
${BA_SRC_ROOT}/ballistica/graphics/graphics.cc
${BA_SRC_ROOT}/ballistica/graphics/graphics.h
${BA_SRC_ROOT}/ballistica/graphics/graphics_server.cc
${BA_SRC_ROOT}/ballistica/graphics/graphics_server.h
${BA_SRC_ROOT}/ballistica/graphics/mesh/image_mesh.cc
${BA_SRC_ROOT}/ballistica/graphics/mesh/image_mesh.h
${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh.h
${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_buffer.h
${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_buffer_base.h
${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_buffer_vertex_simple_full.h
${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_buffer_vertex_smoke_full.h
${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_buffer_vertex_sprite.h
${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_data.cc
${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_data.h
${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_data_client_handle.cc
${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_data_client_handle.h
${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_index_buffer_16.h
${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_index_buffer_32.h
${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_indexed.h
${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_indexed_base.h
${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_indexed_dual_texture_full.h
${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_indexed_object_split.h
${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_indexed_simple_full.h
${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_indexed_simple_split.h
${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_indexed_smoke_full.h
${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_indexed_static_dynamic.h
${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_non_indexed.h
${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_renderer_data.h
${BA_SRC_ROOT}/ballistica/graphics/mesh/sprite_mesh.h
${BA_SRC_ROOT}/ballistica/graphics/mesh/text_mesh.cc
${BA_SRC_ROOT}/ballistica/graphics/mesh/text_mesh.h
${BA_SRC_ROOT}/ballistica/graphics/net_graph.cc
${BA_SRC_ROOT}/ballistica/graphics/net_graph.h
${BA_SRC_ROOT}/ballistica/graphics/render_command_buffer.h
${BA_SRC_ROOT}/ballistica/graphics/render_pass.cc
${BA_SRC_ROOT}/ballistica/graphics/render_pass.h
${BA_SRC_ROOT}/ballistica/graphics/render_target.cc
${BA_SRC_ROOT}/ballistica/graphics/render_target.h
${BA_SRC_ROOT}/ballistica/graphics/renderer.cc
${BA_SRC_ROOT}/ballistica/graphics/renderer.h
${BA_SRC_ROOT}/ballistica/graphics/text/font_page_map_data.h
${BA_SRC_ROOT}/ballistica/graphics/text/text_graphics.cc
${BA_SRC_ROOT}/ballistica/graphics/text/text_graphics.h
${BA_SRC_ROOT}/ballistica/graphics/text/text_group.cc
${BA_SRC_ROOT}/ballistica/graphics/text/text_group.h
${BA_SRC_ROOT}/ballistica/graphics/text/text_packer.cc
${BA_SRC_ROOT}/ballistica/graphics/text/text_packer.h
${BA_SRC_ROOT}/ballistica/graphics/texture/dds.cc
${BA_SRC_ROOT}/ballistica/graphics/texture/dds.h
${BA_SRC_ROOT}/ballistica/graphics/texture/ktx.cc
${BA_SRC_ROOT}/ballistica/graphics/texture/ktx.h
${BA_SRC_ROOT}/ballistica/graphics/texture/pvr.cc
${BA_SRC_ROOT}/ballistica/graphics/texture/pvr.h
${BA_SRC_ROOT}/ballistica/graphics/vr_graphics.cc
${BA_SRC_ROOT}/ballistica/graphics/vr_graphics.h
${BA_SRC_ROOT}/ballistica/input/device/client_input_device.cc
${BA_SRC_ROOT}/ballistica/input/device/client_input_device.h
${BA_SRC_ROOT}/ballistica/input/device/input_device.cc
${BA_SRC_ROOT}/ballistica/input/device/input_device.h
${BA_SRC_ROOT}/ballistica/input/device/joystick.cc
${BA_SRC_ROOT}/ballistica/input/device/joystick.h
${BA_SRC_ROOT}/ballistica/input/device/keyboard_input.cc
${BA_SRC_ROOT}/ballistica/input/device/keyboard_input.h
${BA_SRC_ROOT}/ballistica/input/device/test_input.cc
${BA_SRC_ROOT}/ballistica/input/device/test_input.h
${BA_SRC_ROOT}/ballistica/input/device/touch_input.cc
${BA_SRC_ROOT}/ballistica/input/device/touch_input.h
${BA_SRC_ROOT}/ballistica/input/input.cc
${BA_SRC_ROOT}/ballistica/input/input.h
${BA_SRC_ROOT}/ballistica/input/remote_app.cc
${BA_SRC_ROOT}/ballistica/input/remote_app.h
${BA_SRC_ROOT}/ballistica/internal/app_internal.h
${BA_SRC_ROOT}/ballistica/logic/client_controller_interface.h
${BA_SRC_ROOT}/ballistica/logic/connection/connection.cc
${BA_SRC_ROOT}/ballistica/logic/connection/connection.h
${BA_SRC_ROOT}/ballistica/logic/connection/connection_set.cc
${BA_SRC_ROOT}/ballistica/logic/connection/connection_set.h
${BA_SRC_ROOT}/ballistica/logic/connection/connection_to_client.cc
${BA_SRC_ROOT}/ballistica/logic/connection/connection_to_client.h
${BA_SRC_ROOT}/ballistica/logic/connection/connection_to_client_udp.cc
${BA_SRC_ROOT}/ballistica/logic/connection/connection_to_client_udp.h
${BA_SRC_ROOT}/ballistica/logic/connection/connection_to_host.cc
${BA_SRC_ROOT}/ballistica/logic/connection/connection_to_host.h
${BA_SRC_ROOT}/ballistica/logic/connection/connection_to_host_udp.cc
${BA_SRC_ROOT}/ballistica/logic/connection/connection_to_host_udp.h
${BA_SRC_ROOT}/ballistica/logic/host_activity.cc
${BA_SRC_ROOT}/ballistica/logic/host_activity.h
${BA_SRC_ROOT}/ballistica/logic/logic.cc
${BA_SRC_ROOT}/ballistica/logic/logic.h
${BA_SRC_ROOT}/ballistica/logic/player.cc
${BA_SRC_ROOT}/ballistica/logic/player.h
${BA_SRC_ROOT}/ballistica/logic/player_spec.cc
${BA_SRC_ROOT}/ballistica/logic/player_spec.h
${BA_SRC_ROOT}/ballistica/logic/session/client_session.cc
${BA_SRC_ROOT}/ballistica/logic/session/client_session.h
${BA_SRC_ROOT}/ballistica/logic/session/host_session.cc
${BA_SRC_ROOT}/ballistica/logic/session/host_session.h
${BA_SRC_ROOT}/ballistica/logic/session/net_client_session.cc
${BA_SRC_ROOT}/ballistica/logic/session/net_client_session.h
${BA_SRC_ROOT}/ballistica/logic/session/replay_client_session.cc
${BA_SRC_ROOT}/ballistica/logic/session/replay_client_session.h
${BA_SRC_ROOT}/ballistica/logic/session/session.cc
${BA_SRC_ROOT}/ballistica/logic/session/session.h
${BA_SRC_ROOT}/ballistica/logic/v1_account.cc
${BA_SRC_ROOT}/ballistica/logic/v1_account.h
${BA_SRC_ROOT}/ballistica/math/matrix44f.cc
${BA_SRC_ROOT}/ballistica/math/matrix44f.h
${BA_SRC_ROOT}/ballistica/math/point2d.h
${BA_SRC_ROOT}/ballistica/math/random.cc
${BA_SRC_ROOT}/ballistica/math/random.h
${BA_SRC_ROOT}/ballistica/math/rect.h
${BA_SRC_ROOT}/ballistica/math/vector2f.h
${BA_SRC_ROOT}/ballistica/math/vector3f.cc
${BA_SRC_ROOT}/ballistica/math/vector3f.h
${BA_SRC_ROOT}/ballistica/math/vector4f.h
${BA_SRC_ROOT}/ballistica/networking/network_reader.cc
${BA_SRC_ROOT}/ballistica/networking/network_reader.h
${BA_SRC_ROOT}/ballistica/networking/network_writer.cc
${BA_SRC_ROOT}/ballistica/networking/network_writer.h
${BA_SRC_ROOT}/ballistica/networking/networking.cc
${BA_SRC_ROOT}/ballistica/networking/networking.h
${BA_SRC_ROOT}/ballistica/networking/networking_sys.h
${BA_SRC_ROOT}/ballistica/networking/sockaddr.cc
${BA_SRC_ROOT}/ballistica/networking/sockaddr.h
${BA_SRC_ROOT}/ballistica/networking/telnet_server.cc
${BA_SRC_ROOT}/ballistica/networking/telnet_server.h
${BA_SRC_ROOT}/ballistica/platform/apple/platform_apple.h
${BA_SRC_ROOT}/ballistica/platform/linux/platform_linux.cc
${BA_SRC_ROOT}/ballistica/platform/linux/platform_linux.h
${BA_SRC_ROOT}/ballistica/platform/min_sdl.h
${BA_SRC_ROOT}/ballistica/platform/platform.cc
${BA_SRC_ROOT}/ballistica/platform/platform.h
${BA_SRC_ROOT}/ballistica/platform/sdl/sdl_app.cc
${BA_SRC_ROOT}/ballistica/platform/sdl/sdl_app.h
${BA_SRC_ROOT}/ballistica/platform/stdio_console.cc
${BA_SRC_ROOT}/ballistica/platform/stdio_console.h
${BA_SRC_ROOT}/ballistica/platform/windows/platform_windows.cc
${BA_SRC_ROOT}/ballistica/platform/windows/platform_windows.h
${BA_SRC_ROOT}/ballistica/python/class/python_class.cc
${BA_SRC_ROOT}/ballistica/python/class/python_class.h
${BA_SRC_ROOT}/ballistica/python/class/python_class_activity_data.cc
${BA_SRC_ROOT}/ballistica/python/class/python_class_activity_data.h
${BA_SRC_ROOT}/ballistica/python/class/python_class_collide_model.cc
${BA_SRC_ROOT}/ballistica/python/class/python_class_collide_model.h
${BA_SRC_ROOT}/ballistica/python/class/python_class_context.cc
${BA_SRC_ROOT}/ballistica/python/class/python_class_context.h
${BA_SRC_ROOT}/ballistica/python/class/python_class_context_call.cc
${BA_SRC_ROOT}/ballistica/python/class/python_class_context_call.h
${BA_SRC_ROOT}/ballistica/python/class/python_class_data.cc
${BA_SRC_ROOT}/ballistica/python/class/python_class_data.h
${BA_SRC_ROOT}/ballistica/python/class/python_class_input_device.cc
${BA_SRC_ROOT}/ballistica/python/class/python_class_input_device.h
${BA_SRC_ROOT}/ballistica/python/class/python_class_material.cc
${BA_SRC_ROOT}/ballistica/python/class/python_class_material.h
${BA_SRC_ROOT}/ballistica/python/class/python_class_model.cc
${BA_SRC_ROOT}/ballistica/python/class/python_class_model.h
${BA_SRC_ROOT}/ballistica/python/class/python_class_node.cc
${BA_SRC_ROOT}/ballistica/python/class/python_class_node.h
${BA_SRC_ROOT}/ballistica/python/class/python_class_session_data.cc
${BA_SRC_ROOT}/ballistica/python/class/python_class_session_data.h
${BA_SRC_ROOT}/ballistica/python/class/python_class_session_player.cc
${BA_SRC_ROOT}/ballistica/python/class/python_class_session_player.h
${BA_SRC_ROOT}/ballistica/python/class/python_class_sound.cc
${BA_SRC_ROOT}/ballistica/python/class/python_class_sound.h
${BA_SRC_ROOT}/ballistica/python/class/python_class_texture.cc
${BA_SRC_ROOT}/ballistica/python/class/python_class_texture.h
${BA_SRC_ROOT}/ballistica/python/class/python_class_timer.cc
${BA_SRC_ROOT}/ballistica/python/class/python_class_timer.h
${BA_SRC_ROOT}/ballistica/python/class/python_class_vec3.cc
${BA_SRC_ROOT}/ballistica/python/class/python_class_vec3.h
${BA_SRC_ROOT}/ballistica/python/class/python_class_widget.cc
${BA_SRC_ROOT}/ballistica/python/class/python_class_widget.h
${BA_SRC_ROOT}/ballistica/python/methods/python_methods_app.cc
${BA_SRC_ROOT}/ballistica/python/methods/python_methods_app.h
${BA_SRC_ROOT}/ballistica/python/methods/python_methods_assets.cc
${BA_SRC_ROOT}/ballistica/python/methods/python_methods_assets.h
${BA_SRC_ROOT}/ballistica/python/methods/python_methods_gameplay.cc
${BA_SRC_ROOT}/ballistica/python/methods/python_methods_gameplay.h
${BA_SRC_ROOT}/ballistica/python/methods/python_methods_graphics.cc
${BA_SRC_ROOT}/ballistica/python/methods/python_methods_graphics.h
${BA_SRC_ROOT}/ballistica/python/methods/python_methods_input.cc
${BA_SRC_ROOT}/ballistica/python/methods/python_methods_input.h
${BA_SRC_ROOT}/ballistica/python/methods/python_methods_networking.cc
${BA_SRC_ROOT}/ballistica/python/methods/python_methods_networking.h
${BA_SRC_ROOT}/ballistica/python/methods/python_methods_system.cc
${BA_SRC_ROOT}/ballistica/python/methods/python_methods_system.h
${BA_SRC_ROOT}/ballistica/python/methods/python_methods_ui.cc
${BA_SRC_ROOT}/ballistica/python/methods/python_methods_ui.h
${BA_SRC_ROOT}/ballistica/python/python.cc
${BA_SRC_ROOT}/ballistica/python/python.h
${BA_SRC_ROOT}/ballistica/python/python_command.cc
${BA_SRC_ROOT}/ballistica/python/python_command.h
${BA_SRC_ROOT}/ballistica/python/python_context_call.cc
${BA_SRC_ROOT}/ballistica/python/python_context_call.h
${BA_SRC_ROOT}/ballistica/python/python_context_call_runnable.h
${BA_SRC_ROOT}/ballistica/python/python_ref.cc
${BA_SRC_ROOT}/ballistica/python/python_ref.h
${BA_SRC_ROOT}/ballistica/python/python_sys.h
${BA_SRC_ROOT}/ballistica/scene/node/anim_curve_node.cc
${BA_SRC_ROOT}/ballistica/scene/node/anim_curve_node.h
${BA_SRC_ROOT}/ballistica/scene/node/bomb_node.cc
${BA_SRC_ROOT}/ballistica/scene/node/bomb_node.h
${BA_SRC_ROOT}/ballistica/scene/node/combine_node.cc
${BA_SRC_ROOT}/ballistica/scene/node/combine_node.h
${BA_SRC_ROOT}/ballistica/scene/node/explosion_node.cc
${BA_SRC_ROOT}/ballistica/scene/node/explosion_node.h
${BA_SRC_ROOT}/ballistica/scene/node/flag_node.cc
${BA_SRC_ROOT}/ballistica/scene/node/flag_node.h
${BA_SRC_ROOT}/ballistica/scene/node/flash_node.cc
${BA_SRC_ROOT}/ballistica/scene/node/flash_node.h
${BA_SRC_ROOT}/ballistica/scene/node/globals_node.cc
${BA_SRC_ROOT}/ballistica/scene/node/globals_node.h
${BA_SRC_ROOT}/ballistica/scene/node/image_node.cc
${BA_SRC_ROOT}/ballistica/scene/node/image_node.h
${BA_SRC_ROOT}/ballistica/scene/node/light_node.cc
${BA_SRC_ROOT}/ballistica/scene/node/light_node.h
${BA_SRC_ROOT}/ballistica/scene/node/locator_node.cc
${BA_SRC_ROOT}/ballistica/scene/node/locator_node.h
${BA_SRC_ROOT}/ballistica/scene/node/math_node.cc
${BA_SRC_ROOT}/ballistica/scene/node/math_node.h
${BA_SRC_ROOT}/ballistica/scene/node/node.cc
${BA_SRC_ROOT}/ballistica/scene/node/node.h
${BA_SRC_ROOT}/ballistica/scene/node/node_attribute.cc
${BA_SRC_ROOT}/ballistica/scene/node/node_attribute.h
${BA_SRC_ROOT}/ballistica/scene/node/node_attribute_connection.cc
${BA_SRC_ROOT}/ballistica/scene/node/node_attribute_connection.h
${BA_SRC_ROOT}/ballistica/scene/node/node_type.h
${BA_SRC_ROOT}/ballistica/scene/node/null_node.cc
${BA_SRC_ROOT}/ballistica/scene/node/null_node.h
${BA_SRC_ROOT}/ballistica/scene/node/player_node.cc
${BA_SRC_ROOT}/ballistica/scene/node/player_node.h
${BA_SRC_ROOT}/ballistica/scene/node/prop_node.cc
${BA_SRC_ROOT}/ballistica/scene/node/prop_node.h
${BA_SRC_ROOT}/ballistica/scene/node/region_node.cc
${BA_SRC_ROOT}/ballistica/scene/node/region_node.h
${BA_SRC_ROOT}/ballistica/scene/node/scorch_node.cc
${BA_SRC_ROOT}/ballistica/scene/node/scorch_node.h
${BA_SRC_ROOT}/ballistica/scene/node/session_globals_node.cc
${BA_SRC_ROOT}/ballistica/scene/node/session_globals_node.h
${BA_SRC_ROOT}/ballistica/scene/node/shield_node.cc
${BA_SRC_ROOT}/ballistica/scene/node/shield_node.h
${BA_SRC_ROOT}/ballistica/scene/node/sound_node.cc
${BA_SRC_ROOT}/ballistica/scene/node/sound_node.h
${BA_SRC_ROOT}/ballistica/scene/node/spaz_node.cc
${BA_SRC_ROOT}/ballistica/scene/node/spaz_node.h
${BA_SRC_ROOT}/ballistica/scene/node/terrain_node.cc
${BA_SRC_ROOT}/ballistica/scene/node/terrain_node.h
${BA_SRC_ROOT}/ballistica/scene/node/text_node.cc
${BA_SRC_ROOT}/ballistica/scene/node/text_node.h
${BA_SRC_ROOT}/ballistica/scene/node/texture_sequence_node.cc
${BA_SRC_ROOT}/ballistica/scene/node/texture_sequence_node.h
${BA_SRC_ROOT}/ballistica/scene/node/time_display_node.cc
${BA_SRC_ROOT}/ballistica/scene/node/time_display_node.h
${BA_SRC_ROOT}/ballistica/scene/scene.cc
${BA_SRC_ROOT}/ballistica/scene/scene.h
${BA_SRC_ROOT}/ballistica/scene/scene_stream.cc
${BA_SRC_ROOT}/ballistica/scene/scene_stream.h
${BA_SRC_ROOT}/ballistica/scene/v1/scene_v1.cc
${BA_SRC_ROOT}/ballistica/scene/v1/scene_v1.h
${BA_SRC_ROOT}/ballistica/ui/console.cc
${BA_SRC_ROOT}/ballistica/ui/console.h
${BA_SRC_ROOT}/ballistica/ui/root_ui.cc
${BA_SRC_ROOT}/ballistica/ui/root_ui.h
${BA_SRC_ROOT}/ballistica/ui/ui.cc
${BA_SRC_ROOT}/ballistica/ui/ui.h
${BA_SRC_ROOT}/ballistica/ui/widget/button_widget.cc
${BA_SRC_ROOT}/ballistica/ui/widget/button_widget.h
${BA_SRC_ROOT}/ballistica/ui/widget/check_box_widget.cc
${BA_SRC_ROOT}/ballistica/ui/widget/check_box_widget.h
${BA_SRC_ROOT}/ballistica/ui/widget/column_widget.cc
${BA_SRC_ROOT}/ballistica/ui/widget/column_widget.h
${BA_SRC_ROOT}/ballistica/ui/widget/container_widget.cc
${BA_SRC_ROOT}/ballistica/ui/widget/container_widget.h
${BA_SRC_ROOT}/ballistica/ui/widget/h_scroll_widget.cc
${BA_SRC_ROOT}/ballistica/ui/widget/h_scroll_widget.h
${BA_SRC_ROOT}/ballistica/ui/widget/image_widget.cc
${BA_SRC_ROOT}/ballistica/ui/widget/image_widget.h
${BA_SRC_ROOT}/ballistica/ui/widget/root_widget.cc
${BA_SRC_ROOT}/ballistica/ui/widget/root_widget.h
${BA_SRC_ROOT}/ballistica/ui/widget/row_widget.cc
${BA_SRC_ROOT}/ballistica/ui/widget/row_widget.h
${BA_SRC_ROOT}/ballistica/ui/widget/scroll_widget.cc
${BA_SRC_ROOT}/ballistica/ui/widget/scroll_widget.h
${BA_SRC_ROOT}/ballistica/ui/widget/stack_widget.cc
${BA_SRC_ROOT}/ballistica/ui/widget/stack_widget.h
${BA_SRC_ROOT}/ballistica/ui/widget/text_widget.cc
${BA_SRC_ROOT}/ballistica/ui/widget/text_widget.h
${BA_SRC_ROOT}/ballistica/ui/widget/widget.cc
${BA_SRC_ROOT}/ballistica/ui/widget/widget.h
# AUTOGENERATED_PUBLIC_END
)
target_include_directories(ballisticacore PRIVATE
${Python_INCLUDE_DIRS}
${BA_SRC_ROOT}/external/open_dynamics_engine-ef
${EXTRA_INCLUDE_DIRS}
)
target_link_libraries(ballisticacore PRIVATE
${CMAKE_CURRENT_BINARY_DIR}/prefablib/libballisticacore_internal.a ode pthread ${Python_LIBRARIES}
${SDL2_LIBRARIES} ${EXTRA_LIBRARIES} dl)
# Hack for building on rpi (might be due to my manually built Python 3.8)
# Hopefully can remove later...
if(EXISTS "/home/pi")
target_link_libraries(ballisticacore PRIVATE dl util)
endif()

View File

@ -1,758 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{B0B090EA-92E7-457D-9785-ACDF917F9C93}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>BallisticaCoreGeneric</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(ProjectDir)..\..\build\windows\$(Configuration)_$(Platform)\</OutDir>
<IntDir>$(ProjectDir)..\..\build\windows\obj\$(MSBuildProjectName)\$(Configuration)_$(Platform)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(ProjectDir)..\..\build\windows\$(Configuration)_$(Platform)\</OutDir>
<IntDir>$(ProjectDir)..\..\build\windows\obj\$(MSBuildProjectName)\$(Configuration)_$(Platform)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(ProjectDir)..\..\build\windows\$(Configuration)_$(Platform)\</OutDir>
<IntDir>$(ProjectDir)..\..\build\windows\obj\$(MSBuildProjectName)\$(Configuration)_$(Platform)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(ProjectDir)..\..\build\windows\$(Configuration)_$(Platform)\</OutDir>
<IntDir>$(ProjectDir)..\..\build\windows\obj\$(MSBuildProjectName)\$(Configuration)_$(Platform)\</IntDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<MinimalRebuild>false</MinimalRebuild>
<ExceptionHandling>SyncCThrow</ExceptionHandling>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>../../src;../../src/external/windows/include/SDL2;../../src/external/windows/include/python;../../src/external/windows/include;../../src/external/open_dynamics_engine-ef;../../src/external/qrencode-3.4.4</AdditionalIncludeDirectories>
<LanguageStandard>stdcpp17</LanguageStandard>
<FloatingPointModel>Fast</FloatingPointModel>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<IgnoreAllDefaultLibraries>
</IgnoreAllDefaultLibraries>
<LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
<AdditionalLibraryDirectories>../../src/external/windows/lib/$(Platform)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<MinimalRebuild>false</MinimalRebuild>
<ExceptionHandling>SyncCThrow</ExceptionHandling>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>../../src;../../src/external/windows/include/SDL2;../../src/external/windows/include/python;../../src/external/windows/include;../../src/external/open_dynamics_engine-ef</AdditionalIncludeDirectories>
<LanguageStandard>stdcpp17</LanguageStandard>
<FloatingPointModel>Fast</FloatingPointModel>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<IgnoreAllDefaultLibraries>
</IgnoreAllDefaultLibraries>
<LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
<AdditionalLibraryDirectories>../../src/external/windows/lib/$(Platform)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>Use</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ExceptionHandling>SyncCThrow</ExceptionHandling>
<SDLCheck>false</SDLCheck>
<AdditionalIncludeDirectories>../../src;../../src/external/windows/include/SDL2;../../src/external/windows/include/python;../../src/external/windows/include;../../src/external/open_dynamics_engine-ef</AdditionalIncludeDirectories>
<LanguageStandard>stdcpp17</LanguageStandard>
<FloatingPointModel>Fast</FloatingPointModel>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<LinkTimeCodeGeneration>UseFastLinkTimeCodeGeneration</LinkTimeCodeGeneration>
<AdditionalLibraryDirectories>../../src/external/windows/lib/$(Platform)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>Use</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ExceptionHandling>SyncCThrow</ExceptionHandling>
<SDLCheck>false</SDLCheck>
<AdditionalIncludeDirectories>../../src;../../src/external/windows/include/SDL2;../../src/external/windows/include/python;../../src/external/windows/include;../../src/external/open_dynamics_engine-ef</AdditionalIncludeDirectories>
<LanguageStandard>stdcpp17</LanguageStandard>
<FloatingPointModel>Fast</FloatingPointModel>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<LinkTimeCodeGeneration>UseFastLinkTimeCodeGeneration</LinkTimeCodeGeneration>
<AdditionalLibraryDirectories>../../src/external/windows/lib/$(Platform)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<None Include="BallisticaCore.ico" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\src\ballistica\app\app.cc" />
<ClInclude Include="..\..\src\ballistica\app\app.h" />
<ClCompile Include="..\..\src\ballistica\app\app_config.cc" />
<ClInclude Include="..\..\src\ballistica\app\app_config.h" />
<ClCompile Include="..\..\src\ballistica\app\app_flavor.cc" />
<ClInclude Include="..\..\src\ballistica\app\app_flavor.h" />
<ClCompile Include="..\..\src\ballistica\app\app_flavor_headless.cc" />
<ClInclude Include="..\..\src\ballistica\app\app_flavor_headless.h" />
<ClCompile Include="..\..\src\ballistica\app\app_flavor_vr.cc" />
<ClInclude Include="..\..\src\ballistica\app\app_flavor_vr.h" />
<ClCompile Include="..\..\src\ballistica\app\stress_test.cc" />
<ClInclude Include="..\..\src\ballistica\app\stress_test.h" />
<ClCompile Include="..\..\src\ballistica\assets\assets.cc" />
<ClInclude Include="..\..\src\ballistica\assets\assets.h" />
<ClCompile Include="..\..\src\ballistica\assets\assets_server.cc" />
<ClInclude Include="..\..\src\ballistica\assets\assets_server.h" />
<ClCompile Include="..\..\src\ballistica\assets\component\asset_component.cc" />
<ClInclude Include="..\..\src\ballistica\assets\component\asset_component.h" />
<ClCompile Include="..\..\src\ballistica\assets\component\collide_model.cc" />
<ClInclude Include="..\..\src\ballistica\assets\component\collide_model.h" />
<ClCompile Include="..\..\src\ballistica\assets\component\cube_map_texture.cc" />
<ClInclude Include="..\..\src\ballistica\assets\component\cube_map_texture.h" />
<ClCompile Include="..\..\src\ballistica\assets\component\data.cc" />
<ClInclude Include="..\..\src\ballistica\assets\component\data.h" />
<ClCompile Include="..\..\src\ballistica\assets\component\model.cc" />
<ClInclude Include="..\..\src\ballistica\assets\component\model.h" />
<ClCompile Include="..\..\src\ballistica\assets\component\sound.cc" />
<ClInclude Include="..\..\src\ballistica\assets\component\sound.h" />
<ClCompile Include="..\..\src\ballistica\assets\component\texture.cc" />
<ClInclude Include="..\..\src\ballistica\assets\component\texture.h" />
<ClCompile Include="..\..\src\ballistica\assets\data\asset_component_data.cc" />
<ClInclude Include="..\..\src\ballistica\assets\data\asset_component_data.h" />
<ClCompile Include="..\..\src\ballistica\assets\data\collide_model_data.cc" />
<ClInclude Include="..\..\src\ballistica\assets\data\collide_model_data.h" />
<ClCompile Include="..\..\src\ballistica\assets\data\data_data.cc" />
<ClInclude Include="..\..\src\ballistica\assets\data\data_data.h" />
<ClCompile Include="..\..\src\ballistica\assets\data\model_data.cc" />
<ClInclude Include="..\..\src\ballistica\assets\data\model_data.h" />
<ClInclude Include="..\..\src\ballistica\assets\data\model_renderer_data.h" />
<ClCompile Include="..\..\src\ballistica\assets\data\sound_data.cc" />
<ClInclude Include="..\..\src\ballistica\assets\data\sound_data.h" />
<ClCompile Include="..\..\src\ballistica\assets\data\texture_data.cc" />
<ClInclude Include="..\..\src\ballistica\assets\data\texture_data.h" />
<ClCompile Include="..\..\src\ballistica\assets\data\texture_preload_data.cc" />
<ClInclude Include="..\..\src\ballistica\assets\data\texture_preload_data.h" />
<ClInclude Include="..\..\src\ballistica\assets\data\texture_renderer_data.h" />
<ClCompile Include="..\..\src\ballistica\audio\al_sys.cc" />
<ClInclude Include="..\..\src\ballistica\audio\al_sys.h" />
<ClCompile Include="..\..\src\ballistica\audio\audio.cc" />
<ClInclude Include="..\..\src\ballistica\audio\audio.h" />
<ClCompile Include="..\..\src\ballistica\audio\audio_server.cc" />
<ClInclude Include="..\..\src\ballistica\audio\audio_server.h" />
<ClCompile Include="..\..\src\ballistica\audio\audio_source.cc" />
<ClInclude Include="..\..\src\ballistica\audio\audio_source.h" />
<ClCompile Include="..\..\src\ballistica\audio\audio_streamer.cc" />
<ClInclude Include="..\..\src\ballistica\audio\audio_streamer.h" />
<ClCompile Include="..\..\src\ballistica\audio\ogg_stream.cc" />
<ClInclude Include="..\..\src\ballistica\audio\ogg_stream.h" />
<ClCompile Include="..\..\src\ballistica\ballistica.cc" />
<ClInclude Include="..\..\src\ballistica\ballistica.h" />
<ClInclude Include="..\..\src\ballistica\config\config_cmake.h" />
<ClInclude Include="..\..\src\ballistica\config\config_common.h" />
<ClInclude Include="..\..\src\ballistica\config\config_windows_common.h" />
<ClInclude Include="..\..\src\ballistica\config\config_windows_generic.h" />
<ClInclude Include="..\..\src\ballistica\config\config_windows_headless.h" />
<ClCompile Include="..\..\src\ballistica\core\context.cc" />
<ClInclude Include="..\..\src\ballistica\core\context.h" />
<ClCompile Include="..\..\src\ballistica\core\exception.cc" />
<ClInclude Include="..\..\src\ballistica\core\exception.h" />
<ClCompile Include="..\..\src\ballistica\core\fatal_error.cc" />
<ClInclude Include="..\..\src\ballistica\core\fatal_error.h" />
<ClCompile Include="..\..\src\ballistica\core\inline.cc" />
<ClInclude Include="..\..\src\ballistica\core\inline.h" />
<ClCompile Include="..\..\src\ballistica\core\logging.cc" />
<ClInclude Include="..\..\src\ballistica\core\logging.h" />
<ClCompile Include="..\..\src\ballistica\core\macros.cc" />
<ClInclude Include="..\..\src\ballistica\core\macros.h" />
<ClCompile Include="..\..\src\ballistica\core\object.cc" />
<ClInclude Include="..\..\src\ballistica\core\object.h" />
<ClCompile Include="..\..\src\ballistica\core\thread.cc" />
<ClInclude Include="..\..\src\ballistica\core\thread.h" />
<ClInclude Include="..\..\src\ballistica\core\types.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\bg\bg_dynamics.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\bg\bg_dynamics.h" />
<ClInclude Include="..\..\src\ballistica\dynamics\bg\bg_dynamics_draw_snapshot.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\bg\bg_dynamics_fuse.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\bg\bg_dynamics_fuse.h" />
<ClInclude Include="..\..\src\ballistica\dynamics\bg\bg_dynamics_fuse_data.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\bg\bg_dynamics_height_cache.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\bg\bg_dynamics_height_cache.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\bg\bg_dynamics_server.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\bg\bg_dynamics_server.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\bg\bg_dynamics_shadow.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\bg\bg_dynamics_shadow.h" />
<ClInclude Include="..\..\src\ballistica\dynamics\bg\bg_dynamics_shadow_data.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\bg\bg_dynamics_volume_light.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\bg\bg_dynamics_volume_light.h" />
<ClInclude Include="..\..\src\ballistica\dynamics\bg\bg_dynamics_volume_light_data.h" />
<ClInclude Include="..\..\src\ballistica\dynamics\collision.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\collision_cache.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\collision_cache.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\dynamics.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\dynamics.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\material\impact_sound_material_action.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\material\impact_sound_material_action.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\material\material.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\material\material.h" />
<ClInclude Include="..\..\src\ballistica\dynamics\material\material_action.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\material\material_component.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\material\material_component.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\material\material_condition_node.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\material\material_condition_node.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\material\material_context.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\material\material_context.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\material\node_message_material_action.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\material\node_message_material_action.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\material\node_mod_material_action.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\material\node_mod_material_action.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\material\node_user_message_material_action.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\material\node_user_message_material_action.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\material\part_mod_material_action.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\material\part_mod_material_action.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\material\python_call_material_action.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\material\python_call_material_action.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\material\roll_sound_material_action.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\material\roll_sound_material_action.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\material\skid_sound_material_action.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\material\skid_sound_material_action.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\material\sound_material_action.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\material\sound_material_action.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\part.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\part.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\rigid_body.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\rigid_body.h" />
<ClCompile Include="..\..\src\ballistica\generic\base64.cc" />
<ClInclude Include="..\..\src\ballistica\generic\base64.h" />
<ClInclude Include="..\..\src\ballistica\generic\buffer.h" />
<ClCompile Include="..\..\src\ballistica\generic\huffman.cc" />
<ClInclude Include="..\..\src\ballistica\generic\huffman.h" />
<ClCompile Include="..\..\src\ballistica\generic\json.cc" />
<ClInclude Include="..\..\src\ballistica\generic\json.h" />
<ClInclude Include="..\..\src\ballistica\generic\lambda_runnable.h" />
<ClInclude Include="..\..\src\ballistica\generic\real_timer.h" />
<ClCompile Include="..\..\src\ballistica\generic\runnable.cc" />
<ClInclude Include="..\..\src\ballistica\generic\runnable.h" />
<ClCompile Include="..\..\src\ballistica\generic\timer.cc" />
<ClInclude Include="..\..\src\ballistica\generic\timer.h" />
<ClCompile Include="..\..\src\ballistica\generic\timer_list.cc" />
<ClInclude Include="..\..\src\ballistica\generic\timer_list.h" />
<ClCompile Include="..\..\src\ballistica\generic\utf8.cc" />
<ClInclude Include="..\..\src\ballistica\generic\utf8.h" />
<ClCompile Include="..\..\src\ballistica\generic\utils.cc" />
<ClInclude Include="..\..\src\ballistica\generic\utils.h" />
<ClCompile Include="..\..\src\ballistica\graphics\area_of_interest.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\area_of_interest.h" />
<ClCompile Include="..\..\src\ballistica\graphics\camera.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\camera.h" />
<ClInclude Include="..\..\src\ballistica\graphics\component\empty_component.h" />
<ClCompile Include="..\..\src\ballistica\graphics\component\object_component.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\component\object_component.h" />
<ClCompile Include="..\..\src\ballistica\graphics\component\post_process_component.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\component\post_process_component.h" />
<ClCompile Include="..\..\src\ballistica\graphics\component\render_component.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\component\render_component.h" />
<ClCompile Include="..\..\src\ballistica\graphics\component\shield_component.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\component\shield_component.h" />
<ClCompile Include="..\..\src\ballistica\graphics\component\simple_component.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\component\simple_component.h" />
<ClCompile Include="..\..\src\ballistica\graphics\component\smoke_component.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\component\smoke_component.h" />
<ClCompile Include="..\..\src\ballistica\graphics\component\special_component.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\component\special_component.h" />
<ClCompile Include="..\..\src\ballistica\graphics\component\sprite_component.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\component\sprite_component.h" />
<ClCompile Include="..\..\src\ballistica\graphics\frame_def.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\frame_def.h" />
<ClInclude Include="..\..\src\ballistica\graphics\framebuffer.h" />
<ClCompile Include="..\..\src\ballistica\graphics\gl\gl_sys.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\gl\gl_sys.h" />
<ClCompile Include="..\..\src\ballistica\graphics\gl\renderer_gl.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\gl\renderer_gl.h" />
<ClCompile Include="..\..\src\ballistica\graphics\graphics.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\graphics.h" />
<ClCompile Include="..\..\src\ballistica\graphics\graphics_server.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\graphics_server.h" />
<ClCompile Include="..\..\src\ballistica\graphics\mesh\image_mesh.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\image_mesh.h" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\mesh.h" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\mesh_buffer.h" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\mesh_buffer_base.h" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\mesh_buffer_vertex_simple_full.h" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\mesh_buffer_vertex_smoke_full.h" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\mesh_buffer_vertex_sprite.h" />
<ClCompile Include="..\..\src\ballistica\graphics\mesh\mesh_data.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\mesh_data.h" />
<ClCompile Include="..\..\src\ballistica\graphics\mesh\mesh_data_client_handle.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\mesh_data_client_handle.h" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\mesh_index_buffer_16.h" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\mesh_index_buffer_32.h" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\mesh_indexed.h" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\mesh_indexed_base.h" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\mesh_indexed_dual_texture_full.h" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\mesh_indexed_object_split.h" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\mesh_indexed_simple_full.h" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\mesh_indexed_simple_split.h" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\mesh_indexed_smoke_full.h" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\mesh_indexed_static_dynamic.h" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\mesh_non_indexed.h" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\mesh_renderer_data.h" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\sprite_mesh.h" />
<ClCompile Include="..\..\src\ballistica\graphics\mesh\text_mesh.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\text_mesh.h" />
<ClCompile Include="..\..\src\ballistica\graphics\net_graph.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\net_graph.h" />
<ClInclude Include="..\..\src\ballistica\graphics\render_command_buffer.h" />
<ClCompile Include="..\..\src\ballistica\graphics\render_pass.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\render_pass.h" />
<ClCompile Include="..\..\src\ballistica\graphics\render_target.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\render_target.h" />
<ClCompile Include="..\..\src\ballistica\graphics\renderer.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\renderer.h" />
<ClInclude Include="..\..\src\ballistica\graphics\text\font_page_map_data.h" />
<ClCompile Include="..\..\src\ballistica\graphics\text\text_graphics.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\text\text_graphics.h" />
<ClCompile Include="..\..\src\ballistica\graphics\text\text_group.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\text\text_group.h" />
<ClCompile Include="..\..\src\ballistica\graphics\text\text_packer.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\text\text_packer.h" />
<ClCompile Include="..\..\src\ballistica\graphics\texture\dds.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\texture\dds.h" />
<ClCompile Include="..\..\src\ballistica\graphics\texture\ktx.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\texture\ktx.h" />
<ClCompile Include="..\..\src\ballistica\graphics\texture\pvr.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\texture\pvr.h" />
<ClCompile Include="..\..\src\ballistica\graphics\vr_graphics.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\vr_graphics.h" />
<ClCompile Include="..\..\src\ballistica\input\device\client_input_device.cc" />
<ClInclude Include="..\..\src\ballistica\input\device\client_input_device.h" />
<ClCompile Include="..\..\src\ballistica\input\device\input_device.cc" />
<ClInclude Include="..\..\src\ballistica\input\device\input_device.h" />
<ClCompile Include="..\..\src\ballistica\input\device\joystick.cc" />
<ClInclude Include="..\..\src\ballistica\input\device\joystick.h" />
<ClCompile Include="..\..\src\ballistica\input\device\keyboard_input.cc" />
<ClInclude Include="..\..\src\ballistica\input\device\keyboard_input.h" />
<ClCompile Include="..\..\src\ballistica\input\device\test_input.cc" />
<ClInclude Include="..\..\src\ballistica\input\device\test_input.h" />
<ClCompile Include="..\..\src\ballistica\input\device\touch_input.cc" />
<ClInclude Include="..\..\src\ballistica\input\device\touch_input.h" />
<ClCompile Include="..\..\src\ballistica\input\input.cc" />
<ClInclude Include="..\..\src\ballistica\input\input.h" />
<ClCompile Include="..\..\src\ballistica\input\remote_app.cc" />
<ClInclude Include="..\..\src\ballistica\input\remote_app.h" />
<ClInclude Include="..\..\src\ballistica\internal\app_internal.h" />
<ClInclude Include="..\..\src\ballistica\logic\client_controller_interface.h" />
<ClCompile Include="..\..\src\ballistica\logic\connection\connection.cc" />
<ClInclude Include="..\..\src\ballistica\logic\connection\connection.h" />
<ClCompile Include="..\..\src\ballistica\logic\connection\connection_set.cc" />
<ClInclude Include="..\..\src\ballistica\logic\connection\connection_set.h" />
<ClCompile Include="..\..\src\ballistica\logic\connection\connection_to_client.cc" />
<ClInclude Include="..\..\src\ballistica\logic\connection\connection_to_client.h" />
<ClCompile Include="..\..\src\ballistica\logic\connection\connection_to_client_udp.cc" />
<ClInclude Include="..\..\src\ballistica\logic\connection\connection_to_client_udp.h" />
<ClCompile Include="..\..\src\ballistica\logic\connection\connection_to_host.cc" />
<ClInclude Include="..\..\src\ballistica\logic\connection\connection_to_host.h" />
<ClCompile Include="..\..\src\ballistica\logic\connection\connection_to_host_udp.cc" />
<ClInclude Include="..\..\src\ballistica\logic\connection\connection_to_host_udp.h" />
<ClCompile Include="..\..\src\ballistica\logic\host_activity.cc" />
<ClInclude Include="..\..\src\ballistica\logic\host_activity.h" />
<ClCompile Include="..\..\src\ballistica\logic\logic.cc" />
<ClInclude Include="..\..\src\ballistica\logic\logic.h" />
<ClCompile Include="..\..\src\ballistica\logic\player.cc" />
<ClInclude Include="..\..\src\ballistica\logic\player.h" />
<ClCompile Include="..\..\src\ballistica\logic\player_spec.cc" />
<ClInclude Include="..\..\src\ballistica\logic\player_spec.h" />
<ClCompile Include="..\..\src\ballistica\logic\session\client_session.cc" />
<ClInclude Include="..\..\src\ballistica\logic\session\client_session.h" />
<ClCompile Include="..\..\src\ballistica\logic\session\host_session.cc" />
<ClInclude Include="..\..\src\ballistica\logic\session\host_session.h" />
<ClCompile Include="..\..\src\ballistica\logic\session\net_client_session.cc" />
<ClInclude Include="..\..\src\ballistica\logic\session\net_client_session.h" />
<ClCompile Include="..\..\src\ballistica\logic\session\replay_client_session.cc" />
<ClInclude Include="..\..\src\ballistica\logic\session\replay_client_session.h" />
<ClCompile Include="..\..\src\ballistica\logic\session\session.cc" />
<ClInclude Include="..\..\src\ballistica\logic\session\session.h" />
<ClCompile Include="..\..\src\ballistica\logic\v1_account.cc" />
<ClInclude Include="..\..\src\ballistica\logic\v1_account.h" />
<ClCompile Include="..\..\src\ballistica\math\matrix44f.cc" />
<ClInclude Include="..\..\src\ballistica\math\matrix44f.h" />
<ClInclude Include="..\..\src\ballistica\math\point2d.h" />
<ClCompile Include="..\..\src\ballistica\math\random.cc" />
<ClInclude Include="..\..\src\ballistica\math\random.h" />
<ClInclude Include="..\..\src\ballistica\math\rect.h" />
<ClInclude Include="..\..\src\ballistica\math\vector2f.h" />
<ClCompile Include="..\..\src\ballistica\math\vector3f.cc" />
<ClInclude Include="..\..\src\ballistica\math\vector3f.h" />
<ClInclude Include="..\..\src\ballistica\math\vector4f.h" />
<ClCompile Include="..\..\src\ballistica\networking\network_reader.cc" />
<ClInclude Include="..\..\src\ballistica\networking\network_reader.h" />
<ClCompile Include="..\..\src\ballistica\networking\network_writer.cc" />
<ClInclude Include="..\..\src\ballistica\networking\network_writer.h" />
<ClCompile Include="..\..\src\ballistica\networking\networking.cc" />
<ClInclude Include="..\..\src\ballistica\networking\networking.h" />
<ClInclude Include="..\..\src\ballistica\networking\networking_sys.h" />
<ClCompile Include="..\..\src\ballistica\networking\sockaddr.cc" />
<ClInclude Include="..\..\src\ballistica\networking\sockaddr.h" />
<ClCompile Include="..\..\src\ballistica\networking\telnet_server.cc" />
<ClInclude Include="..\..\src\ballistica\networking\telnet_server.h" />
<ClInclude Include="..\..\src\ballistica\platform\apple\platform_apple.h" />
<ClCompile Include="..\..\src\ballistica\platform\linux\platform_linux.cc" />
<ClInclude Include="..\..\src\ballistica\platform\linux\platform_linux.h" />
<ClInclude Include="..\..\src\ballistica\platform\min_sdl.h" />
<ClCompile Include="..\..\src\ballistica\platform\platform.cc" />
<ClInclude Include="..\..\src\ballistica\platform\platform.h" />
<ClCompile Include="..\..\src\ballistica\platform\sdl\sdl_app.cc" />
<ClInclude Include="..\..\src\ballistica\platform\sdl\sdl_app.h" />
<ClCompile Include="..\..\src\ballistica\platform\stdio_console.cc" />
<ClInclude Include="..\..\src\ballistica\platform\stdio_console.h" />
<ClCompile Include="..\..\src\ballistica\platform\windows\platform_windows.cc" />
<ClInclude Include="..\..\src\ballistica\platform\windows\platform_windows.h" />
<ClCompile Include="..\..\src\ballistica\python\class\python_class.cc" />
<ClInclude Include="..\..\src\ballistica\python\class\python_class.h" />
<ClCompile Include="..\..\src\ballistica\python\class\python_class_activity_data.cc" />
<ClInclude Include="..\..\src\ballistica\python\class\python_class_activity_data.h" />
<ClCompile Include="..\..\src\ballistica\python\class\python_class_collide_model.cc" />
<ClInclude Include="..\..\src\ballistica\python\class\python_class_collide_model.h" />
<ClCompile Include="..\..\src\ballistica\python\class\python_class_context.cc" />
<ClInclude Include="..\..\src\ballistica\python\class\python_class_context.h" />
<ClCompile Include="..\..\src\ballistica\python\class\python_class_context_call.cc" />
<ClInclude Include="..\..\src\ballistica\python\class\python_class_context_call.h" />
<ClCompile Include="..\..\src\ballistica\python\class\python_class_data.cc" />
<ClInclude Include="..\..\src\ballistica\python\class\python_class_data.h" />
<ClCompile Include="..\..\src\ballistica\python\class\python_class_input_device.cc" />
<ClInclude Include="..\..\src\ballistica\python\class\python_class_input_device.h" />
<ClCompile Include="..\..\src\ballistica\python\class\python_class_material.cc" />
<ClInclude Include="..\..\src\ballistica\python\class\python_class_material.h" />
<ClCompile Include="..\..\src\ballistica\python\class\python_class_model.cc" />
<ClInclude Include="..\..\src\ballistica\python\class\python_class_model.h" />
<ClCompile Include="..\..\src\ballistica\python\class\python_class_node.cc" />
<ClInclude Include="..\..\src\ballistica\python\class\python_class_node.h" />
<ClCompile Include="..\..\src\ballistica\python\class\python_class_session_data.cc" />
<ClInclude Include="..\..\src\ballistica\python\class\python_class_session_data.h" />
<ClCompile Include="..\..\src\ballistica\python\class\python_class_session_player.cc" />
<ClInclude Include="..\..\src\ballistica\python\class\python_class_session_player.h" />
<ClCompile Include="..\..\src\ballistica\python\class\python_class_sound.cc" />
<ClInclude Include="..\..\src\ballistica\python\class\python_class_sound.h" />
<ClCompile Include="..\..\src\ballistica\python\class\python_class_texture.cc" />
<ClInclude Include="..\..\src\ballistica\python\class\python_class_texture.h" />
<ClCompile Include="..\..\src\ballistica\python\class\python_class_timer.cc" />
<ClInclude Include="..\..\src\ballistica\python\class\python_class_timer.h" />
<ClCompile Include="..\..\src\ballistica\python\class\python_class_vec3.cc" />
<ClInclude Include="..\..\src\ballistica\python\class\python_class_vec3.h" />
<ClCompile Include="..\..\src\ballistica\python\class\python_class_widget.cc" />
<ClInclude Include="..\..\src\ballistica\python\class\python_class_widget.h" />
<ClCompile Include="..\..\src\ballistica\python\methods\python_methods_app.cc" />
<ClInclude Include="..\..\src\ballistica\python\methods\python_methods_app.h" />
<ClCompile Include="..\..\src\ballistica\python\methods\python_methods_assets.cc" />
<ClInclude Include="..\..\src\ballistica\python\methods\python_methods_assets.h" />
<ClCompile Include="..\..\src\ballistica\python\methods\python_methods_gameplay.cc" />
<ClInclude Include="..\..\src\ballistica\python\methods\python_methods_gameplay.h" />
<ClCompile Include="..\..\src\ballistica\python\methods\python_methods_graphics.cc" />
<ClInclude Include="..\..\src\ballistica\python\methods\python_methods_graphics.h" />
<ClCompile Include="..\..\src\ballistica\python\methods\python_methods_input.cc" />
<ClInclude Include="..\..\src\ballistica\python\methods\python_methods_input.h" />
<ClCompile Include="..\..\src\ballistica\python\methods\python_methods_networking.cc" />
<ClInclude Include="..\..\src\ballistica\python\methods\python_methods_networking.h" />
<ClCompile Include="..\..\src\ballistica\python\methods\python_methods_system.cc" />
<ClInclude Include="..\..\src\ballistica\python\methods\python_methods_system.h" />
<ClCompile Include="..\..\src\ballistica\python\methods\python_methods_ui.cc" />
<ClInclude Include="..\..\src\ballistica\python\methods\python_methods_ui.h" />
<ClCompile Include="..\..\src\ballistica\python\python.cc" />
<ClInclude Include="..\..\src\ballistica\python\python.h" />
<ClCompile Include="..\..\src\ballistica\python\python_command.cc" />
<ClInclude Include="..\..\src\ballistica\python\python_command.h" />
<ClCompile Include="..\..\src\ballistica\python\python_context_call.cc" />
<ClInclude Include="..\..\src\ballistica\python\python_context_call.h" />
<ClInclude Include="..\..\src\ballistica\python\python_context_call_runnable.h" />
<ClCompile Include="..\..\src\ballistica\python\python_ref.cc" />
<ClInclude Include="..\..\src\ballistica\python\python_ref.h" />
<ClInclude Include="..\..\src\ballistica\python\python_sys.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\anim_curve_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\anim_curve_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\bomb_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\bomb_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\combine_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\combine_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\explosion_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\explosion_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\flag_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\flag_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\flash_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\flash_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\globals_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\globals_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\image_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\image_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\light_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\light_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\locator_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\locator_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\math_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\math_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\node_attribute.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\node_attribute.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\node_attribute_connection.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\node_attribute_connection.h" />
<ClInclude Include="..\..\src\ballistica\scene\node\node_type.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\null_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\null_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\player_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\player_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\prop_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\prop_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\region_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\region_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\scorch_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\scorch_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\session_globals_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\session_globals_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\shield_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\shield_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\sound_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\sound_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\spaz_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\spaz_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\terrain_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\terrain_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\text_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\text_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\texture_sequence_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\texture_sequence_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\time_display_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\time_display_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\scene.cc" />
<ClInclude Include="..\..\src\ballistica\scene\scene.h" />
<ClCompile Include="..\..\src\ballistica\scene\scene_stream.cc" />
<ClInclude Include="..\..\src\ballistica\scene\scene_stream.h" />
<ClCompile Include="..\..\src\ballistica\scene\v1\scene_v1.cc" />
<ClInclude Include="..\..\src\ballistica\scene\v1\scene_v1.h" />
<ClCompile Include="..\..\src\ballistica\ui\console.cc" />
<ClInclude Include="..\..\src\ballistica\ui\console.h" />
<ClCompile Include="..\..\src\ballistica\ui\root_ui.cc" />
<ClInclude Include="..\..\src\ballistica\ui\root_ui.h" />
<ClCompile Include="..\..\src\ballistica\ui\ui.cc" />
<ClInclude Include="..\..\src\ballistica\ui\ui.h" />
<ClCompile Include="..\..\src\ballistica\ui\widget\button_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui\widget\button_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui\widget\check_box_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui\widget\check_box_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui\widget\column_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui\widget\column_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui\widget\container_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui\widget\container_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui\widget\h_scroll_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui\widget\h_scroll_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui\widget\image_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui\widget\image_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui\widget\root_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui\widget\root_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui\widget\row_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui\widget\row_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui\widget\scroll_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui\widget\scroll_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui\widget\stack_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui\widget\stack_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui\widget\text_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui\widget\text_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui\widget\widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui\widget\widget.h" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceAABB.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceContainer.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceHPoint.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceIndexedTriangle.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceMatrix3x3.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceMatrix4x4.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceOBB.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IcePlane.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IcePoint.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceRandom.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceRay.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceRevisitedRadix.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceSegment.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceTriangle.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceUtils.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_array.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_cylinder_box.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_cylinder_plane.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_cylinder_sphere.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_cylinder_trimesh.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_kernel.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_quadtreespace.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_sapspace.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_space.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_std.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_transform.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_trimesh.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_trimesh_box.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_trimesh_ccylinder.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_trimesh_distance.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_trimesh_plane.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_trimesh_ray.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_trimesh_sphere.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_trimesh_trimesh.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_util.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_error.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_export-diff.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_fastdot.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_fastldlt.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_fastlsolve.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_fastltsolve.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_joint.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_lcp.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_mass.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_mat.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_math.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_matrix.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_memory.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_misc.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_obstack.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_quickstep.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_rotation.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_step.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_stepfast.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_timer.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_util.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\Opcode.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_AABBCollider.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_AABBTree.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_BaseModel.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_BoxPruning.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_Collider.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_LSSCollider.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_MeshInterface.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_Model.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_OBBCollider.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_OptimizedTree.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_Picking.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_PlanesCollider.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_RayCollider.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_SphereCollider.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_SweepAndPrune.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_TreeBuilders.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_TreeCollider.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_VolumeCollider.cpp" />
<ClCompile Include="..\..\src\external\qr_code_generator\QrCode.cpp" />
<ClCompile Include="stdafx.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
</ClCompile>
<ClInclude Include="Resource.h" />
<ClInclude Include="stdafx.h" />
<ClInclude Include="targetver.h" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="BallisticaCore.rc" />
</ItemGroup>
<ItemGroup>
<Library Include="..\..\build\prefab\lib\windows\$(Configuration)_$(Platform)\$(MSBuildProjectName)Internal.lib" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -1,746 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{B9012642-2E6D-48A1-90EC-E91799B2198E}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>BallisticaCoreHeadless</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(ProjectDir)..\..\build\windows\$(Configuration)_$(Platform)\</OutDir>
<IntDir>$(ProjectDir)..\..\build\windows\obj\$(MSBuildProjectName)\$(Configuration)_$(Platform)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(ProjectDir)..\..\build\windows\$(Configuration)_$(Platform)\</OutDir>
<IntDir>$(ProjectDir)..\..\build\windows\obj\$(MSBuildProjectName)\$(Configuration)_$(Platform)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(ProjectDir)..\..\build\windows\$(Configuration)_$(Platform)\</OutDir>
<IntDir>$(ProjectDir)..\..\build\windows\obj\$(MSBuildProjectName)\$(Configuration)_$(Platform)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(ProjectDir)..\..\build\windows\$(Configuration)_$(Platform)\</OutDir>
<IntDir>$(ProjectDir)..\..\build\windows\obj\$(MSBuildProjectName)\$(Configuration)_$(Platform)\</IntDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles>
<MinimalRebuild>false</MinimalRebuild>
<ExceptionHandling>SyncCThrow</ExceptionHandling>
<AdditionalIncludeDirectories>../../src;../../src/external/windows/include/SDL2;../../src/external/windows/include/python;../../src/external/windows/include;../../src/external/open_dynamics_engine-ef</AdditionalIncludeDirectories>
<LanguageStandard>stdcpp17</LanguageStandard>
<FloatingPointModel>Fast</FloatingPointModel>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
<AdditionalLibraryDirectories>../../src/external/windows/lib/$(Platform)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<ExceptionHandling>SyncCThrow</ExceptionHandling>
<ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<MinimalRebuild>false</MinimalRebuild>
<AdditionalIncludeDirectories>../../src;../../src/external/windows/include/SDL2;../../src/external/windows/include/python;../../src/external/windows/include;../../src/external/open_dynamics_engine-ef</AdditionalIncludeDirectories>
<LanguageStandard>stdcpp17</LanguageStandard>
<FloatingPointModel>Fast</FloatingPointModel>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>../../src/external/windows/lib/$(Platform)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>Use</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>false</SDLCheck>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles>
<ExceptionHandling>SyncCThrow</ExceptionHandling>
<AdditionalIncludeDirectories>../../src;../../src/external/windows/include/SDL2;../../src/external/windows/include/python;../../src/external/windows/include;../../src/external/open_dynamics_engine-ef</AdditionalIncludeDirectories>
<LanguageStandard>stdcpp17</LanguageStandard>
<FloatingPointModel>Fast</FloatingPointModel>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>../../src/external/windows/lib/$(Platform)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>Use</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>false</SDLCheck>
<ExceptionHandling>SyncCThrow</ExceptionHandling>
<ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<AdditionalIncludeDirectories>../../src;../../src/external/windows/include/SDL2;../../src/external/windows/include/python;../../src/external/windows/include;../../src/external/open_dynamics_engine-ef</AdditionalIncludeDirectories>
<LanguageStandard>stdcpp17</LanguageStandard>
<FloatingPointModel>Fast</FloatingPointModel>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>../../src/external/windows/lib/$(Platform)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<Library Include="..\..\build\prefab\lib\windows\$(Configuration)_$(Platform)\$(MSBuildProjectName)Internal.lib" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\src\ballistica\app\app.cc" />
<ClInclude Include="..\..\src\ballistica\app\app.h" />
<ClCompile Include="..\..\src\ballistica\app\app_config.cc" />
<ClInclude Include="..\..\src\ballistica\app\app_config.h" />
<ClCompile Include="..\..\src\ballistica\app\app_flavor.cc" />
<ClInclude Include="..\..\src\ballistica\app\app_flavor.h" />
<ClCompile Include="..\..\src\ballistica\app\app_flavor_headless.cc" />
<ClInclude Include="..\..\src\ballistica\app\app_flavor_headless.h" />
<ClCompile Include="..\..\src\ballistica\app\app_flavor_vr.cc" />
<ClInclude Include="..\..\src\ballistica\app\app_flavor_vr.h" />
<ClCompile Include="..\..\src\ballistica\app\stress_test.cc" />
<ClInclude Include="..\..\src\ballistica\app\stress_test.h" />
<ClCompile Include="..\..\src\ballistica\assets\assets.cc" />
<ClInclude Include="..\..\src\ballistica\assets\assets.h" />
<ClCompile Include="..\..\src\ballistica\assets\assets_server.cc" />
<ClInclude Include="..\..\src\ballistica\assets\assets_server.h" />
<ClCompile Include="..\..\src\ballistica\assets\component\asset_component.cc" />
<ClInclude Include="..\..\src\ballistica\assets\component\asset_component.h" />
<ClCompile Include="..\..\src\ballistica\assets\component\collide_model.cc" />
<ClInclude Include="..\..\src\ballistica\assets\component\collide_model.h" />
<ClCompile Include="..\..\src\ballistica\assets\component\cube_map_texture.cc" />
<ClInclude Include="..\..\src\ballistica\assets\component\cube_map_texture.h" />
<ClCompile Include="..\..\src\ballistica\assets\component\data.cc" />
<ClInclude Include="..\..\src\ballistica\assets\component\data.h" />
<ClCompile Include="..\..\src\ballistica\assets\component\model.cc" />
<ClInclude Include="..\..\src\ballistica\assets\component\model.h" />
<ClCompile Include="..\..\src\ballistica\assets\component\sound.cc" />
<ClInclude Include="..\..\src\ballistica\assets\component\sound.h" />
<ClCompile Include="..\..\src\ballistica\assets\component\texture.cc" />
<ClInclude Include="..\..\src\ballistica\assets\component\texture.h" />
<ClCompile Include="..\..\src\ballistica\assets\data\asset_component_data.cc" />
<ClInclude Include="..\..\src\ballistica\assets\data\asset_component_data.h" />
<ClCompile Include="..\..\src\ballistica\assets\data\collide_model_data.cc" />
<ClInclude Include="..\..\src\ballistica\assets\data\collide_model_data.h" />
<ClCompile Include="..\..\src\ballistica\assets\data\data_data.cc" />
<ClInclude Include="..\..\src\ballistica\assets\data\data_data.h" />
<ClCompile Include="..\..\src\ballistica\assets\data\model_data.cc" />
<ClInclude Include="..\..\src\ballistica\assets\data\model_data.h" />
<ClInclude Include="..\..\src\ballistica\assets\data\model_renderer_data.h" />
<ClCompile Include="..\..\src\ballistica\assets\data\sound_data.cc" />
<ClInclude Include="..\..\src\ballistica\assets\data\sound_data.h" />
<ClCompile Include="..\..\src\ballistica\assets\data\texture_data.cc" />
<ClInclude Include="..\..\src\ballistica\assets\data\texture_data.h" />
<ClCompile Include="..\..\src\ballistica\assets\data\texture_preload_data.cc" />
<ClInclude Include="..\..\src\ballistica\assets\data\texture_preload_data.h" />
<ClInclude Include="..\..\src\ballistica\assets\data\texture_renderer_data.h" />
<ClCompile Include="..\..\src\ballistica\audio\al_sys.cc" />
<ClInclude Include="..\..\src\ballistica\audio\al_sys.h" />
<ClCompile Include="..\..\src\ballistica\audio\audio.cc" />
<ClInclude Include="..\..\src\ballistica\audio\audio.h" />
<ClCompile Include="..\..\src\ballistica\audio\audio_server.cc" />
<ClInclude Include="..\..\src\ballistica\audio\audio_server.h" />
<ClCompile Include="..\..\src\ballistica\audio\audio_source.cc" />
<ClInclude Include="..\..\src\ballistica\audio\audio_source.h" />
<ClCompile Include="..\..\src\ballistica\audio\audio_streamer.cc" />
<ClInclude Include="..\..\src\ballistica\audio\audio_streamer.h" />
<ClCompile Include="..\..\src\ballistica\audio\ogg_stream.cc" />
<ClInclude Include="..\..\src\ballistica\audio\ogg_stream.h" />
<ClCompile Include="..\..\src\ballistica\ballistica.cc" />
<ClInclude Include="..\..\src\ballistica\ballistica.h" />
<ClInclude Include="..\..\src\ballistica\config\config_cmake.h" />
<ClInclude Include="..\..\src\ballistica\config\config_common.h" />
<ClInclude Include="..\..\src\ballistica\config\config_windows_common.h" />
<ClInclude Include="..\..\src\ballistica\config\config_windows_generic.h" />
<ClInclude Include="..\..\src\ballistica\config\config_windows_headless.h" />
<ClCompile Include="..\..\src\ballistica\core\context.cc" />
<ClInclude Include="..\..\src\ballistica\core\context.h" />
<ClCompile Include="..\..\src\ballistica\core\exception.cc" />
<ClInclude Include="..\..\src\ballistica\core\exception.h" />
<ClCompile Include="..\..\src\ballistica\core\fatal_error.cc" />
<ClInclude Include="..\..\src\ballistica\core\fatal_error.h" />
<ClCompile Include="..\..\src\ballistica\core\inline.cc" />
<ClInclude Include="..\..\src\ballistica\core\inline.h" />
<ClCompile Include="..\..\src\ballistica\core\logging.cc" />
<ClInclude Include="..\..\src\ballistica\core\logging.h" />
<ClCompile Include="..\..\src\ballistica\core\macros.cc" />
<ClInclude Include="..\..\src\ballistica\core\macros.h" />
<ClCompile Include="..\..\src\ballistica\core\object.cc" />
<ClInclude Include="..\..\src\ballistica\core\object.h" />
<ClCompile Include="..\..\src\ballistica\core\thread.cc" />
<ClInclude Include="..\..\src\ballistica\core\thread.h" />
<ClInclude Include="..\..\src\ballistica\core\types.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\bg\bg_dynamics.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\bg\bg_dynamics.h" />
<ClInclude Include="..\..\src\ballistica\dynamics\bg\bg_dynamics_draw_snapshot.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\bg\bg_dynamics_fuse.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\bg\bg_dynamics_fuse.h" />
<ClInclude Include="..\..\src\ballistica\dynamics\bg\bg_dynamics_fuse_data.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\bg\bg_dynamics_height_cache.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\bg\bg_dynamics_height_cache.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\bg\bg_dynamics_server.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\bg\bg_dynamics_server.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\bg\bg_dynamics_shadow.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\bg\bg_dynamics_shadow.h" />
<ClInclude Include="..\..\src\ballistica\dynamics\bg\bg_dynamics_shadow_data.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\bg\bg_dynamics_volume_light.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\bg\bg_dynamics_volume_light.h" />
<ClInclude Include="..\..\src\ballistica\dynamics\bg\bg_dynamics_volume_light_data.h" />
<ClInclude Include="..\..\src\ballistica\dynamics\collision.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\collision_cache.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\collision_cache.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\dynamics.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\dynamics.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\material\impact_sound_material_action.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\material\impact_sound_material_action.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\material\material.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\material\material.h" />
<ClInclude Include="..\..\src\ballistica\dynamics\material\material_action.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\material\material_component.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\material\material_component.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\material\material_condition_node.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\material\material_condition_node.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\material\material_context.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\material\material_context.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\material\node_message_material_action.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\material\node_message_material_action.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\material\node_mod_material_action.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\material\node_mod_material_action.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\material\node_user_message_material_action.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\material\node_user_message_material_action.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\material\part_mod_material_action.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\material\part_mod_material_action.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\material\python_call_material_action.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\material\python_call_material_action.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\material\roll_sound_material_action.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\material\roll_sound_material_action.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\material\skid_sound_material_action.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\material\skid_sound_material_action.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\material\sound_material_action.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\material\sound_material_action.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\part.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\part.h" />
<ClCompile Include="..\..\src\ballistica\dynamics\rigid_body.cc" />
<ClInclude Include="..\..\src\ballistica\dynamics\rigid_body.h" />
<ClCompile Include="..\..\src\ballistica\generic\base64.cc" />
<ClInclude Include="..\..\src\ballistica\generic\base64.h" />
<ClInclude Include="..\..\src\ballistica\generic\buffer.h" />
<ClCompile Include="..\..\src\ballistica\generic\huffman.cc" />
<ClInclude Include="..\..\src\ballistica\generic\huffman.h" />
<ClCompile Include="..\..\src\ballistica\generic\json.cc" />
<ClInclude Include="..\..\src\ballistica\generic\json.h" />
<ClInclude Include="..\..\src\ballistica\generic\lambda_runnable.h" />
<ClInclude Include="..\..\src\ballistica\generic\real_timer.h" />
<ClCompile Include="..\..\src\ballistica\generic\runnable.cc" />
<ClInclude Include="..\..\src\ballistica\generic\runnable.h" />
<ClCompile Include="..\..\src\ballistica\generic\timer.cc" />
<ClInclude Include="..\..\src\ballistica\generic\timer.h" />
<ClCompile Include="..\..\src\ballistica\generic\timer_list.cc" />
<ClInclude Include="..\..\src\ballistica\generic\timer_list.h" />
<ClCompile Include="..\..\src\ballistica\generic\utf8.cc" />
<ClInclude Include="..\..\src\ballistica\generic\utf8.h" />
<ClCompile Include="..\..\src\ballistica\generic\utils.cc" />
<ClInclude Include="..\..\src\ballistica\generic\utils.h" />
<ClCompile Include="..\..\src\ballistica\graphics\area_of_interest.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\area_of_interest.h" />
<ClCompile Include="..\..\src\ballistica\graphics\camera.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\camera.h" />
<ClInclude Include="..\..\src\ballistica\graphics\component\empty_component.h" />
<ClCompile Include="..\..\src\ballistica\graphics\component\object_component.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\component\object_component.h" />
<ClCompile Include="..\..\src\ballistica\graphics\component\post_process_component.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\component\post_process_component.h" />
<ClCompile Include="..\..\src\ballistica\graphics\component\render_component.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\component\render_component.h" />
<ClCompile Include="..\..\src\ballistica\graphics\component\shield_component.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\component\shield_component.h" />
<ClCompile Include="..\..\src\ballistica\graphics\component\simple_component.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\component\simple_component.h" />
<ClCompile Include="..\..\src\ballistica\graphics\component\smoke_component.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\component\smoke_component.h" />
<ClCompile Include="..\..\src\ballistica\graphics\component\special_component.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\component\special_component.h" />
<ClCompile Include="..\..\src\ballistica\graphics\component\sprite_component.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\component\sprite_component.h" />
<ClCompile Include="..\..\src\ballistica\graphics\frame_def.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\frame_def.h" />
<ClInclude Include="..\..\src\ballistica\graphics\framebuffer.h" />
<ClCompile Include="..\..\src\ballistica\graphics\gl\gl_sys.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\gl\gl_sys.h" />
<ClCompile Include="..\..\src\ballistica\graphics\gl\renderer_gl.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\gl\renderer_gl.h" />
<ClCompile Include="..\..\src\ballistica\graphics\graphics.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\graphics.h" />
<ClCompile Include="..\..\src\ballistica\graphics\graphics_server.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\graphics_server.h" />
<ClCompile Include="..\..\src\ballistica\graphics\mesh\image_mesh.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\image_mesh.h" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\mesh.h" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\mesh_buffer.h" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\mesh_buffer_base.h" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\mesh_buffer_vertex_simple_full.h" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\mesh_buffer_vertex_smoke_full.h" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\mesh_buffer_vertex_sprite.h" />
<ClCompile Include="..\..\src\ballistica\graphics\mesh\mesh_data.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\mesh_data.h" />
<ClCompile Include="..\..\src\ballistica\graphics\mesh\mesh_data_client_handle.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\mesh_data_client_handle.h" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\mesh_index_buffer_16.h" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\mesh_index_buffer_32.h" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\mesh_indexed.h" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\mesh_indexed_base.h" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\mesh_indexed_dual_texture_full.h" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\mesh_indexed_object_split.h" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\mesh_indexed_simple_full.h" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\mesh_indexed_simple_split.h" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\mesh_indexed_smoke_full.h" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\mesh_indexed_static_dynamic.h" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\mesh_non_indexed.h" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\mesh_renderer_data.h" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\sprite_mesh.h" />
<ClCompile Include="..\..\src\ballistica\graphics\mesh\text_mesh.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\mesh\text_mesh.h" />
<ClCompile Include="..\..\src\ballistica\graphics\net_graph.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\net_graph.h" />
<ClInclude Include="..\..\src\ballistica\graphics\render_command_buffer.h" />
<ClCompile Include="..\..\src\ballistica\graphics\render_pass.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\render_pass.h" />
<ClCompile Include="..\..\src\ballistica\graphics\render_target.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\render_target.h" />
<ClCompile Include="..\..\src\ballistica\graphics\renderer.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\renderer.h" />
<ClInclude Include="..\..\src\ballistica\graphics\text\font_page_map_data.h" />
<ClCompile Include="..\..\src\ballistica\graphics\text\text_graphics.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\text\text_graphics.h" />
<ClCompile Include="..\..\src\ballistica\graphics\text\text_group.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\text\text_group.h" />
<ClCompile Include="..\..\src\ballistica\graphics\text\text_packer.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\text\text_packer.h" />
<ClCompile Include="..\..\src\ballistica\graphics\texture\dds.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\texture\dds.h" />
<ClCompile Include="..\..\src\ballistica\graphics\texture\ktx.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\texture\ktx.h" />
<ClCompile Include="..\..\src\ballistica\graphics\texture\pvr.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\texture\pvr.h" />
<ClCompile Include="..\..\src\ballistica\graphics\vr_graphics.cc" />
<ClInclude Include="..\..\src\ballistica\graphics\vr_graphics.h" />
<ClCompile Include="..\..\src\ballistica\input\device\client_input_device.cc" />
<ClInclude Include="..\..\src\ballistica\input\device\client_input_device.h" />
<ClCompile Include="..\..\src\ballistica\input\device\input_device.cc" />
<ClInclude Include="..\..\src\ballistica\input\device\input_device.h" />
<ClCompile Include="..\..\src\ballistica\input\device\joystick.cc" />
<ClInclude Include="..\..\src\ballistica\input\device\joystick.h" />
<ClCompile Include="..\..\src\ballistica\input\device\keyboard_input.cc" />
<ClInclude Include="..\..\src\ballistica\input\device\keyboard_input.h" />
<ClCompile Include="..\..\src\ballistica\input\device\test_input.cc" />
<ClInclude Include="..\..\src\ballistica\input\device\test_input.h" />
<ClCompile Include="..\..\src\ballistica\input\device\touch_input.cc" />
<ClInclude Include="..\..\src\ballistica\input\device\touch_input.h" />
<ClCompile Include="..\..\src\ballistica\input\input.cc" />
<ClInclude Include="..\..\src\ballistica\input\input.h" />
<ClCompile Include="..\..\src\ballistica\input\remote_app.cc" />
<ClInclude Include="..\..\src\ballistica\input\remote_app.h" />
<ClInclude Include="..\..\src\ballistica\internal\app_internal.h" />
<ClInclude Include="..\..\src\ballistica\logic\client_controller_interface.h" />
<ClCompile Include="..\..\src\ballistica\logic\connection\connection.cc" />
<ClInclude Include="..\..\src\ballistica\logic\connection\connection.h" />
<ClCompile Include="..\..\src\ballistica\logic\connection\connection_set.cc" />
<ClInclude Include="..\..\src\ballistica\logic\connection\connection_set.h" />
<ClCompile Include="..\..\src\ballistica\logic\connection\connection_to_client.cc" />
<ClInclude Include="..\..\src\ballistica\logic\connection\connection_to_client.h" />
<ClCompile Include="..\..\src\ballistica\logic\connection\connection_to_client_udp.cc" />
<ClInclude Include="..\..\src\ballistica\logic\connection\connection_to_client_udp.h" />
<ClCompile Include="..\..\src\ballistica\logic\connection\connection_to_host.cc" />
<ClInclude Include="..\..\src\ballistica\logic\connection\connection_to_host.h" />
<ClCompile Include="..\..\src\ballistica\logic\connection\connection_to_host_udp.cc" />
<ClInclude Include="..\..\src\ballistica\logic\connection\connection_to_host_udp.h" />
<ClCompile Include="..\..\src\ballistica\logic\host_activity.cc" />
<ClInclude Include="..\..\src\ballistica\logic\host_activity.h" />
<ClCompile Include="..\..\src\ballistica\logic\logic.cc" />
<ClInclude Include="..\..\src\ballistica\logic\logic.h" />
<ClCompile Include="..\..\src\ballistica\logic\player.cc" />
<ClInclude Include="..\..\src\ballistica\logic\player.h" />
<ClCompile Include="..\..\src\ballistica\logic\player_spec.cc" />
<ClInclude Include="..\..\src\ballistica\logic\player_spec.h" />
<ClCompile Include="..\..\src\ballistica\logic\session\client_session.cc" />
<ClInclude Include="..\..\src\ballistica\logic\session\client_session.h" />
<ClCompile Include="..\..\src\ballistica\logic\session\host_session.cc" />
<ClInclude Include="..\..\src\ballistica\logic\session\host_session.h" />
<ClCompile Include="..\..\src\ballistica\logic\session\net_client_session.cc" />
<ClInclude Include="..\..\src\ballistica\logic\session\net_client_session.h" />
<ClCompile Include="..\..\src\ballistica\logic\session\replay_client_session.cc" />
<ClInclude Include="..\..\src\ballistica\logic\session\replay_client_session.h" />
<ClCompile Include="..\..\src\ballistica\logic\session\session.cc" />
<ClInclude Include="..\..\src\ballistica\logic\session\session.h" />
<ClCompile Include="..\..\src\ballistica\logic\v1_account.cc" />
<ClInclude Include="..\..\src\ballistica\logic\v1_account.h" />
<ClCompile Include="..\..\src\ballistica\math\matrix44f.cc" />
<ClInclude Include="..\..\src\ballistica\math\matrix44f.h" />
<ClInclude Include="..\..\src\ballistica\math\point2d.h" />
<ClCompile Include="..\..\src\ballistica\math\random.cc" />
<ClInclude Include="..\..\src\ballistica\math\random.h" />
<ClInclude Include="..\..\src\ballistica\math\rect.h" />
<ClInclude Include="..\..\src\ballistica\math\vector2f.h" />
<ClCompile Include="..\..\src\ballistica\math\vector3f.cc" />
<ClInclude Include="..\..\src\ballistica\math\vector3f.h" />
<ClInclude Include="..\..\src\ballistica\math\vector4f.h" />
<ClCompile Include="..\..\src\ballistica\networking\network_reader.cc" />
<ClInclude Include="..\..\src\ballistica\networking\network_reader.h" />
<ClCompile Include="..\..\src\ballistica\networking\network_writer.cc" />
<ClInclude Include="..\..\src\ballistica\networking\network_writer.h" />
<ClCompile Include="..\..\src\ballistica\networking\networking.cc" />
<ClInclude Include="..\..\src\ballistica\networking\networking.h" />
<ClInclude Include="..\..\src\ballistica\networking\networking_sys.h" />
<ClCompile Include="..\..\src\ballistica\networking\sockaddr.cc" />
<ClInclude Include="..\..\src\ballistica\networking\sockaddr.h" />
<ClCompile Include="..\..\src\ballistica\networking\telnet_server.cc" />
<ClInclude Include="..\..\src\ballistica\networking\telnet_server.h" />
<ClInclude Include="..\..\src\ballistica\platform\apple\platform_apple.h" />
<ClCompile Include="..\..\src\ballistica\platform\linux\platform_linux.cc" />
<ClInclude Include="..\..\src\ballistica\platform\linux\platform_linux.h" />
<ClInclude Include="..\..\src\ballistica\platform\min_sdl.h" />
<ClCompile Include="..\..\src\ballistica\platform\platform.cc" />
<ClInclude Include="..\..\src\ballistica\platform\platform.h" />
<ClCompile Include="..\..\src\ballistica\platform\sdl\sdl_app.cc" />
<ClInclude Include="..\..\src\ballistica\platform\sdl\sdl_app.h" />
<ClCompile Include="..\..\src\ballistica\platform\stdio_console.cc" />
<ClInclude Include="..\..\src\ballistica\platform\stdio_console.h" />
<ClCompile Include="..\..\src\ballistica\platform\windows\platform_windows.cc" />
<ClInclude Include="..\..\src\ballistica\platform\windows\platform_windows.h" />
<ClCompile Include="..\..\src\ballistica\python\class\python_class.cc" />
<ClInclude Include="..\..\src\ballistica\python\class\python_class.h" />
<ClCompile Include="..\..\src\ballistica\python\class\python_class_activity_data.cc" />
<ClInclude Include="..\..\src\ballistica\python\class\python_class_activity_data.h" />
<ClCompile Include="..\..\src\ballistica\python\class\python_class_collide_model.cc" />
<ClInclude Include="..\..\src\ballistica\python\class\python_class_collide_model.h" />
<ClCompile Include="..\..\src\ballistica\python\class\python_class_context.cc" />
<ClInclude Include="..\..\src\ballistica\python\class\python_class_context.h" />
<ClCompile Include="..\..\src\ballistica\python\class\python_class_context_call.cc" />
<ClInclude Include="..\..\src\ballistica\python\class\python_class_context_call.h" />
<ClCompile Include="..\..\src\ballistica\python\class\python_class_data.cc" />
<ClInclude Include="..\..\src\ballistica\python\class\python_class_data.h" />
<ClCompile Include="..\..\src\ballistica\python\class\python_class_input_device.cc" />
<ClInclude Include="..\..\src\ballistica\python\class\python_class_input_device.h" />
<ClCompile Include="..\..\src\ballistica\python\class\python_class_material.cc" />
<ClInclude Include="..\..\src\ballistica\python\class\python_class_material.h" />
<ClCompile Include="..\..\src\ballistica\python\class\python_class_model.cc" />
<ClInclude Include="..\..\src\ballistica\python\class\python_class_model.h" />
<ClCompile Include="..\..\src\ballistica\python\class\python_class_node.cc" />
<ClInclude Include="..\..\src\ballistica\python\class\python_class_node.h" />
<ClCompile Include="..\..\src\ballistica\python\class\python_class_session_data.cc" />
<ClInclude Include="..\..\src\ballistica\python\class\python_class_session_data.h" />
<ClCompile Include="..\..\src\ballistica\python\class\python_class_session_player.cc" />
<ClInclude Include="..\..\src\ballistica\python\class\python_class_session_player.h" />
<ClCompile Include="..\..\src\ballistica\python\class\python_class_sound.cc" />
<ClInclude Include="..\..\src\ballistica\python\class\python_class_sound.h" />
<ClCompile Include="..\..\src\ballistica\python\class\python_class_texture.cc" />
<ClInclude Include="..\..\src\ballistica\python\class\python_class_texture.h" />
<ClCompile Include="..\..\src\ballistica\python\class\python_class_timer.cc" />
<ClInclude Include="..\..\src\ballistica\python\class\python_class_timer.h" />
<ClCompile Include="..\..\src\ballistica\python\class\python_class_vec3.cc" />
<ClInclude Include="..\..\src\ballistica\python\class\python_class_vec3.h" />
<ClCompile Include="..\..\src\ballistica\python\class\python_class_widget.cc" />
<ClInclude Include="..\..\src\ballistica\python\class\python_class_widget.h" />
<ClCompile Include="..\..\src\ballistica\python\methods\python_methods_app.cc" />
<ClInclude Include="..\..\src\ballistica\python\methods\python_methods_app.h" />
<ClCompile Include="..\..\src\ballistica\python\methods\python_methods_assets.cc" />
<ClInclude Include="..\..\src\ballistica\python\methods\python_methods_assets.h" />
<ClCompile Include="..\..\src\ballistica\python\methods\python_methods_gameplay.cc" />
<ClInclude Include="..\..\src\ballistica\python\methods\python_methods_gameplay.h" />
<ClCompile Include="..\..\src\ballistica\python\methods\python_methods_graphics.cc" />
<ClInclude Include="..\..\src\ballistica\python\methods\python_methods_graphics.h" />
<ClCompile Include="..\..\src\ballistica\python\methods\python_methods_input.cc" />
<ClInclude Include="..\..\src\ballistica\python\methods\python_methods_input.h" />
<ClCompile Include="..\..\src\ballistica\python\methods\python_methods_networking.cc" />
<ClInclude Include="..\..\src\ballistica\python\methods\python_methods_networking.h" />
<ClCompile Include="..\..\src\ballistica\python\methods\python_methods_system.cc" />
<ClInclude Include="..\..\src\ballistica\python\methods\python_methods_system.h" />
<ClCompile Include="..\..\src\ballistica\python\methods\python_methods_ui.cc" />
<ClInclude Include="..\..\src\ballistica\python\methods\python_methods_ui.h" />
<ClCompile Include="..\..\src\ballistica\python\python.cc" />
<ClInclude Include="..\..\src\ballistica\python\python.h" />
<ClCompile Include="..\..\src\ballistica\python\python_command.cc" />
<ClInclude Include="..\..\src\ballistica\python\python_command.h" />
<ClCompile Include="..\..\src\ballistica\python\python_context_call.cc" />
<ClInclude Include="..\..\src\ballistica\python\python_context_call.h" />
<ClInclude Include="..\..\src\ballistica\python\python_context_call_runnable.h" />
<ClCompile Include="..\..\src\ballistica\python\python_ref.cc" />
<ClInclude Include="..\..\src\ballistica\python\python_ref.h" />
<ClInclude Include="..\..\src\ballistica\python\python_sys.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\anim_curve_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\anim_curve_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\bomb_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\bomb_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\combine_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\combine_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\explosion_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\explosion_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\flag_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\flag_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\flash_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\flash_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\globals_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\globals_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\image_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\image_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\light_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\light_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\locator_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\locator_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\math_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\math_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\node_attribute.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\node_attribute.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\node_attribute_connection.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\node_attribute_connection.h" />
<ClInclude Include="..\..\src\ballistica\scene\node\node_type.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\null_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\null_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\player_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\player_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\prop_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\prop_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\region_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\region_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\scorch_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\scorch_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\session_globals_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\session_globals_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\shield_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\shield_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\sound_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\sound_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\spaz_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\spaz_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\terrain_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\terrain_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\text_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\text_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\texture_sequence_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\texture_sequence_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\node\time_display_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene\node\time_display_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\scene.cc" />
<ClInclude Include="..\..\src\ballistica\scene\scene.h" />
<ClCompile Include="..\..\src\ballistica\scene\scene_stream.cc" />
<ClInclude Include="..\..\src\ballistica\scene\scene_stream.h" />
<ClCompile Include="..\..\src\ballistica\scene\v1\scene_v1.cc" />
<ClInclude Include="..\..\src\ballistica\scene\v1\scene_v1.h" />
<ClCompile Include="..\..\src\ballistica\ui\console.cc" />
<ClInclude Include="..\..\src\ballistica\ui\console.h" />
<ClCompile Include="..\..\src\ballistica\ui\root_ui.cc" />
<ClInclude Include="..\..\src\ballistica\ui\root_ui.h" />
<ClCompile Include="..\..\src\ballistica\ui\ui.cc" />
<ClInclude Include="..\..\src\ballistica\ui\ui.h" />
<ClCompile Include="..\..\src\ballistica\ui\widget\button_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui\widget\button_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui\widget\check_box_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui\widget\check_box_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui\widget\column_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui\widget\column_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui\widget\container_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui\widget\container_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui\widget\h_scroll_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui\widget\h_scroll_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui\widget\image_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui\widget\image_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui\widget\root_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui\widget\root_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui\widget\row_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui\widget\row_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui\widget\scroll_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui\widget\scroll_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui\widget\stack_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui\widget\stack_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui\widget\text_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui\widget\text_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui\widget\widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui\widget\widget.h" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceAABB.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceContainer.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceHPoint.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceIndexedTriangle.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceMatrix3x3.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceMatrix4x4.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceOBB.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IcePlane.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IcePoint.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceRandom.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceRay.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceRevisitedRadix.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceSegment.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceTriangle.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceUtils.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_array.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_cylinder_box.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_cylinder_plane.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_cylinder_sphere.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_cylinder_trimesh.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_kernel.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_quadtreespace.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_sapspace.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_space.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_std.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_transform.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_trimesh.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_trimesh_box.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_trimesh_ccylinder.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_trimesh_distance.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_trimesh_plane.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_trimesh_ray.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_trimesh_sphere.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_trimesh_trimesh.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_util.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_error.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_export-diff.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_fastdot.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_fastldlt.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_fastlsolve.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_fastltsolve.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_joint.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_lcp.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_mass.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_mat.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_math.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_matrix.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_memory.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_misc.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_obstack.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_quickstep.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_rotation.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_step.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_stepfast.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_timer.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_util.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\Opcode.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_AABBCollider.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_AABBTree.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_BaseModel.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_BoxPruning.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_Collider.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_LSSCollider.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_MeshInterface.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_Model.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_OBBCollider.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_OptimizedTree.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_Picking.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_PlanesCollider.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_RayCollider.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_SphereCollider.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_SweepAndPrune.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_TreeBuilders.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_TreeCollider.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_VolumeCollider.cpp" />
<ClCompile Include="..\..\src\external\qr_code_generator\QrCode.cpp" />
<ClCompile Include="stdafx.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
</ClCompile>
<ClInclude Include="stdafx.h" />
<ClInclude Include="targetver.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

1
ballisticakit-cmake/.idea/.name generated Normal file
View File

@ -0,0 +1 @@
BallisticaKit

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<module classpath="CMake" type="CPP_MODULE" version="4">
<component name="FacetManager">
<facet type="Python" name="Python facet">
<configuration sdkName="Python 3.10" />
</facet>
</component>
</module>

View File

@ -1,6 +1,7 @@
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<option name="LINE_SEPARATOR" value="&#10;" />
<option name="RIGHT_MARGIN" value="80" />
<clangFormatSettings>
<option name="ENABLED" value="true" />
</clangFormatSettings>

View File

@ -2,6 +2,7 @@
<dictionary name="ericf">
<words>
<w>NOMINMAX</w>
<w>_babase</w>
<w>aabb</w>
<w>aate</w>
<w>abcdefghijklmnopqrstuvwxyz</w>
@ -71,12 +72,15 @@
<w>apost</w>
<w>appcomponent</w>
<w>appconfig</w>
<w>appmode</w>
<w>appname</w>
<w>appnameupper</w>
<w>appnow</w>
<w>appspot</w>
<w>appstate</w>
<w>apptime</w>
<w>apptimer</w>
<w>apptimers</w>
<w>argsjoined</w>
<w>argstr</w>
<w>armcap</w>
@ -98,22 +102,31 @@
<w>awaitable</w>
<w>awaitables</w>
<w>axismotion</w>
<w>babase</w>
<w>babasemeta</w>
<w>backgrounded</w>
<w>backgrounding</w>
<w>backporting</w>
<w>backtraces</w>
<w>backwin</w>
<w>baclassic</w>
<w>baenv</w>
<w>bainternal</w>
<w>ballistica</w>
<w>ballisticacore</w>
<w>ballistica's</w>
<w>ballisticakit</w>
<w>bamasteraddr</w>
<w>bamasterlegacy</w>
<w>bameta</w>
<w>bametainternal</w>
<w>baplus</w>
<w>barebones</w>
<w>bargs</w>
<w>bascenev</w>
<w>baseaddr</w>
<w>baseimps</w>
<w>basetime</w>
<w>basetimer</w>
<w>basetype</w>
<w>basicsize</w>
<w>basn</w>
@ -122,8 +135,10 @@
<w>basnmessagesender</w>
<w>basntoclient</w>
<w>bastd</w>
<w>batemplatefs</w>
<w>batocloud</w>
<w>batoolsinternal</w>
<w>bauiv</w>
<w>baworker</w>
<w>bbbb</w>
<w>bbbbb</w>
@ -137,6 +152,8 @@
<w>bgra</w>
<w>bigendian</w>
<w>bilinear</w>
<w>bindcode</w>
<w>bindvals</w>
<w>binpow</w>
<w>bitcount</w>
<w>bitdepth</w>
@ -155,15 +172,18 @@
<w>blurscale</w>
<w>bmas</w>
<w>bmasl</w>
<w>bmcjphh</w>
<w>bname</w>
<w>bodyid</w>
<w>bodypart</w>
<w>bodyptr</w>
<w>bombsquad</w>
<w>bookmarkable</w>
<w>bools</w>
<w>boolval</w>
<w>boostrapping</w>
<w>bootconfig</w>
<w>bootlog</w>
<w>bootstrappy</w>
<w>bootsubprocess</w>
<w>bouyancy</w>
@ -281,6 +301,7 @@
<w>copystringsfile</w>
<w>copyswiftlibs</w>
<w>coreaudio</w>
<w>correcthash</w>
<w>coulda</w>
<w>cout</w>
<w>cpel</w>
@ -336,6 +357,7 @@
<w>deadcode</w>
<w>deallocated</w>
<w>deallocation</w>
<w>debugger's</w>
<w>deek</w>
<w>deinit</w>
<w>deltaval</w>
@ -343,12 +365,15 @@
<w>demangled</w>
<w>demangling</w>
<w>denom</w>
<w>depchecks</w>
<w>dereferencing</w>
<w>deregistering</w>
<w>deregistration</w>
<w>dernit</w>
<w>desctype</w>
<w>destdir</w>
<w>dets</w>
<w>devicename</w>
<w>dfba</w>
<w>dffc</w>
<w>dfff</w>
@ -359,6 +384,8 @@
<w>dinl</w>
<w>dirfilter</w>
<w>dirslash</w>
<w>displaytime</w>
<w>displaytimer</w>
<w>dlfcn</w>
<w>dlife</w>
<w>dliwk</w>
@ -472,6 +499,7 @@
<w>fdirx</w>
<w>fdiry</w>
<w>fdirz</w>
<w>featureset</w>
<w>fentry</w>
<w>fenv</w>
<w>fesetround</w>
@ -557,6 +585,7 @@
<w>getbits</w>
<w>getbitshigh</w>
<w>getcollidemodel</w>
<w>getcollisionmesh</w>
<w>getdata</w>
<w>getenv</w>
<w>gethostbyname</w>
@ -567,6 +596,7 @@
<w>getline</w>
<w>getlog</w>
<w>getlogin</w>
<w>getmesh</w>
<w>getmodel</w>
<w>getname</w>
<w>getnodes</w>
@ -585,10 +615,12 @@
<w>getrefs</w>
<w>getres</w>
<w>getsession</w>
<w>getsimplesound</w>
<w>getsound</w>
<w>gettexture</w>
<w>gettime</w>
<w>gettotalrefcount</w>
<w>getuisound</w>
<w>gles</w>
<w>glext</w>
<w>globalns</w>
@ -609,6 +641,7 @@
<w>halign</w>
<w>handfull</w>
<w>handlemessage</w>
<w>hastouchscreen</w>
<w>hatmotion</w>
<w>haveint</w>
<w>havn't</w>
@ -627,6 +660,7 @@
<w>hostinfo</w>
<w>hostingconfig</w>
<w>hostingstate</w>
<w>hostsession</w>
<w>hotkeys</w>
<w>hotplug</w>
<w>hscrollwidget</w>
@ -646,6 +680,7 @@
<w>ifaddrs</w>
<w>ifdebug</w>
<w>iiiiisss</w>
<w>iiiiisssi</w>
<w>iircade</w>
<w>illum</w>
<w>ilock</w>
@ -728,6 +763,7 @@
<w>kwds</w>
<w>kxyz</w>
<w>langutils</w>
<w>lanst</w>
<w>lantinga</w>
<w>largeish</w>
<w>larmbeast</w>
@ -821,6 +857,7 @@
<w>memchr</w>
<w>memcpy</w>
<w>meryu</w>
<w>mesh</w>
<w>meshdata</w>
<w>messagebox</w>
<w>messagetype</w>
@ -829,6 +866,7 @@
<w>meth</w>
<w>mhbegin</w>
<w>mhend</w>
<w>microsecs</w>
<w>mikirog</w>
<w>millisecs</w>
<w>minelem</w>
@ -942,8 +980,10 @@
<w>nvidia</w>
<w>nyffenegger</w>
<w>objb</w>
<w>objcount</w>
<w>objexists</w>
<w>objid</w>
<w>objset</w>
<w>objsizes</w>
<w>objtoyaml</w>
<w>objtypes</w>
@ -957,6 +997,7 @@
<w>oiffsss</w>
<w>okbtn</w>
<w>oldbook</w>
<w>olde</w>
<w>oldname</w>
<w>oldtoken</w>
<w>onslaughtplug</w>
@ -1045,6 +1086,7 @@
<w>postinit</w>
<w>postrun</w>
<w>powerup</w>
<w>pppp</w>
<w>ppre</w>
<w>pptabcom</w>
<w>prab</w>
@ -1052,6 +1094,7 @@
<w>precompiling</w>
<w>preconfig</w>
<w>predeclare</w>
<w>predeclares</w>
<w>prefs</w>
<w>preloaded</w>
<w>preloads</w>
@ -1082,6 +1125,7 @@
<w>prolly</w>
<w>proxykey</w>
<w>prtb</w>
<w>prunetask</w>
<w>psmx</w>
<w>pspec</w>
<w>psps</w>
@ -1092,6 +1136,7 @@
<w>ptypename</w>
<w>pubdeviceid</w>
<w>publictab</w>
<w>pubsync</w>
<w>pubtargets</w>
<w>pulseaudio</w>
<w>punchmomentumlinear</w>
@ -1112,6 +1157,7 @@
<w>pyexctype</w>
<w>pyhome</w>
<w>pylib</w>
<w>pylibpath</w>
<w>pyobj</w>
<w>pyobjs</w>
<w>pythondevmode</w>
@ -1133,6 +1179,7 @@
<w>raspbian</w>
<w>rasterizer</w>
<w>rawkey</w>
<w>rayd</w>
<w>rcade</w>
<w>rcva</w>
<w>rcvs</w>
@ -1143,6 +1190,7 @@
<w>reallocations</w>
<w>realtimers</w>
<w>recalc</w>
<w>reconverge</w>
<w>recursed</w>
<w>recursing</w>
<w>recv</w>
@ -1165,6 +1213,7 @@
<w>rentry</w>
<w>rené</w>
<w>reprfunc</w>
<w>repro</w>
<w>rerase</w>
<w>resends</w>
<w>resetbtn</w>
@ -1209,6 +1258,7 @@
<w>sbytes</w>
<w>scancode</w>
<w>scanresults</w>
<w>scenepacket</w>
<w>scenetime</w>
<w>screenmessage</w>
<w>scrollwidget</w>
@ -1376,12 +1426,15 @@
<w>telefonaktiebolaget</w>
<w>teleported</w>
<w>teleporting</w>
<w>templatefs</w>
<w>tempvec</w>
<w>tenum</w>
<w>testint</w>
<w>testinternalcapi</w>
<w>testnode</w>
<w>testresponse</w>
<w>testrunnable</w>
<w>testtask</w>
<w>texel</w>
<w>texqualstr</w>
<w>textcolor</w>
@ -1418,6 +1471,7 @@
<w>tournamentbutton</w>
<w>toutf</w>
<w>tpartial</w>
<w>tpexl</w>
<w>tpimport</w>
<w>tpimportex</w>
<w>tpimports</w>
@ -1473,6 +1527,7 @@
<w>uninited</w>
<w>unmanaged</w>
<w>unpaused</w>
<w>unpausing</w>
<w>unplayed</w>
<w>unpremultiply</w>
<w>unsignaled</w>
@ -1528,6 +1583,7 @@
<w>weakref</w>
<w>weakthis</w>
<w>weakwin</w>
<w>webbrowser</w>
<w>weeeird</w>
<w>welp</w>
<w>whaaaaaaa</w>

View File

@ -5,29 +5,23 @@
</component>
<component name="CidrRootsConfiguration">
<excludeRoots>
<file path="$PROJECT_DIR$/.idea" />
<file path="$PROJECT_DIR$/../.assetcache" />
<file path="$PROJECT_DIR$/../.cache" />
<file path="$PROJECT_DIR$/../.idea" />
<file path="$PROJECT_DIR$/../.mypy_cache" />
<file path="$PROJECT_DIR$/../.pytest_cache" />
<file path="$PROJECT_DIR$/../assets" />
<file path="$PROJECT_DIR$/../ballisticacore-android" />
<file path="$PROJECT_DIR$/../.idea" />
<file path="$PROJECT_DIR$/../src/external" />
<file path="$PROJECT_DIR$/../src/external/darwiinremote-ef" />
<file path="$PROJECT_DIR$/../src/external/libogg-1.2.2" />
<file path="$PROJECT_DIR$/../src/external/libvorbis-1.3.2" />
<file path="$PROJECT_DIR$/../src/external/openal-soft-1.15.1" />
<file path="$PROJECT_DIR$/../src/external/python-android" />
<file path="$PROJECT_DIR$/../src/external/python-android-debug" />
<file path="$PROJECT_DIR$/../src/external/python-apple" />
<file path="$PROJECT_DIR$/../src/external/python-apple-debug" />
<file path="$PROJECT_DIR$/../src/external/sdl-1.2.14_ef" />
<file path="$PROJECT_DIR$/../src/external/sdl2-ef_android" />
<file path="$PROJECT_DIR$/../src/external/sdl2-ef_ios" />
<file path="$PROJECT_DIR$/../src/external/tremor" />
<file path="$PROJECT_DIR$/../src/external/windows" />
<file path="$PROJECT_DIR$/../src/ballistica/generated" />
<file path="$PROJECT_DIR$/../ballisticakit-android" />
<file path="$PROJECT_DIR$/.idea" />
<file path="$PROJECT_DIR$/../ballisticakit-ios.xcodeproj" />
<file path="$PROJECT_DIR$/../ballisticakit-mac.xcodeproj" />
<file path="$PROJECT_DIR$/../ballisticakit-windows" />
<file path="$PROJECT_DIR$/../ballisticakit-xcode" />
<file path="$PROJECT_DIR$/../build" />
<file path="$PROJECT_DIR$/../config" />
<file path="$PROJECT_DIR$/../docs" />
<file path="$PROJECT_DIR$/../resources" />
<file path="$PROJECT_DIR$/../src/assets" />
<file path="$PROJECT_DIR$/../src/ballistica/config/config_android_amazon.h" />
<file path="$PROJECT_DIR$/../src/ballistica/config/config_android_arcade.h" />
<file path="$PROJECT_DIR$/../src/ballistica/config/config_android_cardboard.h" />
@ -48,14 +42,22 @@
<file path="$PROJECT_DIR$/../src/ballistica/config/config_xcode_mac.h" />
<file path="$PROJECT_DIR$/../src/ballistica/config/config_xcode_mac_legacy.h" />
<file path="$PROJECT_DIR$/../src/ballistica/config/config_xcode_tvos.h" />
<file path="$PROJECT_DIR$/../ballisticacore-ios.xcodeproj" />
<file path="$PROJECT_DIR$/../ballisticacore-mac.xcodeproj" />
<file path="$PROJECT_DIR$/../ballisticacore-windows" />
<file path="$PROJECT_DIR$/../ballisticacore-xcode" />
<file path="$PROJECT_DIR$/../build" />
<file path="$PROJECT_DIR$/../config" />
<file path="$PROJECT_DIR$/../docs" />
<file path="$PROJECT_DIR$/../resources" />
<file path="$PROJECT_DIR$/../src/external" />
<file path="$PROJECT_DIR$/../src/external/darwiinremote-ef" />
<file path="$PROJECT_DIR$/../src/external/libogg-1.2.2" />
<file path="$PROJECT_DIR$/../src/external/libvorbis-1.3.2" />
<file path="$PROJECT_DIR$/../src/external/openal-soft-1.15.1" />
<file path="$PROJECT_DIR$/../src/external/python-android" />
<file path="$PROJECT_DIR$/../src/external/python-android-debug" />
<file path="$PROJECT_DIR$/../src/external/python-apple" />
<file path="$PROJECT_DIR$/../src/external/python-apple-debug" />
<file path="$PROJECT_DIR$/../src/external/sdl-1.2.14_ef" />
<file path="$PROJECT_DIR$/../src/external/sdl2-ef_android" />
<file path="$PROJECT_DIR$/../src/external/sdl2-ef_ios" />
<file path="$PROJECT_DIR$/../src/external/tremor" />
<file path="$PROJECT_DIR$/../src/external/windows" />
<file path="$PROJECT_DIR$/../src/meta" />
<file path="$PROJECT_DIR$/../src/resources" />
<file path="$PROJECT_DIR$/../tests" />
<file path="$PROJECT_DIR$/../tools" />
</excludeRoots>
@ -63,4 +65,7 @@
<component name="JavaScriptSettings">
<option name="languageLevel" value="ES6" />
</component>
<component name="PythonCompatibilityInspectionAdvertiser">
<option name="version" value="3" />
</component>
</project>

View File

@ -2,7 +2,7 @@
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/BallisticaCore.iml" filepath="$PROJECT_DIR$/.idea/BallisticaCore.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/BallisticaKit.iml" filepath="$PROJECT_DIR$/.idea/BallisticaKit.iml" />
</modules>
</component>
</project>

View File

@ -0,0 +1,7 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="ballisticakit" type="CMakeRunConfiguration" factoryName="Application" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="BallisticaKit" TARGET_NAME="ballisticakit" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="BallisticaKit" RUN_TARGET_NAME="ballisticakit">
<method v="2">
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
</method>
</configuration>
</component>

View File

@ -0,0 +1,3 @@
<component name="DependencyValidationManager">
<scope name="External" pattern="file[BallisticaKit]:src/external//*" />
</component>

View File

@ -0,0 +1,3 @@
<component name="DependencyValidationManager">
<scope name="Ignored" pattern="file[BallisticaKit]:src/ballistica/config/*&amp;&amp;!file:src/ballistica/config/config_cmake.h&amp;&amp;!file:src/ballistica/config/config_common.h" />
</component>

View File

@ -0,0 +1,773 @@
cmake_minimum_required(VERSION 3.12)
project(BallisticaKit)
include(CheckIncludeFile)
option(HEADLESS "build headless server" OFF)
option(TEST_BUILD "include testing features" OFF)
# Requiring minimum of C++17 currently.
set(CMAKE_CXX_STANDARD 17)
if (APPLE)
# Seems as of Mojave we need to explicitly pull in homebrew paths.
# Just hard-coding recommended homebrew install paths for now.
# Is there a more elegant way to do this?
if (CMAKE_SYSTEM_PROCESSOR MATCHES arm64)
list(APPEND CMAKE_PREFIX_PATH /opt/homebrew)
include_directories("/opt/homebrew/include")
link_directories("/opt/homebrew/lib")
else()
list(APPEND CMAKE_PREFIX_PATH /usr/local)
include_directories("/usr/local/include")
link_directories("/usr/local/lib")
endif()
# On Mac with homebrew it seems that Requesting 3.X when we've got
# 3.(X+1) installed will point us at the 3.(X+1) framework but will attempt
# to load a 3.X library from within it which doesn't exist. So we need
# to be a bit more explicit telling it where to look. Note: this was last
# tested with 3.7; should revisit sometime to make sure still applies.
execute_process(COMMAND "python3.11-config" "--prefix"
OUTPUT_VARIABLE Python_ROOT_DIR
OUTPUT_STRIP_TRAILING_WHITESPACE)
endif ()
find_package (Python 3.11 REQUIRED EXACT COMPONENTS Development)
if (HEADLESS)
add_definitions(-DBA_HEADLESS_BUILD=1)
else ()
find_package(SDL2 QUIET)
if (SDL2_FOUND)
if ("${SDL2_LIBRARIES}" STREQUAL "")
message(WARNING "SDL2_LIBRARIES wasn't set, manually setting to SDL2::SDL2")
set(SDL2_LIBRARIES "SDL2::SDL2")
endif ()
# Getting complaint about space at the end of this on ubuntu16.
string(STRIP "${SDL2_LIBRARIES}" SDL2_LIBRARIES)
else ()
message(FATAL_ERROR "SDL2 not found")
endif ()
find_package(OpenGL REQUIRED)
find_package(OpenAL REQUIRED)
if (APPLE)
# On mac this sets an include path that we don't need since
# we're using the system framework... should clean this up.
set(OPENAL_INCLUDE_DIR "")
endif ()
find_library(OGG_LIBRARY ogg)
find_library(VORBISFILE_LIBRARY vorbisfile)
if (NOT OGG_LIBRARY)
message(FATAL_ERROR "ogg library not found")
endif ()
if (NOT VORBISFILE_LIBRARY)
message(FATAL_ERROR "vorbisfile library not found")
endif ()
set(EXTRA_INCLUDE_DIRS ${OPENGL_INCLUDE_DIRS}
${OPENAL_INCLUDE_DIR} ${SDL2_INCLUDE_DIRS})
set(EXTRA_LIBRARIES ogg vorbisfile ${OPENGL_LIBRARIES} ${OPENAL_LIBRARY})
endif ()
if (TEST_BUILD)
add_definitions(-DBA_TEST_BUILD=1)
endif ()
# Currently seeing warnings about parameter order changing in GCC 7.1
# on Raspberry Pi builds. We never need to care about C++ abi compatibility
# so just silencing them for now. Can maybe remove this later if they stop.
if (CMAKE_CXX_COMPILER_ID MATCHES GNU)
set(CMAKE_CXX_FLAGS
"${CMAKE_CXX_FLAGS} -Wno-psabi")
endif()
set(BA_SRC_ROOT ../src)
include_directories(${BA_SRC_ROOT})
add_compile_options(-include ballistica/shared/buildconfig/buildconfig_cmake.h)
if (CMAKE_BUILD_TYPE MATCHES Debug)
add_definitions(-DBA_DEBUG_BUILD=1)
else ()
# It seems that cmake can choose -O2 sometimes and -O3 sometimes
# for release builds (depending on Release vs RelWithDebInfo, etc).
# Let's keep all our non-debug builds consistent at -O3 for now; can
# revisit if it causes problems.
add_definitions(-O3)
endif ()
set(ODE_SRC_ROOT ${BA_SRC_ROOT}/external/open_dynamics_engine-ef)
add_library(ode
${ODE_SRC_ROOT}/ode/IceAABB.cpp
${ODE_SRC_ROOT}/ode/IceContainer.cpp
${ODE_SRC_ROOT}/ode/IceHPoint.cpp
${ODE_SRC_ROOT}/ode/IceIndexedTriangle.cpp
${ODE_SRC_ROOT}/ode/IceMatrix3x3.cpp
${ODE_SRC_ROOT}/ode/IceMatrix4x4.cpp
${ODE_SRC_ROOT}/ode/IceOBB.cpp
${ODE_SRC_ROOT}/ode/IcePlane.cpp
${ODE_SRC_ROOT}/ode/IcePoint.cpp
${ODE_SRC_ROOT}/ode/IceRandom.cpp
${ODE_SRC_ROOT}/ode/IceRay.cpp
${ODE_SRC_ROOT}/ode/IceRevisitedRadix.cpp
${ODE_SRC_ROOT}/ode/IceSegment.cpp
${ODE_SRC_ROOT}/ode/IceTriangle.cpp
${ODE_SRC_ROOT}/ode/IceUtils.cpp
${ODE_SRC_ROOT}/ode/ode.cpp
${ODE_SRC_ROOT}/ode/ode_array.cpp
${ODE_SRC_ROOT}/ode/ode_collision_cylinder_box.cpp
${ODE_SRC_ROOT}/ode/ode_collision_cylinder_plane.cpp
${ODE_SRC_ROOT}/ode/ode_collision_cylinder_sphere.cpp
${ODE_SRC_ROOT}/ode/ode_collision_cylinder_trimesh.cpp
${ODE_SRC_ROOT}/ode/ode_collision_kernel.cpp
${ODE_SRC_ROOT}/ode/ode_collision_quadtreespace.cpp
${ODE_SRC_ROOT}/ode/ode_collision_sapspace.cpp
${ODE_SRC_ROOT}/ode/ode_collision_space.cpp
${ODE_SRC_ROOT}/ode/ode_collision_std.cpp
${ODE_SRC_ROOT}/ode/ode_collision_transform.cpp
${ODE_SRC_ROOT}/ode/ode_collision_trimesh.cpp
${ODE_SRC_ROOT}/ode/ode_collision_trimesh_box.cpp
${ODE_SRC_ROOT}/ode/ode_collision_trimesh_ccylinder.cpp
${ODE_SRC_ROOT}/ode/ode_collision_trimesh_distance.cpp
${ODE_SRC_ROOT}/ode/ode_collision_trimesh_plane.cpp
${ODE_SRC_ROOT}/ode/ode_collision_trimesh_ray.cpp
${ODE_SRC_ROOT}/ode/ode_collision_trimesh_sphere.cpp
${ODE_SRC_ROOT}/ode/ode_collision_trimesh_trimesh.cpp
${ODE_SRC_ROOT}/ode/ode_collision_util.cpp
${ODE_SRC_ROOT}/ode/ode_error.cpp
${ODE_SRC_ROOT}/ode/ode_export-diff.cpp
${ODE_SRC_ROOT}/ode/ode_fastdot.cpp
${ODE_SRC_ROOT}/ode/ode_fastldlt.cpp
${ODE_SRC_ROOT}/ode/ode_fastlsolve.cpp
${ODE_SRC_ROOT}/ode/ode_fastltsolve.cpp
${ODE_SRC_ROOT}/ode/ode_joint.cpp
${ODE_SRC_ROOT}/ode/ode_lcp.cpp
${ODE_SRC_ROOT}/ode/ode_mass.cpp
${ODE_SRC_ROOT}/ode/ode_mat.cpp
${ODE_SRC_ROOT}/ode/ode_math.cpp
${ODE_SRC_ROOT}/ode/ode_matrix.cpp
${ODE_SRC_ROOT}/ode/ode_memory.cpp
${ODE_SRC_ROOT}/ode/ode_misc.cpp
${ODE_SRC_ROOT}/ode/ode_obstack.cpp
${ODE_SRC_ROOT}/ode/ode_quickstep.cpp
${ODE_SRC_ROOT}/ode/ode_rotation.cpp
${ODE_SRC_ROOT}/ode/ode_step.cpp
${ODE_SRC_ROOT}/ode/ode_stepfast.cpp
${ODE_SRC_ROOT}/ode/ode_timer.cpp
${ODE_SRC_ROOT}/ode/ode_util.cpp
${ODE_SRC_ROOT}/ode/OPC_AABBCollider.cpp
${ODE_SRC_ROOT}/ode/OPC_AABBTree.cpp
${ODE_SRC_ROOT}/ode/OPC_BaseModel.cpp
${ODE_SRC_ROOT}/ode/OPC_BoxPruning.cpp
${ODE_SRC_ROOT}/ode/OPC_Collider.cpp
${ODE_SRC_ROOT}/ode/OPC_HybridModel.cpp
${ODE_SRC_ROOT}/ode/OPC_LSSCollider.cpp
${ODE_SRC_ROOT}/ode/OPC_MeshInterface.cpp
${ODE_SRC_ROOT}/ode/OPC_Model.cpp
${ODE_SRC_ROOT}/ode/OPC_OBBCollider.cpp
${ODE_SRC_ROOT}/ode/OPC_OptimizedTree.cpp
${ODE_SRC_ROOT}/ode/OPC_PlanesCollider.cpp
${ODE_SRC_ROOT}/ode/OPC_RayCollider.cpp
${ODE_SRC_ROOT}/ode/OPC_SphereCollider.cpp
${ODE_SRC_ROOT}/ode/OPC_SweepAndPrune.cpp
${ODE_SRC_ROOT}/ode/OPC_TreeBuilders.cpp
${ODE_SRC_ROOT}/ode/OPC_TreeCollider.cpp
${ODE_SRC_ROOT}/ode/OPC_VolumeCollider.cpp
${ODE_SRC_ROOT}/ode/Opcode.cpp
)
target_include_directories(ode PRIVATE ${ODE_SRC_ROOT})
# NOTE: There used to be an issue with optimized GCC builds where mesh
# collisions would fail randomly, leading to characters falling through
# floors somewhat regularly. For this reason I was limiting optimization to
# -O1 for the rigid body library. However, as of April 2021, all seems
# well when testing on arm64 and x86-64 linux builds. (I think)
# The last time I remember seeing this bug was around 2016 I believe, but I
# haven't looked for it since. Perhaps GCC was fixed or perhaps the error
# was limited to 32 bit x86 builds; in either case we should be good, as
# we're no longer building any 32 bit x86 builds using GCC.
# Keeping this in here commented out just in case it rears its ugly head
# again though.
# if (CMAKE_BUILD_TYPE MATCHES Release)
# if (CMAKE_CXX_COMPILER_ID MATCHES GNU)
# target_compile_options(ode PRIVATE -O1)
# endif()
# endif ()
# BallisticaKit binary.
add_executable(ballisticakit
${BA_SRC_ROOT}/external/qr_code_generator/QrCode.cpp
# AUTOGENERATED_PUBLIC_BEGIN (this section is managed by the "update_project" tool)
${BA_SRC_ROOT}/ballistica/base/app/app.cc
${BA_SRC_ROOT}/ballistica/base/app/app.h
${BA_SRC_ROOT}/ballistica/base/app/app_config.cc
${BA_SRC_ROOT}/ballistica/base/app/app_config.h
${BA_SRC_ROOT}/ballistica/base/app/app_headless.cc
${BA_SRC_ROOT}/ballistica/base/app/app_headless.h
${BA_SRC_ROOT}/ballistica/base/app/app_mode.cc
${BA_SRC_ROOT}/ballistica/base/app/app_mode.h
${BA_SRC_ROOT}/ballistica/base/app/app_mode_empty.cc
${BA_SRC_ROOT}/ballistica/base/app/app_mode_empty.h
${BA_SRC_ROOT}/ballistica/base/app/app_vr.cc
${BA_SRC_ROOT}/ballistica/base/app/app_vr.h
${BA_SRC_ROOT}/ballistica/base/app/sdl_app.cc
${BA_SRC_ROOT}/ballistica/base/app/sdl_app.h
${BA_SRC_ROOT}/ballistica/base/app/stress_test.cc
${BA_SRC_ROOT}/ballistica/base/app/stress_test.h
${BA_SRC_ROOT}/ballistica/base/assets/asset.cc
${BA_SRC_ROOT}/ballistica/base/assets/asset.h
${BA_SRC_ROOT}/ballistica/base/assets/assets.cc
${BA_SRC_ROOT}/ballistica/base/assets/assets.h
${BA_SRC_ROOT}/ballistica/base/assets/assets_server.cc
${BA_SRC_ROOT}/ballistica/base/assets/assets_server.h
${BA_SRC_ROOT}/ballistica/base/assets/collision_mesh_asset.cc
${BA_SRC_ROOT}/ballistica/base/assets/collision_mesh_asset.h
${BA_SRC_ROOT}/ballistica/base/assets/data_asset.cc
${BA_SRC_ROOT}/ballistica/base/assets/data_asset.h
${BA_SRC_ROOT}/ballistica/base/assets/mesh_asset.cc
${BA_SRC_ROOT}/ballistica/base/assets/mesh_asset.h
${BA_SRC_ROOT}/ballistica/base/assets/mesh_asset_renderer_data.h
${BA_SRC_ROOT}/ballistica/base/assets/sound_asset.cc
${BA_SRC_ROOT}/ballistica/base/assets/sound_asset.h
${BA_SRC_ROOT}/ballistica/base/assets/texture_asset.cc
${BA_SRC_ROOT}/ballistica/base/assets/texture_asset.h
${BA_SRC_ROOT}/ballistica/base/assets/texture_asset_preload_data.cc
${BA_SRC_ROOT}/ballistica/base/assets/texture_asset_preload_data.h
${BA_SRC_ROOT}/ballistica/base/assets/texture_asset_renderer_data.h
${BA_SRC_ROOT}/ballistica/base/audio/al_sys.cc
${BA_SRC_ROOT}/ballistica/base/audio/al_sys.h
${BA_SRC_ROOT}/ballistica/base/audio/audio.cc
${BA_SRC_ROOT}/ballistica/base/audio/audio.h
${BA_SRC_ROOT}/ballistica/base/audio/audio_server.cc
${BA_SRC_ROOT}/ballistica/base/audio/audio_server.h
${BA_SRC_ROOT}/ballistica/base/audio/audio_source.cc
${BA_SRC_ROOT}/ballistica/base/audio/audio_source.h
${BA_SRC_ROOT}/ballistica/base/audio/audio_streamer.cc
${BA_SRC_ROOT}/ballistica/base/audio/audio_streamer.h
${BA_SRC_ROOT}/ballistica/base/audio/ogg_stream.cc
${BA_SRC_ROOT}/ballistica/base/audio/ogg_stream.h
${BA_SRC_ROOT}/ballistica/base/base.cc
${BA_SRC_ROOT}/ballistica/base/base.h
${BA_SRC_ROOT}/ballistica/base/dynamics/bg/bg_dynamics.cc
${BA_SRC_ROOT}/ballistica/base/dynamics/bg/bg_dynamics.h
${BA_SRC_ROOT}/ballistica/base/dynamics/bg/bg_dynamics_draw_snapshot.h
${BA_SRC_ROOT}/ballistica/base/dynamics/bg/bg_dynamics_fuse.cc
${BA_SRC_ROOT}/ballistica/base/dynamics/bg/bg_dynamics_fuse.h
${BA_SRC_ROOT}/ballistica/base/dynamics/bg/bg_dynamics_fuse_data.h
${BA_SRC_ROOT}/ballistica/base/dynamics/bg/bg_dynamics_height_cache.cc
${BA_SRC_ROOT}/ballistica/base/dynamics/bg/bg_dynamics_height_cache.h
${BA_SRC_ROOT}/ballistica/base/dynamics/bg/bg_dynamics_server.cc
${BA_SRC_ROOT}/ballistica/base/dynamics/bg/bg_dynamics_server.h
${BA_SRC_ROOT}/ballistica/base/dynamics/bg/bg_dynamics_shadow.cc
${BA_SRC_ROOT}/ballistica/base/dynamics/bg/bg_dynamics_shadow.h
${BA_SRC_ROOT}/ballistica/base/dynamics/bg/bg_dynamics_shadow_data.h
${BA_SRC_ROOT}/ballistica/base/dynamics/bg/bg_dynamics_volume_light.cc
${BA_SRC_ROOT}/ballistica/base/dynamics/bg/bg_dynamics_volume_light.h
${BA_SRC_ROOT}/ballistica/base/dynamics/bg/bg_dynamics_volume_light_data.h
${BA_SRC_ROOT}/ballistica/base/dynamics/collision_cache.cc
${BA_SRC_ROOT}/ballistica/base/dynamics/collision_cache.h
${BA_SRC_ROOT}/ballistica/base/graphics/component/empty_component.h
${BA_SRC_ROOT}/ballistica/base/graphics/component/object_component.cc
${BA_SRC_ROOT}/ballistica/base/graphics/component/object_component.h
${BA_SRC_ROOT}/ballistica/base/graphics/component/post_process_component.cc
${BA_SRC_ROOT}/ballistica/base/graphics/component/post_process_component.h
${BA_SRC_ROOT}/ballistica/base/graphics/component/render_component.cc
${BA_SRC_ROOT}/ballistica/base/graphics/component/render_component.h
${BA_SRC_ROOT}/ballistica/base/graphics/component/shield_component.cc
${BA_SRC_ROOT}/ballistica/base/graphics/component/shield_component.h
${BA_SRC_ROOT}/ballistica/base/graphics/component/simple_component.cc
${BA_SRC_ROOT}/ballistica/base/graphics/component/simple_component.h
${BA_SRC_ROOT}/ballistica/base/graphics/component/smoke_component.cc
${BA_SRC_ROOT}/ballistica/base/graphics/component/smoke_component.h
${BA_SRC_ROOT}/ballistica/base/graphics/component/special_component.cc
${BA_SRC_ROOT}/ballistica/base/graphics/component/special_component.h
${BA_SRC_ROOT}/ballistica/base/graphics/component/sprite_component.cc
${BA_SRC_ROOT}/ballistica/base/graphics/component/sprite_component.h
${BA_SRC_ROOT}/ballistica/base/graphics/gl/gl_sys.cc
${BA_SRC_ROOT}/ballistica/base/graphics/gl/gl_sys.h
${BA_SRC_ROOT}/ballistica/base/graphics/gl/renderer_gl.cc
${BA_SRC_ROOT}/ballistica/base/graphics/gl/renderer_gl.h
${BA_SRC_ROOT}/ballistica/base/graphics/graphics.cc
${BA_SRC_ROOT}/ballistica/base/graphics/graphics.h
${BA_SRC_ROOT}/ballistica/base/graphics/graphics_server.cc
${BA_SRC_ROOT}/ballistica/base/graphics/graphics_server.h
${BA_SRC_ROOT}/ballistica/base/graphics/graphics_vr.cc
${BA_SRC_ROOT}/ballistica/base/graphics/graphics_vr.h
${BA_SRC_ROOT}/ballistica/base/graphics/mesh/image_mesh.cc
${BA_SRC_ROOT}/ballistica/base/graphics/mesh/image_mesh.h
${BA_SRC_ROOT}/ballistica/base/graphics/mesh/mesh.h
${BA_SRC_ROOT}/ballistica/base/graphics/mesh/mesh_buffer.h
${BA_SRC_ROOT}/ballistica/base/graphics/mesh/mesh_buffer_base.h
${BA_SRC_ROOT}/ballistica/base/graphics/mesh/mesh_buffer_vertex_simple_full.h
${BA_SRC_ROOT}/ballistica/base/graphics/mesh/mesh_buffer_vertex_smoke_full.h
${BA_SRC_ROOT}/ballistica/base/graphics/mesh/mesh_buffer_vertex_sprite.h
${BA_SRC_ROOT}/ballistica/base/graphics/mesh/mesh_data.cc
${BA_SRC_ROOT}/ballistica/base/graphics/mesh/mesh_data.h
${BA_SRC_ROOT}/ballistica/base/graphics/mesh/mesh_data_client_handle.cc
${BA_SRC_ROOT}/ballistica/base/graphics/mesh/mesh_data_client_handle.h
${BA_SRC_ROOT}/ballistica/base/graphics/mesh/mesh_index_buffer_16.h
${BA_SRC_ROOT}/ballistica/base/graphics/mesh/mesh_index_buffer_32.h
${BA_SRC_ROOT}/ballistica/base/graphics/mesh/mesh_indexed.h
${BA_SRC_ROOT}/ballistica/base/graphics/mesh/mesh_indexed_base.h
${BA_SRC_ROOT}/ballistica/base/graphics/mesh/mesh_indexed_dual_texture_full.h
${BA_SRC_ROOT}/ballistica/base/graphics/mesh/mesh_indexed_object_split.h
${BA_SRC_ROOT}/ballistica/base/graphics/mesh/mesh_indexed_simple_full.h
${BA_SRC_ROOT}/ballistica/base/graphics/mesh/mesh_indexed_simple_split.h
${BA_SRC_ROOT}/ballistica/base/graphics/mesh/mesh_indexed_smoke_full.h
${BA_SRC_ROOT}/ballistica/base/graphics/mesh/mesh_indexed_static_dynamic.h
${BA_SRC_ROOT}/ballistica/base/graphics/mesh/mesh_non_indexed.h
${BA_SRC_ROOT}/ballistica/base/graphics/mesh/mesh_renderer_data.h
${BA_SRC_ROOT}/ballistica/base/graphics/mesh/sprite_mesh.h
${BA_SRC_ROOT}/ballistica/base/graphics/mesh/text_mesh.cc
${BA_SRC_ROOT}/ballistica/base/graphics/mesh/text_mesh.h
${BA_SRC_ROOT}/ballistica/base/graphics/renderer/framebuffer.h
${BA_SRC_ROOT}/ballistica/base/graphics/renderer/render_pass.cc
${BA_SRC_ROOT}/ballistica/base/graphics/renderer/render_pass.h
${BA_SRC_ROOT}/ballistica/base/graphics/renderer/render_target.cc
${BA_SRC_ROOT}/ballistica/base/graphics/renderer/render_target.h
${BA_SRC_ROOT}/ballistica/base/graphics/renderer/renderer.cc
${BA_SRC_ROOT}/ballistica/base/graphics/renderer/renderer.h
${BA_SRC_ROOT}/ballistica/base/graphics/support/area_of_interest.cc
${BA_SRC_ROOT}/ballistica/base/graphics/support/area_of_interest.h
${BA_SRC_ROOT}/ballistica/base/graphics/support/camera.cc
${BA_SRC_ROOT}/ballistica/base/graphics/support/camera.h
${BA_SRC_ROOT}/ballistica/base/graphics/support/frame_def.cc
${BA_SRC_ROOT}/ballistica/base/graphics/support/frame_def.h
${BA_SRC_ROOT}/ballistica/base/graphics/support/net_graph.cc
${BA_SRC_ROOT}/ballistica/base/graphics/support/net_graph.h
${BA_SRC_ROOT}/ballistica/base/graphics/support/render_command_buffer.h
${BA_SRC_ROOT}/ballistica/base/graphics/text/font_page_map_data.h
${BA_SRC_ROOT}/ballistica/base/graphics/text/text_graphics.cc
${BA_SRC_ROOT}/ballistica/base/graphics/text/text_graphics.h
${BA_SRC_ROOT}/ballistica/base/graphics/text/text_group.cc
${BA_SRC_ROOT}/ballistica/base/graphics/text/text_group.h
${BA_SRC_ROOT}/ballistica/base/graphics/text/text_packer.cc
${BA_SRC_ROOT}/ballistica/base/graphics/text/text_packer.h
${BA_SRC_ROOT}/ballistica/base/graphics/texture/dds.cc
${BA_SRC_ROOT}/ballistica/base/graphics/texture/dds.h
${BA_SRC_ROOT}/ballistica/base/graphics/texture/ktx.cc
${BA_SRC_ROOT}/ballistica/base/graphics/texture/ktx.h
${BA_SRC_ROOT}/ballistica/base/graphics/texture/pvr.cc
${BA_SRC_ROOT}/ballistica/base/graphics/texture/pvr.h
${BA_SRC_ROOT}/ballistica/base/input/device/input_device.cc
${BA_SRC_ROOT}/ballistica/base/input/device/input_device.h
${BA_SRC_ROOT}/ballistica/base/input/device/input_device_delegate.cc
${BA_SRC_ROOT}/ballistica/base/input/device/input_device_delegate.h
${BA_SRC_ROOT}/ballistica/base/input/device/joystick_input.cc
${BA_SRC_ROOT}/ballistica/base/input/device/joystick_input.h
${BA_SRC_ROOT}/ballistica/base/input/device/keyboard_input.cc
${BA_SRC_ROOT}/ballistica/base/input/device/keyboard_input.h
${BA_SRC_ROOT}/ballistica/base/input/device/test_input.cc
${BA_SRC_ROOT}/ballistica/base/input/device/test_input.h
${BA_SRC_ROOT}/ballistica/base/input/device/touch_input.cc
${BA_SRC_ROOT}/ballistica/base/input/device/touch_input.h
${BA_SRC_ROOT}/ballistica/base/input/input.cc
${BA_SRC_ROOT}/ballistica/base/input/input.h
${BA_SRC_ROOT}/ballistica/base/input/support/remote_app_server.cc
${BA_SRC_ROOT}/ballistica/base/input/support/remote_app_server.h
${BA_SRC_ROOT}/ballistica/base/logic/logic.cc
${BA_SRC_ROOT}/ballistica/base/logic/logic.h
${BA_SRC_ROOT}/ballistica/base/networking/network_reader.cc
${BA_SRC_ROOT}/ballistica/base/networking/network_reader.h
${BA_SRC_ROOT}/ballistica/base/networking/network_writer.cc
${BA_SRC_ROOT}/ballistica/base/networking/network_writer.h
${BA_SRC_ROOT}/ballistica/base/networking/networking.cc
${BA_SRC_ROOT}/ballistica/base/networking/networking.h
${BA_SRC_ROOT}/ballistica/base/platform/android/amazon/base_plat_andr_amazon.cc
${BA_SRC_ROOT}/ballistica/base/platform/android/amazon/base_plat_andr_amazon.h
${BA_SRC_ROOT}/ballistica/base/platform/android/base_platform_android.cc
${BA_SRC_ROOT}/ballistica/base/platform/android/base_platform_android.h
${BA_SRC_ROOT}/ballistica/base/platform/android/cardboard/base_pl_an_cardboard.cc
${BA_SRC_ROOT}/ballistica/base/platform/android/cardboard/base_pl_an_cardboard.h
${BA_SRC_ROOT}/ballistica/base/platform/android/google/base_plat_andr_google.cc
${BA_SRC_ROOT}/ballistica/base/platform/android/google/base_plat_andr_google.h
${BA_SRC_ROOT}/ballistica/base/platform/apple/base_platform_apple.cc
${BA_SRC_ROOT}/ballistica/base/platform/apple/base_platform_apple.h
${BA_SRC_ROOT}/ballistica/base/platform/base_platform.cc
${BA_SRC_ROOT}/ballistica/base/platform/base_platform.h
${BA_SRC_ROOT}/ballistica/base/platform/linux/base_platform_linux.cc
${BA_SRC_ROOT}/ballistica/base/platform/linux/base_platform_linux.h
${BA_SRC_ROOT}/ballistica/base/platform/oculus/main_rift.cc
${BA_SRC_ROOT}/ballistica/base/platform/support/min_sdl_key_names.h
${BA_SRC_ROOT}/ballistica/base/platform/windows/base_platform_windows.cc
${BA_SRC_ROOT}/ballistica/base/platform/windows/base_platform_windows.h
${BA_SRC_ROOT}/ballistica/base/platform/windows/base_platform_windows_oculus.cc
${BA_SRC_ROOT}/ballistica/base/platform/windows/base_platform_windows_oculus.h
${BA_SRC_ROOT}/ballistica/base/python/base_python.cc
${BA_SRC_ROOT}/ballistica/base/python/base_python.h
${BA_SRC_ROOT}/ballistica/base/python/class/python_class_app_timer.cc
${BA_SRC_ROOT}/ballistica/base/python/class/python_class_app_timer.h
${BA_SRC_ROOT}/ballistica/base/python/class/python_class_context_call.cc
${BA_SRC_ROOT}/ballistica/base/python/class/python_class_context_call.h
${BA_SRC_ROOT}/ballistica/base/python/class/python_class_context_ref.cc
${BA_SRC_ROOT}/ballistica/base/python/class/python_class_context_ref.h
${BA_SRC_ROOT}/ballistica/base/python/class/python_class_display_timer.cc
${BA_SRC_ROOT}/ballistica/base/python/class/python_class_display_timer.h
${BA_SRC_ROOT}/ballistica/base/python/class/python_class_feature_set_data.cc
${BA_SRC_ROOT}/ballistica/base/python/class/python_class_feature_set_data.h
${BA_SRC_ROOT}/ballistica/base/python/class/python_class_simple_sound.cc
${BA_SRC_ROOT}/ballistica/base/python/class/python_class_simple_sound.h
${BA_SRC_ROOT}/ballistica/base/python/class/python_class_vec3.cc
${BA_SRC_ROOT}/ballistica/base/python/class/python_class_vec3.h
${BA_SRC_ROOT}/ballistica/base/python/methods/python_methods_app.cc
${BA_SRC_ROOT}/ballistica/base/python/methods/python_methods_app.h
${BA_SRC_ROOT}/ballistica/base/python/methods/python_methods_graphics.cc
${BA_SRC_ROOT}/ballistica/base/python/methods/python_methods_graphics.h
${BA_SRC_ROOT}/ballistica/base/python/methods/python_methods_misc.cc
${BA_SRC_ROOT}/ballistica/base/python/methods/python_methods_misc.h
${BA_SRC_ROOT}/ballistica/base/python/support/python_context_call.cc
${BA_SRC_ROOT}/ballistica/base/python/support/python_context_call.h
${BA_SRC_ROOT}/ballistica/base/python/support/python_context_call_runnable.h
${BA_SRC_ROOT}/ballistica/base/support/app_timer.h
${BA_SRC_ROOT}/ballistica/base/support/context.cc
${BA_SRC_ROOT}/ballistica/base/support/context.h
${BA_SRC_ROOT}/ballistica/base/support/huffman.cc
${BA_SRC_ROOT}/ballistica/base/support/huffman.h
${BA_SRC_ROOT}/ballistica/base/support/plus_soft.h
${BA_SRC_ROOT}/ballistica/base/support/stdio_console.cc
${BA_SRC_ROOT}/ballistica/base/support/stdio_console.h
${BA_SRC_ROOT}/ballistica/base/ui/console.cc
${BA_SRC_ROOT}/ballistica/base/ui/console.h
${BA_SRC_ROOT}/ballistica/base/ui/ui.cc
${BA_SRC_ROOT}/ballistica/base/ui/ui.h
${BA_SRC_ROOT}/ballistica/base/ui/widget_message.h
${BA_SRC_ROOT}/ballistica/classic/classic.cc
${BA_SRC_ROOT}/ballistica/classic/classic.h
${BA_SRC_ROOT}/ballistica/classic/python/classic_python.cc
${BA_SRC_ROOT}/ballistica/classic/python/classic_python.h
${BA_SRC_ROOT}/ballistica/classic/python/methods/python_methods_classic.cc
${BA_SRC_ROOT}/ballistica/classic/python/methods/python_methods_classic.h
${BA_SRC_ROOT}/ballistica/classic/support/v1_account.cc
${BA_SRC_ROOT}/ballistica/classic/support/v1_account.h
${BA_SRC_ROOT}/ballistica/core/core.cc
${BA_SRC_ROOT}/ballistica/core/core.h
${BA_SRC_ROOT}/ballistica/core/platform/apple/core_platform_apple.h
${BA_SRC_ROOT}/ballistica/core/platform/core_platform.cc
${BA_SRC_ROOT}/ballistica/core/platform/core_platform.h
${BA_SRC_ROOT}/ballistica/core/platform/linux/core_platform_linux.cc
${BA_SRC_ROOT}/ballistica/core/platform/linux/core_platform_linux.h
${BA_SRC_ROOT}/ballistica/core/platform/support/min_sdl.h
${BA_SRC_ROOT}/ballistica/core/platform/windows/core_platform_windows.cc
${BA_SRC_ROOT}/ballistica/core/platform/windows/core_platform_windows.h
${BA_SRC_ROOT}/ballistica/core/python/core_python.cc
${BA_SRC_ROOT}/ballistica/core/python/core_python.h
${BA_SRC_ROOT}/ballistica/core/support/base_soft.h
${BA_SRC_ROOT}/ballistica/core/support/core_config.cc
${BA_SRC_ROOT}/ballistica/core/support/core_config.h
${BA_SRC_ROOT}/ballistica/scene_v1/assets/scene_asset.cc
${BA_SRC_ROOT}/ballistica/scene_v1/assets/scene_asset.h
${BA_SRC_ROOT}/ballistica/scene_v1/assets/scene_collision_mesh.cc
${BA_SRC_ROOT}/ballistica/scene_v1/assets/scene_collision_mesh.h
${BA_SRC_ROOT}/ballistica/scene_v1/assets/scene_cube_map_texture.cc
${BA_SRC_ROOT}/ballistica/scene_v1/assets/scene_cube_map_texture.h
${BA_SRC_ROOT}/ballistica/scene_v1/assets/scene_data_asset.cc
${BA_SRC_ROOT}/ballistica/scene_v1/assets/scene_data_asset.h
${BA_SRC_ROOT}/ballistica/scene_v1/assets/scene_mesh.cc
${BA_SRC_ROOT}/ballistica/scene_v1/assets/scene_mesh.h
${BA_SRC_ROOT}/ballistica/scene_v1/assets/scene_sound.cc
${BA_SRC_ROOT}/ballistica/scene_v1/assets/scene_sound.h
${BA_SRC_ROOT}/ballistica/scene_v1/assets/scene_texture.cc
${BA_SRC_ROOT}/ballistica/scene_v1/assets/scene_texture.h
${BA_SRC_ROOT}/ballistica/scene_v1/connection/connection.cc
${BA_SRC_ROOT}/ballistica/scene_v1/connection/connection.h
${BA_SRC_ROOT}/ballistica/scene_v1/connection/connection_set.cc
${BA_SRC_ROOT}/ballistica/scene_v1/connection/connection_set.h
${BA_SRC_ROOT}/ballistica/scene_v1/connection/connection_to_client.cc
${BA_SRC_ROOT}/ballistica/scene_v1/connection/connection_to_client.h
${BA_SRC_ROOT}/ballistica/scene_v1/connection/connection_to_client_udp.cc
${BA_SRC_ROOT}/ballistica/scene_v1/connection/connection_to_client_udp.h
${BA_SRC_ROOT}/ballistica/scene_v1/connection/connection_to_host.cc
${BA_SRC_ROOT}/ballistica/scene_v1/connection/connection_to_host.h
${BA_SRC_ROOT}/ballistica/scene_v1/connection/connection_to_host_udp.cc
${BA_SRC_ROOT}/ballistica/scene_v1/connection/connection_to_host_udp.h
${BA_SRC_ROOT}/ballistica/scene_v1/dynamics/collision.h
${BA_SRC_ROOT}/ballistica/scene_v1/dynamics/dynamics.cc
${BA_SRC_ROOT}/ballistica/scene_v1/dynamics/dynamics.h
${BA_SRC_ROOT}/ballistica/scene_v1/dynamics/material/impact_sound_material_action.cc
${BA_SRC_ROOT}/ballistica/scene_v1/dynamics/material/impact_sound_material_action.h
${BA_SRC_ROOT}/ballistica/scene_v1/dynamics/material/material.cc
${BA_SRC_ROOT}/ballistica/scene_v1/dynamics/material/material.h
${BA_SRC_ROOT}/ballistica/scene_v1/dynamics/material/material_action.h
${BA_SRC_ROOT}/ballistica/scene_v1/dynamics/material/material_component.cc
${BA_SRC_ROOT}/ballistica/scene_v1/dynamics/material/material_component.h
${BA_SRC_ROOT}/ballistica/scene_v1/dynamics/material/material_condition_node.cc
${BA_SRC_ROOT}/ballistica/scene_v1/dynamics/material/material_condition_node.h
${BA_SRC_ROOT}/ballistica/scene_v1/dynamics/material/material_context.cc
${BA_SRC_ROOT}/ballistica/scene_v1/dynamics/material/material_context.h
${BA_SRC_ROOT}/ballistica/scene_v1/dynamics/material/node_message_material_action.cc
${BA_SRC_ROOT}/ballistica/scene_v1/dynamics/material/node_message_material_action.h
${BA_SRC_ROOT}/ballistica/scene_v1/dynamics/material/node_mod_material_action.cc
${BA_SRC_ROOT}/ballistica/scene_v1/dynamics/material/node_mod_material_action.h
${BA_SRC_ROOT}/ballistica/scene_v1/dynamics/material/node_user_msg_mat_action.cc
${BA_SRC_ROOT}/ballistica/scene_v1/dynamics/material/node_user_msg_mat_action.h
${BA_SRC_ROOT}/ballistica/scene_v1/dynamics/material/part_mod_material_action.cc
${BA_SRC_ROOT}/ballistica/scene_v1/dynamics/material/part_mod_material_action.h
${BA_SRC_ROOT}/ballistica/scene_v1/dynamics/material/python_call_material_action.cc
${BA_SRC_ROOT}/ballistica/scene_v1/dynamics/material/python_call_material_action.h
${BA_SRC_ROOT}/ballistica/scene_v1/dynamics/material/roll_sound_material_action.cc
${BA_SRC_ROOT}/ballistica/scene_v1/dynamics/material/roll_sound_material_action.h
${BA_SRC_ROOT}/ballistica/scene_v1/dynamics/material/skid_sound_material_action.cc
${BA_SRC_ROOT}/ballistica/scene_v1/dynamics/material/skid_sound_material_action.h
${BA_SRC_ROOT}/ballistica/scene_v1/dynamics/material/sound_material_action.cc
${BA_SRC_ROOT}/ballistica/scene_v1/dynamics/material/sound_material_action.h
${BA_SRC_ROOT}/ballistica/scene_v1/dynamics/part.cc
${BA_SRC_ROOT}/ballistica/scene_v1/dynamics/part.h
${BA_SRC_ROOT}/ballistica/scene_v1/dynamics/rigid_body.cc
${BA_SRC_ROOT}/ballistica/scene_v1/dynamics/rigid_body.h
${BA_SRC_ROOT}/ballistica/scene_v1/node/anim_curve_node.cc
${BA_SRC_ROOT}/ballistica/scene_v1/node/anim_curve_node.h
${BA_SRC_ROOT}/ballistica/scene_v1/node/bomb_node.cc
${BA_SRC_ROOT}/ballistica/scene_v1/node/bomb_node.h
${BA_SRC_ROOT}/ballistica/scene_v1/node/combine_node.cc
${BA_SRC_ROOT}/ballistica/scene_v1/node/combine_node.h
${BA_SRC_ROOT}/ballistica/scene_v1/node/explosion_node.cc
${BA_SRC_ROOT}/ballistica/scene_v1/node/explosion_node.h
${BA_SRC_ROOT}/ballistica/scene_v1/node/flag_node.cc
${BA_SRC_ROOT}/ballistica/scene_v1/node/flag_node.h
${BA_SRC_ROOT}/ballistica/scene_v1/node/flash_node.cc
${BA_SRC_ROOT}/ballistica/scene_v1/node/flash_node.h
${BA_SRC_ROOT}/ballistica/scene_v1/node/globals_node.cc
${BA_SRC_ROOT}/ballistica/scene_v1/node/globals_node.h
${BA_SRC_ROOT}/ballistica/scene_v1/node/image_node.cc
${BA_SRC_ROOT}/ballistica/scene_v1/node/image_node.h
${BA_SRC_ROOT}/ballistica/scene_v1/node/light_node.cc
${BA_SRC_ROOT}/ballistica/scene_v1/node/light_node.h
${BA_SRC_ROOT}/ballistica/scene_v1/node/locator_node.cc
${BA_SRC_ROOT}/ballistica/scene_v1/node/locator_node.h
${BA_SRC_ROOT}/ballistica/scene_v1/node/math_node.cc
${BA_SRC_ROOT}/ballistica/scene_v1/node/math_node.h
${BA_SRC_ROOT}/ballistica/scene_v1/node/node.cc
${BA_SRC_ROOT}/ballistica/scene_v1/node/node.h
${BA_SRC_ROOT}/ballistica/scene_v1/node/node_attribute.cc
${BA_SRC_ROOT}/ballistica/scene_v1/node/node_attribute.h
${BA_SRC_ROOT}/ballistica/scene_v1/node/node_attribute_connection.cc
${BA_SRC_ROOT}/ballistica/scene_v1/node/node_attribute_connection.h
${BA_SRC_ROOT}/ballistica/scene_v1/node/node_type.h
${BA_SRC_ROOT}/ballistica/scene_v1/node/null_node.cc
${BA_SRC_ROOT}/ballistica/scene_v1/node/null_node.h
${BA_SRC_ROOT}/ballistica/scene_v1/node/player_node.cc
${BA_SRC_ROOT}/ballistica/scene_v1/node/player_node.h
${BA_SRC_ROOT}/ballistica/scene_v1/node/prop_node.cc
${BA_SRC_ROOT}/ballistica/scene_v1/node/prop_node.h
${BA_SRC_ROOT}/ballistica/scene_v1/node/region_node.cc
${BA_SRC_ROOT}/ballistica/scene_v1/node/region_node.h
${BA_SRC_ROOT}/ballistica/scene_v1/node/scorch_node.cc
${BA_SRC_ROOT}/ballistica/scene_v1/node/scorch_node.h
${BA_SRC_ROOT}/ballistica/scene_v1/node/session_globals_node.cc
${BA_SRC_ROOT}/ballistica/scene_v1/node/session_globals_node.h
${BA_SRC_ROOT}/ballistica/scene_v1/node/shield_node.cc
${BA_SRC_ROOT}/ballistica/scene_v1/node/shield_node.h
${BA_SRC_ROOT}/ballistica/scene_v1/node/sound_node.cc
${BA_SRC_ROOT}/ballistica/scene_v1/node/sound_node.h
${BA_SRC_ROOT}/ballistica/scene_v1/node/spaz_node.cc
${BA_SRC_ROOT}/ballistica/scene_v1/node/spaz_node.h
${BA_SRC_ROOT}/ballistica/scene_v1/node/terrain_node.cc
${BA_SRC_ROOT}/ballistica/scene_v1/node/terrain_node.h
${BA_SRC_ROOT}/ballistica/scene_v1/node/text_node.cc
${BA_SRC_ROOT}/ballistica/scene_v1/node/text_node.h
${BA_SRC_ROOT}/ballistica/scene_v1/node/texture_sequence_node.cc
${BA_SRC_ROOT}/ballistica/scene_v1/node/texture_sequence_node.h
${BA_SRC_ROOT}/ballistica/scene_v1/node/time_display_node.cc
${BA_SRC_ROOT}/ballistica/scene_v1/node/time_display_node.h
${BA_SRC_ROOT}/ballistica/scene_v1/python/class/python_class_activity_data.cc
${BA_SRC_ROOT}/ballistica/scene_v1/python/class/python_class_activity_data.h
${BA_SRC_ROOT}/ballistica/scene_v1/python/class/python_class_base_timer.cc
${BA_SRC_ROOT}/ballistica/scene_v1/python/class/python_class_base_timer.h
${BA_SRC_ROOT}/ballistica/scene_v1/python/class/python_class_input_device.cc
${BA_SRC_ROOT}/ballistica/scene_v1/python/class/python_class_input_device.h
${BA_SRC_ROOT}/ballistica/scene_v1/python/class/python_class_material.cc
${BA_SRC_ROOT}/ballistica/scene_v1/python/class/python_class_material.h
${BA_SRC_ROOT}/ballistica/scene_v1/python/class/python_class_node.cc
${BA_SRC_ROOT}/ballistica/scene_v1/python/class/python_class_node.h
${BA_SRC_ROOT}/ballistica/scene_v1/python/class/python_class_scene_collision_mesh.cc
${BA_SRC_ROOT}/ballistica/scene_v1/python/class/python_class_scene_collision_mesh.h
${BA_SRC_ROOT}/ballistica/scene_v1/python/class/python_class_scene_data_asset.cc
${BA_SRC_ROOT}/ballistica/scene_v1/python/class/python_class_scene_data_asset.h
${BA_SRC_ROOT}/ballistica/scene_v1/python/class/python_class_scene_mesh.cc
${BA_SRC_ROOT}/ballistica/scene_v1/python/class/python_class_scene_mesh.h
${BA_SRC_ROOT}/ballistica/scene_v1/python/class/python_class_scene_sound.cc
${BA_SRC_ROOT}/ballistica/scene_v1/python/class/python_class_scene_sound.h
${BA_SRC_ROOT}/ballistica/scene_v1/python/class/python_class_scene_texture.cc
${BA_SRC_ROOT}/ballistica/scene_v1/python/class/python_class_scene_texture.h
${BA_SRC_ROOT}/ballistica/scene_v1/python/class/python_class_scene_timer.cc
${BA_SRC_ROOT}/ballistica/scene_v1/python/class/python_class_scene_timer.h
${BA_SRC_ROOT}/ballistica/scene_v1/python/class/python_class_session_data.cc
${BA_SRC_ROOT}/ballistica/scene_v1/python/class/python_class_session_data.h
${BA_SRC_ROOT}/ballistica/scene_v1/python/class/python_class_session_player.cc
${BA_SRC_ROOT}/ballistica/scene_v1/python/class/python_class_session_player.h
${BA_SRC_ROOT}/ballistica/scene_v1/python/methods/python_methods_assets.cc
${BA_SRC_ROOT}/ballistica/scene_v1/python/methods/python_methods_assets.h
${BA_SRC_ROOT}/ballistica/scene_v1/python/methods/python_methods_input.cc
${BA_SRC_ROOT}/ballistica/scene_v1/python/methods/python_methods_input.h
${BA_SRC_ROOT}/ballistica/scene_v1/python/methods/python_methods_networking.cc
${BA_SRC_ROOT}/ballistica/scene_v1/python/methods/python_methods_networking.h
${BA_SRC_ROOT}/ballistica/scene_v1/python/methods/python_methods_scene.cc
${BA_SRC_ROOT}/ballistica/scene_v1/python/methods/python_methods_scene.h
${BA_SRC_ROOT}/ballistica/scene_v1/python/scene_v1_python.cc
${BA_SRC_ROOT}/ballistica/scene_v1/python/scene_v1_python.h
${BA_SRC_ROOT}/ballistica/scene_v1/scene_v1.cc
${BA_SRC_ROOT}/ballistica/scene_v1/scene_v1.h
${BA_SRC_ROOT}/ballistica/scene_v1/support/client_controller_interface.h
${BA_SRC_ROOT}/ballistica/scene_v1/support/client_input_device.cc
${BA_SRC_ROOT}/ballistica/scene_v1/support/client_input_device.h
${BA_SRC_ROOT}/ballistica/scene_v1/support/client_input_device_delegate.cc
${BA_SRC_ROOT}/ballistica/scene_v1/support/client_input_device_delegate.h
${BA_SRC_ROOT}/ballistica/scene_v1/support/client_session.cc
${BA_SRC_ROOT}/ballistica/scene_v1/support/client_session.h
${BA_SRC_ROOT}/ballistica/scene_v1/support/client_session_net.cc
${BA_SRC_ROOT}/ballistica/scene_v1/support/client_session_net.h
${BA_SRC_ROOT}/ballistica/scene_v1/support/client_session_replay.cc
${BA_SRC_ROOT}/ballistica/scene_v1/support/client_session_replay.h
${BA_SRC_ROOT}/ballistica/scene_v1/support/host_activity.cc
${BA_SRC_ROOT}/ballistica/scene_v1/support/host_activity.h
${BA_SRC_ROOT}/ballistica/scene_v1/support/host_session.cc
${BA_SRC_ROOT}/ballistica/scene_v1/support/host_session.h
${BA_SRC_ROOT}/ballistica/scene_v1/support/player.cc
${BA_SRC_ROOT}/ballistica/scene_v1/support/player.h
${BA_SRC_ROOT}/ballistica/scene_v1/support/player_spec.cc
${BA_SRC_ROOT}/ballistica/scene_v1/support/player_spec.h
${BA_SRC_ROOT}/ballistica/scene_v1/support/scene.cc
${BA_SRC_ROOT}/ballistica/scene_v1/support/scene.h
${BA_SRC_ROOT}/ballistica/scene_v1/support/scene_v1_app_mode.cc
${BA_SRC_ROOT}/ballistica/scene_v1/support/scene_v1_app_mode.h
${BA_SRC_ROOT}/ballistica/scene_v1/support/scene_v1_context.cc
${BA_SRC_ROOT}/ballistica/scene_v1/support/scene_v1_context.h
${BA_SRC_ROOT}/ballistica/scene_v1/support/scene_v1_input_device_delegate.cc
${BA_SRC_ROOT}/ballistica/scene_v1/support/scene_v1_input_device_delegate.h
${BA_SRC_ROOT}/ballistica/scene_v1/support/session.cc
${BA_SRC_ROOT}/ballistica/scene_v1/support/session.h
${BA_SRC_ROOT}/ballistica/scene_v1/support/session_stream.cc
${BA_SRC_ROOT}/ballistica/scene_v1/support/session_stream.h
${BA_SRC_ROOT}/ballistica/shared/ballistica.cc
${BA_SRC_ROOT}/ballistica/shared/ballistica.h
${BA_SRC_ROOT}/ballistica/shared/buildconfig/buildconfig_cmake.h
${BA_SRC_ROOT}/ballistica/shared/buildconfig/buildconfig_common.h
${BA_SRC_ROOT}/ballistica/shared/buildconfig/buildconfig_windows_common.h
${BA_SRC_ROOT}/ballistica/shared/buildconfig/buildconfig_windows_generic.h
${BA_SRC_ROOT}/ballistica/shared/buildconfig/buildconfig_windows_headless.h
${BA_SRC_ROOT}/ballistica/shared/foundation/event_loop.cc
${BA_SRC_ROOT}/ballistica/shared/foundation/event_loop.h
${BA_SRC_ROOT}/ballistica/shared/foundation/exception.cc
${BA_SRC_ROOT}/ballistica/shared/foundation/exception.h
${BA_SRC_ROOT}/ballistica/shared/foundation/fatal_error.cc
${BA_SRC_ROOT}/ballistica/shared/foundation/fatal_error.h
${BA_SRC_ROOT}/ballistica/shared/foundation/feature_set_front_end.cc
${BA_SRC_ROOT}/ballistica/shared/foundation/feature_set_front_end.h
${BA_SRC_ROOT}/ballistica/shared/foundation/inline.cc
${BA_SRC_ROOT}/ballistica/shared/foundation/inline.h
${BA_SRC_ROOT}/ballistica/shared/foundation/logging.cc
${BA_SRC_ROOT}/ballistica/shared/foundation/logging.h
${BA_SRC_ROOT}/ballistica/shared/foundation/macros.cc
${BA_SRC_ROOT}/ballistica/shared/foundation/macros.h
${BA_SRC_ROOT}/ballistica/shared/foundation/object.cc
${BA_SRC_ROOT}/ballistica/shared/foundation/object.h
${BA_SRC_ROOT}/ballistica/shared/foundation/types.h
${BA_SRC_ROOT}/ballistica/shared/generic/base64.cc
${BA_SRC_ROOT}/ballistica/shared/generic/base64.h
${BA_SRC_ROOT}/ballistica/shared/generic/buffer.h
${BA_SRC_ROOT}/ballistica/shared/generic/json.cc
${BA_SRC_ROOT}/ballistica/shared/generic/json.h
${BA_SRC_ROOT}/ballistica/shared/generic/lambda_runnable.h
${BA_SRC_ROOT}/ballistica/shared/generic/runnable.cc
${BA_SRC_ROOT}/ballistica/shared/generic/runnable.h
${BA_SRC_ROOT}/ballistica/shared/generic/timer_list.cc
${BA_SRC_ROOT}/ballistica/shared/generic/timer_list.h
${BA_SRC_ROOT}/ballistica/shared/generic/utf8.cc
${BA_SRC_ROOT}/ballistica/shared/generic/utf8.h
${BA_SRC_ROOT}/ballistica/shared/generic/utils.cc
${BA_SRC_ROOT}/ballistica/shared/generic/utils.h
${BA_SRC_ROOT}/ballistica/shared/math/matrix44f.cc
${BA_SRC_ROOT}/ballistica/shared/math/matrix44f.h
${BA_SRC_ROOT}/ballistica/shared/math/point2d.h
${BA_SRC_ROOT}/ballistica/shared/math/random.cc
${BA_SRC_ROOT}/ballistica/shared/math/random.h
${BA_SRC_ROOT}/ballistica/shared/math/rect.h
${BA_SRC_ROOT}/ballistica/shared/math/vector2f.h
${BA_SRC_ROOT}/ballistica/shared/math/vector3f.cc
${BA_SRC_ROOT}/ballistica/shared/math/vector3f.h
${BA_SRC_ROOT}/ballistica/shared/math/vector4f.h
${BA_SRC_ROOT}/ballistica/shared/networking/networking_sys.h
${BA_SRC_ROOT}/ballistica/shared/networking/sockaddr.cc
${BA_SRC_ROOT}/ballistica/shared/networking/sockaddr.h
${BA_SRC_ROOT}/ballistica/shared/python/python.cc
${BA_SRC_ROOT}/ballistica/shared/python/python.h
${BA_SRC_ROOT}/ballistica/shared/python/python_class.cc
${BA_SRC_ROOT}/ballistica/shared/python/python_class.h
${BA_SRC_ROOT}/ballistica/shared/python/python_command.cc
${BA_SRC_ROOT}/ballistica/shared/python/python_command.h
${BA_SRC_ROOT}/ballistica/shared/python/python_module_builder.h
${BA_SRC_ROOT}/ballistica/shared/python/python_object_set.cc
${BA_SRC_ROOT}/ballistica/shared/python/python_object_set.h
${BA_SRC_ROOT}/ballistica/shared/python/python_ref.cc
${BA_SRC_ROOT}/ballistica/shared/python/python_ref.h
${BA_SRC_ROOT}/ballistica/shared/python/python_sys.h
${BA_SRC_ROOT}/ballistica/template_fs/python/class/python_class_hello.cc
${BA_SRC_ROOT}/ballistica/template_fs/python/class/python_class_hello.h
${BA_SRC_ROOT}/ballistica/template_fs/python/methods/python_methods_template_fs.cc
${BA_SRC_ROOT}/ballistica/template_fs/python/methods/python_methods_template_fs.h
${BA_SRC_ROOT}/ballistica/template_fs/python/template_fs_python.cc
${BA_SRC_ROOT}/ballistica/template_fs/python/template_fs_python.h
${BA_SRC_ROOT}/ballistica/template_fs/template_fs.cc
${BA_SRC_ROOT}/ballistica/template_fs/template_fs.h
${BA_SRC_ROOT}/ballistica/ui_v1/python/class/python_class_ui_mesh.cc
${BA_SRC_ROOT}/ballistica/ui_v1/python/class/python_class_ui_mesh.h
${BA_SRC_ROOT}/ballistica/ui_v1/python/class/python_class_ui_sound.cc
${BA_SRC_ROOT}/ballistica/ui_v1/python/class/python_class_ui_sound.h
${BA_SRC_ROOT}/ballistica/ui_v1/python/class/python_class_ui_texture.cc
${BA_SRC_ROOT}/ballistica/ui_v1/python/class/python_class_ui_texture.h
${BA_SRC_ROOT}/ballistica/ui_v1/python/class/python_class_widget.cc
${BA_SRC_ROOT}/ballistica/ui_v1/python/class/python_class_widget.h
${BA_SRC_ROOT}/ballistica/ui_v1/python/methods/python_methods_ui_v1.cc
${BA_SRC_ROOT}/ballistica/ui_v1/python/methods/python_methods_ui_v1.h
${BA_SRC_ROOT}/ballistica/ui_v1/python/ui_v1_python.cc
${BA_SRC_ROOT}/ballistica/ui_v1/python/ui_v1_python.h
${BA_SRC_ROOT}/ballistica/ui_v1/support/root_ui.cc
${BA_SRC_ROOT}/ballistica/ui_v1/support/root_ui.h
${BA_SRC_ROOT}/ballistica/ui_v1/ui_v1.cc
${BA_SRC_ROOT}/ballistica/ui_v1/ui_v1.h
${BA_SRC_ROOT}/ballistica/ui_v1/widget/button_widget.cc
${BA_SRC_ROOT}/ballistica/ui_v1/widget/button_widget.h
${BA_SRC_ROOT}/ballistica/ui_v1/widget/check_box_widget.cc
${BA_SRC_ROOT}/ballistica/ui_v1/widget/check_box_widget.h
${BA_SRC_ROOT}/ballistica/ui_v1/widget/column_widget.cc
${BA_SRC_ROOT}/ballistica/ui_v1/widget/column_widget.h
${BA_SRC_ROOT}/ballistica/ui_v1/widget/container_widget.cc
${BA_SRC_ROOT}/ballistica/ui_v1/widget/container_widget.h
${BA_SRC_ROOT}/ballistica/ui_v1/widget/h_scroll_widget.cc
${BA_SRC_ROOT}/ballistica/ui_v1/widget/h_scroll_widget.h
${BA_SRC_ROOT}/ballistica/ui_v1/widget/image_widget.cc
${BA_SRC_ROOT}/ballistica/ui_v1/widget/image_widget.h
${BA_SRC_ROOT}/ballistica/ui_v1/widget/root_widget.cc
${BA_SRC_ROOT}/ballistica/ui_v1/widget/root_widget.h
${BA_SRC_ROOT}/ballistica/ui_v1/widget/row_widget.cc
${BA_SRC_ROOT}/ballistica/ui_v1/widget/row_widget.h
${BA_SRC_ROOT}/ballistica/ui_v1/widget/scroll_widget.cc
${BA_SRC_ROOT}/ballistica/ui_v1/widget/scroll_widget.h
${BA_SRC_ROOT}/ballistica/ui_v1/widget/stack_widget.cc
${BA_SRC_ROOT}/ballistica/ui_v1/widget/stack_widget.h
${BA_SRC_ROOT}/ballistica/ui_v1/widget/text_widget.cc
${BA_SRC_ROOT}/ballistica/ui_v1/widget/text_widget.h
${BA_SRC_ROOT}/ballistica/ui_v1/widget/widget.cc
${BA_SRC_ROOT}/ballistica/ui_v1/widget/widget.h
# AUTOGENERATED_PUBLIC_END
)
if (HEADLESS)
set_target_properties(ballisticakit PROPERTIES OUTPUT_NAME "ballisticakit_headless")
endif ()
target_include_directories(ballisticakit PRIVATE
${Python_INCLUDE_DIRS}
${BA_SRC_ROOT}/external/open_dynamics_engine-ef
${EXTRA_INCLUDE_DIRS}
)
target_link_libraries(ballisticakit PRIVATE
${CMAKE_CURRENT_BINARY_DIR}/prefablib/libballisticakit_internal.a ode pthread ${Python_LIBRARIES}
${SDL2_LIBRARIES} ${EXTRA_LIBRARIES} dl)
# Hack for building on rpi (might be due to my manually built Python 3.8)
# Hopefully can remove later...
if(EXISTS "/home/pi")
target_link_libraries(ballisticakit PRIVATE dl util stdc++fs)
endif()

View File

@ -0,0 +1,839 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{B0B090EA-92E7-457D-9785-ACDF917F9C93}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>BallisticaKitGeneric</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(ProjectDir)..\..\build\windows\$(Configuration)_$(Platform)\</OutDir>
<IntDir>$(ProjectDir)..\..\build\windows\obj\$(MSBuildProjectName)\$(Configuration)_$(Platform)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(ProjectDir)..\..\build\windows\$(Configuration)_$(Platform)\</OutDir>
<IntDir>$(ProjectDir)..\..\build\windows\obj\$(MSBuildProjectName)\$(Configuration)_$(Platform)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(ProjectDir)..\..\build\windows\$(Configuration)_$(Platform)\</OutDir>
<IntDir>$(ProjectDir)..\..\build\windows\obj\$(MSBuildProjectName)\$(Configuration)_$(Platform)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(ProjectDir)..\..\build\windows\$(Configuration)_$(Platform)\</OutDir>
<IntDir>$(ProjectDir)..\..\build\windows\obj\$(MSBuildProjectName)\$(Configuration)_$(Platform)\</IntDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<MinimalRebuild>false</MinimalRebuild>
<ExceptionHandling>SyncCThrow</ExceptionHandling>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>../../src;../../src/external/windows/include/SDL2;../../src/external/windows/include/python;../../src/external/windows/include;../../src/external/open_dynamics_engine-ef;../../src/external/qrencode-3.4.4</AdditionalIncludeDirectories>
<LanguageStandard>stdcpp17</LanguageStandard>
<FloatingPointModel>Fast</FloatingPointModel>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<IgnoreAllDefaultLibraries>
</IgnoreAllDefaultLibraries>
<LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
<AdditionalLibraryDirectories>../../src/external/windows/lib/$(Platform)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<MinimalRebuild>false</MinimalRebuild>
<ExceptionHandling>SyncCThrow</ExceptionHandling>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>../../src;../../src/external/windows/include/SDL2;../../src/external/windows/include/python;../../src/external/windows/include;../../src/external/open_dynamics_engine-ef</AdditionalIncludeDirectories>
<LanguageStandard>stdcpp17</LanguageStandard>
<FloatingPointModel>Fast</FloatingPointModel>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<IgnoreAllDefaultLibraries>
</IgnoreAllDefaultLibraries>
<LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
<AdditionalLibraryDirectories>../../src/external/windows/lib/$(Platform)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>Use</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ExceptionHandling>SyncCThrow</ExceptionHandling>
<SDLCheck>false</SDLCheck>
<AdditionalIncludeDirectories>../../src;../../src/external/windows/include/SDL2;../../src/external/windows/include/python;../../src/external/windows/include;../../src/external/open_dynamics_engine-ef</AdditionalIncludeDirectories>
<LanguageStandard>stdcpp17</LanguageStandard>
<FloatingPointModel>Fast</FloatingPointModel>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<LinkTimeCodeGeneration>UseFastLinkTimeCodeGeneration</LinkTimeCodeGeneration>
<AdditionalLibraryDirectories>../../src/external/windows/lib/$(Platform)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>Use</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ExceptionHandling>SyncCThrow</ExceptionHandling>
<SDLCheck>false</SDLCheck>
<AdditionalIncludeDirectories>../../src;../../src/external/windows/include/SDL2;../../src/external/windows/include/python;../../src/external/windows/include;../../src/external/open_dynamics_engine-ef</AdditionalIncludeDirectories>
<LanguageStandard>stdcpp17</LanguageStandard>
<FloatingPointModel>Fast</FloatingPointModel>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<LinkTimeCodeGeneration>UseFastLinkTimeCodeGeneration</LinkTimeCodeGeneration>
<AdditionalLibraryDirectories>../../src/external/windows/lib/$(Platform)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<None Include="BallisticaKit.ico" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\src\ballistica\base\app\app.cc" />
<ClInclude Include="..\..\src\ballistica\base\app\app.h" />
<ClCompile Include="..\..\src\ballistica\base\app\app_config.cc" />
<ClInclude Include="..\..\src\ballistica\base\app\app_config.h" />
<ClCompile Include="..\..\src\ballistica\base\app\app_headless.cc" />
<ClInclude Include="..\..\src\ballistica\base\app\app_headless.h" />
<ClCompile Include="..\..\src\ballistica\base\app\app_mode.cc" />
<ClInclude Include="..\..\src\ballistica\base\app\app_mode.h" />
<ClCompile Include="..\..\src\ballistica\base\app\app_mode_empty.cc" />
<ClInclude Include="..\..\src\ballistica\base\app\app_mode_empty.h" />
<ClCompile Include="..\..\src\ballistica\base\app\app_vr.cc" />
<ClInclude Include="..\..\src\ballistica\base\app\app_vr.h" />
<ClCompile Include="..\..\src\ballistica\base\app\sdl_app.cc" />
<ClInclude Include="..\..\src\ballistica\base\app\sdl_app.h" />
<ClCompile Include="..\..\src\ballistica\base\app\stress_test.cc" />
<ClInclude Include="..\..\src\ballistica\base\app\stress_test.h" />
<ClCompile Include="..\..\src\ballistica\base\assets\asset.cc" />
<ClInclude Include="..\..\src\ballistica\base\assets\asset.h" />
<ClCompile Include="..\..\src\ballistica\base\assets\assets.cc" />
<ClInclude Include="..\..\src\ballistica\base\assets\assets.h" />
<ClCompile Include="..\..\src\ballistica\base\assets\assets_server.cc" />
<ClInclude Include="..\..\src\ballistica\base\assets\assets_server.h" />
<ClCompile Include="..\..\src\ballistica\base\assets\collision_mesh_asset.cc" />
<ClInclude Include="..\..\src\ballistica\base\assets\collision_mesh_asset.h" />
<ClCompile Include="..\..\src\ballistica\base\assets\data_asset.cc" />
<ClInclude Include="..\..\src\ballistica\base\assets\data_asset.h" />
<ClCompile Include="..\..\src\ballistica\base\assets\mesh_asset.cc" />
<ClInclude Include="..\..\src\ballistica\base\assets\mesh_asset.h" />
<ClInclude Include="..\..\src\ballistica\base\assets\mesh_asset_renderer_data.h" />
<ClCompile Include="..\..\src\ballistica\base\assets\sound_asset.cc" />
<ClInclude Include="..\..\src\ballistica\base\assets\sound_asset.h" />
<ClCompile Include="..\..\src\ballistica\base\assets\texture_asset.cc" />
<ClInclude Include="..\..\src\ballistica\base\assets\texture_asset.h" />
<ClCompile Include="..\..\src\ballistica\base\assets\texture_asset_preload_data.cc" />
<ClInclude Include="..\..\src\ballistica\base\assets\texture_asset_preload_data.h" />
<ClInclude Include="..\..\src\ballistica\base\assets\texture_asset_renderer_data.h" />
<ClCompile Include="..\..\src\ballistica\base\audio\al_sys.cc" />
<ClInclude Include="..\..\src\ballistica\base\audio\al_sys.h" />
<ClCompile Include="..\..\src\ballistica\base\audio\audio.cc" />
<ClInclude Include="..\..\src\ballistica\base\audio\audio.h" />
<ClCompile Include="..\..\src\ballistica\base\audio\audio_server.cc" />
<ClInclude Include="..\..\src\ballistica\base\audio\audio_server.h" />
<ClCompile Include="..\..\src\ballistica\base\audio\audio_source.cc" />
<ClInclude Include="..\..\src\ballistica\base\audio\audio_source.h" />
<ClCompile Include="..\..\src\ballistica\base\audio\audio_streamer.cc" />
<ClInclude Include="..\..\src\ballistica\base\audio\audio_streamer.h" />
<ClCompile Include="..\..\src\ballistica\base\audio\ogg_stream.cc" />
<ClInclude Include="..\..\src\ballistica\base\audio\ogg_stream.h" />
<ClCompile Include="..\..\src\ballistica\base\base.cc" />
<ClInclude Include="..\..\src\ballistica\base\base.h" />
<ClCompile Include="..\..\src\ballistica\base\dynamics\bg\bg_dynamics.cc" />
<ClInclude Include="..\..\src\ballistica\base\dynamics\bg\bg_dynamics.h" />
<ClInclude Include="..\..\src\ballistica\base\dynamics\bg\bg_dynamics_draw_snapshot.h" />
<ClCompile Include="..\..\src\ballistica\base\dynamics\bg\bg_dynamics_fuse.cc" />
<ClInclude Include="..\..\src\ballistica\base\dynamics\bg\bg_dynamics_fuse.h" />
<ClInclude Include="..\..\src\ballistica\base\dynamics\bg\bg_dynamics_fuse_data.h" />
<ClCompile Include="..\..\src\ballistica\base\dynamics\bg\bg_dynamics_height_cache.cc" />
<ClInclude Include="..\..\src\ballistica\base\dynamics\bg\bg_dynamics_height_cache.h" />
<ClCompile Include="..\..\src\ballistica\base\dynamics\bg\bg_dynamics_server.cc" />
<ClInclude Include="..\..\src\ballistica\base\dynamics\bg\bg_dynamics_server.h" />
<ClCompile Include="..\..\src\ballistica\base\dynamics\bg\bg_dynamics_shadow.cc" />
<ClInclude Include="..\..\src\ballistica\base\dynamics\bg\bg_dynamics_shadow.h" />
<ClInclude Include="..\..\src\ballistica\base\dynamics\bg\bg_dynamics_shadow_data.h" />
<ClCompile Include="..\..\src\ballistica\base\dynamics\bg\bg_dynamics_volume_light.cc" />
<ClInclude Include="..\..\src\ballistica\base\dynamics\bg\bg_dynamics_volume_light.h" />
<ClInclude Include="..\..\src\ballistica\base\dynamics\bg\bg_dynamics_volume_light_data.h" />
<ClCompile Include="..\..\src\ballistica\base\dynamics\collision_cache.cc" />
<ClInclude Include="..\..\src\ballistica\base\dynamics\collision_cache.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\component\empty_component.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\component\object_component.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\component\object_component.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\component\post_process_component.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\component\post_process_component.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\component\render_component.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\component\render_component.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\component\shield_component.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\component\shield_component.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\component\simple_component.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\component\simple_component.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\component\smoke_component.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\component\smoke_component.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\component\special_component.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\component\special_component.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\component\sprite_component.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\component\sprite_component.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\gl\gl_sys.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\gl\gl_sys.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\gl\renderer_gl.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\gl\renderer_gl.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\graphics.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\graphics.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\graphics_server.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\graphics_server.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\graphics_vr.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\graphics_vr.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\mesh\image_mesh.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\image_mesh.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\mesh.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\mesh_buffer.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\mesh_buffer_base.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\mesh_buffer_vertex_simple_full.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\mesh_buffer_vertex_smoke_full.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\mesh_buffer_vertex_sprite.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\mesh\mesh_data.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\mesh_data.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\mesh\mesh_data_client_handle.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\mesh_data_client_handle.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\mesh_index_buffer_16.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\mesh_index_buffer_32.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\mesh_indexed.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\mesh_indexed_base.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\mesh_indexed_dual_texture_full.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\mesh_indexed_object_split.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\mesh_indexed_simple_full.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\mesh_indexed_simple_split.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\mesh_indexed_smoke_full.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\mesh_indexed_static_dynamic.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\mesh_non_indexed.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\mesh_renderer_data.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\sprite_mesh.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\mesh\text_mesh.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\text_mesh.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\renderer\framebuffer.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\renderer\render_pass.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\renderer\render_pass.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\renderer\render_target.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\renderer\render_target.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\renderer\renderer.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\renderer\renderer.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\support\area_of_interest.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\support\area_of_interest.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\support\camera.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\support\camera.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\support\frame_def.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\support\frame_def.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\support\net_graph.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\support\net_graph.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\support\render_command_buffer.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\text\font_page_map_data.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\text\text_graphics.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\text\text_graphics.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\text\text_group.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\text\text_group.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\text\text_packer.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\text\text_packer.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\texture\dds.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\texture\dds.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\texture\ktx.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\texture\ktx.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\texture\pvr.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\texture\pvr.h" />
<ClCompile Include="..\..\src\ballistica\base\input\device\input_device.cc" />
<ClInclude Include="..\..\src\ballistica\base\input\device\input_device.h" />
<ClCompile Include="..\..\src\ballistica\base\input\device\input_device_delegate.cc" />
<ClInclude Include="..\..\src\ballistica\base\input\device\input_device_delegate.h" />
<ClCompile Include="..\..\src\ballistica\base\input\device\joystick_input.cc" />
<ClInclude Include="..\..\src\ballistica\base\input\device\joystick_input.h" />
<ClCompile Include="..\..\src\ballistica\base\input\device\keyboard_input.cc" />
<ClInclude Include="..\..\src\ballistica\base\input\device\keyboard_input.h" />
<ClCompile Include="..\..\src\ballistica\base\input\device\test_input.cc" />
<ClInclude Include="..\..\src\ballistica\base\input\device\test_input.h" />
<ClCompile Include="..\..\src\ballistica\base\input\device\touch_input.cc" />
<ClInclude Include="..\..\src\ballistica\base\input\device\touch_input.h" />
<ClCompile Include="..\..\src\ballistica\base\input\input.cc" />
<ClInclude Include="..\..\src\ballistica\base\input\input.h" />
<ClCompile Include="..\..\src\ballistica\base\input\support\remote_app_server.cc" />
<ClInclude Include="..\..\src\ballistica\base\input\support\remote_app_server.h" />
<ClCompile Include="..\..\src\ballistica\base\logic\logic.cc" />
<ClInclude Include="..\..\src\ballistica\base\logic\logic.h" />
<ClCompile Include="..\..\src\ballistica\base\networking\network_reader.cc" />
<ClInclude Include="..\..\src\ballistica\base\networking\network_reader.h" />
<ClCompile Include="..\..\src\ballistica\base\networking\network_writer.cc" />
<ClInclude Include="..\..\src\ballistica\base\networking\network_writer.h" />
<ClCompile Include="..\..\src\ballistica\base\networking\networking.cc" />
<ClInclude Include="..\..\src\ballistica\base\networking\networking.h" />
<ClCompile Include="..\..\src\ballistica\base\platform\android\amazon\base_plat_andr_amazon.cc" />
<ClInclude Include="..\..\src\ballistica\base\platform\android\amazon\base_plat_andr_amazon.h" />
<ClCompile Include="..\..\src\ballistica\base\platform\android\base_platform_android.cc" />
<ClInclude Include="..\..\src\ballistica\base\platform\android\base_platform_android.h" />
<ClCompile Include="..\..\src\ballistica\base\platform\android\cardboard\base_pl_an_cardboard.cc" />
<ClInclude Include="..\..\src\ballistica\base\platform\android\cardboard\base_pl_an_cardboard.h" />
<ClCompile Include="..\..\src\ballistica\base\platform\android\google\base_plat_andr_google.cc" />
<ClInclude Include="..\..\src\ballistica\base\platform\android\google\base_plat_andr_google.h" />
<ClCompile Include="..\..\src\ballistica\base\platform\apple\base_platform_apple.cc" />
<ClInclude Include="..\..\src\ballistica\base\platform\apple\base_platform_apple.h" />
<ClCompile Include="..\..\src\ballistica\base\platform\base_platform.cc" />
<ClInclude Include="..\..\src\ballistica\base\platform\base_platform.h" />
<ClCompile Include="..\..\src\ballistica\base\platform\linux\base_platform_linux.cc" />
<ClInclude Include="..\..\src\ballistica\base\platform\linux\base_platform_linux.h" />
<ClCompile Include="..\..\src\ballistica\base\platform\oculus\main_rift.cc" />
<ClInclude Include="..\..\src\ballistica\base\platform\support\min_sdl_key_names.h" />
<ClCompile Include="..\..\src\ballistica\base\platform\windows\base_platform_windows.cc" />
<ClInclude Include="..\..\src\ballistica\base\platform\windows\base_platform_windows.h" />
<ClCompile Include="..\..\src\ballistica\base\platform\windows\base_platform_windows_oculus.cc" />
<ClInclude Include="..\..\src\ballistica\base\platform\windows\base_platform_windows_oculus.h" />
<ClCompile Include="..\..\src\ballistica\base\python\base_python.cc" />
<ClInclude Include="..\..\src\ballistica\base\python\base_python.h" />
<ClCompile Include="..\..\src\ballistica\base\python\class\python_class_app_timer.cc" />
<ClInclude Include="..\..\src\ballistica\base\python\class\python_class_app_timer.h" />
<ClCompile Include="..\..\src\ballistica\base\python\class\python_class_context_call.cc" />
<ClInclude Include="..\..\src\ballistica\base\python\class\python_class_context_call.h" />
<ClCompile Include="..\..\src\ballistica\base\python\class\python_class_context_ref.cc" />
<ClInclude Include="..\..\src\ballistica\base\python\class\python_class_context_ref.h" />
<ClCompile Include="..\..\src\ballistica\base\python\class\python_class_display_timer.cc" />
<ClInclude Include="..\..\src\ballistica\base\python\class\python_class_display_timer.h" />
<ClCompile Include="..\..\src\ballistica\base\python\class\python_class_feature_set_data.cc" />
<ClInclude Include="..\..\src\ballistica\base\python\class\python_class_feature_set_data.h" />
<ClCompile Include="..\..\src\ballistica\base\python\class\python_class_simple_sound.cc" />
<ClInclude Include="..\..\src\ballistica\base\python\class\python_class_simple_sound.h" />
<ClCompile Include="..\..\src\ballistica\base\python\class\python_class_vec3.cc" />
<ClInclude Include="..\..\src\ballistica\base\python\class\python_class_vec3.h" />
<ClCompile Include="..\..\src\ballistica\base\python\methods\python_methods_app.cc" />
<ClInclude Include="..\..\src\ballistica\base\python\methods\python_methods_app.h" />
<ClCompile Include="..\..\src\ballistica\base\python\methods\python_methods_graphics.cc" />
<ClInclude Include="..\..\src\ballistica\base\python\methods\python_methods_graphics.h" />
<ClCompile Include="..\..\src\ballistica\base\python\methods\python_methods_misc.cc" />
<ClInclude Include="..\..\src\ballistica\base\python\methods\python_methods_misc.h" />
<ClCompile Include="..\..\src\ballistica\base\python\support\python_context_call.cc" />
<ClInclude Include="..\..\src\ballistica\base\python\support\python_context_call.h" />
<ClInclude Include="..\..\src\ballistica\base\python\support\python_context_call_runnable.h" />
<ClInclude Include="..\..\src\ballistica\base\support\app_timer.h" />
<ClCompile Include="..\..\src\ballistica\base\support\context.cc" />
<ClInclude Include="..\..\src\ballistica\base\support\context.h" />
<ClCompile Include="..\..\src\ballistica\base\support\huffman.cc" />
<ClInclude Include="..\..\src\ballistica\base\support\huffman.h" />
<ClInclude Include="..\..\src\ballistica\base\support\plus_soft.h" />
<ClCompile Include="..\..\src\ballistica\base\support\stdio_console.cc" />
<ClInclude Include="..\..\src\ballistica\base\support\stdio_console.h" />
<ClCompile Include="..\..\src\ballistica\base\ui\console.cc" />
<ClInclude Include="..\..\src\ballistica\base\ui\console.h" />
<ClCompile Include="..\..\src\ballistica\base\ui\ui.cc" />
<ClInclude Include="..\..\src\ballistica\base\ui\ui.h" />
<ClInclude Include="..\..\src\ballistica\base\ui\widget_message.h" />
<ClCompile Include="..\..\src\ballistica\classic\classic.cc" />
<ClInclude Include="..\..\src\ballistica\classic\classic.h" />
<ClCompile Include="..\..\src\ballistica\classic\python\classic_python.cc" />
<ClInclude Include="..\..\src\ballistica\classic\python\classic_python.h" />
<ClCompile Include="..\..\src\ballistica\classic\python\methods\python_methods_classic.cc" />
<ClInclude Include="..\..\src\ballistica\classic\python\methods\python_methods_classic.h" />
<ClCompile Include="..\..\src\ballistica\classic\support\v1_account.cc" />
<ClInclude Include="..\..\src\ballistica\classic\support\v1_account.h" />
<ClCompile Include="..\..\src\ballistica\core\core.cc" />
<ClInclude Include="..\..\src\ballistica\core\core.h" />
<ClInclude Include="..\..\src\ballistica\core\platform\apple\core_platform_apple.h" />
<ClCompile Include="..\..\src\ballistica\core\platform\core_platform.cc" />
<ClInclude Include="..\..\src\ballistica\core\platform\core_platform.h" />
<ClCompile Include="..\..\src\ballistica\core\platform\linux\core_platform_linux.cc" />
<ClInclude Include="..\..\src\ballistica\core\platform\linux\core_platform_linux.h" />
<ClInclude Include="..\..\src\ballistica\core\platform\support\min_sdl.h" />
<ClCompile Include="..\..\src\ballistica\core\platform\windows\core_platform_windows.cc" />
<ClInclude Include="..\..\src\ballistica\core\platform\windows\core_platform_windows.h" />
<ClCompile Include="..\..\src\ballistica\core\python\core_python.cc" />
<ClInclude Include="..\..\src\ballistica\core\python\core_python.h" />
<ClInclude Include="..\..\src\ballistica\core\support\base_soft.h" />
<ClCompile Include="..\..\src\ballistica\core\support\core_config.cc" />
<ClInclude Include="..\..\src\ballistica\core\support\core_config.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\assets\scene_asset.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\assets\scene_asset.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\assets\scene_collision_mesh.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\assets\scene_collision_mesh.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\assets\scene_cube_map_texture.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\assets\scene_cube_map_texture.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\assets\scene_data_asset.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\assets\scene_data_asset.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\assets\scene_mesh.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\assets\scene_mesh.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\assets\scene_sound.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\assets\scene_sound.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\assets\scene_texture.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\assets\scene_texture.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\connection\connection.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\connection\connection.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\connection\connection_set.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\connection\connection_set.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\connection\connection_to_client.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\connection\connection_to_client.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\connection\connection_to_client_udp.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\connection\connection_to_client_udp.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\connection\connection_to_host.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\connection\connection_to_host.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\connection\connection_to_host_udp.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\connection\connection_to_host_udp.h" />
<ClInclude Include="..\..\src\ballistica\scene_v1\dynamics\collision.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\dynamics\dynamics.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\dynamics\dynamics.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\dynamics\material\impact_sound_material_action.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\dynamics\material\impact_sound_material_action.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\dynamics\material\material.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\dynamics\material\material.h" />
<ClInclude Include="..\..\src\ballistica\scene_v1\dynamics\material\material_action.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\dynamics\material\material_component.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\dynamics\material\material_component.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\dynamics\material\material_condition_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\dynamics\material\material_condition_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\dynamics\material\material_context.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\dynamics\material\material_context.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\dynamics\material\node_message_material_action.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\dynamics\material\node_message_material_action.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\dynamics\material\node_mod_material_action.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\dynamics\material\node_mod_material_action.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\dynamics\material\node_user_msg_mat_action.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\dynamics\material\node_user_msg_mat_action.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\dynamics\material\part_mod_material_action.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\dynamics\material\part_mod_material_action.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\dynamics\material\python_call_material_action.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\dynamics\material\python_call_material_action.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\dynamics\material\roll_sound_material_action.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\dynamics\material\roll_sound_material_action.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\dynamics\material\skid_sound_material_action.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\dynamics\material\skid_sound_material_action.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\dynamics\material\sound_material_action.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\dynamics\material\sound_material_action.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\dynamics\part.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\dynamics\part.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\dynamics\rigid_body.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\dynamics\rigid_body.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\anim_curve_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\anim_curve_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\bomb_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\bomb_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\combine_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\combine_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\explosion_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\explosion_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\flag_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\flag_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\flash_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\flash_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\globals_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\globals_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\image_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\image_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\light_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\light_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\locator_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\locator_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\math_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\math_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\node_attribute.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\node_attribute.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\node_attribute_connection.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\node_attribute_connection.h" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\node_type.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\null_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\null_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\player_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\player_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\prop_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\prop_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\region_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\region_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\scorch_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\scorch_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\session_globals_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\session_globals_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\shield_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\shield_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\sound_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\sound_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\spaz_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\spaz_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\terrain_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\terrain_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\text_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\text_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\texture_sequence_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\texture_sequence_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\time_display_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\time_display_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\python\class\python_class_activity_data.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\python\class\python_class_activity_data.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\python\class\python_class_base_timer.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\python\class\python_class_base_timer.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\python\class\python_class_input_device.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\python\class\python_class_input_device.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\python\class\python_class_material.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\python\class\python_class_material.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\python\class\python_class_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\python\class\python_class_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\python\class\python_class_scene_collision_mesh.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\python\class\python_class_scene_collision_mesh.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\python\class\python_class_scene_data_asset.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\python\class\python_class_scene_data_asset.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\python\class\python_class_scene_mesh.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\python\class\python_class_scene_mesh.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\python\class\python_class_scene_sound.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\python\class\python_class_scene_sound.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\python\class\python_class_scene_texture.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\python\class\python_class_scene_texture.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\python\class\python_class_scene_timer.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\python\class\python_class_scene_timer.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\python\class\python_class_session_data.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\python\class\python_class_session_data.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\python\class\python_class_session_player.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\python\class\python_class_session_player.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\python\methods\python_methods_assets.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\python\methods\python_methods_assets.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\python\methods\python_methods_input.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\python\methods\python_methods_input.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\python\methods\python_methods_networking.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\python\methods\python_methods_networking.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\python\methods\python_methods_scene.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\python\methods\python_methods_scene.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\python\scene_v1_python.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\python\scene_v1_python.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\scene_v1.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\scene_v1.h" />
<ClInclude Include="..\..\src\ballistica\scene_v1\support\client_controller_interface.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\support\client_input_device.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\support\client_input_device.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\support\client_input_device_delegate.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\support\client_input_device_delegate.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\support\client_session.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\support\client_session.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\support\client_session_net.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\support\client_session_net.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\support\client_session_replay.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\support\client_session_replay.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\support\host_activity.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\support\host_activity.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\support\host_session.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\support\host_session.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\support\player.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\support\player.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\support\player_spec.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\support\player_spec.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\support\scene.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\support\scene.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\support\scene_v1_app_mode.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\support\scene_v1_app_mode.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\support\scene_v1_context.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\support\scene_v1_context.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\support\scene_v1_input_device_delegate.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\support\scene_v1_input_device_delegate.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\support\session.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\support\session.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\support\session_stream.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\support\session_stream.h" />
<ClCompile Include="..\..\src\ballistica\shared\ballistica.cc" />
<ClInclude Include="..\..\src\ballistica\shared\ballistica.h" />
<ClInclude Include="..\..\src\ballistica\shared\buildconfig\buildconfig_cmake.h" />
<ClInclude Include="..\..\src\ballistica\shared\buildconfig\buildconfig_common.h" />
<ClInclude Include="..\..\src\ballistica\shared\buildconfig\buildconfig_windows_common.h" />
<ClInclude Include="..\..\src\ballistica\shared\buildconfig\buildconfig_windows_generic.h" />
<ClInclude Include="..\..\src\ballistica\shared\buildconfig\buildconfig_windows_headless.h" />
<ClCompile Include="..\..\src\ballistica\shared\foundation\event_loop.cc" />
<ClInclude Include="..\..\src\ballistica\shared\foundation\event_loop.h" />
<ClCompile Include="..\..\src\ballistica\shared\foundation\exception.cc" />
<ClInclude Include="..\..\src\ballistica\shared\foundation\exception.h" />
<ClCompile Include="..\..\src\ballistica\shared\foundation\fatal_error.cc" />
<ClInclude Include="..\..\src\ballistica\shared\foundation\fatal_error.h" />
<ClCompile Include="..\..\src\ballistica\shared\foundation\feature_set_front_end.cc" />
<ClInclude Include="..\..\src\ballistica\shared\foundation\feature_set_front_end.h" />
<ClCompile Include="..\..\src\ballistica\shared\foundation\inline.cc" />
<ClInclude Include="..\..\src\ballistica\shared\foundation\inline.h" />
<ClCompile Include="..\..\src\ballistica\shared\foundation\logging.cc" />
<ClInclude Include="..\..\src\ballistica\shared\foundation\logging.h" />
<ClCompile Include="..\..\src\ballistica\shared\foundation\macros.cc" />
<ClInclude Include="..\..\src\ballistica\shared\foundation\macros.h" />
<ClCompile Include="..\..\src\ballistica\shared\foundation\object.cc" />
<ClInclude Include="..\..\src\ballistica\shared\foundation\object.h" />
<ClInclude Include="..\..\src\ballistica\shared\foundation\types.h" />
<ClCompile Include="..\..\src\ballistica\shared\generic\base64.cc" />
<ClInclude Include="..\..\src\ballistica\shared\generic\base64.h" />
<ClInclude Include="..\..\src\ballistica\shared\generic\buffer.h" />
<ClCompile Include="..\..\src\ballistica\shared\generic\json.cc" />
<ClInclude Include="..\..\src\ballistica\shared\generic\json.h" />
<ClInclude Include="..\..\src\ballistica\shared\generic\lambda_runnable.h" />
<ClCompile Include="..\..\src\ballistica\shared\generic\runnable.cc" />
<ClInclude Include="..\..\src\ballistica\shared\generic\runnable.h" />
<ClCompile Include="..\..\src\ballistica\shared\generic\timer_list.cc" />
<ClInclude Include="..\..\src\ballistica\shared\generic\timer_list.h" />
<ClCompile Include="..\..\src\ballistica\shared\generic\utf8.cc" />
<ClInclude Include="..\..\src\ballistica\shared\generic\utf8.h" />
<ClCompile Include="..\..\src\ballistica\shared\generic\utils.cc" />
<ClInclude Include="..\..\src\ballistica\shared\generic\utils.h" />
<ClCompile Include="..\..\src\ballistica\shared\math\matrix44f.cc" />
<ClInclude Include="..\..\src\ballistica\shared\math\matrix44f.h" />
<ClInclude Include="..\..\src\ballistica\shared\math\point2d.h" />
<ClCompile Include="..\..\src\ballistica\shared\math\random.cc" />
<ClInclude Include="..\..\src\ballistica\shared\math\random.h" />
<ClInclude Include="..\..\src\ballistica\shared\math\rect.h" />
<ClInclude Include="..\..\src\ballistica\shared\math\vector2f.h" />
<ClCompile Include="..\..\src\ballistica\shared\math\vector3f.cc" />
<ClInclude Include="..\..\src\ballistica\shared\math\vector3f.h" />
<ClInclude Include="..\..\src\ballistica\shared\math\vector4f.h" />
<ClInclude Include="..\..\src\ballistica\shared\networking\networking_sys.h" />
<ClCompile Include="..\..\src\ballistica\shared\networking\sockaddr.cc" />
<ClInclude Include="..\..\src\ballistica\shared\networking\sockaddr.h" />
<ClCompile Include="..\..\src\ballistica\shared\python\python.cc" />
<ClInclude Include="..\..\src\ballistica\shared\python\python.h" />
<ClCompile Include="..\..\src\ballistica\shared\python\python_class.cc" />
<ClInclude Include="..\..\src\ballistica\shared\python\python_class.h" />
<ClCompile Include="..\..\src\ballistica\shared\python\python_command.cc" />
<ClInclude Include="..\..\src\ballistica\shared\python\python_command.h" />
<ClInclude Include="..\..\src\ballistica\shared\python\python_module_builder.h" />
<ClCompile Include="..\..\src\ballistica\shared\python\python_object_set.cc" />
<ClInclude Include="..\..\src\ballistica\shared\python\python_object_set.h" />
<ClCompile Include="..\..\src\ballistica\shared\python\python_ref.cc" />
<ClInclude Include="..\..\src\ballistica\shared\python\python_ref.h" />
<ClInclude Include="..\..\src\ballistica\shared\python\python_sys.h" />
<ClCompile Include="..\..\src\ballistica\template_fs\python\class\python_class_hello.cc" />
<ClInclude Include="..\..\src\ballistica\template_fs\python\class\python_class_hello.h" />
<ClCompile Include="..\..\src\ballistica\template_fs\python\methods\python_methods_template_fs.cc" />
<ClInclude Include="..\..\src\ballistica\template_fs\python\methods\python_methods_template_fs.h" />
<ClCompile Include="..\..\src\ballistica\template_fs\python\template_fs_python.cc" />
<ClInclude Include="..\..\src\ballistica\template_fs\python\template_fs_python.h" />
<ClCompile Include="..\..\src\ballistica\template_fs\template_fs.cc" />
<ClInclude Include="..\..\src\ballistica\template_fs\template_fs.h" />
<ClCompile Include="..\..\src\ballistica\ui_v1\python\class\python_class_ui_mesh.cc" />
<ClInclude Include="..\..\src\ballistica\ui_v1\python\class\python_class_ui_mesh.h" />
<ClCompile Include="..\..\src\ballistica\ui_v1\python\class\python_class_ui_sound.cc" />
<ClInclude Include="..\..\src\ballistica\ui_v1\python\class\python_class_ui_sound.h" />
<ClCompile Include="..\..\src\ballistica\ui_v1\python\class\python_class_ui_texture.cc" />
<ClInclude Include="..\..\src\ballistica\ui_v1\python\class\python_class_ui_texture.h" />
<ClCompile Include="..\..\src\ballistica\ui_v1\python\class\python_class_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui_v1\python\class\python_class_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui_v1\python\methods\python_methods_ui_v1.cc" />
<ClInclude Include="..\..\src\ballistica\ui_v1\python\methods\python_methods_ui_v1.h" />
<ClCompile Include="..\..\src\ballistica\ui_v1\python\ui_v1_python.cc" />
<ClInclude Include="..\..\src\ballistica\ui_v1\python\ui_v1_python.h" />
<ClCompile Include="..\..\src\ballistica\ui_v1\support\root_ui.cc" />
<ClInclude Include="..\..\src\ballistica\ui_v1\support\root_ui.h" />
<ClCompile Include="..\..\src\ballistica\ui_v1\ui_v1.cc" />
<ClInclude Include="..\..\src\ballistica\ui_v1\ui_v1.h" />
<ClCompile Include="..\..\src\ballistica\ui_v1\widget\button_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui_v1\widget\button_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui_v1\widget\check_box_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui_v1\widget\check_box_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui_v1\widget\column_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui_v1\widget\column_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui_v1\widget\container_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui_v1\widget\container_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui_v1\widget\h_scroll_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui_v1\widget\h_scroll_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui_v1\widget\image_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui_v1\widget\image_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui_v1\widget\root_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui_v1\widget\root_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui_v1\widget\row_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui_v1\widget\row_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui_v1\widget\scroll_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui_v1\widget\scroll_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui_v1\widget\stack_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui_v1\widget\stack_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui_v1\widget\text_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui_v1\widget\text_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui_v1\widget\widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui_v1\widget\widget.h" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceAABB.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceContainer.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceHPoint.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceIndexedTriangle.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceMatrix3x3.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceMatrix4x4.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceOBB.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IcePlane.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IcePoint.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceRandom.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceRay.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceRevisitedRadix.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceSegment.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceTriangle.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceUtils.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_array.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_cylinder_box.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_cylinder_plane.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_cylinder_sphere.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_cylinder_trimesh.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_kernel.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_quadtreespace.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_sapspace.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_space.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_std.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_transform.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_trimesh.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_trimesh_box.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_trimesh_ccylinder.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_trimesh_distance.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_trimesh_plane.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_trimesh_ray.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_trimesh_sphere.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_trimesh_trimesh.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_util.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_error.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_export-diff.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_fastdot.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_fastldlt.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_fastlsolve.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_fastltsolve.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_joint.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_lcp.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_mass.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_mat.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_math.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_matrix.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_memory.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_misc.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_obstack.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_quickstep.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_rotation.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_step.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_stepfast.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_timer.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_util.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\Opcode.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_AABBCollider.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_AABBTree.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_BaseModel.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_BoxPruning.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_Collider.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_LSSCollider.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_MeshInterface.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_Model.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_OBBCollider.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_OptimizedTree.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_Picking.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_PlanesCollider.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_RayCollider.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_SphereCollider.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_SweepAndPrune.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_TreeBuilders.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_TreeCollider.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_VolumeCollider.cpp" />
<ClCompile Include="..\..\src\external\qr_code_generator\QrCode.cpp" />
<ClCompile Include="stdafx.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
</ClCompile>
<ClInclude Include="Resource.h" />
<ClInclude Include="stdafx.h" />
<ClInclude Include="targetver.h" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="BallisticaKit.rc" />
</ItemGroup>
<ItemGroup>
<Library Include="..\..\build\prefab\lib\windows\$(Configuration)_$(Platform)\$(MSBuildProjectName)Internal.lib" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

File diff suppressed because it is too large Load Diff

View File

@ -1,18 +1,18 @@
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by BallisticaCore.rc
// Used by BallisticaKit.rc
//
#define IDS_APP_TITLE 103
#define IDR_MAINFRAME 128
#define IDD_BALLISTICACORE_DIALOG 102
#define IDD_BALLISTICAKIT_DIALOG 102
#define IDD_ABOUTBOX 103
#define IDM_ABOUT 104
#define IDM_EXIT 105
#define IDI_BALLISTICACORE 107
#define IDI_BALLISTICAKIT 107
#define IDI_SMALL 108
#define IDC_BALLISTICACORE 109
#define IDC_BALLISTICAKIT 109
#define IDC_MYICON 2
#ifndef IDC_STATIC
#define IDC_STATIC -1

View File

@ -5,4 +5,4 @@
#pragma once
#include "ballistica/config/config_windows_generic.h"
#include "ballistica/shared/buildconfig/buildconfig_windows_generic.h"

View File

@ -0,0 +1,827 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{B9012642-2E6D-48A1-90EC-E91799B2198E}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>BallisticaKitHeadless</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(ProjectDir)..\..\build\windows\$(Configuration)_$(Platform)\</OutDir>
<IntDir>$(ProjectDir)..\..\build\windows\obj\$(MSBuildProjectName)\$(Configuration)_$(Platform)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(ProjectDir)..\..\build\windows\$(Configuration)_$(Platform)\</OutDir>
<IntDir>$(ProjectDir)..\..\build\windows\obj\$(MSBuildProjectName)\$(Configuration)_$(Platform)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(ProjectDir)..\..\build\windows\$(Configuration)_$(Platform)\</OutDir>
<IntDir>$(ProjectDir)..\..\build\windows\obj\$(MSBuildProjectName)\$(Configuration)_$(Platform)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(ProjectDir)..\..\build\windows\$(Configuration)_$(Platform)\</OutDir>
<IntDir>$(ProjectDir)..\..\build\windows\obj\$(MSBuildProjectName)\$(Configuration)_$(Platform)\</IntDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles>
<MinimalRebuild>false</MinimalRebuild>
<ExceptionHandling>SyncCThrow</ExceptionHandling>
<AdditionalIncludeDirectories>../../src;../../src/external/windows/include/SDL2;../../src/external/windows/include/python;../../src/external/windows/include;../../src/external/open_dynamics_engine-ef</AdditionalIncludeDirectories>
<LanguageStandard>stdcpp17</LanguageStandard>
<FloatingPointModel>Fast</FloatingPointModel>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
<AdditionalLibraryDirectories>../../src/external/windows/lib/$(Platform)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<ExceptionHandling>SyncCThrow</ExceptionHandling>
<ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<MinimalRebuild>false</MinimalRebuild>
<AdditionalIncludeDirectories>../../src;../../src/external/windows/include/SDL2;../../src/external/windows/include/python;../../src/external/windows/include;../../src/external/open_dynamics_engine-ef</AdditionalIncludeDirectories>
<LanguageStandard>stdcpp17</LanguageStandard>
<FloatingPointModel>Fast</FloatingPointModel>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>../../src/external/windows/lib/$(Platform)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>Use</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>false</SDLCheck>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles>
<ExceptionHandling>SyncCThrow</ExceptionHandling>
<AdditionalIncludeDirectories>../../src;../../src/external/windows/include/SDL2;../../src/external/windows/include/python;../../src/external/windows/include;../../src/external/open_dynamics_engine-ef</AdditionalIncludeDirectories>
<LanguageStandard>stdcpp17</LanguageStandard>
<FloatingPointModel>Fast</FloatingPointModel>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>../../src/external/windows/lib/$(Platform)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>Use</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>false</SDLCheck>
<ExceptionHandling>SyncCThrow</ExceptionHandling>
<ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<AdditionalIncludeDirectories>../../src;../../src/external/windows/include/SDL2;../../src/external/windows/include/python;../../src/external/windows/include;../../src/external/open_dynamics_engine-ef</AdditionalIncludeDirectories>
<LanguageStandard>stdcpp17</LanguageStandard>
<FloatingPointModel>Fast</FloatingPointModel>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>../../src/external/windows/lib/$(Platform)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<Library Include="..\..\build\prefab\lib\windows\$(Configuration)_$(Platform)\$(MSBuildProjectName)Internal.lib" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\src\ballistica\base\app\app.cc" />
<ClInclude Include="..\..\src\ballistica\base\app\app.h" />
<ClCompile Include="..\..\src\ballistica\base\app\app_config.cc" />
<ClInclude Include="..\..\src\ballistica\base\app\app_config.h" />
<ClCompile Include="..\..\src\ballistica\base\app\app_headless.cc" />
<ClInclude Include="..\..\src\ballistica\base\app\app_headless.h" />
<ClCompile Include="..\..\src\ballistica\base\app\app_mode.cc" />
<ClInclude Include="..\..\src\ballistica\base\app\app_mode.h" />
<ClCompile Include="..\..\src\ballistica\base\app\app_mode_empty.cc" />
<ClInclude Include="..\..\src\ballistica\base\app\app_mode_empty.h" />
<ClCompile Include="..\..\src\ballistica\base\app\app_vr.cc" />
<ClInclude Include="..\..\src\ballistica\base\app\app_vr.h" />
<ClCompile Include="..\..\src\ballistica\base\app\sdl_app.cc" />
<ClInclude Include="..\..\src\ballistica\base\app\sdl_app.h" />
<ClCompile Include="..\..\src\ballistica\base\app\stress_test.cc" />
<ClInclude Include="..\..\src\ballistica\base\app\stress_test.h" />
<ClCompile Include="..\..\src\ballistica\base\assets\asset.cc" />
<ClInclude Include="..\..\src\ballistica\base\assets\asset.h" />
<ClCompile Include="..\..\src\ballistica\base\assets\assets.cc" />
<ClInclude Include="..\..\src\ballistica\base\assets\assets.h" />
<ClCompile Include="..\..\src\ballistica\base\assets\assets_server.cc" />
<ClInclude Include="..\..\src\ballistica\base\assets\assets_server.h" />
<ClCompile Include="..\..\src\ballistica\base\assets\collision_mesh_asset.cc" />
<ClInclude Include="..\..\src\ballistica\base\assets\collision_mesh_asset.h" />
<ClCompile Include="..\..\src\ballistica\base\assets\data_asset.cc" />
<ClInclude Include="..\..\src\ballistica\base\assets\data_asset.h" />
<ClCompile Include="..\..\src\ballistica\base\assets\mesh_asset.cc" />
<ClInclude Include="..\..\src\ballistica\base\assets\mesh_asset.h" />
<ClInclude Include="..\..\src\ballistica\base\assets\mesh_asset_renderer_data.h" />
<ClCompile Include="..\..\src\ballistica\base\assets\sound_asset.cc" />
<ClInclude Include="..\..\src\ballistica\base\assets\sound_asset.h" />
<ClCompile Include="..\..\src\ballistica\base\assets\texture_asset.cc" />
<ClInclude Include="..\..\src\ballistica\base\assets\texture_asset.h" />
<ClCompile Include="..\..\src\ballistica\base\assets\texture_asset_preload_data.cc" />
<ClInclude Include="..\..\src\ballistica\base\assets\texture_asset_preload_data.h" />
<ClInclude Include="..\..\src\ballistica\base\assets\texture_asset_renderer_data.h" />
<ClCompile Include="..\..\src\ballistica\base\audio\al_sys.cc" />
<ClInclude Include="..\..\src\ballistica\base\audio\al_sys.h" />
<ClCompile Include="..\..\src\ballistica\base\audio\audio.cc" />
<ClInclude Include="..\..\src\ballistica\base\audio\audio.h" />
<ClCompile Include="..\..\src\ballistica\base\audio\audio_server.cc" />
<ClInclude Include="..\..\src\ballistica\base\audio\audio_server.h" />
<ClCompile Include="..\..\src\ballistica\base\audio\audio_source.cc" />
<ClInclude Include="..\..\src\ballistica\base\audio\audio_source.h" />
<ClCompile Include="..\..\src\ballistica\base\audio\audio_streamer.cc" />
<ClInclude Include="..\..\src\ballistica\base\audio\audio_streamer.h" />
<ClCompile Include="..\..\src\ballistica\base\audio\ogg_stream.cc" />
<ClInclude Include="..\..\src\ballistica\base\audio\ogg_stream.h" />
<ClCompile Include="..\..\src\ballistica\base\base.cc" />
<ClInclude Include="..\..\src\ballistica\base\base.h" />
<ClCompile Include="..\..\src\ballistica\base\dynamics\bg\bg_dynamics.cc" />
<ClInclude Include="..\..\src\ballistica\base\dynamics\bg\bg_dynamics.h" />
<ClInclude Include="..\..\src\ballistica\base\dynamics\bg\bg_dynamics_draw_snapshot.h" />
<ClCompile Include="..\..\src\ballistica\base\dynamics\bg\bg_dynamics_fuse.cc" />
<ClInclude Include="..\..\src\ballistica\base\dynamics\bg\bg_dynamics_fuse.h" />
<ClInclude Include="..\..\src\ballistica\base\dynamics\bg\bg_dynamics_fuse_data.h" />
<ClCompile Include="..\..\src\ballistica\base\dynamics\bg\bg_dynamics_height_cache.cc" />
<ClInclude Include="..\..\src\ballistica\base\dynamics\bg\bg_dynamics_height_cache.h" />
<ClCompile Include="..\..\src\ballistica\base\dynamics\bg\bg_dynamics_server.cc" />
<ClInclude Include="..\..\src\ballistica\base\dynamics\bg\bg_dynamics_server.h" />
<ClCompile Include="..\..\src\ballistica\base\dynamics\bg\bg_dynamics_shadow.cc" />
<ClInclude Include="..\..\src\ballistica\base\dynamics\bg\bg_dynamics_shadow.h" />
<ClInclude Include="..\..\src\ballistica\base\dynamics\bg\bg_dynamics_shadow_data.h" />
<ClCompile Include="..\..\src\ballistica\base\dynamics\bg\bg_dynamics_volume_light.cc" />
<ClInclude Include="..\..\src\ballistica\base\dynamics\bg\bg_dynamics_volume_light.h" />
<ClInclude Include="..\..\src\ballistica\base\dynamics\bg\bg_dynamics_volume_light_data.h" />
<ClCompile Include="..\..\src\ballistica\base\dynamics\collision_cache.cc" />
<ClInclude Include="..\..\src\ballistica\base\dynamics\collision_cache.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\component\empty_component.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\component\object_component.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\component\object_component.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\component\post_process_component.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\component\post_process_component.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\component\render_component.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\component\render_component.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\component\shield_component.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\component\shield_component.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\component\simple_component.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\component\simple_component.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\component\smoke_component.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\component\smoke_component.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\component\special_component.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\component\special_component.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\component\sprite_component.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\component\sprite_component.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\gl\gl_sys.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\gl\gl_sys.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\gl\renderer_gl.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\gl\renderer_gl.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\graphics.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\graphics.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\graphics_server.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\graphics_server.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\graphics_vr.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\graphics_vr.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\mesh\image_mesh.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\image_mesh.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\mesh.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\mesh_buffer.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\mesh_buffer_base.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\mesh_buffer_vertex_simple_full.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\mesh_buffer_vertex_smoke_full.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\mesh_buffer_vertex_sprite.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\mesh\mesh_data.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\mesh_data.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\mesh\mesh_data_client_handle.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\mesh_data_client_handle.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\mesh_index_buffer_16.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\mesh_index_buffer_32.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\mesh_indexed.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\mesh_indexed_base.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\mesh_indexed_dual_texture_full.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\mesh_indexed_object_split.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\mesh_indexed_simple_full.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\mesh_indexed_simple_split.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\mesh_indexed_smoke_full.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\mesh_indexed_static_dynamic.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\mesh_non_indexed.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\mesh_renderer_data.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\sprite_mesh.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\mesh\text_mesh.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\mesh\text_mesh.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\renderer\framebuffer.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\renderer\render_pass.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\renderer\render_pass.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\renderer\render_target.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\renderer\render_target.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\renderer\renderer.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\renderer\renderer.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\support\area_of_interest.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\support\area_of_interest.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\support\camera.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\support\camera.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\support\frame_def.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\support\frame_def.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\support\net_graph.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\support\net_graph.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\support\render_command_buffer.h" />
<ClInclude Include="..\..\src\ballistica\base\graphics\text\font_page_map_data.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\text\text_graphics.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\text\text_graphics.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\text\text_group.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\text\text_group.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\text\text_packer.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\text\text_packer.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\texture\dds.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\texture\dds.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\texture\ktx.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\texture\ktx.h" />
<ClCompile Include="..\..\src\ballistica\base\graphics\texture\pvr.cc" />
<ClInclude Include="..\..\src\ballistica\base\graphics\texture\pvr.h" />
<ClCompile Include="..\..\src\ballistica\base\input\device\input_device.cc" />
<ClInclude Include="..\..\src\ballistica\base\input\device\input_device.h" />
<ClCompile Include="..\..\src\ballistica\base\input\device\input_device_delegate.cc" />
<ClInclude Include="..\..\src\ballistica\base\input\device\input_device_delegate.h" />
<ClCompile Include="..\..\src\ballistica\base\input\device\joystick_input.cc" />
<ClInclude Include="..\..\src\ballistica\base\input\device\joystick_input.h" />
<ClCompile Include="..\..\src\ballistica\base\input\device\keyboard_input.cc" />
<ClInclude Include="..\..\src\ballistica\base\input\device\keyboard_input.h" />
<ClCompile Include="..\..\src\ballistica\base\input\device\test_input.cc" />
<ClInclude Include="..\..\src\ballistica\base\input\device\test_input.h" />
<ClCompile Include="..\..\src\ballistica\base\input\device\touch_input.cc" />
<ClInclude Include="..\..\src\ballistica\base\input\device\touch_input.h" />
<ClCompile Include="..\..\src\ballistica\base\input\input.cc" />
<ClInclude Include="..\..\src\ballistica\base\input\input.h" />
<ClCompile Include="..\..\src\ballistica\base\input\support\remote_app_server.cc" />
<ClInclude Include="..\..\src\ballistica\base\input\support\remote_app_server.h" />
<ClCompile Include="..\..\src\ballistica\base\logic\logic.cc" />
<ClInclude Include="..\..\src\ballistica\base\logic\logic.h" />
<ClCompile Include="..\..\src\ballistica\base\networking\network_reader.cc" />
<ClInclude Include="..\..\src\ballistica\base\networking\network_reader.h" />
<ClCompile Include="..\..\src\ballistica\base\networking\network_writer.cc" />
<ClInclude Include="..\..\src\ballistica\base\networking\network_writer.h" />
<ClCompile Include="..\..\src\ballistica\base\networking\networking.cc" />
<ClInclude Include="..\..\src\ballistica\base\networking\networking.h" />
<ClCompile Include="..\..\src\ballistica\base\platform\android\amazon\base_plat_andr_amazon.cc" />
<ClInclude Include="..\..\src\ballistica\base\platform\android\amazon\base_plat_andr_amazon.h" />
<ClCompile Include="..\..\src\ballistica\base\platform\android\base_platform_android.cc" />
<ClInclude Include="..\..\src\ballistica\base\platform\android\base_platform_android.h" />
<ClCompile Include="..\..\src\ballistica\base\platform\android\cardboard\base_pl_an_cardboard.cc" />
<ClInclude Include="..\..\src\ballistica\base\platform\android\cardboard\base_pl_an_cardboard.h" />
<ClCompile Include="..\..\src\ballistica\base\platform\android\google\base_plat_andr_google.cc" />
<ClInclude Include="..\..\src\ballistica\base\platform\android\google\base_plat_andr_google.h" />
<ClCompile Include="..\..\src\ballistica\base\platform\apple\base_platform_apple.cc" />
<ClInclude Include="..\..\src\ballistica\base\platform\apple\base_platform_apple.h" />
<ClCompile Include="..\..\src\ballistica\base\platform\base_platform.cc" />
<ClInclude Include="..\..\src\ballistica\base\platform\base_platform.h" />
<ClCompile Include="..\..\src\ballistica\base\platform\linux\base_platform_linux.cc" />
<ClInclude Include="..\..\src\ballistica\base\platform\linux\base_platform_linux.h" />
<ClCompile Include="..\..\src\ballistica\base\platform\oculus\main_rift.cc" />
<ClInclude Include="..\..\src\ballistica\base\platform\support\min_sdl_key_names.h" />
<ClCompile Include="..\..\src\ballistica\base\platform\windows\base_platform_windows.cc" />
<ClInclude Include="..\..\src\ballistica\base\platform\windows\base_platform_windows.h" />
<ClCompile Include="..\..\src\ballistica\base\platform\windows\base_platform_windows_oculus.cc" />
<ClInclude Include="..\..\src\ballistica\base\platform\windows\base_platform_windows_oculus.h" />
<ClCompile Include="..\..\src\ballistica\base\python\base_python.cc" />
<ClInclude Include="..\..\src\ballistica\base\python\base_python.h" />
<ClCompile Include="..\..\src\ballistica\base\python\class\python_class_app_timer.cc" />
<ClInclude Include="..\..\src\ballistica\base\python\class\python_class_app_timer.h" />
<ClCompile Include="..\..\src\ballistica\base\python\class\python_class_context_call.cc" />
<ClInclude Include="..\..\src\ballistica\base\python\class\python_class_context_call.h" />
<ClCompile Include="..\..\src\ballistica\base\python\class\python_class_context_ref.cc" />
<ClInclude Include="..\..\src\ballistica\base\python\class\python_class_context_ref.h" />
<ClCompile Include="..\..\src\ballistica\base\python\class\python_class_display_timer.cc" />
<ClInclude Include="..\..\src\ballistica\base\python\class\python_class_display_timer.h" />
<ClCompile Include="..\..\src\ballistica\base\python\class\python_class_feature_set_data.cc" />
<ClInclude Include="..\..\src\ballistica\base\python\class\python_class_feature_set_data.h" />
<ClCompile Include="..\..\src\ballistica\base\python\class\python_class_simple_sound.cc" />
<ClInclude Include="..\..\src\ballistica\base\python\class\python_class_simple_sound.h" />
<ClCompile Include="..\..\src\ballistica\base\python\class\python_class_vec3.cc" />
<ClInclude Include="..\..\src\ballistica\base\python\class\python_class_vec3.h" />
<ClCompile Include="..\..\src\ballistica\base\python\methods\python_methods_app.cc" />
<ClInclude Include="..\..\src\ballistica\base\python\methods\python_methods_app.h" />
<ClCompile Include="..\..\src\ballistica\base\python\methods\python_methods_graphics.cc" />
<ClInclude Include="..\..\src\ballistica\base\python\methods\python_methods_graphics.h" />
<ClCompile Include="..\..\src\ballistica\base\python\methods\python_methods_misc.cc" />
<ClInclude Include="..\..\src\ballistica\base\python\methods\python_methods_misc.h" />
<ClCompile Include="..\..\src\ballistica\base\python\support\python_context_call.cc" />
<ClInclude Include="..\..\src\ballistica\base\python\support\python_context_call.h" />
<ClInclude Include="..\..\src\ballistica\base\python\support\python_context_call_runnable.h" />
<ClInclude Include="..\..\src\ballistica\base\support\app_timer.h" />
<ClCompile Include="..\..\src\ballistica\base\support\context.cc" />
<ClInclude Include="..\..\src\ballistica\base\support\context.h" />
<ClCompile Include="..\..\src\ballistica\base\support\huffman.cc" />
<ClInclude Include="..\..\src\ballistica\base\support\huffman.h" />
<ClInclude Include="..\..\src\ballistica\base\support\plus_soft.h" />
<ClCompile Include="..\..\src\ballistica\base\support\stdio_console.cc" />
<ClInclude Include="..\..\src\ballistica\base\support\stdio_console.h" />
<ClCompile Include="..\..\src\ballistica\base\ui\console.cc" />
<ClInclude Include="..\..\src\ballistica\base\ui\console.h" />
<ClCompile Include="..\..\src\ballistica\base\ui\ui.cc" />
<ClInclude Include="..\..\src\ballistica\base\ui\ui.h" />
<ClInclude Include="..\..\src\ballistica\base\ui\widget_message.h" />
<ClCompile Include="..\..\src\ballistica\classic\classic.cc" />
<ClInclude Include="..\..\src\ballistica\classic\classic.h" />
<ClCompile Include="..\..\src\ballistica\classic\python\classic_python.cc" />
<ClInclude Include="..\..\src\ballistica\classic\python\classic_python.h" />
<ClCompile Include="..\..\src\ballistica\classic\python\methods\python_methods_classic.cc" />
<ClInclude Include="..\..\src\ballistica\classic\python\methods\python_methods_classic.h" />
<ClCompile Include="..\..\src\ballistica\classic\support\v1_account.cc" />
<ClInclude Include="..\..\src\ballistica\classic\support\v1_account.h" />
<ClCompile Include="..\..\src\ballistica\core\core.cc" />
<ClInclude Include="..\..\src\ballistica\core\core.h" />
<ClInclude Include="..\..\src\ballistica\core\platform\apple\core_platform_apple.h" />
<ClCompile Include="..\..\src\ballistica\core\platform\core_platform.cc" />
<ClInclude Include="..\..\src\ballistica\core\platform\core_platform.h" />
<ClCompile Include="..\..\src\ballistica\core\platform\linux\core_platform_linux.cc" />
<ClInclude Include="..\..\src\ballistica\core\platform\linux\core_platform_linux.h" />
<ClInclude Include="..\..\src\ballistica\core\platform\support\min_sdl.h" />
<ClCompile Include="..\..\src\ballistica\core\platform\windows\core_platform_windows.cc" />
<ClInclude Include="..\..\src\ballistica\core\platform\windows\core_platform_windows.h" />
<ClCompile Include="..\..\src\ballistica\core\python\core_python.cc" />
<ClInclude Include="..\..\src\ballistica\core\python\core_python.h" />
<ClInclude Include="..\..\src\ballistica\core\support\base_soft.h" />
<ClCompile Include="..\..\src\ballistica\core\support\core_config.cc" />
<ClInclude Include="..\..\src\ballistica\core\support\core_config.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\assets\scene_asset.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\assets\scene_asset.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\assets\scene_collision_mesh.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\assets\scene_collision_mesh.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\assets\scene_cube_map_texture.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\assets\scene_cube_map_texture.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\assets\scene_data_asset.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\assets\scene_data_asset.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\assets\scene_mesh.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\assets\scene_mesh.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\assets\scene_sound.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\assets\scene_sound.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\assets\scene_texture.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\assets\scene_texture.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\connection\connection.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\connection\connection.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\connection\connection_set.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\connection\connection_set.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\connection\connection_to_client.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\connection\connection_to_client.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\connection\connection_to_client_udp.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\connection\connection_to_client_udp.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\connection\connection_to_host.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\connection\connection_to_host.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\connection\connection_to_host_udp.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\connection\connection_to_host_udp.h" />
<ClInclude Include="..\..\src\ballistica\scene_v1\dynamics\collision.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\dynamics\dynamics.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\dynamics\dynamics.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\dynamics\material\impact_sound_material_action.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\dynamics\material\impact_sound_material_action.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\dynamics\material\material.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\dynamics\material\material.h" />
<ClInclude Include="..\..\src\ballistica\scene_v1\dynamics\material\material_action.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\dynamics\material\material_component.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\dynamics\material\material_component.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\dynamics\material\material_condition_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\dynamics\material\material_condition_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\dynamics\material\material_context.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\dynamics\material\material_context.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\dynamics\material\node_message_material_action.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\dynamics\material\node_message_material_action.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\dynamics\material\node_mod_material_action.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\dynamics\material\node_mod_material_action.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\dynamics\material\node_user_msg_mat_action.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\dynamics\material\node_user_msg_mat_action.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\dynamics\material\part_mod_material_action.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\dynamics\material\part_mod_material_action.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\dynamics\material\python_call_material_action.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\dynamics\material\python_call_material_action.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\dynamics\material\roll_sound_material_action.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\dynamics\material\roll_sound_material_action.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\dynamics\material\skid_sound_material_action.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\dynamics\material\skid_sound_material_action.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\dynamics\material\sound_material_action.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\dynamics\material\sound_material_action.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\dynamics\part.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\dynamics\part.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\dynamics\rigid_body.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\dynamics\rigid_body.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\anim_curve_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\anim_curve_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\bomb_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\bomb_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\combine_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\combine_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\explosion_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\explosion_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\flag_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\flag_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\flash_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\flash_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\globals_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\globals_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\image_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\image_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\light_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\light_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\locator_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\locator_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\math_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\math_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\node_attribute.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\node_attribute.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\node_attribute_connection.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\node_attribute_connection.h" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\node_type.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\null_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\null_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\player_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\player_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\prop_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\prop_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\region_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\region_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\scorch_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\scorch_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\session_globals_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\session_globals_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\shield_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\shield_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\sound_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\sound_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\spaz_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\spaz_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\terrain_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\terrain_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\text_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\text_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\texture_sequence_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\texture_sequence_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\node\time_display_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\node\time_display_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\python\class\python_class_activity_data.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\python\class\python_class_activity_data.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\python\class\python_class_base_timer.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\python\class\python_class_base_timer.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\python\class\python_class_input_device.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\python\class\python_class_input_device.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\python\class\python_class_material.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\python\class\python_class_material.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\python\class\python_class_node.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\python\class\python_class_node.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\python\class\python_class_scene_collision_mesh.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\python\class\python_class_scene_collision_mesh.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\python\class\python_class_scene_data_asset.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\python\class\python_class_scene_data_asset.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\python\class\python_class_scene_mesh.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\python\class\python_class_scene_mesh.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\python\class\python_class_scene_sound.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\python\class\python_class_scene_sound.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\python\class\python_class_scene_texture.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\python\class\python_class_scene_texture.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\python\class\python_class_scene_timer.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\python\class\python_class_scene_timer.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\python\class\python_class_session_data.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\python\class\python_class_session_data.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\python\class\python_class_session_player.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\python\class\python_class_session_player.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\python\methods\python_methods_assets.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\python\methods\python_methods_assets.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\python\methods\python_methods_input.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\python\methods\python_methods_input.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\python\methods\python_methods_networking.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\python\methods\python_methods_networking.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\python\methods\python_methods_scene.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\python\methods\python_methods_scene.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\python\scene_v1_python.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\python\scene_v1_python.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\scene_v1.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\scene_v1.h" />
<ClInclude Include="..\..\src\ballistica\scene_v1\support\client_controller_interface.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\support\client_input_device.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\support\client_input_device.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\support\client_input_device_delegate.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\support\client_input_device_delegate.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\support\client_session.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\support\client_session.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\support\client_session_net.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\support\client_session_net.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\support\client_session_replay.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\support\client_session_replay.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\support\host_activity.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\support\host_activity.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\support\host_session.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\support\host_session.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\support\player.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\support\player.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\support\player_spec.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\support\player_spec.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\support\scene.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\support\scene.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\support\scene_v1_app_mode.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\support\scene_v1_app_mode.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\support\scene_v1_context.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\support\scene_v1_context.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\support\scene_v1_input_device_delegate.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\support\scene_v1_input_device_delegate.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\support\session.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\support\session.h" />
<ClCompile Include="..\..\src\ballistica\scene_v1\support\session_stream.cc" />
<ClInclude Include="..\..\src\ballistica\scene_v1\support\session_stream.h" />
<ClCompile Include="..\..\src\ballistica\shared\ballistica.cc" />
<ClInclude Include="..\..\src\ballistica\shared\ballistica.h" />
<ClInclude Include="..\..\src\ballistica\shared\buildconfig\buildconfig_cmake.h" />
<ClInclude Include="..\..\src\ballistica\shared\buildconfig\buildconfig_common.h" />
<ClInclude Include="..\..\src\ballistica\shared\buildconfig\buildconfig_windows_common.h" />
<ClInclude Include="..\..\src\ballistica\shared\buildconfig\buildconfig_windows_generic.h" />
<ClInclude Include="..\..\src\ballistica\shared\buildconfig\buildconfig_windows_headless.h" />
<ClCompile Include="..\..\src\ballistica\shared\foundation\event_loop.cc" />
<ClInclude Include="..\..\src\ballistica\shared\foundation\event_loop.h" />
<ClCompile Include="..\..\src\ballistica\shared\foundation\exception.cc" />
<ClInclude Include="..\..\src\ballistica\shared\foundation\exception.h" />
<ClCompile Include="..\..\src\ballistica\shared\foundation\fatal_error.cc" />
<ClInclude Include="..\..\src\ballistica\shared\foundation\fatal_error.h" />
<ClCompile Include="..\..\src\ballistica\shared\foundation\feature_set_front_end.cc" />
<ClInclude Include="..\..\src\ballistica\shared\foundation\feature_set_front_end.h" />
<ClCompile Include="..\..\src\ballistica\shared\foundation\inline.cc" />
<ClInclude Include="..\..\src\ballistica\shared\foundation\inline.h" />
<ClCompile Include="..\..\src\ballistica\shared\foundation\logging.cc" />
<ClInclude Include="..\..\src\ballistica\shared\foundation\logging.h" />
<ClCompile Include="..\..\src\ballistica\shared\foundation\macros.cc" />
<ClInclude Include="..\..\src\ballistica\shared\foundation\macros.h" />
<ClCompile Include="..\..\src\ballistica\shared\foundation\object.cc" />
<ClInclude Include="..\..\src\ballistica\shared\foundation\object.h" />
<ClInclude Include="..\..\src\ballistica\shared\foundation\types.h" />
<ClCompile Include="..\..\src\ballistica\shared\generic\base64.cc" />
<ClInclude Include="..\..\src\ballistica\shared\generic\base64.h" />
<ClInclude Include="..\..\src\ballistica\shared\generic\buffer.h" />
<ClCompile Include="..\..\src\ballistica\shared\generic\json.cc" />
<ClInclude Include="..\..\src\ballistica\shared\generic\json.h" />
<ClInclude Include="..\..\src\ballistica\shared\generic\lambda_runnable.h" />
<ClCompile Include="..\..\src\ballistica\shared\generic\runnable.cc" />
<ClInclude Include="..\..\src\ballistica\shared\generic\runnable.h" />
<ClCompile Include="..\..\src\ballistica\shared\generic\timer_list.cc" />
<ClInclude Include="..\..\src\ballistica\shared\generic\timer_list.h" />
<ClCompile Include="..\..\src\ballistica\shared\generic\utf8.cc" />
<ClInclude Include="..\..\src\ballistica\shared\generic\utf8.h" />
<ClCompile Include="..\..\src\ballistica\shared\generic\utils.cc" />
<ClInclude Include="..\..\src\ballistica\shared\generic\utils.h" />
<ClCompile Include="..\..\src\ballistica\shared\math\matrix44f.cc" />
<ClInclude Include="..\..\src\ballistica\shared\math\matrix44f.h" />
<ClInclude Include="..\..\src\ballistica\shared\math\point2d.h" />
<ClCompile Include="..\..\src\ballistica\shared\math\random.cc" />
<ClInclude Include="..\..\src\ballistica\shared\math\random.h" />
<ClInclude Include="..\..\src\ballistica\shared\math\rect.h" />
<ClInclude Include="..\..\src\ballistica\shared\math\vector2f.h" />
<ClCompile Include="..\..\src\ballistica\shared\math\vector3f.cc" />
<ClInclude Include="..\..\src\ballistica\shared\math\vector3f.h" />
<ClInclude Include="..\..\src\ballistica\shared\math\vector4f.h" />
<ClInclude Include="..\..\src\ballistica\shared\networking\networking_sys.h" />
<ClCompile Include="..\..\src\ballistica\shared\networking\sockaddr.cc" />
<ClInclude Include="..\..\src\ballistica\shared\networking\sockaddr.h" />
<ClCompile Include="..\..\src\ballistica\shared\python\python.cc" />
<ClInclude Include="..\..\src\ballistica\shared\python\python.h" />
<ClCompile Include="..\..\src\ballistica\shared\python\python_class.cc" />
<ClInclude Include="..\..\src\ballistica\shared\python\python_class.h" />
<ClCompile Include="..\..\src\ballistica\shared\python\python_command.cc" />
<ClInclude Include="..\..\src\ballistica\shared\python\python_command.h" />
<ClInclude Include="..\..\src\ballistica\shared\python\python_module_builder.h" />
<ClCompile Include="..\..\src\ballistica\shared\python\python_object_set.cc" />
<ClInclude Include="..\..\src\ballistica\shared\python\python_object_set.h" />
<ClCompile Include="..\..\src\ballistica\shared\python\python_ref.cc" />
<ClInclude Include="..\..\src\ballistica\shared\python\python_ref.h" />
<ClInclude Include="..\..\src\ballistica\shared\python\python_sys.h" />
<ClCompile Include="..\..\src\ballistica\template_fs\python\class\python_class_hello.cc" />
<ClInclude Include="..\..\src\ballistica\template_fs\python\class\python_class_hello.h" />
<ClCompile Include="..\..\src\ballistica\template_fs\python\methods\python_methods_template_fs.cc" />
<ClInclude Include="..\..\src\ballistica\template_fs\python\methods\python_methods_template_fs.h" />
<ClCompile Include="..\..\src\ballistica\template_fs\python\template_fs_python.cc" />
<ClInclude Include="..\..\src\ballistica\template_fs\python\template_fs_python.h" />
<ClCompile Include="..\..\src\ballistica\template_fs\template_fs.cc" />
<ClInclude Include="..\..\src\ballistica\template_fs\template_fs.h" />
<ClCompile Include="..\..\src\ballistica\ui_v1\python\class\python_class_ui_mesh.cc" />
<ClInclude Include="..\..\src\ballistica\ui_v1\python\class\python_class_ui_mesh.h" />
<ClCompile Include="..\..\src\ballistica\ui_v1\python\class\python_class_ui_sound.cc" />
<ClInclude Include="..\..\src\ballistica\ui_v1\python\class\python_class_ui_sound.h" />
<ClCompile Include="..\..\src\ballistica\ui_v1\python\class\python_class_ui_texture.cc" />
<ClInclude Include="..\..\src\ballistica\ui_v1\python\class\python_class_ui_texture.h" />
<ClCompile Include="..\..\src\ballistica\ui_v1\python\class\python_class_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui_v1\python\class\python_class_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui_v1\python\methods\python_methods_ui_v1.cc" />
<ClInclude Include="..\..\src\ballistica\ui_v1\python\methods\python_methods_ui_v1.h" />
<ClCompile Include="..\..\src\ballistica\ui_v1\python\ui_v1_python.cc" />
<ClInclude Include="..\..\src\ballistica\ui_v1\python\ui_v1_python.h" />
<ClCompile Include="..\..\src\ballistica\ui_v1\support\root_ui.cc" />
<ClInclude Include="..\..\src\ballistica\ui_v1\support\root_ui.h" />
<ClCompile Include="..\..\src\ballistica\ui_v1\ui_v1.cc" />
<ClInclude Include="..\..\src\ballistica\ui_v1\ui_v1.h" />
<ClCompile Include="..\..\src\ballistica\ui_v1\widget\button_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui_v1\widget\button_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui_v1\widget\check_box_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui_v1\widget\check_box_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui_v1\widget\column_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui_v1\widget\column_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui_v1\widget\container_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui_v1\widget\container_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui_v1\widget\h_scroll_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui_v1\widget\h_scroll_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui_v1\widget\image_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui_v1\widget\image_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui_v1\widget\root_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui_v1\widget\root_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui_v1\widget\row_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui_v1\widget\row_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui_v1\widget\scroll_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui_v1\widget\scroll_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui_v1\widget\stack_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui_v1\widget\stack_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui_v1\widget\text_widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui_v1\widget\text_widget.h" />
<ClCompile Include="..\..\src\ballistica\ui_v1\widget\widget.cc" />
<ClInclude Include="..\..\src\ballistica\ui_v1\widget\widget.h" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceAABB.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceContainer.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceHPoint.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceIndexedTriangle.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceMatrix3x3.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceMatrix4x4.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceOBB.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IcePlane.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IcePoint.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceRandom.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceRay.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceRevisitedRadix.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceSegment.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceTriangle.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\IceUtils.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_array.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_cylinder_box.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_cylinder_plane.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_cylinder_sphere.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_cylinder_trimesh.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_kernel.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_quadtreespace.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_sapspace.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_space.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_std.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_transform.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_trimesh.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_trimesh_box.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_trimesh_ccylinder.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_trimesh_distance.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_trimesh_plane.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_trimesh_ray.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_trimesh_sphere.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_trimesh_trimesh.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_collision_util.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_error.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_export-diff.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_fastdot.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_fastldlt.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_fastlsolve.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_fastltsolve.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_joint.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_lcp.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_mass.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_mat.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_math.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_matrix.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_memory.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_misc.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_obstack.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_quickstep.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_rotation.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_step.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_stepfast.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_timer.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\ode_util.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\Opcode.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_AABBCollider.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_AABBTree.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_BaseModel.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_BoxPruning.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_Collider.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_LSSCollider.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_MeshInterface.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_Model.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_OBBCollider.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_OptimizedTree.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_Picking.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_PlanesCollider.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_RayCollider.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_SphereCollider.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_SweepAndPrune.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_TreeBuilders.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_TreeCollider.cpp" />
<ClCompile Include="..\..\src\external\open_dynamics_engine-ef\ode\OPC_VolumeCollider.cpp" />
<ClCompile Include="..\..\src\external\qr_code_generator\QrCode.cpp" />
<ClCompile Include="stdafx.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
</ClCompile>
<ClInclude Include="stdafx.h" />
<ClInclude Include="targetver.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

File diff suppressed because it is too large Load Diff

View File

@ -6,4 +6,4 @@
#pragma once
#include "ballistica/config/config_windows_headless.h"
#include "ballistica/shared/buildconfig/buildconfig_windows_headless.h"

View File

@ -1 +1,8 @@
This directory is for high level project configuration.
# Ballistica Project Configuration
This directory contains overall configuration files for the project.
Noteworthy files:
- **projectconfig.json**: Top level settings for the project. Various tools look for values here.
- **spinoffconfig.json**: Configures how this project can be spun off into other projects and/or what it inherits from a parent project.
- **localconfig.json**: Optional file influencing behavior only at this location. This file should not be stored in git/etc.

View File

@ -1,54 +0,0 @@
{
"code_source_dirs": [
"src/ballistica"
],
"cpplint_blacklist": [
"src/ballistica/generic/json.cc",
"src/ballistica/generic/json.h",
"src/ballistica/generic/utf8.cc",
"src/ballistica/graphics/texture/dds.h",
"src/ballistica/graphics/texture/ktx.cc",
"src/ballistica/platform/android/android_gl3.h",
"src/ballistica/platform/apple/app_delegate.h",
"src/ballistica/platform/apple/scripting_bridge_music.h",
"src/ballistica/platform/android/utf8/checked.h",
"src/ballistica/platform/android/utf8/unchecked.h",
"src/ballistica/platform/android/utf8/core.h",
"src/ballistica/platform/apple/sdl_main_mac.h",
"src/ballistica/platform/oculus/main_rift.cc",
"src/ballistica/platform/android/android_gl3.c"
],
"name": "BallisticaCore",
"public": true,
"pylint_ignored_untracked_deps": [
"__main__",
"astroid.modutils",
"astroid",
"pylint.lint",
"pytest",
"pytz",
"yaml",
"requests",
"typing_extensions",
"cpplint",
"ansiwrap",
"filelock",
"Cocoa",
"pdoc",
"certifi",
"psutil"
],
"python_paths": [
"assets/src/ba_data/python",
"src/meta",
"tools"
],
"python_source_dirs": [
"assets/src/ba_data/python",
"assets/src/server",
"assets/src/workspace",
"src/meta",
"tools",
"tests"
]
}

View File

@ -0,0 +1,5 @@
# Ballistica Feature Sets
This directory contains a config file for each feature-set in the project.
Feature sets are high level subsets of an engine or app which can be easily
added, removed, duplicated, etc.

View File

@ -0,0 +1,15 @@
# Released under the MIT License. See LICENSE for details.
#
# pylint: disable=missing-docstring, invalid-name
from __future__ import annotations
# This file is exec'ed by the spinoff system, allowing us to define
# values and behavior for this feature-set here in a way that can be
# type-checked alongside other project Python code.
from batools.featureset import FeatureSet
# Grab the FeatureSet we should apply to.
fset = FeatureSet.get_active()
fset.requirements = {'core'}

View File

@ -0,0 +1,15 @@
# Released under the MIT License. See LICENSE for details.
#
# pylint: disable=missing-docstring, invalid-name
from __future__ import annotations
# This file is exec'ed by the spinoff system, allowing us to define
# values and behavior for this feature-set here in a way that can be
# type-checked alongside other project Python code.
from batools.featureset import FeatureSet
# Grab the FeatureSet we should apply to.
fset = FeatureSet.get_active()
fset.requirements = {'base', 'scene_v1', 'ui_v1'}

View File

@ -0,0 +1,25 @@
# Released under the MIT License. See LICENSE for details.
#
# pylint: disable=missing-docstring, invalid-name
from __future__ import annotations
# This file is exec'ed by the spinoff system, allowing us to define
# values and behavior for this feature-set here in a way that can be
# type-checked alongside other project Python code.
from batools.featureset import FeatureSet
# Grab the FeatureSet we should apply to.
fset = FeatureSet.get_active()
fset.requirements = set()
fset.has_native_python_module = False
# Bits of code we're using that don't conform to our feature-set based
# namespace scheme.
fset.cpp_namespace_check_disable_files = {
'src/ballistica/core/platform/android/utf8/checked.h',
'src/ballistica/core/platform/android/utf8/unchecked.h',
'src/ballistica/core/platform/android/utf8/core.h',
}

View File

@ -0,0 +1,16 @@
# Released under the MIT License. See LICENSE for details.
#
# pylint: disable=missing-docstring, invalid-name
from __future__ import annotations
# This file is exec'ed by the spinoff system, allowing us to define
# values and behavior for this feature-set here in a way that can be
# type-checked alongside other project Python code.
from batools.featureset import FeatureSet
# Grab the FeatureSet we should apply to.
fset = FeatureSet.get_active()
fset.requirements = {'base'}
fset.internal = True

View File

@ -0,0 +1,15 @@
# Released under the MIT License. See LICENSE for details.
#
# pylint: disable=missing-docstring, invalid-name
from __future__ import annotations
# This file is exec'ed by the spinoff system, allowing us to define
# values and behavior for this feature-set here in a way that can be
# type-checked alongside other project Python code.
from batools.featureset import FeatureSet
# Grab the FeatureSet we should apply to.
fset = FeatureSet.get_active()
fset.requirements = {'base'}

View File

@ -0,0 +1,15 @@
# Released under the MIT License. See LICENSE for details.
#
# pylint: disable=missing-docstring, invalid-name
from __future__ import annotations
# This file is exec'ed by the spinoff system, allowing us to define
# values and behavior for this feature-set here in a way that can be
# type-checked alongside other project Python code.
from batools.featureset import FeatureSet
# Grab the FeatureSet we should apply to.
fset = FeatureSet.get_active()
fset.requirements = {'base'}

View File

@ -0,0 +1,18 @@
# Released under the MIT License. See LICENSE for details.
#
# pylint: disable=missing-docstring, invalid-name
from __future__ import annotations
# This file is exec'ed by the spinoff system, allowing us to define
# values and behavior for this feature-set here in a way that can be
# type-checked alongside other project Python code.
from batools.featureset import FeatureSet
# Grab the FeatureSet we should apply to.
fset = FeatureSet.get_active()
fset.requirements = {'base'}
# We'd prefer our name's title form to be 'UI V1', not the default 'Ui V1'.
fset.name_title = 'UI V1'

59
config/projectconfig.json Normal file
View File

@ -0,0 +1,59 @@
{
"code_source_dirs": [
"src/ballistica"
],
"cpplint_blacklist": [
"src/ballistica/shared/generic/json.cc",
"src/ballistica/shared/generic/json.h",
"src/ballistica/shared/generic/utf8.cc",
"src/ballistica/base/graphics/texture/dds.h",
"src/ballistica/base/graphics/texture/ktx.cc",
"src/ballistica/core/platform/android/android_gl3.h",
"src/ballistica/core/platform/apple/app_delegate.h",
"src/ballistica/core/platform/apple/scripting_bridge_music.h",
"src/ballistica/core/platform/android/utf8/checked.h",
"src/ballistica/core/platform/android/utf8/unchecked.h",
"src/ballistica/core/platform/android/utf8/core.h",
"src/ballistica/core/platform/apple/sdl_main_mac.h",
"src/ballistica/base/platform/oculus/main_rift.cc",
"src/ballistica/core/platform/android/android_gl3.c"
],
"name": "BallisticaKit",
"public": true,
"pylint_ignored_untracked_deps": [
"__main__",
"astroid.modutils",
"astroid",
"pylint.lint",
"pytest",
"pytz",
"yaml",
"requests",
"typing_extensions",
"cpplint",
"ansiwrap",
"filelock",
"Cocoa",
"pdoc",
"certifi",
"psutil",
"pbxproj.XcodeProject",
"pbxproj.pbxextensions",
"openstep_parser"
],
"python_paths": [
"src/assets/ba_data/python",
"build/dummymodules",
"src/meta",
"tools"
],
"python_source_dirs": [
"src/assets/ba_data/python",
"src/assets/server",
"src/assets/workspace",
"src/meta",
"tools",
"tests",
"config"
]
}

284
config/spinoffconfig.py Normal file
View File

@ -0,0 +1,284 @@
# Released under the MIT License. See LICENSE for details.
#
# pylint: disable=missing-docstring, invalid-name
from __future__ import annotations
# This file is exec'ed by tools/spinoff, allowing us to customize
# how this src project gits filtered into dst projects.
from batools.spinoff import SpinoffContext
# Grab the context we should apply to.
ctx = SpinoffContext.get_active()
# As a src project, we set up a baseline set of rules based on what
# we contain. The dst project config (exec'ed after us) is then free
# to override based on what they want of ours or what they add
# themselves.
# Any files/dirs with these base names will be ignored by spinoff
# on both src and dst.
ctx.ignore_names = {
'__pycache__',
'.git',
'.mypy_cache',
}
# Special set of paths managed by spinoff but ALSO stored in git in
# the dst project. This is for bare minimum stuff needed to be always
# present in dst for bootstrapping, indexing by github, etc). Changes
# to these files in dst will be silently and happily overwritten by
# spinoff, so tread carefully.
ctx.git_mirrored_paths = {
'.gitignore',
'.gitattributes',
'README.md',
'config/jenkins',
}
# File names that can be quietly ignored or cleared out when found.
# This should encompass things like .DS_Store files created by the
# Mac Finder when browsing directories. This helps spinoff remove
# empty directories when doing a 'clean', etc.
ctx.cruft_file_names = {'.DS_Store'}
# These paths in the src project will be skipped over during updates and
# not synced into the dst project. The dst project can use this to
# trim out parts of the src project that it doesn't want or that it
# intends to 'override' with its own versions.
ctx.src_omit_paths = {
'.gitignore',
'config/spinoffconfig.py',
'ballisticakit-android/build',
'tools/spinoff',
'.editorconfig',
}
# Use this to 'carve out' directories or exact file paths which will be
# git-managed on dst. By default, spinoff will consider dirs containing
# the files it syncs from src as 'spinoff-managed'; it will set them as
# git-ignored and will complain if any files appear in them that it does
# not manage itself (to prevent accidentally doing work in such places).
# Note that adding a dir to src_write_paths does not prevent files
# within it from being synced by spinoff; it just means that each of
# those individual spinoff-managed files will have their own gitignore
# entry since there is no longer one covering the whole dir. So to keep
# things tidy, carve out the minimal set of exact file/dir paths that you
# need.
ctx.src_write_paths = {
'tools/spinoff',
'config/spinoffconfig.py',
}
# Normally spinoff errors if it finds any files in its managed dirs
# that it did not put there. This is to prevent accidentally working
# in these parts of a dst project; since these sections are git-ignored,
# git itself won't raise any warnings in such cases and it would be easy
# to accidentally lose work otherwise.
# This list can be used to suppress spinoff's errors for specific
# locations. This is generally used to allow build output or other
# dynamically generated files to exist within spinoff-managed
# directories. It is possible to use src_write_paths for such purposes,
# but this has the side-effect of greatly complicating the dst
# project's gitignore list; selectively marking a few dirs as
# unchecked makes for a cleaner setup. Just be careful to not set
# excessively broad regions as unchecked; you don't want to mask
# actual useful error messages.
ctx.src_unchecked_paths = {
'src/ballistica/mgen',
'src/ballistica/*/mgen',
'src/assets/ba_data/python/*/_mgen',
'src/meta/*/mgen',
'ballisticakit-cmake/.clang-format',
'ballisticakit-android/BallisticaKit/src/cardboard/res',
'ballisticakit-windows/*/BallisticaKit.ico',
'ballisticakit-xcode/BallisticaKit Shared/Assets.xcassets',
'ballisticakit-android/BallisticaKit/src/*/res',
'ballisticakit-android/BallisticaKit/src/*/assets',
}
# Files at or under these paths are considered 'project' files.
# These files are synced after all other files and go through
# batools.project.Updater class as part of their filtering.
# This allows them to update themselves in the same way as they
# do when running 'make update' for the project; adding the final
# filtered set of project source files to themself, etc.
ctx.project_file_paths = set()
# Everything actually synced into dst will use the following filter rules:
# If files are 'filtered' it means they will have all instances
# of BallisticaKit in their names and contents replaced with their
# project name. Other custom filtering can also be applied. Obviously
# filtering should not be run on certain files (binary data, etc.)
# and disabling it where not needed can improve efficiency and make
# backporting easier (editing spinoff-managed files in dst and getting
# those changes back into src).
# Anything under these dirs WILL be filtered.
ctx.filter_dirs = {
'ballisticakit-cmake',
'ballisticakit-xcode/BallisticaKit.xcodeproj',
'ballisticakit-ios.xcodeproj',
'ballisticakit-mac.xcodeproj',
'config',
'src/assets/pdoc',
}
# ELSE anything under these dirs will NOT be filtered.
ctx.no_filter_dirs = {
'src/external',
'src/assets/pylib-android',
'src/assets/pylib-apple',
'src/assets/ba_data/python-site-packages',
'src/assets/windows',
}
# ELSE files matching these exact base names WILL be filtered
# (so FOO matches a/b/FOO as well as just FOO).
ctx.filter_file_names = {
'Makefile',
'.gitignore',
'.gitattributes',
'README',
'README.md',
'bootstrap',
'configure',
'Makefile.am',
'Makefile.in',
'Jenkinsfile',
'assets_phase_android',
'testfoo.py',
'testfoo2.py',
'assets_phase_xcode',
'ballistica_maya_tools.mel',
'check_python_syntax',
'compile_python_files',
'pcommand',
'vmshell',
'cloudshell',
'BUCK',
'BUCK_WIN',
'upgrade_vms',
'flycheck-dir-locals.el',
'.projectile',
'.editorconfig',
'LICENSE',
'cloudtool',
'bacloud',
'config_template.yaml',
}
# ELSE files matching these exact base names will NOT be filtered.
ctx.no_filter_file_names = {
'PVRTexToolCLI',
'composite',
'etcpack',
'astcenc',
'convert',
'make_bob',
'nvcompress',
'INSTALL',
'install-sh',
'LICENSE.txt',
'gradlew',
'.style.yapf',
'.clang-format',
'.pylintrc',
'CPPLINT.cfg',
'.mypy.ini',
'._ba_sources_hash',
'._baplus_sources_hash',
'._bascenev1_sources_hash',
'._bauiv1_sources_hash',
}
# ELSE files with these extensions WILL be filtered.
ctx.filter_file_extensions = {
'.py',
'.md',
'.cpp',
'.cc',
'.c',
'.h',
'.m',
'.mm',
'.metal',
'.swift',
'.storyboard',
'.pbxproj',
'.xcworkspacedata',
'.xcscheme',
'.bat',
'.entitlements',
'.json',
'.plist',
'.strings',
'.ac',
'.m4',
'.txt',
'.settings',
'.in',
'.props',
'.html',
'.cmake',
'.sh',
'.sln',
'.vcxproj',
'.cmd',
'.hlsl',
'.gradle',
'.xml',
'.java',
'.kt',
'.pro',
'.aidl',
'.iml',
'.properties',
'.rc',
'.mk',
'.r',
'.frag',
'.vert',
'.xcsettings',
'.filters',
}
# ELSE files with these extensions will NOT be filtered.
ctx.no_filter_file_extensions = {
'.png',
'.exe',
'.psd',
'.obj',
'.wav',
'.fdata',
'.icns',
'.ico',
'.lib',
'.dll',
'.dc',
'.generated',
'.default',
'.minimal',
'.spec',
'.x',
'.pl',
'.nib',
'.Porting',
'.touch',
'.MacOSX',
'.ds',
'.WinCE',
'.hgignore',
'.inl',
'.man',
'.BIN',
'.bin',
'.pyd',
'.jar',
'.aar',
'.zip',
'.keystore',
'.bmp',
'.pem',
}

View File

@ -1,3 +1,5 @@
# Ballistica Tool Config Source
These configs can be installed via 'make prereqs' in the project root.
(this should automatically happen as part of other targets such as 'make check')

View File

@ -7,3 +7,7 @@ DerivePointerAlignment: false
# want +, -, etc at beginning of split lines
BreakBeforeBinaryOperators: NonAssignment
# Testing; kinda looks cramped without space but function-call type
# initializations look odd *with* space. Guess I'll leave default for now.
# SpaceBeforeCpp11BracedList: true

View File

@ -6,7 +6,7 @@
(python-mode (jedi:server-args . ("--sys-path" "__EFRO_PROJECT_ROOT__/tools"
"--sys-path" "__EFRO_PROJECT_ROOT__/assets/src/ba_data/python"))
"--sys-path" "__EFRO_PROJECT_ROOT__/src/assets/ba_data/python"))
(python-black-extra-args . __PYTHON_BLACK_EXTRA_ARGS__))
;; Shorter name in projectile status bar to save valuable space.
@ -19,8 +19,8 @@
(nil . ((projectile-globally-ignored-directories . ("docs"
"submodules"
"src/external"
"assets/src/pylib-android"
"assets/src/pylib-apple"
"assets/src/windows"))))
"src/assets/pylib-android"
"src/assets/pylib-apple"
"src/assets/windows"))))
)

View File

@ -13,12 +13,13 @@ root = true
end_of_line = lf
trim_trailing_whitespace = true
insert_final_newline = true
max_line_length = 80
# Python overrides.
[*.py]
indent_style = space
indent_size = 4
max_line_length = 79
max_line_length = 80
charset = utf-8
# Makefile overrides.

View File

@ -1,19 +1,8 @@
[mypy]
mypy_path = __EFRO_PROJECT_ROOT__/tools:__EFRO_PROJECT_ROOT__/assets/src/ba_data/python
mypy_path = __EFRO_PYTHON_PATHS__
__EFRO_MYPY_STANDARD_SETTINGS__
# We have mypy alert us if we use any vars that have been imported
# by other modules; we want to import everything directly from its
# source. However there are some modules that are explicitly exist
# to reexport things, so let's let those pass.
# (we could also set __all__ in those modules, but that's a lot of
# repeating ourself)
[mypy-ba]
no_implicit_reexport = False
[mypy-ba.internal]
no_implicit_reexport = False
[mypy-psutil]
ignore_missing_imports = True
@ -41,3 +30,9 @@ disallow_any_unimported = False
[mypy-pdoc]
ignore_missing_imports = True
[mypy-pbxproj.*]
ignore_missing_imports = True
[mypy-openstep_parser.*]
ignore_missing_imports = True

View File

@ -1,29 +0,0 @@
# Released under the MIT License. See LICENSE for details.
all: resources
# This section is generated by batools.resourcesmakefile; do not edit by hand.
# __AUTOGENERATED_PUBLIC_BEGIN__
# __AUTOGENERATED_PUBLIC_END__
# This section is generated by batools.resourcesmakefile; do not edit by hand.
# __AUTOGENERATED_PRIVATE_BEGIN__
resources: \
../ballisticacore-windows/Generic/BallisticaCore.ico
clean: clean-private
clean-private:
rm -f "../ballisticacore-windows/Generic/BallisticaCore.ico"
../ballisticacore-windows/Generic/BallisticaCore.ico : ../.efrocachemap
@cd .. && tools/pcommand efrocache_get resources/$@
efrocache-list:
@echo "../ballisticacore-windows/Generic/BallisticaCore.ico"
efrocache-build: resources
# __AUTOGENERATED_PRIVATE_END__

10
src/README.md Normal file
View File

@ -0,0 +1,10 @@
# Ballistica Source
(Mostly) everything contributing to Ballistica builds lives here.
### Noteworthy Bits:
- [assets/ba_data/python](assets/ba_data/python): Where most Python code going
in to the app lives.
- [ballistica](ballistica): Where the native (C++, etc.) layer of the app lives.
- [meta](meta): Code used to generate other code (metaprogramming).

View File

@ -0,0 +1,594 @@
[
"ba_data/python/__pycache__/baenv.cpython-311.opt-1.pyc",
"ba_data/python/babase/__init__.py",
"ba_data/python/babase/__pycache__/__init__.cpython-311.opt-1.pyc",
"ba_data/python/babase/__pycache__/_accountv2.cpython-311.opt-1.pyc",
"ba_data/python/babase/__pycache__/_app.cpython-311.opt-1.pyc",
"ba_data/python/babase/__pycache__/_appcomponent.cpython-311.opt-1.pyc",
"ba_data/python/babase/__pycache__/_appconfig.cpython-311.opt-1.pyc",
"ba_data/python/babase/__pycache__/_apputils.cpython-311.opt-1.pyc",
"ba_data/python/babase/__pycache__/_assetmanager.cpython-311.opt-1.pyc",
"ba_data/python/babase/__pycache__/_asyncio.cpython-311.opt-1.pyc",
"ba_data/python/babase/__pycache__/_cloud.cpython-311.opt-1.pyc",
"ba_data/python/babase/__pycache__/_error.cpython-311.opt-1.pyc",
"ba_data/python/babase/__pycache__/_general.cpython-311.opt-1.pyc",
"ba_data/python/babase/__pycache__/_hooks.cpython-311.opt-1.pyc",
"ba_data/python/babase/__pycache__/_keyboard.cpython-311.opt-1.pyc",
"ba_data/python/babase/__pycache__/_language.cpython-311.opt-1.pyc",
"ba_data/python/babase/__pycache__/_login.cpython-311.opt-1.pyc",
"ba_data/python/babase/__pycache__/_math.cpython-311.opt-1.pyc",
"ba_data/python/babase/__pycache__/_meta.cpython-311.opt-1.pyc",
"ba_data/python/babase/__pycache__/_net.cpython-311.opt-1.pyc",
"ba_data/python/babase/__pycache__/_plugin.cpython-311.opt-1.pyc",
"ba_data/python/babase/__pycache__/_text.cpython-311.opt-1.pyc",
"ba_data/python/babase/__pycache__/_workspace.cpython-311.opt-1.pyc",
"ba_data/python/babase/__pycache__/internal.cpython-311.opt-1.pyc",
"ba_data/python/babase/_accountv2.py",
"ba_data/python/babase/_app.py",
"ba_data/python/babase/_appcomponent.py",
"ba_data/python/babase/_appconfig.py",
"ba_data/python/babase/_apputils.py",
"ba_data/python/babase/_assetmanager.py",
"ba_data/python/babase/_asyncio.py",
"ba_data/python/babase/_cloud.py",
"ba_data/python/babase/_error.py",
"ba_data/python/babase/_general.py",
"ba_data/python/babase/_hooks.py",
"ba_data/python/babase/_keyboard.py",
"ba_data/python/babase/_language.py",
"ba_data/python/babase/_login.py",
"ba_data/python/babase/_math.py",
"ba_data/python/babase/_meta.py",
"ba_data/python/babase/_mgen/__init__.py",
"ba_data/python/babase/_mgen/__pycache__/__init__.cpython-311.opt-1.pyc",
"ba_data/python/babase/_mgen/__pycache__/enums.cpython-311.opt-1.pyc",
"ba_data/python/babase/_mgen/enums.py",
"ba_data/python/babase/_net.py",
"ba_data/python/babase/_plugin.py",
"ba_data/python/babase/_text.py",
"ba_data/python/babase/_workspace.py",
"ba_data/python/babase/internal.py",
"ba_data/python/baclassic/__init__.py",
"ba_data/python/baclassic/__pycache__/__init__.cpython-311.opt-1.pyc",
"ba_data/python/baclassic/__pycache__/_accountv1.cpython-311.opt-1.pyc",
"ba_data/python/baclassic/__pycache__/_achievement.cpython-311.opt-1.pyc",
"ba_data/python/baclassic/__pycache__/_ads.cpython-311.opt-1.pyc",
"ba_data/python/baclassic/__pycache__/_analytics.cpython-311.opt-1.pyc",
"ba_data/python/baclassic/__pycache__/_appdelegate.cpython-311.opt-1.pyc",
"ba_data/python/baclassic/__pycache__/_benchmark.cpython-311.opt-1.pyc",
"ba_data/python/baclassic/__pycache__/_campaign.cpython-311.opt-1.pyc",
"ba_data/python/baclassic/__pycache__/_input.cpython-311.opt-1.pyc",
"ba_data/python/baclassic/__pycache__/_level.cpython-311.opt-1.pyc",
"ba_data/python/baclassic/__pycache__/_lobby.cpython-311.opt-1.pyc",
"ba_data/python/baclassic/__pycache__/_music.cpython-311.opt-1.pyc",
"ba_data/python/baclassic/__pycache__/_net.cpython-311.opt-1.pyc",
"ba_data/python/baclassic/__pycache__/_profile.cpython-311.opt-1.pyc",
"ba_data/python/baclassic/__pycache__/_servermode.cpython-311.opt-1.pyc",
"ba_data/python/baclassic/__pycache__/_store.cpython-311.opt-1.pyc",
"ba_data/python/baclassic/__pycache__/_subsystem.cpython-311.opt-1.pyc",
"ba_data/python/baclassic/__pycache__/_tips.cpython-311.opt-1.pyc",
"ba_data/python/baclassic/__pycache__/_tournament.cpython-311.opt-1.pyc",
"ba_data/python/baclassic/__pycache__/_ui.cpython-311.opt-1.pyc",
"ba_data/python/baclassic/__pycache__/macmusicapp.cpython-311.opt-1.pyc",
"ba_data/python/baclassic/__pycache__/osmusic.cpython-311.opt-1.pyc",
"ba_data/python/baclassic/_accountv1.py",
"ba_data/python/baclassic/_achievement.py",
"ba_data/python/baclassic/_ads.py",
"ba_data/python/baclassic/_analytics.py",
"ba_data/python/baclassic/_appdelegate.py",
"ba_data/python/baclassic/_benchmark.py",
"ba_data/python/baclassic/_campaign.py",
"ba_data/python/baclassic/_input.py",
"ba_data/python/baclassic/_level.py",
"ba_data/python/baclassic/_lobby.py",
"ba_data/python/baclassic/_music.py",
"ba_data/python/baclassic/_net.py",
"ba_data/python/baclassic/_profile.py",
"ba_data/python/baclassic/_servermode.py",
"ba_data/python/baclassic/_store.py",
"ba_data/python/baclassic/_subsystem.py",
"ba_data/python/baclassic/_tips.py",
"ba_data/python/baclassic/_tournament.py",
"ba_data/python/baclassic/_ui.py",
"ba_data/python/baclassic/macmusicapp.py",
"ba_data/python/baclassic/osmusic.py",
"ba_data/python/bacommon/__init__.py",
"ba_data/python/bacommon/__pycache__/__init__.cpython-311.opt-1.pyc",
"ba_data/python/bacommon/__pycache__/assets.cpython-311.opt-1.pyc",
"ba_data/python/bacommon/__pycache__/bacloud.cpython-311.opt-1.pyc",
"ba_data/python/bacommon/__pycache__/build.cpython-311.opt-1.pyc",
"ba_data/python/bacommon/__pycache__/cloud.cpython-311.opt-1.pyc",
"ba_data/python/bacommon/__pycache__/login.cpython-311.opt-1.pyc",
"ba_data/python/bacommon/__pycache__/net.cpython-311.opt-1.pyc",
"ba_data/python/bacommon/__pycache__/servermanager.cpython-311.opt-1.pyc",
"ba_data/python/bacommon/__pycache__/transfer.cpython-311.opt-1.pyc",
"ba_data/python/bacommon/assets.py",
"ba_data/python/bacommon/bacloud.py",
"ba_data/python/bacommon/build.py",
"ba_data/python/bacommon/cloud.py",
"ba_data/python/bacommon/login.py",
"ba_data/python/bacommon/net.py",
"ba_data/python/bacommon/servermanager.py",
"ba_data/python/bacommon/transfer.py",
"ba_data/python/baenv.py",
"ba_data/python/baplus/__init__.py",
"ba_data/python/baplus/__pycache__/__init__.cpython-311.opt-1.pyc",
"ba_data/python/baplus/__pycache__/_hooks.cpython-311.opt-1.pyc",
"ba_data/python/baplus/__pycache__/_subsystem.cpython-311.opt-1.pyc",
"ba_data/python/baplus/_hooks.py",
"ba_data/python/baplus/_subsystem.py",
"ba_data/python/bascenev1/__init__.py",
"ba_data/python/bascenev1/__pycache__/__init__.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_activity.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_activitytypes.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_actor.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_collision.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_coopgame.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_coopsession.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_debug.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_dependency.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_dualteamsession.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_featureset.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_freeforallsession.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_gameactivity.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_gameresults.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_gameutils.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_hooks.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_map.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_messages.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_multiteamsession.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_music.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_nodeactor.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_player.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_playlist.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_powerup.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_score.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_session.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_settings.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_stats.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_team.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_teamgame.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/internal.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/_activity.py",
"ba_data/python/bascenev1/_activitytypes.py",
"ba_data/python/bascenev1/_actor.py",
"ba_data/python/bascenev1/_collision.py",
"ba_data/python/bascenev1/_coopgame.py",
"ba_data/python/bascenev1/_coopsession.py",
"ba_data/python/bascenev1/_debug.py",
"ba_data/python/bascenev1/_dependency.py",
"ba_data/python/bascenev1/_dualteamsession.py",
"ba_data/python/bascenev1/_featureset.py",
"ba_data/python/bascenev1/_freeforallsession.py",
"ba_data/python/bascenev1/_gameactivity.py",
"ba_data/python/bascenev1/_gameresults.py",
"ba_data/python/bascenev1/_gameutils.py",
"ba_data/python/bascenev1/_hooks.py",
"ba_data/python/bascenev1/_map.py",
"ba_data/python/bascenev1/_messages.py",
"ba_data/python/bascenev1/_multiteamsession.py",
"ba_data/python/bascenev1/_music.py",
"ba_data/python/bascenev1/_nodeactor.py",
"ba_data/python/bascenev1/_player.py",
"ba_data/python/bascenev1/_playlist.py",
"ba_data/python/bascenev1/_powerup.py",
"ba_data/python/bascenev1/_score.py",
"ba_data/python/bascenev1/_session.py",
"ba_data/python/bascenev1/_settings.py",
"ba_data/python/bascenev1/_stats.py",
"ba_data/python/bascenev1/_team.py",
"ba_data/python/bascenev1/_teamgame.py",
"ba_data/python/bascenev1/internal.py",
"ba_data/python/bastd/__init__.py",
"ba_data/python/bastd/__pycache__/__init__.cpython-311.opt-1.pyc",
"ba_data/python/bastd/__pycache__/gameutils.cpython-311.opt-1.pyc",
"ba_data/python/bastd/__pycache__/mainmenu.cpython-311.opt-1.pyc",
"ba_data/python/bastd/__pycache__/maps.cpython-311.opt-1.pyc",
"ba_data/python/bastd/__pycache__/tutorial.cpython-311.opt-1.pyc",
"ba_data/python/bastd/activity/__init__.py",
"ba_data/python/bastd/activity/__pycache__/__init__.cpython-311.opt-1.pyc",
"ba_data/python/bastd/activity/__pycache__/coopjoin.cpython-311.opt-1.pyc",
"ba_data/python/bastd/activity/__pycache__/coopscore.cpython-311.opt-1.pyc",
"ba_data/python/bastd/activity/__pycache__/drawscore.cpython-311.opt-1.pyc",
"ba_data/python/bastd/activity/__pycache__/dualteamscore.cpython-311.opt-1.pyc",
"ba_data/python/bastd/activity/__pycache__/freeforallvictory.cpython-311.opt-1.pyc",
"ba_data/python/bastd/activity/__pycache__/multiteamjoin.cpython-311.opt-1.pyc",
"ba_data/python/bastd/activity/__pycache__/multiteamscore.cpython-311.opt-1.pyc",
"ba_data/python/bastd/activity/__pycache__/multiteamvictory.cpython-311.opt-1.pyc",
"ba_data/python/bastd/activity/coopjoin.py",
"ba_data/python/bastd/activity/coopscore.py",
"ba_data/python/bastd/activity/drawscore.py",
"ba_data/python/bastd/activity/dualteamscore.py",
"ba_data/python/bastd/activity/freeforallvictory.py",
"ba_data/python/bastd/activity/multiteamjoin.py",
"ba_data/python/bastd/activity/multiteamscore.py",
"ba_data/python/bastd/activity/multiteamvictory.py",
"ba_data/python/bastd/actor/__init__.py",
"ba_data/python/bastd/actor/__pycache__/__init__.cpython-311.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/background.cpython-311.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/bomb.cpython-311.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/controlsguide.cpython-311.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/flag.cpython-311.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/image.cpython-311.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/onscreencountdown.cpython-311.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/onscreentimer.cpython-311.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/playerspaz.cpython-311.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/popuptext.cpython-311.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/powerupbox.cpython-311.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/respawnicon.cpython-311.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/scoreboard.cpython-311.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/spawner.cpython-311.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/spaz.cpython-311.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/spazappearance.cpython-311.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/spazbot.cpython-311.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/spazfactory.cpython-311.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/text.cpython-311.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/tipstext.cpython-311.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/zoomtext.cpython-311.opt-1.pyc",
"ba_data/python/bastd/actor/background.py",
"ba_data/python/bastd/actor/bomb.py",
"ba_data/python/bastd/actor/controlsguide.py",
"ba_data/python/bastd/actor/flag.py",
"ba_data/python/bastd/actor/image.py",
"ba_data/python/bastd/actor/onscreencountdown.py",
"ba_data/python/bastd/actor/onscreentimer.py",
"ba_data/python/bastd/actor/playerspaz.py",
"ba_data/python/bastd/actor/popuptext.py",
"ba_data/python/bastd/actor/powerupbox.py",
"ba_data/python/bastd/actor/respawnicon.py",
"ba_data/python/bastd/actor/scoreboard.py",
"ba_data/python/bastd/actor/spawner.py",
"ba_data/python/bastd/actor/spaz.py",
"ba_data/python/bastd/actor/spazappearance.py",
"ba_data/python/bastd/actor/spazbot.py",
"ba_data/python/bastd/actor/spazfactory.py",
"ba_data/python/bastd/actor/text.py",
"ba_data/python/bastd/actor/tipstext.py",
"ba_data/python/bastd/actor/zoomtext.py",
"ba_data/python/bastd/game/__init__.py",
"ba_data/python/bastd/game/__pycache__/__init__.cpython-311.opt-1.pyc",
"ba_data/python/bastd/game/__pycache__/assault.cpython-311.opt-1.pyc",
"ba_data/python/bastd/game/__pycache__/capturetheflag.cpython-311.opt-1.pyc",
"ba_data/python/bastd/game/__pycache__/chosenone.cpython-311.opt-1.pyc",
"ba_data/python/bastd/game/__pycache__/conquest.cpython-311.opt-1.pyc",
"ba_data/python/bastd/game/__pycache__/deathmatch.cpython-311.opt-1.pyc",
"ba_data/python/bastd/game/__pycache__/easteregghunt.cpython-311.opt-1.pyc",
"ba_data/python/bastd/game/__pycache__/elimination.cpython-311.opt-1.pyc",
"ba_data/python/bastd/game/__pycache__/football.cpython-311.opt-1.pyc",
"ba_data/python/bastd/game/__pycache__/hockey.cpython-311.opt-1.pyc",
"ba_data/python/bastd/game/__pycache__/keepaway.cpython-311.opt-1.pyc",
"ba_data/python/bastd/game/__pycache__/kingofthehill.cpython-311.opt-1.pyc",
"ba_data/python/bastd/game/__pycache__/meteorshower.cpython-311.opt-1.pyc",
"ba_data/python/bastd/game/__pycache__/ninjafight.cpython-311.opt-1.pyc",
"ba_data/python/bastd/game/__pycache__/onslaught.cpython-311.opt-1.pyc",
"ba_data/python/bastd/game/__pycache__/race.cpython-311.opt-1.pyc",
"ba_data/python/bastd/game/__pycache__/runaround.cpython-311.opt-1.pyc",
"ba_data/python/bastd/game/__pycache__/targetpractice.cpython-311.opt-1.pyc",
"ba_data/python/bastd/game/__pycache__/thelaststand.cpython-311.opt-1.pyc",
"ba_data/python/bastd/game/assault.py",
"ba_data/python/bastd/game/capturetheflag.py",
"ba_data/python/bastd/game/chosenone.py",
"ba_data/python/bastd/game/conquest.py",
"ba_data/python/bastd/game/deathmatch.py",
"ba_data/python/bastd/game/easteregghunt.py",
"ba_data/python/bastd/game/elimination.py",
"ba_data/python/bastd/game/football.py",
"ba_data/python/bastd/game/hockey.py",
"ba_data/python/bastd/game/keepaway.py",
"ba_data/python/bastd/game/kingofthehill.py",
"ba_data/python/bastd/game/meteorshower.py",
"ba_data/python/bastd/game/ninjafight.py",
"ba_data/python/bastd/game/onslaught.py",
"ba_data/python/bastd/game/race.py",
"ba_data/python/bastd/game/runaround.py",
"ba_data/python/bastd/game/targetpractice.py",
"ba_data/python/bastd/game/thelaststand.py",
"ba_data/python/bastd/gameutils.py",
"ba_data/python/bastd/keyboard/__init__.py",
"ba_data/python/bastd/keyboard/__pycache__/__init__.cpython-311.opt-1.pyc",
"ba_data/python/bastd/keyboard/__pycache__/englishkeyboard.cpython-311.opt-1.pyc",
"ba_data/python/bastd/keyboard/englishkeyboard.py",
"ba_data/python/bastd/mainmenu.py",
"ba_data/python/bastd/mapdata/__init__.py",
"ba_data/python/bastd/mapdata/__pycache__/__init__.cpython-311.opt-1.pyc",
"ba_data/python/bastd/mapdata/__pycache__/big_g.cpython-311.opt-1.pyc",
"ba_data/python/bastd/mapdata/__pycache__/bridgit.cpython-311.opt-1.pyc",
"ba_data/python/bastd/mapdata/__pycache__/courtyard.cpython-311.opt-1.pyc",
"ba_data/python/bastd/mapdata/__pycache__/crag_castle.cpython-311.opt-1.pyc",
"ba_data/python/bastd/mapdata/__pycache__/doom_shroom.cpython-311.opt-1.pyc",
"ba_data/python/bastd/mapdata/__pycache__/football_stadium.cpython-311.opt-1.pyc",
"ba_data/python/bastd/mapdata/__pycache__/happy_thoughts.cpython-311.opt-1.pyc",
"ba_data/python/bastd/mapdata/__pycache__/hockey_stadium.cpython-311.opt-1.pyc",
"ba_data/python/bastd/mapdata/__pycache__/lake_frigid.cpython-311.opt-1.pyc",
"ba_data/python/bastd/mapdata/__pycache__/monkey_face.cpython-311.opt-1.pyc",
"ba_data/python/bastd/mapdata/__pycache__/rampage.cpython-311.opt-1.pyc",
"ba_data/python/bastd/mapdata/__pycache__/roundabout.cpython-311.opt-1.pyc",
"ba_data/python/bastd/mapdata/__pycache__/step_right_up.cpython-311.opt-1.pyc",
"ba_data/python/bastd/mapdata/__pycache__/the_pad.cpython-311.opt-1.pyc",
"ba_data/python/bastd/mapdata/__pycache__/tip_top.cpython-311.opt-1.pyc",
"ba_data/python/bastd/mapdata/__pycache__/tower_d.cpython-311.opt-1.pyc",
"ba_data/python/bastd/mapdata/__pycache__/zig_zag.cpython-311.opt-1.pyc",
"ba_data/python/bastd/mapdata/big_g.py",
"ba_data/python/bastd/mapdata/bridgit.py",
"ba_data/python/bastd/mapdata/courtyard.py",
"ba_data/python/bastd/mapdata/crag_castle.py",
"ba_data/python/bastd/mapdata/doom_shroom.py",
"ba_data/python/bastd/mapdata/football_stadium.py",
"ba_data/python/bastd/mapdata/happy_thoughts.py",
"ba_data/python/bastd/mapdata/hockey_stadium.py",
"ba_data/python/bastd/mapdata/lake_frigid.py",
"ba_data/python/bastd/mapdata/monkey_face.py",
"ba_data/python/bastd/mapdata/rampage.py",
"ba_data/python/bastd/mapdata/roundabout.py",
"ba_data/python/bastd/mapdata/step_right_up.py",
"ba_data/python/bastd/mapdata/the_pad.py",
"ba_data/python/bastd/mapdata/tip_top.py",
"ba_data/python/bastd/mapdata/tower_d.py",
"ba_data/python/bastd/mapdata/zig_zag.py",
"ba_data/python/bastd/maps.py",
"ba_data/python/bastd/session/__init__.py",
"ba_data/python/bastd/session/__pycache__/__init__.cpython-311.opt-1.pyc",
"ba_data/python/bastd/tutorial.py",
"ba_data/python/bastd/ui/__init__.py",
"ba_data/python/bastd/ui/__pycache__/__init__.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/achievements.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/appinvite.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/characterpicker.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/colorpicker.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/config.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/configerror.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/confirm.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/continues.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/creditslist.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/debug.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/feedback.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/fileselector.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/getcurrency.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/getremote.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/helpui.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/iconpicker.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/kiosk.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/mainmenu.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/party.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/partyqueue.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/play.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/playoptions.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/popup.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/promocode.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/purchase.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/qrcode.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/radiogroup.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/report.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/resourcetypeinfo.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/serverdialog.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/specialoffer.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/tabs.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/teamnamescolors.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/tournamententry.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/tournamentscores.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/trophies.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/url.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/v2upgrade.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/__pycache__/watch.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/account/__init__.py",
"ba_data/python/bastd/ui/account/__pycache__/__init__.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/account/__pycache__/link.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/account/__pycache__/settings.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/account/__pycache__/unlink.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/account/__pycache__/v2proxy.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/account/__pycache__/viewer.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/account/link.py",
"ba_data/python/bastd/ui/account/settings.py",
"ba_data/python/bastd/ui/account/unlink.py",
"ba_data/python/bastd/ui/account/v2proxy.py",
"ba_data/python/bastd/ui/account/viewer.py",
"ba_data/python/bastd/ui/achievements.py",
"ba_data/python/bastd/ui/appinvite.py",
"ba_data/python/bastd/ui/characterpicker.py",
"ba_data/python/bastd/ui/colorpicker.py",
"ba_data/python/bastd/ui/config.py",
"ba_data/python/bastd/ui/configerror.py",
"ba_data/python/bastd/ui/confirm.py",
"ba_data/python/bastd/ui/continues.py",
"ba_data/python/bastd/ui/coop/__init__.py",
"ba_data/python/bastd/ui/coop/__pycache__/__init__.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/coop/__pycache__/browser.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/coop/__pycache__/gamebutton.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/coop/__pycache__/level.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/coop/__pycache__/tournamentbutton.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/coop/browser.py",
"ba_data/python/bastd/ui/coop/gamebutton.py",
"ba_data/python/bastd/ui/coop/level.py",
"ba_data/python/bastd/ui/coop/tournamentbutton.py",
"ba_data/python/bastd/ui/creditslist.py",
"ba_data/python/bastd/ui/debug.py",
"ba_data/python/bastd/ui/feedback.py",
"ba_data/python/bastd/ui/fileselector.py",
"ba_data/python/bastd/ui/gather/__init__.py",
"ba_data/python/bastd/ui/gather/__pycache__/__init__.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/gather/__pycache__/abouttab.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/gather/__pycache__/manualtab.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/gather/__pycache__/nearbytab.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/gather/__pycache__/privatetab.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/gather/__pycache__/publictab.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/gather/abouttab.py",
"ba_data/python/bastd/ui/gather/manualtab.py",
"ba_data/python/bastd/ui/gather/nearbytab.py",
"ba_data/python/bastd/ui/gather/privatetab.py",
"ba_data/python/bastd/ui/gather/publictab.py",
"ba_data/python/bastd/ui/getcurrency.py",
"ba_data/python/bastd/ui/getremote.py",
"ba_data/python/bastd/ui/helpui.py",
"ba_data/python/bastd/ui/iconpicker.py",
"ba_data/python/bastd/ui/kiosk.py",
"ba_data/python/bastd/ui/league/__init__.py",
"ba_data/python/bastd/ui/league/__pycache__/__init__.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/league/__pycache__/rankbutton.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/league/__pycache__/rankwindow.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/league/rankbutton.py",
"ba_data/python/bastd/ui/league/rankwindow.py",
"ba_data/python/bastd/ui/mainmenu.py",
"ba_data/python/bastd/ui/party.py",
"ba_data/python/bastd/ui/partyqueue.py",
"ba_data/python/bastd/ui/play.py",
"ba_data/python/bastd/ui/playlist/__init__.py",
"ba_data/python/bastd/ui/playlist/__pycache__/__init__.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/playlist/__pycache__/addgame.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/playlist/__pycache__/browser.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/playlist/__pycache__/customizebrowser.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/playlist/__pycache__/edit.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/playlist/__pycache__/editcontroller.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/playlist/__pycache__/editgame.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/playlist/__pycache__/mapselect.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/playlist/__pycache__/share.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/playlist/addgame.py",
"ba_data/python/bastd/ui/playlist/browser.py",
"ba_data/python/bastd/ui/playlist/customizebrowser.py",
"ba_data/python/bastd/ui/playlist/edit.py",
"ba_data/python/bastd/ui/playlist/editcontroller.py",
"ba_data/python/bastd/ui/playlist/editgame.py",
"ba_data/python/bastd/ui/playlist/mapselect.py",
"ba_data/python/bastd/ui/playlist/share.py",
"ba_data/python/bastd/ui/playoptions.py",
"ba_data/python/bastd/ui/popup.py",
"ba_data/python/bastd/ui/profile/__init__.py",
"ba_data/python/bastd/ui/profile/__pycache__/__init__.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/profile/__pycache__/browser.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/profile/__pycache__/edit.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/profile/__pycache__/upgrade.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/profile/browser.py",
"ba_data/python/bastd/ui/profile/edit.py",
"ba_data/python/bastd/ui/profile/upgrade.py",
"ba_data/python/bastd/ui/promocode.py",
"ba_data/python/bastd/ui/purchase.py",
"ba_data/python/bastd/ui/qrcode.py",
"ba_data/python/bastd/ui/radiogroup.py",
"ba_data/python/bastd/ui/report.py",
"ba_data/python/bastd/ui/resourcetypeinfo.py",
"ba_data/python/bastd/ui/serverdialog.py",
"ba_data/python/bastd/ui/settings/__init__.py",
"ba_data/python/bastd/ui/settings/__pycache__/__init__.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/settings/__pycache__/advanced.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/settings/__pycache__/allsettings.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/settings/__pycache__/audio.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/settings/__pycache__/controls.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/settings/__pycache__/gamepad.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/settings/__pycache__/gamepadadvanced.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/settings/__pycache__/gamepadselect.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/settings/__pycache__/graphics.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/settings/__pycache__/keyboard.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/settings/__pycache__/nettesting.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/settings/__pycache__/plugins.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/settings/__pycache__/pluginsettings.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/settings/__pycache__/remoteapp.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/settings/__pycache__/testing.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/settings/__pycache__/touchscreen.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/settings/__pycache__/vrtesting.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/settings/advanced.py",
"ba_data/python/bastd/ui/settings/allsettings.py",
"ba_data/python/bastd/ui/settings/audio.py",
"ba_data/python/bastd/ui/settings/controls.py",
"ba_data/python/bastd/ui/settings/gamepad.py",
"ba_data/python/bastd/ui/settings/gamepadadvanced.py",
"ba_data/python/bastd/ui/settings/gamepadselect.py",
"ba_data/python/bastd/ui/settings/graphics.py",
"ba_data/python/bastd/ui/settings/keyboard.py",
"ba_data/python/bastd/ui/settings/nettesting.py",
"ba_data/python/bastd/ui/settings/plugins.py",
"ba_data/python/bastd/ui/settings/pluginsettings.py",
"ba_data/python/bastd/ui/settings/remoteapp.py",
"ba_data/python/bastd/ui/settings/testing.py",
"ba_data/python/bastd/ui/settings/touchscreen.py",
"ba_data/python/bastd/ui/settings/vrtesting.py",
"ba_data/python/bastd/ui/soundtrack/__init__.py",
"ba_data/python/bastd/ui/soundtrack/__pycache__/__init__.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/soundtrack/__pycache__/browser.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/soundtrack/__pycache__/edit.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/soundtrack/__pycache__/entrytypeselect.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/soundtrack/__pycache__/macmusicapp.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/soundtrack/browser.py",
"ba_data/python/bastd/ui/soundtrack/edit.py",
"ba_data/python/bastd/ui/soundtrack/entrytypeselect.py",
"ba_data/python/bastd/ui/soundtrack/macmusicapp.py",
"ba_data/python/bastd/ui/specialoffer.py",
"ba_data/python/bastd/ui/store/__init__.py",
"ba_data/python/bastd/ui/store/__pycache__/__init__.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/store/__pycache__/browser.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/store/__pycache__/button.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/store/__pycache__/item.cpython-311.opt-1.pyc",
"ba_data/python/bastd/ui/store/browser.py",
"ba_data/python/bastd/ui/store/button.py",
"ba_data/python/bastd/ui/store/item.py",
"ba_data/python/bastd/ui/tabs.py",
"ba_data/python/bastd/ui/teamnamescolors.py",
"ba_data/python/bastd/ui/tournamententry.py",
"ba_data/python/bastd/ui/tournamentscores.py",
"ba_data/python/bastd/ui/trophies.py",
"ba_data/python/bastd/ui/url.py",
"ba_data/python/bastd/ui/v2upgrade.py",
"ba_data/python/bastd/ui/watch.py",
"ba_data/python/batemplatefs/__init__.py",
"ba_data/python/batemplatefs/__pycache__/__init__.cpython-311.opt-1.pyc",
"ba_data/python/batemplatefs/__pycache__/_hooks.cpython-311.opt-1.pyc",
"ba_data/python/batemplatefs/__pycache__/_subsystem.cpython-311.opt-1.pyc",
"ba_data/python/batemplatefs/_hooks.py",
"ba_data/python/batemplatefs/_subsystem.py",
"ba_data/python/bauiv1/__init__.py",
"ba_data/python/bauiv1/__pycache__/__init__.cpython-311.opt-1.pyc",
"ba_data/python/bauiv1/__pycache__/_hooks.cpython-311.opt-1.pyc",
"ba_data/python/bauiv1/__pycache__/modutils.cpython-311.opt-1.pyc",
"ba_data/python/bauiv1/__pycache__/onscreenkeyboard.cpython-311.opt-1.pyc",
"ba_data/python/bauiv1/_hooks.py",
"ba_data/python/bauiv1/modutils.py",
"ba_data/python/bauiv1/onscreenkeyboard.py",
"ba_data/python/bauiv1/ui/__init__.py",
"ba_data/python/bauiv1/ui/__pycache__/__init__.cpython-311.opt-1.pyc",
"ba_data/python/efro/__init__.py",
"ba_data/python/efro/__pycache__/__init__.cpython-311.opt-1.pyc",
"ba_data/python/efro/__pycache__/call.cpython-311.opt-1.pyc",
"ba_data/python/efro/__pycache__/cloudshell.cpython-311.opt-1.pyc",
"ba_data/python/efro/__pycache__/debug.cpython-311.opt-1.pyc",
"ba_data/python/efro/__pycache__/error.cpython-311.opt-1.pyc",
"ba_data/python/efro/__pycache__/log.cpython-311.opt-1.pyc",
"ba_data/python/efro/__pycache__/rpc.cpython-311.opt-1.pyc",
"ba_data/python/efro/__pycache__/terminal.cpython-311.opt-1.pyc",
"ba_data/python/efro/__pycache__/util.cpython-311.opt-1.pyc",
"ba_data/python/efro/call.py",
"ba_data/python/efro/cloudshell.py",
"ba_data/python/efro/dataclassio/__init__.py",
"ba_data/python/efro/dataclassio/__pycache__/__init__.cpython-311.opt-1.pyc",
"ba_data/python/efro/dataclassio/__pycache__/_api.cpython-311.opt-1.pyc",
"ba_data/python/efro/dataclassio/__pycache__/_base.cpython-311.opt-1.pyc",
"ba_data/python/efro/dataclassio/__pycache__/_inputter.cpython-311.opt-1.pyc",
"ba_data/python/efro/dataclassio/__pycache__/_outputter.cpython-311.opt-1.pyc",
"ba_data/python/efro/dataclassio/__pycache__/_pathcapture.cpython-311.opt-1.pyc",
"ba_data/python/efro/dataclassio/__pycache__/_prep.cpython-311.opt-1.pyc",
"ba_data/python/efro/dataclassio/__pycache__/extras.cpython-311.opt-1.pyc",
"ba_data/python/efro/dataclassio/_api.py",
"ba_data/python/efro/dataclassio/_base.py",
"ba_data/python/efro/dataclassio/_inputter.py",
"ba_data/python/efro/dataclassio/_outputter.py",
"ba_data/python/efro/dataclassio/_pathcapture.py",
"ba_data/python/efro/dataclassio/_prep.py",
"ba_data/python/efro/dataclassio/extras.py",
"ba_data/python/efro/debug.py",
"ba_data/python/efro/error.py",
"ba_data/python/efro/log.py",
"ba_data/python/efro/message/__init__.py",
"ba_data/python/efro/message/__pycache__/__init__.cpython-311.opt-1.pyc",
"ba_data/python/efro/message/__pycache__/_message.cpython-311.opt-1.pyc",
"ba_data/python/efro/message/__pycache__/_module.cpython-311.opt-1.pyc",
"ba_data/python/efro/message/__pycache__/_protocol.cpython-311.opt-1.pyc",
"ba_data/python/efro/message/__pycache__/_receiver.cpython-311.opt-1.pyc",
"ba_data/python/efro/message/__pycache__/_sender.cpython-311.opt-1.pyc",
"ba_data/python/efro/message/_message.py",
"ba_data/python/efro/message/_module.py",
"ba_data/python/efro/message/_protocol.py",
"ba_data/python/efro/message/_receiver.py",
"ba_data/python/efro/message/_sender.py",
"ba_data/python/efro/rpc.py",
"ba_data/python/efro/terminal.py",
"ba_data/python/efro/util.py",
"server/__pycache__/ballisticakit_server.cpython-311.opt-1.pyc",
"server/ballisticakit_server.py"
]

7505
src/assets/Makefile Normal file

File diff suppressed because it is too large Load Diff

4
src/assets/README.md Normal file
View File

@ -0,0 +1,4 @@
# Ballistica Assets
This directory contains sources used to build bundled scripts, models,
textures, etc.

View File

@ -0,0 +1,184 @@
# Released under the MIT License. See LICENSE for details.
#
"""The public face of Ballistica.
This top level module is a collection of most commonly used functionality.
For many modding purposes, the bits exposed here are all you'll need.
In some specific cases you may need to pull in individual submodules instead.
"""
# pylint: disable=redefined-builtin
import _babase
from _babase import (
SimpleSound,
ContextRef,
ContextCall,
apptime,
apptimer,
AppTimer,
displaytime,
displaytimer,
DisplayTimer,
Vec3,
do_once,
pushcall,
quit,
safecolor,
set_analytics_screen,
charstr,
clipboard_is_supported,
clipboard_has_text,
clipboard_get_text,
clipboard_set_text,
in_logic_thread,
)
from babase._accountv2 import AccountV2Handle
from babase._plugin import PotentialPlugin, Plugin, PluginSubsystem
from babase._app import App
from babase._cloud import CloudSubsystem
from babase._mgen.enums import (
Permission,
SpecialChar,
InputType,
UIScale,
)
from babase._error import (
print_exception,
print_error,
ContextError,
NotFoundError,
PlayerNotFoundError,
SessionPlayerNotFoundError,
NodeNotFoundError,
ActorNotFoundError,
InputDeviceNotFoundError,
WidgetNotFoundError,
ActivityNotFoundError,
TeamNotFoundError,
MapNotFoundError,
SessionTeamNotFoundError,
SessionNotFoundError,
DelegateNotFoundError,
)
from babase._language import Lstr, LanguageSubsystem
from babase._appconfig import AppConfig
from babase._apputils import is_browser_likely_available, garbage_collect
from babase._general import (
DisplayTime,
AppTime,
WeakCall,
Call,
existing,
Existable,
verify_object_death,
storagename,
getclass,
)
from babase._keyboard import Keyboard
from babase._math import normalized_color, is_point_in_box, vec3validate
from babase._meta import MetadataSubsystem
from babase._text import timestring
_babase.app = app = App()
app.postinit()
__all__ = [
'app',
'AccountV2Handle',
'ActivityNotFoundError',
'ActorNotFoundError',
'app',
'App',
'AppConfig',
'Call',
'charstr',
'clipboard_get_text',
'clipboard_has_text',
'clipboard_is_supported',
'clipboard_set_text',
'ContextCall',
'ContextError',
'CloudSubsystem',
'DelegateNotFoundError',
'do_once',
'Existable',
'existing',
'garbage_collect',
'getclass',
'in_logic_thread',
'InputDeviceNotFoundError',
'InputType',
'is_browser_likely_available',
'is_point_in_box',
'Keyboard',
'LanguageSubsystem',
'Lstr',
'MapNotFoundError',
'MetadataSubsystem',
'NodeNotFoundError',
'normalized_color',
'NotFoundError',
'Permission',
'PlayerNotFoundError',
'Plugin',
'PluginSubsystem',
'PotentialPlugin',
'print_error',
'print_exception',
'pushcall',
'quit',
'safecolor',
'SessionNotFoundError',
'SessionPlayerNotFoundError',
'SessionTeamNotFoundError',
'set_analytics_screen',
'SpecialChar',
'storagename',
'TeamNotFoundError',
'apptime',
'timestring',
'UIScale',
'Vec3',
'vec3validate',
'verify_object_death',
'WeakCall',
'WidgetNotFoundError',
'AppTime',
'apptime',
'apptimer',
'AppTimer',
'SimpleSound',
'ContextRef',
'DisplayTime',
'displaytimer',
'displaytime',
'DisplayTimer',
]
# Have these things present themselves cleanly as 'ba.Foo'
# instead of 'ba._submodule.Foo'
def _simplify_module_names() -> None:
import os
# Though pdoc gets confused when we override __module__,
# so let's make an exception for it.
if os.environ.get('BA_DOCS_GENERATION', '0') != '1':
from efro.util import set_canonical_module
globs = globals()
set_canonical_module(
module_globals=globs,
names=[n for n in globs.keys() if not n.startswith('_')],
)
_simplify_module_names()
del _simplify_module_names
# Marker we pop down at the very end so other modules can run sanity
# checks to make sure we aren't importing them reciprocally when they
# import us.
_REACHED_END_OF_MODULE = True

View File

@ -11,12 +11,12 @@ from typing import TYPE_CHECKING
from efro.call import tpartial
from efro.error import CommunicationError
from bacommon.login import LoginType
import _ba
import _babase
if TYPE_CHECKING:
from typing import Any
from ba._login import LoginAdapter
from babase._login import LoginAdapter
DEBUG_LOG = False
@ -27,11 +27,10 @@ class AccountV2Subsystem:
Category: **App Classes**
Access the single shared instance of this class at 'ba.app.accounts_v2'.
Access the single shared instance of this class at 'ba.app.accounts'.
"""
def __init__(self) -> None:
# Whether or not everything related to an initial login
# (or lack thereof) has completed. This includes things like
# workspace syncing. Completion of this is what flips the app
@ -46,16 +45,22 @@ class AccountV2Subsystem:
self._implicit_state_changed = False
self._can_do_auto_sign_in = True
if _ba.app.platform == 'android' and _ba.app.subplatform == 'google':
from ba._login import LoginAdapterGPGS
if _babase.app.classic is None:
raise RuntimeError('Needs updating for no-classic case.')
if (
_babase.app.classic.platform == 'android'
and _babase.app.classic.subplatform == 'google'
):
from babase._login import LoginAdapterGPGS
self.login_adapters[LoginType.GPGS] = LoginAdapterGPGS()
def on_app_launch(self) -> None:
"""Should be called at standard on_app_launch time."""
def on_app_launching(self) -> None:
"""Should be called at standard on_app_launching time."""
for adapter in self.login_adapters.values():
adapter.on_app_launch()
adapter.on_app_launching()
def set_primary_credentials(self, credentials: str | None) -> None:
"""Set credentials for the primary app account."""
@ -87,7 +92,7 @@ class AccountV2Subsystem:
Will be called with None on log-outs and when new credentials
are set but have not yet been verified.
"""
assert _ba.in_logic_thread()
assert _babase.in_logic_thread()
# Currently don't do anything special on sign-outs.
if account is None:
@ -102,7 +107,7 @@ class AccountV2Subsystem:
and not self._kicked_off_workspace_load
):
self._kicked_off_workspace_load = True
_ba.app.workspaces.set_active_workspace(
_babase.app.workspaces.set_active_workspace(
account=account,
workspaceid=account.workspaceid,
workspacename=account.workspacename,
@ -112,18 +117,18 @@ class AccountV2Subsystem:
# Don't activate workspaces if we've already told the game
# that initial-log-in is done or if we've already kicked
# off a workspace load.
_ba.screenmessage(
_babase.screenmessage(
f'\'{account.workspacename}\''
f' will be activated at next app launch.',
color=(1, 1, 0),
)
_ba.playsound(_ba.getsound('error'))
_babase.getsimplesound('error').play()
return
# Ok; no workspace to worry about; carry on.
if not self._initial_sign_in_completed:
self._initial_sign_in_completed = True
_ba.app.on_initial_sign_in_completed()
_babase.app.on_initial_sign_in_completed()
def on_active_logins_changed(self, logins: dict[LoginType, str]) -> None:
"""Should be called when logins for the active account change."""
@ -135,9 +140,9 @@ class AccountV2Subsystem:
self, login_type: LoginType, login_id: str, display_name: str
) -> None:
"""An implicit sign-in happened (called by native layer)."""
from ba._login import LoginAdapter
from babase._login import LoginAdapter
with _ba.Context('ui'):
with _babase.ContextRef.empty():
self.login_adapters[login_type].set_implicit_login_state(
LoginAdapter.ImplicitLoginState(
login_id=login_id, display_name=display_name
@ -146,7 +151,7 @@ class AccountV2Subsystem:
def on_implicit_sign_out(self, login_type: LoginType) -> None:
"""An implicit sign-out happened (called by native layer)."""
with _ba.Context('ui'):
with _babase.ContextRef.empty():
self.login_adapters[login_type].set_implicit_login_state(None)
def on_no_initial_primary_account(self) -> None:
@ -158,7 +163,7 @@ class AccountV2Subsystem:
"""
if not self._initial_sign_in_completed:
self._initial_sign_in_completed = True
_ba.app.on_initial_sign_in_completed()
_babase.app.on_initial_sign_in_completed()
@staticmethod
def _hashstr(val: str) -> str:
@ -179,13 +184,13 @@ class AccountV2Subsystem:
types even if the default implicit one can't be explicitly
logged out or otherwise controlled.
"""
from ba._language import Lstr
from babase._language import Lstr
assert _ba.in_logic_thread()
assert _babase.in_logic_thread()
cfg = _ba.app.config
cfg = _babase.app.config
cfgkey = 'ImplicitLoginStates'
cfgdict = _ba.app.config.setdefault(cfgkey, {})
cfgdict = _babase.app.config.setdefault(cfgkey, {})
# Store which (if any) adapter is currently implicitly signed in.
# Making the assumption there will only ever be one implicit
@ -213,10 +218,10 @@ class AccountV2Subsystem:
else:
service_str = None
if service_str is not None:
_ba.timer(
_babase.apptimer(
2.0,
tpartial(
_ba.screenmessage,
_babase.screenmessage,
Lstr(
resource='notUsingAccountText',
subs=[
@ -249,13 +254,14 @@ class AccountV2Subsystem:
def on_cloud_connectivity_changed(self, connected: bool) -> None:
"""Should be called with cloud connectivity changes."""
del connected # Unused.
assert _ba.in_logic_thread()
assert _babase.in_logic_thread()
# We may want to auto-sign-in based on this new state.
self._update_auto_sign_in()
def _update_auto_sign_in(self) -> None:
from ba._internal import get_v1_account_state
plus = _babase.app.plus
assert plus is not None
# If implicit state has changed, try to respond.
if self._implicit_state_changed:
@ -267,7 +273,7 @@ class AccountV2Subsystem:
'AccountV2: Signing out as result'
' of implicit state change...',
)
_ba.app.accounts_v2.set_primary_credentials(None)
_babase.app.accounts.set_primary_credentials(None)
self._implicit_state_changed = False
# Once we've made a move here we don't want to
@ -283,7 +289,7 @@ class AccountV2Subsystem:
# switching accounts via the back-end).
# NOTE: should test case where we don't have
# connectivity here.
if _ba.app.cloud.is_connected():
if _babase.app.cloud.is_connected():
if DEBUG_LOG:
logging.debug(
'AccountV2: Signing in as result'
@ -310,9 +316,9 @@ class AccountV2Subsystem:
# in as a rule, even if there are corner cases where this might
# not be what they want (A user signing out and then restarting
# may be auto-signed back in).
connected = _ba.app.cloud.is_connected()
signed_in_v1 = get_v1_account_state() == 'signed_in'
signed_in_v2 = _ba.app.accounts_v2.have_primary_credentials()
connected = _babase.app.cloud.is_connected()
signed_in_v1 = plus.get_v1_account_state() == 'signed_in'
signed_in_v2 = _babase.app.accounts.have_primary_credentials()
if (
connected
and not signed_in_v1
@ -334,7 +340,7 @@ class AccountV2Subsystem:
result: LoginAdapter.SignInResult | Exception,
) -> None:
"""A sign-in has completed that the user asked for explicitly."""
from ba._language import Lstr
from babase._language import Lstr
del adapter # Unused.
@ -350,20 +356,19 @@ class AccountV2Subsystem:
)
# For now just show 'error'. Should do better than this.
with _ba.Context('ui'):
_ba.screenmessage(
Lstr(resource='internal.signInErrorText'),
color=(1, 0, 0),
)
_ba.playsound(_ba.getsound('error'))
_babase.screenmessage(
Lstr(resource='internal.signInErrorText'),
color=(1, 0, 0),
)
_babase.getsimplesound('error').play()
# Also I suppose we should sign them out in this case since
# it could be misleading to be still signed in with the old
# account.
_ba.app.accounts_v2.set_primary_credentials(None)
_babase.app.accounts.set_primary_credentials(None)
return
_ba.app.accounts_v2.set_primary_credentials(result.credentials)
_babase.app.accounts.set_primary_credentials(result.credentials)
def _on_implicit_sign_in_completed(
self,
@ -371,7 +376,8 @@ class AccountV2Subsystem:
result: LoginAdapter.SignInResult | Exception,
) -> None:
"""A sign-in has completed that the user didn't ask for explicitly."""
from ba._internal import get_v1_account_state
plus = _babase.app.plus
assert plus is not None
del adapter # Unused.
@ -391,16 +397,16 @@ class AccountV2Subsystem:
# plug in the credentials we got. We want to be extra cautious
# in case the user has since explicitly signed in since we
# kicked off.
connected = _ba.app.cloud.is_connected()
signed_in_v1 = get_v1_account_state() == 'signed_in'
signed_in_v2 = _ba.app.accounts_v2.have_primary_credentials()
connected = _babase.app.cloud.is_connected()
signed_in_v1 = plus.get_v1_account_state() == 'signed_in'
signed_in_v2 = _babase.app.accounts.have_primary_credentials()
if connected and not signed_in_v1 and not signed_in_v2:
_ba.app.accounts_v2.set_primary_credentials(result.credentials)
_babase.app.accounts.set_primary_credentials(result.credentials)
def _on_set_active_workspace_completed(self) -> None:
if not self._initial_sign_in_completed:
self._initial_sign_in_completed = True
_ba.app.on_initial_sign_in_completed()
_babase.app.on_initial_sign_in_completed()
class AccountV2Handle:

View File

@ -0,0 +1,519 @@
# Released under the MIT License. See LICENSE for details.
#
"""Functionality related to the high level state of the app."""
from __future__ import annotations
from enum import Enum
import logging
from typing import TYPE_CHECKING
from concurrent.futures import ThreadPoolExecutor
from functools import cached_property
import _babase
from babase._language import LanguageSubsystem
from babase._plugin import PluginSubsystem
from babase._meta import MetadataSubsystem
from babase._net import NetworkSubsystem
from babase._workspace import WorkspaceSubsystem
from babase._appcomponent import AppComponentSubsystem
if TYPE_CHECKING:
from typing import Any
import asyncio
from efro.log import LogHandler
import babase
from babase._cloud import CloudSubsystem
from babase._accountv2 import AccountV2Subsystem
from babase._apputils import AppHealthMonitor
# Would autogen this begin
from baclassic import ClassicSubsystem
from baplus import PlusSubsystem
# Would autogen this end
class App:
"""A class for high level app functionality and state.
Category: **App Classes**
Use babase.app to access the single shared instance of this class.
Note that properties not documented here should be considered internal
and subject to change without warning.
"""
# pylint: disable=too-many-public-methods
# Implementations for these will be filled in by internal libs.
accounts: AccountV2Subsystem
cloud: CloudSubsystem
# log_handler: LogHandler
health_monitor: AppHealthMonitor
class State(Enum):
"""High level state the app can be in."""
# The app launch process has not yet begun.
INITIAL = 0
# Our app subsystems are being inited but should not yet interact.
LAUNCHING = 1
# App subsystems are inited and interacting, but the app has not
# yet embarked on a high level course of action. It is doing initial
# account logins, workspace & asset downloads, etc. in order to
# prepare for this.
LOADING = 2
# All pieces are in place and the app is now doing its thing.
RUNNING = 3
# The app is backgrounded or otherwise suspended.
PAUSED = 4
# The app is shutting down.
SHUTTING_DOWN = 5
@property
def aioloop(self) -> asyncio.AbstractEventLoop:
"""The logic thread's asyncio event loop.
This allow async tasks to be run in the logic thread.
Note that, at this time, the asyncio loop is encapsulated
and explicitly stepped by the engine's logic thread loop and
thus things like asyncio.get_running_loop() will not return this
loop from most places in the logic thread; only from within a
task explicitly created in this loop.
"""
assert self._aioloop is not None
return self._aioloop
@property
def build_number(self) -> int:
"""Integer build number.
This value increases by at least 1 with each release of the game.
It is independent of the human readable babase.App.version string.
"""
assert isinstance(self._env['build_number'], int)
return self._env['build_number']
@property
def device_name(self) -> str:
"""Name of the device running the game."""
assert isinstance(self._env['device_name'], str)
return self._env['device_name']
@property
def config_file_path(self) -> str:
"""Where the game's config file is stored on disk."""
assert isinstance(self._env['config_file_path'], str)
return self._env['config_file_path']
@property
def version(self) -> str:
"""Human-readable version string; something like '1.3.24'.
This should not be interpreted as a number; it may contain
string elements such as 'alpha', 'beta', 'test', etc.
If a numeric version is needed, use 'babase.App.build_number'.
"""
assert isinstance(self._env['version'], str)
return self._env['version']
@property
def debug_build(self) -> bool:
"""Whether the app was compiled in debug mode.
Debug builds generally run substantially slower than non-debug
builds due to compiler optimizations being disabled and extra
checks being run.
"""
assert isinstance(self._env['debug_build'], bool)
return self._env['debug_build']
@property
def test_build(self) -> bool:
"""Whether the game was compiled in test mode.
Test mode enables extra checks and features that are useful for
release testing but which do not slow the game down significantly.
"""
assert isinstance(self._env['test_build'], bool)
return self._env['test_build']
@property
def data_directory(self) -> str:
"""Path where static app data lives."""
assert isinstance(self._env['data_directory'], str)
return self._env['data_directory']
@property
def python_directory_user(self) -> str | None:
"""Path where ballistica expects its custom user scripts (mods) to live.
Be aware that this value may be None if ballistica is running in
a non-standard environment, and that python-path modifications may
cause modules to be loaded from other locations.
"""
assert isinstance(self._env['python_directory_user'], (str, type(None)))
return self._env['python_directory_user']
@property
def python_directory_app(self) -> str | None:
"""Path where ballistica expects its bundled modules to live.
Be aware that this value may be None if ballistica is running in
a non-standard environment, and that python-path modifications may
cause modules to be loaded from other locations.
"""
assert isinstance(self._env['python_directory_app'], (str, type(None)))
return self._env['python_directory_app']
@property
def python_directory_app_site(self) -> str | None:
"""Path where ballistica expects its bundled pip modules to live.
Be aware that this value may be None if ballistica is running in
a non-standard environment, and that python-path modifications may
cause modules to be loaded from other locations.
"""
assert isinstance(
self._env['python_directory_app_site'], (str, type(None))
)
return self._env['python_directory_app_site']
@property
def config(self) -> babase.AppConfig:
"""The babase.AppConfig instance representing the app's config state."""
assert self._config is not None
return self._config
@property
def api_version(self) -> int:
"""The app's api version.
Only Python modules and packages associated with the current API
version number will be detected by the game (see the ba_meta tag).
This value will change whenever substantial backward-incompatible
changes are introduced to ballistica APIs. When that happens,
modules/packages should be updated accordingly and set to target
the newer API version number.
"""
from babase._meta import CURRENT_API_VERSION
return CURRENT_API_VERSION
@property
def on_tv(self) -> bool:
"""Whether the game is currently running on a TV."""
assert isinstance(self._env['on_tv'], bool)
return self._env['on_tv']
@property
def vr_mode(self) -> bool:
"""Whether the game is currently running in VR."""
assert isinstance(self._env['vr_mode'], bool)
return self._env['vr_mode']
def __init__(self) -> None:
"""(internal)
Do not instantiate this class; use babase.app to access
the single shared instance.
"""
self.state = self.State.INITIAL
self._app_bootstrapping_complete = False
self._called_on_app_launching = False
self._launch_completed = False
self._initial_sign_in_completed = False
self._meta_scan_completed = False
self._called_on_app_loading = False
self._called_on_app_running = False
self._app_paused = False
# Config.
self.config_file_healthy = False
# This is incremented any time the app is backgrounded/foregrounded;
# can be a simple way to determine if network data should be
# refreshed/etc.
self.fg_state = 0
self._aioloop: asyncio.AbstractEventLoop | None = None
self._env = _babase.env()
self.protocol_version: int = self._env['protocol_version']
assert isinstance(self.protocol_version, int)
self.toolbar_test: bool = self._env['toolbar_test']
assert isinstance(self.toolbar_test, bool)
self.demo_mode: bool = self._env['demo_mode']
assert isinstance(self.demo_mode, bool)
self.arcade_mode: bool = self._env['arcade_mode']
assert isinstance(self.arcade_mode, bool)
self.headless_mode: bool = self._env['headless_mode']
assert isinstance(self.headless_mode, bool)
self.iircade_mode: bool = self._env['iircade_mode']
assert isinstance(self.iircade_mode, bool)
# Default executor which can be used for misc background processing.
# It should also be passed to any additional asyncio loops we create
# so that everything shares the same single set of worker threads.
self.threadpool = ThreadPoolExecutor(thread_name_prefix='baworker')
self._config: babase.AppConfig | None = None
self.components = AppComponentSubsystem()
self.meta = MetadataSubsystem()
self.plugins = PluginSubsystem()
self.lang = LanguageSubsystem()
self.net = NetworkSubsystem()
self.workspaces = WorkspaceSubsystem()
# self._classic: ClassicSubsystem | None = None
self._asyncio_timer: babase.AppTimer | None = None
def postinit(self) -> None:
"""Called after we are inited and assigned to babase.app."""
# NOTE: the reason we need a postinit here is that
# some of this stuff might try importing babase.app and that doesn't
# exist yet as of our __init__() call.
# Init classic if present.
# classic_subsystem_type: type[ClassicSubsystem] | None
# try:
# from baclassic import ClassicSubsystem
# classic_subsystem_type = ClassicSubsystem
# except ImportError:
# classic_subsystem_type = None
# if classic_subsystem_type is not None:
# self._classic = classic_subsystem_type()
# Would autogen this begin
@cached_property
def classic(self) -> ClassicSubsystem | None:
"""Our classic subsystem."""
try:
from baclassic import ClassicSubsystem
return ClassicSubsystem()
except ImportError:
return None
except Exception:
logging.exception('Error importing baclassic')
return None
@cached_property
def plus(self) -> PlusSubsystem | None:
"""Our plus subsystem."""
try:
from baplus import PlusSubsystem
return PlusSubsystem()
except ImportError:
return None
except Exception:
logging.exception('Error importing baplus')
return None
# Would autogen this begin
def run(self) -> None:
"""Run the app to completion.
Note that this only works on platforms where ballistica
manages its own event loop.
"""
_babase.run_app()
def on_app_launching(self) -> None:
"""Called when the app is first entering the launching state."""
# pylint: disable=cyclic-import
from babase import _asyncio
from babase import _appconfig
from babase._apputils import log_dumped_app_state, AppHealthMonitor
assert _babase.in_logic_thread()
self._aioloop = _asyncio.setup_asyncio()
self.health_monitor = AppHealthMonitor()
# Only proceed if our config file is healthy so we don't
# overwrite a broken one or whatnot and wipe out data.
if not self.config_file_healthy:
if self.classic is not None:
handled = self.classic.show_config_error_window()
if handled:
return
# For now on other systems we just overwrite the bum config.
# At this point settings are already set; lets just commit them
# to disk.
_appconfig.commit_app_config(force=True)
# Get meta-system scanning built-in stuff in the bg.
self.meta.start_scan(scan_complete_cb=self.on_meta_scan_complete)
self.accounts.on_app_launching()
# Make sure this runs after we init our accounts stuff, since
# classic accounts key off of our v2 ones.
if self.classic is not None:
self.classic.on_app_launching()
# If any traceback dumps happened last run, log and clear them.
log_dumped_app_state()
self._launch_completed = True
self._update_state()
def on_app_loading(self) -> None:
"""Called when initially entering the loading state."""
def on_app_running(self) -> None:
"""Called when initially entering the running state."""
self.plugins.on_app_running()
def on_app_bootstrapping_complete(self) -> None:
"""Called by the C++ layer once its ready to rock."""
assert _babase.in_logic_thread()
assert not self._app_bootstrapping_complete
self._app_bootstrapping_complete = True
self._update_state()
def on_meta_scan_complete(self) -> None:
"""Called by meta-scan when it is done doing its thing."""
assert _babase.in_logic_thread()
self.plugins.on_meta_scan_complete()
assert not self._meta_scan_completed
self._meta_scan_completed = True
self._update_state()
def _update_state(self) -> None:
# pylint: disable=too-many-branches
assert _babase.in_logic_thread()
if self._app_paused:
# Entering paused state:
if self.state is not self.State.PAUSED:
self.state = self.State.PAUSED
self.on_app_pause()
else:
# Leaving paused state:
if self.state is self.State.PAUSED:
self.on_app_resume()
# Handle initially entering or returning to other states.
if self._initial_sign_in_completed and self._meta_scan_completed:
if self.state != self.State.RUNNING:
self.state = self.State.RUNNING
_babase.bootlog('app state running')
if not self._called_on_app_running:
self._called_on_app_running = True
self.on_app_running()
elif self._launch_completed:
if self.state is not self.State.LOADING:
self.state = self.State.LOADING
_babase.bootlog('app state loading')
if not self._called_on_app_loading:
self._called_on_app_loading = True
self.on_app_loading()
else:
# Only thing left is launching. We shouldn't be getting
# called before at least that is complete.
assert self._app_bootstrapping_complete
if self.state is not self.State.LAUNCHING:
self.state = self.State.LAUNCHING
_babase.bootlog('app state launching')
if not self._called_on_app_launching:
self._called_on_app_launching = True
self.on_app_launching()
def pause(self) -> None:
"""Should be called by the native layer when the app pauses."""
assert not self._app_paused # Should avoid redundant calls.
self._app_paused = True
self._update_state()
def resume(self) -> None:
"""Should be called by the native layer when the app resumes."""
assert self._app_paused # Should avoid redundant calls.
self._app_paused = False
self._update_state()
def on_app_pause(self) -> None:
"""Called when the app goes to a paused state."""
self.cloud.on_app_pause()
self.plugins.on_app_pause()
self.health_monitor.on_app_pause()
if self.classic is not None:
self.classic.on_app_pause()
def on_app_resume(self) -> None:
"""Called when resuming."""
self.fg_state += 1
self.cloud.on_app_resume()
self.plugins.on_app_resume()
self.health_monitor.on_app_resume()
if self.classic is not None:
self.classic.on_app_resume()
def on_app_shutdown(self) -> None:
"""(internal)"""
self.state = self.State.SHUTTING_DOWN
self.plugins.on_app_shutdown()
if self.classic is not None:
self.classic.on_app_shutdown()
def read_config(self) -> None:
"""(internal)"""
from babase._appconfig import read_config
self._config, self.config_file_healthy = read_config()
def handle_deep_link(self, url: str) -> None:
"""Handle a deep link URL."""
from babase._language import Lstr
appname = _babase.appname()
if url.startswith(f'{appname}://code/'):
code = url.replace(f'{appname}://code/', '')
if self.classic is not None:
self.classic.accounts.add_pending_promo_code(code)
else:
try:
_babase.screenmessage(
Lstr(resource='errorText'), color=(1, 0, 0)
)
_babase.getsimplesound('error').play()
except ImportError:
pass
def on_initial_sign_in_completed(self) -> None:
"""Callback to be run after initial sign-in (or lack thereof).
This period includes things such as syncing account workspaces
or other data so it may take a substantial amount of time.
This should also run after a short amount of time if no login
has occurred.
"""
# Tell meta it can start scanning extra stuff that just showed up
# (account workspaces).
self.meta.start_extra_scan()
self._initial_sign_in_completed = True
self._update_state()

View File

@ -5,7 +5,7 @@ from __future__ import annotations
from typing import TYPE_CHECKING, TypeVar, cast
import _ba
import _babase
if TYPE_CHECKING:
from typing import Callable, Any
@ -22,7 +22,7 @@ class AppComponentSubsystem:
functionality for the app, and allows plugins or other custom code to
easily override said functionality.
Use ba.app.components to get the single shared instance of this class.
Use babase.app.components to get the single shared instance of this class.
The general idea with this setup is that a base-class is defined to
provide some functionality and then anyone wanting that functionality
@ -47,7 +47,7 @@ class AppComponentSubsystem:
"""
# Currently limiting this to logic-thread use; can revisit if needed
# (would need to guard access to our implementations dict).
assert _ba.in_logic_thread()
assert _babase.in_logic_thread()
if not issubclass(implementation, baseclass):
raise TypeError(
@ -60,7 +60,7 @@ class AppComponentSubsystem:
# If we're the first thing getting dirtied, set up a callback to
# clean everything. And add ourself to the dirty list regardless.
if not self._dirty_base_classes:
_ba.pushcall(self._run_change_callbacks)
_babase.pushcall(self._run_change_callbacks)
self._dirty_base_classes.add(baseclass)
def getclass(self, baseclass: T) -> T:
@ -69,7 +69,7 @@ class AppComponentSubsystem:
If no custom implementation has been set, the provided base-class
is returned.
"""
assert _ba.in_logic_thread()
assert _babase.in_logic_thread()
del baseclass # Unused.
return cast(T, None)
@ -83,7 +83,7 @@ class AppComponentSubsystem:
loop. Note that any further setclass calls before the callback
runs will not result in additional callbacks.
"""
assert _ba.in_logic_thread()
assert _babase.in_logic_thread()
self._change_callbacks.setdefault(baseclass, []).append(callback)
def _run_change_callbacks(self) -> None:

Some files were not shown because too many files have changed in this diff Show More