diff --git a/Chapter02/Assets/Character.txt b/Chapter02/Assets/Character.txt new file mode 100644 index 0000000000000000000000000000000000000000..f1cfb0223466fd18051be476c49e146737d4e28f --- /dev/null +++ b/Chapter02/Assets/Character.txt @@ -0,0 +1,3 @@ +Walking - 01 through 06 +Jumping - 07 through 15 +Punch - 16 through 18 \ No newline at end of file diff --git a/Chapter02/Assets/Character01.png b/Chapter02/Assets/Character01.png new file mode 100644 index 0000000000000000000000000000000000000000..7926bb9cf057a9ecaa3965ac5db863827507c959 Binary files /dev/null and b/Chapter02/Assets/Character01.png differ diff --git a/Chapter02/Assets/Character02.png b/Chapter02/Assets/Character02.png new file mode 100644 index 0000000000000000000000000000000000000000..cb3a88c1a8f514d0b011c185ecfc295b9c8d1b7d Binary files /dev/null and b/Chapter02/Assets/Character02.png differ diff --git a/Chapter02/Assets/Character03.png b/Chapter02/Assets/Character03.png new file mode 100644 index 0000000000000000000000000000000000000000..38e3093f15bcf3a68e81bdee2585066415d02089 Binary files /dev/null and b/Chapter02/Assets/Character03.png differ diff --git a/Chapter02/Assets/Character04.png b/Chapter02/Assets/Character04.png new file mode 100644 index 0000000000000000000000000000000000000000..269e7ce72b357a52635195d3b23e088108ba26ca Binary files /dev/null and b/Chapter02/Assets/Character04.png differ diff --git a/Chapter02/Assets/Character05.png b/Chapter02/Assets/Character05.png new file mode 100644 index 0000000000000000000000000000000000000000..c9d873c040c7493585e773ad1afb90eb706fc517 Binary files /dev/null and b/Chapter02/Assets/Character05.png differ diff --git a/Chapter02/Assets/Character06.png b/Chapter02/Assets/Character06.png new file mode 100644 index 0000000000000000000000000000000000000000..b30921f4ae85b6a61163753c449f298ec6a35d2d Binary files /dev/null and b/Chapter02/Assets/Character06.png differ diff --git a/Chapter02/Assets/Character07.png b/Chapter02/Assets/Character07.png new file mode 100644 index 0000000000000000000000000000000000000000..5ac7a1e5f4fa17576d6170040fd07dde093adeff Binary files /dev/null and b/Chapter02/Assets/Character07.png differ diff --git a/Chapter02/Assets/Character08.png b/Chapter02/Assets/Character08.png new file mode 100644 index 0000000000000000000000000000000000000000..1049f0f7076c7ea354fcd7f00e5cdf12a0032b70 Binary files /dev/null and b/Chapter02/Assets/Character08.png differ diff --git a/Chapter02/Assets/Character09.png b/Chapter02/Assets/Character09.png new file mode 100644 index 0000000000000000000000000000000000000000..b1ec28db71827298623977d7cd00e6d13c5310ca Binary files /dev/null and b/Chapter02/Assets/Character09.png differ diff --git a/Chapter02/Assets/Character10.png b/Chapter02/Assets/Character10.png new file mode 100644 index 0000000000000000000000000000000000000000..1405000950e1b9f93a81579968702967df240dd5 Binary files /dev/null and b/Chapter02/Assets/Character10.png differ diff --git a/Chapter02/Assets/Character11.png b/Chapter02/Assets/Character11.png new file mode 100644 index 0000000000000000000000000000000000000000..124252cfda03bf7d4ae659d3a14d97296101afb5 Binary files /dev/null and b/Chapter02/Assets/Character11.png differ diff --git a/Chapter02/Assets/Character12.png b/Chapter02/Assets/Character12.png new file mode 100644 index 0000000000000000000000000000000000000000..f0a71d885ae3379bb946c6b8f53e1f7cf615e343 Binary files /dev/null and b/Chapter02/Assets/Character12.png differ diff --git a/Chapter02/Assets/Character13.png b/Chapter02/Assets/Character13.png new file mode 100644 index 0000000000000000000000000000000000000000..20a8bd3e72daba3e640a6fe43316cc62fb995e6b Binary files /dev/null and b/Chapter02/Assets/Character13.png differ diff --git a/Chapter02/Assets/Character14.png b/Chapter02/Assets/Character14.png new file mode 100644 index 0000000000000000000000000000000000000000..8309f78d7512feefb4af7415d9826451a1b98ada Binary files /dev/null and b/Chapter02/Assets/Character14.png differ diff --git a/Chapter02/Assets/Character15.png b/Chapter02/Assets/Character15.png new file mode 100644 index 0000000000000000000000000000000000000000..b1d7e1c593f9f4d69fafa10aa5b7eff42432c46b Binary files /dev/null and b/Chapter02/Assets/Character15.png differ diff --git a/Chapter02/Assets/Character16.png b/Chapter02/Assets/Character16.png new file mode 100644 index 0000000000000000000000000000000000000000..cc10c323a76076f4bda8de0c2d2abf1f4348d979 Binary files /dev/null and b/Chapter02/Assets/Character16.png differ diff --git a/Chapter02/Assets/Character17.png b/Chapter02/Assets/Character17.png new file mode 100644 index 0000000000000000000000000000000000000000..9a27b1f910f8d8e3d9d8ad3ecaf631d9b0ca3010 Binary files /dev/null and b/Chapter02/Assets/Character17.png differ diff --git a/Chapter02/Assets/Character18.png b/Chapter02/Assets/Character18.png new file mode 100644 index 0000000000000000000000000000000000000000..f5892b78cbd2172dcaf59499ce5c258a0a5ccd88 Binary files /dev/null and b/Chapter02/Assets/Character18.png differ diff --git a/Chapter07/Assets/Master Bank.bank b/Chapter07/Assets/Master Bank.bank index 035b52efc4a6f1e31748c5ca09daf8d6d62c43aa..53b3744d07c01eed9dce995db2a937b3e9ff5889 100644 Binary files a/Chapter07/Assets/Master Bank.bank and b/Chapter07/Assets/Master Bank.bank differ diff --git a/Chapter08/Game.cpp b/Chapter08/Game.cpp index e3fff3a71706db47877356a22c5434c454ca72aa..6d86eda2f20f58b99c258f21a06710f222f4d242 100644 --- a/Chapter08/Game.cpp +++ b/Chapter08/Game.cpp @@ -52,7 +52,7 @@ bool Game::Initialize() // Force OpenGL to use hardware acceleration SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1); - mWindow = SDL_CreateWindow("Game Programming in C++ (Chapter 5)", 100, 100, + mWindow = SDL_CreateWindow("Game Programming in C++ (Chapter 8)", 100, 100, 1024, 768, SDL_WINDOW_OPENGL); if (!mWindow) { diff --git a/Chapter11/Assets/Arrow.png b/Chapter11/Assets/Arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..9ccf531a5b1e27657e076bb771c76fb5714f0e6b Binary files /dev/null and b/Chapter11/Assets/Arrow.png differ diff --git a/Chapter11/Assets/BlipDown.png b/Chapter11/Assets/BlipDown.png new file mode 100644 index 0000000000000000000000000000000000000000..41b50bbe733cee3b013b2937ab677c9642da1a49 Binary files /dev/null and b/Chapter11/Assets/BlipDown.png differ diff --git a/Chapter11/Assets/BlipUp.png b/Chapter11/Assets/BlipUp.png new file mode 100644 index 0000000000000000000000000000000000000000..931029b5088200cf0e8fe2ad823614c650874cd7 Binary files /dev/null and b/Chapter11/Assets/BlipUp.png differ diff --git a/Chapter13/Assets/SpotLight.gpmesh b/Chapter13/Assets/SpotLight.gpmesh new file mode 100644 index 0000000000000000000000000000000000000000..facfefa7393e9b38fc5bf148fc05e28409d7c025 --- /dev/null +++ b/Chapter13/Assets/SpotLight.gpmesh @@ -0,0 +1,495 @@ +{ + "version":1, + "vertexformat":"PosNormTex", + "shader":"BasicMesh", + "textures":[ + "Assets/Default.png" + ], + "specularPower":100.0, + "vertices":[ + [100.000000,-50.000000,0.000004,-0.443137,-0.898039,-0.003922,0.956055,1.000000], + [100.000000,-48.296295,-12.940946,-0.443137,-0.866667,-0.239216,1.000000,1.000000], + [80.000000,-38.637035,-10.352757,-0.443137,-0.866667,-0.239216,1.000000,0.779297], + [80.000000,-40.000000,0.000003,-0.443137,-0.898039,-0.003922,0.956055,0.779297], + [60.000000,-28.977776,-7.764568,-0.443137,-0.866667,-0.239216,1.000000,0.558594], + [100.000000,-48.296291,12.940954,-0.443137,-0.866667,0.223529,0.912109,1.000000], + [60.000000,-30.000000,0.000002,-0.443137,-0.898039,-0.003922,0.956055,0.558594], + [40.000000,-19.318518,-5.176378,-0.443137,-0.866667,-0.239216,1.000000,0.339111], + [80.000000,-38.637035,10.352763,-0.443137,-0.866667,0.223529,0.912109,0.779297], + [100.000000,-43.301273,24.999998,-0.443137,-0.780392,0.435294,0.869141,1.000000], + [40.000000,-19.999998,0.000002,-0.443137,-0.898039,-0.003922,0.956055,0.339111], + [20.000000,-9.659259,-2.588189,-0.443137,-0.866667,-0.239216,1.000000,0.121521], + [60.000000,-28.977776,7.764572,-0.443137,-0.866667,0.223529,0.912109,0.558594], + [80.000000,-34.641018,19.999998,-0.443137,-0.780392,0.435294,0.869141,0.779297], + [100.000000,-35.355339,35.355339,-0.443137,-0.639216,0.623530,0.826660,1.000000], + [20.000000,-9.999999,0.000001,-0.443137,-0.898039,-0.003922,0.956055,0.121521], + [0.000015,-0.096593,-0.025883,-0.443137,-0.866667,-0.239216,1.000000,0.000000], + [0.000015,-0.100001,-0.000001,-0.443137,-0.898039,-0.003922,0.956055,0.000000], + [80.000000,-28.284271,28.284271,-0.443137,-0.639216,0.623530,0.826660,0.779297], + [100.000000,-25.000000,43.301273,-0.450980,-0.458824,0.772549,0.784668,1.000000], + [20.000000,-9.659258,2.588191,-0.443137,-0.866667,0.223529,0.912109,0.121521], + [0.000015,-0.096593,0.025881,-0.443137,-0.866667,0.223529,0.912109,0.000000], + [40.000000,-19.318516,5.176381,-0.443137,-0.866667,0.223529,0.912109,0.339111], + [20.000000,-8.660254,5.000000,-0.443137,-0.780392,0.435294,0.869141,0.121521], + [0.000015,-0.086603,0.049999,-0.443137,-0.780392,0.435294,0.869141,0.000000], + [40.000000,-17.320507,9.999999,-0.443137,-0.780392,0.435294,0.869141,0.339111], + [60.000000,-25.980764,14.999999,-0.443137,-0.780392,0.435294,0.869141,0.558594], + [60.000000,-21.213203,21.213203,-0.443137,-0.639216,0.623530,0.826660,0.558594], + [40.000000,-14.142135,14.142135,-0.443137,-0.639216,0.623530,0.826660,0.339111], + [20.000000,-7.071067,7.071067,-0.443137,-0.639216,0.623530,0.826660,0.121521], + [0.000015,-0.070711,0.070710,-0.443137,-0.639216,0.623530,0.826660,0.000000], + [80.000000,-20.000000,34.641014,-0.450980,-0.458824,0.772549,0.784668,0.779297], + [100.000000,-12.940952,48.296291,-0.450980,-0.247059,0.858824,0.743652,1.000000], + [60.000000,-15.000000,25.980762,-0.450980,-0.458824,0.772549,0.784668,0.558594], + [80.000000,-10.352762,38.637035,-0.450980,-0.247059,0.858824,0.743652,0.779297], + [100.000000,-0.000000,50.000000,-0.450980,-0.011765,0.890196,0.702637,1.000000], + [40.000000,-9.999999,17.320507,-0.450980,-0.458824,0.772549,0.784668,0.339111], + [60.000000,-7.764572,28.977776,-0.450980,-0.247059,0.858824,0.743652,0.558594], + [80.000000,0.000000,40.000000,-0.450980,-0.011765,0.890196,0.702637,0.779297], + [100.000000,12.940989,48.296280,-0.450980,0.231373,0.858824,0.662598,1.000000], + [20.000000,-5.000000,8.660254,-0.450980,-0.458824,0.772549,0.784668,0.121521], + [0.000015,-0.050000,0.086601,-0.450980,-0.458824,0.772549,0.784668,0.000000], + [80.000000,10.352790,38.637028,-0.450980,0.231373,0.858824,0.662598,0.779297], + [100.000000,25.000029,43.301258,-0.450980,0.443137,0.772549,0.622559,1.000000], + [20.000000,-2.588190,9.659258,-0.450980,-0.247059,0.858824,0.743652,0.121521], + [0.000015,-0.025882,0.096591,-0.450980,-0.247059,0.858824,0.743652,0.000000], + [40.000000,-5.176380,19.318516,-0.450980,-0.247059,0.858824,0.743652,0.339111], + [20.000000,0.000000,9.999999,-0.450980,-0.011765,0.890196,0.702637,0.121521], + [0.000015,-0.000000,0.099999,-0.450980,-0.011765,0.890196,0.702637,0.000000], + [40.000000,0.000000,19.999998,-0.450980,-0.011765,0.890196,0.702637,0.339111], + [60.000000,0.000000,30.000000,-0.450980,-0.011765,0.890196,0.702637,0.558594], + [60.000000,7.764593,28.977768,-0.450980,0.231373,0.858824,0.662598,0.558594], + [40.000000,5.176395,19.318512,-0.450980,0.231373,0.858824,0.662598,0.339111], + [20.000000,2.588197,9.659256,-0.450980,0.231373,0.858824,0.662598,0.121521], + [0.000015,0.025882,0.096591,-0.450980,0.231373,0.858824,0.662598,0.000000], + [80.000000,20.000025,34.641003,-0.450980,0.443137,0.772549,0.622559,0.779297], + [100.000000,35.355362,35.355316,-0.450980,0.631373,0.631373,0.582520,1.000000], + [60.000000,15.000018,25.980751,-0.450980,0.443137,0.772549,0.622559,0.558594], + [80.000000,28.284290,28.284254,-0.450980,0.631373,0.631373,0.582520,0.779297], + [100.000000,43.301285,24.999975,-0.450980,0.772549,0.443137,0.542969,1.000000], + [40.000000,10.000011,17.320501,-0.450980,0.443137,0.772549,0.622559,0.339111], + [60.000000,21.213219,21.213192,-0.450980,0.631373,0.631373,0.582520,0.558594], + [80.000000,34.641029,19.999979,-0.450980,0.772549,0.443137,0.542969,0.779297], + [100.000000,48.296295,12.940927,-0.450980,0.858824,0.231373,0.502930,1.000000], + [20.000000,5.000006,8.660251,-0.450980,0.443137,0.772549,0.622559,0.121521], + [0.000015,0.050000,0.086601,-0.450980,0.443137,0.772549,0.622559,0.000000], + [80.000000,38.637039,10.352741,-0.450980,0.858824,0.231373,0.502930,0.779297], + [100.000000,50.000000,-0.000023,-0.450980,0.890196,-0.011765,0.463379,1.000000], + [20.000000,7.071072,7.071063,-0.450980,0.631373,0.631373,0.582520,0.121521], + [0.000015,0.070710,0.070709,-0.450980,0.631373,0.631373,0.582520,0.000000], + [40.000000,14.142144,14.142126,-0.450980,0.631373,0.631373,0.582520,0.339111], + [20.000000,8.660256,4.999995,-0.450980,0.772549,0.443137,0.542969,0.121521], + [0.000015,0.086602,0.049999,-0.450980,0.772549,0.443137,0.542969,0.000000], + [40.000000,17.320513,9.999990,-0.450980,0.772549,0.443137,0.542969,0.339111], + [60.000000,25.980772,14.999985,-0.450980,0.772549,0.443137,0.542969,0.558594], + [60.000000,28.977777,7.764556,-0.450980,0.858824,0.231373,0.502930,0.558594], + [40.000000,19.318518,5.176371,-0.450980,0.858824,0.231373,0.502930,0.339111], + [20.000000,9.659259,2.588185,-0.450980,0.858824,0.231373,0.502930,0.121521], + [0.000015,0.096592,0.025881,-0.450980,0.858824,0.231373,0.502930,0.000000], + [80.000000,40.000000,-0.000019,-0.450980,0.890196,-0.011765,0.463379,0.779297], + [100.000000,48.296288,-12.940971,-0.450980,0.858824,-0.247059,0.423584,1.000000], + [60.000000,30.000000,-0.000014,-0.450980,0.890196,-0.011765,0.463379,0.558594], + [80.000000,38.637028,-10.352777,-0.450980,0.858824,-0.247059,0.423584,0.779297], + [100.000000,43.301262,-25.000015,-0.450980,0.772549,-0.458824,0.383301,1.000000], + [40.000000,19.999998,-0.000009,-0.450980,0.890196,-0.011765,0.463379,0.339111], + [60.000000,28.977772,-7.764583,-0.450980,0.858824,-0.247059,0.423584,0.558594], + [80.000000,34.641006,-20.000011,-0.450980,0.772549,-0.458824,0.383301,0.779297], + [100.000000,35.355320,-35.355358,-0.443137,0.623530,-0.639216,0.343018,1.000000], + [20.000000,9.999999,-0.000005,-0.450980,0.890196,-0.011765,0.463379,0.121521], + [0.000015,0.099999,-0.000001,-0.450980,0.890196,-0.011765,0.463379,0.000000], + [80.000000,28.284258,-28.284288,-0.443137,0.623530,-0.639216,0.343018,0.779297], + [100.000000,24.999979,-43.301281,-0.443137,0.435294,-0.780392,0.302246,1.000000], + [20.000000,9.659257,-2.588194,-0.450980,0.858824,-0.247059,0.423584,0.121521], + [0.000015,0.096592,-0.025883,-0.450980,0.858824,-0.247059,0.423584,0.000000], + [40.000000,19.318514,-5.176388,-0.450980,0.858824,-0.247059,0.423584,0.339111], + [20.000000,8.660252,-5.000003,-0.450980,0.772549,-0.458824,0.383301,0.121521], + [0.000015,0.086602,-0.050001,-0.450980,0.772549,-0.458824,0.383301,0.000000], + [40.000000,17.320503,-10.000006,-0.450980,0.772549,-0.458824,0.383301,0.339111], + [60.000000,25.980757,-15.000009,-0.450980,0.772549,-0.458824,0.383301,0.558594], + [60.000000,21.213192,-21.213215,-0.443137,0.623530,-0.639216,0.343018,0.558594], + [40.000000,14.142127,-14.142143,-0.443137,0.623530,-0.639216,0.343018,0.339111], + [20.000000,7.071064,-7.071072,-0.443137,0.623530,-0.639216,0.343018,0.121521], + [0.000015,0.070710,-0.070712,-0.443137,0.623530,-0.639216,0.343018,0.000000], + [80.000000,19.999983,-34.641026,-0.443137,0.435294,-0.780392,0.302246,0.779297], + [100.000000,12.940931,-48.296295,-0.443137,0.223529,-0.866667,0.260742,1.000000], + [60.000000,14.999988,-25.980768,-0.443137,0.435294,-0.780392,0.302246,0.558594], + [80.000000,10.352745,-38.637039,-0.443137,0.223529,-0.866667,0.260742,0.779297], + [100.000000,-0.000019,-50.000000,-0.443137,-0.003922,-0.898039,0.218872,1.000000], + [40.000000,9.999991,-17.320511,-0.443137,0.435294,-0.780392,0.302246,0.339111], + [60.000000,7.764559,-28.977777,-0.443137,0.223529,-0.866667,0.260742,0.558594], + [80.000000,-0.000016,-40.000000,-0.443137,-0.003922,-0.898039,0.218872,0.779297], + [100.000000,-12.940969,-48.296288,-0.443137,-0.239216,-0.866667,0.176147,1.000000], + [20.000000,4.999996,-8.660255,-0.443137,0.435294,-0.780392,0.302246,0.121521], + [0.000015,0.050000,-0.086604,-0.443137,0.435294,-0.780392,0.302246,0.000000], + [80.000000,-10.352776,-38.637032,-0.443137,-0.239216,-0.866667,0.176147,0.779297], + [100.000000,-25.000011,-43.301262,-0.443137,-0.450980,-0.780392,0.132568,1.000000], + [20.000000,2.588186,-9.659259,-0.443137,0.223529,-0.866667,0.260742,0.121521], + [0.000015,0.025881,-0.096594,-0.443137,0.223529,-0.866667,0.260742,0.000000], + [40.000000,5.176373,-19.318518,-0.443137,0.223529,-0.866667,0.260742,0.339111], + [20.000000,-0.000004,-9.999999,-0.443137,-0.003922,-0.898039,0.218872,0.121521], + [0.000015,-0.000000,-0.100001,-0.443137,-0.003922,-0.898039,0.218872,0.000000], + [40.000000,-0.000008,-19.999998,-0.443137,-0.003922,-0.898039,0.218872,0.339111], + [60.000000,-0.000012,-30.000000,-0.443137,-0.003922,-0.898039,0.218872,0.558594], + [60.000000,-7.764581,-28.977774,-0.443137,-0.239216,-0.866667,0.176147,0.558594], + [40.000000,-5.176387,-19.318514,-0.443137,-0.239216,-0.866667,0.176147,0.339111], + [20.000000,-2.588193,-9.659257,-0.443137,-0.239216,-0.866667,0.176147,0.121521], + [0.000015,-0.025882,-0.096594,-0.443137,-0.239216,-0.866667,0.176147,0.000000], + [80.000000,-20.000010,-34.641010,-0.443137,-0.450980,-0.780392,0.132568,0.779297], + [100.000000,-35.355347,-35.355331,-0.443137,-0.639216,-0.639216,0.088196,1.000000], + [60.000000,-15.000008,-25.980759,-0.443137,-0.450980,-0.780392,0.132568,0.558594], + [80.000000,-28.284279,-28.284264,-0.443137,-0.639216,-0.639216,0.088196,0.779297], + [100.000000,-43.301277,-24.999992,-0.443137,-0.780392,-0.450980,0.043823,1.000000], + [40.000000,-10.000005,-17.320503,-0.443137,-0.450980,-0.780392,0.132568,0.339111], + [60.000000,-21.213209,-21.213200,-0.443137,-0.639216,-0.639216,0.088196,0.558594], + [80.000000,-34.641022,-19.999994,-0.443137,-0.780392,-0.450980,0.043823,0.779297], + [100.000000,-48.296295,-12.940946,-0.443137,-0.866667,-0.239216,0.000000,1.000000], + [80.000000,-38.637035,-10.352757,-0.443137,-0.866667,-0.239216,0.000000,0.779297], + [60.000000,-25.980766,-14.999995,-0.443137,-0.780392,-0.450980,0.043823,0.558594], + [60.000000,-28.977776,-7.764568,-0.443137,-0.866667,-0.239216,0.000000,0.558594], + [40.000000,-14.142138,-14.142131,-0.443137,-0.639216,-0.639216,0.088196,0.339111], + [40.000000,-17.320509,-9.999996,-0.443137,-0.780392,-0.450980,0.043823,0.339111], + [40.000000,-19.318518,-5.176378,-0.443137,-0.866667,-0.239216,0.000000,0.339111], + [20.000000,-5.000002,-8.660252,-0.443137,-0.450980,-0.780392,0.132568,0.121521], + [0.000015,-0.050000,-0.086604,-0.443137,-0.450980,-0.780392,0.132568,0.000000], + [20.000000,-7.071069,-7.071065,-0.443137,-0.639216,-0.639216,0.088196,0.121521], + [0.000015,-0.070711,-0.070712,-0.443137,-0.639216,-0.639216,0.088196,0.000000], + [20.000000,-8.660254,-4.999998,-0.443137,-0.780392,-0.450980,0.043823,0.121521], + [0.000015,-0.086603,-0.050001,-0.443137,-0.780392,-0.450980,0.043823,0.000000], + [20.000000,-9.659259,-2.588189,-0.443137,-0.866667,-0.239216,0.000000,0.121521], + [0.000015,-0.096593,-0.025883,-0.443137,-0.866667,-0.239216,0.000000,0.000000], + [0.000015,0.025882,0.096591,-1.000000,-0.003922,-0.003922,0.458252,0.330811], + [0.000015,-0.000000,0.099999,-1.000000,-0.003922,-0.003922,0.461670,0.324951], + [0.000015,-0.025882,0.096591,-1.000000,-0.003922,-0.003922,0.463379,0.318359], + [0.000015,-0.070711,0.070710,-1.000000,-0.003922,-0.003922,0.461670,0.304688], + [0.000015,-0.050000,0.086601,-1.000000,-0.003922,-0.003922,0.463379,0.311523], + [0.000015,0.050000,0.086601,-1.000000,-0.003922,-0.003922,0.453369,0.335693], + [0.000015,0.070710,0.070709,-1.000000,-0.003922,-0.003922,0.447510,0.339111], + [0.000015,0.086602,0.049999,-1.000000,-0.003922,-0.003922,0.440918,0.340820], + [0.000015,0.096592,0.025881,-1.000000,-0.003922,-0.003922,0.434082,0.340820], + [0.000015,0.099999,-0.000001,-1.000000,-0.003922,-0.003922,0.427246,0.339111], + [0.000015,0.096592,-0.025883,-1.000000,-0.003922,-0.003922,0.421387,0.335693], + [0.000015,0.086602,-0.050001,-1.000000,-0.003922,-0.003922,0.416504,0.330811], + [0.000015,0.070710,-0.070712,-1.000000,-0.003922,-0.003922,0.413086,0.324951], + [0.000015,0.050000,-0.086604,-1.000000,-0.003922,-0.003922,0.411377,0.318359], + [0.000015,0.025881,-0.096594,-1.000000,-0.003922,-0.003922,0.411377,0.311523], + [0.000015,-0.000000,-0.100001,-1.000000,-0.003922,-0.003922,0.413086,0.304688], + [0.000015,-0.025882,-0.096594,-1.000000,-0.003922,-0.003922,0.416504,0.298828], + [0.000015,-0.050000,-0.086604,-1.000000,-0.003922,-0.003922,0.421387,0.293945], + [0.000015,-0.070711,-0.070712,-1.000000,-0.003922,-0.003922,0.427246,0.290527], + [0.000015,-0.086603,-0.050001,-1.000000,-0.003922,-0.003922,0.434082,0.288818], + [0.000015,-0.096593,-0.025883,-1.000000,-0.003922,-0.003922,0.440918,0.288818], + [0.000015,-0.100001,-0.000001,-1.000000,-0.003922,-0.003922,0.447510,0.290527], + [0.000015,-0.096593,0.025881,-1.000000,-0.003922,-0.003922,0.453369,0.293945], + [0.000015,-0.086603,0.049999,-1.000000,-0.003922,-0.003922,0.458252,0.298828], + [100.000000,25.000029,43.301258,0.992157,-0.003922,-0.003922,0.750000,0.066956], + [100.000000,35.355362,35.355316,0.992157,-0.003922,-0.003922,0.853516,0.146362], + [100.000000,43.301285,24.999975,0.992157,-0.003922,-0.003922,0.932617,0.250000], + [100.000000,-0.000000,50.000000,0.992157,-0.003922,-0.003922,0.500000,0.000000], + [100.000000,12.940989,48.296280,0.992157,-0.003922,-0.003922,0.629395,0.017029], + [100.000000,48.296295,12.940927,0.992157,-0.003922,-0.003922,0.982910,0.370361], + [100.000000,50.000000,-0.000023,0.992157,-0.003922,-0.003922,1.000000,0.500000], + [100.000000,43.301262,-25.000015,0.992157,-0.003922,-0.003922,0.932617,0.750000], + [100.000000,48.296288,-12.940971,0.992157,-0.003922,-0.003922,0.982910,0.629395], + [100.000000,-25.000000,43.301273,0.992157,-0.003922,-0.003922,0.250000,0.066956], + [100.000000,-12.940952,48.296291,0.992157,-0.003922,-0.003922,0.370361,0.017029], + [100.000000,35.355320,-35.355358,0.992157,-0.003922,-0.003922,0.853516,0.853516], + [100.000000,24.999979,-43.301281,0.992157,-0.003922,-0.003922,0.749512,0.932617], + [100.000000,-43.301273,24.999998,0.992157,-0.003922,-0.003922,0.066956,0.250000], + [100.000000,-35.355339,35.355339,0.992157,-0.003922,-0.003922,0.146362,0.146362], + [100.000000,-43.301277,-24.999992,0.992157,-0.003922,-0.003922,0.066956,0.749512], + [100.000000,-0.000019,-50.000000,0.992157,-0.003922,-0.003922,0.499756,1.000000], + [100.000000,12.940931,-48.296295,0.992157,-0.003922,-0.003922,0.629395,0.982910], + [100.000000,-50.000000,0.000004,0.992157,-0.003922,-0.003922,0.000000,0.500000], + [100.000000,-48.296291,12.940954,0.992157,-0.003922,-0.003922,0.017029,0.370361], + [100.000000,-48.296295,-12.940946,0.992157,-0.003922,-0.003922,0.017029,0.629395], + [100.000000,-25.000011,-43.301262,0.992157,-0.003922,-0.003922,0.249878,0.932617], + [100.000000,-12.940969,-48.296288,0.992157,-0.003922,-0.003922,0.370361,0.982910], + [100.000000,-35.355347,-35.355331,0.992157,-0.003922,-0.003922,0.146362,0.853516] + ], + "indices":[ + [0,1,2], + [2,3,0], + [3,2,4], + [5,0,3], + [4,6,3], + [6,4,7], + [3,8,5], + [8,3,6], + [9,5,8], + [7,10,6], + [10,7,11], + [6,12,8], + [12,6,10], + [8,13,9], + [13,8,12], + [14,9,13], + [11,15,10], + [15,11,16], + [16,17,15], + [13,18,14], + [19,14,18], + [20,15,17], + [17,21,20], + [22,10,15], + [15,20,22], + [10,22,12], + [23,20,21], + [21,24,23], + [25,22,20], + [20,23,25], + [26,12,22], + [12,26,13], + [22,25,26], + [18,13,26], + [27,26,25], + [26,27,18], + [28,25,23], + [25,28,27], + [29,23,24], + [23,29,28], + [24,30,29], + [31,18,27], + [18,31,19], + [32,19,31], + [27,33,31], + [33,27,28], + [31,34,32], + [34,31,33], + [35,32,34], + [28,36,33], + [36,28,29], + [33,37,34], + [37,33,36], + [34,38,35], + [38,34,37], + [39,35,38], + [29,40,36], + [40,29,30], + [30,41,40], + [38,42,39], + [43,39,42], + [44,40,41], + [41,45,44], + [46,36,40], + [40,44,46], + [36,46,37], + [47,44,45], + [45,48,47], + [49,46,44], + [44,47,49], + [50,37,46], + [37,50,38], + [46,49,50], + [42,38,50], + [51,50,49], + [50,51,42], + [52,49,47], + [49,52,51], + [53,47,48], + [47,53,52], + [48,54,53], + [55,42,51], + [42,55,43], + [56,43,55], + [51,57,55], + [57,51,52], + [55,58,56], + [58,55,57], + [59,56,58], + [52,60,57], + [60,52,53], + [57,61,58], + [61,57,60], + [58,62,59], + [62,58,61], + [63,59,62], + [53,64,60], + [64,53,54], + [54,65,64], + [62,66,63], + [67,63,66], + [68,64,65], + [65,69,68], + [70,60,64], + [64,68,70], + [60,70,61], + [71,68,69], + [69,72,71], + [73,70,68], + [68,71,73], + [74,61,70], + [61,74,62], + [70,73,74], + [66,62,74], + [75,74,73], + [74,75,66], + [76,73,71], + [73,76,75], + [77,71,72], + [71,77,76], + [72,78,77], + [79,66,75], + [66,79,67], + [80,67,79], + [75,81,79], + [81,75,76], + [79,82,80], + [82,79,81], + [83,80,82], + [76,84,81], + [84,76,77], + [81,85,82], + [85,81,84], + [82,86,83], + [86,82,85], + [87,83,86], + [77,88,84], + [88,77,78], + [78,89,88], + [86,90,87], + [91,87,90], + [92,88,89], + [89,93,92], + [94,84,88], + [88,92,94], + [84,94,85], + [95,92,93], + [93,96,95], + [97,94,92], + [92,95,97], + [98,85,94], + [85,98,86], + [94,97,98], + [90,86,98], + [99,98,97], + [98,99,90], + [100,97,95], + [97,100,99], + [101,95,96], + [95,101,100], + [96,102,101], + [103,90,99], + [90,103,91], + [104,91,103], + [99,105,103], + [105,99,100], + [103,106,104], + [106,103,105], + [107,104,106], + [100,108,105], + [108,100,101], + [105,109,106], + [109,105,108], + [106,110,107], + [110,106,109], + [111,107,110], + [101,112,108], + [112,101,102], + [102,113,112], + [110,114,111], + [115,111,114], + [116,112,113], + [113,117,116], + [118,108,112], + [112,116,118], + [108,118,109], + [119,116,117], + [117,120,119], + [121,118,116], + [116,119,121], + [122,109,118], + [109,122,110], + [118,121,122], + [114,110,122], + [123,122,121], + [122,123,114], + [124,121,119], + [121,124,123], + [125,119,120], + [119,125,124], + [120,126,125], + [127,114,123], + [114,127,115], + [128,115,127], + [123,129,127], + [129,123,124], + [127,130,128], + [130,127,129], + [131,128,130], + [124,132,129], + [132,124,125], + [129,133,130], + [133,129,132], + [130,134,131], + [134,130,133], + [135,131,134], + [134,136,135], + [136,134,137], + [133,137,134], + [137,138,136], + [137,133,139], + [132,139,133], + [138,137,140], + [139,140,137], + [140,141,138], + [139,132,142], + [125,142,132], + [142,125,126], + [126,143,142], + [142,144,139], + [144,142,143], + [140,139,144], + [143,145,144], + [144,146,140], + [146,144,145], + [141,140,146], + [145,147,146], + [146,148,141], + [148,146,147], + [147,149,148], + [150,151,152], + [153,150,152], + [153,152,154], + [153,155,150], + [153,156,155], + [153,157,156], + [153,158,157], + [153,159,158], + [153,160,159], + [153,161,160], + [153,162,161], + [153,163,162], + [153,164,163], + [153,165,164], + [153,166,165], + [153,167,166], + [153,168,167], + [153,169,168], + [153,170,169], + [153,171,170], + [153,172,171], + [153,173,172], + [174,175,176], + [177,178,174], + [177,174,176], + [176,179,180], + [176,180,181], + [180,182,181], + [177,176,181], + [183,184,177], + [181,185,186], + [183,177,187], + [183,187,188], + [177,181,189], + [177,189,187], + [181,186,190], + [186,191,190], + [181,190,189], + [192,193,187], + [189,192,187], + [189,194,192], + [190,195,189], + [190,196,195], + [195,197,189] + ] +} diff --git a/Chapter13/Shaders/GBufferGlobal.frag b/Chapter13/Shaders/GBufferGlobal.frag index 1b28218487043e53a7f50464886ae1de9525f82c..edead31d438277ee4d48717c7c0c3aaf999c22a9 100644 --- a/Chapter13/Shaders/GBufferGlobal.frag +++ b/Chapter13/Shaders/GBufferGlobal.frag @@ -60,6 +60,7 @@ void main() if (NdotL > 0) { vec3 Diffuse = uDirLight.mDiffuseColor * dot(N, L); + Phong += Diffuse; } // Clamp light between 0-1 RGB values Phong = clamp(Phong, 0.0, 1.0); diff --git a/Exercises/4.2/Actor.cpp b/Exercises/4.2/Actor.cpp new file mode 100644 index 0000000000000000000000000000000000000000..4b8eea91e2b71829e67e649fa022c5c600dda895 --- /dev/null +++ b/Exercises/4.2/Actor.cpp @@ -0,0 +1,101 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "Actor.h" +#include "Game.h" +#include "Component.h" +#include <algorithm> + +Actor::Actor(Game* game) + :mState(EActive) + , mPosition(Vector2::Zero) + , mScale(1.0f) + , mRotation(0.0f) + , mGame(game) +{ + mGame->AddActor(this); +} + +Actor::~Actor() +{ + mGame->RemoveActor(this); + // Need to delete components + // Because ~Component calls RemoveComponent, need a different style loop + while (!mComponents.empty()) + { + delete mComponents.back(); + } +} + +void Actor::Update(float deltaTime) +{ + if (mState == EActive) + { + UpdateComponents(deltaTime); + UpdateActor(deltaTime); + } +} + +void Actor::UpdateComponents(float deltaTime) +{ + for (auto comp : mComponents) + { + comp->Update(deltaTime); + } +} + +void Actor::UpdateActor(float deltaTime) +{ +} + +void Actor::ProcessInput(const uint8_t* keyState) +{ + if (mState == EActive) + { + // First process input for components + for (auto comp : mComponents) + { + comp->ProcessInput(keyState); + } + + ActorInput(keyState); + } +} + +void Actor::ActorInput(const uint8_t* keyState) +{ +} + +void Actor::AddComponent(Component* component) +{ + // Find the insertion point in the sorted vector + // (The first element with a order higher than me) + int myOrder = component->GetUpdateOrder(); + auto iter = mComponents.begin(); + for (; + iter != mComponents.end(); + ++iter) + { + if (myOrder < (*iter)->GetUpdateOrder()) + { + break; + } + } + + // Inserts element before position of iterator + mComponents.insert(iter, component); +} + +void Actor::RemoveComponent(Component* component) +{ + auto iter = std::find(mComponents.begin(), mComponents.end(), component); + if (iter != mComponents.end()) + { + mComponents.erase(iter); + } +} diff --git a/Exercises/4.2/Actor.h b/Exercises/4.2/Actor.h new file mode 100644 index 0000000000000000000000000000000000000000..767d3c1a2e7b57616f5ab6ebcabb1dda0e3148a4 --- /dev/null +++ b/Exercises/4.2/Actor.h @@ -0,0 +1,69 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once +#include <vector> +#include "Math.h" +#include <cstdint> + +class Actor +{ +public: + enum State + { + EActive, + EPaused, + EDead + }; + + Actor(class Game* game); + virtual ~Actor(); + + // Update function called from Game (not overridable) + void Update(float deltaTime); + // Updates all the components attached to the actor (not overridable) + void UpdateComponents(float deltaTime); + // Any actor-specific update code (overridable) + virtual void UpdateActor(float deltaTime); + + // ProcessInput function called from Game (not overridable) + void ProcessInput(const uint8_t* keyState); + // Any actor-specific input code (overridable) + virtual void ActorInput(const uint8_t* keyState); + + // Getters/setters + const Vector2& GetPosition() const { return mPosition; } + void SetPosition(const Vector2& pos) { mPosition = pos; } + float GetScale() const { return mScale; } + void SetScale(float scale) { mScale = scale; } + float GetRotation() const { return mRotation; } + void SetRotation(float rotation) { mRotation = rotation; } + + Vector2 GetForward() const { return Vector2(Math::Cos(mRotation), -Math::Sin(mRotation)); } + + State GetState() const { return mState; } + void SetState(State state) { mState = state; } + + class Game* GetGame() { return mGame; } + + + // Add/remove components + void AddComponent(class Component* component); + void RemoveComponent(class Component* component); +private: + // Actor's state + State mState; + + // Transform + Vector2 mPosition; + float mScale; + float mRotation; + + std::vector<class Component*> mComponents; + class Game* mGame; +}; diff --git a/Exercises/4.2/Assets/Board.png b/Exercises/4.2/Assets/Board.png new file mode 100644 index 0000000000000000000000000000000000000000..933925e429de390ba43a540c76f313916289a2b8 Binary files /dev/null and b/Exercises/4.2/Assets/Board.png differ diff --git a/Exercises/4.2/Assets/RedPiece.png b/Exercises/4.2/Assets/RedPiece.png new file mode 100644 index 0000000000000000000000000000000000000000..2bef54cce2b8c95e9ec62ff180507e8abbb21c9b Binary files /dev/null and b/Exercises/4.2/Assets/RedPiece.png differ diff --git a/Exercises/4.2/Assets/YellowPiece.png b/Exercises/4.2/Assets/YellowPiece.png new file mode 100644 index 0000000000000000000000000000000000000000..4dc36966b003e8ba68502e529ebf50e740f72f3c Binary files /dev/null and b/Exercises/4.2/Assets/YellowPiece.png differ diff --git a/Exercises/4.2/Board.cpp b/Exercises/4.2/Board.cpp new file mode 100644 index 0000000000000000000000000000000000000000..65d013aa7dc053891adee6cc7eeda457097196e1 --- /dev/null +++ b/Exercises/4.2/Board.cpp @@ -0,0 +1,223 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "Board.h" +#include "Random.h" + +BoardState::BoardState() +{ + for (int i = 0; i < 6; i++) + { + for (int j = 0; j < 7; j++) + { + mBoard[i][j] = Empty; + } + } +} + +std::vector<BoardState*> BoardState::GetPossibleMoves(SquareState player) const +{ + std::vector<BoardState*> retVal; + + // For each column, find if a move is possible + for (int col = 0; col < 7; col++) + { + for (int row = 5; row >= 0; row--) + { + if (mBoard[row][col] == BoardState::Empty) + { + retVal.emplace_back(new BoardState(*this)); + retVal.back()->mBoard[row][col] = player; + break; + } + } + } + + return retVal; +} + +bool BoardState::IsTerminal() const +{ + // Is the board full? + if (IsFull()) + { + return true; + } + + // Is there a four-in-a-row? + int fourInRow = GetFourInARow(); + if (fourInRow != 0) + { + return true; + } + + return false; +} + +float BoardState::GetScore() const +{ + // If the board is full, the score is 0 + if (IsFull()) + { + return 0.0f; + } + + // Is there a four-in-a-row? + int fourInRow = GetFourInARow(); + if (fourInRow != 0) + { + return static_cast<float>(fourInRow); + } + + return CalculateHeuristic(); +} + +bool BoardState::IsFull() const +{ + bool isFull = true; + for (int i = 0; i < 6; i++) + { + for (int j = 0; j < 7; j++) + { + if (mBoard[i][j] == Empty) + { + isFull = false; + } + } + } + + return isFull; +} + +int BoardState::GetFourInARow() const +{ + // Returns -1 if yellow wins, 1 if red wins, 0 otherwise + + // Check if there's a row with four in a row + for (int row = 0; row < 6; row++) + { + for (int col = 0; col < 4; col++) + { + if (mBoard[row][col] == mBoard[row][col + 1] && + mBoard[row][col] == mBoard[row][col + 2] && + mBoard[row][col] == mBoard[row][col + 3]) + { + if (mBoard[row][col] == BoardState::Yellow) + { + return -1; + } + else if (mBoard[row][col] == BoardState::Red) + { + return 1; + } + } + } + } + + // Check if there's a column with four in a row + for (int col = 0; col < 7; col++) + { + for (int row = 0; row < 3; row++) + { + if (mBoard[row][col] == mBoard[row + 1][col] && + mBoard[row][col] == mBoard[row + 2][col] && + mBoard[row][col] == mBoard[row + 3][col]) + { + if (mBoard[row][col] == BoardState::Yellow) + { + return -1; + } + else if (mBoard[row][col] == BoardState::Red) + { + return 1; + } + } + } + } + + // Check if there's a right diagonal four in a row + for (int col = 0; col < 4; col++) + { + for (int row = 0; row < 3; row++) + { + if (mBoard[row][col] == mBoard[row + 1][col + 1] && + mBoard[row][col] == mBoard[row + 2][col + 2] && + mBoard[row][col] == mBoard[row + 3][col + 3]) + { + if (mBoard[row][col] == BoardState::Yellow) + { + return -1; + } + else if (mBoard[row][col] == BoardState::Red) + { + return 1; + } + } + } + } + + // Check if there's a left diagonal for in a row + for (int col = 0; col < 4; col++) + { + for (int row = 3; row < 6; row++) + { + if (mBoard[row][col] == mBoard[row - 1][col + 1] && + mBoard[row][col] == mBoard[row - 2][col + 2] && + mBoard[row][col] == mBoard[row - 3][col + 3]) + { + if (mBoard[row][col] == BoardState::Yellow) + { + return -1; + } + else if (mBoard[row][col] == BoardState::Red) + { + return 1; + } + } + } + } + return 0; +} + +float BoardState::CalculateHeuristic() const +{ + // TODO: You could change this to calculate an actual heuristic + return 0.0f; +} + +bool TryPlayerMove(BoardState* state, int column) +{ + // Find the first row in that column that's available + // (if any) + for (int row = 5; row >= 0; row--) + { + if (state->mBoard[row][column] == BoardState::Empty) + { + state->mBoard[row][column] = BoardState::Yellow; + return true; + } + } + + return false; +} + +void CPUMove(BoardState* state) +{ + // For now, this just randomly picks one of the possible moves + std::vector<BoardState*> moves = state->GetPossibleMoves(BoardState::Red); + + int index = Random::GetIntRange(0, moves.size() - 1); + + *state = *moves[index]; + + // Clear up memory from possible moves + for (auto state : moves) + { + delete state; + } +} diff --git a/Exercises/4.2/Board.h b/Exercises/4.2/Board.h new file mode 100644 index 0000000000000000000000000000000000000000..eff8393abfc8a4b9ae0e67adc40dfadb960f432a --- /dev/null +++ b/Exercises/4.2/Board.h @@ -0,0 +1,32 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once +#include <vector> + +class BoardState +{ +public: + enum SquareState { Empty, Red, Yellow }; + BoardState(); + std::vector<BoardState*> GetPossibleMoves(SquareState player) const; + bool IsTerminal() const; + float GetScore() const; + + SquareState mBoard[6][7]; +protected: + bool IsFull() const; + int GetFourInARow() const; + float CalculateHeuristic() const; +}; + +// Try to place the player's piece +bool TryPlayerMove(class BoardState* state, int column); + +// Make the next CPU move +void CPUMove(class BoardState* state); \ No newline at end of file diff --git a/Exercises/4.2/Chapter04-mac.xcodeproj/project.pbxproj b/Exercises/4.2/Chapter04-mac.xcodeproj/project.pbxproj new file mode 100644 index 0000000000000000000000000000000000000000..82443e7c200e49b9777121cc36e7f7fe417f79f8 --- /dev/null +++ b/Exercises/4.2/Chapter04-mac.xcodeproj/project.pbxproj @@ -0,0 +1,402 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 9203E9F01F0DD69900F9FFC2 /* Tower.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9203E9EE1F0DD69900F9FFC2 /* Tower.cpp */; }; + 9203E9F31F0DE24000F9FFC2 /* Enemy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9203E9F11F0DE24000F9FFC2 /* Enemy.cpp */; }; + 9203E9F61F0DF13600F9FFC2 /* NavComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9203E9F41F0DF13600F9FFC2 /* NavComponent.cpp */; }; + 9203E9F91F0F12FE00F9FFC2 /* Bullet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9203E9F71F0F12FE00F9FFC2 /* Bullet.cpp */; }; + 9223C4781F009428009A94D7 /* Game.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4671F009428009A94D7 /* Game.cpp */; }; + 9223C4791F009428009A94D7 /* Actor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4681F009428009A94D7 /* Actor.cpp */; }; + 9223C47C1F009428009A94D7 /* Component.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C46E1F009428009A94D7 /* Component.cpp */; }; + 9223C47D1F009428009A94D7 /* Main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4711F009428009A94D7 /* Main.cpp */; }; + 9223C47E1F009428009A94D7 /* Math.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4721F009428009A94D7 /* Math.cpp */; }; + 9223C4801F009428009A94D7 /* SpriteComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4761F009428009A94D7 /* SpriteComponent.cpp */; }; + 9223C48B1F0CA3CE009A94D7 /* MoveComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C48A1F0CA3CE009A94D7 /* MoveComponent.cpp */; }; + 9223C48F1F0CA67A009A94D7 /* Tile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C48D1F0CA67A009A94D7 /* Tile.cpp */; }; + 9223C4951F0CA766009A94D7 /* CircleComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4911F0CA766009A94D7 /* CircleComponent.cpp */; }; + 9223C4981F0DBD69009A94D7 /* Grid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4961F0DBD69009A94D7 /* Grid.cpp */; }; + 92D324FB1B697389005A86C7 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 92D324FA1B697389005A86C7 /* CoreFoundation.framework */; }; + 92E3918B1FE87D6000D8C362 /* AIState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 92E391861FE87D6000D8C362 /* AIState.cpp */; }; + 92E3918C1FE87D6000D8C362 /* AIComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 92E391881FE87D6000D8C362 /* AIComponent.cpp */; }; + 92E3918D1FE87D6000D8C362 /* Search.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 92E3918A1FE87D6000D8C362 /* Search.cpp */; }; + 92E46E941B6353E50035CD21 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 92E46E931B6353E50035CD21 /* OpenGL.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 9203E9EE1F0DD69900F9FFC2 /* Tower.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Tower.cpp; sourceTree = "<group>"; }; + 9203E9EF1F0DD69900F9FFC2 /* Tower.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Tower.h; sourceTree = "<group>"; }; + 9203E9F11F0DE24000F9FFC2 /* Enemy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Enemy.cpp; sourceTree = "<group>"; }; + 9203E9F21F0DE24000F9FFC2 /* Enemy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Enemy.h; sourceTree = "<group>"; }; + 9203E9F41F0DF13600F9FFC2 /* NavComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NavComponent.cpp; sourceTree = "<group>"; }; + 9203E9F51F0DF13600F9FFC2 /* NavComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NavComponent.h; sourceTree = "<group>"; }; + 9203E9F71F0F12FE00F9FFC2 /* Bullet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Bullet.cpp; sourceTree = "<group>"; }; + 9203E9F81F0F12FE00F9FFC2 /* Bullet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Bullet.h; sourceTree = "<group>"; }; + 9223C4671F009428009A94D7 /* Game.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Game.cpp; sourceTree = "<group>"; }; + 9223C4681F009428009A94D7 /* Actor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Actor.cpp; sourceTree = "<group>"; }; + 9223C4691F009428009A94D7 /* Actor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Actor.h; sourceTree = "<group>"; }; + 9223C46E1F009428009A94D7 /* Component.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Component.cpp; sourceTree = "<group>"; }; + 9223C46F1F009428009A94D7 /* Component.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Component.h; sourceTree = "<group>"; }; + 9223C4701F009428009A94D7 /* Game.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Game.h; sourceTree = "<group>"; }; + 9223C4711F009428009A94D7 /* Main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Main.cpp; sourceTree = "<group>"; }; + 9223C4721F009428009A94D7 /* Math.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Math.cpp; sourceTree = "<group>"; }; + 9223C4731F009428009A94D7 /* Math.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Math.h; sourceTree = "<group>"; }; + 9223C4761F009428009A94D7 /* SpriteComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpriteComponent.cpp; sourceTree = "<group>"; }; + 9223C4771F009428009A94D7 /* SpriteComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpriteComponent.h; sourceTree = "<group>"; }; + 9223C48A1F0CA3CE009A94D7 /* MoveComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MoveComponent.cpp; sourceTree = "<group>"; }; + 9223C48C1F0CA3D4009A94D7 /* MoveComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MoveComponent.h; sourceTree = "<group>"; }; + 9223C48D1F0CA67A009A94D7 /* Tile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Tile.cpp; sourceTree = "<group>"; }; + 9223C48E1F0CA67A009A94D7 /* Tile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Tile.h; sourceTree = "<group>"; }; + 9223C4911F0CA766009A94D7 /* CircleComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CircleComponent.cpp; sourceTree = "<group>"; }; + 9223C4931F0CA766009A94D7 /* CircleComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CircleComponent.h; sourceTree = "<group>"; }; + 9223C4961F0DBD69009A94D7 /* Grid.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Grid.cpp; sourceTree = "<group>"; }; + 9223C4971F0DBD69009A94D7 /* Grid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Grid.h; sourceTree = "<group>"; }; + 92D324FA1B697389005A86C7 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; + 92E391861FE87D6000D8C362 /* AIState.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AIState.cpp; sourceTree = "<group>"; }; + 92E391871FE87D6000D8C362 /* AIComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIComponent.h; sourceTree = "<group>"; }; + 92E391881FE87D6000D8C362 /* AIComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AIComponent.cpp; sourceTree = "<group>"; }; + 92E391891FE87D6000D8C362 /* AIState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIState.h; sourceTree = "<group>"; }; + 92E3918A1FE87D6000D8C362 /* Search.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Search.cpp; sourceTree = "<group>"; }; + 92E46DF71B634EA30035CD21 /* Game-mac */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "Game-mac"; sourceTree = BUILT_PRODUCTS_DIR; }; + 92E46E931B6353E50035CD21 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 92E46DF41B634EA30035CD21 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 92D324FB1B697389005A86C7 /* CoreFoundation.framework in Frameworks */, + 92E46E941B6353E50035CD21 /* OpenGL.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 92E46DEE1B634EA30035CD21 = { + isa = PBXGroup; + children = ( + 9223C4681F009428009A94D7 /* Actor.cpp */, + 9223C4691F009428009A94D7 /* Actor.h */, + 92E391881FE87D6000D8C362 /* AIComponent.cpp */, + 92E391871FE87D6000D8C362 /* AIComponent.h */, + 92E391861FE87D6000D8C362 /* AIState.cpp */, + 92E391891FE87D6000D8C362 /* AIState.h */, + 9203E9F71F0F12FE00F9FFC2 /* Bullet.cpp */, + 9203E9F81F0F12FE00F9FFC2 /* Bullet.h */, + 9223C46E1F009428009A94D7 /* Component.cpp */, + 9223C46F1F009428009A94D7 /* Component.h */, + 9223C4911F0CA766009A94D7 /* CircleComponent.cpp */, + 9223C4931F0CA766009A94D7 /* CircleComponent.h */, + 9203E9F11F0DE24000F9FFC2 /* Enemy.cpp */, + 9203E9F21F0DE24000F9FFC2 /* Enemy.h */, + 9223C4671F009428009A94D7 /* Game.cpp */, + 9223C4701F009428009A94D7 /* Game.h */, + 9223C4961F0DBD69009A94D7 /* Grid.cpp */, + 9223C4971F0DBD69009A94D7 /* Grid.h */, + 9223C4711F009428009A94D7 /* Main.cpp */, + 9223C4721F009428009A94D7 /* Math.cpp */, + 9223C4731F009428009A94D7 /* Math.h */, + 9223C48A1F0CA3CE009A94D7 /* MoveComponent.cpp */, + 9223C48C1F0CA3D4009A94D7 /* MoveComponent.h */, + 9203E9F41F0DF13600F9FFC2 /* NavComponent.cpp */, + 9203E9F51F0DF13600F9FFC2 /* NavComponent.h */, + 92E3918A1FE87D6000D8C362 /* Search.cpp */, + 9223C4761F009428009A94D7 /* SpriteComponent.cpp */, + 9223C4771F009428009A94D7 /* SpriteComponent.h */, + 9223C48D1F0CA67A009A94D7 /* Tile.cpp */, + 9223C48E1F0CA67A009A94D7 /* Tile.h */, + 9203E9EE1F0DD69900F9FFC2 /* Tower.cpp */, + 9203E9EF1F0DD69900F9FFC2 /* Tower.h */, + 92E46DF81B634EA30035CD21 /* Products */, + 92D324FA1B697389005A86C7 /* CoreFoundation.framework */, + 92E46E931B6353E50035CD21 /* OpenGL.framework */, + ); + sourceTree = "<group>"; + }; + 92E46DF81B634EA30035CD21 /* Products */ = { + isa = PBXGroup; + children = ( + 92E46DF71B634EA30035CD21 /* Game-mac */, + ); + name = Products; + sourceTree = "<group>"; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 92E46DF61B634EA30035CD21 /* Game-mac */ = { + isa = PBXNativeTarget; + buildConfigurationList = 92E46DFE1B634EA40035CD21 /* Build configuration list for PBXNativeTarget "Game-mac" */; + buildPhases = ( + 92E46DF31B634EA30035CD21 /* Sources */, + 92E46DF41B634EA30035CD21 /* Frameworks */, + 92E46EA11B63615B0035CD21 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Game-mac"; + productName = "Game-mac"; + productReference = 92E46DF71B634EA30035CD21 /* Game-mac */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 92E46DEF1B634EA30035CD21 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0920; + ORGANIZATIONNAME = "Sanjay Madhav"; + TargetAttributes = { + 92E46DF61B634EA30035CD21 = { + CreatedOnToolsVersion = 6.4; + }; + }; + }; + buildConfigurationList = 92E46DF21B634EA30035CD21 /* Build configuration list for PBXProject "Chapter04-mac" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 92E46DEE1B634EA30035CD21; + productRefGroup = 92E46DF81B634EA30035CD21 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 92E46DF61B634EA30035CD21 /* Game-mac */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXShellScriptBuildPhase section */ + 92E46EA11B63615B0035CD21 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if [ -d \"$BUILD_DIR/Debug\" ]; then\n cp \"$SRCROOT\"/../external/GLEW/lib/mac/*.dylib $BUILD_DIR/Debug\n cp \"$SRCROOT\"/../external/SDL/lib/mac/*.dylib $BUILD_DIR/Debug\nfi\n\nif [ -d \"$BUILD_DIR/Release\" ]; then\n cp \"$SRCROOT\"/../external/GLEW/lib/mac/*.dylib $BUILD_DIR/Release\n cp \"$SRCROOT\"/../external/SDL/lib/mac/*.dylib $BUILD_DIR/Release\nfi"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 92E46DF31B634EA30035CD21 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9223C47D1F009428009A94D7 /* Main.cpp in Sources */, + 9223C47E1F009428009A94D7 /* Math.cpp in Sources */, + 9203E9F01F0DD69900F9FFC2 /* Tower.cpp in Sources */, + 9223C4781F009428009A94D7 /* Game.cpp in Sources */, + 92E3918B1FE87D6000D8C362 /* AIState.cpp in Sources */, + 9203E9F61F0DF13600F9FFC2 /* NavComponent.cpp in Sources */, + 9223C4801F009428009A94D7 /* SpriteComponent.cpp in Sources */, + 9223C48B1F0CA3CE009A94D7 /* MoveComponent.cpp in Sources */, + 9203E9F31F0DE24000F9FFC2 /* Enemy.cpp in Sources */, + 9223C4791F009428009A94D7 /* Actor.cpp in Sources */, + 9203E9F91F0F12FE00F9FFC2 /* Bullet.cpp in Sources */, + 9223C4951F0CA766009A94D7 /* CircleComponent.cpp in Sources */, + 9223C47C1F009428009A94D7 /* Component.cpp in Sources */, + 92E3918C1FE87D6000D8C362 /* AIComponent.cpp in Sources */, + 92E3918D1FE87D6000D8C362 /* Search.cpp in Sources */, + 9223C48F1F0CA67A009A94D7 /* Tile.cpp in Sources */, + 9223C4981F0DBD69009A94D7 /* Grid.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 92E46DFC1B634EA40035CD21 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "c++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + 92E46DFD1B634EA40035CD21 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "c++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + }; + name = Release; + }; + 92E46DFF1B634EA40035CD21 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + FRAMEWORK_SEARCH_PATHS = ""; + GCC_ENABLE_CPP_RTTI = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, + "$(SRCROOT)/../external/SDL/include", + "$(SRCROOT)/../external/GLEW/include", + "$(SRCROOT)/../external/SOIL/include", + ); + LIBRARY_SEARCH_PATHS = ( + "$(SRCROOT)/../external/GLEW/lib/mac", + "$(SRCROOT)/../external/SDL/lib/mac", + "$(SRCROOT)/../external/SOIL/lib/mac", + ); + OTHER_LDFLAGS = ( + "-lGLEW.2.1.0", + "-lSDL2-2.0.0", + "-lSDL2_mixer-2.0.0", + "-lSDL2_ttf-2.0.0", + "-lSOIL", + "-lSDL2_image-2.0.0", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 92E46E001B634EA40035CD21 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + FRAMEWORK_SEARCH_PATHS = ""; + GCC_ENABLE_CPP_RTTI = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, + "$(SRCROOT)/../external/SDL/include", + "$(SRCROOT)/../external/GLEW/include", + "$(SRCROOT)/../external/SOIL/include", + ); + LIBRARY_SEARCH_PATHS = ( + "$(SRCROOT)/../external/GLEW/lib/mac", + "$(SRCROOT)/../external/SDL/lib/mac", + "$(SRCROOT)/../external/SOIL/lib/mac", + ); + OTHER_LDFLAGS = ( + "-lGLEW.2.1.0", + "-lSDL2-2.0.0", + "-lSDL2_mixer-2.0.0", + "-lSDL2_ttf-2.0.0", + "-lSOIL", + "-lSDL2_image-2.0.0", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 92E46DF21B634EA30035CD21 /* Build configuration list for PBXProject "Chapter04-mac" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 92E46DFC1B634EA40035CD21 /* Debug */, + 92E46DFD1B634EA40035CD21 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 92E46DFE1B634EA40035CD21 /* Build configuration list for PBXNativeTarget "Game-mac" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 92E46DFF1B634EA40035CD21 /* Debug */, + 92E46E001B634EA40035CD21 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 92E46DEF1B634EA30035CD21 /* Project object */; +} diff --git a/Exercises/4.2/Chapter04-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Exercises/4.2/Chapter04-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000000000000000000000000000000000000..b36b9db7f3bd3c6778a6c9afeb413daf09fb4d87 --- /dev/null +++ b/Exercises/4.2/Chapter04-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Workspace + version = "1.0"> + <FileRef + location = "self:/Users/Sanjay/gameprogcpp-final/Chapter04/Chapter04-mac.xcodeproj"> + </FileRef> +</Workspace> diff --git a/Exercises/4.2/Chapter04-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme b/Exercises/4.2/Chapter04-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme new file mode 100644 index 0000000000000000000000000000000000000000..2667789eaa871398f8491a33488ba5ee4bdc4958 --- /dev/null +++ b/Exercises/4.2/Chapter04-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme @@ -0,0 +1,94 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Scheme + LastUpgradeVersion = "0920" + version = "1.3"> + <BuildAction + parallelizeBuildables = "YES" + buildImplicitDependencies = "YES"> + <BuildActionEntries> + <BuildActionEntry + buildForTesting = "YES" + buildForRunning = "YES" + buildForProfiling = "YES" + buildForArchiving = "YES" + buildForAnalyzing = "YES"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "92E46DF61B634EA30035CD21" + BuildableName = "Game-mac" + BlueprintName = "Game-mac" + ReferencedContainer = "container:Chapter04-mac.xcodeproj"> + </BuildableReference> + </BuildActionEntry> + </BuildActionEntries> + </BuildAction> + <TestAction + buildConfiguration = "Debug" + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + language = "" + shouldUseLaunchSchemeArgsEnv = "YES"> + <Testables> + </Testables> + <MacroExpansion> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "92E46DF61B634EA30035CD21" + BuildableName = "Game-mac" + BlueprintName = "Game-mac" + ReferencedContainer = "container:Chapter04-mac.xcodeproj"> + </BuildableReference> + </MacroExpansion> + <AdditionalOptions> + </AdditionalOptions> + </TestAction> + <LaunchAction + buildConfiguration = "Debug" + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + language = "" + launchStyle = "0" + useCustomWorkingDirectory = "YES" + customWorkingDirectory = "$(SRCROOT)" + ignoresPersistentStateOnLaunch = "NO" + debugDocumentVersioning = "YES" + debugServiceExtension = "internal" + allowLocationSimulation = "YES"> + <BuildableProductRunnable + runnableDebuggingMode = "0"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "92E46DF61B634EA30035CD21" + BuildableName = "Game-mac" + BlueprintName = "Game-mac" + ReferencedContainer = "container:Chapter04-mac.xcodeproj"> + </BuildableReference> + </BuildableProductRunnable> + <AdditionalOptions> + </AdditionalOptions> + </LaunchAction> + <ProfileAction + buildConfiguration = "Release" + shouldUseLaunchSchemeArgsEnv = "YES" + savedToolIdentifier = "" + useCustomWorkingDirectory = "NO" + debugDocumentVersioning = "YES"> + <BuildableProductRunnable + runnableDebuggingMode = "0"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "92E46DF61B634EA30035CD21" + BuildableName = "Game-mac" + BlueprintName = "Game-mac" + ReferencedContainer = "container:Chapter04-mac.xcodeproj"> + </BuildableReference> + </BuildableProductRunnable> + </ProfileAction> + <AnalyzeAction + buildConfiguration = "Debug"> + </AnalyzeAction> + <ArchiveAction + buildConfiguration = "Release" + revealArchiveInOrganizer = "YES"> + </ArchiveAction> +</Scheme> diff --git a/Exercises/4.2/Chapter04-windows.sln b/Exercises/4.2/Chapter04-windows.sln new file mode 100644 index 0000000000000000000000000000000000000000..f560df0f8119533f8a11c4bc20ee2fbb51e4c93b --- /dev/null +++ b/Exercises/4.2/Chapter04-windows.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.26430.12 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Game", "Game.vcxproj", "{BC508D87-495F-4554-932D-DD68388B63CC}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {BC508D87-495F-4554-932D-DD68388B63CC}.Debug|Win32.ActiveCfg = Debug|Win32 + {BC508D87-495F-4554-932D-DD68388B63CC}.Debug|Win32.Build.0 = Debug|Win32 + {BC508D87-495F-4554-932D-DD68388B63CC}.Release|Win32.ActiveCfg = Release|Win32 + {BC508D87-495F-4554-932D-DD68388B63CC}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Exercises/4.2/CircleComponent.cpp b/Exercises/4.2/CircleComponent.cpp new file mode 100644 index 0000000000000000000000000000000000000000..d41aab2cbc11d0e4d0e5d1c2cddc0821cd4fe769 --- /dev/null +++ b/Exercises/4.2/CircleComponent.cpp @@ -0,0 +1,40 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "CircleComponent.h" +#include "Actor.h" + +CircleComponent::CircleComponent(class Actor* owner) +:Component(owner) +,mRadius(0.0f) +{ + +} + +const Vector2& CircleComponent::GetCenter() const +{ + return mOwner->GetPosition(); +} + +float CircleComponent::GetRadius() const +{ + return mOwner->GetScale() * mRadius; +} + +bool Intersect(const CircleComponent& a, const CircleComponent& b) +{ + // Calculate distance squared + Vector2 diff = a.GetCenter() - b.GetCenter(); + float distSq = diff.LengthSq(); + + // Calculate sum of radii squared + float radiiSq = a.GetRadius() + b.GetRadius(); + radiiSq *= radiiSq; + + return distSq <= radiiSq; +} diff --git a/Exercises/4.2/CircleComponent.h b/Exercises/4.2/CircleComponent.h new file mode 100644 index 0000000000000000000000000000000000000000..4eecb2a4b76f1a800cc224d0f44a06baa0a9dc5b --- /dev/null +++ b/Exercises/4.2/CircleComponent.h @@ -0,0 +1,26 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "Component.h" +#include "Math.h" + +class CircleComponent : public Component +{ +public: + CircleComponent(class Actor* owner); + + void SetRadius(float radius) { mRadius = radius; } + float GetRadius() const; + + const Vector2& GetCenter() const; +private: + float mRadius; +}; + +bool Intersect(const CircleComponent& a, const CircleComponent& b); diff --git a/Exercises/4.2/Component.cpp b/Exercises/4.2/Component.cpp new file mode 100644 index 0000000000000000000000000000000000000000..c4ed432d4c1521522e1617b341e3fc35da3fee7d --- /dev/null +++ b/Exercises/4.2/Component.cpp @@ -0,0 +1,27 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "Component.h" +#include "Actor.h" + +Component::Component(Actor* owner, int updateOrder) + :mOwner(owner) + ,mUpdateOrder(updateOrder) +{ + // Add to actor's vector of components + mOwner->AddComponent(this); +} + +Component::~Component() +{ + mOwner->RemoveComponent(this); +} + +void Component::Update(float deltaTime) +{ +} diff --git a/Exercises/4.2/Component.h b/Exercises/4.2/Component.h new file mode 100644 index 0000000000000000000000000000000000000000..fb41dd759a4f708c5aca0ab5a2b9fdf5609431f8 --- /dev/null +++ b/Exercises/4.2/Component.h @@ -0,0 +1,31 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once +#include <cstdint> + +class Component +{ +public: + // Constructor + // (the lower the update order, the earlier the component updates) + Component(class Actor* owner, int updateOrder = 100); + // Destructor + virtual ~Component(); + // Update this component by delta time + virtual void Update(float deltaTime); + // Process input for this component + virtual void ProcessInput(const uint8_t* keyState) {} + + int GetUpdateOrder() const { return mUpdateOrder; } +protected: + // Owning actor + class Actor* mOwner; + // Update order of component + int mUpdateOrder; +}; diff --git a/Exercises/4.2/Game.cpp b/Exercises/4.2/Game.cpp new file mode 100644 index 0000000000000000000000000000000000000000..58779a9d662e88ce54d606e7a1ab5f979de8465a --- /dev/null +++ b/Exercises/4.2/Game.cpp @@ -0,0 +1,344 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "Game.h" +#include "SDL/SDL_image.h" +#include <algorithm> +#include "Actor.h" +#include "SpriteComponent.h" +#include "Random.h" + +Game::Game() +:mWindow(nullptr) +,mRenderer(nullptr) +,mIsRunning(true) +,mUpdatingActors(false) +{ + +} + +bool Game::Initialize() +{ + if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO) != 0) + { + SDL_Log("Unable to initialize SDL: %s", SDL_GetError()); + return false; + } + + mWindow = SDL_CreateWindow("Game Programming in C++ (Chapter 4)", 100, 100, 1024, 768, 0); + if (!mWindow) + { + SDL_Log("Failed to create window: %s", SDL_GetError()); + return false; + } + + mRenderer = SDL_CreateRenderer(mWindow, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); + if (!mRenderer) + { + SDL_Log("Failed to create renderer: %s", SDL_GetError()); + return false; + } + + if (IMG_Init(IMG_INIT_PNG) == 0) + { + SDL_Log("Unable to initialize SDL_image: %s", SDL_GetError()); + return false; + } + + Random::Init(); + + LoadData(); + + mTicksCount = SDL_GetTicks(); + + return true; +} + +void Game::RunLoop() +{ + while (mIsRunning) + { + ProcessInput(); + UpdateGame(); + GenerateOutput(); + } +} + +void Game::ProcessInput() +{ + SDL_Event event; + while (SDL_PollEvent(&event)) + { + switch (event.type) + { + case SDL_QUIT: + mIsRunning = false; + break; + // Process mouse button event + case SDL_MOUSEBUTTONDOWN: + if (event.button.button == SDL_BUTTON_LEFT && + !mBoardState.IsTerminal()) + { + // Convert x into column + int col = event.button.x - 64; + if (col >= 0) + { + col /= 128; + if (col <= 6) + { + bool playerMoved = TryPlayerMove(&mBoardState, col); + if (playerMoved && !mBoardState.IsTerminal()) + { + CPUMove(&mBoardState); + } + } + } + } + break; + } + } + + const Uint8* keyState = SDL_GetKeyboardState(NULL); + if (keyState[SDL_SCANCODE_ESCAPE]) + { + mIsRunning = false; + } + + mUpdatingActors = true; + for (auto actor : mActors) + { + actor->ProcessInput(keyState); + } + mUpdatingActors = false; +} + +void Game::UpdateGame() +{ + // Compute delta time + // Wait until 16ms has elapsed since last frame + while (!SDL_TICKS_PASSED(SDL_GetTicks(), mTicksCount + 16)) + ; + + float deltaTime = (SDL_GetTicks() - mTicksCount) / 1000.0f; + if (deltaTime > 0.05f) + { + deltaTime = 0.05f; + } + mTicksCount = SDL_GetTicks(); + + // Update all actors + mUpdatingActors = true; + for (auto actor : mActors) + { + actor->Update(deltaTime); + } + mUpdatingActors = false; + + // Move any pending actors to mActors + for (auto pending : mPendingActors) + { + mActors.emplace_back(pending); + } + mPendingActors.clear(); + + // Add any dead actors to a temp vector + std::vector<Actor*> deadActors; + for (auto actor : mActors) + { + if (actor->GetState() == Actor::EDead) + { + deadActors.emplace_back(actor); + } + } + + // Delete dead actors (which removes them from mActors) + for (auto actor : deadActors) + { + delete actor; + } +} + +void Game::GenerateOutput() +{ + SDL_SetRenderDrawColor(mRenderer, 255, 255, 255, 255); + SDL_RenderClear(mRenderer); + + // Draw all sprite components + for (auto sprite : mSprites) + { + sprite->Draw(mRenderer); + } + + // For Exercise 4.2 + // Draw background + DrawTexture(GetTexture("Assets/Board.png"), Vector2(512.0f, 384.0f), + Vector2(896.0f, 768.0f)); + + // Draw pieces + for (int i = 0; i < 6; i++) + { + for (int j = 0; j < 7; j++) + { + Vector2 pos(j * 128.0f + 128.0f, i * 128.0f + 64.0f); + if (mBoardState.mBoard[i][j] == BoardState::Yellow) + { + DrawTexture(GetTexture("Assets/YellowPiece.png"), pos, + Vector2(128.0f, 128.0f)); + } + else if (mBoardState.mBoard[i][j] == BoardState::Red) + { + DrawTexture(GetTexture("Assets/RedPiece.png"), pos, + Vector2(128.0f, 128.0f)); + } + } + } + + SDL_RenderPresent(mRenderer); +} + +void Game::LoadData() +{ + +} + +void Game::UnloadData() +{ + // Delete actors + // Because ~Actor calls RemoveActor, have to use a different style loop + while (!mActors.empty()) + { + delete mActors.back(); + } + + // Destroy textures + for (auto i : mTextures) + { + SDL_DestroyTexture(i.second); + } + mTextures.clear(); +} + +SDL_Texture* Game::GetTexture(const std::string& fileName) +{ + SDL_Texture* tex = nullptr; + // Is the texture already in the map? + auto iter = mTextures.find(fileName); + if (iter != mTextures.end()) + { + tex = iter->second; + } + else + { + // Load from file + SDL_Surface* surf = IMG_Load(fileName.c_str()); + if (!surf) + { + SDL_Log("Failed to load texture file %s", fileName.c_str()); + return nullptr; + } + + // Create texture from surface + tex = SDL_CreateTextureFromSurface(mRenderer, surf); + SDL_FreeSurface(surf); + if (!tex) + { + SDL_Log("Failed to convert surface to texture for %s", fileName.c_str()); + return nullptr; + } + + mTextures.emplace(fileName.c_str(), tex); + } + return tex; +} + +void Game::DrawTexture(SDL_Texture* texture, const Vector2& pos, const Vector2& size) +{ + SDL_Rect r; + // Scale the width/height by owner's scale + r.w = static_cast<int>(size.x); + r.h = static_cast<int>(size.y); + // Center the rectangle around the position of the owner + r.x = static_cast<int>(pos.x) - r.w / 2; + r.y = static_cast<int>(pos.y) - r.h / 2; + + // Draw (have to convert angle from radians to degrees, and clockwise to counter) + SDL_RenderCopy(mRenderer, + texture, + nullptr, + &r); +} + +void Game::Shutdown() +{ + UnloadData(); + IMG_Quit(); + SDL_DestroyRenderer(mRenderer); + SDL_DestroyWindow(mWindow); + SDL_Quit(); +} + +void Game::AddActor(Actor* actor) +{ + // If we're updating actors, need to add to pending + if (mUpdatingActors) + { + mPendingActors.emplace_back(actor); + } + else + { + mActors.emplace_back(actor); + } +} + +void Game::RemoveActor(Actor* actor) +{ + // Is it in pending actors? + auto iter = std::find(mPendingActors.begin(), mPendingActors.end(), actor); + if (iter != mPendingActors.end()) + { + // Swap to end of vector and pop off (avoid erase copies) + std::iter_swap(iter, mPendingActors.end() - 1); + mPendingActors.pop_back(); + } + + // Is it in actors? + iter = std::find(mActors.begin(), mActors.end(), actor); + if (iter != mActors.end()) + { + // Swap to end of vector and pop off (avoid erase copies) + std::iter_swap(iter, mActors.end() - 1); + mActors.pop_back(); + } +} + +void Game::AddSprite(SpriteComponent* sprite) +{ + // Find the insertion point in the sorted vector + // (The first element with a higher draw order than me) + int myDrawOrder = sprite->GetDrawOrder(); + auto iter = mSprites.begin(); + for ( ; + iter != mSprites.end(); + ++iter) + { + if (myDrawOrder < (*iter)->GetDrawOrder()) + { + break; + } + } + + // Inserts element before position of iterator + mSprites.insert(iter, sprite); +} + +void Game::RemoveSprite(SpriteComponent* sprite) +{ + // (We can't swap because it ruins ordering) + auto iter = std::find(mSprites.begin(), mSprites.end(), sprite); + mSprites.erase(iter); +} diff --git a/Exercises/4.2/Game.h b/Exercises/4.2/Game.h new file mode 100644 index 0000000000000000000000000000000000000000..c9f56225d9f3b51e80f9e5b33df549896b440372 --- /dev/null +++ b/Exercises/4.2/Game.h @@ -0,0 +1,61 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "SDL/SDL.h" +#include <unordered_map> +#include <string> +#include <vector> +#include "Math.h" +#include "Board.h" + +class Game +{ +public: + Game(); + bool Initialize(); + void RunLoop(); + void Shutdown(); + + void AddActor(class Actor* actor); + void RemoveActor(class Actor* actor); + + void AddSprite(class SpriteComponent* sprite); + void RemoveSprite(class SpriteComponent* sprite); + + SDL_Texture* GetTexture(const std::string& fileName); + // Helper to draw a texture without sprite components + void DrawTexture(SDL_Texture* texture, const Vector2& pos, const Vector2& size); +private: + void ProcessInput(); + void UpdateGame(); + void GenerateOutput(); + void LoadData(); + void UnloadData(); + + // Map of textures loaded + std::unordered_map<std::string, SDL_Texture*> mTextures; + + // All the actors in the game + std::vector<class Actor*> mActors; + // Any pending actors + std::vector<class Actor*> mPendingActors; + + // All the sprite components drawn + std::vector<class SpriteComponent*> mSprites; + + SDL_Window* mWindow; + SDL_Renderer* mRenderer; + Uint32 mTicksCount; + bool mIsRunning; + // Track if we're updating actors right now + bool mUpdatingActors; + + // Game-specific + BoardState mBoardState; +}; diff --git a/Exercises/4.2/Game.vcxproj b/Exercises/4.2/Game.vcxproj new file mode 100644 index 0000000000000000000000000000000000000000..3c041589ec81747b7ba1b848713f06fcc695c0fb --- /dev/null +++ b/Exercises/4.2/Game.vcxproj @@ -0,0 +1,126 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="15.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> + </ItemGroup> + <ItemGroup> + <ClCompile Include="Actor.cpp" /> + <ClCompile Include="Board.cpp" /> + <ClCompile Include="CircleComponent.cpp" /> + <ClCompile Include="Component.cpp" /> + <ClCompile Include="Game.cpp" /> + <ClCompile Include="Main.cpp" /> + <ClCompile Include="Math.cpp" /> + <ClCompile Include="MoveComponent.cpp" /> + <ClCompile Include="Random.cpp" /> + <ClCompile Include="SpriteComponent.cpp" /> + </ItemGroup> + <ItemGroup> + <ClInclude Include="Actor.h" /> + <ClInclude Include="Board.h" /> + <ClInclude Include="CircleComponent.h" /> + <ClInclude Include="Component.h" /> + <ClInclude Include="Game.h" /> + <ClInclude Include="Math.h" /> + <ClInclude Include="MoveComponent.h" /> + <ClInclude Include="Random.h" /> + <ClInclude Include="SpriteComponent.h" /> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{BC508D87-495F-4554-932D-DD68388B63CC}</ProjectGuid> + <Keyword>Win32Proj</Keyword> + <RootNamespace>Game</RootNamespace> + <WindowsTargetPlatformVersion>10.0.16299.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>v141</PlatformToolset> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v141</PlatformToolset> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>Unicode</CharacterSet> + </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 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> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <LinkIncremental>true</LinkIncremental> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <LinkIncremental>false</LinkIncremental> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <SDLCheck>true</SDLCheck> + <AdditionalIncludeDirectories>..\..\external\SDL\include;..\..\external\GLEW\include;..\..\external\SOIL\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <RuntimeTypeInfo>false</RuntimeTypeInfo> + <ExceptionHandling>Sync</ExceptionHandling> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <AdditionalLibraryDirectories>..\..\external\SDL\lib\win\x86;..\..\external\GLEW\lib\win\x86;..\..\external\SOIL\lib\win\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <AdditionalDependencies>opengl32.lib;SDL2.lib;SDL2main.lib;SDL2_ttf.lib;SDL2_mixer.lib;SDL2_image.lib;glew32.lib;SOIL.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalOptions>/NODEFAULTLIB:msvcrt.lib %(AdditionalOptions)</AdditionalOptions> + </Link> + <PostBuildEvent> + <Command>xcopy "$(ProjectDir)\..\..\external\SDL\lib\win\x86\*.dll" "$(OutDir)" /i /s /y +xcopy "$(ProjectDir)\..\..\external\GLEW\lib\win\x86\*.dll" "$(OutDir)" /i /s /y</Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <PrecompiledHeader> + </PrecompiledHeader> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <SDLCheck>true</SDLCheck> + <AdditionalIncludeDirectories>..\..\external\SDL\include;..\..\external\GLEW\include;..\..\external\SOIL\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <RuntimeTypeInfo>false</RuntimeTypeInfo> + <ExceptionHandling>Sync</ExceptionHandling> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + <AdditionalLibraryDirectories>..\..\external\SDL\lib\win\x86;..\..\external\GLEW\lib\win\x86;..\..\external\SOIL\lib\win\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <AdditionalDependencies>opengl32.lib;SDL2.lib;SDL2main.lib;SDL2_ttf.lib;SDL2_mixer.lib;SDL2_image.lib;glew32.lib;SOIL.lib;%(AdditionalDependencies)</AdditionalDependencies> + </Link> + <PostBuildEvent> + <Command>xcopy "$(ProjectDir)\..\..\external\SDL\lib\win\x86\*.dll" "$(OutDir)" /i /s /y +xcopy "$(ProjectDir)\..\..\external\GLEW\lib\win\x86\*.dll" "$(OutDir)" /i /s /y</Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> +</Project> \ No newline at end of file diff --git a/Exercises/4.2/Game.vcxproj.filters b/Exercises/4.2/Game.vcxproj.filters new file mode 100644 index 0000000000000000000000000000000000000000..4321a926f81c014243b6ae1c2738cc4c10992e94 --- /dev/null +++ b/Exercises/4.2/Game.vcxproj.filters @@ -0,0 +1,70 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup> + <Filter Include="Source Files"> + <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> + <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> + </Filter> + </ItemGroup> + <ItemGroup> + <ClCompile Include="Actor.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="Component.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="Game.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="Main.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="Math.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="SpriteComponent.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="CircleComponent.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="MoveComponent.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="Board.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="Random.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + </ItemGroup> + <ItemGroup> + <ClInclude Include="Actor.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="Component.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="Game.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="Math.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="SpriteComponent.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="CircleComponent.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="MoveComponent.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="Board.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="Random.h"> + <Filter>Source Files</Filter> + </ClInclude> + </ItemGroup> +</Project> \ No newline at end of file diff --git a/Exercises/4.2/Main.cpp b/Exercises/4.2/Main.cpp new file mode 100644 index 0000000000000000000000000000000000000000..22ea0c69c1414fc377c9477f0b3d1f167964a9ae --- /dev/null +++ b/Exercises/4.2/Main.cpp @@ -0,0 +1,21 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "Game.h" + +int main(int argc, char** argv) +{ + Game game; + bool success = game.Initialize(); + if (success) + { + game.RunLoop(); + } + game.Shutdown(); + return 0; +} diff --git a/Exercises/4.2/Math.cpp b/Exercises/4.2/Math.cpp new file mode 100644 index 0000000000000000000000000000000000000000..a16e72617657bc8b19a139c000b1212f24a9f144 --- /dev/null +++ b/Exercises/4.2/Math.cpp @@ -0,0 +1,239 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "Math.h" + +const Vector2 Vector2::Zero(0.0f, 0.0f); +const Vector2 Vector2::UnitX(1.0f, 0.0f); +const Vector2 Vector2::UnitY(0.0f, 1.0f); +const Vector2 Vector2::NegUnitX(-1.0f, 0.0f); +const Vector2 Vector2::NegUnitY(0.0f, -1.0f); + +const Vector3 Vector3::Zero(0.0f, 0.0f, 0.f); +const Vector3 Vector3::UnitX(1.0f, 0.0f, 0.0f); +const Vector3 Vector3::UnitY(0.0f, 1.0f, 0.0f); +const Vector3 Vector3::UnitZ(0.0f, 0.0f, 1.0f); +const Vector3 Vector3::NegUnitX(-1.0f, 0.0f, 0.0f); +const Vector3 Vector3::NegUnitY(0.0f, -1.0f, 0.0f); +const Vector3 Vector3::NegUnitZ(0.0f, 0.0f, -1.0f); +const Vector3 Vector3::Infinity(Math::Infinity, Math::Infinity, Math::Infinity); +const Vector3 Vector3::NegInfinity(Math::NegInfinity, Math::NegInfinity, Math::NegInfinity); + +static float m3Ident[3][3] = +{ + { 1.0f, 0.0f, 0.0f }, + { 0.0f, 1.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f } +}; +const Matrix3 Matrix3::Identity(m3Ident); + +static float m4Ident[4][4] = +{ + { 1.0f, 0.0f, 0.0f, 0.0f }, + { 0.0f, 1.0f, 0.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f, 0.0f }, + { 0.0f, 0.0f, 0.0f, 1.0f } +}; + +const Matrix4 Matrix4::Identity(m4Ident); + +const Quaternion Quaternion::Identity(0.0f, 0.0f, 0.0f, 1.0f); + +Vector2 Vector2::Transform(const Vector2& vec, const Matrix3& mat, float w /*= 1.0f*/) +{ + Vector2 retVal; + retVal.x = vec.x * mat.mat[0][0] + vec.y * mat.mat[1][0] + w * mat.mat[2][0]; + retVal.y = vec.x * mat.mat[0][1] + vec.y * mat.mat[1][1] + w * mat.mat[2][1]; + //ignore w since we aren't returning a new value for it... + return retVal; +} + +Vector3 Vector3::Transform(const Vector3& vec, const Matrix4& mat, float w /*= 1.0f*/) +{ + Vector3 retVal; + retVal.x = vec.x * mat.mat[0][0] + vec.y * mat.mat[1][0] + + vec.z * mat.mat[2][0] + w * mat.mat[3][0]; + retVal.y = vec.x * mat.mat[0][1] + vec.y * mat.mat[1][1] + + vec.z * mat.mat[2][1] + w * mat.mat[3][1]; + retVal.z = vec.x * mat.mat[0][2] + vec.y * mat.mat[1][2] + + vec.z * mat.mat[2][2] + w * mat.mat[3][2]; + //ignore w since we aren't returning a new value for it... + return retVal; +} + +// This will transform the vector and renormalize the w component +Vector3 Vector3::TransformWithPerspDiv(const Vector3& vec, const Matrix4& mat, float w /*= 1.0f*/) +{ + Vector3 retVal; + retVal.x = vec.x * mat.mat[0][0] + vec.y * mat.mat[1][0] + + vec.z * mat.mat[2][0] + w * mat.mat[3][0]; + retVal.y = vec.x * mat.mat[0][1] + vec.y * mat.mat[1][1] + + vec.z * mat.mat[2][1] + w * mat.mat[3][1]; + retVal.z = vec.x * mat.mat[0][2] + vec.y * mat.mat[1][2] + + vec.z * mat.mat[2][2] + w * mat.mat[3][2]; + float transformedW = vec.x * mat.mat[0][3] + vec.y * mat.mat[1][3] + + vec.z * mat.mat[2][3] + w * mat.mat[3][3]; + if (!Math::NearZero(Math::Abs(transformedW))) + { + transformedW = 1.0f / transformedW; + retVal *= transformedW; + } + return retVal; +} + +// Transform a Vector3 by a quaternion +Vector3 Vector3::Transform(const Vector3& v, const Quaternion& q) +{ + // v + 2.0*cross(q.xyz, cross(q.xyz,v) + q.w*v); + Vector3 qv(q.x, q.y, q.z); + Vector3 retVal = v; + retVal += 2.0f * Vector3::Cross(qv, Vector3::Cross(qv, v) + q.w * v); + return retVal; +} + +void Matrix4::Invert() +{ + // Thanks slow math + // This is a really janky way to unroll everything... + float tmp[12]; + float src[16]; + float dst[16]; + float det; + + // Transpose matrix + // row 1 to col 1 + src[0] = mat[0][0]; + src[4] = mat[0][1]; + src[8] = mat[0][2]; + src[12] = mat[0][3]; + + // row 2 to col 2 + src[1] = mat[1][0]; + src[5] = mat[1][1]; + src[9] = mat[1][2]; + src[13] = mat[1][3]; + + // row 3 to col 3 + src[2] = mat[2][0]; + src[6] = mat[2][1]; + src[10] = mat[2][2]; + src[14] = mat[2][3]; + + // row 4 to col 4 + src[3] = mat[3][0]; + src[7] = mat[3][1]; + src[11] = mat[3][2]; + src[15] = mat[3][3]; + + // Calculate cofactors + tmp[0] = src[10] * src[15]; + tmp[1] = src[11] * src[14]; + tmp[2] = src[9] * src[15]; + tmp[3] = src[11] * src[13]; + tmp[4] = src[9] * src[14]; + tmp[5] = src[10] * src[13]; + tmp[6] = src[8] * src[15]; + tmp[7] = src[11] * src[12]; + tmp[8] = src[8] * src[14]; + tmp[9] = src[10] * src[12]; + tmp[10] = src[8] * src[13]; + tmp[11] = src[9] * src[12]; + + dst[0] = tmp[0] * src[5] + tmp[3] * src[6] + tmp[4] * src[7]; + dst[0] -= tmp[1] * src[5] + tmp[2] * src[6] + tmp[5] * src[7]; + dst[1] = tmp[1] * src[4] + tmp[6] * src[6] + tmp[9] * src[7]; + dst[1] -= tmp[0] * src[4] + tmp[7] * src[6] + tmp[8] * src[7]; + dst[2] = tmp[2] * src[4] + tmp[7] * src[5] + tmp[10] * src[7]; + dst[2] -= tmp[3] * src[4] + tmp[6] * src[5] + tmp[11] * src[7]; + dst[3] = tmp[5] * src[4] + tmp[8] * src[5] + tmp[11] * src[6]; + dst[3] -= tmp[4] * src[4] + tmp[9] * src[5] + tmp[10] * src[6]; + dst[4] = tmp[1] * src[1] + tmp[2] * src[2] + tmp[5] * src[3]; + dst[4] -= tmp[0] * src[1] + tmp[3] * src[2] + tmp[4] * src[3]; + dst[5] = tmp[0] * src[0] + tmp[7] * src[2] + tmp[8] * src[3]; + dst[5] -= tmp[1] * src[0] + tmp[6] * src[2] + tmp[9] * src[3]; + dst[6] = tmp[3] * src[0] + tmp[6] * src[1] + tmp[11] * src[3]; + dst[6] -= tmp[2] * src[0] + tmp[7] * src[1] + tmp[10] * src[3]; + dst[7] = tmp[4] * src[0] + tmp[9] * src[1] + tmp[10] * src[2]; + dst[7] -= tmp[5] * src[0] + tmp[8] * src[1] + tmp[11] * src[2]; + + tmp[0] = src[2] * src[7]; + tmp[1] = src[3] * src[6]; + tmp[2] = src[1] * src[7]; + tmp[3] = src[3] * src[5]; + tmp[4] = src[1] * src[6]; + tmp[5] = src[2] * src[5]; + tmp[6] = src[0] * src[7]; + tmp[7] = src[3] * src[4]; + tmp[8] = src[0] * src[6]; + tmp[9] = src[2] * src[4]; + tmp[10] = src[0] * src[5]; + tmp[11] = src[1] * src[4]; + + dst[8] = tmp[0] * src[13] + tmp[3] * src[14] + tmp[4] * src[15]; + dst[8] -= tmp[1] * src[13] + tmp[2] * src[14] + tmp[5] * src[15]; + dst[9] = tmp[1] * src[12] + tmp[6] * src[14] + tmp[9] * src[15]; + dst[9] -= tmp[0] * src[12] + tmp[7] * src[14] + tmp[8] * src[15]; + dst[10] = tmp[2] * src[12] + tmp[7] * src[13] + tmp[10] * src[15]; + dst[10] -= tmp[3] * src[12] + tmp[6] * src[13] + tmp[11] * src[15]; + dst[11] = tmp[5] * src[12] + tmp[8] * src[13] + tmp[11] * src[14]; + dst[11] -= tmp[4] * src[12] + tmp[9] * src[13] + tmp[10] * src[14]; + dst[12] = tmp[2] * src[10] + tmp[5] * src[11] + tmp[1] * src[9]; + dst[12] -= tmp[4] * src[11] + tmp[0] * src[9] + tmp[3] * src[10]; + dst[13] = tmp[8] * src[11] + tmp[0] * src[8] + tmp[7] * src[10]; + dst[13] -= tmp[6] * src[10] + tmp[9] * src[11] + tmp[1] * src[8]; + dst[14] = tmp[6] * src[9] + tmp[11] * src[11] + tmp[3] * src[8]; + dst[14] -= tmp[10] * src[11] + tmp[2] * src[8] + tmp[7] * src[9]; + dst[15] = tmp[10] * src[10] + tmp[4] * src[8] + tmp[9] * src[9]; + dst[15] -= tmp[8] * src[9] + tmp[11] * src[10] + tmp[5] * src[8]; + + // Calculate determinant + det = src[0] * dst[0] + src[1] * dst[1] + src[2] * dst[2] + src[3] * dst[3]; + + // Inverse of matrix is divided by determinant + det = 1 / det; + for (int j = 0; j < 16; j++) + { + dst[j] *= det; + } + + // Set it back + for (int i = 0; i < 4; i++) + { + for (int j = 0; j < 4; j++) + { + mat[i][j] = dst[i * 4 + j]; + } + } +} + +Matrix4 Matrix4::CreateFromQuaternion(const class Quaternion& q) +{ + float mat[4][4]; + + mat[0][0] = 1.0f - 2.0f * q.y * q.y - 2.0f * q.z * q.z; + mat[0][1] = 2.0f * q.x * q.y + 2.0f * q.w * q.z; + mat[0][2] = 2.0f * q.x * q.z - 2.0f * q.w * q.y; + mat[0][3] = 0.0f; + + mat[1][0] = 2.0f * q.x * q.y - 2.0f * q.w * q.z; + mat[1][1] = 1.0f - 2.0f * q.x * q.x - 2.0f * q.z * q.z; + mat[1][2] = 2.0f * q.y * q.z + 2.0f * q.w * q.x; + mat[1][3] = 0.0f; + + mat[2][0] = 2.0f * q.x * q.z + 2.0f * q.w * q.y; + mat[2][1] = 2.0f * q.y * q.z - 2.0f * q.w * q.x; + mat[2][2] = 1.0f - 2.0f * q.x * q.x - 2.0f * q.y * q.y; + mat[2][3] = 0.0f; + + mat[3][0] = 0.0f; + mat[3][1] = 0.0f; + mat[3][2] = 0.0f; + mat[3][3] = 1.0f; + + return Matrix4(mat); +} diff --git a/Exercises/4.2/Math.h b/Exercises/4.2/Math.h new file mode 100644 index 0000000000000000000000000000000000000000..752963f1540b8aea483a8c39ab2d6afb561c5d13 --- /dev/null +++ b/Exercises/4.2/Math.h @@ -0,0 +1,1033 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once + +#include <cmath> +#include <memory.h> +#include <limits> + +namespace Math +{ + const float Pi = 3.1415926535f; + const float TwoPi = Pi * 2.0f; + const float PiOver2 = Pi / 2.0f; + const float Infinity = std::numeric_limits<float>::infinity(); + const float NegInfinity = -std::numeric_limits<float>::infinity(); + + inline float ToRadians(float degrees) + { + return degrees * Pi / 180.0f; + } + + inline float ToDegrees(float radians) + { + return radians * 180.0f / Pi; + } + + inline bool NearZero(float val, float epsilon = 0.001f) + { + if (fabs(val) <= epsilon) + { + return true; + } + else + { + return false; + } + } + + template <typename T> + T Max(const T& a, const T& b) + { + return (a < b ? b : a); + } + + template <typename T> + T Min(const T& a, const T& b) + { + return (a < b ? a : b); + } + + template <typename T> + T Clamp(const T& value, const T& lower, const T& upper) + { + return Min(upper, Max(lower, value)); + } + + inline float Abs(float value) + { + return fabs(value); + } + + inline float Cos(float angle) + { + return cosf(angle); + } + + inline float Sin(float angle) + { + return sinf(angle); + } + + inline float Tan(float angle) + { + return tanf(angle); + } + + inline float Acos(float value) + { + return acosf(value); + } + + inline float Atan2(float y, float x) + { + return atan2f(y, x); + } + + inline float Cot(float angle) + { + return 1.0f / Tan(angle); + } + + inline float Lerp(float a, float b, float f) + { + return a + f * (b - a); + } + + inline float Sqrt(float value) + { + return sqrtf(value); + } + + inline float Fmod(float numer, float denom) + { + return fmod(numer, denom); + } +} + +// 2D Vector +class Vector2 +{ +public: + float x; + float y; + + Vector2() + :x(0.0f) + ,y(0.0f) + {} + + explicit Vector2(float inX, float inY) + :x(inX) + ,y(inY) + {} + + // Set both components in one line + void Set(float inX, float inY) + { + x = inX; + y = inY; + } + + // Vector addition (a + b) + friend Vector2 operator+(const Vector2& a, const Vector2& b) + { + return Vector2(a.x + b.x, a.y + b.y); + } + + // Vector subtraction (a - b) + friend Vector2 operator-(const Vector2& a, const Vector2& b) + { + return Vector2(a.x - b.x, a.y - b.y); + } + + // Component-wise multiplication + // (a.x * b.x, ...) + friend Vector2 operator*(const Vector2& a, const Vector2& b) + { + return Vector2(a.x * b.x, a.y * b.y); + } + + // Scalar multiplication + friend Vector2 operator*(const Vector2& vec, float scalar) + { + return Vector2(vec.x * scalar, vec.y * scalar); + } + + // Scalar multiplication + friend Vector2 operator*(float scalar, const Vector2& vec) + { + return Vector2(vec.x * scalar, vec.y * scalar); + } + + // Scalar *= + Vector2& operator*=(float scalar) + { + x *= scalar; + y *= scalar; + return *this; + } + + // Vector += + Vector2& operator+=(const Vector2& right) + { + x += right.x; + y += right.y; + return *this; + } + + // Vector -= + Vector2& operator-=(const Vector2& right) + { + x -= right.x; + y -= right.y; + return *this; + } + + // Length squared of vector + float LengthSq() const + { + return (x*x + y*y); + } + + // Length of vector + float Length() const + { + return (Math::Sqrt(LengthSq())); + } + + // Normalize this vector + void Normalize() + { + float length = Length(); + x /= length; + y /= length; + } + + // Normalize the provided vector + static Vector2 Normalize(const Vector2& vec) + { + Vector2 temp = vec; + temp.Normalize(); + return temp; + } + + // Dot product between two vectors (a dot b) + static float Dot(const Vector2& a, const Vector2& b) + { + return (a.x * b.x + a.y * b.y); + } + + // Lerp from A to B by f + static Vector2 Lerp(const Vector2& a, const Vector2& b, float f) + { + return Vector2(a + f * (b - a)); + } + + // Reflect V about (normalized) N + static Vector2 Reflect(const Vector2& v, const Vector2& n) + { + return v - 2.0f * Vector2::Dot(v, n) * n; + } + + // Transform vector by matrix + static Vector2 Transform(const Vector2& vec, const class Matrix3& mat, float w = 1.0f); + + static const Vector2 Zero; + static const Vector2 UnitX; + static const Vector2 UnitY; + static const Vector2 NegUnitX; + static const Vector2 NegUnitY; +}; + +// 3D Vector +class Vector3 +{ +public: + float x; + float y; + float z; + + Vector3() + :x(0.0f) + ,y(0.0f) + ,z(0.0f) + {} + + explicit Vector3(float inX, float inY, float inZ) + :x(inX) + ,y(inY) + ,z(inZ) + {} + + // Cast to a const float pointer + const float* GetAsFloatPtr() const + { + return reinterpret_cast<const float*>(&x); + } + + // Set all three components in one line + void Set(float inX, float inY, float inZ) + { + x = inX; + y = inY; + z = inZ; + } + + // Vector addition (a + b) + friend Vector3 operator+(const Vector3& a, const Vector3& b) + { + return Vector3(a.x + b.x, a.y + b.y, a.z + b.z); + } + + // Vector subtraction (a - b) + friend Vector3 operator-(const Vector3& a, const Vector3& b) + { + return Vector3(a.x - b.x, a.y - b.y, a.z - b.z); + } + + // Component-wise multiplication + friend Vector3 operator*(const Vector3& left, const Vector3& right) + { + return Vector3(left.x * right.x, left.y * right.y, left.z * right.z); + } + + // Scalar multiplication + friend Vector3 operator*(const Vector3& vec, float scalar) + { + return Vector3(vec.x * scalar, vec.y * scalar, vec.z * scalar); + } + + // Scalar multiplication + friend Vector3 operator*(float scalar, const Vector3& vec) + { + return Vector3(vec.x * scalar, vec.y * scalar, vec.z * scalar); + } + + // Scalar *= + Vector3& operator*=(float scalar) + { + x *= scalar; + y *= scalar; + z *= scalar; + return *this; + } + + // Vector += + Vector3& operator+=(const Vector3& right) + { + x += right.x; + y += right.y; + z += right.z; + return *this; + } + + // Vector -= + Vector3& operator-=(const Vector3& right) + { + x -= right.x; + y -= right.y; + z -= right.z; + return *this; + } + + // Length squared of vector + float LengthSq() const + { + return (x*x + y*y + z*z); + } + + // Length of vector + float Length() const + { + return (Math::Sqrt(LengthSq())); + } + + // Normalize this vector + void Normalize() + { + float length = Length(); + x /= length; + y /= length; + z /= length; + } + + // Normalize the provided vector + static Vector3 Normalize(const Vector3& vec) + { + Vector3 temp = vec; + temp.Normalize(); + return temp; + } + + // Dot product between two vectors (a dot b) + static float Dot(const Vector3& a, const Vector3& b) + { + return (a.x * b.x + a.y * b.y + a.z * b.z); + } + + // Cross product between two vectors (a cross b) + static Vector3 Cross(const Vector3& a, const Vector3& b) + { + Vector3 temp; + temp.x = a.y * b.z - a.z * b.y; + temp.y = a.z * b.x - a.x * b.z; + temp.z = a.x * b.y - a.y * b.x; + return temp; + } + + // Lerp from A to B by f + static Vector3 Lerp(const Vector3& a, const Vector3& b, float f) + { + return Vector3(a + f * (b - a)); + } + + // Reflect V about (normalized) N + static Vector3 Reflect(const Vector3& v, const Vector3& n) + { + return v - 2.0f * Vector3::Dot(v, n) * n; + } + + static Vector3 Transform(const Vector3& vec, const class Matrix4& mat, float w = 1.0f); + // This will transform the vector and renormalize the w component + static Vector3 TransformWithPerspDiv(const Vector3& vec, const class Matrix4& mat, float w = 1.0f); + + // Transform a Vector3 by a quaternion + static Vector3 Transform(const Vector3& v, const class Quaternion& q); + + static const Vector3 Zero; + static const Vector3 UnitX; + static const Vector3 UnitY; + static const Vector3 UnitZ; + static const Vector3 NegUnitX; + static const Vector3 NegUnitY; + static const Vector3 NegUnitZ; + static const Vector3 Infinity; + static const Vector3 NegInfinity; +}; + +// 3x3 Matrix +class Matrix3 +{ +public: + float mat[3][3]; + + Matrix3() + { + *this = Matrix3::Identity; + } + + explicit Matrix3(float inMat[3][3]) + { + memcpy(mat, inMat, 9 * sizeof(float)); + } + + // Cast to a const float pointer + const float* GetAsFloatPtr() const + { + return reinterpret_cast<const float*>(&mat[0][0]); + } + + // Matrix multiplication + friend Matrix3 operator*(const Matrix3& left, const Matrix3& right) + { + Matrix3 retVal; + // row 0 + retVal.mat[0][0] = + left.mat[0][0] * right.mat[0][0] + + left.mat[0][1] * right.mat[1][0] + + left.mat[0][2] * right.mat[2][0]; + + retVal.mat[0][1] = + left.mat[0][0] * right.mat[0][1] + + left.mat[0][1] * right.mat[1][1] + + left.mat[0][2] * right.mat[2][1]; + + retVal.mat[0][2] = + left.mat[0][0] * right.mat[0][2] + + left.mat[0][1] * right.mat[1][2] + + left.mat[0][2] * right.mat[2][2]; + + // row 1 + retVal.mat[1][0] = + left.mat[1][0] * right.mat[0][0] + + left.mat[1][1] * right.mat[1][0] + + left.mat[1][2] * right.mat[2][0]; + + retVal.mat[1][1] = + left.mat[1][0] * right.mat[0][1] + + left.mat[1][1] * right.mat[1][1] + + left.mat[1][2] * right.mat[2][1]; + + retVal.mat[1][2] = + left.mat[1][0] * right.mat[0][2] + + left.mat[1][1] * right.mat[1][2] + + left.mat[1][2] * right.mat[2][2]; + + // row 2 + retVal.mat[2][0] = + left.mat[2][0] * right.mat[0][0] + + left.mat[2][1] * right.mat[1][0] + + left.mat[2][2] * right.mat[2][0]; + + retVal.mat[2][1] = + left.mat[2][0] * right.mat[0][1] + + left.mat[2][1] * right.mat[1][1] + + left.mat[2][2] * right.mat[2][1]; + + retVal.mat[2][2] = + left.mat[2][0] * right.mat[0][2] + + left.mat[2][1] * right.mat[1][2] + + left.mat[2][2] * right.mat[2][2]; + + return retVal; + } + + Matrix3& operator*=(const Matrix3& right) + { + *this = *this * right; + return *this; + } + + // Create a scale matrix with x and y scales + static Matrix3 CreateScale(float xScale, float yScale) + { + float temp[3][3] = + { + { xScale, 0.0f, 0.0f }, + { 0.0f, yScale, 0.0f }, + { 0.0f, 0.0f, 1.0f }, + }; + return Matrix3(temp); + } + + static Matrix3 CreateScale(const Vector2& scaleVector) + { + return CreateScale(scaleVector.x, scaleVector.y); + } + + // Create a scale matrix with a uniform factor + static Matrix3 CreateScale(float scale) + { + return CreateScale(scale, scale); + } + + // Create a rotation matrix about the Z axis + // theta is in radians + static Matrix3 CreateRotation(float theta) + { + float temp[3][3] = + { + { Math::Cos(theta), Math::Sin(theta), 0.0f }, + { -Math::Sin(theta), Math::Cos(theta), 0.0f }, + { 0.0f, 0.0f, 1.0f }, + }; + return Matrix3(temp); + } + + // Create a translation matrix (on the xy-plane) + static Matrix3 CreateTranslation(const Vector2& trans) + { + float temp[3][3] = + { + { 1.0f, 0.0f, 0.0f }, + { 0.0f, 1.0f, 0.0f }, + { trans.x, trans.y, 1.0f }, + }; + return Matrix3(temp); + } + + static const Matrix3 Identity; +}; + +// 4x4 Matrix +class Matrix4 +{ +public: + float mat[4][4]; + + Matrix4() + { + *this = Matrix4::Identity; + } + + explicit Matrix4(float inMat[4][4]) + { + memcpy(mat, inMat, 16 * sizeof(float)); + } + + // Cast to a const float pointer + const float* GetAsFloatPtr() const + { + return reinterpret_cast<const float*>(&mat[0][0]); + } + + // Matrix multiplication (a * b) + friend Matrix4 operator*(const Matrix4& a, const Matrix4& b) + { + Matrix4 retVal; + // row 0 + retVal.mat[0][0] = + a.mat[0][0] * b.mat[0][0] + + a.mat[0][1] * b.mat[1][0] + + a.mat[0][2] * b.mat[2][0] + + a.mat[0][3] * b.mat[3][0]; + + retVal.mat[0][1] = + a.mat[0][0] * b.mat[0][1] + + a.mat[0][1] * b.mat[1][1] + + a.mat[0][2] * b.mat[2][1] + + a.mat[0][3] * b.mat[3][1]; + + retVal.mat[0][2] = + a.mat[0][0] * b.mat[0][2] + + a.mat[0][1] * b.mat[1][2] + + a.mat[0][2] * b.mat[2][2] + + a.mat[0][3] * b.mat[3][2]; + + retVal.mat[0][3] = + a.mat[0][0] * b.mat[0][3] + + a.mat[0][1] * b.mat[1][3] + + a.mat[0][2] * b.mat[2][3] + + a.mat[0][3] * b.mat[3][3]; + + // row 1 + retVal.mat[1][0] = + a.mat[1][0] * b.mat[0][0] + + a.mat[1][1] * b.mat[1][0] + + a.mat[1][2] * b.mat[2][0] + + a.mat[1][3] * b.mat[3][0]; + + retVal.mat[1][1] = + a.mat[1][0] * b.mat[0][1] + + a.mat[1][1] * b.mat[1][1] + + a.mat[1][2] * b.mat[2][1] + + a.mat[1][3] * b.mat[3][1]; + + retVal.mat[1][2] = + a.mat[1][0] * b.mat[0][2] + + a.mat[1][1] * b.mat[1][2] + + a.mat[1][2] * b.mat[2][2] + + a.mat[1][3] * b.mat[3][2]; + + retVal.mat[1][3] = + a.mat[1][0] * b.mat[0][3] + + a.mat[1][1] * b.mat[1][3] + + a.mat[1][2] * b.mat[2][3] + + a.mat[1][3] * b.mat[3][3]; + + // row 2 + retVal.mat[2][0] = + a.mat[2][0] * b.mat[0][0] + + a.mat[2][1] * b.mat[1][0] + + a.mat[2][2] * b.mat[2][0] + + a.mat[2][3] * b.mat[3][0]; + + retVal.mat[2][1] = + a.mat[2][0] * b.mat[0][1] + + a.mat[2][1] * b.mat[1][1] + + a.mat[2][2] * b.mat[2][1] + + a.mat[2][3] * b.mat[3][1]; + + retVal.mat[2][2] = + a.mat[2][0] * b.mat[0][2] + + a.mat[2][1] * b.mat[1][2] + + a.mat[2][2] * b.mat[2][2] + + a.mat[2][3] * b.mat[3][2]; + + retVal.mat[2][3] = + a.mat[2][0] * b.mat[0][3] + + a.mat[2][1] * b.mat[1][3] + + a.mat[2][2] * b.mat[2][3] + + a.mat[2][3] * b.mat[3][3]; + + // row 3 + retVal.mat[3][0] = + a.mat[3][0] * b.mat[0][0] + + a.mat[3][1] * b.mat[1][0] + + a.mat[3][2] * b.mat[2][0] + + a.mat[3][3] * b.mat[3][0]; + + retVal.mat[3][1] = + a.mat[3][0] * b.mat[0][1] + + a.mat[3][1] * b.mat[1][1] + + a.mat[3][2] * b.mat[2][1] + + a.mat[3][3] * b.mat[3][1]; + + retVal.mat[3][2] = + a.mat[3][0] * b.mat[0][2] + + a.mat[3][1] * b.mat[1][2] + + a.mat[3][2] * b.mat[2][2] + + a.mat[3][3] * b.mat[3][2]; + + retVal.mat[3][3] = + a.mat[3][0] * b.mat[0][3] + + a.mat[3][1] * b.mat[1][3] + + a.mat[3][2] * b.mat[2][3] + + a.mat[3][3] * b.mat[3][3]; + + return retVal; + } + + Matrix4& operator*=(const Matrix4& right) + { + *this = *this * right; + return *this; + } + + // Invert the matrix - super slow + void Invert(); + + // Get the translation component of the matrix + Vector3 GetTranslation() const + { + return Vector3(mat[3][0], mat[3][1], mat[3][2]); + } + + // Get the X axis of the matrix (forward) + Vector3 GetXAxis() const + { + return Vector3::Normalize(Vector3(mat[0][0], mat[0][1], mat[0][2])); + } + + // Get the Y axis of the matrix (left) + Vector3 GetYAxis() const + { + return Vector3::Normalize(Vector3(mat[1][0], mat[1][1], mat[1][2])); + } + + // Get the Z axis of the matrix (up) + Vector3 GetZAxis() const + { + return Vector3::Normalize(Vector3(mat[2][0], mat[2][1], mat[2][2])); + } + + // Extract the scale component from the matrix + Vector3 GetScale() const + { + Vector3 retVal; + retVal.x = Vector3(mat[0][0], mat[0][1], mat[0][2]).Length(); + retVal.y = Vector3(mat[1][0], mat[1][1], mat[1][2]).Length(); + retVal.z = Vector3(mat[2][0], mat[2][1], mat[2][2]).Length(); + return retVal; + } + + // Create a scale matrix with x, y, and z scales + static Matrix4 CreateScale(float xScale, float yScale, float zScale) + { + float temp[4][4] = + { + { xScale, 0.0f, 0.0f, 0.0f }, + { 0.0f, yScale, 0.0f, 0.0f }, + { 0.0f, 0.0f, zScale, 0.0f }, + { 0.0f, 0.0f, 0.0f, 1.0f } + }; + return Matrix4(temp); + } + + static Matrix4 CreateScale(const Vector3& scaleVector) + { + return CreateScale(scaleVector.x, scaleVector.y, scaleVector.z); + } + + // Create a scale matrix with a uniform factor + static Matrix4 CreateScale(float scale) + { + return CreateScale(scale, scale, scale); + } + + // Rotation about x-axis + static Matrix4 CreateRotationX(float theta) + { + float temp[4][4] = + { + { 1.0f, 0.0f, 0.0f , 0.0f }, + { 0.0f, Math::Cos(theta), Math::Sin(theta), 0.0f }, + { 0.0f, -Math::Sin(theta), Math::Cos(theta), 0.0f }, + { 0.0f, 0.0f, 0.0f, 1.0f }, + }; + return Matrix4(temp); + } + + // Rotation about y-axis + static Matrix4 CreateRotationY(float theta) + { + float temp[4][4] = + { + { Math::Cos(theta), 0.0f, -Math::Sin(theta), 0.0f }, + { 0.0f, 1.0f, 0.0f, 0.0f }, + { Math::Sin(theta), 0.0f, Math::Cos(theta), 0.0f }, + { 0.0f, 0.0f, 0.0f, 1.0f }, + }; + return Matrix4(temp); + } + + // Rotation about z-axis + static Matrix4 CreateRotationZ(float theta) + { + float temp[4][4] = + { + { Math::Cos(theta), Math::Sin(theta), 0.0f, 0.0f }, + { -Math::Sin(theta), Math::Cos(theta), 0.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f, 0.0f }, + { 0.0f, 0.0f, 0.0f, 1.0f }, + }; + return Matrix4(temp); + } + + // Create a rotation matrix from a quaternion + static Matrix4 CreateFromQuaternion(const class Quaternion& q); + + static Matrix4 CreateTranslation(const Vector3& trans) + { + float temp[4][4] = + { + { 1.0f, 0.0f, 0.0f, 0.0f }, + { 0.0f, 1.0f, 0.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f, 0.0f }, + { trans.x, trans.y, trans.z, 1.0f } + }; + return Matrix4(temp); + } + + static Matrix4 CreateLookAt(const Vector3& eye, const Vector3& target, const Vector3& up) + { + Vector3 zaxis = Vector3::Normalize(target - eye); + Vector3 xaxis = Vector3::Normalize(Vector3::Cross(up, zaxis)); + Vector3 yaxis = Vector3::Normalize(Vector3::Cross(zaxis, xaxis)); + Vector3 trans; + trans.x = -Vector3::Dot(xaxis, eye); + trans.y = -Vector3::Dot(yaxis, eye); + trans.z = -Vector3::Dot(zaxis, eye); + + float temp[4][4] = + { + { xaxis.x, yaxis.x, zaxis.x, 0.0f }, + { xaxis.y, yaxis.y, zaxis.y, 0.0f }, + { xaxis.z, yaxis.z, zaxis.z, 0.0f }, + { trans.x, trans.y, trans.z, 1.0f } + }; + return Matrix4(temp); + } + + static Matrix4 CreateOrtho(float width, float height, float near, float far) + { + float temp[4][4] = + { + { 2.0f / width, 0.0f, 0.0f, 0.0f }, + { 0.0f, 2.0f / height, 0.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f / (far - near), 0.0f }, + { 0.0f, 0.0f, near / (near - far), 1.0f } + }; + return Matrix4(temp); + } + + static Matrix4 CreatePerspectiveFOV(float fovY, float width, float height, float near, float far) + { + float yScale = Math::Cot(fovY / 2.0f); + float xScale = yScale * height / width; + float temp[4][4] = + { + { xScale, 0.0f, 0.0f, 0.0f }, + { 0.0f, yScale, 0.0f, 0.0f }, + { 0.0f, 0.0f, far / (far - near), 1.0f }, + { 0.0f, 0.0f, -near * far / (far - near), 0.0f } + }; + return Matrix4(temp); + } + + // Create "Simple" View-Projection Matrix from Chapter 6 + static Matrix4 CreateSimpleViewProj(float width, float height) + { + float temp[4][4] = + { + { 2.0f/width, 0.0f, 0.0f, 0.0f }, + { 0.0f, 2.0f/height, 0.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f, 1.0f } + }; + return Matrix4(temp); + } + + static const Matrix4 Identity; +}; + +// (Unit) Quaternion +class Quaternion +{ +public: + float x; + float y; + float z; + float w; + + Quaternion() + { + *this = Quaternion::Identity; + } + + // This directly sets the quaternion components -- + // don't use for axis/angle + explicit Quaternion(float inX, float inY, float inZ, float inW) + { + Set(inX, inY, inZ, inW); + } + + // Construct the quaternion from an axis and angle + // It is assumed that axis is already normalized, + // and the angle is in radians + explicit Quaternion(const Vector3& axis, float angle) + { + float scalar = Math::Sin(angle / 2.0f); + x = axis.x * scalar; + y = axis.y * scalar; + z = axis.z * scalar; + w = Math::Cos(angle / 2.0f); + } + + // Directly set the internal components + void Set(float inX, float inY, float inZ, float inW) + { + x = inX; + y = inY; + z = inZ; + w = inW; + } + + void Conjugate() + { + x *= -1.0f; + y *= -1.0f; + z *= -1.0f; + } + + float LengthSq() const + { + return (x*x + y*y + z*z + w*w); + } + + float Length() const + { + return Math::Sqrt(LengthSq()); + } + + void Normalize() + { + float length = Length(); + x /= length; + y /= length; + z /= length; + w /= length; + } + + // Normalize the provided quaternion + static Quaternion Normalize(const Quaternion& q) + { + Quaternion retVal = q; + retVal.Normalize(); + return retVal; + } + + // Linear interpolation + static Quaternion Lerp(const Quaternion& a, const Quaternion& b, float f) + { + Quaternion retVal; + retVal.x = Math::Lerp(a.x, b.x, f); + retVal.y = Math::Lerp(a.y, b.y, f); + retVal.z = Math::Lerp(a.z, b.z, f); + retVal.w = Math::Lerp(a.w, b.w, f); + retVal.Normalize(); + return retVal; + } + + static float Dot(const Quaternion& a, const Quaternion& b) + { + return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w; + } + + // Spherical Linear Interpolation + static Quaternion Slerp(const Quaternion& a, const Quaternion& b, float f) + { + float rawCosm = Quaternion::Dot(a, b); + + float cosom = -rawCosm; + if (rawCosm >= 0.0f) + { + cosom = rawCosm; + } + + float scale0, scale1; + + if (cosom < 0.9999f) + { + const float omega = Math::Acos(cosom); + const float invSin = 1.f / Math::Sin(omega); + scale0 = Math::Sin((1.f - f) * omega) * invSin; + scale1 = Math::Sin(f * omega) * invSin; + } + else + { + // Use linear interpolation if the quaternions + // are collinear + scale0 = 1.0f - f; + scale1 = f; + } + + if (rawCosm < 0.0f) + { + scale1 = -scale1; + } + + Quaternion retVal; + retVal.x = scale0 * a.x + scale1 * b.x; + retVal.y = scale0 * a.y + scale1 * b.y; + retVal.z = scale0 * a.z + scale1 * b.z; + retVal.w = scale0 * a.w + scale1 * b.w; + retVal.Normalize(); + return retVal; + } + + // Concatenate + // Rotate by q FOLLOWED BY p + static Quaternion Concatenate(const Quaternion& q, const Quaternion& p) + { + Quaternion retVal; + + // Vector component is: + // ps * qv + qs * pv + pv x qv + Vector3 qv(q.x, q.y, q.z); + Vector3 pv(p.x, p.y, p.z); + Vector3 newVec = p.w * qv + q.w * pv + Vector3::Cross(pv, qv); + retVal.x = newVec.x; + retVal.y = newVec.y; + retVal.z = newVec.z; + + // Scalar component is: + // ps * qs - pv . qv + retVal.w = p.w * q.w - Vector3::Dot(pv, qv); + + return retVal; + } + + static const Quaternion Identity; +}; + +namespace Color +{ + static const Vector3 Black(0.0f, 0.0f, 0.0f); + static const Vector3 White(1.0f, 1.0f, 1.0f); + static const Vector3 Red(1.0f, 0.0f, 0.0f); + static const Vector3 Green(0.0f, 1.0f, 0.0f); + static const Vector3 Blue(0.0f, 0.0f, 1.0f); + static const Vector3 Yellow(1.0f, 1.0f, 0.0f); + static const Vector3 LightYellow(1.0f, 1.0f, 0.88f); + static const Vector3 LightBlue(0.68f, 0.85f, 0.9f); + static const Vector3 LightPink(1.0f, 0.71f, 0.76f); + static const Vector3 LightGreen(0.56f, 0.93f, 0.56f); +} diff --git a/Exercises/4.2/MoveComponent.cpp b/Exercises/4.2/MoveComponent.cpp new file mode 100644 index 0000000000000000000000000000000000000000..cdf1fdf993b8e2df8843af77352a92c4e7b33050 --- /dev/null +++ b/Exercises/4.2/MoveComponent.cpp @@ -0,0 +1,35 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "MoveComponent.h" +#include "Actor.h" + +MoveComponent::MoveComponent(class Actor* owner, int updateOrder) +:Component(owner, updateOrder) +,mAngularSpeed(0.0f) +,mForwardSpeed(0.0f) +{ + +} + +void MoveComponent::Update(float deltaTime) +{ + if (!Math::NearZero(mAngularSpeed)) + { + float rot = mOwner->GetRotation(); + rot += mAngularSpeed * deltaTime; + mOwner->SetRotation(rot); + } + + if (!Math::NearZero(mForwardSpeed)) + { + Vector2 pos = mOwner->GetPosition(); + pos += mOwner->GetForward() * mForwardSpeed * deltaTime; + mOwner->SetPosition(pos); + } +} diff --git a/Exercises/4.2/MoveComponent.h b/Exercises/4.2/MoveComponent.h new file mode 100644 index 0000000000000000000000000000000000000000..def7d3895dbd384ef9e40d0d7a8e9c58d4fc2a8d --- /dev/null +++ b/Exercises/4.2/MoveComponent.h @@ -0,0 +1,26 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "Component.h" + +class MoveComponent : public Component +{ +public: + // Lower update order to update first + MoveComponent(class Actor* owner, int updateOrder = 10); + void Update(float deltaTime) override; + + float GetAngularSpeed() const { return mAngularSpeed; } + float GetForwardSpeed() const { return mForwardSpeed; } + void SetAngularSpeed(float speed) { mAngularSpeed = speed; } + void SetForwardSpeed(float speed) { mForwardSpeed = speed; } +private: + float mAngularSpeed; + float mForwardSpeed; +}; diff --git a/Exercises/4.2/Random.cpp b/Exercises/4.2/Random.cpp new file mode 100644 index 0000000000000000000000000000000000000000..05a3a32a9c78a670518a1106129c43c9b92ce45a --- /dev/null +++ b/Exercises/4.2/Random.cpp @@ -0,0 +1,51 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "Random.h" + +void Random::Init() +{ + std::random_device rd; + Random::Seed(rd()); +} + +void Random::Seed(unsigned int seed) +{ + sGenerator.seed(seed); +} + +float Random::GetFloat() +{ + return GetFloatRange(0.0f, 1.0f); +} + +float Random::GetFloatRange(float min, float max) +{ + std::uniform_real_distribution<float> dist(min, max); + return dist(sGenerator); +} + +int Random::GetIntRange(int min, int max) +{ + std::uniform_int_distribution<int> dist(min, max); + return dist(sGenerator); +} + +Vector2 Random::GetVector(const Vector2& min, const Vector2& max) +{ + Vector2 r = Vector2(GetFloat(), GetFloat()); + return min + (max - min) * r; +} + +Vector3 Random::GetVector(const Vector3& min, const Vector3& max) +{ + Vector3 r = Vector3(GetFloat(), GetFloat(), GetFloat()); + return min + (max - min) * r; +} + +std::mt19937 Random::sGenerator; diff --git a/Exercises/4.2/Random.h b/Exercises/4.2/Random.h new file mode 100644 index 0000000000000000000000000000000000000000..3ae92fe5bb3b4043c44c66cc30b104a4feee9db4 --- /dev/null +++ b/Exercises/4.2/Random.h @@ -0,0 +1,36 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once +#include <random> +#include "Math.h" + +class Random +{ +public: + static void Init(); + + // Seed the generator with the specified int + // NOTE: You should generally not need to manually use this + static void Seed(unsigned int seed); + + // Get a float between 0.0f and 1.0f + static float GetFloat(); + + // Get a float from the specified range + static float GetFloatRange(float min, float max); + + // Get an int from the specified range + static int GetIntRange(int min, int max); + + // Get a random vector given the min/max bounds + static Vector2 GetVector(const Vector2& min, const Vector2& max); + static Vector3 GetVector(const Vector3& min, const Vector3& max); +private: + static std::mt19937 sGenerator; +}; diff --git a/Exercises/4.2/SpriteComponent.cpp b/Exercises/4.2/SpriteComponent.cpp new file mode 100644 index 0000000000000000000000000000000000000000..56884fbc341dc635e33664e0f4922133ec930f14 --- /dev/null +++ b/Exercises/4.2/SpriteComponent.cpp @@ -0,0 +1,56 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "SpriteComponent.h" +#include "Actor.h" +#include "Game.h" + +SpriteComponent::SpriteComponent(Actor* owner, int drawOrder) + :Component(owner) + ,mTexture(nullptr) + ,mDrawOrder(drawOrder) + ,mTexWidth(0) + ,mTexHeight(0) +{ + mOwner->GetGame()->AddSprite(this); +} + +SpriteComponent::~SpriteComponent() +{ + mOwner->GetGame()->RemoveSprite(this); +} + +void SpriteComponent::Draw(SDL_Renderer* renderer) +{ + if (mTexture) + { + SDL_Rect r; + // Scale the width/height by owner's scale + r.w = static_cast<int>(mTexWidth * mOwner->GetScale()); + r.h = static_cast<int>(mTexHeight * mOwner->GetScale()); + // Center the rectangle around the position of the owner + r.x = static_cast<int>(mOwner->GetPosition().x - r.w / 2); + r.y = static_cast<int>(mOwner->GetPosition().y - r.h / 2); + + // Draw (have to convert angle from radians to degrees, and clockwise to counter) + SDL_RenderCopyEx(renderer, + mTexture, + nullptr, + &r, + -Math::ToDegrees(mOwner->GetRotation()), + nullptr, + SDL_FLIP_NONE); + } +} + +void SpriteComponent::SetTexture(SDL_Texture* texture) +{ + mTexture = texture; + // Set width/height + SDL_QueryTexture(texture, nullptr, nullptr, &mTexWidth, &mTexHeight); +} diff --git a/Exercises/4.2/SpriteComponent.h b/Exercises/4.2/SpriteComponent.h new file mode 100644 index 0000000000000000000000000000000000000000..c430e888f9d9303f7ec0b389dab53932ac6b9d9d --- /dev/null +++ b/Exercises/4.2/SpriteComponent.h @@ -0,0 +1,30 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "Component.h" +#include "SDL/SDL.h" +class SpriteComponent : public Component +{ +public: + // (Lower draw order corresponds with further back) + SpriteComponent(class Actor* owner, int drawOrder = 100); + ~SpriteComponent(); + + virtual void Draw(SDL_Renderer* renderer); + virtual void SetTexture(SDL_Texture* texture); + + int GetDrawOrder() const { return mDrawOrder; } + int GetTexHeight() const { return mTexHeight; } + int GetTexWidth() const { return mTexWidth; } +protected: + SDL_Texture* mTexture; + int mDrawOrder; + int mTexWidth; + int mTexHeight; +}; diff --git a/Exercises/7.2/CameraActor.cpp b/Exercises/7.2/CameraActor.cpp new file mode 100644 index 0000000000000000000000000000000000000000..6099c612816d6f7e91b4065a1814e19f18b888c3 --- /dev/null +++ b/Exercises/7.2/CameraActor.cpp @@ -0,0 +1,84 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "CameraActor.h" +#include "MoveComponent.h" +#include "SDL/SDL_scancode.h" +#include "Renderer.h" +#include "AudioSystem.h" +#include "Game.h" +#include "AudioComponent.h" +#include "MeshComponent.h" + +CameraActor::CameraActor(Game* game) + :Actor(game) +{ + mMoveComp = new MoveComponent(this); + mAudioComp = new AudioComponent(this); + MeshComponent* mc = new MeshComponent(this); + mc->SetMesh(game->GetRenderer()->GetMesh("Assets/Sphere.gpmesh")); + mLastFootstep = 0.0f; + mFootstep = mAudioComp->PlayEvent("event:/Footstep"); + mFootstep.SetPaused(true); +} + +void CameraActor::UpdateActor(float deltaTime) +{ + Actor::UpdateActor(deltaTime); + + // Play the footstep if we're moving and haven't recently + mLastFootstep -= deltaTime; + if (!Math::NearZero(mMoveComp->GetForwardSpeed()) && mLastFootstep <= 0.0f) + { + mFootstep.SetPaused(false); + mFootstep.Restart(); + mLastFootstep = 0.5f; + } + + // Compute new camera from this actor + mCameraPos = GetPosition() - GetForward() * 200.0f + Vector3::UnitZ * 100.0f; + Vector3 target = GetPosition() + GetForward() * 100.0f; + Vector3 up = Vector3::UnitZ; + Matrix4 view = Matrix4::CreateLookAt(mCameraPos, target, up); + GetGame()->GetRenderer()->SetViewMatrix(view); + GetGame()->GetAudioSystem()->SetListener(view); +} + +void CameraActor::ActorInput(const uint8_t* keys) +{ + float forwardSpeed = 0.0f; + float angularSpeed = 0.0f; + // wasd movement + if (keys[SDL_SCANCODE_W]) + { + forwardSpeed += 300.0f; + } + if (keys[SDL_SCANCODE_S]) + { + forwardSpeed -= 300.0f; + } + if (keys[SDL_SCANCODE_A]) + { + angularSpeed -= Math::TwoPi; + } + if (keys[SDL_SCANCODE_D]) + { + angularSpeed += Math::TwoPi; + } + + mMoveComp->SetForwardSpeed(forwardSpeed); + mMoveComp->SetAngularSpeed(angularSpeed); +} + +void CameraActor::SetFootstepSurface(float value) +{ + // Pause here because the way I setup the parameter in FMOD + // changing it will play a footstep + mFootstep.SetPaused(true); + mFootstep.SetParameter("Surface", value); +} diff --git a/Exercises/7.2/CameraActor.h b/Exercises/7.2/CameraActor.h new file mode 100644 index 0000000000000000000000000000000000000000..9768de42040ff29f066e4b0d62e5da2a73c51044 --- /dev/null +++ b/Exercises/7.2/CameraActor.h @@ -0,0 +1,29 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "Actor.h" +#include "SoundEvent.h" + +class CameraActor : public Actor +{ +public: + CameraActor(class Game* game); + + void UpdateActor(float deltaTime) override; + void ActorInput(const uint8_t* keys) override; + + void SetFootstepSurface(float value); + const Vector3& GetCameraPosition() const { return mCameraPos; } +private: + class MoveComponent* mMoveComp; + class AudioComponent* mAudioComp; + Vector3 mCameraPos; + SoundEvent mFootstep; + float mLastFootstep; +}; \ No newline at end of file diff --git a/FMODStudio/Chapter07/Assets/396012__morganpurkis__rustling-grass-3.wav b/FMODStudio/Chapter07/Assets/396012__morganpurkis__rustling-grass-3.wav new file mode 100644 index 0000000000000000000000000000000000000000..4989147a35824f3afd30c0e147937587a038777e Binary files /dev/null and b/FMODStudio/Chapter07/Assets/396012__morganpurkis__rustling-grass-3.wav differ diff --git a/FMODStudio/Chapter07/Assets/396013__morganpurkis__rustling-grass-2.wav b/FMODStudio/Chapter07/Assets/396013__morganpurkis__rustling-grass-2.wav new file mode 100644 index 0000000000000000000000000000000000000000..6f14a56aff63491cdcd4ef993c73dc1e25b9f71b Binary files /dev/null and b/FMODStudio/Chapter07/Assets/396013__morganpurkis__rustling-grass-2.wav differ diff --git a/FMODStudio/Chapter07/Assets/396014__morganpurkis__rustling-grass-1.wav b/FMODStudio/Chapter07/Assets/396014__morganpurkis__rustling-grass-1.wav new file mode 100644 index 0000000000000000000000000000000000000000..61eca2cfb6b746a71008d09f0c82836c6359d41f Binary files /dev/null and b/FMODStudio/Chapter07/Assets/396014__morganpurkis__rustling-grass-1.wav differ diff --git a/FMODStudio/Chapter07/Assets/396016__morganpurkis__rustling-grass-4.wav b/FMODStudio/Chapter07/Assets/396016__morganpurkis__rustling-grass-4.wav new file mode 100644 index 0000000000000000000000000000000000000000..2464184bd6e0ead796eddc550b3279b3b14f316b Binary files /dev/null and b/FMODStudio/Chapter07/Assets/396016__morganpurkis__rustling-grass-4.wav differ diff --git a/FMODStudio/Chapter07/Assets/47835__tc630__fire2.wav b/FMODStudio/Chapter07/Assets/47835__tc630__fire2.wav new file mode 100644 index 0000000000000000000000000000000000000000..7c92ce79f9adaedeb59affed95527e1709e3fe2a Binary files /dev/null and b/FMODStudio/Chapter07/Assets/47835__tc630__fire2.wav differ diff --git a/FMODStudio/Chapter07/Assets/OutThere.ogg b/FMODStudio/Chapter07/Assets/OutThere.ogg new file mode 100644 index 0000000000000000000000000000000000000000..975ecb12fd620d986ddadec91e5e326799899146 Binary files /dev/null and b/FMODStudio/Chapter07/Assets/OutThere.ogg differ diff --git a/FMODStudio/Chapter07/Assets/explosion-1.ogg b/FMODStudio/Chapter07/Assets/explosion-1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..ad8a1ba5ce14af778b17b12109824a58178a778f Binary files /dev/null and b/FMODStudio/Chapter07/Assets/explosion-1.ogg differ diff --git a/FMODStudio/Chapter07/Assets/footstep00.ogg b/FMODStudio/Chapter07/Assets/footstep00.ogg new file mode 100644 index 0000000000000000000000000000000000000000..ca5dd2b6aa45f73f53685988aacec0a88f31887b Binary files /dev/null and b/FMODStudio/Chapter07/Assets/footstep00.ogg differ diff --git a/FMODStudio/Chapter07/Assets/footstep01.ogg b/FMODStudio/Chapter07/Assets/footstep01.ogg new file mode 100644 index 0000000000000000000000000000000000000000..e784dbff4808267daebd9297674f6532b1a826f3 Binary files /dev/null and b/FMODStudio/Chapter07/Assets/footstep01.ogg differ diff --git a/FMODStudio/Chapter07/Assets/footstep02.ogg b/FMODStudio/Chapter07/Assets/footstep02.ogg new file mode 100644 index 0000000000000000000000000000000000000000..fffa607622ef1f834244636ceaebfbb60c20fed1 Binary files /dev/null and b/FMODStudio/Chapter07/Assets/footstep02.ogg differ diff --git a/FMODStudio/Chapter07/Assets/footstep03.ogg b/FMODStudio/Chapter07/Assets/footstep03.ogg new file mode 100644 index 0000000000000000000000000000000000000000..32ec6265fc61f1aa323ae94c4b6c5b77f39f46f2 Binary files /dev/null and b/FMODStudio/Chapter07/Assets/footstep03.ogg differ diff --git a/FMODStudio/Chapter07/Assets/footstep04.ogg b/FMODStudio/Chapter07/Assets/footstep04.ogg new file mode 100644 index 0000000000000000000000000000000000000000..da3d8ea6250081ca302af44eb496d3758137dd1b Binary files /dev/null and b/FMODStudio/Chapter07/Assets/footstep04.ogg differ diff --git a/FMODStudio/Chapter07/Assets/footstep05.ogg b/FMODStudio/Chapter07/Assets/footstep05.ogg new file mode 100644 index 0000000000000000000000000000000000000000..ddf5ac6a2d5e0bd76b0c5931e35e78ead9df7c87 Binary files /dev/null and b/FMODStudio/Chapter07/Assets/footstep05.ogg differ diff --git a/FMODStudio/Chapter07/Assets/footstep06.ogg b/FMODStudio/Chapter07/Assets/footstep06.ogg new file mode 100644 index 0000000000000000000000000000000000000000..d4419f4e7e0691efaad6506751f04b7202b4f71d Binary files /dev/null and b/FMODStudio/Chapter07/Assets/footstep06.ogg differ diff --git a/FMODStudio/Chapter07/Assets/footstep07.ogg b/FMODStudio/Chapter07/Assets/footstep07.ogg new file mode 100644 index 0000000000000000000000000000000000000000..2b2175ec4d57f93a8d673e9ff9a6febdd7bd266b Binary files /dev/null and b/FMODStudio/Chapter07/Assets/footstep07.ogg differ diff --git a/FMODStudio/Chapter07/Assets/footstep08.ogg b/FMODStudio/Chapter07/Assets/footstep08.ogg new file mode 100644 index 0000000000000000000000000000000000000000..2b71f97adb59dbe6834a8ab8cde38ff6046ad152 Binary files /dev/null and b/FMODStudio/Chapter07/Assets/footstep08.ogg differ diff --git a/FMODStudio/Chapter07/Assets/footstep09.ogg b/FMODStudio/Chapter07/Assets/footstep09.ogg new file mode 100644 index 0000000000000000000000000000000000000000..52c39f52c84a4e5b92c0555b05e1c703bad6d93a Binary files /dev/null and b/FMODStudio/Chapter07/Assets/footstep09.ogg differ diff --git a/FMODStudio/Chapter07/Chapter07.fspro b/FMODStudio/Chapter07/Chapter07.fspro new file mode 100644 index 0000000000000000000000000000000000000000..e41455e9db8dcfd44b0fe6c3d7f92cfaa15feeca --- /dev/null +++ b/FMODStudio/Chapter07/Chapter07.fspro @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"/> diff --git a/FMODStudio/Chapter07/Metadata/Asset/{ab2d50f9-072f-433d-950e-e62e89beb8cb}.xml b/FMODStudio/Chapter07/Metadata/Asset/{ab2d50f9-072f-433d-950e-e62e89beb8cb}.xml new file mode 100644 index 0000000000000000000000000000000000000000..41ae102c0380bfa05f05401c8971a89747605439 --- /dev/null +++ b/FMODStudio/Chapter07/Metadata/Asset/{ab2d50f9-072f-433d-950e-e62e89beb8cb}.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="MasterAssetFolder" id="{ab2d50f9-072f-433d-950e-e62e89beb8cb}"/> +</objects> diff --git a/FMODStudio/Chapter07/Metadata/AudioFile/{29f71484-f9b1-46e9-8a57-36225ff5b91e}.xml b/FMODStudio/Chapter07/Metadata/AudioFile/{29f71484-f9b1-46e9-8a57-36225ff5b91e}.xml new file mode 100644 index 0000000000000000000000000000000000000000..61410eae17889ea253c0752f5a1969873bd2fe24 --- /dev/null +++ b/FMODStudio/Chapter07/Metadata/AudioFile/{29f71484-f9b1-46e9-8a57-36225ff5b91e}.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="AudioFile" id="{29f71484-f9b1-46e9-8a57-36225ff5b91e}"> + <property name="assetPath"> + <value>396013__morganpurkis__rustling-grass-2.wav</value> + </property> + <property name="frequencyInKHz"> + <value>48</value> + </property> + <property name="channelCount"> + <value>1</value> + </property> + <property name="length"> + <value>0.35222916666666665</value> + </property> + <relationship name="masterAssetFolder"> + <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter07/Metadata/AudioFile/{30490f9e-6bbf-4f91-9413-3bbbaffdfbc6}.xml b/FMODStudio/Chapter07/Metadata/AudioFile/{30490f9e-6bbf-4f91-9413-3bbbaffdfbc6}.xml new file mode 100644 index 0000000000000000000000000000000000000000..2541ae89b0052afb182821897332b325444c1641 --- /dev/null +++ b/FMODStudio/Chapter07/Metadata/AudioFile/{30490f9e-6bbf-4f91-9413-3bbbaffdfbc6}.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="AudioFile" id="{30490f9e-6bbf-4f91-9413-3bbbaffdfbc6}"> + <property name="assetPath"> + <value>396014__morganpurkis__rustling-grass-1.wav</value> + </property> + <property name="frequencyInKHz"> + <value>48</value> + </property> + <property name="channelCount"> + <value>1</value> + </property> + <property name="length"> + <value>0.29720833333333335</value> + </property> + <relationship name="masterAssetFolder"> + <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter07/Metadata/AudioFile/{3af94ac0-fc0d-4d4d-b78f-e0a8a5c6fdc5}.xml b/FMODStudio/Chapter07/Metadata/AudioFile/{3af94ac0-fc0d-4d4d-b78f-e0a8a5c6fdc5}.xml new file mode 100644 index 0000000000000000000000000000000000000000..c5cf4d46185b6605fb69f1b8c9a0596a5ab887f2 --- /dev/null +++ b/FMODStudio/Chapter07/Metadata/AudioFile/{3af94ac0-fc0d-4d4d-b78f-e0a8a5c6fdc5}.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="AudioFile" id="{3af94ac0-fc0d-4d4d-b78f-e0a8a5c6fdc5}"> + <property name="assetPath"> + <value>footstep02.ogg</value> + </property> + <property name="frequencyInKHz"> + <value>48</value> + </property> + <property name="channelCount"> + <value>2</value> + </property> + <property name="length"> + <value>0.24214583333333334</value> + </property> + <relationship name="masterAssetFolder"> + <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter07/Metadata/AudioFile/{4621b1dc-a4bc-4ca2-8e1c-a37b94ac3ddc}.xml b/FMODStudio/Chapter07/Metadata/AudioFile/{4621b1dc-a4bc-4ca2-8e1c-a37b94ac3ddc}.xml new file mode 100644 index 0000000000000000000000000000000000000000..7f7b1ee92add3b94d3f8a918f882091d80a320e1 --- /dev/null +++ b/FMODStudio/Chapter07/Metadata/AudioFile/{4621b1dc-a4bc-4ca2-8e1c-a37b94ac3ddc}.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="AudioFile" id="{4621b1dc-a4bc-4ca2-8e1c-a37b94ac3ddc}"> + <property name="assetPath"> + <value>footstep03.ogg</value> + </property> + <property name="frequencyInKHz"> + <value>48</value> + </property> + <property name="channelCount"> + <value>2</value> + </property> + <property name="length"> + <value>0.26902083333333332</value> + </property> + <relationship name="masterAssetFolder"> + <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter07/Metadata/AudioFile/{4d461ddc-3906-4ed0-b3dd-c179f0724fa3}.xml b/FMODStudio/Chapter07/Metadata/AudioFile/{4d461ddc-3906-4ed0-b3dd-c179f0724fa3}.xml new file mode 100644 index 0000000000000000000000000000000000000000..d1df0627c5c1f492d8b83a588a52a73d09fba394 --- /dev/null +++ b/FMODStudio/Chapter07/Metadata/AudioFile/{4d461ddc-3906-4ed0-b3dd-c179f0724fa3}.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="AudioFile" id="{4d461ddc-3906-4ed0-b3dd-c179f0724fa3}"> + <property name="assetPath"> + <value>396016__morganpurkis__rustling-grass-4.wav</value> + </property> + <property name="frequencyInKHz"> + <value>48</value> + </property> + <property name="channelCount"> + <value>1</value> + </property> + <property name="length"> + <value>0.38</value> + </property> + <relationship name="masterAssetFolder"> + <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter07/Metadata/AudioFile/{781cd1cd-8da7-44db-995d-f67b0ab3eac4}.xml b/FMODStudio/Chapter07/Metadata/AudioFile/{781cd1cd-8da7-44db-995d-f67b0ab3eac4}.xml new file mode 100644 index 0000000000000000000000000000000000000000..068b10071be67def95e0b96e3723b06afa822d6c --- /dev/null +++ b/FMODStudio/Chapter07/Metadata/AudioFile/{781cd1cd-8da7-44db-995d-f67b0ab3eac4}.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="AudioFile" id="{781cd1cd-8da7-44db-995d-f67b0ab3eac4}"> + <property name="assetPath"> + <value>footstep00.ogg</value> + </property> + <property name="frequencyInKHz"> + <value>48</value> + </property> + <property name="channelCount"> + <value>2</value> + </property> + <property name="length"> + <value>0.24885416666666665</value> + </property> + <relationship name="masterAssetFolder"> + <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter07/Metadata/AudioFile/{9b9edf48-2e21-4cbc-a4e0-d6d3410e0765}.xml b/FMODStudio/Chapter07/Metadata/AudioFile/{9b9edf48-2e21-4cbc-a4e0-d6d3410e0765}.xml new file mode 100644 index 0000000000000000000000000000000000000000..d9d06e8ad3ba94ad908e33e817978121e83fcafb --- /dev/null +++ b/FMODStudio/Chapter07/Metadata/AudioFile/{9b9edf48-2e21-4cbc-a4e0-d6d3410e0765}.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="AudioFile" id="{9b9edf48-2e21-4cbc-a4e0-d6d3410e0765}"> + <property name="assetPath"> + <value>explosion-1.ogg</value> + </property> + <property name="frequencyInKHz"> + <value>96</value> + </property> + <property name="channelCount"> + <value>1</value> + </property> + <property name="length"> + <value>1.3077812499999999</value> + </property> + <relationship name="masterAssetFolder"> + <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter07/Metadata/AudioFile/{ae46332e-e218-48f0-a1d3-581dbfec953e}.xml b/FMODStudio/Chapter07/Metadata/AudioFile/{ae46332e-e218-48f0-a1d3-581dbfec953e}.xml new file mode 100644 index 0000000000000000000000000000000000000000..121862b7427c090719fdb375232576b8d6c79c6d --- /dev/null +++ b/FMODStudio/Chapter07/Metadata/AudioFile/{ae46332e-e218-48f0-a1d3-581dbfec953e}.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="AudioFile" id="{ae46332e-e218-48f0-a1d3-581dbfec953e}"> + <property name="assetPath"> + <value>footstep05.ogg</value> + </property> + <property name="frequencyInKHz"> + <value>48</value> + </property> + <property name="channelCount"> + <value>2</value> + </property> + <property name="length"> + <value>0.27577083333333335</value> + </property> + <relationship name="masterAssetFolder"> + <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter07/Metadata/AudioFile/{afd51056-781b-47df-9c3a-254fcb7f8ae6}.xml b/FMODStudio/Chapter07/Metadata/AudioFile/{afd51056-781b-47df-9c3a-254fcb7f8ae6}.xml new file mode 100644 index 0000000000000000000000000000000000000000..9debcfb3cfdf23bc13df3789439ff59dd6e62525 --- /dev/null +++ b/FMODStudio/Chapter07/Metadata/AudioFile/{afd51056-781b-47df-9c3a-254fcb7f8ae6}.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="AudioFile" id="{afd51056-781b-47df-9c3a-254fcb7f8ae6}"> + <property name="assetPath"> + <value>footstep01.ogg</value> + </property> + <property name="frequencyInKHz"> + <value>48</value> + </property> + <property name="channelCount"> + <value>2</value> + </property> + <property name="length"> + <value>0.28247916666666667</value> + </property> + <relationship name="masterAssetFolder"> + <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter07/Metadata/AudioFile/{b7cf3153-7d60-4a0a-bdd4-a354ec6c8993}.xml b/FMODStudio/Chapter07/Metadata/AudioFile/{b7cf3153-7d60-4a0a-bdd4-a354ec6c8993}.xml new file mode 100644 index 0000000000000000000000000000000000000000..37a82b98381196658bfc911e241676c94e101ae9 --- /dev/null +++ b/FMODStudio/Chapter07/Metadata/AudioFile/{b7cf3153-7d60-4a0a-bdd4-a354ec6c8993}.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="AudioFile" id="{b7cf3153-7d60-4a0a-bdd4-a354ec6c8993}"> + <property name="assetPath"> + <value>footstep09.ogg</value> + </property> + <property name="frequencyInKHz"> + <value>48</value> + </property> + <property name="channelCount"> + <value>2</value> + </property> + <property name="length"> + <value>0.21522916666666667</value> + </property> + <relationship name="masterAssetFolder"> + <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter07/Metadata/AudioFile/{b90736d7-6748-46a4-8132-d9e364599d4d}.xml b/FMODStudio/Chapter07/Metadata/AudioFile/{b90736d7-6748-46a4-8132-d9e364599d4d}.xml new file mode 100644 index 0000000000000000000000000000000000000000..0405a81760d3d44991016d482bba827e92f2dace --- /dev/null +++ b/FMODStudio/Chapter07/Metadata/AudioFile/{b90736d7-6748-46a4-8132-d9e364599d4d}.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="AudioFile" id="{b90736d7-6748-46a4-8132-d9e364599d4d}"> + <property name="assetPath"> + <value>footstep08.ogg</value> + </property> + <property name="frequencyInKHz"> + <value>48</value> + </property> + <property name="channelCount"> + <value>2</value> + </property> + <property name="length"> + <value>0.25558333333333333</value> + </property> + <relationship name="masterAssetFolder"> + <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter07/Metadata/AudioFile/{cb9d108d-5891-42f0-aa51-85c5d30a06d8}.xml b/FMODStudio/Chapter07/Metadata/AudioFile/{cb9d108d-5891-42f0-aa51-85c5d30a06d8}.xml new file mode 100644 index 0000000000000000000000000000000000000000..69ad9c92d0d8d2fe467e8efc469f9664a88d9272 --- /dev/null +++ b/FMODStudio/Chapter07/Metadata/AudioFile/{cb9d108d-5891-42f0-aa51-85c5d30a06d8}.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="AudioFile" id="{cb9d108d-5891-42f0-aa51-85c5d30a06d8}"> + <property name="assetPath"> + <value>footstep04.ogg</value> + </property> + <property name="frequencyInKHz"> + <value>48</value> + </property> + <property name="channelCount"> + <value>2</value> + </property> + <property name="length"> + <value>0.32283333333333336</value> + </property> + <relationship name="masterAssetFolder"> + <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter07/Metadata/AudioFile/{cd92a3be-e8c1-4aef-870a-53de1e4a2620}.xml b/FMODStudio/Chapter07/Metadata/AudioFile/{cd92a3be-e8c1-4aef-870a-53de1e4a2620}.xml new file mode 100644 index 0000000000000000000000000000000000000000..68b46dbf7fd8ae79140315da9801c3c5c1ddfbdf --- /dev/null +++ b/FMODStudio/Chapter07/Metadata/AudioFile/{cd92a3be-e8c1-4aef-870a-53de1e4a2620}.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="AudioFile" id="{cd92a3be-e8c1-4aef-870a-53de1e4a2620}"> + <property name="assetPath"> + <value>footstep06.ogg</value> + </property> + <property name="frequencyInKHz"> + <value>48</value> + </property> + <property name="channelCount"> + <value>2</value> + </property> + <property name="length"> + <value>0.24212500000000001</value> + </property> + <relationship name="masterAssetFolder"> + <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter07/Metadata/AudioFile/{d0d48d00-9bc7-4dc5-96cf-5a0ce45ac0de}.xml b/FMODStudio/Chapter07/Metadata/AudioFile/{d0d48d00-9bc7-4dc5-96cf-5a0ce45ac0de}.xml new file mode 100644 index 0000000000000000000000000000000000000000..fa3534eafc68216fcc29adad994541bf8d749dc1 --- /dev/null +++ b/FMODStudio/Chapter07/Metadata/AudioFile/{d0d48d00-9bc7-4dc5-96cf-5a0ce45ac0de}.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="AudioFile" id="{d0d48d00-9bc7-4dc5-96cf-5a0ce45ac0de}"> + <property name="assetPath"> + <value>47835__tc630__fire2.wav</value> + </property> + <property name="isStreaming"> + <value>true</value> + </property> + <property name="frequencyInKHz"> + <value>48</value> + </property> + <property name="channelCount"> + <value>2</value> + </property> + <property name="length"> + <value>12</value> + </property> + <relationship name="masterAssetFolder"> + <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter07/Metadata/AudioFile/{d36fc405-0bac-458f-b9c1-1bdb47d98177}.xml b/FMODStudio/Chapter07/Metadata/AudioFile/{d36fc405-0bac-458f-b9c1-1bdb47d98177}.xml new file mode 100644 index 0000000000000000000000000000000000000000..e944b93c0666a149850e81483854c9f895823bd1 --- /dev/null +++ b/FMODStudio/Chapter07/Metadata/AudioFile/{d36fc405-0bac-458f-b9c1-1bdb47d98177}.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="AudioFile" id="{d36fc405-0bac-458f-b9c1-1bdb47d98177}"> + <property name="assetPath"> + <value>396012__morganpurkis__rustling-grass-3.wav</value> + </property> + <property name="frequencyInKHz"> + <value>48</value> + </property> + <property name="channelCount"> + <value>1</value> + </property> + <property name="length"> + <value>0.30106250000000001</value> + </property> + <relationship name="masterAssetFolder"> + <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter07/Metadata/AudioFile/{dce2073c-8d73-442b-a9ae-1ed541ed7de1}.xml b/FMODStudio/Chapter07/Metadata/AudioFile/{dce2073c-8d73-442b-a9ae-1ed541ed7de1}.xml new file mode 100644 index 0000000000000000000000000000000000000000..3795fdb6584d4fc26c3590d1bb229582ad8fab14 --- /dev/null +++ b/FMODStudio/Chapter07/Metadata/AudioFile/{dce2073c-8d73-442b-a9ae-1ed541ed7de1}.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="AudioFile" id="{dce2073c-8d73-442b-a9ae-1ed541ed7de1}"> + <property name="assetPath"> + <value>OutThere.ogg</value> + </property> + <property name="isStreaming"> + <value>true</value> + </property> + <property name="frequencyInKHz"> + <value>44.0999985</value> + </property> + <property name="channelCount"> + <value>2</value> + </property> + <property name="length"> + <value>242.00417233560091</value> + </property> + <relationship name="masterAssetFolder"> + <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter07/Metadata/AudioFile/{e8c8d3a3-c53a-49b8-85a0-6c46a7e81d03}.xml b/FMODStudio/Chapter07/Metadata/AudioFile/{e8c8d3a3-c53a-49b8-85a0-6c46a7e81d03}.xml new file mode 100644 index 0000000000000000000000000000000000000000..de4cf7335e926689bedd432d98d35bed71e47bfb --- /dev/null +++ b/FMODStudio/Chapter07/Metadata/AudioFile/{e8c8d3a3-c53a-49b8-85a0-6c46a7e81d03}.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="AudioFile" id="{e8c8d3a3-c53a-49b8-85a0-6c46a7e81d03}"> + <property name="assetPath"> + <value>footstep07.ogg</value> + </property> + <property name="frequencyInKHz"> + <value>48</value> + </property> + <property name="channelCount"> + <value>2</value> + </property> + <property name="length"> + <value>0.25558333333333333</value> + </property> + <relationship name="masterAssetFolder"> + <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter07/Metadata/Bank/{1de7b457-2173-4205-b8b6-7583e593ccd6}.xml b/FMODStudio/Chapter07/Metadata/Bank/{1de7b457-2173-4205-b8b6-7583e593ccd6}.xml new file mode 100644 index 0000000000000000000000000000000000000000..2360a63faa98802fd5019e8716f63036d98f3a77 --- /dev/null +++ b/FMODStudio/Chapter07/Metadata/Bank/{1de7b457-2173-4205-b8b6-7583e593ccd6}.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="MasterBank" id="{1de7b457-2173-4205-b8b6-7583e593ccd6}"> + <relationship name="folder"> + <destination>{24acc9ed-98e6-4f97-b384-7cedad0817ab}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter07/Metadata/BankFolder/{24acc9ed-98e6-4f97-b384-7cedad0817ab}.xml b/FMODStudio/Chapter07/Metadata/BankFolder/{24acc9ed-98e6-4f97-b384-7cedad0817ab}.xml new file mode 100644 index 0000000000000000000000000000000000000000..2f98f86eaadb4d478c0a3e298e70b229f0241b33 --- /dev/null +++ b/FMODStudio/Chapter07/Metadata/BankFolder/{24acc9ed-98e6-4f97-b384-7cedad0817ab}.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="MasterBankFolder" id="{24acc9ed-98e6-4f97-b384-7cedad0817ab}"/> +</objects> diff --git a/FMODStudio/Chapter07/Metadata/EncodingSetting/{36713264-83a3-4399-9bbf-fc81c28a0bd4}.xml b/FMODStudio/Chapter07/Metadata/EncodingSetting/{36713264-83a3-4399-9bbf-fc81c28a0bd4}.xml new file mode 100644 index 0000000000000000000000000000000000000000..20b5cf1e72ccc8d694eea3f123d10f2f18d4a61e --- /dev/null +++ b/FMODStudio/Chapter07/Metadata/EncodingSetting/{36713264-83a3-4399-9bbf-fc81c28a0bd4}.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="EncodingSetting" id="{36713264-83a3-4399-9bbf-fc81c28a0bd4}"> + <property name="encodingFormat"> + <value>3</value> + </property> + <property name="quality"> + <value>37</value> + </property> + <relationship name="platform"> + <destination>{3ceb98b4-072c-41c2-a593-48d343172e25}</destination> + </relationship> + <relationship name="encodable"> + <destination>{3ceb98b4-072c-41c2-a593-48d343172e25}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter07/Metadata/Event/{24b533f4-bf66-45ae-b191-6b149b3af663}.xml b/FMODStudio/Chapter07/Metadata/Event/{24b533f4-bf66-45ae-b191-6b149b3af663}.xml new file mode 100644 index 0000000000000000000000000000000000000000..b6af61519e734218e8a0b4803ac73adc8b8e8a59 --- /dev/null +++ b/FMODStudio/Chapter07/Metadata/Event/{24b533f4-bf66-45ae-b191-6b149b3af663}.xml @@ -0,0 +1,223 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="Event" id="{24b533f4-bf66-45ae-b191-6b149b3af663}"> + <property name="name"> + <value>Footstep</value> + </property> + <property name="outputFormat"> + <value>2</value> + </property> + <relationship name="folder"> + <destination>{94ff31b1-83b7-438f-a0c7-6a5fdd8ccbe5}</destination> + </relationship> + <relationship name="mixer"> + <destination>{a11de45e-e641-4cb8-abb5-86d699dd2612}</destination> + </relationship> + <relationship name="masterTrack"> + <destination>{1ce222ba-e0b7-40dd-927a-1c45d2626972}</destination> + </relationship> + <relationship name="mixerInput"> + <destination>{dbde1fad-5f73-49db-85b3-0d9fd720a94a}</destination> + </relationship> + <relationship name="automatableProperties"> + <destination>{89e81650-d1a4-42b1-96b4-20995d141847}</destination> + </relationship> + <relationship name="markerTracks"> + <destination>{b9305bb7-5c47-4c47-a83e-d21acd8ea659}</destination> + </relationship> + <relationship name="groupTracks"> + <destination>{b177c451-f4e8-4c2b-8ce8-820f7f8e4a01}</destination> + </relationship> + <relationship name="timeline"> + <destination>{92e5a1c5-6d35-4feb-8785-72dd1d39f9e4}</destination> + </relationship> + <relationship name="parameters"> + <destination>{0f01a5ab-4580-4032-a1d5-62a9d0a407e3}</destination> + </relationship> + <relationship name="banks"> + <destination>{1de7b457-2173-4205-b8b6-7583e593ccd6}</destination> + </relationship> + </object> + <object class="EventMixer" id="{a11de45e-e641-4cb8-abb5-86d699dd2612}"> + <relationship name="masterBus"> + <destination>{ba176c91-524d-4fc5-aae3-6255261929fe}</destination> + </relationship> + </object> + <object class="MasterTrack" id="{1ce222ba-e0b7-40dd-927a-1c45d2626972}"> + <relationship name="mixerGroup"> + <destination>{ba176c91-524d-4fc5-aae3-6255261929fe}</destination> + </relationship> + </object> + <object class="MixerInput" id="{dbde1fad-5f73-49db-85b3-0d9fd720a94a}"> + <relationship name="effectChain"> + <destination>{2ddd8554-18b8-41d8-afe1-a0e7b4ccc4a3}</destination> + </relationship> + <relationship name="panner"> + <destination>{2c27bfa2-dcfb-49fe-85dd-d596551ddb28}</destination> + </relationship> + <relationship name="output"> + <destination>{2f8936ee-464a-439f-87b1-fd6ef863df53}</destination> + </relationship> + </object> + <object class="EventAutomatableProperties" id="{89e81650-d1a4-42b1-96b4-20995d141847}"/> + <object class="MarkerTrack" id="{b9305bb7-5c47-4c47-a83e-d21acd8ea659}"/> + <object class="GroupTrack" id="{b177c451-f4e8-4c2b-8ce8-820f7f8e4a01}"> + <relationship name="modules"> + <destination>{b61e135e-9904-413a-b3dd-cdcee29b0e11}</destination> + <destination>{da122561-c0d8-4c38-9531-35f16186a94e}</destination> + </relationship> + <relationship name="mixerGroup"> + <destination>{6b864293-94a4-4b88-a5f0-4021ab3b7c2e}</destination> + </relationship> + </object> + <object class="Timeline" id="{92e5a1c5-6d35-4feb-8785-72dd1d39f9e4}"> + <relationship name="markers"> + <destination>{acd77d61-1c73-4791-ae17-07caaa3ee1a4}</destination> + </relationship> + </object> + <object class="GameParameter" id="{0f01a5ab-4580-4032-a1d5-62a9d0a407e3}"> + <property name="name"> + <value>Surface</value> + </property> + <relationship name="modules"> + <destination>{b61e135e-9904-413a-b3dd-cdcee29b0e11}</destination> + <destination>{da122561-c0d8-4c38-9531-35f16186a94e}</destination> + </relationship> + </object> + <object class="EventMixerMaster" id="{ba176c91-524d-4fc5-aae3-6255261929fe}"> + <property name="volume"> + <value>-3</value> + </property> + <relationship name="effectChain"> + <destination>{c5a18e7d-f413-4e38-85e4-f9cb0cee9172}</destination> + </relationship> + <relationship name="panner"> + <destination>{c54bfc2b-9db7-4243-81a6-5458ed074dda}</destination> + </relationship> + <relationship name="mixer"> + <destination>{a11de45e-e641-4cb8-abb5-86d699dd2612}</destination> + </relationship> + </object> + <object class="MixerBusEffectChain" id="{2ddd8554-18b8-41d8-afe1-a0e7b4ccc4a3}"> + <relationship name="effects"> + <destination>{a4bcef17-1b03-4a39-983d-78510ef1dd80}</destination> + </relationship> + </object> + <object class="MixerBusPanner" id="{2c27bfa2-dcfb-49fe-85dd-d596551ddb28}"/> + <object class="MultiSound" id="{b61e135e-9904-413a-b3dd-cdcee29b0e11}"> + <property name="length"> + <value>0.47999999999999998</value> + </property> + <relationship name="sounds"> + <destination>{5aa08a2a-6b3f-4974-8870-afe938dd6358}</destination> + <destination>{7b10fb66-c2e2-4c38-a3b4-8f8cd65b7c9c}</destination> + <destination>{057bef69-bebc-4a7a-9adc-975f7cea287c}</destination> + <destination>{6b3fc826-4269-498a-a638-cab18e36295f}</destination> + <destination>{22606bd2-deea-4cd9-8f89-0a1444a5200a}</destination> + </relationship> + </object> + <object class="MultiSound" id="{da122561-c0d8-4c38-9531-35f16186a94e}"> + <property name="start"> + <value>0.48999999999999999</value> + </property> + <property name="length"> + <value>0.46000000000000002</value> + </property> + <relationship name="sounds"> + <destination>{1696b7e7-faaf-436e-b037-ab66f17718ab}</destination> + <destination>{644228d3-30eb-405b-abdd-e784d00269cc}</destination> + <destination>{305eed1e-38f6-4ce2-b657-ffac64ed4c16}</destination> + <destination>{4c9b28cb-c4e5-46da-973f-f9fe7b9be8a6}</destination> + </relationship> + </object> + <object class="EventMixerGroup" id="{6b864293-94a4-4b88-a5f0-4021ab3b7c2e}"> + <property name="name"> + <value>Audio 1</value> + </property> + <relationship name="effectChain"> + <destination>{6c61f038-2097-43bf-8008-e9858c5e9d17}</destination> + </relationship> + <relationship name="panner"> + <destination>{89fe8be6-8c31-429c-a4f1-187fedf62d36}</destination> + </relationship> + <relationship name="output"> + <destination>{ba176c91-524d-4fc5-aae3-6255261929fe}</destination> + </relationship> + </object> + <object class="LoopRegion" id="{acd77d61-1c73-4791-ae17-07caaa3ee1a4}"> + <property name="position"> + <value>0.5</value> + </property> + <property name="length"> + <value>0.5</value> + </property> + <relationship name="timeline"> + <destination>{92e5a1c5-6d35-4feb-8785-72dd1d39f9e4}</destination> + </relationship> + <relationship name="markerTrack"> + <destination>{b9305bb7-5c47-4c47-a83e-d21acd8ea659}</destination> + </relationship> + </object> + <object class="MixerBusEffectChain" id="{c5a18e7d-f413-4e38-85e4-f9cb0cee9172}"> + <relationship name="effects"> + <destination>{a78fe94b-0eeb-4239-9188-1c89a67011c3}</destination> + <destination>{2f7e19fa-f8f8-4783-b19e-029bf94c9bc2}</destination> + </relationship> + </object> + <object class="MixerBusPanner" id="{c54bfc2b-9db7-4243-81a6-5458ed074dda}"/> + <object class="MixerBusFader" id="{a4bcef17-1b03-4a39-983d-78510ef1dd80}"/> + <object class="SingleSound" id="{5aa08a2a-6b3f-4974-8870-afe938dd6358}"> + <relationship name="audioFile"> + <destination>{3af94ac0-fc0d-4d4d-b78f-e0a8a5c6fdc5}</destination> + </relationship> + </object> + <object class="SingleSound" id="{7b10fb66-c2e2-4c38-a3b4-8f8cd65b7c9c}"> + <relationship name="audioFile"> + <destination>{cb9d108d-5891-42f0-aa51-85c5d30a06d8}</destination> + </relationship> + </object> + <object class="SingleSound" id="{057bef69-bebc-4a7a-9adc-975f7cea287c}"> + <relationship name="audioFile"> + <destination>{ae46332e-e218-48f0-a1d3-581dbfec953e}</destination> + </relationship> + </object> + <object class="SingleSound" id="{6b3fc826-4269-498a-a638-cab18e36295f}"> + <relationship name="audioFile"> + <destination>{cd92a3be-e8c1-4aef-870a-53de1e4a2620}</destination> + </relationship> + </object> + <object class="SingleSound" id="{22606bd2-deea-4cd9-8f89-0a1444a5200a}"> + <relationship name="audioFile"> + <destination>{b7cf3153-7d60-4a0a-bdd4-a354ec6c8993}</destination> + </relationship> + </object> + <object class="SingleSound" id="{1696b7e7-faaf-436e-b037-ab66f17718ab}"> + <relationship name="audioFile"> + <destination>{d36fc405-0bac-458f-b9c1-1bdb47d98177}</destination> + </relationship> + </object> + <object class="SingleSound" id="{644228d3-30eb-405b-abdd-e784d00269cc}"> + <relationship name="audioFile"> + <destination>{29f71484-f9b1-46e9-8a57-36225ff5b91e}</destination> + </relationship> + </object> + <object class="SingleSound" id="{305eed1e-38f6-4ce2-b657-ffac64ed4c16}"> + <relationship name="audioFile"> + <destination>{30490f9e-6bbf-4f91-9413-3bbbaffdfbc6}</destination> + </relationship> + </object> + <object class="SingleSound" id="{4c9b28cb-c4e5-46da-973f-f9fe7b9be8a6}"> + <relationship name="audioFile"> + <destination>{4d461ddc-3906-4ed0-b3dd-c179f0724fa3}</destination> + </relationship> + </object> + <object class="MixerBusEffectChain" id="{6c61f038-2097-43bf-8008-e9858c5e9d17}"> + <relationship name="effects"> + <destination>{2a5316f0-3b4f-41e9-b6f9-da90dad1bb89}</destination> + </relationship> + </object> + <object class="MixerBusPanner" id="{89fe8be6-8c31-429c-a4f1-187fedf62d36}"/> + <object class="MixerBusFader" id="{a78fe94b-0eeb-4239-9188-1c89a67011c3}"/> + <object class="SpatialiserEffect" id="{2f7e19fa-f8f8-4783-b19e-029bf94c9bc2}"/> + <object class="MixerBusFader" id="{2a5316f0-3b4f-41e9-b6f9-da90dad1bb89}"/> +</objects> diff --git a/FMODStudio/Chapter07/Metadata/Event/{8b09005b-94f1-42b6-94e0-2d2da4d59fd0}.xml b/FMODStudio/Chapter07/Metadata/Event/{8b09005b-94f1-42b6-94e0-2d2da4d59fd0}.xml new file mode 100644 index 0000000000000000000000000000000000000000..f53a57ffebc1c7512b7bc13c1e88930e49f32c93 --- /dev/null +++ b/FMODStudio/Chapter07/Metadata/Event/{8b09005b-94f1-42b6-94e0-2d2da4d59fd0}.xml @@ -0,0 +1,149 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="Event" id="{8b09005b-94f1-42b6-94e0-2d2da4d59fd0}"> + <property name="name"> + <value>Music</value> + </property> + <property name="outputFormat"> + <value>1</value> + </property> + <relationship name="folder"> + <destination>{94ff31b1-83b7-438f-a0c7-6a5fdd8ccbe5}</destination> + </relationship> + <relationship name="mixer"> + <destination>{652ae7e8-15f7-4c27-b39b-1d5c449ec129}</destination> + </relationship> + <relationship name="masterTrack"> + <destination>{b5d354bb-76ab-45cf-80d9-fd9a3a9e2bee}</destination> + </relationship> + <relationship name="mixerInput"> + <destination>{2845a836-dd4a-4d11-a2b5-e3e0ec19d966}</destination> + </relationship> + <relationship name="automatableProperties"> + <destination>{c24fb5a4-242c-4412-887a-f01127b56449}</destination> + </relationship> + <relationship name="markerTracks"> + <destination>{2c9ab12d-8f90-4fb8-94a9-7c767ff5120e}</destination> + </relationship> + <relationship name="groupTracks"> + <destination>{42b4ccd8-6d27-47b6-955b-8352c4718461}</destination> + </relationship> + <relationship name="timeline"> + <destination>{95587d04-c275-449d-b518-bdd25bd9b4ad}</destination> + </relationship> + <relationship name="banks"> + <destination>{1de7b457-2173-4205-b8b6-7583e593ccd6}</destination> + </relationship> + </object> + <object class="EventMixer" id="{652ae7e8-15f7-4c27-b39b-1d5c449ec129}"> + <relationship name="masterBus"> + <destination>{13deaf11-8357-46f5-8ec9-913dceeb7fa4}</destination> + </relationship> + </object> + <object class="MasterTrack" id="{b5d354bb-76ab-45cf-80d9-fd9a3a9e2bee}"> + <relationship name="mixerGroup"> + <destination>{13deaf11-8357-46f5-8ec9-913dceeb7fa4}</destination> + </relationship> + </object> + <object class="MixerInput" id="{2845a836-dd4a-4d11-a2b5-e3e0ec19d966}"> + <relationship name="effectChain"> + <destination>{5b3b422e-6f12-454c-9723-88b2fdb5aa84}</destination> + </relationship> + <relationship name="panner"> + <destination>{8151b2c2-923f-445d-9d3a-1cc6430a7400}</destination> + </relationship> + <relationship name="output"> + <destination>{76ef365d-f7b5-4307-94f2-d4ac2facaad5}</destination> + </relationship> + </object> + <object class="EventAutomatableProperties" id="{c24fb5a4-242c-4412-887a-f01127b56449}"> + <property name="maxVoices"> + <value>1</value> + </property> + </object> + <object class="MarkerTrack" id="{2c9ab12d-8f90-4fb8-94a9-7c767ff5120e}"/> + <object class="GroupTrack" id="{42b4ccd8-6d27-47b6-955b-8352c4718461}"> + <relationship name="modules"> + <destination>{bb0d2e20-4222-4fda-bd99-8750712452cd}</destination> + </relationship> + <relationship name="mixerGroup"> + <destination>{f846effe-4954-457b-aede-6af0b4d6134d}</destination> + </relationship> + </object> + <object class="Timeline" id="{95587d04-c275-449d-b518-bdd25bd9b4ad}"> + <relationship name="modules"> + <destination>{bb0d2e20-4222-4fda-bd99-8750712452cd}</destination> + </relationship> + <relationship name="markers"> + <destination>{882b9711-3d4f-486e-b3d4-24aa7276dab7}</destination> + </relationship> + </object> + <object class="EventMixerMaster" id="{13deaf11-8357-46f5-8ec9-913dceeb7fa4}"> + <relationship name="effectChain"> + <destination>{0f7b50c9-9036-4693-9b10-982ad43cb42e}</destination> + </relationship> + <relationship name="panner"> + <destination>{34dbfcda-d83f-429a-ad6f-344394794ed5}</destination> + </relationship> + <relationship name="mixer"> + <destination>{652ae7e8-15f7-4c27-b39b-1d5c449ec129}</destination> + </relationship> + </object> + <object class="MixerBusEffectChain" id="{5b3b422e-6f12-454c-9723-88b2fdb5aa84}"> + <relationship name="effects"> + <destination>{45ae97a9-da0d-45f3-973d-e8191b0df725}</destination> + </relationship> + </object> + <object class="MixerBusPanner" id="{8151b2c2-923f-445d-9d3a-1cc6430a7400}"/> + <object class="SingleSound" id="{bb0d2e20-4222-4fda-bd99-8750712452cd}"> + <property name="length"> + <value>242.00417233560091</value> + </property> + <relationship name="audioFile"> + <destination>{dce2073c-8d73-442b-a9ae-1ed541ed7de1}</destination> + </relationship> + </object> + <object class="EventMixerGroup" id="{f846effe-4954-457b-aede-6af0b4d6134d}"> + <property name="name"> + <value>Audio 1</value> + </property> + <relationship name="effectChain"> + <destination>{1f0bb221-045c-44f3-9630-81620b58a46f}</destination> + </relationship> + <relationship name="panner"> + <destination>{f7ea7221-630d-4489-90ae-fe4b294fbe38}</destination> + </relationship> + <relationship name="output"> + <destination>{13deaf11-8357-46f5-8ec9-913dceeb7fa4}</destination> + </relationship> + </object> + <object class="LoopRegion" id="{882b9711-3d4f-486e-b3d4-24aa7276dab7}"> + <property name="position"> + <value>0</value> + </property> + <property name="length"> + <value>242.00417233560091</value> + </property> + <relationship name="timeline"> + <destination>{95587d04-c275-449d-b518-bdd25bd9b4ad}</destination> + </relationship> + <relationship name="markerTrack"> + <destination>{2c9ab12d-8f90-4fb8-94a9-7c767ff5120e}</destination> + </relationship> + </object> + <object class="MixerBusEffectChain" id="{0f7b50c9-9036-4693-9b10-982ad43cb42e}"> + <relationship name="effects"> + <destination>{fc06cce3-1e26-4354-a470-75f0126167b6}</destination> + </relationship> + </object> + <object class="MixerBusPanner" id="{34dbfcda-d83f-429a-ad6f-344394794ed5}"/> + <object class="MixerBusFader" id="{45ae97a9-da0d-45f3-973d-e8191b0df725}"/> + <object class="MixerBusEffectChain" id="{1f0bb221-045c-44f3-9630-81620b58a46f}"> + <relationship name="effects"> + <destination>{68a2a3fb-0579-45c6-ba8c-6ad9ac1bff7c}</destination> + </relationship> + </object> + <object class="MixerBusPanner" id="{f7ea7221-630d-4489-90ae-fe4b294fbe38}"/> + <object class="MixerBusFader" id="{fc06cce3-1e26-4354-a470-75f0126167b6}"/> + <object class="MixerBusFader" id="{68a2a3fb-0579-45c6-ba8c-6ad9ac1bff7c}"/> +</objects> diff --git a/FMODStudio/Chapter07/Metadata/Event/{a32c33d9-06f7-4dda-ad05-ca17ae0f080a}.xml b/FMODStudio/Chapter07/Metadata/Event/{a32c33d9-06f7-4dda-ad05-ca17ae0f080a}.xml new file mode 100644 index 0000000000000000000000000000000000000000..366e90b427e8679dd0f403f3d7bc2a78d61bca9f --- /dev/null +++ b/FMODStudio/Chapter07/Metadata/Event/{a32c33d9-06f7-4dda-ad05-ca17ae0f080a}.xml @@ -0,0 +1,128 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="Event" id="{a32c33d9-06f7-4dda-ad05-ca17ae0f080a}"> + <property name="name"> + <value>Explosion2D</value> + </property> + <property name="outputFormat"> + <value>0</value> + </property> + <relationship name="folder"> + <destination>{94ff31b1-83b7-438f-a0c7-6a5fdd8ccbe5}</destination> + </relationship> + <relationship name="mixer"> + <destination>{0c200fe8-ef03-41b2-a33e-f329ea70fa49}</destination> + </relationship> + <relationship name="masterTrack"> + <destination>{5a576b5d-12f5-4fbf-b629-599050f183fd}</destination> + </relationship> + <relationship name="mixerInput"> + <destination>{2a4c8bdc-1196-4954-a2a1-5898510d6bdf}</destination> + </relationship> + <relationship name="automatableProperties"> + <destination>{10e583b7-75cc-4612-880c-5693be1465ec}</destination> + </relationship> + <relationship name="markerTracks"> + <destination>{d0f8d6d6-d8de-48a0-8a19-c30a1c98a9b6}</destination> + </relationship> + <relationship name="groupTracks"> + <destination>{276c7461-c265-487b-bff8-e7efcffa34c3}</destination> + </relationship> + <relationship name="timeline"> + <destination>{fe779d63-2f9d-434f-9b16-f439515b3588}</destination> + </relationship> + <relationship name="banks"> + <destination>{1de7b457-2173-4205-b8b6-7583e593ccd6}</destination> + </relationship> + </object> + <object class="EventMixer" id="{0c200fe8-ef03-41b2-a33e-f329ea70fa49}"> + <relationship name="masterBus"> + <destination>{f74471e8-1bd6-4cbb-9a5b-96a03303bad7}</destination> + </relationship> + </object> + <object class="MasterTrack" id="{5a576b5d-12f5-4fbf-b629-599050f183fd}"> + <relationship name="mixerGroup"> + <destination>{f74471e8-1bd6-4cbb-9a5b-96a03303bad7}</destination> + </relationship> + </object> + <object class="MixerInput" id="{2a4c8bdc-1196-4954-a2a1-5898510d6bdf}"> + <relationship name="effectChain"> + <destination>{c159b6c4-a2a1-4c5d-9fce-52e3e21725ec}</destination> + </relationship> + <relationship name="panner"> + <destination>{785f6a4b-fae5-4f10-9a6e-dd62f6db7150}</destination> + </relationship> + <relationship name="output"> + <destination>{2f8936ee-464a-439f-87b1-fd6ef863df53}</destination> + </relationship> + </object> + <object class="EventAutomatableProperties" id="{10e583b7-75cc-4612-880c-5693be1465ec}"/> + <object class="MarkerTrack" id="{d0f8d6d6-d8de-48a0-8a19-c30a1c98a9b6}"/> + <object class="GroupTrack" id="{276c7461-c265-487b-bff8-e7efcffa34c3}"> + <relationship name="modules"> + <destination>{05685d82-5fb6-43e2-9d32-008e5ac9cbbd}</destination> + </relationship> + <relationship name="mixerGroup"> + <destination>{b894c117-c8bb-45d0-945c-241b252db332}</destination> + </relationship> + </object> + <object class="Timeline" id="{fe779d63-2f9d-434f-9b16-f439515b3588}"> + <relationship name="modules"> + <destination>{05685d82-5fb6-43e2-9d32-008e5ac9cbbd}</destination> + </relationship> + </object> + <object class="EventMixerMaster" id="{f74471e8-1bd6-4cbb-9a5b-96a03303bad7}"> + <relationship name="effectChain"> + <destination>{f5c90c8c-b038-4b9f-a0fc-8f3ac1431492}</destination> + </relationship> + <relationship name="panner"> + <destination>{01a5cbcb-8140-403e-b030-6f358dd29798}</destination> + </relationship> + <relationship name="mixer"> + <destination>{0c200fe8-ef03-41b2-a33e-f329ea70fa49}</destination> + </relationship> + </object> + <object class="MixerBusEffectChain" id="{c159b6c4-a2a1-4c5d-9fce-52e3e21725ec}"> + <relationship name="effects"> + <destination>{0c25f735-02f9-43f2-9e96-93a6efcbc942}</destination> + </relationship> + </object> + <object class="MixerBusPanner" id="{785f6a4b-fae5-4f10-9a6e-dd62f6db7150}"/> + <object class="SingleSound" id="{05685d82-5fb6-43e2-9d32-008e5ac9cbbd}"> + <property name="length"> + <value>1.3077812499999999</value> + </property> + <relationship name="audioFile"> + <destination>{9b9edf48-2e21-4cbc-a4e0-d6d3410e0765}</destination> + </relationship> + </object> + <object class="EventMixerGroup" id="{b894c117-c8bb-45d0-945c-241b252db332}"> + <property name="name"> + <value>Audio 1</value> + </property> + <relationship name="effectChain"> + <destination>{de1180ca-a608-424e-99e5-c5530494be4c}</destination> + </relationship> + <relationship name="panner"> + <destination>{e645a15f-ace5-43dc-ac2f-e18066bce918}</destination> + </relationship> + <relationship name="output"> + <destination>{f74471e8-1bd6-4cbb-9a5b-96a03303bad7}</destination> + </relationship> + </object> + <object class="MixerBusEffectChain" id="{f5c90c8c-b038-4b9f-a0fc-8f3ac1431492}"> + <relationship name="effects"> + <destination>{63b9b54c-7869-4b3f-a7fe-6a4319b98415}</destination> + </relationship> + </object> + <object class="MixerBusPanner" id="{01a5cbcb-8140-403e-b030-6f358dd29798}"/> + <object class="MixerBusFader" id="{0c25f735-02f9-43f2-9e96-93a6efcbc942}"/> + <object class="MixerBusEffectChain" id="{de1180ca-a608-424e-99e5-c5530494be4c}"> + <relationship name="effects"> + <destination>{02d36313-1557-497b-a362-f2785779ed3b}</destination> + </relationship> + </object> + <object class="MixerBusPanner" id="{e645a15f-ace5-43dc-ac2f-e18066bce918}"/> + <object class="MixerBusFader" id="{63b9b54c-7869-4b3f-a7fe-6a4319b98415}"/> + <object class="MixerBusFader" id="{02d36313-1557-497b-a362-f2785779ed3b}"/> +</objects> diff --git a/FMODStudio/Chapter07/Metadata/Event/{d0bd18e0-a471-46d7-98b4-c6255d379c57}.xml b/FMODStudio/Chapter07/Metadata/Event/{d0bd18e0-a471-46d7-98b4-c6255d379c57}.xml new file mode 100644 index 0000000000000000000000000000000000000000..bb9fa5e54c857c42a1554c2fce815668c04ad889 --- /dev/null +++ b/FMODStudio/Chapter07/Metadata/Event/{d0bd18e0-a471-46d7-98b4-c6255d379c57}.xml @@ -0,0 +1,158 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="Event" id="{d0bd18e0-a471-46d7-98b4-c6255d379c57}"> + <property name="name"> + <value>FireLoop</value> + </property> + <property name="outputFormat"> + <value>2</value> + </property> + <relationship name="folder"> + <destination>{94ff31b1-83b7-438f-a0c7-6a5fdd8ccbe5}</destination> + </relationship> + <relationship name="mixer"> + <destination>{43ccff50-76bb-42ec-a323-1b1fadd93acd}</destination> + </relationship> + <relationship name="masterTrack"> + <destination>{4b29d8d2-8590-4d74-93d9-667d16b6e64b}</destination> + </relationship> + <relationship name="mixerInput"> + <destination>{43769adb-5da4-4782-a4fd-bb99c1bf16ab}</destination> + </relationship> + <relationship name="automatableProperties"> + <destination>{f4ccddc0-edf3-407e-811e-aa81420df867}</destination> + </relationship> + <relationship name="markerTracks"> + <destination>{d5d6e79d-d429-411f-beea-458acbad084d}</destination> + </relationship> + <relationship name="groupTracks"> + <destination>{a7b7130f-b2e8-4d76-beb5-1e8f0d61f998}</destination> + </relationship> + <relationship name="timeline"> + <destination>{b4607d8b-4038-4022-8a70-f663251bd602}</destination> + </relationship> + <relationship name="banks"> + <destination>{1de7b457-2173-4205-b8b6-7583e593ccd6}</destination> + </relationship> + </object> + <object class="EventMixer" id="{43ccff50-76bb-42ec-a323-1b1fadd93acd}"> + <relationship name="masterBus"> + <destination>{167a6239-d50b-4574-8866-ca3ec901d7cc}</destination> + </relationship> + </object> + <object class="MasterTrack" id="{4b29d8d2-8590-4d74-93d9-667d16b6e64b}"> + <relationship name="mixerGroup"> + <destination>{167a6239-d50b-4574-8866-ca3ec901d7cc}</destination> + </relationship> + </object> + <object class="MixerInput" id="{43769adb-5da4-4782-a4fd-bb99c1bf16ab}"> + <relationship name="effectChain"> + <destination>{d6bac136-0d1f-4e55-866f-15a62cfc64ce}</destination> + </relationship> + <relationship name="panner"> + <destination>{004f404c-6b97-4d73-986b-a1d7c2011782}</destination> + </relationship> + <relationship name="output"> + <destination>{2f8936ee-464a-439f-87b1-fd6ef863df53}</destination> + </relationship> + </object> + <object class="EventAutomatableProperties" id="{f4ccddc0-edf3-407e-811e-aa81420df867}"> + <property name="dopplerEnabled"> + <value>true</value> + </property> + </object> + <object class="MarkerTrack" id="{d5d6e79d-d429-411f-beea-458acbad084d}"/> + <object class="GroupTrack" id="{a7b7130f-b2e8-4d76-beb5-1e8f0d61f998}"> + <relationship name="modules"> + <destination>{0b222f59-3adb-4f3a-8f1a-327ac8453859}</destination> + </relationship> + <relationship name="mixerGroup"> + <destination>{ddfbcfb1-6025-414d-9954-7c0cd74bf455}</destination> + </relationship> + </object> + <object class="Timeline" id="{b4607d8b-4038-4022-8a70-f663251bd602}"> + <relationship name="modules"> + <destination>{0b222f59-3adb-4f3a-8f1a-327ac8453859}</destination> + </relationship> + <relationship name="markers"> + <destination>{260658cb-ea39-48ba-b9ee-b3abfb6fb510}</destination> + </relationship> + </object> + <object class="EventMixerMaster" id="{167a6239-d50b-4574-8866-ca3ec901d7cc}"> + <relationship name="effectChain"> + <destination>{2a0c1f15-0452-4f46-b7e5-6488bb760951}</destination> + </relationship> + <relationship name="panner"> + <destination>{d0441bf1-97be-4ddf-8e1c-288fd8b895c5}</destination> + </relationship> + <relationship name="mixer"> + <destination>{43ccff50-76bb-42ec-a323-1b1fadd93acd}</destination> + </relationship> + </object> + <object class="MixerBusEffectChain" id="{d6bac136-0d1f-4e55-866f-15a62cfc64ce}"> + <relationship name="effects"> + <destination>{3047f345-1131-41f9-8c16-e3cf4461acc0}</destination> + </relationship> + </object> + <object class="MixerBusPanner" id="{004f404c-6b97-4d73-986b-a1d7c2011782}"/> + <object class="SingleSound" id="{0b222f59-3adb-4f3a-8f1a-327ac8453859}"> + <property name="length"> + <value>12</value> + </property> + <relationship name="audioFile"> + <destination>{d0d48d00-9bc7-4dc5-96cf-5a0ce45ac0de}</destination> + </relationship> + </object> + <object class="EventMixerGroup" id="{ddfbcfb1-6025-414d-9954-7c0cd74bf455}"> + <property name="name"> + <value>Audio 1</value> + </property> + <relationship name="effectChain"> + <destination>{dcbbeea6-daf6-4b5c-b5f9-9f8051c47161}</destination> + </relationship> + <relationship name="panner"> + <destination>{fe4008bd-4375-44dc-997c-b5baaf862bcf}</destination> + </relationship> + <relationship name="output"> + <destination>{167a6239-d50b-4574-8866-ca3ec901d7cc}</destination> + </relationship> + </object> + <object class="LoopRegion" id="{260658cb-ea39-48ba-b9ee-b3abfb6fb510}"> + <property name="position"> + <value>0</value> + </property> + <property name="length"> + <value>12</value> + </property> + <relationship name="timeline"> + <destination>{b4607d8b-4038-4022-8a70-f663251bd602}</destination> + </relationship> + <relationship name="markerTrack"> + <destination>{d5d6e79d-d429-411f-beea-458acbad084d}</destination> + </relationship> + </object> + <object class="MixerBusEffectChain" id="{2a0c1f15-0452-4f46-b7e5-6488bb760951}"> + <relationship name="effects"> + <destination>{e1dd9176-d7ed-47e4-9dba-429d284c834a}</destination> + <destination>{4b38af07-b95f-4ced-ad3f-a30779a19fbe}</destination> + </relationship> + </object> + <object class="MixerBusPanner" id="{d0441bf1-97be-4ddf-8e1c-288fd8b895c5}"/> + <object class="MixerBusFader" id="{3047f345-1131-41f9-8c16-e3cf4461acc0}"/> + <object class="MixerBusEffectChain" id="{dcbbeea6-daf6-4b5c-b5f9-9f8051c47161}"> + <relationship name="effects"> + <destination>{faab69b2-7388-45d4-a359-fcc1b75e1941}</destination> + </relationship> + </object> + <object class="MixerBusPanner" id="{fe4008bd-4375-44dc-997c-b5baaf862bcf}"/> + <object class="MixerBusFader" id="{e1dd9176-d7ed-47e4-9dba-429d284c834a}"/> + <object class="SpatialiserEffect" id="{4b38af07-b95f-4ced-ad3f-a30779a19fbe}"> + <property name="minimumDistance"> + <value>10</value> + </property> + <property name="maximumDistance"> + <value>500</value> + </property> + </object> + <object class="MixerBusFader" id="{faab69b2-7388-45d4-a359-fcc1b75e1941}"/> +</objects> diff --git a/FMODStudio/Chapter07/Metadata/EventFolder/{94ff31b1-83b7-438f-a0c7-6a5fdd8ccbe5}.xml b/FMODStudio/Chapter07/Metadata/EventFolder/{94ff31b1-83b7-438f-a0c7-6a5fdd8ccbe5}.xml new file mode 100644 index 0000000000000000000000000000000000000000..ef49e5f2827f357f8e96daea36b23b70b4b4b532 --- /dev/null +++ b/FMODStudio/Chapter07/Metadata/EventFolder/{94ff31b1-83b7-438f-a0c7-6a5fdd8ccbe5}.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="MasterEventFolder" id="{94ff31b1-83b7-438f-a0c7-6a5fdd8ccbe5}"> + <property name="name"> + <value>Master</value> + </property> + </object> +</objects> diff --git a/FMODStudio/Chapter07/Metadata/Group/{2f8936ee-464a-439f-87b1-fd6ef863df53}.xml b/FMODStudio/Chapter07/Metadata/Group/{2f8936ee-464a-439f-87b1-fd6ef863df53}.xml new file mode 100644 index 0000000000000000000000000000000000000000..e9099772afb48ae7a72336d3726e81bfb4aaec04 --- /dev/null +++ b/FMODStudio/Chapter07/Metadata/Group/{2f8936ee-464a-439f-87b1-fd6ef863df53}.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="MixerGroup" id="{2f8936ee-464a-439f-87b1-fd6ef863df53}"> + <property name="name"> + <value>SFX</value> + </property> + <relationship name="effectChain"> + <destination>{5842e9b3-7009-4375-baae-14ec06b49291}</destination> + </relationship> + <relationship name="panner"> + <destination>{06e83998-8e4b-4159-b433-53e5d4bf09d0}</destination> + </relationship> + <relationship name="output"> + <destination>{f6284d8c-9099-4e06-b8ed-f5b0509d696f}</destination> + </relationship> + </object> + <object class="MixerBusEffectChain" id="{5842e9b3-7009-4375-baae-14ec06b49291}"> + <relationship name="effects"> + <destination>{f51b3c20-1d85-4ebe-b925-2ac06fcfa234}</destination> + <destination>{93649bf1-d431-40b0-8bed-fc9eb1d3e422}</destination> + </relationship> + </object> + <object class="MixerBusPanner" id="{06e83998-8e4b-4159-b433-53e5d4bf09d0}"/> + <object class="MixerBusFader" id="{f51b3c20-1d85-4ebe-b925-2ac06fcfa234}"/> + <object class="MixerSend" id="{93649bf1-d431-40b0-8bed-fc9eb1d3e422}"> + <property name="inputFormat"> + <value>2</value> + </property> + <relationship name="mixerReturn"> + <destination>{b34471c3-ebd2-4b54-b5e3-5f5beff1b202}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter07/Metadata/Group/{76ef365d-f7b5-4307-94f2-d4ac2facaad5}.xml b/FMODStudio/Chapter07/Metadata/Group/{76ef365d-f7b5-4307-94f2-d4ac2facaad5}.xml new file mode 100644 index 0000000000000000000000000000000000000000..24b52537c30628f69e269ecc4283bb5f3f5d9207 --- /dev/null +++ b/FMODStudio/Chapter07/Metadata/Group/{76ef365d-f7b5-4307-94f2-d4ac2facaad5}.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="MixerGroup" id="{76ef365d-f7b5-4307-94f2-d4ac2facaad5}"> + <property name="name"> + <value>Music</value> + </property> + <relationship name="effectChain"> + <destination>{ca3d7968-34c3-45c1-bf77-5f54f7c0336f}</destination> + </relationship> + <relationship name="panner"> + <destination>{7c58a011-e554-470e-979a-e30cb8c16c64}</destination> + </relationship> + <relationship name="output"> + <destination>{f6284d8c-9099-4e06-b8ed-f5b0509d696f}</destination> + </relationship> + </object> + <object class="MixerBusEffectChain" id="{ca3d7968-34c3-45c1-bf77-5f54f7c0336f}"> + <relationship name="effects"> + <destination>{54f6181e-cb2c-4ce8-9267-1129ab157913}</destination> + </relationship> + </object> + <object class="MixerBusPanner" id="{7c58a011-e554-470e-979a-e30cb8c16c64}"/> + <object class="MixerBusFader" id="{54f6181e-cb2c-4ce8-9267-1129ab157913}"/> +</objects> diff --git a/FMODStudio/Chapter07/Metadata/Master.xml b/FMODStudio/Chapter07/Metadata/Master.xml new file mode 100644 index 0000000000000000000000000000000000000000..a067d4aa8330fe34a0d2cf82a47115f46a97b594 --- /dev/null +++ b/FMODStudio/Chapter07/Metadata/Master.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="MixerMaster" id="{f6284d8c-9099-4e06-b8ed-f5b0509d696f}"> + <property name="name"> + <value>Master Bus</value> + </property> + <relationship name="effectChain"> + <destination>{6f6aaf39-d1e7-45c5-8c49-6711f0d04343}</destination> + </relationship> + <relationship name="panner"> + <destination>{22f5cb64-aa51-40bb-bbf5-816d957b1265}</destination> + </relationship> + <relationship name="mixer"> + <destination>{5130d9cb-07e8-4c02-885e-e27da18e8319}</destination> + </relationship> + </object> + <object class="MixerBusEffectChain" id="{6f6aaf39-d1e7-45c5-8c49-6711f0d04343}"> + <relationship name="effects"> + <destination>{55bed217-be2c-4489-8e9b-415c7c295e7d}</destination> + </relationship> + </object> + <object class="MixerBusPanner" id="{22f5cb64-aa51-40bb-bbf5-816d957b1265}"/> + <object class="MixerBusFader" id="{55bed217-be2c-4489-8e9b-415c7c295e7d}"/> +</objects> diff --git a/FMODStudio/Chapter07/Metadata/Mixer.xml b/FMODStudio/Chapter07/Metadata/Mixer.xml new file mode 100644 index 0000000000000000000000000000000000000000..96e3852f915cc7ae252e9b5a227df93e70c6daf5 --- /dev/null +++ b/FMODStudio/Chapter07/Metadata/Mixer.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="Mixer" id="{5130d9cb-07e8-4c02-885e-e27da18e8319}"> + <relationship name="masterBus"> + <destination>{f6284d8c-9099-4e06-b8ed-f5b0509d696f}</destination> + </relationship> + <relationship name="snapshotList"> + <destination>{6dc45fff-38d8-417c-8652-91bba6f7500f}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter07/Metadata/Return/{b34471c3-ebd2-4b54-b5e3-5f5beff1b202}.xml b/FMODStudio/Chapter07/Metadata/Return/{b34471c3-ebd2-4b54-b5e3-5f5beff1b202}.xml new file mode 100644 index 0000000000000000000000000000000000000000..ffac110dc71edd06bd1a2cdd6d427d26a91a3ee5 --- /dev/null +++ b/FMODStudio/Chapter07/Metadata/Return/{b34471c3-ebd2-4b54-b5e3-5f5beff1b202}.xml @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="MixerReturn" id="{b34471c3-ebd2-4b54-b5e3-5f5beff1b202}"> + <property name="overridingInputFormat"> + <value>2</value> + </property> + <property name="inputFormatOverridden"> + <value>true</value> + </property> + <property name="name"> + <value>Reverb</value> + </property> + <relationship name="effectChain"> + <destination>{7ba27032-da32-43d1-b1de-67394509150d}</destination> + </relationship> + <relationship name="panner"> + <destination>{ea645dfd-3ced-4e6d-996b-2e727f18d8ce}</destination> + </relationship> + <relationship name="output"> + <destination>{f6284d8c-9099-4e06-b8ed-f5b0509d696f}</destination> + </relationship> + </object> + <object class="MixerBusEffectChain" id="{7ba27032-da32-43d1-b1de-67394509150d}"> + <relationship name="effects"> + <destination>{86dcc538-5923-4ebb-a6aa-d1f286f1272d}</destination> + <destination>{0b091950-22de-4f23-8818-58efac44d769}</destination> + </relationship> + </object> + <object class="MixerBusPanner" id="{ea645dfd-3ced-4e6d-996b-2e727f18d8ce}"/> + <object class="SFXReverbEffect" id="{86dcc538-5923-4ebb-a6aa-d1f286f1272d}"> + <property name="wetLevel"> + <value>0</value> + </property> + <property name="dryLevel"> + <value>-80</value> + </property> + </object> + <object class="MixerBusFader" id="{0b091950-22de-4f23-8818-58efac44d769}"/> +</objects> diff --git a/FMODStudio/Chapter07/Metadata/Snapshot/{5ff95cb9-9388-4a7b-a1d1-3d816aeb2fc8}.xml b/FMODStudio/Chapter07/Metadata/Snapshot/{5ff95cb9-9388-4a7b-a1d1-3d816aeb2fc8}.xml new file mode 100644 index 0000000000000000000000000000000000000000..6c3081faa2779f52886ec2c3c1d449d9eea1cb81 --- /dev/null +++ b/FMODStudio/Chapter07/Metadata/Snapshot/{5ff95cb9-9388-4a7b-a1d1-3d816aeb2fc8}.xml @@ -0,0 +1,49 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="Snapshot" id="{5ff95cb9-9388-4a7b-a1d1-3d816aeb2fc8}"> + <property name="name"> + <value>WithReverb</value> + </property> + <relationship name="mixer"> + <destination>{5130d9cb-07e8-4c02-885e-e27da18e8319}</destination> + </relationship> + <relationship name="automatableProperties"> + <destination>{115fd91e-eec5-4a9b-9b9f-1e36f67106fe}</destination> + </relationship> + <relationship name="markerTracks"> + <destination>{329c7fbf-6fa8-4e63-87b4-b8a754c08a54}</destination> + </relationship> + <relationship name="timeline"> + <destination>{05fb19ae-4d29-4ce4-a8bc-78d93c7e61e4}</destination> + </relationship> + <relationship name="snapshotMasterTrack"> + <destination>{3a9ea0e3-7874-4a65-9010-cb8bf2cf1a8a}</destination> + </relationship> + <relationship name="snapshotProperties"> + <destination>{da65a510-d6c6-44c1-b291-9ccf4ce76d7c}</destination> + </relationship> + <relationship name="snapshotTracks"> + <destination>{76775df9-f6d2-443e-9f7d-6ae8ac974c22}</destination> + </relationship> + </object> + <object class="EventAutomatableProperties" id="{115fd91e-eec5-4a9b-9b9f-1e36f67106fe}"/> + <object class="MarkerTrack" id="{329c7fbf-6fa8-4e63-87b4-b8a754c08a54}"/> + <object class="Timeline" id="{05fb19ae-4d29-4ce4-a8bc-78d93c7e61e4}"/> + <object class="SnapshotMasterTrack" id="{3a9ea0e3-7874-4a65-9010-cb8bf2cf1a8a}"/> + <object class="SnapshotProperty" id="{da65a510-d6c6-44c1-b291-9ccf4ce76d7c}"> + <property name="propertyName"> + <value>level</value> + </property> + <property name="value"> + <value>-8.5</value> + </property> + <relationship name="automatableObject"> + <destination>{93649bf1-d431-40b0-8bed-fc9eb1d3e422}</destination> + </relationship> + </object> + <object class="SnapshotTrack" id="{76775df9-f6d2-443e-9f7d-6ae8ac974c22}"> + <relationship name="mixerStrip"> + <destination>{2f8936ee-464a-439f-87b1-fd6ef863df53}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter07/Metadata/SnapshotGroup/{6dc45fff-38d8-417c-8652-91bba6f7500f}.xml b/FMODStudio/Chapter07/Metadata/SnapshotGroup/{6dc45fff-38d8-417c-8652-91bba6f7500f}.xml new file mode 100644 index 0000000000000000000000000000000000000000..e7146fa1c7f13aa95d18b358925ac3735ef5259a --- /dev/null +++ b/FMODStudio/Chapter07/Metadata/SnapshotGroup/{6dc45fff-38d8-417c-8652-91bba6f7500f}.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="SnapshotList" id="{6dc45fff-38d8-417c-8652-91bba6f7500f}"> + <relationship name="items"> + <destination>{5ff95cb9-9388-4a7b-a1d1-3d816aeb2fc8}</destination> + </relationship> + <relationship name="mixer"> + <destination>{5130d9cb-07e8-4c02-885e-e27da18e8319}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter07/Metadata/Tags.xml b/FMODStudio/Chapter07/Metadata/Tags.xml new file mode 100644 index 0000000000000000000000000000000000000000..dd25f3eac44304149f6e156385d9735649098324 --- /dev/null +++ b/FMODStudio/Chapter07/Metadata/Tags.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="MasterTagFolder" id="{5c4ec9d8-a437-4d48-a923-6069be7e95e3}"> + <property name="name"> + <value>Master</value> + </property> + </object> +</objects> diff --git a/FMODStudio/Chapter07/Metadata/Workspace.xml b/FMODStudio/Chapter07/Metadata/Workspace.xml new file mode 100644 index 0000000000000000000000000000000000000000..153248aa852940093b5737642d567b59ef535559 --- /dev/null +++ b/FMODStudio/Chapter07/Metadata/Workspace.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="Workspace" id="{4b471a38-78dc-4aa7-8065-e2a4be013d03}"> + <property name="builtBanksOutputDirectory"> + <value>../../Chapter07</value> + </property> + <relationship name="masterEventFolder"> + <destination>{94ff31b1-83b7-438f-a0c7-6a5fdd8ccbe5}</destination> + </relationship> + <relationship name="masterTagFolder"> + <destination>{5c4ec9d8-a437-4d48-a923-6069be7e95e3}</destination> + </relationship> + <relationship name="masterBankFolder"> + <destination>{24acc9ed-98e6-4f97-b384-7cedad0817ab}</destination> + </relationship> + <relationship name="masterAssetFolder"> + <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination> + </relationship> + <relationship name="mixer"> + <destination>{5130d9cb-07e8-4c02-885e-e27da18e8319}</destination> + </relationship> + <relationship name="platforms"> + <destination>{3ceb98b4-072c-41c2-a593-48d343172e25}</destination> + </relationship> + </object> + <object class="Platform" id="{3ceb98b4-072c-41c2-a593-48d343172e25}"> + <property name="hardwareType"> + <value>0</value> + </property> + <property name="name"> + <value>Desktop</value> + </property> + <property name="subDirectory"> + <value>Assets</value> + </property> + <property name="speakerFormat"> + <value>6</value> + </property> + </object> +</objects> diff --git a/FMODStudio/Chapter10/Assets/264152__reitanna__microwave-ding.wav b/FMODStudio/Chapter10/Assets/264152__reitanna__microwave-ding.wav new file mode 100644 index 0000000000000000000000000000000000000000..d2a8e5e8bf3f4c2716e7976ef97b76aea3a2689d Binary files /dev/null and b/FMODStudio/Chapter10/Assets/264152__reitanna__microwave-ding.wav differ diff --git a/FMODStudio/Chapter10/Assets/376351__mrthenoronha__single-nerf-shot.wav b/FMODStudio/Chapter10/Assets/376351__mrthenoronha__single-nerf-shot.wav new file mode 100644 index 0000000000000000000000000000000000000000..a7f142b4b8da36b90d30f136fbe957db587b5642 Binary files /dev/null and b/FMODStudio/Chapter10/Assets/376351__mrthenoronha__single-nerf-shot.wav differ diff --git a/FMODStudio/Chapter10/Assets/396012__morganpurkis__rustling-grass-3.wav b/FMODStudio/Chapter10/Assets/396012__morganpurkis__rustling-grass-3.wav new file mode 100644 index 0000000000000000000000000000000000000000..4989147a35824f3afd30c0e147937587a038777e Binary files /dev/null and b/FMODStudio/Chapter10/Assets/396012__morganpurkis__rustling-grass-3.wav differ diff --git a/FMODStudio/Chapter10/Assets/396013__morganpurkis__rustling-grass-2.wav b/FMODStudio/Chapter10/Assets/396013__morganpurkis__rustling-grass-2.wav new file mode 100644 index 0000000000000000000000000000000000000000..6f14a56aff63491cdcd4ef993c73dc1e25b9f71b Binary files /dev/null and b/FMODStudio/Chapter10/Assets/396013__morganpurkis__rustling-grass-2.wav differ diff --git a/FMODStudio/Chapter10/Assets/396014__morganpurkis__rustling-grass-1.wav b/FMODStudio/Chapter10/Assets/396014__morganpurkis__rustling-grass-1.wav new file mode 100644 index 0000000000000000000000000000000000000000..61eca2cfb6b746a71008d09f0c82836c6359d41f Binary files /dev/null and b/FMODStudio/Chapter10/Assets/396014__morganpurkis__rustling-grass-1.wav differ diff --git a/FMODStudio/Chapter10/Assets/396016__morganpurkis__rustling-grass-4.wav b/FMODStudio/Chapter10/Assets/396016__morganpurkis__rustling-grass-4.wav new file mode 100644 index 0000000000000000000000000000000000000000..2464184bd6e0ead796eddc550b3279b3b14f316b Binary files /dev/null and b/FMODStudio/Chapter10/Assets/396016__morganpurkis__rustling-grass-4.wav differ diff --git a/FMODStudio/Chapter10/Assets/47835__tc630__fire2.wav b/FMODStudio/Chapter10/Assets/47835__tc630__fire2.wav new file mode 100644 index 0000000000000000000000000000000000000000..7c92ce79f9adaedeb59affed95527e1709e3fe2a Binary files /dev/null and b/FMODStudio/Chapter10/Assets/47835__tc630__fire2.wav differ diff --git a/FMODStudio/Chapter10/Assets/OutThere.ogg b/FMODStudio/Chapter10/Assets/OutThere.ogg new file mode 100644 index 0000000000000000000000000000000000000000..975ecb12fd620d986ddadec91e5e326799899146 Binary files /dev/null and b/FMODStudio/Chapter10/Assets/OutThere.ogg differ diff --git a/FMODStudio/Chapter10/Assets/explosion-1.ogg b/FMODStudio/Chapter10/Assets/explosion-1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..ad8a1ba5ce14af778b17b12109824a58178a778f Binary files /dev/null and b/FMODStudio/Chapter10/Assets/explosion-1.ogg differ diff --git a/FMODStudio/Chapter10/Assets/footstep00.ogg b/FMODStudio/Chapter10/Assets/footstep00.ogg new file mode 100644 index 0000000000000000000000000000000000000000..ca5dd2b6aa45f73f53685988aacec0a88f31887b Binary files /dev/null and b/FMODStudio/Chapter10/Assets/footstep00.ogg differ diff --git a/FMODStudio/Chapter10/Assets/footstep01.ogg b/FMODStudio/Chapter10/Assets/footstep01.ogg new file mode 100644 index 0000000000000000000000000000000000000000..e784dbff4808267daebd9297674f6532b1a826f3 Binary files /dev/null and b/FMODStudio/Chapter10/Assets/footstep01.ogg differ diff --git a/FMODStudio/Chapter10/Assets/footstep02.ogg b/FMODStudio/Chapter10/Assets/footstep02.ogg new file mode 100644 index 0000000000000000000000000000000000000000..fffa607622ef1f834244636ceaebfbb60c20fed1 Binary files /dev/null and b/FMODStudio/Chapter10/Assets/footstep02.ogg differ diff --git a/FMODStudio/Chapter10/Assets/footstep03.ogg b/FMODStudio/Chapter10/Assets/footstep03.ogg new file mode 100644 index 0000000000000000000000000000000000000000..32ec6265fc61f1aa323ae94c4b6c5b77f39f46f2 Binary files /dev/null and b/FMODStudio/Chapter10/Assets/footstep03.ogg differ diff --git a/FMODStudio/Chapter10/Assets/footstep04.ogg b/FMODStudio/Chapter10/Assets/footstep04.ogg new file mode 100644 index 0000000000000000000000000000000000000000..da3d8ea6250081ca302af44eb496d3758137dd1b Binary files /dev/null and b/FMODStudio/Chapter10/Assets/footstep04.ogg differ diff --git a/FMODStudio/Chapter10/Assets/footstep05.ogg b/FMODStudio/Chapter10/Assets/footstep05.ogg new file mode 100644 index 0000000000000000000000000000000000000000..ddf5ac6a2d5e0bd76b0c5931e35e78ead9df7c87 Binary files /dev/null and b/FMODStudio/Chapter10/Assets/footstep05.ogg differ diff --git a/FMODStudio/Chapter10/Assets/footstep06.ogg b/FMODStudio/Chapter10/Assets/footstep06.ogg new file mode 100644 index 0000000000000000000000000000000000000000..d4419f4e7e0691efaad6506751f04b7202b4f71d Binary files /dev/null and b/FMODStudio/Chapter10/Assets/footstep06.ogg differ diff --git a/FMODStudio/Chapter10/Assets/footstep07.ogg b/FMODStudio/Chapter10/Assets/footstep07.ogg new file mode 100644 index 0000000000000000000000000000000000000000..2b2175ec4d57f93a8d673e9ff9a6febdd7bd266b Binary files /dev/null and b/FMODStudio/Chapter10/Assets/footstep07.ogg differ diff --git a/FMODStudio/Chapter10/Assets/footstep08.ogg b/FMODStudio/Chapter10/Assets/footstep08.ogg new file mode 100644 index 0000000000000000000000000000000000000000..2b71f97adb59dbe6834a8ab8cde38ff6046ad152 Binary files /dev/null and b/FMODStudio/Chapter10/Assets/footstep08.ogg differ diff --git a/FMODStudio/Chapter10/Assets/footstep09.ogg b/FMODStudio/Chapter10/Assets/footstep09.ogg new file mode 100644 index 0000000000000000000000000000000000000000..52c39f52c84a4e5b92c0555b05e1c703bad6d93a Binary files /dev/null and b/FMODStudio/Chapter10/Assets/footstep09.ogg differ diff --git a/FMODStudio/Chapter10/Chapter10.fspro b/FMODStudio/Chapter10/Chapter10.fspro new file mode 100644 index 0000000000000000000000000000000000000000..e41455e9db8dcfd44b0fe6c3d7f92cfaa15feeca --- /dev/null +++ b/FMODStudio/Chapter10/Chapter10.fspro @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"/> diff --git a/FMODStudio/Chapter10/Metadata/Asset/{ab2d50f9-072f-433d-950e-e62e89beb8cb}.xml b/FMODStudio/Chapter10/Metadata/Asset/{ab2d50f9-072f-433d-950e-e62e89beb8cb}.xml new file mode 100644 index 0000000000000000000000000000000000000000..41ae102c0380bfa05f05401c8971a89747605439 --- /dev/null +++ b/FMODStudio/Chapter10/Metadata/Asset/{ab2d50f9-072f-433d-950e-e62e89beb8cb}.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="MasterAssetFolder" id="{ab2d50f9-072f-433d-950e-e62e89beb8cb}"/> +</objects> diff --git a/FMODStudio/Chapter10/Metadata/AudioFile/{124f51bb-6dfc-48fd-ad05-b9e44fdfd68d}.xml b/FMODStudio/Chapter10/Metadata/AudioFile/{124f51bb-6dfc-48fd-ad05-b9e44fdfd68d}.xml new file mode 100644 index 0000000000000000000000000000000000000000..20b8b77322a51f8d5b753cac845072ccb24b7993 --- /dev/null +++ b/FMODStudio/Chapter10/Metadata/AudioFile/{124f51bb-6dfc-48fd-ad05-b9e44fdfd68d}.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="AudioFile" id="{124f51bb-6dfc-48fd-ad05-b9e44fdfd68d}"> + <property name="assetPath"> + <value>264152__reitanna__microwave-ding.wav</value> + </property> + <property name="frequencyInKHz"> + <value>48</value> + </property> + <property name="channelCount"> + <value>1</value> + </property> + <property name="length"> + <value>1.1029374999999999</value> + </property> + <relationship name="masterAssetFolder"> + <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter10/Metadata/AudioFile/{29f71484-f9b1-46e9-8a57-36225ff5b91e}.xml b/FMODStudio/Chapter10/Metadata/AudioFile/{29f71484-f9b1-46e9-8a57-36225ff5b91e}.xml new file mode 100644 index 0000000000000000000000000000000000000000..61410eae17889ea253c0752f5a1969873bd2fe24 --- /dev/null +++ b/FMODStudio/Chapter10/Metadata/AudioFile/{29f71484-f9b1-46e9-8a57-36225ff5b91e}.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="AudioFile" id="{29f71484-f9b1-46e9-8a57-36225ff5b91e}"> + <property name="assetPath"> + <value>396013__morganpurkis__rustling-grass-2.wav</value> + </property> + <property name="frequencyInKHz"> + <value>48</value> + </property> + <property name="channelCount"> + <value>1</value> + </property> + <property name="length"> + <value>0.35222916666666665</value> + </property> + <relationship name="masterAssetFolder"> + <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter10/Metadata/AudioFile/{30490f9e-6bbf-4f91-9413-3bbbaffdfbc6}.xml b/FMODStudio/Chapter10/Metadata/AudioFile/{30490f9e-6bbf-4f91-9413-3bbbaffdfbc6}.xml new file mode 100644 index 0000000000000000000000000000000000000000..2541ae89b0052afb182821897332b325444c1641 --- /dev/null +++ b/FMODStudio/Chapter10/Metadata/AudioFile/{30490f9e-6bbf-4f91-9413-3bbbaffdfbc6}.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="AudioFile" id="{30490f9e-6bbf-4f91-9413-3bbbaffdfbc6}"> + <property name="assetPath"> + <value>396014__morganpurkis__rustling-grass-1.wav</value> + </property> + <property name="frequencyInKHz"> + <value>48</value> + </property> + <property name="channelCount"> + <value>1</value> + </property> + <property name="length"> + <value>0.29720833333333335</value> + </property> + <relationship name="masterAssetFolder"> + <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter10/Metadata/AudioFile/{3af94ac0-fc0d-4d4d-b78f-e0a8a5c6fdc5}.xml b/FMODStudio/Chapter10/Metadata/AudioFile/{3af94ac0-fc0d-4d4d-b78f-e0a8a5c6fdc5}.xml new file mode 100644 index 0000000000000000000000000000000000000000..c5cf4d46185b6605fb69f1b8c9a0596a5ab887f2 --- /dev/null +++ b/FMODStudio/Chapter10/Metadata/AudioFile/{3af94ac0-fc0d-4d4d-b78f-e0a8a5c6fdc5}.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="AudioFile" id="{3af94ac0-fc0d-4d4d-b78f-e0a8a5c6fdc5}"> + <property name="assetPath"> + <value>footstep02.ogg</value> + </property> + <property name="frequencyInKHz"> + <value>48</value> + </property> + <property name="channelCount"> + <value>2</value> + </property> + <property name="length"> + <value>0.24214583333333334</value> + </property> + <relationship name="masterAssetFolder"> + <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter10/Metadata/AudioFile/{4621b1dc-a4bc-4ca2-8e1c-a37b94ac3ddc}.xml b/FMODStudio/Chapter10/Metadata/AudioFile/{4621b1dc-a4bc-4ca2-8e1c-a37b94ac3ddc}.xml new file mode 100644 index 0000000000000000000000000000000000000000..7f7b1ee92add3b94d3f8a918f882091d80a320e1 --- /dev/null +++ b/FMODStudio/Chapter10/Metadata/AudioFile/{4621b1dc-a4bc-4ca2-8e1c-a37b94ac3ddc}.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="AudioFile" id="{4621b1dc-a4bc-4ca2-8e1c-a37b94ac3ddc}"> + <property name="assetPath"> + <value>footstep03.ogg</value> + </property> + <property name="frequencyInKHz"> + <value>48</value> + </property> + <property name="channelCount"> + <value>2</value> + </property> + <property name="length"> + <value>0.26902083333333332</value> + </property> + <relationship name="masterAssetFolder"> + <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter10/Metadata/AudioFile/{4d461ddc-3906-4ed0-b3dd-c179f0724fa3}.xml b/FMODStudio/Chapter10/Metadata/AudioFile/{4d461ddc-3906-4ed0-b3dd-c179f0724fa3}.xml new file mode 100644 index 0000000000000000000000000000000000000000..d1df0627c5c1f492d8b83a588a52a73d09fba394 --- /dev/null +++ b/FMODStudio/Chapter10/Metadata/AudioFile/{4d461ddc-3906-4ed0-b3dd-c179f0724fa3}.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="AudioFile" id="{4d461ddc-3906-4ed0-b3dd-c179f0724fa3}"> + <property name="assetPath"> + <value>396016__morganpurkis__rustling-grass-4.wav</value> + </property> + <property name="frequencyInKHz"> + <value>48</value> + </property> + <property name="channelCount"> + <value>1</value> + </property> + <property name="length"> + <value>0.38</value> + </property> + <relationship name="masterAssetFolder"> + <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter10/Metadata/AudioFile/{781cd1cd-8da7-44db-995d-f67b0ab3eac4}.xml b/FMODStudio/Chapter10/Metadata/AudioFile/{781cd1cd-8da7-44db-995d-f67b0ab3eac4}.xml new file mode 100644 index 0000000000000000000000000000000000000000..068b10071be67def95e0b96e3723b06afa822d6c --- /dev/null +++ b/FMODStudio/Chapter10/Metadata/AudioFile/{781cd1cd-8da7-44db-995d-f67b0ab3eac4}.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="AudioFile" id="{781cd1cd-8da7-44db-995d-f67b0ab3eac4}"> + <property name="assetPath"> + <value>footstep00.ogg</value> + </property> + <property name="frequencyInKHz"> + <value>48</value> + </property> + <property name="channelCount"> + <value>2</value> + </property> + <property name="length"> + <value>0.24885416666666665</value> + </property> + <relationship name="masterAssetFolder"> + <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter10/Metadata/AudioFile/{9b9edf48-2e21-4cbc-a4e0-d6d3410e0765}.xml b/FMODStudio/Chapter10/Metadata/AudioFile/{9b9edf48-2e21-4cbc-a4e0-d6d3410e0765}.xml new file mode 100644 index 0000000000000000000000000000000000000000..d9d06e8ad3ba94ad908e33e817978121e83fcafb --- /dev/null +++ b/FMODStudio/Chapter10/Metadata/AudioFile/{9b9edf48-2e21-4cbc-a4e0-d6d3410e0765}.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="AudioFile" id="{9b9edf48-2e21-4cbc-a4e0-d6d3410e0765}"> + <property name="assetPath"> + <value>explosion-1.ogg</value> + </property> + <property name="frequencyInKHz"> + <value>96</value> + </property> + <property name="channelCount"> + <value>1</value> + </property> + <property name="length"> + <value>1.3077812499999999</value> + </property> + <relationship name="masterAssetFolder"> + <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter10/Metadata/AudioFile/{ae46332e-e218-48f0-a1d3-581dbfec953e}.xml b/FMODStudio/Chapter10/Metadata/AudioFile/{ae46332e-e218-48f0-a1d3-581dbfec953e}.xml new file mode 100644 index 0000000000000000000000000000000000000000..121862b7427c090719fdb375232576b8d6c79c6d --- /dev/null +++ b/FMODStudio/Chapter10/Metadata/AudioFile/{ae46332e-e218-48f0-a1d3-581dbfec953e}.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="AudioFile" id="{ae46332e-e218-48f0-a1d3-581dbfec953e}"> + <property name="assetPath"> + <value>footstep05.ogg</value> + </property> + <property name="frequencyInKHz"> + <value>48</value> + </property> + <property name="channelCount"> + <value>2</value> + </property> + <property name="length"> + <value>0.27577083333333335</value> + </property> + <relationship name="masterAssetFolder"> + <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter10/Metadata/AudioFile/{afd51056-781b-47df-9c3a-254fcb7f8ae6}.xml b/FMODStudio/Chapter10/Metadata/AudioFile/{afd51056-781b-47df-9c3a-254fcb7f8ae6}.xml new file mode 100644 index 0000000000000000000000000000000000000000..9debcfb3cfdf23bc13df3789439ff59dd6e62525 --- /dev/null +++ b/FMODStudio/Chapter10/Metadata/AudioFile/{afd51056-781b-47df-9c3a-254fcb7f8ae6}.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="AudioFile" id="{afd51056-781b-47df-9c3a-254fcb7f8ae6}"> + <property name="assetPath"> + <value>footstep01.ogg</value> + </property> + <property name="frequencyInKHz"> + <value>48</value> + </property> + <property name="channelCount"> + <value>2</value> + </property> + <property name="length"> + <value>0.28247916666666667</value> + </property> + <relationship name="masterAssetFolder"> + <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter10/Metadata/AudioFile/{b7cf3153-7d60-4a0a-bdd4-a354ec6c8993}.xml b/FMODStudio/Chapter10/Metadata/AudioFile/{b7cf3153-7d60-4a0a-bdd4-a354ec6c8993}.xml new file mode 100644 index 0000000000000000000000000000000000000000..37a82b98381196658bfc911e241676c94e101ae9 --- /dev/null +++ b/FMODStudio/Chapter10/Metadata/AudioFile/{b7cf3153-7d60-4a0a-bdd4-a354ec6c8993}.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="AudioFile" id="{b7cf3153-7d60-4a0a-bdd4-a354ec6c8993}"> + <property name="assetPath"> + <value>footstep09.ogg</value> + </property> + <property name="frequencyInKHz"> + <value>48</value> + </property> + <property name="channelCount"> + <value>2</value> + </property> + <property name="length"> + <value>0.21522916666666667</value> + </property> + <relationship name="masterAssetFolder"> + <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter10/Metadata/AudioFile/{b90736d7-6748-46a4-8132-d9e364599d4d}.xml b/FMODStudio/Chapter10/Metadata/AudioFile/{b90736d7-6748-46a4-8132-d9e364599d4d}.xml new file mode 100644 index 0000000000000000000000000000000000000000..0405a81760d3d44991016d482bba827e92f2dace --- /dev/null +++ b/FMODStudio/Chapter10/Metadata/AudioFile/{b90736d7-6748-46a4-8132-d9e364599d4d}.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="AudioFile" id="{b90736d7-6748-46a4-8132-d9e364599d4d}"> + <property name="assetPath"> + <value>footstep08.ogg</value> + </property> + <property name="frequencyInKHz"> + <value>48</value> + </property> + <property name="channelCount"> + <value>2</value> + </property> + <property name="length"> + <value>0.25558333333333333</value> + </property> + <relationship name="masterAssetFolder"> + <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter10/Metadata/AudioFile/{cb9d108d-5891-42f0-aa51-85c5d30a06d8}.xml b/FMODStudio/Chapter10/Metadata/AudioFile/{cb9d108d-5891-42f0-aa51-85c5d30a06d8}.xml new file mode 100644 index 0000000000000000000000000000000000000000..69ad9c92d0d8d2fe467e8efc469f9664a88d9272 --- /dev/null +++ b/FMODStudio/Chapter10/Metadata/AudioFile/{cb9d108d-5891-42f0-aa51-85c5d30a06d8}.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="AudioFile" id="{cb9d108d-5891-42f0-aa51-85c5d30a06d8}"> + <property name="assetPath"> + <value>footstep04.ogg</value> + </property> + <property name="frequencyInKHz"> + <value>48</value> + </property> + <property name="channelCount"> + <value>2</value> + </property> + <property name="length"> + <value>0.32283333333333336</value> + </property> + <relationship name="masterAssetFolder"> + <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter10/Metadata/AudioFile/{cd92a3be-e8c1-4aef-870a-53de1e4a2620}.xml b/FMODStudio/Chapter10/Metadata/AudioFile/{cd92a3be-e8c1-4aef-870a-53de1e4a2620}.xml new file mode 100644 index 0000000000000000000000000000000000000000..68b46dbf7fd8ae79140315da9801c3c5c1ddfbdf --- /dev/null +++ b/FMODStudio/Chapter10/Metadata/AudioFile/{cd92a3be-e8c1-4aef-870a-53de1e4a2620}.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="AudioFile" id="{cd92a3be-e8c1-4aef-870a-53de1e4a2620}"> + <property name="assetPath"> + <value>footstep06.ogg</value> + </property> + <property name="frequencyInKHz"> + <value>48</value> + </property> + <property name="channelCount"> + <value>2</value> + </property> + <property name="length"> + <value>0.24212500000000001</value> + </property> + <relationship name="masterAssetFolder"> + <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter10/Metadata/AudioFile/{d0d48d00-9bc7-4dc5-96cf-5a0ce45ac0de}.xml b/FMODStudio/Chapter10/Metadata/AudioFile/{d0d48d00-9bc7-4dc5-96cf-5a0ce45ac0de}.xml new file mode 100644 index 0000000000000000000000000000000000000000..fa3534eafc68216fcc29adad994541bf8d749dc1 --- /dev/null +++ b/FMODStudio/Chapter10/Metadata/AudioFile/{d0d48d00-9bc7-4dc5-96cf-5a0ce45ac0de}.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="AudioFile" id="{d0d48d00-9bc7-4dc5-96cf-5a0ce45ac0de}"> + <property name="assetPath"> + <value>47835__tc630__fire2.wav</value> + </property> + <property name="isStreaming"> + <value>true</value> + </property> + <property name="frequencyInKHz"> + <value>48</value> + </property> + <property name="channelCount"> + <value>2</value> + </property> + <property name="length"> + <value>12</value> + </property> + <relationship name="masterAssetFolder"> + <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter10/Metadata/AudioFile/{d36fc405-0bac-458f-b9c1-1bdb47d98177}.xml b/FMODStudio/Chapter10/Metadata/AudioFile/{d36fc405-0bac-458f-b9c1-1bdb47d98177}.xml new file mode 100644 index 0000000000000000000000000000000000000000..e944b93c0666a149850e81483854c9f895823bd1 --- /dev/null +++ b/FMODStudio/Chapter10/Metadata/AudioFile/{d36fc405-0bac-458f-b9c1-1bdb47d98177}.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="AudioFile" id="{d36fc405-0bac-458f-b9c1-1bdb47d98177}"> + <property name="assetPath"> + <value>396012__morganpurkis__rustling-grass-3.wav</value> + </property> + <property name="frequencyInKHz"> + <value>48</value> + </property> + <property name="channelCount"> + <value>1</value> + </property> + <property name="length"> + <value>0.30106250000000001</value> + </property> + <relationship name="masterAssetFolder"> + <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter10/Metadata/AudioFile/{dce2073c-8d73-442b-a9ae-1ed541ed7de1}.xml b/FMODStudio/Chapter10/Metadata/AudioFile/{dce2073c-8d73-442b-a9ae-1ed541ed7de1}.xml new file mode 100644 index 0000000000000000000000000000000000000000..3795fdb6584d4fc26c3590d1bb229582ad8fab14 --- /dev/null +++ b/FMODStudio/Chapter10/Metadata/AudioFile/{dce2073c-8d73-442b-a9ae-1ed541ed7de1}.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="AudioFile" id="{dce2073c-8d73-442b-a9ae-1ed541ed7de1}"> + <property name="assetPath"> + <value>OutThere.ogg</value> + </property> + <property name="isStreaming"> + <value>true</value> + </property> + <property name="frequencyInKHz"> + <value>44.0999985</value> + </property> + <property name="channelCount"> + <value>2</value> + </property> + <property name="length"> + <value>242.00417233560091</value> + </property> + <relationship name="masterAssetFolder"> + <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter10/Metadata/AudioFile/{e1063182-c444-4207-b774-b722ece392ce}.xml b/FMODStudio/Chapter10/Metadata/AudioFile/{e1063182-c444-4207-b774-b722ece392ce}.xml new file mode 100644 index 0000000000000000000000000000000000000000..d6e4367e337cf91d91f77fedac88f3dfc719cfc2 --- /dev/null +++ b/FMODStudio/Chapter10/Metadata/AudioFile/{e1063182-c444-4207-b774-b722ece392ce}.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="AudioFile" id="{e1063182-c444-4207-b774-b722ece392ce}"> + <property name="assetPath"> + <value>376351__mrthenoronha__single-nerf-shot.wav</value> + </property> + <property name="frequencyInKHz"> + <value>44.0999985</value> + </property> + <property name="channelCount"> + <value>2</value> + </property> + <property name="length"> + <value>0.54213151927437642</value> + </property> + <relationship name="masterAssetFolder"> + <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter10/Metadata/AudioFile/{e8c8d3a3-c53a-49b8-85a0-6c46a7e81d03}.xml b/FMODStudio/Chapter10/Metadata/AudioFile/{e8c8d3a3-c53a-49b8-85a0-6c46a7e81d03}.xml new file mode 100644 index 0000000000000000000000000000000000000000..de4cf7335e926689bedd432d98d35bed71e47bfb --- /dev/null +++ b/FMODStudio/Chapter10/Metadata/AudioFile/{e8c8d3a3-c53a-49b8-85a0-6c46a7e81d03}.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="AudioFile" id="{e8c8d3a3-c53a-49b8-85a0-6c46a7e81d03}"> + <property name="assetPath"> + <value>footstep07.ogg</value> + </property> + <property name="frequencyInKHz"> + <value>48</value> + </property> + <property name="channelCount"> + <value>2</value> + </property> + <property name="length"> + <value>0.25558333333333333</value> + </property> + <relationship name="masterAssetFolder"> + <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter10/Metadata/Bank/{1de7b457-2173-4205-b8b6-7583e593ccd6}.xml b/FMODStudio/Chapter10/Metadata/Bank/{1de7b457-2173-4205-b8b6-7583e593ccd6}.xml new file mode 100644 index 0000000000000000000000000000000000000000..2360a63faa98802fd5019e8716f63036d98f3a77 --- /dev/null +++ b/FMODStudio/Chapter10/Metadata/Bank/{1de7b457-2173-4205-b8b6-7583e593ccd6}.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="MasterBank" id="{1de7b457-2173-4205-b8b6-7583e593ccd6}"> + <relationship name="folder"> + <destination>{24acc9ed-98e6-4f97-b384-7cedad0817ab}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter10/Metadata/BankFolder/{24acc9ed-98e6-4f97-b384-7cedad0817ab}.xml b/FMODStudio/Chapter10/Metadata/BankFolder/{24acc9ed-98e6-4f97-b384-7cedad0817ab}.xml new file mode 100644 index 0000000000000000000000000000000000000000..2f98f86eaadb4d478c0a3e298e70b229f0241b33 --- /dev/null +++ b/FMODStudio/Chapter10/Metadata/BankFolder/{24acc9ed-98e6-4f97-b384-7cedad0817ab}.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="MasterBankFolder" id="{24acc9ed-98e6-4f97-b384-7cedad0817ab}"/> +</objects> diff --git a/FMODStudio/Chapter10/Metadata/EncodingSetting/{36713264-83a3-4399-9bbf-fc81c28a0bd4}.xml b/FMODStudio/Chapter10/Metadata/EncodingSetting/{36713264-83a3-4399-9bbf-fc81c28a0bd4}.xml new file mode 100644 index 0000000000000000000000000000000000000000..20b5cf1e72ccc8d694eea3f123d10f2f18d4a61e --- /dev/null +++ b/FMODStudio/Chapter10/Metadata/EncodingSetting/{36713264-83a3-4399-9bbf-fc81c28a0bd4}.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="EncodingSetting" id="{36713264-83a3-4399-9bbf-fc81c28a0bd4}"> + <property name="encodingFormat"> + <value>3</value> + </property> + <property name="quality"> + <value>37</value> + </property> + <relationship name="platform"> + <destination>{3ceb98b4-072c-41c2-a593-48d343172e25}</destination> + </relationship> + <relationship name="encodable"> + <destination>{3ceb98b4-072c-41c2-a593-48d343172e25}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter10/Metadata/Event/{24b533f4-bf66-45ae-b191-6b149b3af663}.xml b/FMODStudio/Chapter10/Metadata/Event/{24b533f4-bf66-45ae-b191-6b149b3af663}.xml new file mode 100644 index 0000000000000000000000000000000000000000..b6af61519e734218e8a0b4803ac73adc8b8e8a59 --- /dev/null +++ b/FMODStudio/Chapter10/Metadata/Event/{24b533f4-bf66-45ae-b191-6b149b3af663}.xml @@ -0,0 +1,223 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="Event" id="{24b533f4-bf66-45ae-b191-6b149b3af663}"> + <property name="name"> + <value>Footstep</value> + </property> + <property name="outputFormat"> + <value>2</value> + </property> + <relationship name="folder"> + <destination>{94ff31b1-83b7-438f-a0c7-6a5fdd8ccbe5}</destination> + </relationship> + <relationship name="mixer"> + <destination>{a11de45e-e641-4cb8-abb5-86d699dd2612}</destination> + </relationship> + <relationship name="masterTrack"> + <destination>{1ce222ba-e0b7-40dd-927a-1c45d2626972}</destination> + </relationship> + <relationship name="mixerInput"> + <destination>{dbde1fad-5f73-49db-85b3-0d9fd720a94a}</destination> + </relationship> + <relationship name="automatableProperties"> + <destination>{89e81650-d1a4-42b1-96b4-20995d141847}</destination> + </relationship> + <relationship name="markerTracks"> + <destination>{b9305bb7-5c47-4c47-a83e-d21acd8ea659}</destination> + </relationship> + <relationship name="groupTracks"> + <destination>{b177c451-f4e8-4c2b-8ce8-820f7f8e4a01}</destination> + </relationship> + <relationship name="timeline"> + <destination>{92e5a1c5-6d35-4feb-8785-72dd1d39f9e4}</destination> + </relationship> + <relationship name="parameters"> + <destination>{0f01a5ab-4580-4032-a1d5-62a9d0a407e3}</destination> + </relationship> + <relationship name="banks"> + <destination>{1de7b457-2173-4205-b8b6-7583e593ccd6}</destination> + </relationship> + </object> + <object class="EventMixer" id="{a11de45e-e641-4cb8-abb5-86d699dd2612}"> + <relationship name="masterBus"> + <destination>{ba176c91-524d-4fc5-aae3-6255261929fe}</destination> + </relationship> + </object> + <object class="MasterTrack" id="{1ce222ba-e0b7-40dd-927a-1c45d2626972}"> + <relationship name="mixerGroup"> + <destination>{ba176c91-524d-4fc5-aae3-6255261929fe}</destination> + </relationship> + </object> + <object class="MixerInput" id="{dbde1fad-5f73-49db-85b3-0d9fd720a94a}"> + <relationship name="effectChain"> + <destination>{2ddd8554-18b8-41d8-afe1-a0e7b4ccc4a3}</destination> + </relationship> + <relationship name="panner"> + <destination>{2c27bfa2-dcfb-49fe-85dd-d596551ddb28}</destination> + </relationship> + <relationship name="output"> + <destination>{2f8936ee-464a-439f-87b1-fd6ef863df53}</destination> + </relationship> + </object> + <object class="EventAutomatableProperties" id="{89e81650-d1a4-42b1-96b4-20995d141847}"/> + <object class="MarkerTrack" id="{b9305bb7-5c47-4c47-a83e-d21acd8ea659}"/> + <object class="GroupTrack" id="{b177c451-f4e8-4c2b-8ce8-820f7f8e4a01}"> + <relationship name="modules"> + <destination>{b61e135e-9904-413a-b3dd-cdcee29b0e11}</destination> + <destination>{da122561-c0d8-4c38-9531-35f16186a94e}</destination> + </relationship> + <relationship name="mixerGroup"> + <destination>{6b864293-94a4-4b88-a5f0-4021ab3b7c2e}</destination> + </relationship> + </object> + <object class="Timeline" id="{92e5a1c5-6d35-4feb-8785-72dd1d39f9e4}"> + <relationship name="markers"> + <destination>{acd77d61-1c73-4791-ae17-07caaa3ee1a4}</destination> + </relationship> + </object> + <object class="GameParameter" id="{0f01a5ab-4580-4032-a1d5-62a9d0a407e3}"> + <property name="name"> + <value>Surface</value> + </property> + <relationship name="modules"> + <destination>{b61e135e-9904-413a-b3dd-cdcee29b0e11}</destination> + <destination>{da122561-c0d8-4c38-9531-35f16186a94e}</destination> + </relationship> + </object> + <object class="EventMixerMaster" id="{ba176c91-524d-4fc5-aae3-6255261929fe}"> + <property name="volume"> + <value>-3</value> + </property> + <relationship name="effectChain"> + <destination>{c5a18e7d-f413-4e38-85e4-f9cb0cee9172}</destination> + </relationship> + <relationship name="panner"> + <destination>{c54bfc2b-9db7-4243-81a6-5458ed074dda}</destination> + </relationship> + <relationship name="mixer"> + <destination>{a11de45e-e641-4cb8-abb5-86d699dd2612}</destination> + </relationship> + </object> + <object class="MixerBusEffectChain" id="{2ddd8554-18b8-41d8-afe1-a0e7b4ccc4a3}"> + <relationship name="effects"> + <destination>{a4bcef17-1b03-4a39-983d-78510ef1dd80}</destination> + </relationship> + </object> + <object class="MixerBusPanner" id="{2c27bfa2-dcfb-49fe-85dd-d596551ddb28}"/> + <object class="MultiSound" id="{b61e135e-9904-413a-b3dd-cdcee29b0e11}"> + <property name="length"> + <value>0.47999999999999998</value> + </property> + <relationship name="sounds"> + <destination>{5aa08a2a-6b3f-4974-8870-afe938dd6358}</destination> + <destination>{7b10fb66-c2e2-4c38-a3b4-8f8cd65b7c9c}</destination> + <destination>{057bef69-bebc-4a7a-9adc-975f7cea287c}</destination> + <destination>{6b3fc826-4269-498a-a638-cab18e36295f}</destination> + <destination>{22606bd2-deea-4cd9-8f89-0a1444a5200a}</destination> + </relationship> + </object> + <object class="MultiSound" id="{da122561-c0d8-4c38-9531-35f16186a94e}"> + <property name="start"> + <value>0.48999999999999999</value> + </property> + <property name="length"> + <value>0.46000000000000002</value> + </property> + <relationship name="sounds"> + <destination>{1696b7e7-faaf-436e-b037-ab66f17718ab}</destination> + <destination>{644228d3-30eb-405b-abdd-e784d00269cc}</destination> + <destination>{305eed1e-38f6-4ce2-b657-ffac64ed4c16}</destination> + <destination>{4c9b28cb-c4e5-46da-973f-f9fe7b9be8a6}</destination> + </relationship> + </object> + <object class="EventMixerGroup" id="{6b864293-94a4-4b88-a5f0-4021ab3b7c2e}"> + <property name="name"> + <value>Audio 1</value> + </property> + <relationship name="effectChain"> + <destination>{6c61f038-2097-43bf-8008-e9858c5e9d17}</destination> + </relationship> + <relationship name="panner"> + <destination>{89fe8be6-8c31-429c-a4f1-187fedf62d36}</destination> + </relationship> + <relationship name="output"> + <destination>{ba176c91-524d-4fc5-aae3-6255261929fe}</destination> + </relationship> + </object> + <object class="LoopRegion" id="{acd77d61-1c73-4791-ae17-07caaa3ee1a4}"> + <property name="position"> + <value>0.5</value> + </property> + <property name="length"> + <value>0.5</value> + </property> + <relationship name="timeline"> + <destination>{92e5a1c5-6d35-4feb-8785-72dd1d39f9e4}</destination> + </relationship> + <relationship name="markerTrack"> + <destination>{b9305bb7-5c47-4c47-a83e-d21acd8ea659}</destination> + </relationship> + </object> + <object class="MixerBusEffectChain" id="{c5a18e7d-f413-4e38-85e4-f9cb0cee9172}"> + <relationship name="effects"> + <destination>{a78fe94b-0eeb-4239-9188-1c89a67011c3}</destination> + <destination>{2f7e19fa-f8f8-4783-b19e-029bf94c9bc2}</destination> + </relationship> + </object> + <object class="MixerBusPanner" id="{c54bfc2b-9db7-4243-81a6-5458ed074dda}"/> + <object class="MixerBusFader" id="{a4bcef17-1b03-4a39-983d-78510ef1dd80}"/> + <object class="SingleSound" id="{5aa08a2a-6b3f-4974-8870-afe938dd6358}"> + <relationship name="audioFile"> + <destination>{3af94ac0-fc0d-4d4d-b78f-e0a8a5c6fdc5}</destination> + </relationship> + </object> + <object class="SingleSound" id="{7b10fb66-c2e2-4c38-a3b4-8f8cd65b7c9c}"> + <relationship name="audioFile"> + <destination>{cb9d108d-5891-42f0-aa51-85c5d30a06d8}</destination> + </relationship> + </object> + <object class="SingleSound" id="{057bef69-bebc-4a7a-9adc-975f7cea287c}"> + <relationship name="audioFile"> + <destination>{ae46332e-e218-48f0-a1d3-581dbfec953e}</destination> + </relationship> + </object> + <object class="SingleSound" id="{6b3fc826-4269-498a-a638-cab18e36295f}"> + <relationship name="audioFile"> + <destination>{cd92a3be-e8c1-4aef-870a-53de1e4a2620}</destination> + </relationship> + </object> + <object class="SingleSound" id="{22606bd2-deea-4cd9-8f89-0a1444a5200a}"> + <relationship name="audioFile"> + <destination>{b7cf3153-7d60-4a0a-bdd4-a354ec6c8993}</destination> + </relationship> + </object> + <object class="SingleSound" id="{1696b7e7-faaf-436e-b037-ab66f17718ab}"> + <relationship name="audioFile"> + <destination>{d36fc405-0bac-458f-b9c1-1bdb47d98177}</destination> + </relationship> + </object> + <object class="SingleSound" id="{644228d3-30eb-405b-abdd-e784d00269cc}"> + <relationship name="audioFile"> + <destination>{29f71484-f9b1-46e9-8a57-36225ff5b91e}</destination> + </relationship> + </object> + <object class="SingleSound" id="{305eed1e-38f6-4ce2-b657-ffac64ed4c16}"> + <relationship name="audioFile"> + <destination>{30490f9e-6bbf-4f91-9413-3bbbaffdfbc6}</destination> + </relationship> + </object> + <object class="SingleSound" id="{4c9b28cb-c4e5-46da-973f-f9fe7b9be8a6}"> + <relationship name="audioFile"> + <destination>{4d461ddc-3906-4ed0-b3dd-c179f0724fa3}</destination> + </relationship> + </object> + <object class="MixerBusEffectChain" id="{6c61f038-2097-43bf-8008-e9858c5e9d17}"> + <relationship name="effects"> + <destination>{2a5316f0-3b4f-41e9-b6f9-da90dad1bb89}</destination> + </relationship> + </object> + <object class="MixerBusPanner" id="{89fe8be6-8c31-429c-a4f1-187fedf62d36}"/> + <object class="MixerBusFader" id="{a78fe94b-0eeb-4239-9188-1c89a67011c3}"/> + <object class="SpatialiserEffect" id="{2f7e19fa-f8f8-4783-b19e-029bf94c9bc2}"/> + <object class="MixerBusFader" id="{2a5316f0-3b4f-41e9-b6f9-da90dad1bb89}"/> +</objects> diff --git a/FMODStudio/Chapter10/Metadata/Event/{78c9f142-4f5e-4320-b98f-1c7870c9b48d}.xml b/FMODStudio/Chapter10/Metadata/Event/{78c9f142-4f5e-4320-b98f-1c7870c9b48d}.xml new file mode 100644 index 0000000000000000000000000000000000000000..bd1cd85fe5e605499f75a945b250159d3f3ebc9e --- /dev/null +++ b/FMODStudio/Chapter10/Metadata/Event/{78c9f142-4f5e-4320-b98f-1c7870c9b48d}.xml @@ -0,0 +1,128 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="Event" id="{78c9f142-4f5e-4320-b98f-1c7870c9b48d}"> + <property name="name"> + <value>Ding</value> + </property> + <property name="outputFormat"> + <value>0</value> + </property> + <relationship name="folder"> + <destination>{94ff31b1-83b7-438f-a0c7-6a5fdd8ccbe5}</destination> + </relationship> + <relationship name="mixer"> + <destination>{823e816f-ef02-4d1e-8e67-0403fe2ba4e6}</destination> + </relationship> + <relationship name="masterTrack"> + <destination>{93581cec-9c09-4f16-8bc4-47446a3f804a}</destination> + </relationship> + <relationship name="mixerInput"> + <destination>{5f0bf0b7-def6-4073-bcee-860d90e50cd7}</destination> + </relationship> + <relationship name="automatableProperties"> + <destination>{64ed6413-cda8-4fe9-8f1f-2bb8b27cbebd}</destination> + </relationship> + <relationship name="markerTracks"> + <destination>{77a5b55e-2148-4dd1-ae60-b200eadd1698}</destination> + </relationship> + <relationship name="groupTracks"> + <destination>{b64aff34-70ca-495a-8a31-65a29638c8b9}</destination> + </relationship> + <relationship name="timeline"> + <destination>{10de6407-ddfb-4bf5-93fd-785cab0b91fe}</destination> + </relationship> + <relationship name="banks"> + <destination>{1de7b457-2173-4205-b8b6-7583e593ccd6}</destination> + </relationship> + </object> + <object class="EventMixer" id="{823e816f-ef02-4d1e-8e67-0403fe2ba4e6}"> + <relationship name="masterBus"> + <destination>{12f61a39-9573-46bc-822c-73144aa2893d}</destination> + </relationship> + </object> + <object class="MasterTrack" id="{93581cec-9c09-4f16-8bc4-47446a3f804a}"> + <relationship name="mixerGroup"> + <destination>{12f61a39-9573-46bc-822c-73144aa2893d}</destination> + </relationship> + </object> + <object class="MixerInput" id="{5f0bf0b7-def6-4073-bcee-860d90e50cd7}"> + <relationship name="effectChain"> + <destination>{0a4b7e7c-0bdd-49f2-a670-15ba5f2aa11d}</destination> + </relationship> + <relationship name="panner"> + <destination>{c10dd396-5670-4308-b64c-e46610c1ac97}</destination> + </relationship> + <relationship name="output"> + <destination>{2f8936ee-464a-439f-87b1-fd6ef863df53}</destination> + </relationship> + </object> + <object class="EventAutomatableProperties" id="{64ed6413-cda8-4fe9-8f1f-2bb8b27cbebd}"/> + <object class="MarkerTrack" id="{77a5b55e-2148-4dd1-ae60-b200eadd1698}"/> + <object class="GroupTrack" id="{b64aff34-70ca-495a-8a31-65a29638c8b9}"> + <relationship name="modules"> + <destination>{ac3b6abf-ccdf-4b8a-b1ea-4e8d23dc1f99}</destination> + </relationship> + <relationship name="mixerGroup"> + <destination>{859170fc-04a4-49bb-a956-2946bad25f02}</destination> + </relationship> + </object> + <object class="Timeline" id="{10de6407-ddfb-4bf5-93fd-785cab0b91fe}"> + <relationship name="modules"> + <destination>{ac3b6abf-ccdf-4b8a-b1ea-4e8d23dc1f99}</destination> + </relationship> + </object> + <object class="EventMixerMaster" id="{12f61a39-9573-46bc-822c-73144aa2893d}"> + <relationship name="effectChain"> + <destination>{3ee61cb3-08de-4fc4-b7d7-fbfa1d36878f}</destination> + </relationship> + <relationship name="panner"> + <destination>{de9855b6-b361-4d0d-9e45-65c11b2c2837}</destination> + </relationship> + <relationship name="mixer"> + <destination>{823e816f-ef02-4d1e-8e67-0403fe2ba4e6}</destination> + </relationship> + </object> + <object class="MixerBusEffectChain" id="{0a4b7e7c-0bdd-49f2-a670-15ba5f2aa11d}"> + <relationship name="effects"> + <destination>{3c053c0b-dd4b-468e-a6ac-e18457d464f3}</destination> + </relationship> + </object> + <object class="MixerBusPanner" id="{c10dd396-5670-4308-b64c-e46610c1ac97}"/> + <object class="SingleSound" id="{ac3b6abf-ccdf-4b8a-b1ea-4e8d23dc1f99}"> + <property name="length"> + <value>1.1029374999999999</value> + </property> + <relationship name="audioFile"> + <destination>{124f51bb-6dfc-48fd-ad05-b9e44fdfd68d}</destination> + </relationship> + </object> + <object class="EventMixerGroup" id="{859170fc-04a4-49bb-a956-2946bad25f02}"> + <property name="name"> + <value>Audio 1</value> + </property> + <relationship name="effectChain"> + <destination>{85dfe3bc-4a52-4439-817e-cfbf07595d88}</destination> + </relationship> + <relationship name="panner"> + <destination>{0c4c4955-eb39-4286-a691-61ecf571682f}</destination> + </relationship> + <relationship name="output"> + <destination>{12f61a39-9573-46bc-822c-73144aa2893d}</destination> + </relationship> + </object> + <object class="MixerBusEffectChain" id="{3ee61cb3-08de-4fc4-b7d7-fbfa1d36878f}"> + <relationship name="effects"> + <destination>{117e1fed-744b-4040-8054-4f39b7b95929}</destination> + </relationship> + </object> + <object class="MixerBusPanner" id="{de9855b6-b361-4d0d-9e45-65c11b2c2837}"/> + <object class="MixerBusFader" id="{3c053c0b-dd4b-468e-a6ac-e18457d464f3}"/> + <object class="MixerBusEffectChain" id="{85dfe3bc-4a52-4439-817e-cfbf07595d88}"> + <relationship name="effects"> + <destination>{e2c46038-2c98-45cf-b1c4-76cd7838a044}</destination> + </relationship> + </object> + <object class="MixerBusPanner" id="{0c4c4955-eb39-4286-a691-61ecf571682f}"/> + <object class="MixerBusFader" id="{117e1fed-744b-4040-8054-4f39b7b95929}"/> + <object class="MixerBusFader" id="{e2c46038-2c98-45cf-b1c4-76cd7838a044}"/> +</objects> diff --git a/FMODStudio/Chapter10/Metadata/Event/{8b09005b-94f1-42b6-94e0-2d2da4d59fd0}.xml b/FMODStudio/Chapter10/Metadata/Event/{8b09005b-94f1-42b6-94e0-2d2da4d59fd0}.xml new file mode 100644 index 0000000000000000000000000000000000000000..f53a57ffebc1c7512b7bc13c1e88930e49f32c93 --- /dev/null +++ b/FMODStudio/Chapter10/Metadata/Event/{8b09005b-94f1-42b6-94e0-2d2da4d59fd0}.xml @@ -0,0 +1,149 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="Event" id="{8b09005b-94f1-42b6-94e0-2d2da4d59fd0}"> + <property name="name"> + <value>Music</value> + </property> + <property name="outputFormat"> + <value>1</value> + </property> + <relationship name="folder"> + <destination>{94ff31b1-83b7-438f-a0c7-6a5fdd8ccbe5}</destination> + </relationship> + <relationship name="mixer"> + <destination>{652ae7e8-15f7-4c27-b39b-1d5c449ec129}</destination> + </relationship> + <relationship name="masterTrack"> + <destination>{b5d354bb-76ab-45cf-80d9-fd9a3a9e2bee}</destination> + </relationship> + <relationship name="mixerInput"> + <destination>{2845a836-dd4a-4d11-a2b5-e3e0ec19d966}</destination> + </relationship> + <relationship name="automatableProperties"> + <destination>{c24fb5a4-242c-4412-887a-f01127b56449}</destination> + </relationship> + <relationship name="markerTracks"> + <destination>{2c9ab12d-8f90-4fb8-94a9-7c767ff5120e}</destination> + </relationship> + <relationship name="groupTracks"> + <destination>{42b4ccd8-6d27-47b6-955b-8352c4718461}</destination> + </relationship> + <relationship name="timeline"> + <destination>{95587d04-c275-449d-b518-bdd25bd9b4ad}</destination> + </relationship> + <relationship name="banks"> + <destination>{1de7b457-2173-4205-b8b6-7583e593ccd6}</destination> + </relationship> + </object> + <object class="EventMixer" id="{652ae7e8-15f7-4c27-b39b-1d5c449ec129}"> + <relationship name="masterBus"> + <destination>{13deaf11-8357-46f5-8ec9-913dceeb7fa4}</destination> + </relationship> + </object> + <object class="MasterTrack" id="{b5d354bb-76ab-45cf-80d9-fd9a3a9e2bee}"> + <relationship name="mixerGroup"> + <destination>{13deaf11-8357-46f5-8ec9-913dceeb7fa4}</destination> + </relationship> + </object> + <object class="MixerInput" id="{2845a836-dd4a-4d11-a2b5-e3e0ec19d966}"> + <relationship name="effectChain"> + <destination>{5b3b422e-6f12-454c-9723-88b2fdb5aa84}</destination> + </relationship> + <relationship name="panner"> + <destination>{8151b2c2-923f-445d-9d3a-1cc6430a7400}</destination> + </relationship> + <relationship name="output"> + <destination>{76ef365d-f7b5-4307-94f2-d4ac2facaad5}</destination> + </relationship> + </object> + <object class="EventAutomatableProperties" id="{c24fb5a4-242c-4412-887a-f01127b56449}"> + <property name="maxVoices"> + <value>1</value> + </property> + </object> + <object class="MarkerTrack" id="{2c9ab12d-8f90-4fb8-94a9-7c767ff5120e}"/> + <object class="GroupTrack" id="{42b4ccd8-6d27-47b6-955b-8352c4718461}"> + <relationship name="modules"> + <destination>{bb0d2e20-4222-4fda-bd99-8750712452cd}</destination> + </relationship> + <relationship name="mixerGroup"> + <destination>{f846effe-4954-457b-aede-6af0b4d6134d}</destination> + </relationship> + </object> + <object class="Timeline" id="{95587d04-c275-449d-b518-bdd25bd9b4ad}"> + <relationship name="modules"> + <destination>{bb0d2e20-4222-4fda-bd99-8750712452cd}</destination> + </relationship> + <relationship name="markers"> + <destination>{882b9711-3d4f-486e-b3d4-24aa7276dab7}</destination> + </relationship> + </object> + <object class="EventMixerMaster" id="{13deaf11-8357-46f5-8ec9-913dceeb7fa4}"> + <relationship name="effectChain"> + <destination>{0f7b50c9-9036-4693-9b10-982ad43cb42e}</destination> + </relationship> + <relationship name="panner"> + <destination>{34dbfcda-d83f-429a-ad6f-344394794ed5}</destination> + </relationship> + <relationship name="mixer"> + <destination>{652ae7e8-15f7-4c27-b39b-1d5c449ec129}</destination> + </relationship> + </object> + <object class="MixerBusEffectChain" id="{5b3b422e-6f12-454c-9723-88b2fdb5aa84}"> + <relationship name="effects"> + <destination>{45ae97a9-da0d-45f3-973d-e8191b0df725}</destination> + </relationship> + </object> + <object class="MixerBusPanner" id="{8151b2c2-923f-445d-9d3a-1cc6430a7400}"/> + <object class="SingleSound" id="{bb0d2e20-4222-4fda-bd99-8750712452cd}"> + <property name="length"> + <value>242.00417233560091</value> + </property> + <relationship name="audioFile"> + <destination>{dce2073c-8d73-442b-a9ae-1ed541ed7de1}</destination> + </relationship> + </object> + <object class="EventMixerGroup" id="{f846effe-4954-457b-aede-6af0b4d6134d}"> + <property name="name"> + <value>Audio 1</value> + </property> + <relationship name="effectChain"> + <destination>{1f0bb221-045c-44f3-9630-81620b58a46f}</destination> + </relationship> + <relationship name="panner"> + <destination>{f7ea7221-630d-4489-90ae-fe4b294fbe38}</destination> + </relationship> + <relationship name="output"> + <destination>{13deaf11-8357-46f5-8ec9-913dceeb7fa4}</destination> + </relationship> + </object> + <object class="LoopRegion" id="{882b9711-3d4f-486e-b3d4-24aa7276dab7}"> + <property name="position"> + <value>0</value> + </property> + <property name="length"> + <value>242.00417233560091</value> + </property> + <relationship name="timeline"> + <destination>{95587d04-c275-449d-b518-bdd25bd9b4ad}</destination> + </relationship> + <relationship name="markerTrack"> + <destination>{2c9ab12d-8f90-4fb8-94a9-7c767ff5120e}</destination> + </relationship> + </object> + <object class="MixerBusEffectChain" id="{0f7b50c9-9036-4693-9b10-982ad43cb42e}"> + <relationship name="effects"> + <destination>{fc06cce3-1e26-4354-a470-75f0126167b6}</destination> + </relationship> + </object> + <object class="MixerBusPanner" id="{34dbfcda-d83f-429a-ad6f-344394794ed5}"/> + <object class="MixerBusFader" id="{45ae97a9-da0d-45f3-973d-e8191b0df725}"/> + <object class="MixerBusEffectChain" id="{1f0bb221-045c-44f3-9630-81620b58a46f}"> + <relationship name="effects"> + <destination>{68a2a3fb-0579-45c6-ba8c-6ad9ac1bff7c}</destination> + </relationship> + </object> + <object class="MixerBusPanner" id="{f7ea7221-630d-4489-90ae-fe4b294fbe38}"/> + <object class="MixerBusFader" id="{fc06cce3-1e26-4354-a470-75f0126167b6}"/> + <object class="MixerBusFader" id="{68a2a3fb-0579-45c6-ba8c-6ad9ac1bff7c}"/> +</objects> diff --git a/FMODStudio/Chapter10/Metadata/Event/{9a386bbd-0755-45a8-902d-4b494810b74e}.xml b/FMODStudio/Chapter10/Metadata/Event/{9a386bbd-0755-45a8-902d-4b494810b74e}.xml new file mode 100644 index 0000000000000000000000000000000000000000..f96c9669dbc3966d8210fed755d707a451db2407 --- /dev/null +++ b/FMODStudio/Chapter10/Metadata/Event/{9a386bbd-0755-45a8-902d-4b494810b74e}.xml @@ -0,0 +1,133 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="Event" id="{9a386bbd-0755-45a8-902d-4b494810b74e}"> + <property name="name"> + <value>Shot</value> + </property> + <property name="outputFormat"> + <value>2</value> + </property> + <relationship name="folder"> + <destination>{94ff31b1-83b7-438f-a0c7-6a5fdd8ccbe5}</destination> + </relationship> + <relationship name="mixer"> + <destination>{54ac31c1-e7ac-457a-a526-3a0c7438a81a}</destination> + </relationship> + <relationship name="masterTrack"> + <destination>{6a57e3c1-29d6-47df-879f-87966e416a34}</destination> + </relationship> + <relationship name="mixerInput"> + <destination>{71c91ded-b814-4c31-9be5-4cdd4f85c371}</destination> + </relationship> + <relationship name="automatableProperties"> + <destination>{1f51d393-ca48-4d6d-b663-d2e898c39ef3}</destination> + </relationship> + <relationship name="markerTracks"> + <destination>{443f69b6-92bd-4674-856b-a06e687181d0}</destination> + </relationship> + <relationship name="groupTracks"> + <destination>{713bb66c-4bdc-4eff-af68-daaae2ddb0b6}</destination> + </relationship> + <relationship name="timeline"> + <destination>{c8d68b68-300a-46fe-97a5-a9998e0840f3}</destination> + </relationship> + <relationship name="banks"> + <destination>{1de7b457-2173-4205-b8b6-7583e593ccd6}</destination> + </relationship> + </object> + <object class="EventMixer" id="{54ac31c1-e7ac-457a-a526-3a0c7438a81a}"> + <relationship name="masterBus"> + <destination>{d4f433b0-462c-4d44-9ac0-bb454a6b9435}</destination> + </relationship> + </object> + <object class="MasterTrack" id="{6a57e3c1-29d6-47df-879f-87966e416a34}"> + <relationship name="mixerGroup"> + <destination>{d4f433b0-462c-4d44-9ac0-bb454a6b9435}</destination> + </relationship> + </object> + <object class="MixerInput" id="{71c91ded-b814-4c31-9be5-4cdd4f85c371}"> + <relationship name="effectChain"> + <destination>{b50d2f84-ae0b-47f4-9ae5-20bdbf2372c3}</destination> + </relationship> + <relationship name="panner"> + <destination>{174af3e7-8ccd-4920-9a9a-f9d734f4367e}</destination> + </relationship> + <relationship name="output"> + <destination>{2f8936ee-464a-439f-87b1-fd6ef863df53}</destination> + </relationship> + </object> + <object class="EventAutomatableProperties" id="{1f51d393-ca48-4d6d-b663-d2e898c39ef3}"/> + <object class="MarkerTrack" id="{443f69b6-92bd-4674-856b-a06e687181d0}"/> + <object class="GroupTrack" id="{713bb66c-4bdc-4eff-af68-daaae2ddb0b6}"> + <relationship name="modules"> + <destination>{b05dcf32-77e6-4c0a-aa4a-98d5bbd68d85}</destination> + </relationship> + <relationship name="mixerGroup"> + <destination>{f99afe23-34f7-4a1a-beb6-477cf4ec7b72}</destination> + </relationship> + </object> + <object class="Timeline" id="{c8d68b68-300a-46fe-97a5-a9998e0840f3}"> + <relationship name="modules"> + <destination>{b05dcf32-77e6-4c0a-aa4a-98d5bbd68d85}</destination> + </relationship> + </object> + <object class="EventMixerMaster" id="{d4f433b0-462c-4d44-9ac0-bb454a6b9435}"> + <relationship name="effectChain"> + <destination>{2d91eb08-3c78-43fb-9c9f-b265bafd1703}</destination> + </relationship> + <relationship name="panner"> + <destination>{0c0f6e02-5776-4fd3-a1a1-f1f9f666de34}</destination> + </relationship> + <relationship name="mixer"> + <destination>{54ac31c1-e7ac-457a-a526-3a0c7438a81a}</destination> + </relationship> + </object> + <object class="MixerBusEffectChain" id="{b50d2f84-ae0b-47f4-9ae5-20bdbf2372c3}"> + <relationship name="effects"> + <destination>{e67f829e-12f5-4cae-9e86-16eb9e04b7ce}</destination> + </relationship> + </object> + <object class="MixerBusPanner" id="{174af3e7-8ccd-4920-9a9a-f9d734f4367e}"/> + <object class="SingleSound" id="{b05dcf32-77e6-4c0a-aa4a-98d5bbd68d85}"> + <property name="length"> + <value>0.54213151927437642</value> + </property> + <property name="volume"> + <value>-3</value> + </property> + <relationship name="audioFile"> + <destination>{e1063182-c444-4207-b774-b722ece392ce}</destination> + </relationship> + </object> + <object class="EventMixerGroup" id="{f99afe23-34f7-4a1a-beb6-477cf4ec7b72}"> + <property name="name"> + <value>Audio 1</value> + </property> + <relationship name="effectChain"> + <destination>{1ce4a228-9890-4e3c-9d9b-4fc6f797aca4}</destination> + </relationship> + <relationship name="panner"> + <destination>{a125274a-4a78-4171-a93d-a10ea6ca6283}</destination> + </relationship> + <relationship name="output"> + <destination>{d4f433b0-462c-4d44-9ac0-bb454a6b9435}</destination> + </relationship> + </object> + <object class="MixerBusEffectChain" id="{2d91eb08-3c78-43fb-9c9f-b265bafd1703}"> + <relationship name="effects"> + <destination>{1c09cd15-7fd4-46ab-b60d-8bcd701b47e6}</destination> + <destination>{35369419-3592-4bcd-8415-7739faf5f423}</destination> + </relationship> + </object> + <object class="MixerBusPanner" id="{0c0f6e02-5776-4fd3-a1a1-f1f9f666de34}"/> + <object class="MixerBusFader" id="{e67f829e-12f5-4cae-9e86-16eb9e04b7ce}"/> + <object class="MixerBusEffectChain" id="{1ce4a228-9890-4e3c-9d9b-4fc6f797aca4}"> + <relationship name="effects"> + <destination>{c6347975-4e75-4660-a9c8-0a06753e7105}</destination> + </relationship> + </object> + <object class="MixerBusPanner" id="{a125274a-4a78-4171-a93d-a10ea6ca6283}"/> + <object class="MixerBusFader" id="{1c09cd15-7fd4-46ab-b60d-8bcd701b47e6}"/> + <object class="SpatialiserEffect" id="{35369419-3592-4bcd-8415-7739faf5f423}"/> + <object class="MixerBusFader" id="{c6347975-4e75-4660-a9c8-0a06753e7105}"/> +</objects> diff --git a/FMODStudio/Chapter10/Metadata/Event/{a32c33d9-06f7-4dda-ad05-ca17ae0f080a}.xml b/FMODStudio/Chapter10/Metadata/Event/{a32c33d9-06f7-4dda-ad05-ca17ae0f080a}.xml new file mode 100644 index 0000000000000000000000000000000000000000..366e90b427e8679dd0f403f3d7bc2a78d61bca9f --- /dev/null +++ b/FMODStudio/Chapter10/Metadata/Event/{a32c33d9-06f7-4dda-ad05-ca17ae0f080a}.xml @@ -0,0 +1,128 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="Event" id="{a32c33d9-06f7-4dda-ad05-ca17ae0f080a}"> + <property name="name"> + <value>Explosion2D</value> + </property> + <property name="outputFormat"> + <value>0</value> + </property> + <relationship name="folder"> + <destination>{94ff31b1-83b7-438f-a0c7-6a5fdd8ccbe5}</destination> + </relationship> + <relationship name="mixer"> + <destination>{0c200fe8-ef03-41b2-a33e-f329ea70fa49}</destination> + </relationship> + <relationship name="masterTrack"> + <destination>{5a576b5d-12f5-4fbf-b629-599050f183fd}</destination> + </relationship> + <relationship name="mixerInput"> + <destination>{2a4c8bdc-1196-4954-a2a1-5898510d6bdf}</destination> + </relationship> + <relationship name="automatableProperties"> + <destination>{10e583b7-75cc-4612-880c-5693be1465ec}</destination> + </relationship> + <relationship name="markerTracks"> + <destination>{d0f8d6d6-d8de-48a0-8a19-c30a1c98a9b6}</destination> + </relationship> + <relationship name="groupTracks"> + <destination>{276c7461-c265-487b-bff8-e7efcffa34c3}</destination> + </relationship> + <relationship name="timeline"> + <destination>{fe779d63-2f9d-434f-9b16-f439515b3588}</destination> + </relationship> + <relationship name="banks"> + <destination>{1de7b457-2173-4205-b8b6-7583e593ccd6}</destination> + </relationship> + </object> + <object class="EventMixer" id="{0c200fe8-ef03-41b2-a33e-f329ea70fa49}"> + <relationship name="masterBus"> + <destination>{f74471e8-1bd6-4cbb-9a5b-96a03303bad7}</destination> + </relationship> + </object> + <object class="MasterTrack" id="{5a576b5d-12f5-4fbf-b629-599050f183fd}"> + <relationship name="mixerGroup"> + <destination>{f74471e8-1bd6-4cbb-9a5b-96a03303bad7}</destination> + </relationship> + </object> + <object class="MixerInput" id="{2a4c8bdc-1196-4954-a2a1-5898510d6bdf}"> + <relationship name="effectChain"> + <destination>{c159b6c4-a2a1-4c5d-9fce-52e3e21725ec}</destination> + </relationship> + <relationship name="panner"> + <destination>{785f6a4b-fae5-4f10-9a6e-dd62f6db7150}</destination> + </relationship> + <relationship name="output"> + <destination>{2f8936ee-464a-439f-87b1-fd6ef863df53}</destination> + </relationship> + </object> + <object class="EventAutomatableProperties" id="{10e583b7-75cc-4612-880c-5693be1465ec}"/> + <object class="MarkerTrack" id="{d0f8d6d6-d8de-48a0-8a19-c30a1c98a9b6}"/> + <object class="GroupTrack" id="{276c7461-c265-487b-bff8-e7efcffa34c3}"> + <relationship name="modules"> + <destination>{05685d82-5fb6-43e2-9d32-008e5ac9cbbd}</destination> + </relationship> + <relationship name="mixerGroup"> + <destination>{b894c117-c8bb-45d0-945c-241b252db332}</destination> + </relationship> + </object> + <object class="Timeline" id="{fe779d63-2f9d-434f-9b16-f439515b3588}"> + <relationship name="modules"> + <destination>{05685d82-5fb6-43e2-9d32-008e5ac9cbbd}</destination> + </relationship> + </object> + <object class="EventMixerMaster" id="{f74471e8-1bd6-4cbb-9a5b-96a03303bad7}"> + <relationship name="effectChain"> + <destination>{f5c90c8c-b038-4b9f-a0fc-8f3ac1431492}</destination> + </relationship> + <relationship name="panner"> + <destination>{01a5cbcb-8140-403e-b030-6f358dd29798}</destination> + </relationship> + <relationship name="mixer"> + <destination>{0c200fe8-ef03-41b2-a33e-f329ea70fa49}</destination> + </relationship> + </object> + <object class="MixerBusEffectChain" id="{c159b6c4-a2a1-4c5d-9fce-52e3e21725ec}"> + <relationship name="effects"> + <destination>{0c25f735-02f9-43f2-9e96-93a6efcbc942}</destination> + </relationship> + </object> + <object class="MixerBusPanner" id="{785f6a4b-fae5-4f10-9a6e-dd62f6db7150}"/> + <object class="SingleSound" id="{05685d82-5fb6-43e2-9d32-008e5ac9cbbd}"> + <property name="length"> + <value>1.3077812499999999</value> + </property> + <relationship name="audioFile"> + <destination>{9b9edf48-2e21-4cbc-a4e0-d6d3410e0765}</destination> + </relationship> + </object> + <object class="EventMixerGroup" id="{b894c117-c8bb-45d0-945c-241b252db332}"> + <property name="name"> + <value>Audio 1</value> + </property> + <relationship name="effectChain"> + <destination>{de1180ca-a608-424e-99e5-c5530494be4c}</destination> + </relationship> + <relationship name="panner"> + <destination>{e645a15f-ace5-43dc-ac2f-e18066bce918}</destination> + </relationship> + <relationship name="output"> + <destination>{f74471e8-1bd6-4cbb-9a5b-96a03303bad7}</destination> + </relationship> + </object> + <object class="MixerBusEffectChain" id="{f5c90c8c-b038-4b9f-a0fc-8f3ac1431492}"> + <relationship name="effects"> + <destination>{63b9b54c-7869-4b3f-a7fe-6a4319b98415}</destination> + </relationship> + </object> + <object class="MixerBusPanner" id="{01a5cbcb-8140-403e-b030-6f358dd29798}"/> + <object class="MixerBusFader" id="{0c25f735-02f9-43f2-9e96-93a6efcbc942}"/> + <object class="MixerBusEffectChain" id="{de1180ca-a608-424e-99e5-c5530494be4c}"> + <relationship name="effects"> + <destination>{02d36313-1557-497b-a362-f2785779ed3b}</destination> + </relationship> + </object> + <object class="MixerBusPanner" id="{e645a15f-ace5-43dc-ac2f-e18066bce918}"/> + <object class="MixerBusFader" id="{63b9b54c-7869-4b3f-a7fe-6a4319b98415}"/> + <object class="MixerBusFader" id="{02d36313-1557-497b-a362-f2785779ed3b}"/> +</objects> diff --git a/FMODStudio/Chapter10/Metadata/Event/{d0bd18e0-a471-46d7-98b4-c6255d379c57}.xml b/FMODStudio/Chapter10/Metadata/Event/{d0bd18e0-a471-46d7-98b4-c6255d379c57}.xml new file mode 100644 index 0000000000000000000000000000000000000000..372b8e79569220a547c7aadf1c01da9167491b8d --- /dev/null +++ b/FMODStudio/Chapter10/Metadata/Event/{d0bd18e0-a471-46d7-98b4-c6255d379c57}.xml @@ -0,0 +1,154 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="Event" id="{d0bd18e0-a471-46d7-98b4-c6255d379c57}"> + <property name="name"> + <value>FireLoop</value> + </property> + <property name="outputFormat"> + <value>2</value> + </property> + <relationship name="folder"> + <destination>{94ff31b1-83b7-438f-a0c7-6a5fdd8ccbe5}</destination> + </relationship> + <relationship name="mixer"> + <destination>{43ccff50-76bb-42ec-a323-1b1fadd93acd}</destination> + </relationship> + <relationship name="masterTrack"> + <destination>{4b29d8d2-8590-4d74-93d9-667d16b6e64b}</destination> + </relationship> + <relationship name="mixerInput"> + <destination>{43769adb-5da4-4782-a4fd-bb99c1bf16ab}</destination> + </relationship> + <relationship name="automatableProperties"> + <destination>{f4ccddc0-edf3-407e-811e-aa81420df867}</destination> + </relationship> + <relationship name="markerTracks"> + <destination>{d5d6e79d-d429-411f-beea-458acbad084d}</destination> + </relationship> + <relationship name="groupTracks"> + <destination>{a7b7130f-b2e8-4d76-beb5-1e8f0d61f998}</destination> + </relationship> + <relationship name="timeline"> + <destination>{b4607d8b-4038-4022-8a70-f663251bd602}</destination> + </relationship> + <relationship name="banks"> + <destination>{1de7b457-2173-4205-b8b6-7583e593ccd6}</destination> + </relationship> + </object> + <object class="EventMixer" id="{43ccff50-76bb-42ec-a323-1b1fadd93acd}"> + <relationship name="masterBus"> + <destination>{167a6239-d50b-4574-8866-ca3ec901d7cc}</destination> + </relationship> + </object> + <object class="MasterTrack" id="{4b29d8d2-8590-4d74-93d9-667d16b6e64b}"> + <relationship name="mixerGroup"> + <destination>{167a6239-d50b-4574-8866-ca3ec901d7cc}</destination> + </relationship> + </object> + <object class="MixerInput" id="{43769adb-5da4-4782-a4fd-bb99c1bf16ab}"> + <relationship name="effectChain"> + <destination>{d6bac136-0d1f-4e55-866f-15a62cfc64ce}</destination> + </relationship> + <relationship name="panner"> + <destination>{004f404c-6b97-4d73-986b-a1d7c2011782}</destination> + </relationship> + <relationship name="output"> + <destination>{2f8936ee-464a-439f-87b1-fd6ef863df53}</destination> + </relationship> + </object> + <object class="EventAutomatableProperties" id="{f4ccddc0-edf3-407e-811e-aa81420df867}"/> + <object class="MarkerTrack" id="{d5d6e79d-d429-411f-beea-458acbad084d}"/> + <object class="GroupTrack" id="{a7b7130f-b2e8-4d76-beb5-1e8f0d61f998}"> + <relationship name="modules"> + <destination>{0b222f59-3adb-4f3a-8f1a-327ac8453859}</destination> + </relationship> + <relationship name="mixerGroup"> + <destination>{ddfbcfb1-6025-414d-9954-7c0cd74bf455}</destination> + </relationship> + </object> + <object class="Timeline" id="{b4607d8b-4038-4022-8a70-f663251bd602}"> + <relationship name="modules"> + <destination>{0b222f59-3adb-4f3a-8f1a-327ac8453859}</destination> + </relationship> + <relationship name="markers"> + <destination>{260658cb-ea39-48ba-b9ee-b3abfb6fb510}</destination> + </relationship> + </object> + <object class="EventMixerMaster" id="{167a6239-d50b-4574-8866-ca3ec901d7cc}"> + <relationship name="effectChain"> + <destination>{2a0c1f15-0452-4f46-b7e5-6488bb760951}</destination> + </relationship> + <relationship name="panner"> + <destination>{d0441bf1-97be-4ddf-8e1c-288fd8b895c5}</destination> + </relationship> + <relationship name="mixer"> + <destination>{43ccff50-76bb-42ec-a323-1b1fadd93acd}</destination> + </relationship> + </object> + <object class="MixerBusEffectChain" id="{d6bac136-0d1f-4e55-866f-15a62cfc64ce}"> + <relationship name="effects"> + <destination>{3047f345-1131-41f9-8c16-e3cf4461acc0}</destination> + </relationship> + </object> + <object class="MixerBusPanner" id="{004f404c-6b97-4d73-986b-a1d7c2011782}"/> + <object class="SingleSound" id="{0b222f59-3adb-4f3a-8f1a-327ac8453859}"> + <property name="length"> + <value>12</value> + </property> + <relationship name="audioFile"> + <destination>{d0d48d00-9bc7-4dc5-96cf-5a0ce45ac0de}</destination> + </relationship> + </object> + <object class="EventMixerGroup" id="{ddfbcfb1-6025-414d-9954-7c0cd74bf455}"> + <property name="name"> + <value>Audio 1</value> + </property> + <relationship name="effectChain"> + <destination>{dcbbeea6-daf6-4b5c-b5f9-9f8051c47161}</destination> + </relationship> + <relationship name="panner"> + <destination>{fe4008bd-4375-44dc-997c-b5baaf862bcf}</destination> + </relationship> + <relationship name="output"> + <destination>{167a6239-d50b-4574-8866-ca3ec901d7cc}</destination> + </relationship> + </object> + <object class="LoopRegion" id="{260658cb-ea39-48ba-b9ee-b3abfb6fb510}"> + <property name="position"> + <value>0</value> + </property> + <property name="length"> + <value>12</value> + </property> + <relationship name="timeline"> + <destination>{b4607d8b-4038-4022-8a70-f663251bd602}</destination> + </relationship> + <relationship name="markerTrack"> + <destination>{d5d6e79d-d429-411f-beea-458acbad084d}</destination> + </relationship> + </object> + <object class="MixerBusEffectChain" id="{2a0c1f15-0452-4f46-b7e5-6488bb760951}"> + <relationship name="effects"> + <destination>{e1dd9176-d7ed-47e4-9dba-429d284c834a}</destination> + <destination>{4b38af07-b95f-4ced-ad3f-a30779a19fbe}</destination> + </relationship> + </object> + <object class="MixerBusPanner" id="{d0441bf1-97be-4ddf-8e1c-288fd8b895c5}"/> + <object class="MixerBusFader" id="{3047f345-1131-41f9-8c16-e3cf4461acc0}"/> + <object class="MixerBusEffectChain" id="{dcbbeea6-daf6-4b5c-b5f9-9f8051c47161}"> + <relationship name="effects"> + <destination>{faab69b2-7388-45d4-a359-fcc1b75e1941}</destination> + </relationship> + </object> + <object class="MixerBusPanner" id="{fe4008bd-4375-44dc-997c-b5baaf862bcf}"/> + <object class="MixerBusFader" id="{e1dd9176-d7ed-47e4-9dba-429d284c834a}"/> + <object class="SpatialiserEffect" id="{4b38af07-b95f-4ced-ad3f-a30779a19fbe}"> + <property name="minimumDistance"> + <value>10</value> + </property> + <property name="maximumDistance"> + <value>500</value> + </property> + </object> + <object class="MixerBusFader" id="{faab69b2-7388-45d4-a359-fcc1b75e1941}"/> +</objects> diff --git a/FMODStudio/Chapter10/Metadata/EventFolder/{94ff31b1-83b7-438f-a0c7-6a5fdd8ccbe5}.xml b/FMODStudio/Chapter10/Metadata/EventFolder/{94ff31b1-83b7-438f-a0c7-6a5fdd8ccbe5}.xml new file mode 100644 index 0000000000000000000000000000000000000000..ef49e5f2827f357f8e96daea36b23b70b4b4b532 --- /dev/null +++ b/FMODStudio/Chapter10/Metadata/EventFolder/{94ff31b1-83b7-438f-a0c7-6a5fdd8ccbe5}.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="MasterEventFolder" id="{94ff31b1-83b7-438f-a0c7-6a5fdd8ccbe5}"> + <property name="name"> + <value>Master</value> + </property> + </object> +</objects> diff --git a/FMODStudio/Chapter10/Metadata/Group/{2f8936ee-464a-439f-87b1-fd6ef863df53}.xml b/FMODStudio/Chapter10/Metadata/Group/{2f8936ee-464a-439f-87b1-fd6ef863df53}.xml new file mode 100644 index 0000000000000000000000000000000000000000..e9099772afb48ae7a72336d3726e81bfb4aaec04 --- /dev/null +++ b/FMODStudio/Chapter10/Metadata/Group/{2f8936ee-464a-439f-87b1-fd6ef863df53}.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="MixerGroup" id="{2f8936ee-464a-439f-87b1-fd6ef863df53}"> + <property name="name"> + <value>SFX</value> + </property> + <relationship name="effectChain"> + <destination>{5842e9b3-7009-4375-baae-14ec06b49291}</destination> + </relationship> + <relationship name="panner"> + <destination>{06e83998-8e4b-4159-b433-53e5d4bf09d0}</destination> + </relationship> + <relationship name="output"> + <destination>{f6284d8c-9099-4e06-b8ed-f5b0509d696f}</destination> + </relationship> + </object> + <object class="MixerBusEffectChain" id="{5842e9b3-7009-4375-baae-14ec06b49291}"> + <relationship name="effects"> + <destination>{f51b3c20-1d85-4ebe-b925-2ac06fcfa234}</destination> + <destination>{93649bf1-d431-40b0-8bed-fc9eb1d3e422}</destination> + </relationship> + </object> + <object class="MixerBusPanner" id="{06e83998-8e4b-4159-b433-53e5d4bf09d0}"/> + <object class="MixerBusFader" id="{f51b3c20-1d85-4ebe-b925-2ac06fcfa234}"/> + <object class="MixerSend" id="{93649bf1-d431-40b0-8bed-fc9eb1d3e422}"> + <property name="inputFormat"> + <value>2</value> + </property> + <relationship name="mixerReturn"> + <destination>{b34471c3-ebd2-4b54-b5e3-5f5beff1b202}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter10/Metadata/Group/{76ef365d-f7b5-4307-94f2-d4ac2facaad5}.xml b/FMODStudio/Chapter10/Metadata/Group/{76ef365d-f7b5-4307-94f2-d4ac2facaad5}.xml new file mode 100644 index 0000000000000000000000000000000000000000..24b52537c30628f69e269ecc4283bb5f3f5d9207 --- /dev/null +++ b/FMODStudio/Chapter10/Metadata/Group/{76ef365d-f7b5-4307-94f2-d4ac2facaad5}.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="MixerGroup" id="{76ef365d-f7b5-4307-94f2-d4ac2facaad5}"> + <property name="name"> + <value>Music</value> + </property> + <relationship name="effectChain"> + <destination>{ca3d7968-34c3-45c1-bf77-5f54f7c0336f}</destination> + </relationship> + <relationship name="panner"> + <destination>{7c58a011-e554-470e-979a-e30cb8c16c64}</destination> + </relationship> + <relationship name="output"> + <destination>{f6284d8c-9099-4e06-b8ed-f5b0509d696f}</destination> + </relationship> + </object> + <object class="MixerBusEffectChain" id="{ca3d7968-34c3-45c1-bf77-5f54f7c0336f}"> + <relationship name="effects"> + <destination>{54f6181e-cb2c-4ce8-9267-1129ab157913}</destination> + </relationship> + </object> + <object class="MixerBusPanner" id="{7c58a011-e554-470e-979a-e30cb8c16c64}"/> + <object class="MixerBusFader" id="{54f6181e-cb2c-4ce8-9267-1129ab157913}"/> +</objects> diff --git a/FMODStudio/Chapter10/Metadata/Master.xml b/FMODStudio/Chapter10/Metadata/Master.xml new file mode 100644 index 0000000000000000000000000000000000000000..a067d4aa8330fe34a0d2cf82a47115f46a97b594 --- /dev/null +++ b/FMODStudio/Chapter10/Metadata/Master.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="MixerMaster" id="{f6284d8c-9099-4e06-b8ed-f5b0509d696f}"> + <property name="name"> + <value>Master Bus</value> + </property> + <relationship name="effectChain"> + <destination>{6f6aaf39-d1e7-45c5-8c49-6711f0d04343}</destination> + </relationship> + <relationship name="panner"> + <destination>{22f5cb64-aa51-40bb-bbf5-816d957b1265}</destination> + </relationship> + <relationship name="mixer"> + <destination>{5130d9cb-07e8-4c02-885e-e27da18e8319}</destination> + </relationship> + </object> + <object class="MixerBusEffectChain" id="{6f6aaf39-d1e7-45c5-8c49-6711f0d04343}"> + <relationship name="effects"> + <destination>{55bed217-be2c-4489-8e9b-415c7c295e7d}</destination> + </relationship> + </object> + <object class="MixerBusPanner" id="{22f5cb64-aa51-40bb-bbf5-816d957b1265}"/> + <object class="MixerBusFader" id="{55bed217-be2c-4489-8e9b-415c7c295e7d}"/> +</objects> diff --git a/FMODStudio/Chapter10/Metadata/Mixer.xml b/FMODStudio/Chapter10/Metadata/Mixer.xml new file mode 100644 index 0000000000000000000000000000000000000000..96e3852f915cc7ae252e9b5a227df93e70c6daf5 --- /dev/null +++ b/FMODStudio/Chapter10/Metadata/Mixer.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="Mixer" id="{5130d9cb-07e8-4c02-885e-e27da18e8319}"> + <relationship name="masterBus"> + <destination>{f6284d8c-9099-4e06-b8ed-f5b0509d696f}</destination> + </relationship> + <relationship name="snapshotList"> + <destination>{6dc45fff-38d8-417c-8652-91bba6f7500f}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter10/Metadata/Return/{b34471c3-ebd2-4b54-b5e3-5f5beff1b202}.xml b/FMODStudio/Chapter10/Metadata/Return/{b34471c3-ebd2-4b54-b5e3-5f5beff1b202}.xml new file mode 100644 index 0000000000000000000000000000000000000000..ffac110dc71edd06bd1a2cdd6d427d26a91a3ee5 --- /dev/null +++ b/FMODStudio/Chapter10/Metadata/Return/{b34471c3-ebd2-4b54-b5e3-5f5beff1b202}.xml @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="MixerReturn" id="{b34471c3-ebd2-4b54-b5e3-5f5beff1b202}"> + <property name="overridingInputFormat"> + <value>2</value> + </property> + <property name="inputFormatOverridden"> + <value>true</value> + </property> + <property name="name"> + <value>Reverb</value> + </property> + <relationship name="effectChain"> + <destination>{7ba27032-da32-43d1-b1de-67394509150d}</destination> + </relationship> + <relationship name="panner"> + <destination>{ea645dfd-3ced-4e6d-996b-2e727f18d8ce}</destination> + </relationship> + <relationship name="output"> + <destination>{f6284d8c-9099-4e06-b8ed-f5b0509d696f}</destination> + </relationship> + </object> + <object class="MixerBusEffectChain" id="{7ba27032-da32-43d1-b1de-67394509150d}"> + <relationship name="effects"> + <destination>{86dcc538-5923-4ebb-a6aa-d1f286f1272d}</destination> + <destination>{0b091950-22de-4f23-8818-58efac44d769}</destination> + </relationship> + </object> + <object class="MixerBusPanner" id="{ea645dfd-3ced-4e6d-996b-2e727f18d8ce}"/> + <object class="SFXReverbEffect" id="{86dcc538-5923-4ebb-a6aa-d1f286f1272d}"> + <property name="wetLevel"> + <value>0</value> + </property> + <property name="dryLevel"> + <value>-80</value> + </property> + </object> + <object class="MixerBusFader" id="{0b091950-22de-4f23-8818-58efac44d769}"/> +</objects> diff --git a/FMODStudio/Chapter10/Metadata/Snapshot/{5ff95cb9-9388-4a7b-a1d1-3d816aeb2fc8}.xml b/FMODStudio/Chapter10/Metadata/Snapshot/{5ff95cb9-9388-4a7b-a1d1-3d816aeb2fc8}.xml new file mode 100644 index 0000000000000000000000000000000000000000..6c3081faa2779f52886ec2c3c1d449d9eea1cb81 --- /dev/null +++ b/FMODStudio/Chapter10/Metadata/Snapshot/{5ff95cb9-9388-4a7b-a1d1-3d816aeb2fc8}.xml @@ -0,0 +1,49 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="Snapshot" id="{5ff95cb9-9388-4a7b-a1d1-3d816aeb2fc8}"> + <property name="name"> + <value>WithReverb</value> + </property> + <relationship name="mixer"> + <destination>{5130d9cb-07e8-4c02-885e-e27da18e8319}</destination> + </relationship> + <relationship name="automatableProperties"> + <destination>{115fd91e-eec5-4a9b-9b9f-1e36f67106fe}</destination> + </relationship> + <relationship name="markerTracks"> + <destination>{329c7fbf-6fa8-4e63-87b4-b8a754c08a54}</destination> + </relationship> + <relationship name="timeline"> + <destination>{05fb19ae-4d29-4ce4-a8bc-78d93c7e61e4}</destination> + </relationship> + <relationship name="snapshotMasterTrack"> + <destination>{3a9ea0e3-7874-4a65-9010-cb8bf2cf1a8a}</destination> + </relationship> + <relationship name="snapshotProperties"> + <destination>{da65a510-d6c6-44c1-b291-9ccf4ce76d7c}</destination> + </relationship> + <relationship name="snapshotTracks"> + <destination>{76775df9-f6d2-443e-9f7d-6ae8ac974c22}</destination> + </relationship> + </object> + <object class="EventAutomatableProperties" id="{115fd91e-eec5-4a9b-9b9f-1e36f67106fe}"/> + <object class="MarkerTrack" id="{329c7fbf-6fa8-4e63-87b4-b8a754c08a54}"/> + <object class="Timeline" id="{05fb19ae-4d29-4ce4-a8bc-78d93c7e61e4}"/> + <object class="SnapshotMasterTrack" id="{3a9ea0e3-7874-4a65-9010-cb8bf2cf1a8a}"/> + <object class="SnapshotProperty" id="{da65a510-d6c6-44c1-b291-9ccf4ce76d7c}"> + <property name="propertyName"> + <value>level</value> + </property> + <property name="value"> + <value>-8.5</value> + </property> + <relationship name="automatableObject"> + <destination>{93649bf1-d431-40b0-8bed-fc9eb1d3e422}</destination> + </relationship> + </object> + <object class="SnapshotTrack" id="{76775df9-f6d2-443e-9f7d-6ae8ac974c22}"> + <relationship name="mixerStrip"> + <destination>{2f8936ee-464a-439f-87b1-fd6ef863df53}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter10/Metadata/SnapshotGroup/{6dc45fff-38d8-417c-8652-91bba6f7500f}.xml b/FMODStudio/Chapter10/Metadata/SnapshotGroup/{6dc45fff-38d8-417c-8652-91bba6f7500f}.xml new file mode 100644 index 0000000000000000000000000000000000000000..e7146fa1c7f13aa95d18b358925ac3735ef5259a --- /dev/null +++ b/FMODStudio/Chapter10/Metadata/SnapshotGroup/{6dc45fff-38d8-417c-8652-91bba6f7500f}.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="SnapshotList" id="{6dc45fff-38d8-417c-8652-91bba6f7500f}"> + <relationship name="items"> + <destination>{5ff95cb9-9388-4a7b-a1d1-3d816aeb2fc8}</destination> + </relationship> + <relationship name="mixer"> + <destination>{5130d9cb-07e8-4c02-885e-e27da18e8319}</destination> + </relationship> + </object> +</objects> diff --git a/FMODStudio/Chapter10/Metadata/Tags.xml b/FMODStudio/Chapter10/Metadata/Tags.xml new file mode 100644 index 0000000000000000000000000000000000000000..dd25f3eac44304149f6e156385d9735649098324 --- /dev/null +++ b/FMODStudio/Chapter10/Metadata/Tags.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="MasterTagFolder" id="{5c4ec9d8-a437-4d48-a923-6069be7e95e3}"> + <property name="name"> + <value>Master</value> + </property> + </object> +</objects> diff --git a/FMODStudio/Chapter10/Metadata/Workspace.xml b/FMODStudio/Chapter10/Metadata/Workspace.xml new file mode 100644 index 0000000000000000000000000000000000000000..9c886d429c8885bdc389724357a32a77817d9273 --- /dev/null +++ b/FMODStudio/Chapter10/Metadata/Workspace.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objects serializationModel="Studio.01.09.00"> + <object class="Workspace" id="{4b471a38-78dc-4aa7-8065-e2a4be013d03}"> + <property name="builtBanksOutputDirectory"> + <value>../../Chapter10</value> + </property> + <relationship name="masterEventFolder"> + <destination>{94ff31b1-83b7-438f-a0c7-6a5fdd8ccbe5}</destination> + </relationship> + <relationship name="masterTagFolder"> + <destination>{5c4ec9d8-a437-4d48-a923-6069be7e95e3}</destination> + </relationship> + <relationship name="masterBankFolder"> + <destination>{24acc9ed-98e6-4f97-b384-7cedad0817ab}</destination> + </relationship> + <relationship name="masterAssetFolder"> + <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination> + </relationship> + <relationship name="mixer"> + <destination>{5130d9cb-07e8-4c02-885e-e27da18e8319}</destination> + </relationship> + <relationship name="platforms"> + <destination>{3ceb98b4-072c-41c2-a593-48d343172e25}</destination> + </relationship> + </object> + <object class="Platform" id="{3ceb98b4-072c-41c2-a593-48d343172e25}"> + <property name="hardwareType"> + <value>0</value> + </property> + <property name="name"> + <value>Desktop</value> + </property> + <property name="subDirectory"> + <value>Assets</value> + </property> + <property name="speakerFormat"> + <value>6</value> + </property> + </object> +</objects>