From 39ee821f54b3ea934467963749f92c4ed609b928 Mon Sep 17 00:00:00 2001 From: Amrit Panesar Date: Wed, 6 May 2015 10:18:39 -0700 Subject: [PATCH] start 380 project5 changes to 380 project 4 changes to 350 project 2 Signed-off-by: Amrit Panesar --- COM350/Project2/Project2/Form1.Designer.vb | 86 +- COM350/Project2/Project2/Form1.vb | 13 +- COM350/Project2/Project2/PatternSearcher.vb | 12 +- COM380/MFCApplication1/MFCApplication1.sln | 20 + .../MFCApplication1/MFCApplication1.cpp | 90 +++ .../MFCApplication1/MFCApplication1.h | 32 + .../MFCApplication1/MFCApplication1.rc | Bin 0 -> 10390 bytes .../MFCApplication1/MFCApplication1.vcxproj | 128 +++ .../MFCApplication1.vcxproj.filters | 63 ++ .../MFCApplication1/MFCApplication1Dlg.cpp | 152 ++++ .../MFCApplication1/MFCApplication1Dlg.h | 32 + .../MFCApplication1/ReadMe.txt | 103 +++ .../MFCApplication1/Resource.h | 21 + .../MFCApplication1/res/MFCApplication1.ico | Bin 0 -> 67777 bytes .../MFCApplication1/res/MFCApplication1.rc2 | Bin 0 -> 814 bytes .../MFCApplication1/stdafx.cpp | 8 + .../MFCApplication1/MFCApplication1/stdafx.h | 55 ++ .../MFCApplication1/targetver.h | 8 + COM380/Project4/Project4/Form1.h | 55 +- COM380/Project4/Project4/LottoBall.h | 55 +- COM380/Project4/Project4/LottoBallcpp.cpp | 85 +- COM380/Project5/GambleKit.sln | 20 + .../GambleKit/CustomGameLogic/CustomGame.cpp | 25 + .../GambleKit/CustomGameLogic/CustomGame.h | 39 + .../GambleKit/CustomGameLogic/MainWindow.cpp | 78 ++ .../GambleKit/CustomGameLogic/MainWindow.h | 26 + .../CustomGameLogic/Pages/MainPage.cpp | 159 ++++ .../CustomGameLogic/Pages/MainPage.h | 37 + .../GambleKit/CustomGameLogic/main.cpp | 30 + .../Project5/GambleKit/Engine/Base/GkBase.cpp | 23 + .../Project5/GambleKit/Engine/Base/GkBase.h | 11 + .../GambleKit/Engine/Base/GkBaseReelMap.cpp | 126 +++ .../GambleKit/Engine/Base/GkBaseReelMap.h | 31 + COM380/Project5/GambleKit/Engine/GambleKit.h | 57 ++ .../Bindings/GkGameAnimationsSoundBinding.cpp | 65 ++ .../Bindings/GkGameAnimationsSoundBinding.h | 31 + .../Bindings/GkGameButtonsBinding.cpp | 115 +++ .../Entities/Bindings/GkGameButtonsBinding.h | 27 + .../Bindings/GkGameButtonsSoundBinding.cpp | 56 ++ .../Bindings/GkGameButtonsSoundBinding.h | 29 + .../Bindings/GkGameTextsDateTimeBinding.cpp | 42 + .../Bindings/GkGameTextsDateTimeBinding.h | 27 + .../Bindings/GkGameTextsFormatBinding.cpp | 23 + .../Bindings/GkGameTextsFormatBinding.h | 14 + .../Bindings/GkGameTextsFormatIntBinding.cpp | 59 ++ .../Bindings/GkGameTextsFormatIntBinding.h | 28 + .../Bindings/GkGameTextsIntBinding.cpp | 40 + .../Entities/Bindings/GkGameTextsIntBinding.h | 23 + .../Buttons/GkGameAnimationButton.cpp | 95 +++ .../Entities/Buttons/GkGameAnimationButton.h | 23 + .../Entities/Buttons/GkGameCheckButton.cpp | 52 ++ .../Game/Entities/Buttons/GkGameCheckButton.h | 20 + .../Entities/Buttons/GkGameClickButton.cpp | 22 + .../Game/Entities/Buttons/GkGameClickButton.h | 15 + .../Engine/Game/Entities/GkGameAnimation.cpp | 125 +++ .../Engine/Game/Entities/GkGameAnimation.h | 31 + .../Engine/Game/Entities/GkGameButton.cpp | 176 +++++ .../Engine/Game/Entities/GkGameButton.h | 33 + .../Engine/Game/Entities/GkGameReels.cpp | 516 ++++++++++++ .../Engine/Game/Entities/GkGameReels.h | 86 ++ .../Entities/GkGameStreamingAnimation.cpp | 145 ++++ .../Game/Entities/GkGameStreamingAnimation.h | 32 + .../Engine/Game/Entities/GkGameText.cpp | 148 ++++ .../Engine/Game/Entities/GkGameText.h | 36 + .../Game/Entities/GkGameWinningCounter.cpp | 85 ++ .../Game/Entities/GkGameWinningCounter.h | 32 + .../Project5/GambleKit/Engine/Game/GkGame.cpp | 304 ++++++++ .../Project5/GambleKit/Engine/Game/GkGame.h | 61 ++ .../GambleKit/Engine/Game/GkGameEntity.cpp | 54 ++ .../GambleKit/Engine/Game/GkGameEntity.h | 20 + .../GambleKit/Engine/Game/GkGamePage.cpp | 93 +++ .../GambleKit/Engine/Game/GkGamePage.h | 28 + .../GambleKit/Engine/Game/GkGameReelModel.cpp | 29 + .../GambleKit/Engine/Game/GkGameReelModel.h | 18 + .../Game/GkGameReelsCombinationGenerator.cpp | 80 ++ .../Game/GkGameReelsCombinationGenerator.h | 30 + .../GambleKit/Engine/Game/GkGameTimer.cpp | 54 ++ .../GambleKit/Engine/Game/GkGameTimer.h | 21 + .../Game/GkGameWinningPotentialsAnalyzer.cpp | 116 +++ .../Game/GkGameWinningPotentialsAnalyzer.h | 19 + .../Engine/Game/GkGameWinningsAnalyzer.cpp | 487 ++++++++++++ .../Engine/Game/GkGameWinningsAnalyzer.h | 80 ++ .../Engine/Game/GkGameWinningsModel.cpp | 124 +++ .../Engine/Game/GkGameWinningsModel.h | 48 ++ .../Game/ReelModels/GkGameReelRandomModel.cpp | 117 +++ .../Game/ReelModels/GkGameReelRandomModel.h | 35 + .../Game/ReelModels/GkGameReelStripModel.cpp | 61 ++ .../Game/ReelModels/GkGameReelStripModel.h | 21 + .../Project5/GambleKit/Engine/GkDefinitions.h | 12 + .../Engine/Graphics/GkAnimatedFont.cpp | 50 ++ .../Engine/Graphics/GkAnimatedFont.h | 24 + .../Engine/Graphics/GkAnimatedTexture.cpp | 123 +++ .../Engine/Graphics/GkAnimatedTexture.h | 29 + .../Engine/Graphics/GkGraphicsDevice.cpp | 197 +++++ .../Engine/Graphics/GkGraphicsDevice.h | 32 + .../GambleKit/Engine/Graphics/GkImage.cpp | 69 ++ .../GambleKit/Engine/Graphics/GkImage.h | 24 + .../GambleKit/Engine/Graphics/GkTexture.cpp | 87 +++ .../GambleKit/Engine/Graphics/GkTexture.h | 27 + .../Engine/OSSpecific/GkFileSystem.cpp | 285 +++++++ .../Engine/OSSpecific/GkFileSystem.h | 53 ++ .../GambleKit/Engine/OSSpecific/GkOSUtils.cpp | 201 +++++ .../GambleKit/Engine/OSSpecific/GkOSUtils.h | 47 ++ .../Engine/OSSpecific/GkOpenGLWindowsForm.cpp | 87 +++ .../Engine/OSSpecific/GkOpenGLWindowsForm.h | 24 + .../Engine/OSSpecific/GkWindowsForm.cpp | 397 ++++++++++ .../Engine/OSSpecific/GkWindowsForm.h | 71 ++ .../Engine/OSSpecific/GkWindowsMutex.cpp | 36 + .../Engine/OSSpecific/GkWindowsMutex.h | 18 + .../Engine/OSSpecific/GkWindowsThread.cpp | 50 ++ .../Engine/OSSpecific/GkWindowsThread.h | 26 + .../GambleKit/Engine/Sound/GkSoundDevice.cpp | 67 ++ .../GambleKit/Engine/Sound/GkSoundDevice.h | 23 + .../GambleKit/Engine/Sound/GkSoundSource.cpp | 87 +++ .../GambleKit/Engine/Sound/GkSoundSource.h | 20 + .../Project5/GambleKit/Engine/Utils/GkList.h | 110 +++ .../GambleKit/Engine/Utils/GkLogFile.h | 71 ++ .../GambleKit/Engine/Utils/GkMaths.cpp | 92 +++ .../Project5/GambleKit/Engine/Utils/GkMaths.h | 23 + .../GambleKit/Engine/Utils/GkStrings.cpp | 283 +++++++ .../GambleKit/Engine/Utils/GkStrings.h | 35 + COM380/Project5/GambleKit/GambleKit.vcxproj | 196 +++++ .../GambleKit/GambleKit.vcxproj.filters | 349 +++++++++ COM380/Project5/GambleKit/Intruduction.txt | 33 + COM380/Project5/GambleKit/ReadMe.txt | 19 + COM380/Project5/GambleKit/version.txt | 12 + COM380/Project5/GameData/Background.png | Bin 0 -> 228425 bytes COM380/Project5/GameData/Thumbs.db | Bin 0 -> 174080 bytes COM380/Project5/GameData/btn_bet_default.png | Bin 0 -> 4212 bytes COM380/Project5/GameData/btn_bet_disabled.png | Bin 0 -> 3776 bytes COM380/Project5/GameData/btn_bet_down.png | Bin 0 -> 3849 bytes .../Project5/GameData/btn_lines_default.png | Bin 0 -> 4531 bytes .../Project5/GameData/btn_lines_disabled.png | Bin 0 -> 4036 bytes COM380/Project5/GameData/btn_lines_down.png | Bin 0 -> 4101 bytes .../Project5/GameData/btn_start_default.png | Bin 0 -> 6125 bytes .../Project5/GameData/btn_start_disabled.png | Bin 0 -> 5200 bytes COM380/Project5/GameData/btn_start_down.png | Bin 0 -> 5551 bytes COM380/Project5/GameData/font_main_00000.png | Bin 0 -> 821 bytes COM380/Project5/GameData/font_main_00001.png | Bin 0 -> 424 bytes COM380/Project5/GameData/font_main_00002.png | Bin 0 -> 775 bytes COM380/Project5/GameData/font_main_00003.png | Bin 0 -> 691 bytes COM380/Project5/GameData/font_main_00004.png | Bin 0 -> 597 bytes COM380/Project5/GameData/font_main_00005.png | Bin 0 -> 656 bytes COM380/Project5/GameData/font_main_00006.png | Bin 0 -> 755 bytes COM380/Project5/GameData/font_main_00007.png | Bin 0 -> 558 bytes COM380/Project5/GameData/font_main_00008.png | Bin 0 -> 802 bytes COM380/Project5/GameData/font_main_00009.png | Bin 0 -> 754 bytes COM380/Project5/GameData/font_main_00010.png | Bin 0 -> 265 bytes COM380/Project5/GameData/font_main_00011.png | Bin 0 -> 315 bytes COM380/Project5/GameData/font_main_00012.png | Bin 0 -> 326 bytes COM380/Project5/GameData/line123.png | Bin 0 -> 326 bytes COM380/Project5/GameData/line45.png | Bin 0 -> 16051 bytes COM380/Project5/GameData/reel.wav | Bin 0 -> 12322 bytes COM380/Project5/GameData/reels.wav | Bin 0 -> 278034 bytes COM380/Project5/GameData/symbol_7.png | Bin 0 -> 12762 bytes COM380/Project5/GameData/symbol_bell.png | Bin 0 -> 12950 bytes COM380/Project5/GameData/symbol_cherry.png | Bin 0 -> 16737 bytes COM380/Project5/GameData/symbol_melon.png | Bin 0 -> 18983 bytes COM380/Project5/License.txt | 144 ++++ COM380/Project5/include/AL/al.h | 732 ++++++++++++++++++ COM380/Project5/include/AL/alc.h | 281 +++++++ COM380/Project5/include/AL/alut.h | 126 +++ COM380/Project5/include/DevIL/config.h | 140 ++++ COM380/Project5/include/DevIL/config.h.win | 79 ++ .../include/DevIL/devil_internal_exports.h | 161 ++++ COM380/Project5/include/DevIL/il.h | 644 +++++++++++++++ COM380/Project5/include/DevIL/il_wrap.h | 205 +++++ COM380/Project5/include/DevIL/ilu.h | 195 +++++ COM380/Project5/include/DevIL/ilu_region.h | 25 + COM380/Project5/include/DevIL/ilut.h | 390 ++++++++++ COM380/Project5/include/DevIL/ilut_config.h | 26 + COM380/Project5/include/GL/GLUt.h | 716 +++++++++++++++++ COM380/Project5/include/vld/vld.h | 307 ++++++++ COM380/Project5/include/vld/vld_def.h | 45 ++ 174 files changed, 13356 insertions(+), 80 deletions(-) create mode 100644 COM380/MFCApplication1/MFCApplication1.sln create mode 100644 COM380/MFCApplication1/MFCApplication1/MFCApplication1.cpp create mode 100644 COM380/MFCApplication1/MFCApplication1/MFCApplication1.h create mode 100644 COM380/MFCApplication1/MFCApplication1/MFCApplication1.rc create mode 100644 COM380/MFCApplication1/MFCApplication1/MFCApplication1.vcxproj create mode 100644 COM380/MFCApplication1/MFCApplication1/MFCApplication1.vcxproj.filters create mode 100644 COM380/MFCApplication1/MFCApplication1/MFCApplication1Dlg.cpp create mode 100644 COM380/MFCApplication1/MFCApplication1/MFCApplication1Dlg.h create mode 100644 COM380/MFCApplication1/MFCApplication1/ReadMe.txt create mode 100644 COM380/MFCApplication1/MFCApplication1/Resource.h create mode 100644 COM380/MFCApplication1/MFCApplication1/res/MFCApplication1.ico create mode 100644 COM380/MFCApplication1/MFCApplication1/res/MFCApplication1.rc2 create mode 100644 COM380/MFCApplication1/MFCApplication1/stdafx.cpp create mode 100644 COM380/MFCApplication1/MFCApplication1/stdafx.h create mode 100644 COM380/MFCApplication1/MFCApplication1/targetver.h create mode 100644 COM380/Project5/GambleKit.sln create mode 100644 COM380/Project5/GambleKit/CustomGameLogic/CustomGame.cpp create mode 100644 COM380/Project5/GambleKit/CustomGameLogic/CustomGame.h create mode 100644 COM380/Project5/GambleKit/CustomGameLogic/MainWindow.cpp create mode 100644 COM380/Project5/GambleKit/CustomGameLogic/MainWindow.h create mode 100644 COM380/Project5/GambleKit/CustomGameLogic/Pages/MainPage.cpp create mode 100644 COM380/Project5/GambleKit/CustomGameLogic/Pages/MainPage.h create mode 100644 COM380/Project5/GambleKit/CustomGameLogic/main.cpp create mode 100644 COM380/Project5/GambleKit/Engine/Base/GkBase.cpp create mode 100644 COM380/Project5/GambleKit/Engine/Base/GkBase.h create mode 100644 COM380/Project5/GambleKit/Engine/Base/GkBaseReelMap.cpp create mode 100644 COM380/Project5/GambleKit/Engine/Base/GkBaseReelMap.h create mode 100644 COM380/Project5/GambleKit/Engine/GambleKit.h create mode 100644 COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameAnimationsSoundBinding.cpp create mode 100644 COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameAnimationsSoundBinding.h create mode 100644 COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameButtonsBinding.cpp create mode 100644 COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameButtonsBinding.h create mode 100644 COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameButtonsSoundBinding.cpp create mode 100644 COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameButtonsSoundBinding.h create mode 100644 COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameTextsDateTimeBinding.cpp create mode 100644 COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameTextsDateTimeBinding.h create mode 100644 COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameTextsFormatBinding.cpp create mode 100644 COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameTextsFormatBinding.h create mode 100644 COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameTextsFormatIntBinding.cpp create mode 100644 COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameTextsFormatIntBinding.h create mode 100644 COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameTextsIntBinding.cpp create mode 100644 COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameTextsIntBinding.h create mode 100644 COM380/Project5/GambleKit/Engine/Game/Entities/Buttons/GkGameAnimationButton.cpp create mode 100644 COM380/Project5/GambleKit/Engine/Game/Entities/Buttons/GkGameAnimationButton.h create mode 100644 COM380/Project5/GambleKit/Engine/Game/Entities/Buttons/GkGameCheckButton.cpp create mode 100644 COM380/Project5/GambleKit/Engine/Game/Entities/Buttons/GkGameCheckButton.h create mode 100644 COM380/Project5/GambleKit/Engine/Game/Entities/Buttons/GkGameClickButton.cpp create mode 100644 COM380/Project5/GambleKit/Engine/Game/Entities/Buttons/GkGameClickButton.h create mode 100644 COM380/Project5/GambleKit/Engine/Game/Entities/GkGameAnimation.cpp create mode 100644 COM380/Project5/GambleKit/Engine/Game/Entities/GkGameAnimation.h create mode 100644 COM380/Project5/GambleKit/Engine/Game/Entities/GkGameButton.cpp create mode 100644 COM380/Project5/GambleKit/Engine/Game/Entities/GkGameButton.h create mode 100644 COM380/Project5/GambleKit/Engine/Game/Entities/GkGameReels.cpp create mode 100644 COM380/Project5/GambleKit/Engine/Game/Entities/GkGameReels.h create mode 100644 COM380/Project5/GambleKit/Engine/Game/Entities/GkGameStreamingAnimation.cpp create mode 100644 COM380/Project5/GambleKit/Engine/Game/Entities/GkGameStreamingAnimation.h create mode 100644 COM380/Project5/GambleKit/Engine/Game/Entities/GkGameText.cpp create mode 100644 COM380/Project5/GambleKit/Engine/Game/Entities/GkGameText.h create mode 100644 COM380/Project5/GambleKit/Engine/Game/Entities/GkGameWinningCounter.cpp create mode 100644 COM380/Project5/GambleKit/Engine/Game/Entities/GkGameWinningCounter.h create mode 100644 COM380/Project5/GambleKit/Engine/Game/GkGame.cpp create mode 100644 COM380/Project5/GambleKit/Engine/Game/GkGame.h create mode 100644 COM380/Project5/GambleKit/Engine/Game/GkGameEntity.cpp create mode 100644 COM380/Project5/GambleKit/Engine/Game/GkGameEntity.h create mode 100644 COM380/Project5/GambleKit/Engine/Game/GkGamePage.cpp create mode 100644 COM380/Project5/GambleKit/Engine/Game/GkGamePage.h create mode 100644 COM380/Project5/GambleKit/Engine/Game/GkGameReelModel.cpp create mode 100644 COM380/Project5/GambleKit/Engine/Game/GkGameReelModel.h create mode 100644 COM380/Project5/GambleKit/Engine/Game/GkGameReelsCombinationGenerator.cpp create mode 100644 COM380/Project5/GambleKit/Engine/Game/GkGameReelsCombinationGenerator.h create mode 100644 COM380/Project5/GambleKit/Engine/Game/GkGameTimer.cpp create mode 100644 COM380/Project5/GambleKit/Engine/Game/GkGameTimer.h create mode 100644 COM380/Project5/GambleKit/Engine/Game/GkGameWinningPotentialsAnalyzer.cpp create mode 100644 COM380/Project5/GambleKit/Engine/Game/GkGameWinningPotentialsAnalyzer.h create mode 100644 COM380/Project5/GambleKit/Engine/Game/GkGameWinningsAnalyzer.cpp create mode 100644 COM380/Project5/GambleKit/Engine/Game/GkGameWinningsAnalyzer.h create mode 100644 COM380/Project5/GambleKit/Engine/Game/GkGameWinningsModel.cpp create mode 100644 COM380/Project5/GambleKit/Engine/Game/GkGameWinningsModel.h create mode 100644 COM380/Project5/GambleKit/Engine/Game/ReelModels/GkGameReelRandomModel.cpp create mode 100644 COM380/Project5/GambleKit/Engine/Game/ReelModels/GkGameReelRandomModel.h create mode 100644 COM380/Project5/GambleKit/Engine/Game/ReelModels/GkGameReelStripModel.cpp create mode 100644 COM380/Project5/GambleKit/Engine/Game/ReelModels/GkGameReelStripModel.h create mode 100644 COM380/Project5/GambleKit/Engine/GkDefinitions.h create mode 100644 COM380/Project5/GambleKit/Engine/Graphics/GkAnimatedFont.cpp create mode 100644 COM380/Project5/GambleKit/Engine/Graphics/GkAnimatedFont.h create mode 100644 COM380/Project5/GambleKit/Engine/Graphics/GkAnimatedTexture.cpp create mode 100644 COM380/Project5/GambleKit/Engine/Graphics/GkAnimatedTexture.h create mode 100644 COM380/Project5/GambleKit/Engine/Graphics/GkGraphicsDevice.cpp create mode 100644 COM380/Project5/GambleKit/Engine/Graphics/GkGraphicsDevice.h create mode 100644 COM380/Project5/GambleKit/Engine/Graphics/GkImage.cpp create mode 100644 COM380/Project5/GambleKit/Engine/Graphics/GkImage.h create mode 100644 COM380/Project5/GambleKit/Engine/Graphics/GkTexture.cpp create mode 100644 COM380/Project5/GambleKit/Engine/Graphics/GkTexture.h create mode 100644 COM380/Project5/GambleKit/Engine/OSSpecific/GkFileSystem.cpp create mode 100644 COM380/Project5/GambleKit/Engine/OSSpecific/GkFileSystem.h create mode 100644 COM380/Project5/GambleKit/Engine/OSSpecific/GkOSUtils.cpp create mode 100644 COM380/Project5/GambleKit/Engine/OSSpecific/GkOSUtils.h create mode 100644 COM380/Project5/GambleKit/Engine/OSSpecific/GkOpenGLWindowsForm.cpp create mode 100644 COM380/Project5/GambleKit/Engine/OSSpecific/GkOpenGLWindowsForm.h create mode 100644 COM380/Project5/GambleKit/Engine/OSSpecific/GkWindowsForm.cpp create mode 100644 COM380/Project5/GambleKit/Engine/OSSpecific/GkWindowsForm.h create mode 100644 COM380/Project5/GambleKit/Engine/OSSpecific/GkWindowsMutex.cpp create mode 100644 COM380/Project5/GambleKit/Engine/OSSpecific/GkWindowsMutex.h create mode 100644 COM380/Project5/GambleKit/Engine/OSSpecific/GkWindowsThread.cpp create mode 100644 COM380/Project5/GambleKit/Engine/OSSpecific/GkWindowsThread.h create mode 100644 COM380/Project5/GambleKit/Engine/Sound/GkSoundDevice.cpp create mode 100644 COM380/Project5/GambleKit/Engine/Sound/GkSoundDevice.h create mode 100644 COM380/Project5/GambleKit/Engine/Sound/GkSoundSource.cpp create mode 100644 COM380/Project5/GambleKit/Engine/Sound/GkSoundSource.h create mode 100644 COM380/Project5/GambleKit/Engine/Utils/GkList.h create mode 100644 COM380/Project5/GambleKit/Engine/Utils/GkLogFile.h create mode 100644 COM380/Project5/GambleKit/Engine/Utils/GkMaths.cpp create mode 100644 COM380/Project5/GambleKit/Engine/Utils/GkMaths.h create mode 100644 COM380/Project5/GambleKit/Engine/Utils/GkStrings.cpp create mode 100644 COM380/Project5/GambleKit/Engine/Utils/GkStrings.h create mode 100644 COM380/Project5/GambleKit/GambleKit.vcxproj create mode 100644 COM380/Project5/GambleKit/GambleKit.vcxproj.filters create mode 100644 COM380/Project5/GambleKit/Intruduction.txt create mode 100644 COM380/Project5/GambleKit/ReadMe.txt create mode 100644 COM380/Project5/GambleKit/version.txt create mode 100644 COM380/Project5/GameData/Background.png create mode 100644 COM380/Project5/GameData/Thumbs.db create mode 100644 COM380/Project5/GameData/btn_bet_default.png create mode 100644 COM380/Project5/GameData/btn_bet_disabled.png create mode 100644 COM380/Project5/GameData/btn_bet_down.png create mode 100644 COM380/Project5/GameData/btn_lines_default.png create mode 100644 COM380/Project5/GameData/btn_lines_disabled.png create mode 100644 COM380/Project5/GameData/btn_lines_down.png create mode 100644 COM380/Project5/GameData/btn_start_default.png create mode 100644 COM380/Project5/GameData/btn_start_disabled.png create mode 100644 COM380/Project5/GameData/btn_start_down.png create mode 100644 COM380/Project5/GameData/font_main_00000.png create mode 100644 COM380/Project5/GameData/font_main_00001.png create mode 100644 COM380/Project5/GameData/font_main_00002.png create mode 100644 COM380/Project5/GameData/font_main_00003.png create mode 100644 COM380/Project5/GameData/font_main_00004.png create mode 100644 COM380/Project5/GameData/font_main_00005.png create mode 100644 COM380/Project5/GameData/font_main_00006.png create mode 100644 COM380/Project5/GameData/font_main_00007.png create mode 100644 COM380/Project5/GameData/font_main_00008.png create mode 100644 COM380/Project5/GameData/font_main_00009.png create mode 100644 COM380/Project5/GameData/font_main_00010.png create mode 100644 COM380/Project5/GameData/font_main_00011.png create mode 100644 COM380/Project5/GameData/font_main_00012.png create mode 100644 COM380/Project5/GameData/line123.png create mode 100644 COM380/Project5/GameData/line45.png create mode 100644 COM380/Project5/GameData/reel.wav create mode 100644 COM380/Project5/GameData/reels.wav create mode 100644 COM380/Project5/GameData/symbol_7.png create mode 100644 COM380/Project5/GameData/symbol_bell.png create mode 100644 COM380/Project5/GameData/symbol_cherry.png create mode 100644 COM380/Project5/GameData/symbol_melon.png create mode 100644 COM380/Project5/License.txt create mode 100644 COM380/Project5/include/AL/al.h create mode 100644 COM380/Project5/include/AL/alc.h create mode 100644 COM380/Project5/include/AL/alut.h create mode 100644 COM380/Project5/include/DevIL/config.h create mode 100644 COM380/Project5/include/DevIL/config.h.win create mode 100644 COM380/Project5/include/DevIL/devil_internal_exports.h create mode 100644 COM380/Project5/include/DevIL/il.h create mode 100644 COM380/Project5/include/DevIL/il_wrap.h create mode 100644 COM380/Project5/include/DevIL/ilu.h create mode 100644 COM380/Project5/include/DevIL/ilu_region.h create mode 100644 COM380/Project5/include/DevIL/ilut.h create mode 100644 COM380/Project5/include/DevIL/ilut_config.h create mode 100644 COM380/Project5/include/GL/GLUt.h create mode 100644 COM380/Project5/include/vld/vld.h create mode 100644 COM380/Project5/include/vld/vld_def.h diff --git a/COM350/Project2/Project2/Form1.Designer.vb b/COM350/Project2/Project2/Form1.Designer.vb index 380716e..127636e 100644 --- a/COM350/Project2/Project2/Form1.Designer.vb +++ b/COM350/Project2/Project2/Form1.Designer.vb @@ -35,10 +35,19 @@ Partial Class Form1 Me.ComboBox1 = New System.Windows.Forms.ComboBox() Me.GroupBox3 = New System.Windows.Forms.GroupBox() Me.TextBox2 = New System.Windows.Forms.TextBox() + Me.ListView1 = New System.Windows.Forms.ListView() + Me.ColumnHeader1 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.ColumnHeader2 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.ColumnHeader3 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.ColumnHeader4 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.GroupBox4 = New System.Windows.Forms.GroupBox() + Me.Button2 = New System.Windows.Forms.Button() + Me.Button3 = New System.Windows.Forms.Button() Me.MenuStrip1.SuspendLayout() Me.GroupBox1.SuspendLayout() Me.GroupBox2.SuspendLayout() Me.GroupBox3.SuspendLayout() + Me.GroupBox4.SuspendLayout() Me.SuspendLayout() ' 'MenuStrip1 @@ -77,7 +86,7 @@ Partial Class Form1 ' Me.AboutToolStripMenuItem.Name = "AboutToolStripMenuItem" Me.AboutToolStripMenuItem.ShortcutKeys = CType((System.Windows.Forms.Keys.Alt Or System.Windows.Forms.Keys.A), System.Windows.Forms.Keys) - Me.AboutToolStripMenuItem.Size = New System.Drawing.Size(152, 22) + Me.AboutToolStripMenuItem.Size = New System.Drawing.Size(145, 22) Me.AboutToolStripMenuItem.Text = "&About" ' 'TextBox1 @@ -143,11 +152,75 @@ Partial Class Form1 Me.TextBox2.Size = New System.Drawing.Size(333, 20) Me.TextBox2.TabIndex = 0 ' + 'ListView1 + ' + Me.ListView1.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.ColumnHeader1, Me.ColumnHeader2, Me.ColumnHeader3, Me.ColumnHeader4}) + Me.ListView1.FullRowSelect = True + Me.ListView1.GridLines = True + Me.ListView1.LabelWrap = False + Me.ListView1.Location = New System.Drawing.Point(6, 19) + Me.ListView1.Name = "ListView1" + Me.ListView1.Size = New System.Drawing.Size(550, 263) + Me.ListView1.Sorting = System.Windows.Forms.SortOrder.Ascending + Me.ListView1.TabIndex = 5 + Me.ListView1.UseCompatibleStateImageBehavior = False + Me.ListView1.View = System.Windows.Forms.View.Details + ' + 'ColumnHeader1 + ' + Me.ColumnHeader1.Text = "File Path" + Me.ColumnHeader1.Width = 110 + ' + 'ColumnHeader2 + ' + Me.ColumnHeader2.Text = "File Size" + ' + 'ColumnHeader3 + ' + Me.ColumnHeader3.Text = "Line:Col" + Me.ColumnHeader3.Width = 80 + ' + 'ColumnHeader4 + ' + Me.ColumnHeader4.Text = "Line Text" + Me.ColumnHeader4.Width = 285 + ' + 'GroupBox4 + ' + Me.GroupBox4.Controls.Add(Me.ListView1) + Me.GroupBox4.Location = New System.Drawing.Point(12, 178) + Me.GroupBox4.Name = "GroupBox4" + Me.GroupBox4.Size = New System.Drawing.Size(562, 288) + Me.GroupBox4.TabIndex = 6 + Me.GroupBox4.TabStop = False + Me.GroupBox4.Text = "Results" + ' + 'Button2 + ' + Me.Button2.Location = New System.Drawing.Point(493, 472) + Me.Button2.Name = "Button2" + Me.Button2.Size = New System.Drawing.Size(75, 23) + Me.Button2.TabIndex = 7 + Me.Button2.Text = "&Search" + Me.Button2.UseVisualStyleBackColor = True + ' + 'Button3 + ' + Me.Button3.Location = New System.Drawing.Point(18, 472) + Me.Button3.Name = "Button3" + Me.Button3.Size = New System.Drawing.Size(75, 23) + Me.Button3.TabIndex = 8 + Me.Button3.Text = "E&xit" + Me.Button3.UseVisualStyleBackColor = True + ' 'Form1 ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font - Me.ClientSize = New System.Drawing.Size(587, 478) + Me.ClientSize = New System.Drawing.Size(587, 506) + Me.Controls.Add(Me.Button3) + Me.Controls.Add(Me.Button2) + Me.Controls.Add(Me.GroupBox4) Me.Controls.Add(Me.GroupBox3) Me.Controls.Add(Me.GroupBox2) Me.Controls.Add(Me.GroupBox1) @@ -162,6 +235,7 @@ Partial Class Form1 Me.GroupBox2.ResumeLayout(False) Me.GroupBox3.ResumeLayout(False) Me.GroupBox3.PerformLayout() + Me.GroupBox4.ResumeLayout(False) Me.ResumeLayout(False) Me.PerformLayout() @@ -179,5 +253,13 @@ Partial Class Form1 Friend WithEvents ComboBox1 As System.Windows.Forms.ComboBox Friend WithEvents GroupBox3 As System.Windows.Forms.GroupBox Friend WithEvents TextBox2 As System.Windows.Forms.TextBox + Friend WithEvents ListView1 As System.Windows.Forms.ListView + Friend WithEvents ColumnHeader1 As System.Windows.Forms.ColumnHeader + Friend WithEvents ColumnHeader2 As System.Windows.Forms.ColumnHeader + Friend WithEvents ColumnHeader3 As System.Windows.Forms.ColumnHeader + Friend WithEvents ColumnHeader4 As System.Windows.Forms.ColumnHeader + Friend WithEvents GroupBox4 As System.Windows.Forms.GroupBox + Friend WithEvents Button2 As System.Windows.Forms.Button + Friend WithEvents Button3 As System.Windows.Forms.Button End Class diff --git a/COM350/Project2/Project2/Form1.vb b/COM350/Project2/Project2/Form1.vb index ab00ac0..cd14b7f 100644 --- a/COM350/Project2/Project2/Form1.vb +++ b/COM350/Project2/Project2/Form1.vb @@ -1,10 +1,21 @@ Public Class Form1 - Protected searcher As PatternSearcher = New PatternSearcher + Protected searcher As PatternSearcher = New PatternSearcher() Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load End Sub + Private Sub ExitToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ExitToolStripMenuItem.Click + Application.Exit() + End Sub + + Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click + Application.Exit() + End Sub + + Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click + + End Sub End Class diff --git a/COM350/Project2/Project2/PatternSearcher.vb b/COM350/Project2/Project2/PatternSearcher.vb index 82a824f..c082026 100644 --- a/COM350/Project2/Project2/PatternSearcher.vb +++ b/COM350/Project2/Project2/PatternSearcher.vb @@ -2,9 +2,15 @@ Private _searchResults As SearchResults = New SearchResults - Public FileType As String - Public IsCaseSensitive As Boolean - Public Pattern As String + Public Property FileType As String + Public Property IsCaseSensitive As Boolean + Public Property Pattern As String + + Sub New(FT As String, ICS As Boolean, P As String) + FileType = FT + IsCaseSensitive = ICS + Pattern = P + End Sub Sub Search() diff --git a/COM380/MFCApplication1/MFCApplication1.sln b/COM380/MFCApplication1/MFCApplication1.sln new file mode 100644 index 0000000..24a02df --- /dev/null +++ b/COM380/MFCApplication1/MFCApplication1.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2012 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MFCApplication1", "MFCApplication1\MFCApplication1.vcxproj", "{EEB0848C-7330-4A27-96C6-6E979A1223CC}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {EEB0848C-7330-4A27-96C6-6E979A1223CC}.Debug|Win32.ActiveCfg = Debug|Win32 + {EEB0848C-7330-4A27-96C6-6E979A1223CC}.Debug|Win32.Build.0 = Debug|Win32 + {EEB0848C-7330-4A27-96C6-6E979A1223CC}.Release|Win32.ActiveCfg = Release|Win32 + {EEB0848C-7330-4A27-96C6-6E979A1223CC}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/COM380/MFCApplication1/MFCApplication1/MFCApplication1.cpp b/COM380/MFCApplication1/MFCApplication1/MFCApplication1.cpp new file mode 100644 index 0000000..1a18f01 --- /dev/null +++ b/COM380/MFCApplication1/MFCApplication1/MFCApplication1.cpp @@ -0,0 +1,90 @@ + +// MFCApplication1.cpp : Defines the class behaviors for the application. +// + +#include "stdafx.h" +#include "MFCApplication1.h" +#include "MFCApplication1Dlg.h" + +#ifdef _DEBUG +#define new DEBUG_NEW +#endif + + +// CMFCApplication1App + +BEGIN_MESSAGE_MAP(CMFCApplication1App, CWinApp) + ON_COMMAND(ID_HELP, &CWinApp::OnHelp) +END_MESSAGE_MAP() + + +// CMFCApplication1App construction + +CMFCApplication1App::CMFCApplication1App() +{ + // support Restart Manager + m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART; + + // TODO: add construction code here, + // Place all significant initialization in InitInstance +} + + +// The one and only CMFCApplication1App object + +CMFCApplication1App theApp; + + +// CMFCApplication1App initialization + +BOOL CMFCApplication1App::InitInstance() +{ + // InitCommonControlsEx() is required on Windows XP if an application + // manifest specifies use of ComCtl32.dll version 6 or later to enable + // visual styles. Otherwise, any window creation will fail. + INITCOMMONCONTROLSEX InitCtrls; + InitCtrls.dwSize = sizeof(InitCtrls); + // Set this to include all the common control classes you want to use + // in your application. + InitCtrls.dwICC = ICC_WIN95_CLASSES; + InitCommonControlsEx(&InitCtrls); + + CWinApp::InitInstance(); + + + AfxEnableControlContainer(); + + + // Standard initialization + // If you are not using these features and wish to reduce the size + // of your final executable, you should remove from the following + // the specific initialization routines you do not need + // Change the registry key under which our settings are stored + // TODO: You should modify this string to be something appropriate + // such as the name of your company or organization + SetRegistryKey(_T("Local AppWizard-Generated Applications")); + + CMFCApplication1Dlg dlg; + m_pMainWnd = &dlg; + INT_PTR nResponse = dlg.DoModal(); + if (nResponse == IDOK) + { + // TODO: Place code here to handle when the dialog is + // dismissed with OK + } + else if (nResponse == IDCANCEL) + { + // TODO: Place code here to handle when the dialog is + // dismissed with Cancel + } + else if (nResponse == -1) + { + TRACE(traceAppMsg, 0, "Warning: dialog creation failed, so application is terminating unexpectedly.\n"); + } + + + // Since the dialog has been closed, return FALSE so that we exit the + // application, rather than start the application's message pump. + return FALSE; +} + diff --git a/COM380/MFCApplication1/MFCApplication1/MFCApplication1.h b/COM380/MFCApplication1/MFCApplication1/MFCApplication1.h new file mode 100644 index 0000000..345204b --- /dev/null +++ b/COM380/MFCApplication1/MFCApplication1/MFCApplication1.h @@ -0,0 +1,32 @@ + +// MFCApplication1.h : main header file for the PROJECT_NAME application +// + +#pragma once + +#ifndef __AFXWIN_H__ + #error "include 'stdafx.h' before including this file for PCH" +#endif + +#include "resource.h" // main symbols + + +// CMFCApplication1App: +// See MFCApplication1.cpp for the implementation of this class +// + +class CMFCApplication1App : public CWinApp +{ +public: + CMFCApplication1App(); + +// Overrides +public: + virtual BOOL InitInstance(); + +// Implementation + + DECLARE_MESSAGE_MAP() +}; + +extern CMFCApplication1App theApp; \ No newline at end of file diff --git a/COM380/MFCApplication1/MFCApplication1/MFCApplication1.rc b/COM380/MFCApplication1/MFCApplication1/MFCApplication1.rc new file mode 100644 index 0000000000000000000000000000000000000000..c6ce1bd3f3d69304c18c593f7fcfc78004282a2d GIT binary patch literal 10390 zcmdT~ZBH9V5Z=#~`X8=FiV~GN80WRBDgnj>VS|N@LnThrRJTo5O z?%kd_C`m!q-QMlZ&dkpH?)sm}9cj$KAI(i#;-gYhb4n1Am+in#-Ej$~2@^Jrt z#+|i^+kjlMGCqZrF5E}Ve*)=H4n53zANNhndJXfWJl4^_j4P{=ybex5f$~2EbY7yw z*@yJDfU!}iw+U=uBo;AopMYxwU7O|>WDY0L+G*kVBYgWZ<<%dVw-CiXf?d(VQdpDO z{nIKrB6kb0^LdgkW4nrnlDvt=?x##lE`D2N%cfnnylRD3&#$Yn)eZ3mz9rLNJh~jX zrD=p&ho!59a}<3i?pO0DFs9wapAKNf2e1l_aVe*<*jRzT$Gxlq97T8-Kh*b%Ve(#9 z0i~=*&Z82;5cAYx97TGl-%=0iALNS>@(_`&i5PhZ9WzgKkvUqhke=vx7d`a8F23#I zX-%Gs!BEe7C%IfNuw~Al{zj%kpw4mJfX(aX$sw`ouk+=^#tv z5PsLf?+Hfzgh9#{5>m_~z`1`TcKj+BFLtw8;URs7nS3oV1DkH%ce*NVJ)fMZh^TN7n?9HMK z_n|j4a~gjp14iKl9>5sGh`~t1itboyjZ5L5v1EeGTdeu(qfL>Y-|rmd*D#^P%2Z6$ z5U=|^$1o3XispwizWq5Qh@7;GA?)L`Sm_5m4bbx$(RK_QAw&cBPp~7__l&{xmLrVQ zl>)1HR&j)#U}S>+A>O%iAoNkxzY_5`QZ{*Nh5HfkjP+xTRL;hDCw8^jWXdhM;TmS_ zzD~b>M5{G1Ic9Wi!?#)WHu1KCH^z?GZxc~~>x}$2t2D|)3&xL&Y5q4EYZdXmA}FaA zM@!@BA=z#Nx~HZuup%)#v3XF-4QP2q)`WY=dR!asLyKHPu0Rqyk}ue^BpE~RHTQD* z{sOfjv2o@34)C;(2HsdztfQ|fR?$N*GnsyAqpu;@eXB~pH$i(JqY3>EmyUfaSUVWo zK_2S_z05!zP~*CnHb`6wuNY{z%#h?X3tPe1KOvnf@xJ-_Oe@oLPOn5J75D|Y?8*vM zeX0S8pG_?}UV#^TjQUWq2QFfs4a|cwW(~l3uYr@Adp5f-<82YTS&})MSGEAFt7Gd4 zTh3%&K4;C)M-*YK(j3nkqAII~BCei+i3VM0ptnmz zFYc+FLHdlJk0A@zPMmwqJ%S&*#T?Bo4jN(>{+`w#ES$AZv;X2Fw(X`M36f1MutXX#rQuDnt=BuH%)I_v<#s zZ{uS72l&>wmBqpAwI79|7x*$z-LRL@kaB-36u5i#wjgepmg2SVUB-&r*dcYzDxa~M zZEA_Wg)^4MZCkyt0xhuyW~DNiSvs}L-8I?^qs$Aj`1zF9u8lqPEXw;=SZW8=^lyu?jORXt)_Oa$ILxTbtR6z8qxr-*N9k&$GwagTbOZK9&Bw>bMjFK? z=yJ8%g^#b`z6DA;r>5kJL%EZ;JS2J0y3uw988aCr_JC12%+vAlXW_Z#p|!oAGkOWT zwoBkzsi&*IklqgFLP~6z|9ZIlv8D@O(wZun&5*Sf_a!*4DI+vSg_ygT-73C@u*<-| z2Rd807|XVWzj#f;IKCrsnYoSYUuM=Ja%&Uq0JGo3+bKLR+@p(QGb;(PE+I2AGO=C7 zJ;aobiS1h2S8MyQ4DRq#GK^F_3AmJa^%e6x!rOcFGxJp-mo&QkmVxD-ghKybz)zf_ zNu>cg{@IS!Mn<_zo-q8`Hk_f+3q4=y*vJa}krkOf{vIPAvBsOH$11+_3`gtnv_fRY(ETgUll!tK zk~zwAyCYt4CZ0i_O)F+Y=eH()(} zruXZHFmIOG(c``{S1zmuiIp_CDv8sI=L%c-WOpK{4S%)cdube#=}Rkvo>ULqB`0UZ z_HvrR4Nlu#eBZ#TBoAMc>ei=gBN>r8CGm58qHD)?Zp3rc=05(^zKoJd$1+Kob>aUn zxjOu)9?Z<*x6pcawB2 z&o6QRqAjv=&3dZoHrrO*Bfys3VXGn+a~((esRoT#Uz2Iy%}$v)?jgnO|Mst!IwGD{ zJL&(Bbcf$!e)fMvw>cfAOs~UJd=gw{^!2B{Ww4Yv;Uyl$^*v8+Npb$UL+m70HCyIn zg{Pc6hoyH?^WWkW)})sGA6x9a)sGU&598JKr>#mOTwC97Z}wxB%{tWpcdX0QSe*C2 DE}RMj literal 0 HcmV?d00001 diff --git a/COM380/MFCApplication1/MFCApplication1/MFCApplication1.vcxproj b/COM380/MFCApplication1/MFCApplication1/MFCApplication1.vcxproj new file mode 100644 index 0000000..b72afbc --- /dev/null +++ b/COM380/MFCApplication1/MFCApplication1/MFCApplication1.vcxproj @@ -0,0 +1,128 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {EEB0848C-7330-4A27-96C6-6E979A1223CC} + MFCApplication1 + MFCProj + + + + Application + true + v110 + Unicode + Static + + + Application + false + v110 + true + Unicode + Static + + + + + + + + + + + + + true + + + false + + + + Use + Level3 + Disabled + WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions) + + + Windows + true + + + false + true + _DEBUG;%(PreprocessorDefinitions) + + + 0x0409 + _DEBUG;%(PreprocessorDefinitions) + $(IntDir);%(AdditionalIncludeDirectories) + + + + + Level3 + Use + MaxSpeed + true + true + WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions) + + + Windows + true + true + true + + + false + true + NDEBUG;%(PreprocessorDefinitions) + + + 0x0409 + NDEBUG;%(PreprocessorDefinitions) + $(IntDir);%(AdditionalIncludeDirectories) + + + + + + + + + + + + + + + + + Create + Create + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/COM380/MFCApplication1/MFCApplication1/MFCApplication1.vcxproj.filters b/COM380/MFCApplication1/MFCApplication1/MFCApplication1.vcxproj.filters new file mode 100644 index 0000000..e9df162 --- /dev/null +++ b/COM380/MFCApplication1/MFCApplication1/MFCApplication1.vcxproj.filters @@ -0,0 +1,63 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + Source Files + + + + + Resource Files + + + + + Resource Files + + + + + Resource Files + + + \ No newline at end of file diff --git a/COM380/MFCApplication1/MFCApplication1/MFCApplication1Dlg.cpp b/COM380/MFCApplication1/MFCApplication1/MFCApplication1Dlg.cpp new file mode 100644 index 0000000..e327724 --- /dev/null +++ b/COM380/MFCApplication1/MFCApplication1/MFCApplication1Dlg.cpp @@ -0,0 +1,152 @@ + +// MFCApplication1Dlg.cpp : implementation file +// + +#include "stdafx.h" +#include "MFCApplication1.h" +#include "MFCApplication1Dlg.h" +#include "afxdialogex.h" + +#ifdef _DEBUG +#define new DEBUG_NEW +#endif + + +// CAboutDlg dialog used for App About + +class CAboutDlg : public CDialog +{ +public: + CAboutDlg(); + +// Dialog Data + enum { IDD = IDD_ABOUTBOX }; + + protected: + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support + +// Implementation +protected: + DECLARE_MESSAGE_MAP() +}; + +CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) +{ +} + +void CAboutDlg::DoDataExchange(CDataExchange* pDX) +{ + CDialog::DoDataExchange(pDX); +} + +BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) +END_MESSAGE_MAP() + + +// CMFCApplication1Dlg dialog + + + +CMFCApplication1Dlg::CMFCApplication1Dlg(CWnd* pParent /*=NULL*/) + : CDialogEx(CMFCApplication1Dlg::IDD, pParent) +{ + m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); +} + +void CMFCApplication1Dlg::DoDataExchange(CDataExchange* pDX) +{ + CDialogEx::DoDataExchange(pDX); +} + +BEGIN_MESSAGE_MAP(CMFCApplication1Dlg, CDialogEx) + ON_WM_SYSCOMMAND() + ON_WM_PAINT() + ON_WM_QUERYDRAGICON() +END_MESSAGE_MAP() + + +// CMFCApplication1Dlg message handlers + +BOOL CMFCApplication1Dlg::OnInitDialog() +{ + CDialogEx::OnInitDialog(); + + // Add "About..." menu item to system menu. + + // IDM_ABOUTBOX must be in the system command range. + ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); + ASSERT(IDM_ABOUTBOX < 0xF000); + + CMenu* pSysMenu = GetSystemMenu(FALSE); + if (pSysMenu != NULL) + { + BOOL bNameValid; + CString strAboutMenu; + bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); + ASSERT(bNameValid); + if (!strAboutMenu.IsEmpty()) + { + pSysMenu->AppendMenu(MF_SEPARATOR); + pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); + } + } + + // Set the icon for this dialog. The framework does this automatically + // when the application's main window is not a dialog + SetIcon(m_hIcon, TRUE); // Set big icon + SetIcon(m_hIcon, FALSE); // Set small icon + + // TODO: Add extra initialization here + + return TRUE; // return TRUE unless you set the focus to a control +} + +void CMFCApplication1Dlg::OnSysCommand(UINT nID, LPARAM lParam) +{ + if ((nID & 0xFFF0) == IDM_ABOUTBOX) + { + CAboutDlg dlgAbout; + dlgAbout.DoModal(); + } + else + { + CDialogEx::OnSysCommand(nID, lParam); + } +} + +// If you add a minimize button to your dialog, you will need the code below +// to draw the icon. For MFC applications using the document/view model, +// this is automatically done for you by the framework. + +void CMFCApplication1Dlg::OnPaint() +{ + if (IsIconic()) + { + CPaintDC dc(this); // device context for painting + + SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc()), 0); + + // Center icon in client rectangle + int cxIcon = GetSystemMetrics(SM_CXICON); + int cyIcon = GetSystemMetrics(SM_CYICON); + CRect rect; + GetClientRect(&rect); + int x = (rect.Width() - cxIcon + 1) / 2; + int y = (rect.Height() - cyIcon + 1) / 2; + + // Draw the icon + dc.DrawIcon(x, y, m_hIcon); + } + else + { + CDialogEx::OnPaint(); + } +} + +// The system calls this function to obtain the cursor to display while the user drags +// the minimized window. +HCURSOR CMFCApplication1Dlg::OnQueryDragIcon() +{ + return static_cast(m_hIcon); +} + diff --git a/COM380/MFCApplication1/MFCApplication1/MFCApplication1Dlg.h b/COM380/MFCApplication1/MFCApplication1/MFCApplication1Dlg.h new file mode 100644 index 0000000..3025e10 --- /dev/null +++ b/COM380/MFCApplication1/MFCApplication1/MFCApplication1Dlg.h @@ -0,0 +1,32 @@ + +// MFCApplication1Dlg.h : header file +// + +#pragma once + + +// CMFCApplication1Dlg dialog +class CMFCApplication1Dlg : public CDialogEx +{ +// Construction +public: + CMFCApplication1Dlg(CWnd* pParent = NULL); // standard constructor + +// Dialog Data + enum { IDD = IDD_MFCAPPLICATION1_DIALOG }; + + protected: + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support + + +// Implementation +protected: + HICON m_hIcon; + + // Generated message map functions + virtual BOOL OnInitDialog(); + afx_msg void OnSysCommand(UINT nID, LPARAM lParam); + afx_msg void OnPaint(); + afx_msg HCURSOR OnQueryDragIcon(); + DECLARE_MESSAGE_MAP() +}; diff --git a/COM380/MFCApplication1/MFCApplication1/ReadMe.txt b/COM380/MFCApplication1/MFCApplication1/ReadMe.txt new file mode 100644 index 0000000..c126053 --- /dev/null +++ b/COM380/MFCApplication1/MFCApplication1/ReadMe.txt @@ -0,0 +1,103 @@ +================================================================================ + MICROSOFT FOUNDATION CLASS LIBRARY : MFCApplication1 Project Overview +=============================================================================== + +The application wizard has created this MFCApplication1 application for +you. This application not only demonstrates the basics of using the Microsoft +Foundation Classes but is also a starting point for writing your application. + +This file contains a summary of what you will find in each of the files that +make up your MFCApplication1 application. + +MFCApplication1.vcxproj + This is the main project file for VC++ projects generated using an application wizard. + It contains information about the version of Visual C++ that generated the file, and + information about the platforms, configurations, and project features selected with the + application wizard. + +MFCApplication1.vcxproj.filters + This is the filters file for VC++ projects generated using an Application Wizard. + It contains information about the association between the files in your project + and the filters. This association is used in the IDE to show grouping of files with + similar extensions under a specific node (for e.g. ".cpp" files are associated with the + "Source Files" filter). + +MFCApplication1.h + This is the main header file for the application. It includes other + project specific headers (including Resource.h) and declares the + CMFCApplication1App application class. + +MFCApplication1.cpp + This is the main application source file that contains the application + class CMFCApplication1App. + +MFCApplication1.rc + This is a listing of all of the Microsoft Windows resources that the + program uses. It includes the icons, bitmaps, and cursors that are stored + in the RES subdirectory. This file can be directly edited in Microsoft + Visual C++. Your project resources are in 1033. + +res\MFCApplication1.ico + This is an icon file, which is used as the application's icon. This + icon is included by the main resource file MFCApplication1.rc. + +res\MFCApplication1.rc2 + This file contains resources that are not edited by Microsoft + Visual C++. You should place all resources not editable by + the resource editor in this file. + + +///////////////////////////////////////////////////////////////////////////// + +The application wizard creates one dialog class: + +MFCApplication1Dlg.h, MFCApplication1Dlg.cpp - the dialog + These files contain your CMFCApplication1Dlg class. This class defines + the behavior of your application's main dialog. The dialog's template is + in MFCApplication1.rc, which can be edited in Microsoft Visual C++. + +///////////////////////////////////////////////////////////////////////////// + +Other Features: + +ActiveX Controls + The application includes support to use ActiveX controls. + +Printing and Print Preview support + The application wizard has generated code to handle the print, print setup, and print preview + commands by calling member functions in the CView class from the MFC library. + +///////////////////////////////////////////////////////////////////////////// + +Other standard files: + +StdAfx.h, StdAfx.cpp + These files are used to build a precompiled header (PCH) file + named MFCApplication1.pch and a precompiled types file named StdAfx.obj. + +Resource.h + This is the standard header file, which defines new resource IDs. + Microsoft Visual C++ reads and updates this file. + +MFCApplication1.manifest + Application manifest files are used by Windows XP to describe an applications + dependency on specific versions of Side-by-Side assemblies. The loader uses this + information to load the appropriate assembly from the assembly cache or private + from the application. The Application manifest maybe included for redistribution + as an external .manifest file that is installed in the same folder as the application + executable or it may be included in the executable in the form of a resource. +///////////////////////////////////////////////////////////////////////////// + +Other notes: + +The application wizard uses "TODO:" to indicate parts of the source code you +should add to or customize. + +If your application uses MFC in a shared DLL, you will need +to redistribute the MFC DLLs. If your application is in a language +other than the operating system's locale, you will also have to +redistribute the corresponding localized resources mfc110XXX.DLL. +For more information on both of these topics, please see the section on +redistributing Visual C++ applications in MSDN documentation. + +///////////////////////////////////////////////////////////////////////////// diff --git a/COM380/MFCApplication1/MFCApplication1/Resource.h b/COM380/MFCApplication1/MFCApplication1/Resource.h new file mode 100644 index 0000000..b1ce99f --- /dev/null +++ b/COM380/MFCApplication1/MFCApplication1/Resource.h @@ -0,0 +1,21 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by MFCApplication1.rc +// +#define IDR_MAINFRAME 128 +#define IDM_ABOUTBOX 0x0010 +#define IDD_ABOUTBOX 100 +#define IDS_ABOUTBOX 101 +#define IDD_MFCAPPLICATION1_DIALOG 102 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS + +#define _APS_NEXT_RESOURCE_VALUE 129 +#define _APS_NEXT_CONTROL_VALUE 1000 +#define _APS_NEXT_SYMED_VALUE 101 +#define _APS_NEXT_COMMAND_VALUE 32771 +#endif +#endif diff --git a/COM380/MFCApplication1/MFCApplication1/res/MFCApplication1.ico b/COM380/MFCApplication1/MFCApplication1/res/MFCApplication1.ico new file mode 100644 index 0000000000000000000000000000000000000000..d56fbcdfdf6eac0f4727c34770c26689271d96af GIT binary patch literal 67777 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 NK9A-8OQnhX{{?OVn?wKr literal 0 HcmV?d00001 diff --git a/COM380/MFCApplication1/MFCApplication1/res/MFCApplication1.rc2 b/COM380/MFCApplication1/MFCApplication1/res/MFCApplication1.rc2 new file mode 100644 index 0000000000000000000000000000000000000000..633eca44e23a1277bf342a71004344d4a6ac0d9d GIT binary patch literal 814 zcmdUtK~Dlf429p>g#XaQBY}^JOv1ry!v()RB^WkHU2+|P0vU2g&9ylYAT literal 0 HcmV?d00001 diff --git a/COM380/MFCApplication1/MFCApplication1/stdafx.cpp b/COM380/MFCApplication1/MFCApplication1/stdafx.cpp new file mode 100644 index 0000000..b96ba9f --- /dev/null +++ b/COM380/MFCApplication1/MFCApplication1/stdafx.cpp @@ -0,0 +1,8 @@ + +// stdafx.cpp : source file that includes just the standard includes +// MFCApplication1.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/COM380/MFCApplication1/MFCApplication1/stdafx.h b/COM380/MFCApplication1/MFCApplication1/stdafx.h new file mode 100644 index 0000000..8c1ebd0 --- /dev/null +++ b/COM380/MFCApplication1/MFCApplication1/stdafx.h @@ -0,0 +1,55 @@ + +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, +// but are changed infrequently + +#pragma once + +#ifndef VC_EXTRALEAN +#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers +#endif + +#include "targetver.h" + +#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // some CString constructors will be explicit +#define _AFX_NO_MFC_CONTROLS_IN_DIALOGS // remove support for MFC controls in dialogs + +// turns off MFC's hiding of some common and often safely ignored warning messages +#define _AFX_ALL_WARNINGS + +#include // MFC core and standard components +#include // MFC extensions + + +#include // MFC Automation classes + + + +#ifndef _AFX_NO_OLE_SUPPORT +#include // MFC support for Internet Explorer 4 Common Controls +#endif +#ifndef _AFX_NO_AFXCMN_SUPPORT +#include // MFC support for Windows Common Controls +#endif // _AFX_NO_AFXCMN_SUPPORT + +#include // MFC support for ribbons and control bars + + + + + + + + + +#ifdef _UNICODE +#if defined _M_IX86 +#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"") +#elif defined _M_X64 +#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"") +#else +#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") +#endif +#endif + + diff --git a/COM380/MFCApplication1/MFCApplication1/targetver.h b/COM380/MFCApplication1/MFCApplication1/targetver.h new file mode 100644 index 0000000..87c0086 --- /dev/null +++ b/COM380/MFCApplication1/MFCApplication1/targetver.h @@ -0,0 +1,8 @@ +#pragma once + +// Including SDKDDKVer.h defines the highest available Windows platform. + +// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and +// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. + +#include diff --git a/COM380/Project4/Project4/Form1.h b/COM380/Project4/Project4/Form1.h index 81b9131..6b56cdb 100644 --- a/COM380/Project4/Project4/Form1.h +++ b/COM380/Project4/Project4/Form1.h @@ -1,4 +1,5 @@ #pragma once +#include "stdafx.h" #include "LottoBall.h" namespace Project4 @@ -43,12 +44,19 @@ namespace Project4 private: System::Windows::Forms::ToolStripMenuItem^ helpToolStripMenuItem; private: System::Windows::Forms::ToolStripMenuItem^ aboutToolStripMenuItem; private: System::Windows::Forms::GroupBox^ groupBox1; - private: System::Windows::Forms::TextBox^ textBox6; - private: System::Windows::Forms::TextBox^ textBox5; - private: System::Windows::Forms::TextBox^ textBox4; - private: System::Windows::Forms::TextBox^ textBox3; - private: System::Windows::Forms::TextBox^ textBox2; - private: System::Windows::Forms::TextBox^ textBox1; + public: System::Windows::Forms::TextBox^ textBox6; + private: + public: System::Windows::Forms::TextBox^ textBox5; + public: System::Windows::Forms::TextBox^ textBox4; + public: System::Windows::Forms::TextBox^ textBox3; + public: System::Windows::Forms::TextBox^ textBox2; + public: System::Windows::Forms::TextBox^ textBox1; + + + + + + private: System::Windows::Forms::Label^ label6; private: System::Windows::Forms::Label^ label5; private: System::Windows::Forms::Label^ label4; @@ -225,6 +233,7 @@ namespace Project4 // // radioButton1 // + this->radioButton1->AutoCheck = false; this->radioButton1->AutoSize = true; this->radioButton1->Location = System::Drawing::Point(51, 86); this->radioButton1->Name = L"radioButton1"; @@ -394,7 +403,35 @@ namespace Project4 #pragma endregion public: List^ balls; - public: volatile static array^ numbers; + public: static array^ numbers; + public: System::Void affixNumber(int index, int number) + { + this->numbers[index] = number; + switch (index) + { + case 0: + textBox5->Text = number.ToString("D2"); + break; + case 1: + textBox4->Text = number.ToString("D2"); + break; + case 2: + textBox4->Text = number.ToString("D2"); + break; + case 3: + textBox3->Text = number.ToString("D2"); + break; + case 4: + textBox2->Text = number.ToString("D2"); + break; + case 5: + textBox1->Text = number.ToString("D2"); + break; + case 6: + textBox6->Text = number.ToString("D2"); + break; + } + } private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { @@ -403,10 +440,10 @@ namespace Project4 for (int i = 0; i < 5; i++) { - balls->Add(gcnew LottoBall(1, 75)); + balls->Add(gcnew LottoBall(1, 75, this)); } - balls->Add(gcnew LottoBall(1, 15)); + balls->Add(gcnew LottoBall(1, 15, this)); } private: System::Void exitToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) diff --git a/COM380/Project4/Project4/LottoBall.h b/COM380/Project4/Project4/LottoBall.h index 770d40d..dec2462 100644 --- a/COM380/Project4/Project4/LottoBall.h +++ b/COM380/Project4/Project4/LottoBall.h @@ -1,35 +1,40 @@ -#pragma once +#include "stdafx.h" +#include "Form1.h" -namespace Project4 +using namespace System; +using namespace System::Collections; +using namespace System::Collections::Generic; +using namespace System::Threading; +using namespace System::Threading::Tasks; +using namespace System::Data; +using namespace Project4; + + +public ref class LottoBall { - using namespace System; - using namespace System::Collections; - using namespace System::Collections::Generic; - using namespace System::Threading; - using namespace System::Threading::Tasks; - using namespace System::Data; - public ref class LottoBall - { +public: + LottoBall(int minval, int maxval, Form1^ form1); + ~LottoBall(); - public: - LottoBall(int minval, int maxval); - ~LottoBall(); + int getCurrentValue(); + int num; - int getCurrentValue(); - int num; + System::Void start(); + System::Void stop(); + System::Void initThread(); - System::Void start(); - System::Void stop(); +private: + int minVal; + int maxVal; + int seedValue; - private: - int minVal; - int maxVal; + Form1^ formptr; - bool threadStop; - Thread^ thread; - System::Void run(); + Random^ r; - }; + bool threadStop; + Thread^ thread; + System::Void run(); -} \ No newline at end of file +}; \ No newline at end of file diff --git a/COM380/Project4/Project4/LottoBallcpp.cpp b/COM380/Project4/Project4/LottoBallcpp.cpp index 83882e7..d071725 100644 --- a/COM380/Project4/Project4/LottoBallcpp.cpp +++ b/COM380/Project4/Project4/LottoBallcpp.cpp @@ -1,54 +1,59 @@ #include "LottoBall.h" -#include "Form1.h" -namespace Project4 +LottoBall::LottoBall(int minval, int maxval, Form1^ form1) { + minVal = minval; + maxVal = maxval; - LottoBall::LottoBall(int minval, int maxval) + threadStop = false; + num = 0; + + formptr = form1; +} + +LottoBall::~LottoBall() +{ + thread->Abort(); +} + +System::Void LottoBall::initThread() +{ + r = gcnew Random(); + long long seed = 0; + for(int i = 0; i < 100; ++i) { - minVal = minval; - maxVal = maxval; - - threadStop = false; - num = 0; - thread = gcnew Thread(gcnew ThreadStart(&run)); - + seed += r->Next(i, 9999 + i); } + r = gcnew Random(seed); + thread = gcnew Thread(gcnew ThreadStart(&this->run)); +} - LottoBall::~LottoBall() +System::Void LottoBall::run() +{ + String^ threadname = Thread::CurrentThread->Name; + int id = 0; + Int32::TryParse(threadname, id); + + while (!this->threadStop) { - thread->Abort(); + this->num = r->Next(minVal, maxVal); + formptr->affixNumber(id, this->num); } +} - System::Void LottoBall::run() - { - Random^ r = gcnew Random(); - String^ threadname = Thread::CurrentThread->Name; - int id = 0; - Int32::TryParse(threadname, id); +int LottoBall::getCurrentValue() +{ + return this->num; +} - while (!this->threadStop) - { - this->num = r->Next(minVal, maxVal); - Form1::numbers[id] = this->num; - } - } - - int LottoBall::getCurrentValue() - { - return this->num; - } - - System::Void LottoBall::start() - { - this->threadStop = false; - thread->Start(); - } - - System::Void LottoBall::stop() - { - this->threadStop = true; - } +System::Void LottoBall::start() +{ + this->threadStop = false; + thread->Start(); +} +System::Void LottoBall::stop() +{ + this->threadStop = true; } \ No newline at end of file diff --git a/COM380/Project5/GambleKit.sln b/COM380/Project5/GambleKit.sln new file mode 100644 index 0000000..f663343 --- /dev/null +++ b/COM380/Project5/GambleKit.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual C++ Express 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GambleKit", "GambleKit\GambleKit.vcxproj", "{E6093060-EA31-4FF3-9230-2E9CDF34C694}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E6093060-EA31-4FF3-9230-2E9CDF34C694}.Debug|Win32.ActiveCfg = Debug|Win32 + {E6093060-EA31-4FF3-9230-2E9CDF34C694}.Debug|Win32.Build.0 = Debug|Win32 + {E6093060-EA31-4FF3-9230-2E9CDF34C694}.Release|Win32.ActiveCfg = Release|Win32 + {E6093060-EA31-4FF3-9230-2E9CDF34C694}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/COM380/Project5/GambleKit/CustomGameLogic/CustomGame.cpp b/COM380/Project5/GambleKit/CustomGameLogic/CustomGame.cpp new file mode 100644 index 0000000..1f92c64 --- /dev/null +++ b/COM380/Project5/GambleKit/CustomGameLogic/CustomGame.cpp @@ -0,0 +1,25 @@ +#include "CustomGame.h" + +#include "Pages\MainPage.h" + +const wchar_t *CustomGame::settingsFileName = L"..\\Settings.dat"; + +const wchar_t *CustomGame::screenShotsFileExp = L"..\\Logging\\Plays\\play{0}.jpg"; + +CustomGame::CustomGame(GkGraphicsDevice *graphicsDevice, GkSoundDevice *soundDevice) : + GkGame(graphicsDevice, soundDevice) +{ + this->logGamePlay = new GkLogFile(L"..\\Logging\\GamePlay.log"); + + //this->settings = new Settings(CustomGame::settingsFileName, this); + + this->AddGamePage(new MainPage(this)); +} + + +CustomGame::~CustomGame(void) +{ + delete this->logGamePlay; + + //delete this->settings; +} diff --git a/COM380/Project5/GambleKit/CustomGameLogic/CustomGame.h b/COM380/Project5/GambleKit/CustomGameLogic/CustomGame.h new file mode 100644 index 0000000..9b5379a --- /dev/null +++ b/COM380/Project5/GambleKit/CustomGameLogic/CustomGame.h @@ -0,0 +1,39 @@ +#pragma once + +#include "..\Engine\GambleKit.h" + +//#include "Settings.h" +//#include "Dictionary.h" + +struct LogRecordGamePlay +{ + DateTime time; + int bet; + int winning; +}; + +class MainPage; +class MainMenuPage; + +class CustomGame : + public GkGame +{ +public: + static const wchar_t *dataFileName, *settingsFileName; + static const wchar_t *screenShotsFileExp; + + bool isPayingCredits; + int creditsPayed; + + //Settings *settings; + + GkLogFile *logGamePlay; + + MainPage *mainPage; + + MainMenuPage *mainMenuPage; + + CustomGame(GkGraphicsDevice *graphicsDevice, GkSoundDevice *soundDevice); + ~CustomGame(void); +}; + diff --git a/COM380/Project5/GambleKit/CustomGameLogic/MainWindow.cpp b/COM380/Project5/GambleKit/CustomGameLogic/MainWindow.cpp new file mode 100644 index 0000000..5c4c94c --- /dev/null +++ b/COM380/Project5/GambleKit/CustomGameLogic/MainWindow.cpp @@ -0,0 +1,78 @@ +#include "MainWindow.h" + +#include "Pages\MainPage.h" + +MainWindow::MainWindow(void) +{ + if (this->deviceContext == 0) + GkOSUtils::ShowMessage("Error creating device context", this->handle); + if (this->renderContext == 0) + GkOSUtils::ShowMessage("Error creating rendering context", this->handle); + + this->graphicsDevice = new GkGraphicsDevice(); + + if (this->graphicsDevice->maxTextureSize < 2048) + GkOSUtils::ShowMessage(GkStrings::ToShort(GkStrings::Format(L"Graphics device does not suport textures with dimensions of size at least 2048 pixels.\r\nMaxium supported size is {0}.\r\nSome textures may not be rendered.", GkStrings::IntToString(this->graphicsDevice->maxTextureSize).c_str()).c_str()).c_str()); + if (!this->graphicsDevice->nonPower2Textures) + GkOSUtils::ShowMessage("Graphics device does not support textures of arbitraty dimensions. Application will require more video memory than normal."); + + this->soundDevice = new GkSoundDevice(); + + GkFileSystem::SetSource(L"..\\GameData\\", FileSystemMode_Physical); + + this->game = new CustomGame(this->graphicsDevice, this->soundDevice); + + this->SetPosition(0, 0); + this->SetSize(800, 600); + this->SetActive(); +} + + +MainWindow::~MainWindow(void) +{ +} + +bool MainWindow::Close() +{ + delete this->game; + + delete this->soundDevice; + delete this->graphicsDevice; + + return true; +} + +void MainWindow::MainLoop() +{ + //TODO: timed rendering (main or custom thread, Sleep(frameInterval - renderTime). VSync + this->game->NewFrame(); + + this->MakeCurrent(); + this->game->Process(); + this->game->Render(); + this->Present(); + + // If thre are changes to the settings data, they will automatically be written to disk + //this->game->settings->WriteChanges(); +} + +void MainWindow::MouseDown(int x, int y, int mouseButtons) +{ + this->game->MouseDown(x, y); +}; + +void MainWindow::MouseUp(int x, int y, int mouseButtons) +{ + this->game->MouseUp(x, y); +} + +void MainWindow::Resize(int width, int height) +{ + this->graphicsDevice->SetViewport(0, 0, width, height); +} + +void MainWindow::KeyDown(int keyCode) +{ + if (keyCode == VK_ESCAPE) + this->DestroyFormWindow(); +} \ No newline at end of file diff --git a/COM380/Project5/GambleKit/CustomGameLogic/MainWindow.h b/COM380/Project5/GambleKit/CustomGameLogic/MainWindow.h new file mode 100644 index 0000000..be6908b --- /dev/null +++ b/COM380/Project5/GambleKit/CustomGameLogic/MainWindow.h @@ -0,0 +1,26 @@ +#pragma once + +#include "..\Engine\GambleKit.h" + +#include "CustomGame.h" + +class MainWindow : + public GkOpenGLWindowsForm +{ +public: + GkGraphicsDevice *graphicsDevice; + GkSoundDevice *soundDevice; + + CustomGame *game; + + MainWindow::MainWindow(void); + MainWindow::~MainWindow(void); + + bool MainWindow::Close(); + void MainWindow::MainLoop(); + void MainWindow::MouseDown(int x, int y, int mouseButtons); + void MainWindow::MouseUp(int x, int y, int mouseButtons); + void MainWindow::Resize(int width, int height); + void MainWindow::KeyDown(int keyCode); +}; + diff --git a/COM380/Project5/GambleKit/CustomGameLogic/Pages/MainPage.cpp b/COM380/Project5/GambleKit/CustomGameLogic/Pages/MainPage.cpp new file mode 100644 index 0000000..19934c7 --- /dev/null +++ b/COM380/Project5/GambleKit/CustomGameLogic/Pages/MainPage.cpp @@ -0,0 +1,159 @@ +#include "MainPage.h" + +#include "..\..\Engine\GambleKit.h" + + +MainPage::MainPage(CustomGame *game) + : GkGamePage() +{ + // Initialize the variables + this->bet = 10; + this->lines = 5; + this->winning = 0; + this->credits = 100; + + // Add the background + this->AddEntity(new GkGameAnimation(game->AcquireAnimatedTexture(L"Background.png"))); + + // Create the Bet, Lines and Start buttons + this->btnBet = (GkGameClickButton*)this->AddEntity(new GkGameClickButton( + new GkGameAnimation(game->AcquireAnimatedTexture(L"btn_bet_default.png"), 354, 528), + new GkGameAnimation(game->AcquireAnimatedTexture(L"btn_bet_down.png"), 354, 528), + new GkGameAnimation(game->AcquireAnimatedTexture(L"btn_bet_disabled.png"), 354, 528))); + this->btnLines = (GkGameClickButton*)this->AddEntity(new GkGameClickButton( + new GkGameAnimation(game->AcquireAnimatedTexture(L"btn_lines_default.png"), 524, 528), + new GkGameAnimation(game->AcquireAnimatedTexture(L"btn_lines_down.png"), 524, 528), + new GkGameAnimation(game->AcquireAnimatedTexture(L"btn_lines_disabled.png"), 524, 528))); + this->btnStart = (GkGameClickButton*)this->AddEntity(new GkGameClickButton( + new GkGameAnimation(game->AcquireAnimatedTexture(L"btn_start_default.png"), 687, 503), + new GkGameAnimation(game->AcquireAnimatedTexture(L"btn_start_down.png"), 687, 503), + new GkGameAnimation(game->AcquireAnimatedTexture(L"btn_start_disabled.png"), 687, 503))); + + // Create a special counter for the credits, to make them appear to increase gradually for better visual experience + GkGameWinningCounter *creditsCounter = (GkGameWinningCounter*)this->AddEntity(new GkGameWinningCounter(&this->credits, 500.0f, 2.0f)); + + // Create the Credits, Winning, Bet and Lines text counters and bind them to their respective values. Note that credits is bound to the "creditsCounter" + this->AddEntity(new GkGameTextsIntBinding(&creditsCounter->intDisplayValue, 1, this->AddEntity(new GkGameText(game->AcquireAnimatedFontFromMultipleFiles(L"font_main_{0}.png", L"0123456789,.-"), 80, 496, -3, GkGameText::GameTextAlignment_Center)))); + this->AddEntity(new GkGameTextsIntBinding(&this->winning, 1, this->AddEntity(new GkGameText(game->AcquireAnimatedFontFromMultipleFiles(L"font_main_{0}.png", L"0123456789,.-"), 250, 496, -3, GkGameText::GameTextAlignment_Center)))); + this->AddEntity(new GkGameTextsIntBinding(&this->bet, 1, this->AddEntity(new GkGameText(game->AcquireAnimatedFontFromMultipleFiles(L"font_main_{0}.png", L"0123456789,.-"), 420, 496, -3, GkGameText::GameTextAlignment_Center)))); + this->AddEntity(new GkGameTextsIntBinding(&this->lines, 1, this->AddEntity(new GkGameText(game->AcquireAnimatedFontFromMultipleFiles(L"font_main_{0}.png", L"0123456789,.-"), 590, 496, -3, GkGameText::GameTextAlignment_Center)))); + + // Create the combinations generator. The combinations generator represents a model of collection of reels. Each of its reels can have a different model + // The GkGameReelStripModel is a GkGameReelModel, representing a reel with a fixed sequence of finite number of items. Here, it is used for all the reels of the combination generator. + this->combinationsGenerator = new GkGameReelsCombinationGenerator(5, 3); + this->combinationsGenerator->SetReelModel(0, new GkGameReelStripModel(3, 6, ReelItem_Cherry, ReelItem_Melon, ReelItem_Cherry, ReelItem_Bell, ReelItem_Cherry, ReelItem_Melon)); + this->combinationsGenerator->SetReelModel(1, new GkGameReelStripModel(3, 6, ReelItem_Bell, ReelItem_Melon, ReelItem_Bell, ReelItem_Melon, ReelItem_Melon, ReelItem_Cherry)); + this->combinationsGenerator->SetReelModel(2, new GkGameReelStripModel(3, 6, ReelItem_Cherry, ReelItem_7, ReelItem_Melon, ReelItem_Cherry, ReelItem_7, ReelItem_Bell)); + this->combinationsGenerator->SetReelModel(3, new GkGameReelStripModel(3, 6, ReelItem_Cherry, ReelItem_Bell, ReelItem_Melon, ReelItem_Bell, ReelItem_Cherry, ReelItem_Bell)); + this->combinationsGenerator->SetReelModel(4, new GkGameReelStripModel(3, 6, ReelItem_Cherry, ReelItem_Melon, ReelItem_Bell, ReelItem_Cherry, ReelItem_Melon, ReelItem_Bell)); + + // Create the visual object for the reels + this->reels = (GkGameReels*)this->AddEntity(new GkGameReels(5, 3, 4, 670, 331)); + this->reels->symbols[ReelItem_Cherry] = game->AcquireAnimatedTexture(L"symbol_cherry.png"); + this->reels->symbols[ReelItem_Melon ] = game->AcquireAnimatedTexture(L"symbol_melon.png"); + this->reels->symbols[ReelItem_Bell ] = game->AcquireAnimatedTexture(L"symbol_bell.png"); + this->reels->symbols[ReelItem_7 ] = game->AcquireAnimatedTexture(L"symbol_7.png"); + this->reels->x = 62; + this->reels->y = 90; + this->reels->ApplyReelMap();// (this->game->settings->playerSettings->currentMap); + this->reels->SetItemGenerator(this->combinationsGenerator); + + // Load the images used to show a winning line + this->lineAnimations[0] = (GkGameAnimation*)this->AddEntity(new GkGameAnimation(game->AcquireAnimatedTexture(L"line123.png"), 112, 255)); + this->lineAnimations[1] = (GkGameAnimation*)this->AddEntity(new GkGameAnimation(game->AcquireAnimatedTexture(L"line123.png"), 112, 139)); + this->lineAnimations[2] = (GkGameAnimation*)this->AddEntity(new GkGameAnimation(game->AcquireAnimatedTexture(L"line123.png"), 112, 371)); + this->lineAnimations[3] = (GkGameAnimation*)this->AddEntity(new GkGameAnimation(game->AcquireAnimatedTexture(L"line45.png"), 112, 139)); + this->lineAnimations[4] = (GkGameAnimation*)this->AddEntity(new GkGameAnimation(game->AcquireAnimatedTexture(L"line45.png"), 112, 139, true, true, true, false, true)); + + // The winnings model defines two things. One is the properties of the symbols - their coefficients and special behaviour. Second - the shape of the winning lines. + this->winningsModel = new GkGameWinningsModel(5, 3, 5, 4, 0); + this->winningsModel->SetupSymbol(ReelItem_Cherry, 0, GkGameWinningsModel::SymbolFlag_Default, GkGameWinningsModel::SymbolFlag_None, 0, 0, 10, 20, 80); + this->winningsModel->SetupSymbol(ReelItem_Melon , 0, GkGameWinningsModel::SymbolFlag_Default, GkGameWinningsModel::SymbolFlag_None, 0, 0, 20, 40, 200); + this->winningsModel->SetupSymbol(ReelItem_Bell , 0, GkGameWinningsModel::SymbolFlag_Default, GkGameWinningsModel::SymbolFlag_None, 0, 0, 50, 100, 500); + this->winningsModel->SetupSymbol(ReelItem_7 , 0, GkGameWinningsModel::SymbolFlag_Wild, GkGameWinningsModel::SymbolFlag_None, 0, 0, 0, 0, 0); + this->winningsModel->SetupLine(0, 1, 1, 1, 1, 1); + this->winningsModel->SetupLine(1, 0, 0, 0, 0, 0); + this->winningsModel->SetupLine(2, 2, 2, 2, 2, 2); + this->winningsModel->SetupLine(3, 0, 1, 2, 1, 0); + this->winningsModel->SetupLine(4, 2, 1, 0, 1, 2); + + // The winnings analyzer is used to analyze a combination for winnings, based on a winning model. After an analisys, it holds all the winnings, if any, and detailed information on them. + this->winningsAnalyzer = new GkGameWinningsAnalyzer(this->winningsModel); + + this->sndReels = game->AcquireSoundSource(L"reels.wav"); + this->sndReelStop = game->AcquireSoundSource(L"reel.wav"); +} + + +MainPage::~MainPage(void) +{ + delete this->combinationsGenerator; + delete this->winningsAnalyzer; + delete this->winningsModel; +} + +void MainPage::Process(GkGame *game) +{ + if (this->reels->state == Idle) + { + // Start button - hide the lines, generate a random combination, set it to appear on the reels after spinning, analyze its winning and start the reels + if (this->btnStart->IsClicked()) + { + for (int lineIndex = 0; lineIndex < this->winningsModel->numLines; lineIndex++) + this->lineAnimations[lineIndex]->visible = false; + + this->credits -= this->bet * this->lines; + + this->combinationsGenerator->GenerateCombination(); + this->reels->SetItems(this->combinationsGenerator); + this->winningsAnalyzer->AnalyzeWinnings(this->combinationsGenerator); + this->winningsAnalyzer->MultiplyWinnings(this->bet); + + this->reels->Start(); + + game->soundDevice->PlaySourceLooping(this->sndReels); + } + + // Bet button - change the bet + if (this->btnBet->IsClicked()) + { + this->bet = this->bet % 10 + 1; + } + + // Lines button - set which lines in the winnings model are active + if (this->btnLines->IsClicked()) + { + this->lines = this->lines % 5 + 1; + + for (int lineIndex = 0; lineIndex < this->winningsModel->numLines; lineIndex++) + this->winningsModel->lines[lineIndex].active = lineIndex < this->lines; + } + + } + + // Stop the spinning reels when the button is pressed + if (this->reels->state == Spinning) + { + if (this->btnStart->IsClicked()) + this->reels->Stop(); + } + + // When reels' state HAS JUST CHANGED to Idle, then show any winning lines, if any, and update combination winning and credits + if (this->reels->stateChange == Idle) + { + for (int winIndex = 0; winIndex < this->winningsAnalyzer->winnings.count; winIndex++) + this->lineAnimations[this->winningsAnalyzer->winnings.win[winIndex].lineIndex]->visible = true; + + this->winning = this->winningsAnalyzer->totalWinning; + this->credits += this->winning; + + game->soundDevice->PauseSource(this->sndReels); + } + + // Sound on every reel stop + for (int reelIndex = 0; reelIndex < this->reels->numReels; reelIndex++) + if (this->reels->reels[reelIndex].stateChange == PostStopping) + game->soundDevice->PlaySource(this->sndReelStop); + + GkGamePage::Process(game); +} \ No newline at end of file diff --git a/COM380/Project5/GambleKit/CustomGameLogic/Pages/MainPage.h b/COM380/Project5/GambleKit/CustomGameLogic/Pages/MainPage.h new file mode 100644 index 0000000..b22ed9b --- /dev/null +++ b/COM380/Project5/GambleKit/CustomGameLogic/Pages/MainPage.h @@ -0,0 +1,37 @@ +#pragma once + +#include "..\CustomGame.h" + +class MainPage : + public GkGamePage +{ +public: + + static const int ReelItem_Cherry = 0, + ReelItem_Melon = 1, + ReelItem_Bell = 2, + ReelItem_7 = 3; + + + GkGameClickButton *btnStart, *btnBet, *btnLines; + + GkGameText *textCredits, *textWinning, *textBet, *textLines; + + GkGameAnimation *lineAnimations[5]; + + GkGameReels *reels; + + GkGameReelsCombinationGenerator *combinationsGenerator; + GkGameWinningsModel *winningsModel; + GkGameWinningsAnalyzer *winningsAnalyzer; + + int bet, lines, winning, credits; + + GkSoundSource *sndReels, *sndReelStop; + + MainPage(CustomGame *game); + ~MainPage(void); + + void Process(GkGame *game); +}; + diff --git a/COM380/Project5/GambleKit/CustomGameLogic/main.cpp b/COM380/Project5/GambleKit/CustomGameLogic/main.cpp new file mode 100644 index 0000000..5677363 --- /dev/null +++ b/COM380/Project5/GambleKit/CustomGameLogic/main.cpp @@ -0,0 +1,30 @@ +//#define _CRTDBG_MAP_ALLOC +//#include +//#include + +#include + +#include "MainWindow.h" + +int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmd, int show) +{ + //_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); + + GkMaths::Randomize(); + + //Dictionary::Initialize(); + GkImage::Initialize(); + GkGraphicsDevice::Initialize(); + GkSoundDevice::Initialize(); + + MainWindow mainWindow; + + GkWindowsForm::PerformFormLoop(); + + GkSoundDevice::Close(); + //Dictionary::Close(); + + //_CrtDumpMemoryLeaks(); + + return 0; +} \ No newline at end of file diff --git a/COM380/Project5/GambleKit/Engine/Base/GkBase.cpp b/COM380/Project5/GambleKit/Engine/Base/GkBase.cpp new file mode 100644 index 0000000..99c156f --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Base/GkBase.cpp @@ -0,0 +1,23 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkBase.h" + + +GkBase::GkBase(void) +{ +} + + +GkBase::~GkBase(void) +{ +} diff --git a/COM380/Project5/GambleKit/Engine/Base/GkBase.h b/COM380/Project5/GambleKit/Engine/Base/GkBase.h new file mode 100644 index 0000000..3926762 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Base/GkBase.h @@ -0,0 +1,11 @@ +#pragma once + +#include "..\GkDefinitions.h" + +class GKDLLCLASS GkBase +{ +public: + GkBase::GkBase(void); + virtual GkBase::~GkBase(void); +}; + diff --git a/COM380/Project5/GambleKit/Engine/Base/GkBaseReelMap.cpp b/COM380/Project5/GambleKit/Engine/Base/GkBaseReelMap.cpp new file mode 100644 index 0000000..45a0017 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Base/GkBaseReelMap.cpp @@ -0,0 +1,126 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkBaseReelMap.h" + +#include "..\OSSpecific\GkOSUtils.h" + +GkBaseReelMap::GkBaseReelMap(int numReels, int numReelItems) + : GkBase() +{ + this->numReels = numReels; + this->numReelItems = numReelItems; + + this->reelMap = new int[this->numReels * this->numReelItems]; + GkOSUtils::ZeroMem(this->reelMap, this->numReels * this->numReelItems * sizeof(int)); +} + + +GkBaseReelMap::~GkBaseReelMap(void) +{ + delete[] reelMap; +} + +void GkBaseReelMap::SetSymbol(int reelIndex, int itemIndex, int symbolIndex) +{ + this->reelMap[reelIndex * this->numReelItems + itemIndex] = symbolIndex; +} + +int GkBaseReelMap::GetSymbol(int reelIndex, int itemIndex) +{ + return this->reelMap[reelIndex * this->numReelItems + itemIndex]; +} + +void GkBaseReelMap::SetItems(GkBaseReelMap *reelMap, int startReel, int startItem, int numReels, int numItems) +{ + int maxReel = startReel + numReels; + int maxItem = startItem + numItems; + for (int reelIndex = startReel; reelIndex < maxReel; reelIndex++) + { + for (int itemIndex = startItem; itemIndex < maxItem; itemIndex++) + { + this->SetSymbol(reelIndex, itemIndex, reelMap->GetSymbol(reelIndex, itemIndex)); + } + } +} + +void GkBaseReelMap::SetItems(GkBaseReelMap *reelMap) +{ + this->SetItems(reelMap, 0, 0, this->numReels, this->numReelItems); +} + +void GkBaseReelMap::SetReelItems(GkBaseReelMap *reelMap, int reelIndex) +{ + this->SetItems(reelMap, reelIndex, 0, 1, this->numReelItems); +} + +void GkBaseReelMap::SetItems(const int *reelMap) +{ + GkOSUtils::CopyMem(this->reelMap, (void*)reelMap, this->numReels * this->numReelItems * sizeof(int)); +} + +void GkBaseReelMap::WriteItems(const int *reelMap) +{ + GkOSUtils::CopyMem((void*)reelMap, this->reelMap, this->numReels * this->numReelItems * sizeof(int)); +} + +int GkBaseReelMap::CountItems(int reelIndex, int itemIndex) +{ + int result = 0; + for (int i = 0; i < this->numReelItems; i++) + if (this->GetSymbol(reelIndex, i) == itemIndex) + result++; + + return result; +} + +int GkBaseReelMap::CountItems(int itemIndex) +{ + int result = 0; + for (int i = 0; i < this->numReels; i++) + result += this->CountItems(i, itemIndex); + + return result; +} + +int GkBaseReelMap::FindFirstSymbol(int reelIndex, int symbolIndex) +{ + for (int i = 0; i < this->numReelItems; i++) + if (this->GetSymbol(reelIndex, i) == symbolIndex) + return i; + + return -1; +} + +bool GkBaseReelMap::ReelEquals(GkBaseReelMap *reelMap, int reelIndex) +{ + if (this->numReelItems != reelMap->numReelItems) + return false; + + for (int itemIndex = 0; itemIndex < this->numReelItems; itemIndex++) + if (this->GetSymbol(reelIndex, itemIndex) != reelMap->GetSymbol(reelIndex, itemIndex)) + return false; + + return true; +} + +bool GkBaseReelMap::ReelsEquals(GkBaseReelMap *reelMap) +{ + if (this->numReels != reelMap->numReels) + return false; + + for (int reelIndex = 0; reelIndex < this->numReels; reelIndex++) + if (!this->ReelEquals(reelMap, reelIndex)) + return false; + + return true; +} diff --git a/COM380/Project5/GambleKit/Engine/Base/GkBaseReelMap.h b/COM380/Project5/GambleKit/Engine/Base/GkBaseReelMap.h new file mode 100644 index 0000000..f1688fd --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Base/GkBaseReelMap.h @@ -0,0 +1,31 @@ +#pragma once + +#include "..\GkDefinitions.h" + +#include "GkBase.h" + +class GKDLLCLASS GkBaseReelMap + : public GkBase +{ +public: + int numReels, numReelItems; + + int *reelMap; + + GkBaseReelMap(int numReels, int numReelItems); + ~GkBaseReelMap(void); + + virtual void SetSymbol(int reelIndex, int itemIndex, int symbolIndex); + virtual int GetSymbol(int reelIndex, int itemIndex); + void SetItems(GkBaseReelMap *reelMap, int startReel, int startItem, int numReels, int numItems); + void SetItems(GkBaseReelMap *reelMap); + void SetReelItems(GkBaseReelMap *reelMap, int reelIndex); + void SetItems(const int *reelMap); + void WriteItems(const int *reelMap); + int CountItems(int reelIndex, int itemIndex); + int CountItems(int itemIndex); + int FindFirstSymbol(int reelIndex, int symbolIndex); + bool ReelEquals(GkBaseReelMap *reelMap, int reelIndex); + bool ReelsEquals(GkBaseReelMap *reelMap); +}; + diff --git a/COM380/Project5/GambleKit/Engine/GambleKit.h b/COM380/Project5/GambleKit/Engine/GambleKit.h new file mode 100644 index 0000000..e54a018 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/GambleKit.h @@ -0,0 +1,57 @@ +#pragma once + +#include "Base\GkBase.h" +#include "Base\GkBaseReelMap.h" + +#include "Game\GkGame.h" +#include "Game\GkGameEntity.h" +#include "Game\GkGamePage.h" +#include "Game\GkGameReelModel.h" +#include "Game\GkGameReelsCombinationGenerator.h" +#include "Game\GkGameTimer.h" +#include "Game\GkGameWinningPotentialsAnalyzer.h" +#include "Game\GkGameWinningsAnalyzer.h" +#include "Game\GkGameWinningsModel.h" + +#include "Game\Entities\GkGameAnimation.h" +#include "Game\Entities\GkGameButton.h" +#include "Game\Entities\GkGameReels.h" +#include "Game\Entities\GkGameStreamingAnimation.h" +#include "Game\Entities\GkGameText.h" +#include "Game\Entities\GkGameWinningCounter.h" + +#include "Game\Entities\Bindings\GkGameAnimationsSoundBinding.h" +#include "Game\Entities\Bindings\GkGameButtonsBinding.h" +#include "Game\Entities\Bindings\GkGameButtonsSoundBinding.h" +#include "Game\Entities\Bindings\GkGameTextsDateTimeBinding.h" +#include "Game\Entities\Bindings\GkGameTextsFormatBinding.h" +#include "Game\Entities\Bindings\GkGameTextsFormatIntBinding.h" +#include "Game\Entities\Bindings\GkGameTextsIntBinding.h" + +#include "Game\Entities\Buttons\GkGameAnimationButton.h" +#include "Game\Entities\Buttons\GkGameCheckButton.h" +#include "Game\Entities\Buttons\GkGameClickButton.h" + +#include "Game\ReelModels\GkGameReelRandomModel.h" +#include "Game\ReelModels\GkGameReelStripModel.h" + +#include "Graphics\GkAnimatedFont.h" +#include "Graphics\GkAnimatedTexture.h" +#include "Graphics\GkGraphicsDevice.h" +#include "Graphics\GkImage.h" +#include "Graphics\GkTexture.h" + +#include "OSSpecific\GkFileSystem.h" +#include "OSSpecific\GkOpenGLWindowsForm.h" +#include "OSSpecific\GkOSUtils.h" +#include "OSSpecific\GkWindowsForm.h" +#include "OSSpecific\GkWindowsMutex.h" +#include "OSSpecific\GkWindowsThread.h" + +#include "Sound\GkSoundDevice.h" +#include "Sound\GkSoundSource.h" + +#include "Utils\GkList.h" +#include "Utils\GkLogFile.h" +#include "Utils\GkMaths.h" +#include "Utils\GkStrings.h" \ No newline at end of file diff --git a/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameAnimationsSoundBinding.cpp b/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameAnimationsSoundBinding.cpp new file mode 100644 index 0000000..eae91df --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameAnimationsSoundBinding.cpp @@ -0,0 +1,65 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkGameAnimationsSoundBinding.h" + + +GkGameAnimationsSoundBinding::GkGameAnimationsSoundBinding(GkSoundSource *soundSource, GkSoundDevice *soundDevice, bool looping, int numAnimations, ...) + : GkGameEntity() +{ + this->soundSource = soundSource; + this->soundDevice = soundDevice; + this->looping = looping; + + this->numAnimations = numAnimations; + GkGameAnimation **parameters = (GkGameAnimation **)((int)&numAnimations + 4); + this->animations = new GkGameAnimationsSoundBindingAnimation[numAnimations]; + for (int i = 0; i < numAnimations; i++) + { + this->animations[i].animation = parameters[i]; + this->animations[i].played = false; + } +} + + +GkGameAnimationsSoundBinding::~GkGameAnimationsSoundBinding(void) +{ + delete[] this->animations; +} + +void GkGameAnimationsSoundBinding::Process(GkGame *game) +{ + for (int i = 0; i < this->numAnimations; i++) + { + if (this->animations[i].animation->visible && this->animations[i].animation->active) + { + if (!this->animations[i].played) + { + if (this->looping) + this->soundDevice->PlaySourceLooping(this->soundSource); + else + this->soundDevice->PlaySource(this->soundSource); + + this->animations[i].played = true; + } + } + else + { + if (this->looping) + { + this->soundDevice->PauseSource(this->soundSource); + } + + this->animations[i].played = false; + } + } +} \ No newline at end of file diff --git a/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameAnimationsSoundBinding.h b/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameAnimationsSoundBinding.h new file mode 100644 index 0000000..a0d917e --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameAnimationsSoundBinding.h @@ -0,0 +1,31 @@ +#pragma once + +#include "..\..\..\GkDefinitions.h" + +#include "..\GkGameAnimation.h" +#include "..\..\..\Sound\GkSoundDevice.h" + +struct GkGameAnimationsSoundBindingAnimation +{ + GkGameAnimation *animation; + bool played; +}; + +class GKDLLCLASS GkGameAnimationsSoundBinding : + public GkGameEntity +{ +public: + GkSoundDevice *soundDevice; + GkSoundSource *soundSource; + + int numAnimations; + GkGameAnimationsSoundBindingAnimation *animations; + + bool looping; + + GkGameAnimationsSoundBinding(GkSoundSource *soundSource, GkSoundDevice *soundDevice, bool looping, int numAnimations, ...); + ~GkGameAnimationsSoundBinding(void); + + void Process(GkGame *game); +}; + diff --git a/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameButtonsBinding.cpp b/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameButtonsBinding.cpp new file mode 100644 index 0000000..d558460 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameButtonsBinding.cpp @@ -0,0 +1,115 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkGameButtonsBinding.h" + + +GkGameButtonsBinding::GkGameButtonsBinding(int numGameButtons, ...) +{ + GkGameButton **parameters = (GkGameButton **)((int)&numGameButtons + 4); + this->numGameButtons = numGameButtons; + this->gameButtons = new GkGameButton*[numGameButtons]; + for (int i = 0; i < numGameButtons; i++) + this->gameButtons[i] = parameters[i]; + + this->enabled = true; + + this->pushedValue = false; + this->clickedValue = false; +} + + +GkGameButtonsBinding::~GkGameButtonsBinding(void) +{ + delete this->gameButtons; +} + +void GkGameButtonsBinding::SyncPush(int syncButtonIndex) +{ + GkGameButton *syncButton = this->gameButtons[syncButtonIndex]; + + for (int buttonIndex = 0; buttonIndex < this->numGameButtons; buttonIndex++) + { + if (buttonIndex != syncButtonIndex) + { + GkGameButton *button = this->gameButtons[buttonIndex]; + + if (button->IsActive()) + { + if (button->pushed != syncButton->pushed) + { + if (syncButton->pushed) + button->Down(); + else + button->Up(true); + } + } + } + } + + this->pushedValue = syncButton->pushed; +} + +void GkGameButtonsBinding::SyncClick(int syncButtonIndex) +{ + GkGameButton *syncButton = this->gameButtons[syncButtonIndex]; + + for (int buttonIndex = 0; buttonIndex < this->numGameButtons; buttonIndex++) + { + if (buttonIndex != syncButtonIndex) + { + GkGameButton *button = this->gameButtons[buttonIndex]; + + if (button->IsActive()) + { + button->clicked = syncButton->clicked; + } + } + } + + this->clickedValue = syncButton->clicked; +} + +void GkGameButtonsBinding::Process(GkGame *game) +{ + if (!enabled) + return; + + for (int buttonIndex = 0; buttonIndex < this->numGameButtons; buttonIndex++) + { + GkGameButton *button = this->gameButtons[buttonIndex]; + if (button->IsActive()) + { + if (button->pushed != this->pushedValue) + { + this->SyncPush(buttonIndex); + break; + } + } + } + + for (int buttonIndex = 0; buttonIndex < this->numGameButtons; buttonIndex++) + { + GkGameButton *button = this->gameButtons[buttonIndex]; + if (button->IsActive()) + { + if (button->clicked != this->clickedValue) + { + // SyncClick is required beside SyncPush, because mouse events execute separately from the Process sequence and MouseUp usually sets a button pushed to false, which actually prevents SyncPush to execute mouse up (for it checks if the button is pushed) + this->SyncClick(buttonIndex); + break; + } + } + } + + +} \ No newline at end of file diff --git a/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameButtonsBinding.h b/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameButtonsBinding.h new file mode 100644 index 0000000..9b909fe --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameButtonsBinding.h @@ -0,0 +1,27 @@ +#pragma once + +#include "..\..\..\GkDefinitions.h" + +#include "..\..\GkGameEntity.h" +#include "..\..\Entities\GkGameButton.h" + +class GKDLLCLASS GkGameButtonsBinding : + public GkGameEntity +{ +public: + int numGameButtons; + GkGameButton **gameButtons; + + bool enabled; + + bool pushedValue, clickedValue; + + GkGameButtonsBinding(int numGameButtons, ...); + ~GkGameButtonsBinding(void); + + void SyncPush(int syncButtonIndex); + void SyncClick(int syncButtonIndex); + + void Process(GkGame *game); +}; + diff --git a/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameButtonsSoundBinding.cpp b/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameButtonsSoundBinding.cpp new file mode 100644 index 0000000..f1af4aa --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameButtonsSoundBinding.cpp @@ -0,0 +1,56 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkGameButtonsSoundBinding.h" + + +GkGameButtonsSoundBinding::GkGameButtonsSoundBinding(GkSoundSource *soundSource, GkSoundDevice *soundDevice, int numButtons, ...) + : GkGameEntity() +{ + this->soundSource = soundSource; + this->soundDevice = soundDevice; + + this->numButtons = numButtons; + GkGameButton **parameters = (GkGameButton **)((int)&numButtons + 4); + this->buttons = new GameButtonsSoundBindingButton[numButtons]; + for (int i = 0; i < numButtons; i++) + { + this->buttons[i].button = parameters[i]; + this->buttons[i].played = false; + } +} + + +GkGameButtonsSoundBinding::~GkGameButtonsSoundBinding(void) +{ + delete[] this->buttons; +} + +void GkGameButtonsSoundBinding::Process(GkGame *game) +{ + for (int i = 0; i < this->numButtons; i++) + { + if (this->buttons[i].button->pushed) + { + if (!this->buttons[i].played) + { + this->soundDevice->PlaySource(this->soundSource); + + this->buttons[i].played = true; + } + } + else + { + this->buttons[i].played = false; + } + } +} \ No newline at end of file diff --git a/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameButtonsSoundBinding.h b/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameButtonsSoundBinding.h new file mode 100644 index 0000000..3622a8b --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameButtonsSoundBinding.h @@ -0,0 +1,29 @@ +#pragma once + +#include "..\..\..\GkDefinitions.h" + +#include "..\GkGameButton.h" +#include "..\..\..\Sound\GkSoundDevice.h" + +struct GameButtonsSoundBindingButton +{ + GkGameButton *button; + bool played; +}; + +class GKDLLCLASS GkGameButtonsSoundBinding : + public GkGameEntity +{ +public: + GkSoundDevice *soundDevice; + GkSoundSource *soundSource; + + int numButtons; + GameButtonsSoundBindingButton *buttons; + + GkGameButtonsSoundBinding(GkSoundSource *soundSource, GkSoundDevice *soundDevice, int numButtons, ...); + ~GkGameButtonsSoundBinding(void); + + void Process(GkGame *game); +}; + diff --git a/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameTextsDateTimeBinding.cpp b/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameTextsDateTimeBinding.cpp new file mode 100644 index 0000000..c6696e4 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameTextsDateTimeBinding.cpp @@ -0,0 +1,42 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkGameTextsDateTimeBinding.h" + +#include "..\..\..\Utils\GkStrings.h" + +GkGameTextsDateTimeBinding::GkGameTextsDateTimeBinding(DateTime* valueAddress, const wchar_t *formatString, int numGameTexts, ...) + : GkGameEntity() +{ + this->valueAddress = valueAddress; + this->formatString = GkStrings::Copy(formatString); + + this->numGameTexts = numGameTexts; + + GkGameText **parameters = (GkGameText **)((int)&numGameTexts + 4); + this->gameTexts = new GkGameText*[this->numGameTexts]; + for (int i = 0; i < this->numGameTexts; i++) + this->gameTexts[i] = parameters[i]; +} + + +GkGameTextsDateTimeBinding::~GkGameTextsDateTimeBinding(void) +{ + delete[] this->formatString; + delete[] this->gameTexts; +} + +void GkGameTextsDateTimeBinding::Process(GkGame *game) +{ + for (int i = 0; i < this->numGameTexts; i++) + this->gameTexts[i]->SetText(GkStrings::Format(this->formatString, GkStrings::IntToString(this->valueAddress->day, 10, 2).c_str(), GkStrings::IntToString(this->valueAddress->month, 10, 2).c_str(), GkStrings::IntToString(this->valueAddress->year, 10, 4).c_str(), GkStrings::IntToString(this->valueAddress->hour, 10, 2).c_str(), GkStrings::IntToString(this->valueAddress->minute, 10, 2).c_str(), GkStrings::IntToString(this->valueAddress->second, 10, 2).c_str()).c_str()); +} diff --git a/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameTextsDateTimeBinding.h b/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameTextsDateTimeBinding.h new file mode 100644 index 0000000..92b97ef --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameTextsDateTimeBinding.h @@ -0,0 +1,27 @@ +#pragma once + +#include "..\..\..\GkDefinitions.h" + +#include "..\..\GkGameEntity.h" + +#include "..\GkGameText.h" + +#include "..\..\..\OSSpecific\GkOSUtils.h" + +class GKDLLCLASS GkGameTextsDateTimeBinding : + public GkGameEntity +{ +public: + DateTime * valueAddress; + + int numGameTexts; + GkGameText **gameTexts; + + wchar_t *formatString; + + GkGameTextsDateTimeBinding(DateTime* valueAddress, const wchar_t *formatString, int numGameTexts, ...); + ~GkGameTextsDateTimeBinding(void); + + void Process(GkGame *game); +}; + diff --git a/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameTextsFormatBinding.cpp b/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameTextsFormatBinding.cpp new file mode 100644 index 0000000..dd91f21 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameTextsFormatBinding.cpp @@ -0,0 +1,23 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkGameTextsFormatBinding.h" + + +GkGameTextsFormatBinding::GkGameTextsFormatBinding(void) +{ +} + + +GkGameTextsFormatBinding::~GkGameTextsFormatBinding(void) +{ +} diff --git a/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameTextsFormatBinding.h b/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameTextsFormatBinding.h new file mode 100644 index 0000000..0913727 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameTextsFormatBinding.h @@ -0,0 +1,14 @@ +#pragma once + +#include "..\..\..\GkDefinitions.h" + +#include "..\..\GkGameEntity.h" + +class GKDLLCLASS GkGameTextsFormatBinding : + public GkGameEntity +{ +public: + GkGameTextsFormatBinding(void); + ~GkGameTextsFormatBinding(void); +}; + diff --git a/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameTextsFormatIntBinding.cpp b/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameTextsFormatIntBinding.cpp new file mode 100644 index 0000000..a2f271c --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameTextsFormatIntBinding.cpp @@ -0,0 +1,59 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkGameTextsFormatIntBinding.h" + +#include "..\..\..\Utils\GkStrings.h" + + +GkGameTextsFormatIntBinding::GkGameTextsFormatIntBinding(const wchar_t *format, int numValues, int numGameTexts, ...) +{ + this->numValues = numValues; + this->numGameTexts = numGameTexts; + this->format = GkStrings::Copy(format); + + int **valueAddressParams = (int**)((int)&numGameTexts + 4); + this->valueAddresses = new int*[this->numValues]; + this->values = new wchar_t*[this->numValues]; + for (int i = 0; i < this->numValues; i++) + this->valueAddresses[i] = valueAddressParams[i]; + + GkGameText **gameTextParams = (GkGameText **)((int)&valueAddressParams[this->numValues - 1] + 4); + this->gameTexts = new GkGameText*[this->numGameTexts]; + for (int i = 0; i < this->numGameTexts; i++) + this->gameTexts[i] = gameTextParams[i]; +} + + +GkGameTextsFormatIntBinding::~GkGameTextsFormatIntBinding(void) +{ + delete[] this->valueAddresses; + delete[] this->values; + + delete[] this->gameTexts; + + delete[] this->format; +} + +void GkGameTextsFormatIntBinding::Process(GkGame *game) +{ + for (int i = 0; i < this->numValues; i++) + this->values[i] = GkStrings::Copy(GkStrings::IntToString(*this->valueAddresses[i]).c_str()); + + for (int gameTextIndex = 0; gameTextIndex < this->numGameTexts; gameTextIndex++) + { + this->gameTexts[gameTextIndex]->SetText(GkStrings::FormatArray(this->format, this->values).c_str()); + } + + for (int i = 0; i < this->numValues; i++) + delete[] this->values[i]; +} diff --git a/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameTextsFormatIntBinding.h b/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameTextsFormatIntBinding.h new file mode 100644 index 0000000..8b07ebc --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameTextsFormatIntBinding.h @@ -0,0 +1,28 @@ +#pragma once + +#include "..\..\..\GkDefinitions.h" + +#include "..\..\GkGameEntity.h" + +#include "..\GkGameText.h" + + +class GKDLLCLASS GkGameTextsFormatIntBinding : + public GkGameEntity +{ +public: + int numValues; + int **valueAddresses; + wchar_t **values; + + int numGameTexts; + GkGameText **gameTexts; + + wchar_t *format; + + GkGameTextsFormatIntBinding(const wchar_t *format, int numValues, int numGameTexts, ...); + ~GkGameTextsFormatIntBinding(void); + + void Process(GkGame *game); +}; + diff --git a/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameTextsIntBinding.cpp b/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameTextsIntBinding.cpp new file mode 100644 index 0000000..bad939c --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameTextsIntBinding.cpp @@ -0,0 +1,40 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkGameTextsIntBinding.h" + +#include "..\..\..\Utils\GkStrings.h" + +GkGameTextsIntBinding::GkGameTextsIntBinding(int* valueAddress, int numGameTexts, ...) + : GkGameEntity() +{ + this->valueAddress = valueAddress; + + this->numGameTexts = numGameTexts; + + GkGameText **parameters = (GkGameText **)((int)&numGameTexts + 4); + this->gameTexts = new GkGameText*[this->numGameTexts]; + for (int i = 0; i < this->numGameTexts; i++) + this->gameTexts[i] = parameters[i]; +} + + +GkGameTextsIntBinding::~GkGameTextsIntBinding(void) +{ + delete[] this->gameTexts; +} + +void GkGameTextsIntBinding::Process(GkGame *game) +{ + for (int i = 0; i < this->numGameTexts; i++) + this->gameTexts[i]->SetText(GkStrings::IntToString(*this->valueAddress).c_str()); +} diff --git a/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameTextsIntBinding.h b/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameTextsIntBinding.h new file mode 100644 index 0000000..19c3295 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/Entities/Bindings/GkGameTextsIntBinding.h @@ -0,0 +1,23 @@ +#pragma once + +#include "..\..\..\GkDefinitions.h" + +#include "..\..\GkGameEntity.h" + +#include "..\GkGameText.h" + +class GKDLLCLASS GkGameTextsIntBinding : + public GkGameEntity +{ +public: + int * valueAddress; + + int numGameTexts; + GkGameText **gameTexts; + + GkGameTextsIntBinding(int* valueAddress, int numGameTexts, ...); + ~GkGameTextsIntBinding(void); + + void Process(GkGame *game); +}; + diff --git a/COM380/Project5/GambleKit/Engine/Game/Entities/Buttons/GkGameAnimationButton.cpp b/COM380/Project5/GambleKit/Engine/Game/Entities/Buttons/GkGameAnimationButton.cpp new file mode 100644 index 0000000..78e5231 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/Entities/Buttons/GkGameAnimationButton.cpp @@ -0,0 +1,95 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkGameAnimationButton.h" + +//#include "..\..\Utils\GkMaths.h" + +GkGameAnimationButton::GkGameAnimationButton(GkGameEntity *defaultFace, GkGameEntity *selectedFace, GkGameEntity *disabledFace, bool autoEnable, int x, int y, int width, int height) + : GkGameButton(defaultFace, selectedFace, disabledFace, autoEnable, x, y, width, height) +{ + GkGameAnimation *face = dynamic_cast(this->defaultFace); + if (face != 0) + face->EndAnimation(); + + face = dynamic_cast(this->selectedFace); + if (face != 0) + face->EndAnimation(); + + face = dynamic_cast(this->disabledFace); + if (face != 0) + face->EndAnimation(); + + this->lastFace = this->GetCurrentFace(); +} + + +GkGameAnimationButton::~GkGameAnimationButton(void) +{ +} + +void GkGameAnimationButton::Down() +{ + GkGameButton::Down(); + + //GkGameAnimation *currentFace = dynamic_cast(this->GetCurrentFace()); + //if ((currentFace != 0) && (!currentFace->active)) + //{ + // currentFace->ResetAnimation(); + //} +} + +GkGameEntity* GkGameAnimationButton::GetCurrentFace() +{ + GkGameAnimation *face = this->GetAnimatingFace(); + if (face != 0) + return face; + + return GkGameButton::GetCurrentFace(); +} + +GkGameAnimation* GkGameAnimationButton::GetAnimatingFace() +{ + GkGameAnimation *face = dynamic_cast(this->defaultFace); + if ((face != 0) && (face->active) && (!face->loop)) + return face; + + face = dynamic_cast(this->selectedFace); + if ((face != 0) && (face->active) && (!face->loop)) + return face; + + face = dynamic_cast(this->disabledFace); + if ((face != 0) && (face->active) && (!face->loop)) + return face; + + return 0; +} + +void GkGameAnimationButton::Process(GkGame *game) +{ + GkGameEntity *currentFace = this->GetCurrentFace(); + + if (currentFace != this->lastFace) + { + GkGameAnimation *lastAnimation = dynamic_cast(this->lastFace); + if (lastAnimation != 0) + lastAnimation->EndAnimation(); + + GkGameAnimation *currentAnimation = dynamic_cast(currentFace); + if (currentAnimation != 0) + currentAnimation->ResetAnimation(); + + this->lastFace = currentFace; + } + + GkGameButton::Process(game); +} diff --git a/COM380/Project5/GambleKit/Engine/Game/Entities/Buttons/GkGameAnimationButton.h b/COM380/Project5/GambleKit/Engine/Game/Entities/Buttons/GkGameAnimationButton.h new file mode 100644 index 0000000..5f3e60a --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/Entities/Buttons/GkGameAnimationButton.h @@ -0,0 +1,23 @@ +#pragma once + +#include "..\..\..\GkDefinitions.h" + +#include "..\GkGameButton.h" +#include "..\GkGameAnimation.h" + +class GKDLLCLASS GkGameAnimationButton : + public GkGameButton +{ +public: + GkGameAnimationButton(GkGameEntity *defaultFace, GkGameEntity *selectedFace = 0, GkGameEntity *disabledFace = 0, bool autoEnable = true, int x = 0, int y = 0, int width = 0, int heght = 0); + ~GkGameAnimationButton(void); + + GkGameAnimation* GetAnimatingFace(); + GkGameEntity *lastFace; + + virtual void Down(); + virtual GkGameEntity* GetCurrentFace(); + + void Process(GkGame *game); +}; + diff --git a/COM380/Project5/GambleKit/Engine/Game/Entities/Buttons/GkGameCheckButton.cpp b/COM380/Project5/GambleKit/Engine/Game/Entities/Buttons/GkGameCheckButton.cpp new file mode 100644 index 0000000..7cd6140 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/Entities/Buttons/GkGameCheckButton.cpp @@ -0,0 +1,52 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkGameCheckButton.h" + +GkGameCheckButton::GkGameCheckButton(GkGameEntity *defaultFace, GkGameEntity *selectedFace, GkGameEntity *disabledFace, bool autoEnable, int x, int y, int width, int heght) + : GkGameAnimationButton(defaultFace, selectedFace, disabledFace, autoEnable, x, y, width, heght) +{ + this->checked = false; +} + +void GkGameCheckButton::Down() +{ + GkGameAnimationButton::Down(); + + if (!this->IsActive()) + return; + + this->checked = !this->checked; +} + +GkGameEntity* GkGameCheckButton::GetCurrentFace() +{ + GkGameAnimation *face = this->GetAnimatingFace(); + if (face != 0) + return face; + + //if (this->enabled) + //{ + if (this->checked) + { + return this->selectedFace != 0 ? this->selectedFace : this->defaultFace; + } + else + { + return this->defaultFace; + } + //} + //else + //{ + // return this->disabledFace != 0 ? this->disabledFace : this->defaultFace; + //} +} diff --git a/COM380/Project5/GambleKit/Engine/Game/Entities/Buttons/GkGameCheckButton.h b/COM380/Project5/GambleKit/Engine/Game/Entities/Buttons/GkGameCheckButton.h new file mode 100644 index 0000000..a74fdfd --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/Entities/Buttons/GkGameCheckButton.h @@ -0,0 +1,20 @@ +#pragma once + +#include "..\..\..\GkDefinitions.h" + +#include "GkGameAnimationButton.h" + +class GKDLLCLASS GkGameCheckButton : + public GkGameAnimationButton +{ +public: + bool checked; + + GkGameCheckButton::GkGameCheckButton(GkGameEntity *defaultFace, GkGameEntity *selectedFace = 0, GkGameEntity *disabledFace = 0, bool autoEnable = true, int x = 0, int y = 0, int width = 0, int heght = 0); + + void GkGameCheckButton::Down(); + GkGameEntity* GkGameCheckButton::GetCurrentFace(); + + void GkGameCheckButton::SynchWith(GkGameCheckButton *button); +}; + diff --git a/COM380/Project5/GambleKit/Engine/Game/Entities/Buttons/GkGameClickButton.cpp b/COM380/Project5/GambleKit/Engine/Game/Entities/Buttons/GkGameClickButton.cpp new file mode 100644 index 0000000..9fe8969 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/Entities/Buttons/GkGameClickButton.cpp @@ -0,0 +1,22 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkGameClickButton.h" + +GkGameClickButton::GkGameClickButton(GkGameEntity *defaultFace, GkGameEntity *selectedFace, GkGameEntity *disabledFace, bool autoEnable, int x, int y, int width, int height) + : GkGameAnimationButton(defaultFace, selectedFace, disabledFace, autoEnable, x, y, width, height) +{ +} + +GkGameClickButton::~GkGameClickButton() +{ +} \ No newline at end of file diff --git a/COM380/Project5/GambleKit/Engine/Game/Entities/Buttons/GkGameClickButton.h b/COM380/Project5/GambleKit/Engine/Game/Entities/Buttons/GkGameClickButton.h new file mode 100644 index 0000000..d3d5208 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/Entities/Buttons/GkGameClickButton.h @@ -0,0 +1,15 @@ +#pragma once + +#include "..\..\..\GkDefinitions.h" + +#include "GkGameAnimationButton.h" + + +class GKDLLCLASS GkGameClickButton : + public GkGameAnimationButton +{ +public: + GkGameClickButton(GkGameEntity *defaultFace, GkGameEntity *selectedFace = 0, GkGameEntity *disabledFace = 0, bool autoEnable = true, int x = 0, int y = 0, int width = 0, int height = 0); + ~GkGameClickButton(); +}; + diff --git a/COM380/Project5/GambleKit/Engine/Game/Entities/GkGameAnimation.cpp b/COM380/Project5/GambleKit/Engine/Game/Entities/GkGameAnimation.cpp new file mode 100644 index 0000000..f7e29e6 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/Entities/GkGameAnimation.cpp @@ -0,0 +1,125 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkGameAnimation.h" + +#include "..\..\Graphics\GkImage.h" + +#include "..\GkGame.h" + +GkGameAnimation::GkGameAnimation(GkAnimatedTexture *animatedTexture, int x, int y, bool active, bool loop, bool visible, bool flipX, bool flipY, float framesPerSecond, int width, int height) +{ + this->SetAnimatedTexture(animatedTexture, framesPerSecond); + this->x = x; + this->y = y; + this->width = width; + this->height = height; + this->framesPerSecond = framesPerSecond != 0.0f ? framesPerSecond : animatedTexture != 0 ? animatedTexture->framesPerSecond : 0.0f; + this->active = active && (animatedTexture != NULL); + this->loop = loop && (animatedTexture != NULL); + this->visible = visible && (animatedTexture != NULL); + this->flipX = flipX; + this->flipY = flipY; +} + +GkGameAnimation::~GkGameAnimation(void) +{ +} + +void GkGameAnimation::SetAnimatedTexture(GkAnimatedTexture *animatedTexture, float framesPerSecond) +{ + this->animatedTexture = animatedTexture; + this->framesPerSecond = framesPerSecond != 0.0f ? framesPerSecond : animatedTexture != 0 ? animatedTexture->framesPerSecond : 0.0f; + this->ResetAnimation(this->active); +} + +void GkGameAnimation::Process(GkGame *game) +{ + if (!(this->active && this->visible)) + return; + + if (this->flipX) + this->flipX = true; + + this->currentFrame += this->framesPerSecond * game->timer->tickTime; + + if (this->currentFrame > this->animatedTexture->numFrames) + { + if (this->loop) + { + int intFrame = (int)this->currentFrame; + float fracFrame = this->currentFrame - intFrame; + this->currentFrame = intFrame % this->animatedTexture->numFrames + fracFrame; + } + else + { + this->EndAnimation(); + } + } + + if (this->currentFrame < 0) + { + if (this->loop) + { + int intFrame = (int)this->currentFrame; + float fracFrame = this->currentFrame - intFrame; + this->currentFrame = (this->animatedTexture->numFrames - 1 - intFrame) % this->animatedTexture->numFrames + fracFrame; + } + else + { + this->EndAnimation(); + } + } +} + +void GkGameAnimation::Draw(GkGame *game) +{ + if (!this->visible) + return; + + GkTexture *frame = this->animatedTexture->frames[(int)this->currentFrame]; + int width = this->width != 0 ? this->width : frame->width; + int height = this->height != 0 ? this->height : frame->height; + if (this->flipX) + if (this->flipY) + game->graphicsDevice->Draw(this->x + width, this->y + height, -width, -height, 0, 0, frame->width,frame->height, frame); + else + game->graphicsDevice->Draw(this->x + width, this->y, -width, height, 0, 0, frame->width, frame->height, frame); + else + if (this->flipY) + game->graphicsDevice->Draw(this->x, this->y + height, width, -height, 0, 0, frame->width, frame->height, frame); + else + game->graphicsDevice->Draw(this->x, this->y, width, height, 0, 0, frame->width, frame->height, frame); +} + +bool GkGameAnimation::GetBoundaries(int *x1, int *y1, int *x2, int*y2) +{ + *x1 = this->x; + *y1 = this->y; + *x2 = this->x + this->animatedTexture->frames[0]->width; + *y2 = this->y + this->animatedTexture->frames[0]->height; + + return true; +} + + +void GkGameAnimation::ResetAnimation(bool start) +{ + this->currentFrame = this->framesPerSecond < 0 ? this->animatedTexture != 0 ? (float)(this->animatedTexture->numFrames - 1) : 0.0f : 0.0f; + this->active = start; +} + +void GkGameAnimation::EndAnimation() +{ + this->currentFrame = this->framesPerSecond < 0 ? 0.0f : this->animatedTexture != 0 ? (float)(this->animatedTexture->numFrames - 1) : 0.0f; + this->active = false; +} diff --git a/COM380/Project5/GambleKit/Engine/Game/Entities/GkGameAnimation.h b/COM380/Project5/GambleKit/Engine/Game/Entities/GkGameAnimation.h new file mode 100644 index 0000000..b31ac65 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/Entities/GkGameAnimation.h @@ -0,0 +1,31 @@ +#pragma once + +#include "..\..\GkDefinitions.h" + +#include "..\GkGameEntity.h" +#include "..\..\Graphics\GkAnimatedTexture.h" + +class GKDLLCLASS GkGameAnimation : + public GkGameEntity +{ +public: + GkAnimatedTexture *animatedTexture; + + int x, y, width, height; + bool visible, active, loop; + float framesPerSecond, currentFrame; + + bool flipX, flipY; + + + GkGameAnimation::GkGameAnimation(GkAnimatedTexture *animatedTexture = 0, int x = 0, int y = 0, bool active = true, bool loop = true, bool visible = true, bool flipX = false, bool flipY = false, float framesPerSecond = 0.0f, int width = 0, int height = 0); + GkGameAnimation::~GkGameAnimation(void); + + void GkGameAnimation::SetAnimatedTexture(GkAnimatedTexture *animatedTexture = 0, float framesPerSecond = 0.0f); + virtual void GkGameAnimation::Process(GkGame *game); + virtual void GkGameAnimation::Draw(GkGame *game); + bool GkGameAnimation::GetBoundaries(int *x1, int *y1, int *x2, int*y2); + void ResetAnimation(bool start = true); + void EndAnimation(); +}; + diff --git a/COM380/Project5/GambleKit/Engine/Game/Entities/GkGameButton.cpp b/COM380/Project5/GambleKit/Engine/Game/Entities/GkGameButton.cpp new file mode 100644 index 0000000..50abcb8 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/Entities/GkGameButton.cpp @@ -0,0 +1,176 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkGameButton.h" + +GkGameButton::GkGameButton(GkGameEntity *defaultFace, GkGameEntity *selectedFace, GkGameEntity *disabledFace, bool autoEnable, int x, int y, int width, int height) + : GkGameEntity() +{ + this->defaultFace = defaultFace; + this->selectedFace = selectedFace; + this->disabledFace = disabledFace; + + this->x = x; + this->y = y; + + if ((width == 0) && (height == 0)) + { + if (defaultFace != 0) + { + int x1, y1, x2, y2; + if (defaultFace->GetBoundaries(&x1, &y1, &x2, &y2)) + { + this->width = x2 - x1; + this->height = y2 - y1; + } + } + } + else + { + this->width = width; + this->height = height; + } + + this->visible = true; + this->clicked = false; + this->down = false; + this->enabled = true; + this->autoEnable = autoEnable; + this->pushed = false; +} + + +GkGameButton::~GkGameButton(void) +{ + if (this->defaultFace != 0) + delete this->defaultFace; + + if (this->selectedFace != 0) + delete this->selectedFace; + + if (this->disabledFace != 0) + delete this->disabledFace; +} + + +void GkGameButton::Down() +{ + if (!this->IsActive()) + return; + + this->pushed = true; + this->down = true; +} + +void GkGameButton::Up(bool click) +{ + if (!this->IsActive()) + return; + + this->pushed = false; + this->clicked = click; +} + +void GkGameButton::MouseDown(int x, int y) +{ + if (this->IsMouseOver(x, y)) + this->Down(); +} + +void GkGameButton::MouseUp(int x, int y) +{ + this->Up(this->pushed && this->IsMouseOver(x, y)); +} + +bool GkGameButton::WasDown() +{ + bool result = this->down; + + this->clicked = false; + this->down = false; + this->read = true; + + return result; +} + +bool GkGameButton::IsClicked() +{ + bool result = this->clicked; + + this->clicked = false; + this->down = false; + this->read = true; + + return result; +} + +bool GkGameButton::IsActive() +{ + return this->enabled && this->visible; +} + +GkGameEntity* GkGameButton::GetCurrentFace() +{ + if (this->enabled) + { + if (this->pushed) + return this->selectedFace != 0 ? this->selectedFace : this->defaultFace; + else + return this->defaultFace; + } + else + { + return this->disabledFace != 0 ? this->disabledFace : this->defaultFace; + } +} + +bool GkGameButton::IsMouseOver(int x, int y) +{ + if (this->defaultFace != 0) + { + // if a defaultFace is given, check a region, relative to it + int x1, y1, x2, y2; + if (defaultFace->GetBoundaries(&x1, &y1, &x2, &y2)) + return (x > x1 + this->x) && (x < x1 + this->x + this->width) && (y > y1 + this->y) && (y < y1 + this->y + this->height); + } + else + { + // if defaultFace is not given, i.e. the button has no visible part, check its region without relation + return (x > this->x) && (x < this->x + this->width) && (y > this->y) && (y < this->y + this->height); + } + + return false; +} + +void GkGameButton::Process(GkGame *game) +{ + if (this->autoEnable) + { + this->enabled = this->read; + this->read = false; + } + + GkGameEntity *face = this->GetCurrentFace(); + if (face != 0) + face->Process(game); +} + +void GkGameButton::Draw(GkGame *game) +{ + if (!visible) + return; + + GkGameEntity *currentFace = this->GetCurrentFace(); + + if (currentFace != 0) + currentFace->Draw(game); +} diff --git a/COM380/Project5/GambleKit/Engine/Game/Entities/GkGameButton.h b/COM380/Project5/GambleKit/Engine/Game/Entities/GkGameButton.h new file mode 100644 index 0000000..6d9ed06 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/Entities/GkGameButton.h @@ -0,0 +1,33 @@ +#pragma once + +#include "..\..\GkDefinitions.h" + +#include "..\GkGameEntity.h" + +class GKDLLCLASS GkGameButton : + public GkGameEntity +{ +public: + GkGameEntity *defaultFace, *selectedFace, *disabledFace; + int x, y, width, height; + + bool visible, enabled, autoEnable, pushed; + bool clicked, down, read; + + GkGameButton::GkGameButton(GkGameEntity *defaultFace, GkGameEntity *selectedFace = 0, GkGameEntity *disabledFace = 0, bool autoEnable = true, int x = 0, int y = 0, int width = 0, int heght = 0); + virtual GkGameButton::~GkGameButton(void); + + virtual void GkGameButton::Down(); + virtual void GkGameButton::Up(bool click); + virtual void GkGameButton::MouseDown(int x, int y); + virtual void GkGameButton::MouseUp(int x, int y); + virtual GkGameEntity* GkGameButton::GetCurrentFace(); + + bool GkGameButton::WasDown(); + bool GkGameButton::IsClicked(); + bool GkGameButton::IsActive(); + bool GkGameButton::IsMouseOver(int x, int y); + void GkGameButton::Process(GkGame *game); + void GkGameButton::Draw(GkGame *game); +}; + diff --git a/COM380/Project5/GambleKit/Engine/Game/Entities/GkGameReels.cpp b/COM380/Project5/GambleKit/Engine/Game/Entities/GkGameReels.cpp new file mode 100644 index 0000000..38a1df6 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/Entities/GkGameReels.cpp @@ -0,0 +1,516 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +//#include + +// Consider reels options: +// 1. GkGameReel is a class, a fully visual GkGameEntity +// GkGameReels is a collection of GkGameReel objects and manager for lines, winnings, sequential starting/stopping a reel, etc. +// Pros. GkGameReels is lighest, GkGameReel is a fully useful GkGameEntity +// Cons. Many settings, such as the "items" collection of AnimatedTextures, the "reelMap" and etc. must reoccur in all GkGameReel objects and the GkGameReels object, Changing a setting in GkGameReels will not "automatically" take effect until it is changed in all GkGameReel objects also +// 2. GkGameReel is a class, and is abstract in a sense that it provides only the mechanics of a reel via a spinning position +// GkGameReels is a collection of GkGameReel objects and aside from all the other things, also does the drawing of the reels +// Pros. GkGameReels is relatively light, GkGameReel functionality is separated in its own class +// Cons. GkGameReel is not useful unless used with GkGameReels. GkGameReels holds relatively little (maybe close to irrelevant for a whole class) logic and value +// 3. GkGameReels has each reel internal and has methods processing a reel. All the logic is inside that class. +// Pros. No GkGameReel class, no need for different objects to share or have the same information (for settings) +// Cons. GkGameReels is more heavily loaded with code logic. Does not quite correspond to the architecture model so far. + +#include "GkGameReels.h" + +#include "..\..\OSSpecific\GkOSUtils.h" +#include "..\..\Utils\GkMaths.h" + +#include "..\GkGame.h" +#include "..\..\Utils\GkMaths.h" + + +GkGameReels::GkGameReels(int numReels, int numReelItems, int numSymbols, int width, int height) + : GkBaseReelMap(numReels, numReelItems) +{ + this->width = width; + this->height = height; + this->numSymbols = numSymbols; + this->state = Idle; + this->stateOld = Idle; + this->stateChange = Undefined; + + this->numReelAnimations = this->numReelItems + 2; + + this->reels = new GkGameReelInfo[numReels]; + for (int i = 0; i < numReels; i++) + { + this->reels[i].state = Idle; + this->reels[i].stateOld = Idle; + this->reels[i].stateChange = Undefined; + this->reels[i].position = 0.0f; + + this->reels[i].animations = new GkGameAnimation*[this->numReelAnimations]; + + for (int itemIndex = 0; itemIndex < this->numReelAnimations; itemIndex++) + { + this->reels[i].animations[itemIndex] = new GkGameAnimation(); + this->reels[i].animations[itemIndex]->visible = true; + this->reels[i].animations[itemIndex]->active = false; + this->reels[i].animations[itemIndex]->loop = false; + } + } + + this->symbols = new GkAnimatedTexture*[numSymbols]; + + this->speed = 20.0f; + this->acceleration = 40.0f; + this->stoppingTime = 1.0f; + + this->preStartOffset = 0.15f; + this->preStartSpeed = 2.0f; + this->postStopOffset = 0.15f; + this->postStopSpeed = 2.0f; + + this->itemGenerator = 0; +} + + +GkGameReels::~GkGameReels(void) +{ + for (int i = 0; i < numReels; i++) + { + for (int j = 0; j < this->numReelAnimations; j++) + { + delete[] this->reels[i].animations[j]; + } + + delete[] this->reels[i].animations; + } + + delete[] this->symbols; + delete[] this->reels; +} + +void GkGameReels::SetItemGenerator(GkGameReelsCombinationGenerator *itemGenerator) +{ + this->itemGenerator = itemGenerator; +} + +GkAnimatedTexture *GkGameReels::Reel_GetNewSymbol(int reelIndex) +{ + if (this->itemGenerator != 0) + { + return this->symbols[this->itemGenerator->reels[reelIndex].model->GetSymbol()]; + } + else + return this->symbols[GkMaths::Random(this->numSymbols)]; +} + +void GkGameReels::Reel_ProcessPosition(int reelIndex, GkGame *game) +{ + GkGameReelInfo *reel = &this->reels[reelIndex]; + + // Handle position ranging and shifting of symbols when position hops over 1.0 + reel->position += game->timer->tickTime * reel->speed; + if (reel->position >= 1.0f) + { + int numShifts = (int)reel->position; + + reel->position -= numShifts; + + int reelShifts = GkMaths::Min(numShifts, this->numReelItems - reel->reelMapSetIndex + 1); + + for (int shiftIndex = 0; shiftIndex < reelShifts; shiftIndex++) + { + GkGameAnimation *rotAnimation = reel->animations[this->numReelAnimations - 1]; + for (int i = 0; i < this->numReelAnimations; i++) + { + GkGameAnimation *t = reel->animations[i]; + reel->animations[i] = rotAnimation; + rotAnimation = t; + } + + if (reel->state == Stopping) + { + if (reel->reelMapSetIndex < this->numReelItems) + reel->animations[0]->SetAnimatedTexture(this->symbols[this->GetSymbol(reelIndex, this->numReelItems - 1 - reel->reelMapSetIndex)]); + else + { + reel->animations[0]->SetAnimatedTexture(this->Reel_GetNewSymbol(reelIndex)); + } + + reel->reelMapSetIndex++; + } + else + { + reel->animations[0]->SetAnimatedTexture(this->Reel_GetNewSymbol(reelIndex)); + } + } + } + + for (int i = 0; i < this->numReelAnimations; i++) + { + reel->animations[i]->Process(game); + } +} + +void GkGameReels::Reel_ProcessState(int reelIndex, GkGameTimer *timer) +{ + GkGameReelInfo *reel = &this->reels[reelIndex]; + + switch (reel->state) + { + case Idle: + { + reel->speed = 0.0f; + reel->position = 0.0f; + + // User interaction expected + break; + } + + case PreStarting: + { + reel->speed = 0.0f; + reel->position -= timer->tickTime * this->preStartSpeed; + + if (reel->position < -this->preStartOffset) + { + reel->position = -this->preStartOffset; + reel->state = Starting; + } + break; + } + + case Starting: + { + reel->speed += this->acceleration * timer->tickTime; + + if (reel->speed >= this->speed) + { + reel->speed = this->speed; + reel->state = Spinning; + } + break; + } + + case Spinning: + { + // User interaction expected + break; + } + + case Stopping: + { + if ((reel->reelMapSetIndex > this->numReelItems) && (reel->position >= this->postStopOffset)) + { + reel->position = this->postStopOffset; + + reel->state = PostStopping; + } + break; + } + + case PostStopping: + { + reel->speed = 0.0f; + reel->position -= timer->tickTime * this->postStopSpeed; + + if (reel->position < 0.0f) + { + reel->position = 0.0f; + reel->state = Idle; + } + break; + } + } + + reel->stateChange = reel->state != reel->stateOld ? reel->state : Undefined; + reel->stateOld = reel->state; +} + +bool GkGameReels::Reel_Start(int reelIndex) +{ + GkGameReelInfo *reel = &this->reels[reelIndex]; + + if (reel->state == Idle) + { + reel->state = PreStarting; + reel->reelMapSetIndex = 0; + return true; + } + + return false; +} + +bool GkGameReels::Reel_Stop(int reelIndex) +{ + GkGameReelInfo *reel = &this->reels[reelIndex]; + + if (reel->state == Spinning) + { + reel->state = Stopping; + reel->reelMapSetIndex = 0; + return true; + } + + return false; +} + +// Gives a summary state. If all reels have the same state, returns that state, otherwise returns Undefined. If a reel has a Blocked state, it's ignored, unless all reels have Blocked state, in which case Blocked is returned. +GameReelState GkGameReels::GetGeneralState() +{ + GameReelState result = Undefined; + + int reelIndex = 0; + while (reelIndex < this->numReels) + { + GameReelState reelState = this->reels[reelIndex].state; + + if (result == Undefined) + { + result = reelState; + } + else if (result == Blocked) + { + if (reelState != Blocked) + { + result = reelState; + } + } + else + { + if ((result != reelState) && (reelState != Blocked)) + { + return Undefined; + } + } + + reelIndex++; + } + + return result; +} + +void GkGameReels::ProcessState(GkGameTimer *timer) +{ + GameReelState generalState = this->GetGeneralState(); + + // Ensure each state is followed by the next for at least one frame + switch (this->state) + { + case Idle: + { + if ((this->state != generalState) && (generalState != Undefined)) + this->state = PreStarting; + + break; + } + + case PreStarting: + { + if ((this->state != generalState) && (generalState != Undefined)) + this->state = Starting; + + break; + } + + case Starting: + { + if ((this->state != generalState) && (generalState != Undefined)) + this->state = Spinning; + + break; + } + + case Spinning: + { + if ((this->state != generalState) && (generalState != Undefined)) + this->state = Stopping; + + break; + } + + case Stopping: + { + float fullStopTime = GkMaths::Max(this->stoppingTime - this->numReelItems / this->speed - this->postStopOffset / this->postStopSpeed, 0.0f); + float timeSinceStopInitiated = GkGameTimer::GetSampleTime(this->stopInitiatedTime); + int reelsStopped = fullStopTime != 0 ? GkMaths::Min((int)(1 + (this->numReels - 1) * timeSinceStopInitiated / fullStopTime), this->numReels) : this->numReels; + + int stopCount = 0; + for (int i = 0; i < this->numReels; i++) + { + this->Reel_Stop(i); + + if ((this->reels[i].state != Blocked) && (this->reels[i].state != Spinning)) + stopCount++; + + if (stopCount >= reelsStopped) + break; + } + + if (reelsStopped == this->numReels) + this->state = PostStopping; + + break; + } + + case PostStopping: + { + if ((generalState == Idle) | (generalState == Blocked)) + this->state = Idle; + //if ((this->state != generalState) && (generalState != Undefined)) + // this->state = Idle; + + break; + } + + default: + { + this->state = generalState; + } + } + + this->stateChange = this->state != this->stateOld ? this->state : Undefined; + this->stateOld = this->state; +} + +void GkGameReels::Process(GkGame *game) +{ + for (int reelIndex = 0; reelIndex < this->numReels; reelIndex++) + { + this->Reel_ProcessPosition(reelIndex, game); + + this->Reel_ProcessState(reelIndex, game->timer); + } + + this->ProcessState(game->timer); +} + +void GkGameReels::Draw(GkGame *game) +{ + int itemWidth = this->symbols[0]->frames[0]->width; + int itemHeight = this->symbols[0]->frames[0]->height; + + float horizontalDistance = this->numReels == 1 ? itemWidth : itemWidth + (this->width - this->numReels * itemWidth) / ((float)this->numReels - 1.0f); + + for (int reelIndex = 0; reelIndex < this->numReels; reelIndex++) + { + int x = (int)(this->x + reelIndex * horizontalDistance); + + for (int itemIndex = 0; itemIndex < this->numReelAnimations; itemIndex++) + { + int y = (int)(this->y + (this->height - this->numReelAnimations * itemHeight) / 2 + this->reels[reelIndex].position * itemHeight + itemIndex * itemHeight); + + GkGameAnimation *reelItemAnimation = this->reels[reelIndex].animations[itemIndex]; + + game->graphicsDevice->DrawClipped(x, y, this->x, this->y, this->width, this->height, reelItemAnimation->animatedTexture->frames[(int)reelItemAnimation->currentFrame]); + } + } +} + +void GkGameReels::ApplyReelMap(const int *fullItemMap) +{ + if (fullItemMap != 0) + { + this->SetItems(fullItemMap); + } + + + for (int reelIndex = 0; reelIndex < this->numReels; reelIndex++) + { + this->reels[reelIndex].animations[0]->SetAnimatedTexture(this->symbols[GkMaths::Random(this->numSymbols)]); + this->reels[reelIndex].animations[this->numReelAnimations - 1]->SetAnimatedTexture(this->symbols[GkMaths::Random(this->numSymbols)]); + } + + for (int reelIndex = 0; reelIndex < this->numReels; reelIndex++) + { + for (int itemIndex = 0; itemIndex < this->numReelItems; itemIndex++) + { + this->reels[reelIndex].animations[itemIndex + 1]->SetAnimatedTexture(this->symbols[this->GetSymbol(reelIndex, itemIndex)]); + } + } +} + +bool GkGameReels::Start() +{ + this->reelingTime = GkGameTimer::GetSample(); + + bool result = true; + if (this->state == Idle) + { + for (int i = 0; i < this->numReels; i++) + result &= this->Reel_Start(i); + + return result; + } + + return false; +} + +bool GkGameReels::Stop() +{ + if (this->state = Spinning) + { + this->stopInitiatedTime = GkGameTimer::GetSample(); + + this->state = Stopping; + return true; + } + + return false; + + + + bool result = true; + if (this->state == Spinning) + { + for (int i = 0; i < this->numReels; i++) + result &= this->Reel_Stop(i); + + return result; + } + + return false; +} + +bool GkGameReels::ItemsAnimationsPlaying() +{ + for (int reelIndex = 0; reelIndex < this->numReels; reelIndex++) + { + for (int itemIndex = 0; itemIndex < this->numReelItems; itemIndex++) + { + if (this->reels[reelIndex].animations[itemIndex + 1]->active) + return true; + } + } + + return false; +} + +void GkGameReels::StopItemsAnimations() +{ + for (int reelIndex = 0; reelIndex < this->numReels; reelIndex++) + { + for (int itemIndex = 0; itemIndex < this->numReelItems; itemIndex++) + { + this->reels[reelIndex].animations[itemIndex + 1]->active = false; + this->reels[reelIndex].animations[itemIndex + 1]->currentFrame = 0.0f; + } + } +} + +float GkGameReels::GetReelingTime() +{ + return GkGameTimer::GetSampleTime(this->reelingTime); +} + +float GkGameReels::GetIdleTime() +{ + return GkGameTimer::GetSampleTime(this->idleTime); +} diff --git a/COM380/Project5/GambleKit/Engine/Game/Entities/GkGameReels.h b/COM380/Project5/GambleKit/Engine/Game/Entities/GkGameReels.h new file mode 100644 index 0000000..bf020b0 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/Entities/GkGameReels.h @@ -0,0 +1,86 @@ +#pragma once + +#include "..\..\GkDefinitions.h" + +#include "..\GkGameEntity.h" +#include "GkGameAnimation.h" +#include "..\..\Base\GkBaseReelMap.h" +#include "..\GkGameReelsCombinationGenerator.h" + +class GKDLLCLASS GkGameTimer; + +enum GameReelState +{ + Idle = 0, + PreStarting = 1, + Starting = 2, + Spinning = 3, + Stopping = 4, + PostStopping = 5, + Blocked = 6, + Undefined = 7 +}; + +struct GkGameReelInfo +{ + GameReelState state, stateOld, stateChange; + float position, speed; + int reelMapSetIndex; + + GkGameAnimation **animations; +}; + +class GKDLLCLASS GkGameReels : + public GkGameEntity, + public GkBaseReelMap +{ +private: + GameReelState stateOld; + long long stopInitiatedTime, reelingTime, idleTime; + + // GkGameReel related methods + GkAnimatedTexture *GkGameReels::Reel_GetNewSymbol(int reelIndex); + void GkGameReels::Reel_ProcessState(int reelIndex, GkGameTimer *gameTimer); + void GkGameReels::Reel_ProcessPosition(int reelIndex, GkGame *game); + bool GkGameReels::Reel_Start(int reelIndex); + bool GkGameReels::Reel_Stop(int reelIndex); + + void GkGameReels::ProcessState(GkGameTimer *gameTimer); + +public: + GkGameReelInfo *reels; + + + GameReelState state, // GkGameReels acquires certain state when all of its reels reach that state + stateChange; // Gives the state that reels have just obtained in the last frame + + int numSymbols, numReelAnimations; + + int x, y, width, height; + + float speed, // items per second + acceleration, // items per second^2 + stoppingTime, // seconds + preStartOffset, postStopOffset, // number of items + preStartSpeed, postStopSpeed; // items per second + + GkAnimatedTexture **symbols; + + GkGameReelsCombinationGenerator *itemGenerator; + + GkGameReels::GkGameReels(int numReels, int numReelItems, int numSymbols, int width, int height); + GkGameReels::~GkGameReels(void); + + void GkGameReels::SetItemGenerator(GkGameReelsCombinationGenerator *itemGenerator); + void GkGameReels::Process(GkGame *game); + void GkGameReels::Draw(GkGame *game); + void GkGameReels::ApplyReelMap(const int *fullItemMap = 0); + bool GkGameReels::Start(); + bool GkGameReels::Stop(); + bool GkGameReels::ItemsAnimationsPlaying(); + void GkGameReels::StopItemsAnimations(); + float GkGameReels::GetReelingTime(); + float GkGameReels::GetIdleTime(); + GameReelState GkGameReels::GetGeneralState(); +}; + diff --git a/COM380/Project5/GambleKit/Engine/Game/Entities/GkGameStreamingAnimation.cpp b/COM380/Project5/GambleKit/Engine/Game/Entities/GkGameStreamingAnimation.cpp new file mode 100644 index 0000000..b4cf665 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/Entities/GkGameStreamingAnimation.cpp @@ -0,0 +1,145 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkGameStreamingAnimation.h" + +#include "..\..\Utils\GkStrings.h" +#include "..\..\OSSpecific\GkFileSystem.h" + +GkGameStreamingAnimation::GkGameStreamingAnimation(const wchar_t *fileName, const wchar_t *loadExpression, int x, int y, bool freeAtEnd, float framesPerSecond, int numFrames) +{ + this->x = x; + this->y = y; + this->visible = false; + this->active = true; + this->loop = false; + this->freeAtEnd = freeAtEnd; + this->currentFrame = framesPerSecond >= 0.0f ? 0.0f : (float)(numFrames - 1); + this->framesPerSecond = framesPerSecond; + this->numFrames = numFrames; + + this->loadExpression = GkStrings::Copy(loadExpression); + this->fileName = GkStrings::Copy(fileName); + this->texture = 0; +} + + +GkGameStreamingAnimation::~GkGameStreamingAnimation(void) +{ + this->Free(); + + GkStrings::Dispose(&this->fileName); + GkStrings::Dispose(&this->loadExpression); +} + +void GkGameStreamingAnimation::SetSource(const wchar_t *fileName, const wchar_t *loadExpression, float framesPerSecond, int numFrames) +{ + this->Free(); + + this->active = true; + this->loop = false; + this->currentFrame = framesPerSecond >= 0.0f ? 0.0f : (float)(numFrames - 1); + this->framesPerSecond = framesPerSecond; + this->numFrames = numFrames; + + GkStrings::Dispose(&this->fileName); + GkStrings::Dispose(&this->loadExpression); + this->loadExpression = GkStrings::Copy(loadExpression); + this->fileName = GkStrings::Copy(fileName); +} + +void GkGameStreamingAnimation::Free() +{ + if (this->texture != 0) + { + delete this->texture; + this->texture = 0; + } +} + +bool GkGameStreamingAnimation::Load(int index) +{ + void *data; + unsigned int dataSize; + + if (GkFileSystem::LoadFile(GkStrings::Format(this->loadExpression, GkStrings::IntToString(index, 10, 5).c_str()).c_str(), &data, &dataSize)) + { + this->Free(); + + GkImage image; + image.LoadFromMemory(data, dataSize); + + this->texture = new GkTexture(); + this->texture->LoadFromImage(&image); + + delete data; + + return true; + } + + return false; +} + +void GkGameStreamingAnimation::Start() +{ + this->currentFrame = framesPerSecond >= 0.0f ? 0.0f : (float)(numFrames - 1); + this->lastRenderedFrame = (int)this->currentFrame; + this->visible = this->Load(this->lastRenderedFrame); + this->active = this->visible; +} + +void GkGameStreamingAnimation::Process(GkGame *game) +{ + if (!(this->active && this->visible)) + return; + + this->currentFrame += this->framesPerSecond * game->timer->tickTime; + if ((this->lastRenderedFrame != (int)this->currentFrame) || (this->texture == 0)) + { + bool terminate = false; + if (!this->Load((int)this->currentFrame)) + { + if (this->loop) + { + this->currentFrame = this->framesPerSecond >= 0 ? 0.0f : (float)(this->numFrames - 1); + if (!this->Load((int)this->currentFrame)) + { + terminate = true; + } + } + else + { + terminate = true; + } + } + + if (terminate) + { + this->currentFrame = (float)(this->lastRenderedFrame); + this->active = false; + this->visible = (!this->freeAtEnd) && (this->texture != 0); + } + } + + this->lastRenderedFrame = (int)this->currentFrame; +} + +void GkGameStreamingAnimation::Draw(GkGame *game) +{ + if (!this->visible) + { + this->Free(); + return; + } + + game->graphicsDevice->Draw(this->x, this->y, this->texture); +} diff --git a/COM380/Project5/GambleKit/Engine/Game/Entities/GkGameStreamingAnimation.h b/COM380/Project5/GambleKit/Engine/Game/Entities/GkGameStreamingAnimation.h new file mode 100644 index 0000000..80df802 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/Entities/GkGameStreamingAnimation.h @@ -0,0 +1,32 @@ +#pragma once + +#include "..\..\GkDefinitions.h" + +#include "..\GkGame.h" +#include "..\Entities\GkGameAnimation.h" +#include "..\..\Graphics\GkTexture.h" + +class GKDLLCLASS GkGameStreamingAnimation : + public GkGameAnimation +{ +public: + GkTexture *texture; + + wchar_t *fileName, *loadExpression; + + bool freeAtEnd; + int lastRenderedFrame; + int numFrames; // required only if animation is backwards, i.e. if framesPerSecond is negative + + // Because the animation is streaming and the number of frames is practically unknown, if it is played backwards, i.e. framesPerSecond is negative, then numFrames must be provided + GkGameStreamingAnimation::GkGameStreamingAnimation(const wchar_t *fileName, const wchar_t *loadExpression, int x = 0, int y = 0, bool freeAtEnd = true, float framesPerSecond = 25.0f, int numFrames = 0); + GkGameStreamingAnimation::~GkGameStreamingAnimation(void); + + void GkGameStreamingAnimation::SetSource(const wchar_t *fileName, const wchar_t *loadExpression, float framesPerSecond = 25.0f, int numFrames = 0); + void GkGameStreamingAnimation::Free(); + bool GkGameStreamingAnimation::Load(int index); + void GkGameStreamingAnimation::Start(); + void GkGameStreamingAnimation::Process(GkGame *game); + void GkGameStreamingAnimation::Draw(GkGame *game); +}; + diff --git a/COM380/Project5/GambleKit/Engine/Game/Entities/GkGameText.cpp b/COM380/Project5/GambleKit/Engine/Game/Entities/GkGameText.cpp new file mode 100644 index 0000000..74988fb --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/Entities/GkGameText.cpp @@ -0,0 +1,148 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkGameText.h" + +#include "..\GkGame.h" +#include "..\..\Utils\GkStrings.h" + +GkGameText::GkGameText(GkAnimatedFont *animatedFont, int x, int y, int characterSpacing, int textAlignment, int maxWidth, float framesPerSecond) + : GkGameEntity() +{ + this->animatedFont = animatedFont; + + this->x = x; + this->y = y; + this->characterSpacing = characterSpacing; + this->maxWidth = maxWidth; + this->textAlignment = textAlignment; + this->visible = animatedFont != NULL; + this->active = animatedFont != NULL; + this->loop = animatedFont != NULL; + + this->framesPerSecond = framesPerSecond != 0.0f ? framesPerSecond : animatedFont != 0 ? animatedFont->framesPerSecond : 0.0f; + this->currentFrame = 0.0f; + + this->text = 0; + this->textTextureIndices = 0; + this->textLength = 0; +} + + +GkGameText::~GkGameText(void) +{ + if (this->text != 0) + delete[] this->text; + + if (this->textTextureIndices != 0) + delete[] this->textTextureIndices; +} + +bool GkGameText::SetText(const wchar_t *text) +{ + if ((this->text != 0) && (GkStrings::Compare(this->text, text) == 0)) + return false; + + if (this->text != 0) + delete[] this->text; + + if (this->textTextureIndices != 0) + delete[] this->textTextureIndices; + + this->text = GkStrings::Copy(text); + this->textLength = GkStrings::GetLength(this->text); + this->textTextureIndices = new int[this->textLength]; + + this->textWidth = 0; + for (int i = 0; i < this->textLength; i++) + { + this->textTextureIndices[i] = GkStrings::SubChar(this->animatedFont->charMap, this->text[i]); + + if (this->textTextureIndices[i] != -1) + { + this->textWidth += this->animatedFont->letterTextures[this->textTextureIndices[i]]->frames[0]->width + this->characterSpacing; + } + } + + this->textWidth -= this->characterSpacing; + + return true; +} + +void GkGameText::Process(GkGame *game) +{ + if (!(this->active && this->visible)) + return; + + this->currentFrame += this->framesPerSecond * game->timer->tickTime; + if (this->currentFrame > this->animatedFont->letterTextures[0]->numFrames) + { + if (this->loop) + { + int intFrame = (int)this->currentFrame; + float fracFrame = this->currentFrame - intFrame; + this->currentFrame = intFrame % this->animatedFont->letterTextures[0]->numFrames + fracFrame; + } + else + { + this->currentFrame = (float)(this->animatedFont->letterTextures[0]->numFrames - 1); + this->active = false; + } + } +} + +void GkGameText::Draw(GkGame *game) +{ + if (!this->visible) + return; + + if ((this->maxWidth == 0) || (this->textWidth <= this->maxWidth)) + { + int x = this->textAlignment == GkGameText::GameTextAlignment_Right ? this->x : this->textAlignment == GkGameText::GameTextAlignment_Center ? this->x - this->textWidth / 2 : this->x - this->textWidth; + + for (int i = 0; i < this->textLength; i++) + { + int letterTextureIndex = this->textTextureIndices[i]; + + if (letterTextureIndex != -1) + { + GkTexture *letterTexture = this->animatedFont->letterTextures[letterTextureIndex]->frames[(int)this->currentFrame]; + + game->graphicsDevice->Draw(x, this->y, letterTexture); + + x += letterTexture->width + this->characterSpacing; + } + } + } + else + { + float scalingFactor = (float)this->maxWidth / (float)this->textWidth; + + float x = this->textAlignment == GkGameText::GameTextAlignment_Right ? this->x : this->textAlignment == GkGameText::GameTextAlignment_Center ? this->x - (float)(scalingFactor * (float)this->textWidth / 2.0f) : this->x - (float)(scalingFactor * (float)this->textWidth); + int y = this->y + (int)(((1.0f - scalingFactor) * (float)this->animatedFont->letterTextures[0]->frames[0]->height) / 2.0f); + + for (int i = 0; i < this->textLength; i++) + { + int letterTextureIndex = this->textTextureIndices[i]; + + if (letterTextureIndex != -1) + { + GkTexture *letterTexture = this->animatedFont->letterTextures[letterTextureIndex]->frames[(int)this->currentFrame]; + + game->graphicsDevice->Draw((int)x, y, (int)(letterTexture->width * scalingFactor), (int)(letterTexture->height * scalingFactor), 0, 0, letterTexture->width, letterTexture->height, letterTexture); + + x += scalingFactor * (letterTexture->width + this->characterSpacing); + } + } + } +} + diff --git a/COM380/Project5/GambleKit/Engine/Game/Entities/GkGameText.h b/COM380/Project5/GambleKit/Engine/Game/Entities/GkGameText.h new file mode 100644 index 0000000..3d35e72 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/Entities/GkGameText.h @@ -0,0 +1,36 @@ +#pragma once + +#include "..\..\GkDefinitions.h" + +#include "..\GkGameEntity.h" +#include "..\..\Graphics\GkAnimatedFont.h" + +class GKDLLCLASS GkGameText : + public GkGameEntity +{ +public: + static const int GameTextAlignment_Right = 0, + GameTextAlignment_Center = 1, + GameTextAlignment_Left = 2; + + GkAnimatedFont *animatedFont; + wchar_t *text; + int textLength, textWidth; + int *textTextureIndices; + + int x, y; + bool visible, active, loop; + float framesPerSecond, currentFrame; + int textAlignment; + int characterSpacing; + int maxWidth; + + + GkGameText::GkGameText(GkAnimatedFont *animatedFont, int x = 0, int y = 0, int characterSpacing = 0, int textAlignment = GameTextAlignment_Right, int maxWidth = 0, float framesPerSecond = 0.0f); + GkGameText::~GkGameText(void); + + bool GkGameText::SetText(const wchar_t *text); + void GkGameText::Process(GkGame *game); + void GkGameText::Draw(GkGame *game); +}; + diff --git a/COM380/Project5/GambleKit/Engine/Game/Entities/GkGameWinningCounter.cpp b/COM380/Project5/GambleKit/Engine/Game/Entities/GkGameWinningCounter.cpp new file mode 100644 index 0000000..4356e1a --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/Entities/GkGameWinningCounter.cpp @@ -0,0 +1,85 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkGameWinningCounter.h" + +#include "..\GkGame.h" + +GkGameWinningCounter::GkGameWinningCounter(int *actualValue, float minSpeed, float maxTime) + : GkGameEntity() + +{ + this->actualValue = actualValue; + this->minSpeed = minSpeed; + this->maxTime = maxTime; + + this->SetValue((float)*this->actualValue, 0.0f); +} + + +GkGameWinningCounter::~GkGameWinningCounter(void) +{ +} + +void GkGameWinningCounter::SetValue(float value, float maxTime) +{ + float delta = value - this->displayValue; + if (maxTime == -1.0f) + maxTime = this->maxTime; + + if (maxTime == 0.0f) + { + this->displayValue = value; + } + else + { + float minSpeed = delta / maxTime; + this->speed = this->minSpeed > minSpeed ? this->minSpeed : minSpeed; + } + + this->oldValue = value; +} + +void GkGameWinningCounter::Reach(float maxTime) +{ + this->SetValue((float)*this->actualValue, maxTime); +} + +bool GkGameWinningCounter::IsCounting() +{ + return this->intDisplayValue != *this->actualValue; +} + +void GkGameWinningCounter::Process(GkGame *game) +{ + float value = (float)*this->actualValue; + + if (value != this->oldValue) + this->SetValue(value, this->maxTime); + + this->displayValue += this->speed * game->timer->tickTime; + + if (this->speed > 0.0f) + { + if (this->displayValue > value) + this->displayValue = value; + } + else + { + if (this->displayValue < value) + this->displayValue = value; + } + + this->intDisplayValue = (int)this->displayValue; + + GkGameEntity::Process(game); +} diff --git a/COM380/Project5/GambleKit/Engine/Game/Entities/GkGameWinningCounter.h b/COM380/Project5/GambleKit/Engine/Game/Entities/GkGameWinningCounter.h new file mode 100644 index 0000000..e3d2570 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/Entities/GkGameWinningCounter.h @@ -0,0 +1,32 @@ +#pragma once + +#include "..\..\GkDefinitions.h" + +#include "..\GkGameEntity.h" + +class GKDLLCLASS GkGameWinningCounter : + public GkGameEntity +{ +private: + float oldValue; + + void SetValue(float value, float maxTime); + +public: + int *actualValue; + + float minSpeed, maxTime, + displayValue, + speed; + + int intDisplayValue; + + GkGameWinningCounter(int *actualValue, float minSpeed = 500.0f, float maxTime = 1.0f); + ~GkGameWinningCounter(void); + + void Reach(float maxTime = 0.0f); + bool IsCounting(); + + void Process(GkGame *game); +}; + diff --git a/COM380/Project5/GambleKit/Engine/Game/GkGame.cpp b/COM380/Project5/GambleKit/Engine/Game/GkGame.cpp new file mode 100644 index 0000000..79e4ce7 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/GkGame.cpp @@ -0,0 +1,304 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkGame.h" + +#include "..\OSSpecific\GkFileSystem.h" +#include "..\Utils\GkStrings.h" + + +ResourcePoolEntry::ResourcePoolEntry(GkBase *resource, const wchar_t *id) +{ + this->resource = resource; + + if (id == NULL) + { + this->id = NULL; + } + else + { + int l = wcslen(id); + this->id = new wchar_t[l + 1]; + wcscpy_s(this->id, l + 1, id); + } +} + +GkGame::GkGame(GkGraphicsDevice *graphicsDevice, GkSoundDevice *soundDevice) +{ + this->graphicsDevice = graphicsDevice; + this->soundDevice = soundDevice; + + this->currentGamePage = 0; + + this->timer = new GkGameTimer(); +} + + +GkGame::~GkGame(void) +{ + int numPages = this->gamePages.size(); + for (int i = 0; i < numPages; i++) + { + delete this->gamePages[i]; + } + + int numResources = this->resourcePool.size(); + for (int i = 0; i < numResources; i++) + { + delete this->resourcePool[i].resource; + + if (this->resourcePool[i].id != NULL) + { + delete this->resourcePool[i].id; + this->resourcePool[i].id = NULL; + } + } + + delete this->timer; +} + +void GkGame::SetPage(GkGamePage *page) +{ + if (this->currentGamePage != 0) + this->currentGamePage->OnHide(page); + + if (page != 0) + page->OnShow(this->currentGamePage); + + this->currentGamePage = page; +} + +GkAnimatedTexture* GkGame::AddAnimatedTexture(GkAnimatedTexture *animatedTexture, const wchar_t* id) +{ + this->resourcePool.push_back(ResourcePoolEntry(animatedTexture, id)); + return animatedTexture; +} + +void* GkGame::GetResource(const wchar_t* id) +{ + int numResources = this->resourcePool.size(); + for (int i = 0; i < numResources; i++) + { + if (wcscmp(this->resourcePool[i].id, id) == 0) + return this->resourcePool[i].resource; + } + + return NULL; +} + +bool GkGame::ReleaseResource(const wchar_t* id) +{ + int numResources = this->resourcePool.size(); + for (int i = 0; i < numResources; i++) + { + if (wcscmp(this->resourcePool[i].id, id) == 0) + { + delete this->resourcePool[i].resource; + + if (this->resourcePool[i].id != NULL) + { + delete this->resourcePool[i].id; + this->resourcePool[i].id = NULL; + } + + this->resourcePool[i] = this->resourcePool[numResources - 1]; + this->resourcePool.pop_back(); + + return true; + } + } + + return false; +} + +GkAnimatedFont* GkGame::AcquireAnimatedFontFromMultipleFiles(const wchar_t* virtualFileName, const wchar_t *charMap, int numFrames) +{ + GkAnimatedFont* result = (GkAnimatedFont*)this->GetResource(virtualFileName); + if (result != NULL) + return result; + + + result = new GkAnimatedFont(charMap, numFrames); + + void *data; + unsigned int dataSize; + + for (int i = 0; i < result->numLetters; i++) + { + if (GkFileSystem::LoadFile(GkStrings::Format(virtualFileName, GkStrings::IntToString(i, 10, 5).c_str()).c_str(), &data, &dataSize)) + { + result->LoadAnimatedLetter(i, data, dataSize); + + delete[] data; + } + } + + + this->resourcePool.push_back(ResourcePoolEntry(result, virtualFileName)); + + return result; +} + +GkAnimatedTexture* GkGame::AcquireAnimatedTexture(const wchar_t* virtualFileName, int columnFrames, int rowFrames, int numFrames, float framesPerSecond, int animatedTexture_LoadOrder) +{ + GkAnimatedTexture* result = (GkAnimatedTexture*)this->GetResource(virtualFileName); + if (result != NULL) + return result; + + void *data; + unsigned int dataSize; + + if (!GkFileSystem::LoadFile(virtualFileName, &data, &dataSize)) + return NULL; + result = new GkAnimatedTexture(data, dataSize, columnFrames, rowFrames, numFrames, framesPerSecond, animatedTexture_LoadOrder); + delete data; + + this->resourcePool.push_back(ResourcePoolEntry(result, virtualFileName)); + + return result; +} + +GkAnimatedTexture* GkGame::AcquireAnimatedTextureFromMultipleFiles(const wchar_t* virtualFileName, float framesPerSecond) +{ + GkAnimatedTexture *result = (GkAnimatedTexture*)this->GetResource(virtualFileName); + if (result != NULL) + return result; + + + std::vector frames; + + void *data; + unsigned int dataSize; + + int index = 0; + while (GkFileSystem::LoadFile(GkStrings::Format(virtualFileName, GkStrings::IntToString(index, 10, 5).c_str()).c_str(), &data, &dataSize)) + { + GkImage *frameImage = new GkImage(); + frameImage->LoadFromMemory(data, dataSize); + + GkTexture *frame = new GkTexture(); + frame->LoadFromImage(frameImage); + delete frameImage; + + frames.push_back(frame); + + index++; + + delete[] data; + } + + + int numFrames = frames.size(); + if (numFrames == 0) + return NULL; + + result = new GkAnimatedTexture(); + result->framesPerSecond = framesPerSecond; + result->numFrames = numFrames; + result->frames = new GkTexture*[numFrames]; + for (int i = 0; i < numFrames; i++) + { + result->frames[i] = frames[i]; + } + + this->resourcePool.push_back(ResourcePoolEntry(result, virtualFileName)); + + return result; +} + +GkSoundSource* GkGame::AcquireSoundSource(const wchar_t* virtualFileName) +{ + GkSoundSource* result = (GkSoundSource*)this->GetResource(virtualFileName); + if (result != NULL) + return result; + + void *data; + unsigned int dataSize; + + GkFileSystem::LoadFile(virtualFileName, &data, &dataSize); + result = new GkSoundSource(); + result->LoadFromMemory(data); + this->resourcePool.push_back(ResourcePoolEntry(result, virtualFileName)); + delete data; + + return result; +} + +GkGamePage* GkGame::AddGamePage(GkGamePage *gamePage) +{ + this->gamePages.push_back(gamePage); + + if (this->currentGamePage == NULL) + this->SetPage(gamePage); + + return gamePage; +} + +void GkGame::RemoveGamePage(GkGamePage *gamePage) +{ + int index = -1; + for (int i = 0; i < (int)this->gamePages.size(); i++) + if (this->gamePages[i] == gamePage) + { + index = i; + break; + } + + if (index == -1) + return; + + for (int i = index; i < (int)this->gamePages.size() - 1; i++) + this->gamePages[i] = this->gamePages[i + 1]; + + this->gamePages.pop_back(); +} + +void GkGame::MouseDown(int x, int y) +{ + int numEntities = this->currentGamePage->entities.size(); + for (int i = numEntities - 1; i >= 0; i--) + { + GkGameEntity *entity = this->currentGamePage->entities[i]; + if (entity->IsMouseOver(x, y)) + { + entity->MouseDown(x, y); + break; + } + } +} + +void GkGame::MouseUp(int x, int y) +{ + int numEntities = this->currentGamePage->entities.size(); + for (int i = numEntities - 1; i >= 0; i--) + { + GkGameEntity *entity = this->currentGamePage->entities[i]; + entity->MouseUp(x, y); + } +} + +void GkGame::NewFrame() +{ + this->timer->Tick(); +} + +void GkGame::Process() +{ + if (this->currentGamePage != NULL) + this->currentGamePage->Process(this); +} + +void GkGame::Render() +{ + if (this->currentGamePage != NULL) + this->currentGamePage->Render(this); +} \ No newline at end of file diff --git a/COM380/Project5/GambleKit/Engine/Game/GkGame.h b/COM380/Project5/GambleKit/Engine/Game/GkGame.h new file mode 100644 index 0000000..ae77455 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/GkGame.h @@ -0,0 +1,61 @@ +#pragma once + +#include "..\GkDefinitions.h" + +#include +#include + +#include "..\Graphics\GkGraphicsDevice.h" +#include "..\Graphics\GkAnimatedTexture.h" +#include "..\Graphics\GkAnimatedFont.h" +#include "..\Sound\GkSoundDevice.h" +#include "..\Sound\GkSoundSource.h" +#include "GkGameTimer.h" +#include "GkGamePage.h" +#include "..\Base\GkBase.h" + +using namespace std; + +class GKDLLCLASS GkGamePage; + +struct ResourcePoolEntry +{ + GkBase* resource; + wchar_t* id; + + ResourcePoolEntry::ResourcePoolEntry(GkBase *resource, const wchar_t *id); +}; + +class GKDLLCLASS GkGame +{ +public: + GkGraphicsDevice *graphicsDevice; + GkSoundDevice *soundDevice; + + GkGameTimer *timer; + + vector gamePages; + GkGamePage *currentGamePage; + + vector resourcePool; + + GkGame::GkGame(GkGraphicsDevice *graphicsDevice, GkSoundDevice *soundDevice); + virtual GkGame::~GkGame(void); + + void SetPage(GkGamePage *page); + GkAnimatedTexture* GkGame::AddAnimatedTexture(GkAnimatedTexture *animatedTexture, const wchar_t* id = 0); + void* GkGame::GetResource(const wchar_t* id); + bool GkGame::ReleaseResource(const wchar_t* id); + GkAnimatedFont* GkGame::AcquireAnimatedFontFromMultipleFiles(const wchar_t* virtualFileName, const wchar_t *charMap, int numFrames = 1); + GkAnimatedTexture* GkGame::AcquireAnimatedTexture(const wchar_t* virtualFileName, int columnFrames = 1, int rowFrames = 1, int numFrames = 0, float framesPerSecond = 25.0f, int animatedTexture_LoadOrder = GkAnimatedTexture::LoadOrder_Horizontal); + GkAnimatedTexture* GkGame::AcquireAnimatedTextureFromMultipleFiles(const wchar_t* virtualFileName, float framesPerSecond = 25.0f); + GkSoundSource* GkGame::AcquireSoundSource(const wchar_t* virtualFileName); + GkGamePage* GkGame::AddGamePage(GkGamePage *gamePage); + void GkGame::RemoveGamePage(GkGamePage *gamePage); + virtual void GkGame::MouseDown(int x, int y); + virtual void GkGame::MouseUp(int x, int y); + virtual void GkGame::NewFrame(); + virtual void GkGame::Process(); + virtual void GkGame::Render(); +}; + diff --git a/COM380/Project5/GambleKit/Engine/Game/GkGameEntity.cpp b/COM380/Project5/GambleKit/Engine/Game/GkGameEntity.cpp new file mode 100644 index 0000000..e977058 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/GkGameEntity.cpp @@ -0,0 +1,54 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkGameEntity.h" + +#include "GkGame.h" + +GkGameEntity::GkGameEntity() +{ +} + + +GkGameEntity::~GkGameEntity(void) +{ +} + +void GkGameEntity::MouseDown(int x, int y) +{ +} + +void GkGameEntity::MouseUp(int x, int y) +{ +} + +void GkGameEntity::Process(GkGame *game) +{ +} + +void GkGameEntity::Draw(GkGame *game) +{ +} + +bool GkGameEntity::IsMouseOver(int x, int y) +{ + return false; +} + +void GkGameEntity::OnMouseClicked() +{ +} + +bool GkGameEntity::GetBoundaries(int *x1, int *y1, int *x2, int*y2) +{ + return false; +} diff --git a/COM380/Project5/GambleKit/Engine/Game/GkGameEntity.h b/COM380/Project5/GambleKit/Engine/Game/GkGameEntity.h new file mode 100644 index 0000000..0c45afd --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/GkGameEntity.h @@ -0,0 +1,20 @@ +#pragma once + +#include "..\GkDefinitions.h" + +class GKDLLCLASS GkGame; + +class GKDLLCLASS GkGameEntity +{ +public: + GkGameEntity::GkGameEntity(); + virtual GkGameEntity::~GkGameEntity(void); + + virtual void GkGameEntity::MouseDown(int x, int y); + virtual void GkGameEntity::MouseUp(int x, int y); + virtual void GkGameEntity::Process(GkGame *game); + virtual void GkGameEntity::Draw(GkGame *game); + virtual bool GkGameEntity::IsMouseOver(int x, int y); + virtual void GkGameEntity::OnMouseClicked(); + virtual bool GkGameEntity::GetBoundaries(int *x1, int *y1, int *x2, int*y2); +}; \ No newline at end of file diff --git a/COM380/Project5/GambleKit/Engine/Game/GkGamePage.cpp b/COM380/Project5/GambleKit/Engine/Game/GkGamePage.cpp new file mode 100644 index 0000000..fda803d --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/GkGamePage.cpp @@ -0,0 +1,93 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkGamePage.h" + +GkGamePage::GkGamePage() +{ +} + + +GkGamePage::~GkGamePage(void) +{ + int numEntities = this->entities.size(); + + for (int i = 0; i < numEntities; i++) + { + delete this->entities[i]; + } +} + +void GkGamePage::OnShow(GkGamePage *previous) +{ +} + +void GkGamePage::OnHide(GkGamePage *next) +{ +} + +GkGameEntity* GkGamePage::AddEntity(GkGameEntity *entity) +{ + this->entities.push_back(entity); + + return entity; +} + +GkGameEntity* GkGamePage::InsertEntity(int position, GkGameEntity *entity) +{ + this->entities.push_back(0); + + for (int i = this->entities.size() - 1; i > position; i--) + this->entities[i] = this->entities[i - 1]; + + this->entities[position] = entity; + + return entity; +} + +bool GkGamePage::RemoveEntity(GkGameEntity *entity) +{ + int numEntities = this->entities.size(); + + for (int i = 0; i < numEntities; i++) + { + if (this->entities[i] == entity) + { + this->entities[i] = this->entities[numEntities - 1]; + this->entities.pop_back(); + + return true; + } + } + + return false; +} + +void GkGamePage::Process(GkGame *game) +{ + int numEntities = this->entities.size(); + + for (int i = 0; i < numEntities; i++) + { + this->entities[i]->Process(game); + } +} + +void GkGamePage::Render(GkGame *game) +{ + int numEntities = this->entities.size(); + + for (int i = 0; i < numEntities; i++) + { + this->entities[i]->Draw(game); + } +} diff --git a/COM380/Project5/GambleKit/Engine/Game/GkGamePage.h b/COM380/Project5/GambleKit/Engine/Game/GkGamePage.h new file mode 100644 index 0000000..5ceca8f --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/GkGamePage.h @@ -0,0 +1,28 @@ +#pragma once + +#include "..\GkDefinitions.h" + +#include + +#include "GkGameEntity.h" + +class GKDLLCLASS GkGame; + +class GKDLLCLASS GkGamePage +{ +public: + std::vector entities; + + GkGamePage::GkGamePage(); + virtual GkGamePage::~GkGamePage(void); + + virtual void OnShow(GkGamePage *previous); + virtual void OnHide(GkGamePage *next); + + GkGameEntity* GkGamePage::AddEntity(GkGameEntity *entity); + GkGameEntity* GkGamePage::InsertEntity(int position, GkGameEntity *entity); + bool GkGamePage::RemoveEntity(GkGameEntity *entity); + virtual void GkGamePage::Process(GkGame *game); + virtual void GkGamePage::Render(GkGame *game); +}; + diff --git a/COM380/Project5/GambleKit/Engine/Game/GkGameReelModel.cpp b/COM380/Project5/GambleKit/Engine/Game/GkGameReelModel.cpp new file mode 100644 index 0000000..9ac035d --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/GkGameReelModel.cpp @@ -0,0 +1,29 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkGameReelModel.h" + +#include "..\OSSpecific\GkOSUtils.h" + +GkGameReelModel::GkGameReelModel(int numItems) +{ + this->numItems = numItems; + this->items = new int[this->numItems]; + + GkOSUtils::ZeroMem(this->items, this->numItems * sizeof(int)); +} + + +GkGameReelModel::~GkGameReelModel(void) +{ + delete[] this->items; +} diff --git a/COM380/Project5/GambleKit/Engine/Game/GkGameReelModel.h b/COM380/Project5/GambleKit/Engine/Game/GkGameReelModel.h new file mode 100644 index 0000000..6d5094f --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/GkGameReelModel.h @@ -0,0 +1,18 @@ +#pragma once + +#include "..\GkDefinitions.h" + +class GKDLLCLASS GkGameReelModel +{ +public: + int numItems; + int *items; + + GkGameReelModel(int numItems); + virtual ~GkGameReelModel(void); + + virtual int GetSymbol() = 0; + virtual void GenerateReel() = 0; + virtual void GenerateReelZero() = 0; +}; + diff --git a/COM380/Project5/GambleKit/Engine/Game/GkGameReelsCombinationGenerator.cpp b/COM380/Project5/GambleKit/Engine/Game/GkGameReelsCombinationGenerator.cpp new file mode 100644 index 0000000..e47ca0e --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/GkGameReelsCombinationGenerator.cpp @@ -0,0 +1,80 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkGameReelsCombinationGenerator.h" + +#include "..\Utils\GkMaths.h" + +GkGameReelsCombinationGenerator::GkGameReelsCombinationGenerator(int numReels, int numReelItems) + : GkBaseReelMap(numReels, numReelItems) +{ + this->reels = new GameReelsCombinationGeneratorReel[this->numReels]; + for (int i = 0; i < this->numReels; i++) + { + this->reels[i].model = 0; + this->reels[i].blocked = false; + } +} + + +GkGameReelsCombinationGenerator::~GkGameReelsCombinationGenerator(void) +{ + for (int i = 0; i < this->numReels; i++) + { + if (this->reels[i].model != 0) + delete this->reels[i].model; + } + + delete[] this->reels; +} + +void GkGameReelsCombinationGenerator::SetReelModel(int reelIndex, GkGameReelModel *reelModel, bool blocked) +{ + this->reels[reelIndex].model = reelModel; + this->reels[reelIndex].blocked = blocked; +} + + +void GkGameReelsCombinationGenerator::GenerateReel(int reelIndex) +{ + this->reels[reelIndex].model->GenerateReel(); + + for (int itemIndex = 0; itemIndex < this->numReelItems; itemIndex++) + { + this->SetSymbol(reelIndex, itemIndex, this->reels[reelIndex].model->items[itemIndex]); + } +} + +void GkGameReelsCombinationGenerator::GenerateCombination() +{ + for (int reelIndex = 0; reelIndex < this->numReels; reelIndex++) + { + if (!this->reels[reelIndex].blocked) + this->GenerateReel(reelIndex); + } +} + +void GkGameReelsCombinationGenerator::GenerateCombinationZero() +{ + for (int reelIndex = 0; reelIndex < this->numReels; reelIndex++) + { + if (!this->reels[reelIndex].blocked) + { + this->reels[reelIndex].model->GenerateReelZero(); + + for (int itemIndex = 0; itemIndex < this->numReelItems; itemIndex++) + { + this->SetSymbol(reelIndex, itemIndex, this->reels[reelIndex].model->items[itemIndex]); + } + } + } +} diff --git a/COM380/Project5/GambleKit/Engine/Game/GkGameReelsCombinationGenerator.h b/COM380/Project5/GambleKit/Engine/Game/GkGameReelsCombinationGenerator.h new file mode 100644 index 0000000..34e5093 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/GkGameReelsCombinationGenerator.h @@ -0,0 +1,30 @@ +#pragma once + +#include "..\GkDefinitions.h" + +#include "..\Base\GkBaseReelMap.h" +#include "GkGameReelModel.h" + +struct GameReelsCombinationGeneratorReel +{ + GkGameReelModel *model; + bool blocked; +}; + +class GKDLLCLASS GkGameReelsCombinationGenerator + : public GkBaseReelMap +{ +public: + + GameReelsCombinationGeneratorReel *reels; + + GkGameReelsCombinationGenerator(int numReels, int numReelItems); + ~GkGameReelsCombinationGenerator(void); + + void SetReelModel(int reelIndex, GkGameReelModel *reelModel, bool blocked = false); + + void GenerateReel(int reelIndex); + void GenerateCombination(); + void GenerateCombinationZero(); +}; + diff --git a/COM380/Project5/GambleKit/Engine/Game/GkGameTimer.cpp b/COM380/Project5/GambleKit/Engine/Game/GkGameTimer.cpp new file mode 100644 index 0000000..9dfbd14 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/GkGameTimer.cpp @@ -0,0 +1,54 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkGameTimer.h" + +#include "..\OSSpecific\GkOSUtils.h" + +GkGameTimer::GkGameTimer(void) +{ + this->counterFrequency = GkOSUtils::GetPerformanceCounterFrequency(); + + this->Reset(); +} + + +GkGameTimer::~GkGameTimer(void) +{ +} + +void GkGameTimer::Reset() +{ + this->counterTime = GkOSUtils::GetPerformanceCounter(); + + this->Tick(); +} + +float GkGameTimer::Tick() +{ + long long newCounterTime = GkOSUtils::GetPerformanceCounter(); + + this->tickTime = (float)((double)(newCounterTime - this->counterTime) / (double)this->counterFrequency); + this->counterTime = newCounterTime; + + return this->tickTime; +} + +long long GkGameTimer::GetSample() +{ + return GkOSUtils::GetPerformanceCounter(); +} + +float GkGameTimer::GetSampleTime(long long sample) +{ + return (float)(((double)(GkGameTimer::GetSample() - sample)) / ((double)GkOSUtils::GetPerformanceCounterFrequency())); +} diff --git a/COM380/Project5/GambleKit/Engine/Game/GkGameTimer.h b/COM380/Project5/GambleKit/Engine/Game/GkGameTimer.h new file mode 100644 index 0000000..e4b8ae5 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/GkGameTimer.h @@ -0,0 +1,21 @@ +#pragma once + +#include "..\GkDefinitions.h" + +class GKDLLCLASS GkGameTimer +{ +public: + long long counterTime, counterFrequency; + + float tickTime; + + GkGameTimer(void); + ~GkGameTimer(void); + + void GkGameTimer::Reset(); + float GkGameTimer::Tick(); + + static long long GetSample(); + static float GetSampleTime(long long sample); +}; + diff --git a/COM380/Project5/GambleKit/Engine/Game/GkGameWinningPotentialsAnalyzer.cpp b/COM380/Project5/GambleKit/Engine/Game/GkGameWinningPotentialsAnalyzer.cpp new file mode 100644 index 0000000..f70ac75 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/GkGameWinningPotentialsAnalyzer.cpp @@ -0,0 +1,116 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkGameWinningPotentialsAnalyzer.h" + +GkGameWinningPotentialsAnalyzer::GkGameWinningPotentialsAnalyzer(GkGameWinningsModel *model) + : GkGameWinningsAnalyzer(model) +{ +} + + +GkGameWinningPotentialsAnalyzer::~GkGameWinningPotentialsAnalyzer(void) +{ +} + +GameWinning GkGameWinningPotentialsAnalyzer::GetSymbolWinning(int symbolIndex, int lineIndex) +{ + GameWinning reelItem; + reelItem.symbolIndex = symbolIndex; + reelItem.lineIndex = lineIndex; + reelItem.numItems = 0; + reelItem.itemsStart = 0; + + GameWinning result = reelItem; + + GameWinningSymbolModel *symbolModel = this->model->GetSymbolModel(symbolIndex); + + bool interrupted = false; + for (int reelIndex = 0; reelIndex < this->numReels; reelIndex++) + { + int reelSymbolIndex = this->GetLineSymbol(reelIndex, lineIndex); + GameWinningSymbolModel *reelSymbolModel = this->model->GetSymbolModel(reelSymbolIndex); + + bool match = GkGameWinningsAnalyzer::SymbolsMatch(symbolIndex, reelSymbolIndex); + if (match || !interrupted) + { + if (reelItem.numItems == 0) + { + reelItem.itemsStart = reelIndex; + reelItem.symbolsFlags = GkGameWinningsModel::SymbolFlag_None; + } + + reelItem.numItems++; + reelItem.symbolsFlags |= reelSymbolModel->flags; + + if (reelItem.numItems > result.numItems) + { + result = reelItem; + } + + if (!match) + interrupted = true; + } + else + { + if ((symbolModel->flags & GkGameWinningsModel::SymbolFlag_AnyPlace) == 0) + break; + + reelItem.numItems = 0; + + interrupted = false; + } + } + + result.itemsEnd = result.itemsStart + result.numItems - 1; + result.winningCoefficient = this->model->GetSymbolCoefficient(result.symbolIndex, result.numItems); + + return result; +} + +GameWinning GkGameWinningPotentialsAnalyzer::GetScatterWinning(int symbolIndex) +{ + GameWinning result = GkGameWinningsAnalyzer::GetScatterWinning(symbolIndex); + + if (result.numItems < this->numReels - 1) + { + result.numItems++; + result.winningCoefficient = this->model->GetSymbolCoefficient(result.symbolIndex, result.numItems); + } + + return result; +} + +bool GkGameWinningPotentialsAnalyzer::ReelBelongsToWinningAndSymbol(int reelIndex, int winningIndex) +{ + if (!GkGameWinningsAnalyzer::ReelBelongsToWinning(reelIndex, winningIndex)) + return false; + + return this->SymbolsMatch(this->winnings.win[winningIndex].symbolIndex, this->GetLineSymbol(reelIndex, this->winnings.win[winningIndex].lineIndex)); +} + +bool GkGameWinningPotentialsAnalyzer::ContainsActualWin(int winningIndex) +{ + if ((winningIndex < 0) || (winningIndex >= this->winnings.count)) + return false; + + int actualSequenceLength = 0; + for (int reelIndex = this->winnings.win[winningIndex].itemsStart; reelIndex <= this->winnings.win[winningIndex].itemsEnd; reelIndex++) + { + if (this->ReelBelongsToWinningAndSymbol(reelIndex, winningIndex)) + actualSequenceLength++; + else + break; + } + + return this->model->GetSymbolCoefficient(this->winnings.win[winningIndex].symbolIndex, actualSequenceLength) != 0; +} diff --git a/COM380/Project5/GambleKit/Engine/Game/GkGameWinningPotentialsAnalyzer.h b/COM380/Project5/GambleKit/Engine/Game/GkGameWinningPotentialsAnalyzer.h new file mode 100644 index 0000000..35cb9e1 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/GkGameWinningPotentialsAnalyzer.h @@ -0,0 +1,19 @@ +#pragma once + +#include "..\GkDefinitions.h" + +#include "GkGameWinningsAnalyzer.h" + +class GKDLLCLASS GkGameWinningPotentialsAnalyzer : + public GkGameWinningsAnalyzer +{ +public: + GkGameWinningPotentialsAnalyzer(GkGameWinningsModel *model); + virtual ~GkGameWinningPotentialsAnalyzer(void); + + virtual GameWinning GetSymbolWinning(int symbolIndex, int lineIndex); + virtual GameWinning GetScatterWinning(int symbolIndex); + + bool ReelBelongsToWinningAndSymbol(int reelIndex, int winningIndex); + bool ContainsActualWin(int winningIndex); +}; diff --git a/COM380/Project5/GambleKit/Engine/Game/GkGameWinningsAnalyzer.cpp b/COM380/Project5/GambleKit/Engine/Game/GkGameWinningsAnalyzer.cpp new file mode 100644 index 0000000..9ec90f4 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/GkGameWinningsAnalyzer.cpp @@ -0,0 +1,487 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkGameWinningsAnalyzer.h" + +#include "..\Utils\GkMaths.h" +#include "..\OSSpecific\GkOSUtils.h" + +#include + +// Camparison of reel combinations - combinations may have +// A. Exactly the same symbol wins as the compared - equal +// B. The same symbol wins from the compared plus more - greater +// C. Symbol wins from the compared, but not all or with less symbols - lesser +// D. Not all the symbol wins from the compared plus more - different +// +// Rule set +// +// Definition: A symbol win is considered a winning of EXACTLY the same symbol and either on EXACTLY the same line OR BEING A SCATTER +// +// Signs of comparison: +// 1.1 Contains all the symbol wins as the compared one +// 1.2 Contains symbol wins, that are not present in the compared one +// +// In addition to that, there might be symbol win(s) with +// 2.1 The same number of winning items +// 2.2 Greater number of winning items +// 2.3 Lesser number of winning items +// +// Result +// Equal - 1.1 and not 1.2 and not 2.2. and not 2.3 +// Greater - 1.1. and (1.2 or 2.2) and not 2.3 +// Lesser - (not 1.1 or 2.3) and not 1.2 and not 2.2 +// Different - otherwise + + +GkGameWinningsAnalyzer::GkGameWinningsAnalyzer(GkGameWinningsModel *model) + : GkBaseReelMap(model->numReels, model->numReelItems) +{ + this->model = model; + + this->comparisonMode = GameWinningAnalyzerComparisonMode_FullComparison; + + this->InitWinningData(&this->winnings); +} + +GkGameWinningsAnalyzer::~GkGameWinningsAnalyzer(void) +{ + this->DisposeWinningData(&this->winnings); +} + +GameWinning GkGameWinningsAnalyzer::GetSymbolWinning(int symbolIndex, int lineIndex) +{ + GameWinning reelItem; + reelItem.symbolIndex = symbolIndex; + reelItem.lineIndex = lineIndex; + reelItem.numItems = 0; + reelItem.itemsStart = 0; + + GameWinning result = reelItem; + + GameWinningSymbolModel *symbolModel = this->model->GetSymbolModel(symbolIndex); + + bool sequenceValid = false; + for (int reelIndex = 0; reelIndex < this->numReels; reelIndex++) + { + int reelSymbolIndex = this->GetLineSymbol(reelIndex, lineIndex); + GameWinningSymbolModel *reelSymbolModel = this->model->GetSymbolModel(reelSymbolIndex); + + if (this->SymbolsMatch(symbolIndex, reelSymbolIndex)) + { + if (symbolIndex == reelSymbolIndex) + sequenceValid = true; + + if (reelItem.numItems == 0) + { + reelItem.itemsStart = reelIndex; + reelItem.symbolsFlags = GkGameWinningsModel::SymbolFlag_None; + } + + reelItem.numItems++; + reelItem.symbolsFlags |= reelSymbolModel->flags; + + if (sequenceValid && (reelItem.numItems > result.numItems)) + { + result = reelItem; + } + } + else + { + if ((symbolModel->flags & GkGameWinningsModel::SymbolFlag_AnyPlace) == 0) + break; + + sequenceValid = false; + reelItem.numItems = 0; + } + } + + result.itemsEnd = result.itemsStart + result.numItems - 1; + result.winningCoefficient = this->model->GetSymbolCoefficient(result.symbolIndex, result.numItems); + + return result; +} + +bool GkGameWinningsAnalyzer::SymbolsMatch(int symbolIndex, int testSymbolIndex) +{ + GameWinningSymbolModel *symbolModel = this->model->GetSymbolModel(symbolIndex), + *testSymbolModel = this->model->GetSymbolModel(testSymbolIndex); + + return ((testSymbolIndex == symbolIndex) || ((testSymbolModel->flags & GkGameWinningsModel::SymbolFlag_Wild) != 0)) && + ((testSymbolModel->flags & symbolModel->exclusionFlags) == 0); +} + +GameWinning GkGameWinningsAnalyzer::GetScatterWinning(int symbolIndex) +{ + int scatterNumber = 0; + for (int symbolsIndex = 0; symbolsIndex < symbolsIndex; symbolsIndex++) + if (this->model->GetSymbolModel(symbolsIndex)->flags & GkGameWinningsModel::SymbolFlag_Scatter) + scatterNumber++; + + + GameWinning result; + result.symbolIndex = symbolIndex; + result.numItems = 0; + result.lineIndex = this->model->numLines + scatterNumber; + + if (scatterNumber >= this->model->numScatters) + { + result.symbolsFlags = GkGameWinningsModel::SymbolFlag_None; + result.winningCoefficient = 0; + return result; + } + + GameWinningSymbolModel *symbolModel = this->model->GetSymbolModel(symbolIndex); + + for (int reelIndex = 0; reelIndex < this->numReels; reelIndex++) + { + this->model->lines[result.lineIndex].coordinates[reelIndex] = this->FindFirstSymbol(reelIndex, symbolIndex); + if (this->model->lines[result.lineIndex].coordinates[reelIndex] != -1) + { + if (result.numItems == 0) + result.itemsStart = reelIndex; + + result.numItems++; + result.itemsEnd = reelIndex; + } + } + + result.symbolsFlags = symbolModel->flags; + result.winningCoefficient = this->model->GetSymbolCoefficient(result.symbolIndex, result.numItems); + + return result; +} + +void GkGameWinningsAnalyzer::AnalyzeWinnings(GkBaseReelMap *reelMap) +{ + if (reelMap != 0) + this->SetItems(reelMap); + + this->winnings.count = 0; + + // Analyze line winnings + for (int lineIndex = 0; lineIndex < this->model->numLines; lineIndex++) + { + if (this->model->lines[lineIndex].active) + { + GameWinning maxLineWin; + maxLineWin.winningCoefficient = 0; + + for (int symbolIndex = 0; symbolIndex < this->model->numSymbols; symbolIndex++) + { + if ((this->model->GetSymbolModel(symbolIndex)->flags & GkGameWinningsModel::SymbolFlag_Scatter) == 0) + { + GameWinning symbolWin = this->GetSymbolWinning(symbolIndex, lineIndex); + if (symbolWin.winningCoefficient != 0) + { + if ((maxLineWin.winningCoefficient == 0) || + (this->model->CompareSymbolWinnning(symbolWin.symbolIndex, symbolWin.numItems, maxLineWin.symbolIndex, maxLineWin.numItems) > 0)) + { + maxLineWin = symbolWin; + } + } + } + } + + if (maxLineWin.winningCoefficient != 0) + { + this->winnings.win[this->winnings.count++] = maxLineWin; + } + } + } + + + // Analyze scatters + for (int symbolIndex = 0; symbolIndex < this->model->numSymbols; symbolIndex++) + { + if ((this->model->GetSymbolModel(symbolIndex)->flags & GkGameWinningsModel::SymbolFlag_Scatter) != 0) + { + GameWinning symbolWin = this->GetScatterWinning(symbolIndex); + if (symbolWin.winningCoefficient != 0) + { + this->winnings.win[this->winnings.count++] = symbolWin; + } + } + } + + + // Calculate total winnigs, total flags and manage items with SymbolFlag_IgnoreWinning + this->totalWinning = 0; + this->totalFlags = GkGameWinningsModel::SymbolFlag_None; + for (int i = 0; i < this->winnings.count; i++) + { + if (this->winnings.win[i].symbolsFlags & GkGameWinningsModel::SymbolFlag_IgnoreWinning) + this->winnings.win[i].winningCoefficient = 0; + + this->totalWinning += this->winnings.win[i].winningCoefficient; + this->totalFlags |= this->winnings.win[i].symbolsFlags; + } + + this->SortWinnings(); +} + +int GkGameWinningsAnalyzer::WinningOrder(int winningIndex1, int winningIndex2) +{ + bool win1End = (this->model->GetSymbolModel(this->winnings.win[winningIndex1].symbolIndex)->flags & GkGameWinningsModel::SymbolFlag_AtEnd) != 0; + bool win2End = (this->model->GetSymbolModel(this->winnings.win[winningIndex2].symbolIndex)->flags & GkGameWinningsModel::SymbolFlag_AtEnd) != 0; + if (win1End && !win2End) + return 1; + + if (win2End && !win1End) + return -1; + + return GkMaths::Sign(this->winnings.win[winningIndex1].lineIndex - this->winnings.win[winningIndex2].lineIndex); +} + +int GkGameWinningsAnalyzer::CompareWinning(int winningIndex1, int winningIndex2) +{ + return GkMaths::Sign(this->winnings.win[winningIndex1].winningCoefficient - this->winnings.win[winningIndex2].winningCoefficient); +} + +void GkGameWinningsAnalyzer::SortWinnings() +{ + for (int i = 0; i < this->winnings.count; i++) + { + int leadingWin = i; + for (int j = i + 1; j < this->winnings.count; j++) + { + if (this->WinningOrder(leadingWin, j) > 0) + leadingWin = j; + } + + if (leadingWin != i) + { + GameWinning t = this->winnings.win[i]; + this->winnings.win[i] = this->winnings.win[leadingWin]; + this->winnings.win[leadingWin] = t; + } + } +} + +void GkGameWinningsAnalyzer::MultiplyWinnings(int factor) +{ + for (int i = 0; i < this->winnings.count; i++) + this->winnings.win[i].winningCoefficient *= factor; + this->totalWinning *= factor; +} + +int GkGameWinningsAnalyzer::GetLineSymbol(int reelIndex, int lineIndex) +{ + return this->GetSymbol(reelIndex, model->GetLineSymbolCoordinate(reelIndex, lineIndex)); +} + +int GkGameWinningsAnalyzer::FindWinning(int symbolIndex, int minSymbols) +{ + for (int i = 0; i < this->winnings.count; i++) + if ((this->winnings.win[i].symbolIndex == symbolIndex) && (this->winnings.win[i].numItems >= minSymbols)) + return i; + + return -1; +} + +bool GkGameWinningsAnalyzer::ReelBelongsToWinning(int reelIndex, int winningIndex) +{ + if ((winningIndex < 0) || (winningIndex >= this->winnings.count)) + return false; + + if (this->winnings.win[winningIndex].symbolsFlags & GkGameWinningsModel::SymbolFlag_Scatter) + { + if (this->model->lines[this->winnings.win[winningIndex].lineIndex].coordinates[reelIndex] == -1) + return false; + } + else + { + if ((reelIndex < this->winnings.win[winningIndex].itemsStart) || (reelIndex > this->winnings.win[winningIndex].itemsStart + this->winnings.win[winningIndex].numItems - 1)) + return false; + } + + return true; +} + +bool GkGameWinningsAnalyzer::ReelBelongsToAnyWinning(int reelIndex) +{ + for (int winningIndex = 0; winningIndex < this->winnings.count; winningIndex++) + if (this->ReelBelongsToWinning(reelIndex, winningIndex)) + return true; + + return false; +} + +bool GkGameWinningsAnalyzer::ReelItemBelongsToWinning(int reelIndex, int itemIndex, int winningIndex) +{ + if (!this->ReelBelongsToWinning(reelIndex, winningIndex)) + return false; + + return this->model->lines[this->winnings.win[winningIndex].lineIndex].coordinates[reelIndex] == itemIndex; +} + +bool GkGameWinningsAnalyzer::ReelItemBelongsToAnyWinning(int reelIndex, int itemIndex) +{ + for (int winningIndex = 0; winningIndex < this->winnings.count; winningIndex++) + if (this->ReelItemBelongsToWinning(reelIndex, itemIndex, winningIndex)) + return true; + + return false; +} + +void GkGameWinningsAnalyzer::InitWinningData(GameWinnings *data) +{ + data->win = new GameWinning[this->model->numLines + this->model->numScatters]; + data->count = 0; +} + +void GkGameWinningsAnalyzer::DisposeWinningData(GameWinnings *data) +{ + delete[] data->win; + data->count = 0; +} + +void GkGameWinningsAnalyzer::SaveWinningData(GameWinnings *destination) +{ + destination->count = this->winnings.count; + GkOSUtils::CopyMem(destination->win, this->winnings.win, sizeof(GameWinning) * this->winnings.count); +} + +WinningDataComparisonResult GkGameWinningsAnalyzer::FindWinning(GameWinning *gameWinning) +{ + for (int i = 0; i < this->winnings.count; i++) + { + GameWinning *testedWinning = &this->winnings.win[i]; + + if ((testedWinning->symbolIndex == gameWinning->symbolIndex) && + ((testedWinning->lineIndex == gameWinning->lineIndex) || + ((testedWinning->symbolsFlags & GkGameWinningsModel::SymbolFlag_Scatter) != 0) || + (this->comparisonMode == GameWinningAnalyzerComparisonMode_IgnoreLineMatching))) + { + if (testedWinning->numItems == gameWinning->numItems) + return WinningDataComparisonResult_Equivalent; + + if (testedWinning->numItems < gameWinning->numItems) + return WinningDataComparisonResult_Lesser; + + if (testedWinning->numItems > gameWinning->numItems) + return WinningDataComparisonResult_Greater; + + } + } + + return WinningDataComparisonResult_Different; +} + +WinningDataComparisonResult GkGameWinningsAnalyzer::CompareWith(GameWinnings *data) +{ + bool containsLesserWin = false, + containsGreaterWin = false; + + int numMatchingWins = 0; + + for (int winIndex = 0; winIndex < data->count; winIndex++) + { + GameWinning *winning = &data->win[winIndex]; + + WinningDataComparisonResult camparedToData = this->FindWinning(winning); + + if (camparedToData == WinningDataComparisonResult_Lesser) + containsLesserWin = true; + + if (camparedToData == WinningDataComparisonResult_Greater) + containsGreaterWin = true; + + if (camparedToData != WinningDataComparisonResult_Different) + numMatchingWins++; + } + + bool containsAllDataWins = numMatchingWins == data->count, + containsOtherWins = numMatchingWins < this->winnings.count; + + if (containsAllDataWins && !containsOtherWins && !containsLesserWin && !containsGreaterWin) + return WinningDataComparisonResult_Equivalent; + + if (containsAllDataWins && (containsOtherWins || containsGreaterWin) && !containsLesserWin) + return WinningDataComparisonResult_Greater; + + if ((!containsAllDataWins || containsLesserWin) && !containsOtherWins && !containsGreaterWin) + return WinningDataComparisonResult_Lesser; + + + return WinningDataComparisonResult_Different; +} + +int GkGameWinningsAnalyzer::GetWinningReelsCount() +{ + int result = 0; + + for (int reelIndex = 0; reelIndex < this->model->numReels; reelIndex++) + if (this->ReelBelongsToAnyWinning(reelIndex)) + result++; + + return result; +} + +int GkGameWinningsAnalyzer::GetWinningReelsCount(int winningIndex, int startReel, int numReels) +{ + int result = 0; + + if (numReels == -1) + numReels = this->model->numReels; + + for (int reelIndex = startReel; reelIndex < startReel + numReels; reelIndex++) + if (this->ReelBelongsToWinning(reelIndex, winningIndex)) + result++; + + return result; +} + +int GkGameWinningsAnalyzer::GetWinningItemReelIndex(int winningItemIndex) +{ + for (int reelIndex = 0; reelIndex < this->model->numReels; reelIndex++) + { + if (this->ReelBelongsToAnyWinning(reelIndex)) + { + if (winningItemIndex == 0) + return reelIndex; + + winningItemIndex--; + } + } + + return -1; +} + +int GkGameWinningsAnalyzer::GetWinningItemReelIndex(int winningItemIndex, int winningIndex) +{ + for (int reelIndex = 0; reelIndex < this->model->numReels; reelIndex++) + { + if (this->ReelBelongsToWinning(reelIndex, winningIndex)) + { + if (winningItemIndex == 0) + return reelIndex; + + winningItemIndex--; + } + } + + return -1; +} + +int GkGameWinningsAnalyzer::GetHighestWinning() +{ + if (this->winnings.count == 0) + return -1; + + int result = 0; + for (int winIndex = 1; winIndex < this->winnings.count; winIndex++) + if (this->CompareWinning(winIndex, result) > 0) + result = winIndex; + + return result; +} \ No newline at end of file diff --git a/COM380/Project5/GambleKit/Engine/Game/GkGameWinningsAnalyzer.h b/COM380/Project5/GambleKit/Engine/Game/GkGameWinningsAnalyzer.h new file mode 100644 index 0000000..b134d8d --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/GkGameWinningsAnalyzer.h @@ -0,0 +1,80 @@ +#pragma once + +#include "..\GkDefinitions.h" + +#include "..\Base\GkBaseReelMap.h" +#include "GkGameWinningsModel.h" + +struct GameWinning +{ + int lineIndex, symbolIndex, + itemsStart, itemsEnd, numItems, + winningCoefficient; + + unsigned int symbolsFlags; +}; + +struct GameWinnings +{ + int count; + GameWinning *win; +}; + +enum WinningDataComparisonResult +{ + WinningDataComparisonResult_Different, + WinningDataComparisonResult_Equivalent, + WinningDataComparisonResult_Greater, + WinningDataComparisonResult_Lesser +}; + +enum GameWinningAnalyzerComparisonMode +{ + GameWinningAnalyzerComparisonMode_FullComparison, + GameWinningAnalyzerComparisonMode_IgnoreLineMatching, +}; + +class GKDLLCLASS GkGameWinningsAnalyzer + : public GkBaseReelMap +{ +public: + GkGameWinningsModel *model; + + GameWinnings winnings; + int totalWinning, totalFlags; + + GameWinningAnalyzerComparisonMode comparisonMode; + + GkGameWinningsAnalyzer(GkGameWinningsModel *model); + virtual ~GkGameWinningsAnalyzer(void); + + virtual GameWinning GetSymbolWinning(int symbolIndex, int lineIndex); + virtual GameWinning GetScatterWinning(int symbolIndex); + virtual void AnalyzeWinnings(GkBaseReelMap *reelMap = 0); + virtual bool SymbolsMatch(int symbol1Index, int testSymbolIndex); + virtual int WinningOrder(int winningIndex1, int winningIndex2); + virtual int CompareWinning(int winningIndex1, int winningIndex2); + + void SortWinnings(); + void MultiplyWinnings(int factor); + int GetLineSymbol(int reelIndex, int lineIndex); + + int FindWinning(int symbolIndex, int minSymbols = 0); + bool ReelBelongsToWinning(int reelIndex, int winningIndex); + bool ReelBelongsToAnyWinning(int reelIndex); + bool ReelItemBelongsToWinning(int reelIndex, int itemIndex, int winningIndex); + bool ReelItemBelongsToAnyWinning(int reelIndex, int itemIndex); + int GetWinningReelsCount(); + int GetWinningReelsCount(int winningIndex, int startReel = 0, int numReels = -1); + int GetWinningItemReelIndex(int winningItemIndex); + int GetWinningItemReelIndex(int winningItemIndex, int winningIndex); + int GetHighestWinning(); + + void InitWinningData(GameWinnings *data); + void DisposeWinningData(GameWinnings *data); + void SaveWinningData(GameWinnings *destination); + bool IsLessOrEqualThan(GameWinnings *data); + WinningDataComparisonResult FindWinning(GameWinning *gameWinning); + WinningDataComparisonResult CompareWith(GameWinnings *data); +}; + diff --git a/COM380/Project5/GambleKit/Engine/Game/GkGameWinningsModel.cpp b/COM380/Project5/GambleKit/Engine/Game/GkGameWinningsModel.cpp new file mode 100644 index 0000000..62c6618 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/GkGameWinningsModel.cpp @@ -0,0 +1,124 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkGameWinningsModel.h" + +#include "..\OSSpecific\GkOSUtils.h" +#include "..\Utils\GkMaths.h" + +GkGameWinningsModel::GkGameWinningsModel(int numReels, int numReelItems, int numLines, int numSymbols, int numScatters, int numChannels) +{ + this->numReels = numReels; + this->numReelItems = numReelItems; + this->numLines = numLines; + this->numSymbols = numSymbols; + this->numScatters = numScatters; + this->numChannels = numChannels; + this->selectedChannel = 0; + + this->lines = new GameWinningLineModel[this->numLines + numScatters]; + for (int i = 0; i < this->numLines + this->numScatters; i++) + { + this->lines[i].active = true; + this->lines[i].coordinates = new int[this->numReels]; + GkOSUtils::ZeroMem(this->lines[i].coordinates, this->numReels * sizeof(int)); + } + + this->symbols = new GameWinningSymbolModel*[this->numChannels]; + for (int channel = 0; channel < this->numChannels; channel++) + { + this->symbols[channel] = new GameWinningSymbolModel[this->numSymbols]; + for (int symbol = 0; symbol < this->numSymbols; symbol++) + { + this->symbols[channel][symbol].coefficients = new int[this->numReels]; + GkOSUtils::ZeroMem(this->symbols[channel][symbol].coefficients, this->numReels * sizeof(int)); + } + } +} + +GkGameWinningsModel::~GkGameWinningsModel(void) +{ + for (int channel = 0; channel < this->numChannels; channel++) + { + for (int symbol = 0; symbol < this->numSymbols; symbol++) + { + delete[] this->symbols[channel][symbol].coefficients; + } + delete[] this->symbols[channel]; + } + delete[] this->symbols; + + for (int i = 0; i < this->numLines + this->numScatters; i++) + { + delete[] this->lines[i].coordinates; + } + delete[] this->lines; +} + +void GkGameWinningsModel::SetupLine(int lineIndex, ...) +{ + //GkOSUtils::CopyMem(this->lines[lineIndex], (void*)lineCoordinates, this->numReels * sizeof(int)); + + va_list lineCoordinates; + va_start(lineCoordinates, lineIndex); + for(int i = 0; i < this->numReels; ++i ) + this->lines[lineIndex].coordinates[i] = va_arg(lineCoordinates, int); + va_end(lineCoordinates); +} + +void GkGameWinningsModel::SetupSymbol(int symbolIndex, int channelIndex, unsigned int symbolFlags, unsigned int symbolExclusionFlags, ...) +{ + va_list winCoefficients; + va_start(winCoefficients, symbolExclusionFlags); + for(int i = 0; i < this->numReels; ++i ) + { + this->symbols[channelIndex][symbolIndex].coefficients[i] = va_arg(winCoefficients, int); + } + va_end(winCoefficients); + + this->symbols[channelIndex][symbolIndex].flags = symbolFlags; + this->symbols[channelIndex][symbolIndex].exclusionFlags = symbolExclusionFlags; +} + +int GkGameWinningsModel::GetLineSymbolCoordinate(int reelIndex, int lineIndex) +{ + return this->lines[lineIndex].coordinates[reelIndex]; +} + +GameWinningSymbolModel *GkGameWinningsModel::GetSymbolModel(int symbol) +{ + return &this->symbols[this->selectedChannel][symbol]; +} + +int GkGameWinningsModel::GetSymbolCoefficient(int symbol, int symbolCount) +{ + if (symbolCount == 0) + return 0; + + return this->symbols[this->selectedChannel][symbol].coefficients[symbolCount - 1]; +} + +int GkGameWinningsModel::CompareSymbolWinnning(int symbol1, int symbol1Count, int symbol2, int symbol2Count) +{ + int coefficientDelta = this->GetSymbolCoefficient(symbol1, symbol1Count) - this->GetSymbolCoefficient(symbol2, symbol2Count); + if (coefficientDelta != 0) + return GkMaths::Sign(coefficientDelta); + + for (int numSymbols = GkMaths::Max(symbol1Count, symbol2Count); numSymbols <= this->numReels; numSymbols++) + { + coefficientDelta = this->GetSymbolCoefficient(symbol1, numSymbols) - this->GetSymbolCoefficient(symbol2, numSymbols); + if (coefficientDelta != 0) + return GkMaths::Sign(coefficientDelta); + } + + return 0; +} diff --git a/COM380/Project5/GambleKit/Engine/Game/GkGameWinningsModel.h b/COM380/Project5/GambleKit/Engine/Game/GkGameWinningsModel.h new file mode 100644 index 0000000..4c9d432 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/GkGameWinningsModel.h @@ -0,0 +1,48 @@ +#pragma once + +#include "..\GkDefinitions.h" + +struct GameWinningLineModel +{ + bool active; + int *coordinates; +}; + +struct GameWinningSymbolModel +{ + unsigned int flags, exclusionFlags; + int *coefficients; +}; + +class GKDLLCLASS GkGameWinningsModel +{ +public: + static const unsigned int SymbolFlag_None = 0, + SymbolFlag_Default = 1 << 0, + SymbolFlag_Wild = 1 << 1, + SymbolFlag_AnyPlace = 1 << 2, // Line sequence can start from anywhere, not only from the beginning of a line + SymbolFlag_IgnoreWinning = 1 << 3, + SymbolFlag_AtEnd = 1 << 4, + SymbolFlag_Scatter = 1 << 5, // If a symbol is Scatter, it has a line index of numLines and above, and its line's coordinates are set correspondingly on each CalculateWinnings() + SymbolFlag_Custom = 1 << 8; // For user - defined flags. User_Defined_Flag = SymbolFlag_Custom << UserFlag_Index + + int numReels, numReelItems, numChannels, selectedChannel; + + int numLines; + GameWinningLineModel *lines; + + int numSymbols, numScatters; + GameWinningSymbolModel **symbols; + + GkGameWinningsModel(int numReels, int numReelItems, int numLines, int numSymbols, int numScatters = 0, int numChannels = 1); + ~GkGameWinningsModel(void); + + void SetupLine(int lineIndex, ...); + void SetupSymbol(int symbolIndex, int channelIndex, unsigned int symbolFlags, unsigned int symbolExclusionFlags, ...); + + int GetLineSymbolCoordinate(int reelIndex, int lineIndex); + GameWinningSymbolModel *GetSymbolModel(int symbol); + int GetSymbolCoefficient(int symbol, int symbolCount); + int CompareSymbolWinnning(int symbol1, int symbol1Count, int symbol2, int symbol2Count); +}; + diff --git a/COM380/Project5/GambleKit/Engine/Game/ReelModels/GkGameReelRandomModel.cpp b/COM380/Project5/GambleKit/Engine/Game/ReelModels/GkGameReelRandomModel.cpp new file mode 100644 index 0000000..9fa8a21 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/ReelModels/GkGameReelRandomModel.cpp @@ -0,0 +1,117 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkGameReelRandomModel.h" + +#include "..\..\Utils\GkMaths.h" + + +GkGameReelRandomModel::GkGameReelRandomModel(int numItems, int numSymbols) + :GkGameReelModel(numItems) +{ + this->numSymbols = numSymbols; + this->symbols = new GameReelRandomModelSymbol[numSymbols]; + + for (int i = 0; i < numSymbols; i++) + this->SetupSymbol(i, i); +} + + +GkGameReelRandomModel::~GkGameReelRandomModel(void) +{ + delete[] this->symbols; +} + + +void GkGameReelRandomModel::SetupSymbol(int symbolIndex, int symbolValue, int hitProbability, int maxHits) +{ + this->symbols[symbolIndex].value = symbolValue; + this->symbols[symbolIndex].hitProbability = hitProbability; + this->symbols[symbolIndex].maxHits = maxHits; + + this->overallProbability = 0; + for (int i = 0; i < this->numSymbols; i++) + this->overallProbability += this->symbols[i].hitProbability; +} + +bool GkGameReelRandomModel::ReplaceReelSymbol(int itemIndex, int symbolIndex, bool forceReplace) +{ + bool autoGenerate = symbolIndex == -1; + + do + { + if (autoGenerate) + { + symbolIndex = this->GetSymbolIndex(); + } + + if ((this->symbols[symbolIndex].maxHits == GkGameReelRandomModel::UnlimitedHits) || (this->symbols[symbolIndex].occurances < this->symbols[symbolIndex].maxHits) || forceReplace) + { + this->symbols[this->items[itemIndex]].occurances--; + this->items[itemIndex] = symbolIndex; + this->symbols[symbolIndex].occurances++; + return true; + } + } while (autoGenerate); + + return false; +} + +int GkGameReelRandomModel::GetSymbolIndex() +{ + int p = GkMaths::Random(this->overallProbability); + + int s = 0; + for (int i = 0; i < this->numSymbols; i++) + { + s += this->symbols[i].hitProbability; + if (p < s) + return i; + } + + return -1; +} + +int GkGameReelRandomModel::GetSymbol() +{ + int symbolIndex = this->GetSymbolIndex(); + if (symbolIndex == -1) + return -1; + else + return this->symbols[symbolIndex].value; +} + +void GkGameReelRandomModel::GenerateReel() +{ + for (int symbolIndex = 0; symbolIndex < this->numSymbols; symbolIndex++) + this->symbols[symbolIndex].occurances = 0; + + + for (int itemIndex = 0; itemIndex < this->numItems; itemIndex++) + { + for (;;) + { + int symbolIndex = this->GetSymbolIndex(); + if ((this->symbols[symbolIndex].maxHits == GkGameReelRandomModel::UnlimitedHits) || (this->symbols[symbolIndex].occurances < this->symbols[symbolIndex].maxHits)) + { + this->items[itemIndex] = this->symbols[symbolIndex].value; + this->symbols[symbolIndex].occurances++; + break; + } + } + } +} + +void GkGameReelRandomModel::GenerateReelZero() +{ + this->GenerateReel(); +} diff --git a/COM380/Project5/GambleKit/Engine/Game/ReelModels/GkGameReelRandomModel.h b/COM380/Project5/GambleKit/Engine/Game/ReelModels/GkGameReelRandomModel.h new file mode 100644 index 0000000..a8cc951 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/ReelModels/GkGameReelRandomModel.h @@ -0,0 +1,35 @@ +#pragma once + +#include "..\..\GkDefinitions.h" + +#include "..\GkGameReelModel.h" + +struct GameReelRandomModelSymbol +{ + int value, hitProbability, maxHits, + occurances; +}; + +class GKDLLCLASS GkGameReelRandomModel : + public GkGameReelModel +{ +public: + static const int UnlimitedHits = -1; + + int numSymbols; + GameReelRandomModelSymbol *symbols; + + int overallProbability; + + GkGameReelRandomModel(int numItems, int numSymbols); + ~GkGameReelRandomModel(void); + + void SetupSymbol(int symbolIndex, int symbolValue, int hitProbability = 1, int maxHits = GkGameReelRandomModel::UnlimitedHits); + bool ReplaceReelSymbol(int itemIndex, int symbolIndex, bool forceReplace); + int GetSymbolIndex(); + + int GetSymbol(); + void GenerateReel(); + void GenerateReelZero(); +}; + diff --git a/COM380/Project5/GambleKit/Engine/Game/ReelModels/GkGameReelStripModel.cpp b/COM380/Project5/GambleKit/Engine/Game/ReelModels/GkGameReelStripModel.cpp new file mode 100644 index 0000000..574ce79 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/ReelModels/GkGameReelStripModel.cpp @@ -0,0 +1,61 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkGameReelStripModel.h" + +#include "..\..\OSSpecific\GkOSUtils.h" +#include "..\..\Utils\GkMaths.h" + +GkGameReelStripModel::GkGameReelStripModel(int numItems, int numSymbols, ...) + : GkGameReelModel(numItems) +{ + this->numSymbols = numSymbols; + this->symbolStrip = new int[this->numSymbols]; + + int *parameters = (int*)((int)&numSymbols + 4); + for (int i = 0; i < this->numSymbols; i++) + this->symbolStrip[i] = parameters[i]; + + this->stripPosition = GkMaths::Random(this->numSymbols); +} + + +GkGameReelStripModel::~GkGameReelStripModel(void) +{ + delete[] this->symbolStrip; +} + +int GkGameReelStripModel::GetSymbol() +{ + this->stripPosition = (this->stripPosition + 1) % this->numSymbols; + return this->symbolStrip[this->stripPosition]; +} + +void GkGameReelStripModel::GenerateReel() +{ + this->stripPosition = GkMaths::Random(this->numSymbols); + + for (int itemIndex = 0; itemIndex < this->numItems; itemIndex++) + { + this->items[itemIndex] = this->GetSymbol(); + } +} + +void GkGameReelStripModel::GenerateReelZero() +{ + this->stripPosition = this->numSymbols - this->numItems / 2; + + for (int itemIndex = 0; itemIndex < this->numItems; itemIndex++) + { + this->items[itemIndex] = this->GetSymbol(); + } +} \ No newline at end of file diff --git a/COM380/Project5/GambleKit/Engine/Game/ReelModels/GkGameReelStripModel.h b/COM380/Project5/GambleKit/Engine/Game/ReelModels/GkGameReelStripModel.h new file mode 100644 index 0000000..f610854 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Game/ReelModels/GkGameReelStripModel.h @@ -0,0 +1,21 @@ +#pragma once + +#include "..\..\GkDefinitions.h" + +#include "..\GkGameReelModel.h" + +class GKDLLCLASS GkGameReelStripModel : + public GkGameReelModel +{ +public: + int numSymbols; + int *symbolStrip; + int stripPosition; + + GkGameReelStripModel(int numItems, int numSymbols, ...); + ~GkGameReelStripModel(void); + + int GetSymbol(); + void GenerateReel(); + void GenerateReelZero(); +}; diff --git a/COM380/Project5/GambleKit/Engine/GkDefinitions.h b/COM380/Project5/GambleKit/Engine/GkDefinitions.h new file mode 100644 index 0000000..182ea8a --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/GkDefinitions.h @@ -0,0 +1,12 @@ +#pragma once + +//#if defined (GKDLLCOMPILE) +//# define GKDLLCLASS __declspec(dllexport) +//# define GKDLLTEMPLATEMEMBER +//#else +//# define GKDLLCLASS __declspec(dllimport) +//# define GKDLLTEMPLATEMEMBER extern +//#endif + +# define GKDLLCLASS +# define GKDLLTEMPLATEMEMBER diff --git a/COM380/Project5/GambleKit/Engine/Graphics/GkAnimatedFont.cpp b/COM380/Project5/GambleKit/Engine/Graphics/GkAnimatedFont.cpp new file mode 100644 index 0000000..35316b4 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Graphics/GkAnimatedFont.cpp @@ -0,0 +1,50 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkAnimatedFont.h" + +#include "..\Utils\GkStrings.h" + + +GkAnimatedFont::GkAnimatedFont(const wchar_t *charMap, int numFrames, float framesPerSecond) +{ + this->charMap = GkStrings::Copy(charMap); + this->numFrames = numFrames; + this->numLetters = GkStrings::GetLength(charMap); + this->framesPerSecond = framesPerSecond; + + this->letterTextures = new GkAnimatedTexture*[this->numLetters]; + for (int i = 0; i < this->numLetters; i++) + { + this->letterTextures[i] = 0; + } +} + + +GkAnimatedFont::~GkAnimatedFont(void) +{ + delete[] this->charMap; + + for (int i = 0; i < this->numLetters; i++) + { + delete this->letterTextures[i]; + } + delete[] this->letterTextures; +} + +void GkAnimatedFont::LoadAnimatedLetter(int letterIndex, void *data, int dataSize) +{ + if (this->letterTextures[letterIndex] != 0) + delete this->letterTextures[letterIndex]; + + this->letterTextures[letterIndex] = new GkAnimatedTexture(data, dataSize, 1, this->numFrames, this->numFrames); +} diff --git a/COM380/Project5/GambleKit/Engine/Graphics/GkAnimatedFont.h b/COM380/Project5/GambleKit/Engine/Graphics/GkAnimatedFont.h new file mode 100644 index 0000000..2792df3 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Graphics/GkAnimatedFont.h @@ -0,0 +1,24 @@ +#pragma once + +#include "..\GkDefinitions.h" + +#include "..\Base\GkBase.h" +#include "GkAnimatedTexture.h" + +class GKDLLCLASS GkAnimatedFont : + public GkBase +{ +public: + wchar_t *charMap; + int numLetters, numFrames; + + float framesPerSecond; + + GkAnimatedTexture **letterTextures; + + GkAnimatedFont::GkAnimatedFont(const wchar_t *charMap, int numFrames, float framesPerSecond = 25.0f); + GkAnimatedFont::~GkAnimatedFont(void); + + void GkAnimatedFont::LoadAnimatedLetter(int letterIndex, void *data, int dataSize); +}; + diff --git a/COM380/Project5/GambleKit/Engine/Graphics/GkAnimatedTexture.cpp b/COM380/Project5/GambleKit/Engine/Graphics/GkAnimatedTexture.cpp new file mode 100644 index 0000000..bffd7f2 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Graphics/GkAnimatedTexture.cpp @@ -0,0 +1,123 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkAnimatedTexture.h" + +GkAnimatedTexture::GkAnimatedTexture(void) +{ + this->numFrames = 0; +} + +GkAnimatedTexture::GkAnimatedTexture(void* data, unsigned int dataSize, int columnFrames, int rowFrames, int numFrames, float framesPerSecond, int animatedTexture_LoadOrder) +{ + this->numFrames = 0; + + this->LoadFromMemory(data, dataSize, columnFrames, rowFrames, numFrames, framesPerSecond, animatedTexture_LoadOrder); +} + +GkAnimatedTexture::GkAnimatedTexture(char *fileName, int columnFrames, int rowFrames, int numFrames, float framesPerSecond, int animatedTexture_LoadOrder) +{ + this->numFrames = 0; + + this->LoadFromFile(fileName, columnFrames, rowFrames, numFrames, framesPerSecond, animatedTexture_LoadOrder); +} + +GkAnimatedTexture::~GkAnimatedTexture(void) +{ + this->Free(); +} + +void GkAnimatedTexture::Free() +{ + if (this->numFrames == 0) + return; + + for (int i = 0; i < this->numFrames; i++) + { + delete this->frames[i]; + } + + delete this->frames; + + this->numFrames = 0; +} + +bool GkAnimatedTexture::LoadFromImage(GkImage *image, int columnFrames, int rowFrames, int numFrames, float framesPerSecond, int animatedTexture_LoadOrder) +{ + this->Free(); + + this->numFrames = numFrames != 0 ? numFrames : columnFrames * rowFrames; + this->framesPerSecond = framesPerSecond; + + this->frames = new GkTexture*[this->numFrames]; + + int frameWidth = image->width / columnFrames; + int frameHeight = image->height / rowFrames; + + int iMax, jMax; + if (animatedTexture_LoadOrder == GkAnimatedTexture::LoadOrder_Vertical) + { + jMax = columnFrames; + iMax = rowFrames; + } + else + { + jMax = rowFrames; + iMax = columnFrames; + } + + int frameIndex = 0; + for (int j = 0; j < jMax; j++) + { + for (int i = 0; i < iMax; i++) + { + int x, y; + if (animatedTexture_LoadOrder == GkAnimatedTexture::LoadOrder_Vertical) + { + x = j; + y = i; + } + else + { + x = i; + y = j; + } + + GkTexture *frame = new GkTexture(); + frame->LoadFromImage(image, x * frameWidth, y * frameHeight, frameWidth, frameHeight); + + frames[frameIndex++] = frame; + } + } + + return true; +} + +bool GkAnimatedTexture::LoadFromMemory(void* data, unsigned int dataSize, int columnFrames, int rowFrames, int numFrames, float framesPerSecond, int animatedTexture_LoadOrder) +{ + GkImage image; + image.LoadFromMemory(data, dataSize); + + this->LoadFromImage(&image, columnFrames, rowFrames, numFrames, framesPerSecond, animatedTexture_LoadOrder); + + return true; +} + +bool GkAnimatedTexture::LoadFromFile(char *fileName, int columnFrames, int rowFrames, int numFrames, float framesPerSecond, int animatedTexture_LoadOrder) +{ + GkImage image; + image.LoadFromFile(fileName); + + this->LoadFromImage(&image, columnFrames, rowFrames, numFrames, framesPerSecond, animatedTexture_LoadOrder); + + return true; +} \ No newline at end of file diff --git a/COM380/Project5/GambleKit/Engine/Graphics/GkAnimatedTexture.h b/COM380/Project5/GambleKit/Engine/Graphics/GkAnimatedTexture.h new file mode 100644 index 0000000..ad8f1e4 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Graphics/GkAnimatedTexture.h @@ -0,0 +1,29 @@ +#pragma once + +#include "..\GkDefinitions.h" + +#include "..\Base\GkBase.h" +#include "GkTexture.h" + +class GKDLLCLASS GkAnimatedTexture : + public GkBase +{ +public: + static const int LoadOrder_Horizontal = 0, + LoadOrder_Vertical = 1; + + GkTexture **frames; + int numFrames; + float framesPerSecond; + + GkAnimatedTexture::GkAnimatedTexture(void); + GkAnimatedTexture::GkAnimatedTexture(void* data, unsigned int dataSize, int columnFrames = 1, int rowFrames = 1, int numFrames = 0, float framesPerSecond = 25.0f, int animatedTexture_LoadOrder = GkAnimatedTexture::LoadOrder_Horizontal); + GkAnimatedTexture::GkAnimatedTexture(char *fileName, int columnFrames = 1, int rowFrames = 1, int numFrames = 0, float framesPerSecond = 25.0f, int animatedTexture_LoadOrder = GkAnimatedTexture::LoadOrder_Horizontal); + GkAnimatedTexture::~GkAnimatedTexture(void); + + void GkAnimatedTexture::Free(); + bool GkAnimatedTexture::LoadFromImage(GkImage *image, int columnFrames = 1, int rowFrames = 1, int numFrames = 0, float framesPerSecond = 25.0f, int animatedTexture_LoadOrder = GkAnimatedTexture::LoadOrder_Horizontal); + bool GkAnimatedTexture::LoadFromMemory(void* data, unsigned int dataSize, int columnFrames = 1, int rowFrames = 1, int numFrames = 0, float framesPerSecond = 25.0f, int animatedTexture_LoadOrder = GkAnimatedTexture::LoadOrder_Horizontal); + bool GkAnimatedTexture::LoadFromFile(char *fileName, int columnFrames = 1, int rowFrames = 1, int numFrames = 0, float framesPerSecond = 25.0f, int animatedTexture_LoadOrder = GkAnimatedTexture::LoadOrder_Horizontal); +}; + diff --git a/COM380/Project5/GambleKit/Engine/Graphics/GkGraphicsDevice.cpp b/COM380/Project5/GambleKit/Engine/Graphics/GkGraphicsDevice.cpp new file mode 100644 index 0000000..22082e2 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Graphics/GkGraphicsDevice.cpp @@ -0,0 +1,197 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkGraphicsDevice.h" + +#include "..\Utils\GkMaths.h" + +#include + +#include +#include + +void GkGraphicsDevice::Initialize() +{ +} + +GkGraphicsDevice::GkGraphicsDevice(void) +{ + this->SetViewport(0, 0, 640, 480); + + glDisable(GL_LIGHTING); + glDisable(GL_DEPTH_TEST); + + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + glEnable(GL_TEXTURE_2D); + + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, GL_REPLACE); + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); + + glPixelStorei(GL_UNPACK_ALIGNMENT, 4); + + glClearColor(0.0f, 0.0f, 0.0f, 0.0f); + + glGetIntegerv(GL_MAX_TEXTURE_SIZE, &this->maxTextureSize); + this->nonPower2Textures = strstr((char*)glGetString(GL_EXTENSIONS),"GL_ARB_texture_non_power_of_two") != 0; + + GkTexture::powerOfTwo = !this->nonPower2Textures; +} + + +GkGraphicsDevice::~GkGraphicsDevice(void) +{ +} + + +void GkGraphicsDevice::Clear() +{ + glClear(GL_COLOR_BUFFER_BIT); +} + +void GkGraphicsDevice::Draw(int destX, int destY, int destWidth, int destHeight, int srcX, int srcY, int srcWidth, int srcHeight, GkTexture* texture) +{ + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glOrtho(0, this->width, this->height, 0, 1, -1); + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glTranslatef(destX, destY, 0); + glScalef(destWidth, destHeight, 1); + + glMatrixMode(GL_TEXTURE); + glLoadIdentity(); + glTranslatef(srcX / (float)texture->textureWidth, srcY / (float)texture->textureHeight, 0.0f); + glScalef(srcWidth / (float)texture->textureWidth, srcHeight / (float)texture->textureHeight, 1.0f); + + glBindTexture(GL_TEXTURE_2D, texture->handle); + + GLint filtering = (destWidth != srcWidth) || (destHeight != srcHeight) ? GL_LINEAR : GL_NEAREST; + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filtering); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filtering); + + glBegin(GL_TRIANGLES); + + glTexCoord2f(0.0f, 0.0f); + glVertex3f(0.0f, 0.0f, 0.0f); + + glTexCoord2f(0.0f, 1.0f); + glVertex3f(0.0f, 1.0f, 0.0f); + + glTexCoord2f(1.0f, 1.0f); + glVertex3f(1.0f, 1.0f, 0.0f); + + + glTexCoord2f(0.0f, 0.0f); + glVertex3f(0.0f, 0.0f, 0.0f); + + glTexCoord2f(1.0f, 1.0f); + glVertex3f(1.0f, 1.0f, 0.0f); + + glTexCoord2f(1.0f, 0.0f); + glVertex3f(1.0f, 0.0f, 0.0f); + + glEnd(); +} + +void GkGraphicsDevice::Draw(int x, int y, GkTexture* texture) +{ + this->Draw(x, y, texture->width, texture->height, 0, 0, texture->width, texture->height, texture); +} + +void GkGraphicsDevice::DrawClipped(int x, int y, int clipX, int clipY, int clipWidth, int clipHeight, GkTexture* texture) +{ + int clipLeft = clipX - x; + int clipTop = clipY - y; + + int destX = clipLeft > 0 ? clipX : x; + int destY = clipTop > 0 ? clipY : y; + int width = GkMaths::Min(texture->width - GkMaths::Max(clipLeft, 0), GkMaths::Min(clipX + clipWidth - destX, texture->width)); + int height = GkMaths::Min(texture->height - GkMaths::Max(clipTop, 0), GkMaths::Min(clipY + clipHeight - destY, texture->height)); + + if ((width <= 0) || (height <= 0)) + return; + + int srcX = clipLeft > 0 ? clipLeft : 0; + int srcY = clipTop > 0 ? clipTop : 0; + + this->Draw(destX, destY, width, height, srcX, srcY, width, height, texture); +} + +void GkGraphicsDevice::DrawString(int x, int y, const char *text) +{ + + + glLoadIdentity(); + glColor4f(1.0f, 1.0f, 1.0f, 1.0f); + glRasterPos2i(x, y); + + glDisable(GL_TEXTURE_2D); + + for (int i = 0; text[i] != 0; i++) + glutBitmapCharacter(GLUT_BITMAP_9_BY_15, text[i]); +} + +void GkGraphicsDevice::DrawString(int x, int y, const wchar_t *text) +{ + glLoadIdentity(); + glColor4f(1.0f, 1.0f, 1.0f, 1.0f); + glRasterPos2i(x, y); + + glDisable(GL_TEXTURE_2D); + + for (int i = 0; text[i] != 0; i++) + glutBitmapCharacter(GLUT_BITMAP_9_BY_15, text[i]); + + glEnable(GL_TEXTURE_2D); +} + +void GkGraphicsDevice::SetViewport(int x, int y, int width, int height) +{ + this->width = width; + this->height = height; + + glViewport(x, y, width, height); + + glEnable(GL_TEXTURE_2D); +} + +bool GkGraphicsDevice::CaptureScreen(const wchar_t *fileName, int width, int height) +{ + int length = std::wcslen(fileName); + char *cFileName = new char[length + 1]; + std::wcstombs(cFileName, fileName, length); + cFileName[length] = 0; + + int dataSize = this->width * this->height * 4; + char *data = new char[dataSize]; + + glReadPixels(0, 0, this->width, this->height, GL_RGBA, GL_UNSIGNED_BYTE, data); + + ILuint imageId; + ilGenImages(1, &imageId); + ilBindImage(imageId); + ilTexImage(this->width, this->height, 1, 4, IL_RGBA, IL_UNSIGNED_BYTE, data); + iluImageParameter(ILU_FILTER, ILU_BILINEAR); + iluScale(width, height, 1); + ilSetInteger(IL_JPG_QUALITY, 50); + ilEnable(IL_FILE_OVERWRITE); + bool result = ilSaveImage(cFileName) != 0; + ilDeleteImages(1, &imageId); + + delete[] data; + delete[] cFileName; + + return result; +} diff --git a/COM380/Project5/GambleKit/Engine/Graphics/GkGraphicsDevice.h b/COM380/Project5/GambleKit/Engine/Graphics/GkGraphicsDevice.h new file mode 100644 index 0000000..1eabfd6 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Graphics/GkGraphicsDevice.h @@ -0,0 +1,32 @@ +#pragma once + +#include "..\GkDefinitions.h" + +#include "GkTexture.h" + +class GKDLLCLASS GkGraphicsDevice +{ +public: + + static void Initialize(); + + int maxTextureSize; + bool nonPower2Textures; + + int width, height; + + GkGraphicsDevice(void); + ~GkGraphicsDevice(void); + + void Free(); + void Clear(); + + void Draw(int destX, int destY, int destWidth, int destHeight, int srcX, int srcY, int srcWidth, int srcHeight, GkTexture* texture); + void Draw(int x, int y, GkTexture* texture); + void DrawClipped(int x, int y, int clipX, int clipY, int clipWidth, int clipHeight, GkTexture* texture); + void DrawString(int x, int y, const char *text); + void DrawString(int x, int y, const wchar_t *text); + void SetViewport(int x, int y, int width, int height); + + bool CaptureScreen(const wchar_t *fileName, int width, int height); +}; \ No newline at end of file diff --git a/COM380/Project5/GambleKit/Engine/Graphics/GkImage.cpp b/COM380/Project5/GambleKit/Engine/Graphics/GkImage.cpp new file mode 100644 index 0000000..1e79a12 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Graphics/GkImage.cpp @@ -0,0 +1,69 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkImage.h" + +void GkImage::Initialize() +{ + ilInit(); +} + +GkImage::GkImage(void) +{ + ilGenImages(1, &this->handle); +} + + +GkImage::~GkImage(void) +{ + ilDeleteImages(1, &this->handle); +} + +void GkImage::LoadFromMemory(void* data, unsigned int dataSize) +{ + ilBindImage(this->handle); + + ilLoadL(IL_TYPE_UNKNOWN, data, dataSize); + this->width = ilGetInteger(IL_IMAGE_WIDTH); + this->height = ilGetInteger(IL_IMAGE_HEIGHT); +} + +void GkImage::LoadFromFile(char* fileName) +{ + ilBindImage(this->handle); + + ilLoadImage(fileName); + this->width = ilGetInteger(IL_IMAGE_WIDTH); + this->height = ilGetInteger(IL_IMAGE_HEIGHT); +} + +void GkImage::CopyPixels(void* dest) +{ + ilBindImage(this->handle); + ilCopyPixels(0, 0, 0, this->width, this->height, 1, IL_RGBA, IL_UNSIGNED_BYTE, dest); +} + +void GkImage::CopyPixels(void* dest, int x, int y, int width, int height) +{ + ilBindImage(this->handle); + ilCopyPixels(x, y, 0, width, height, 1, IL_RGBA, IL_UNSIGNED_BYTE, dest); +} + +void GkImage::CopyPixels(void* dest, int x, int y, int width, int height, int destX, int destY, int destWidth, int destHeight) +{ + ilBindImage(this->handle); + + for (int i = 0; i < height; i++) + { + ilCopyPixels(x, y + i, 0, width, 1, 1, IL_RGBA, IL_UNSIGNED_BYTE, (void*)(&((int*)dest)[(destY + i) * destWidth + destX])); + } +} diff --git a/COM380/Project5/GambleKit/Engine/Graphics/GkImage.h b/COM380/Project5/GambleKit/Engine/Graphics/GkImage.h new file mode 100644 index 0000000..08c7018 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Graphics/GkImage.h @@ -0,0 +1,24 @@ +#pragma once + +#include "..\GkDefinitions.h" + +#include +#include + +class GKDLLCLASS GkImage +{ +public: + ILuint handle, + width, height; + + static void GkImage::Initialize(); + + GkImage::GkImage(void); + GkImage::~GkImage(void); + + void GkImage::LoadFromMemory(void* data, unsigned int dataSize); + void GkImage::LoadFromFile(char* fileName); + void GkImage::CopyPixels(void* dest); + void GkImage::CopyPixels(void* dest, int x, int y, int width, int height); + void GkImage::CopyPixels(void* dest, int x, int y, int width, int height, int destX, int destY, int destWidth, int destHeight); +}; \ No newline at end of file diff --git a/COM380/Project5/GambleKit/Engine/Graphics/GkTexture.cpp b/COM380/Project5/GambleKit/Engine/Graphics/GkTexture.cpp new file mode 100644 index 0000000..63530a9 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Graphics/GkTexture.cpp @@ -0,0 +1,87 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkTexture.h" + +#include + +bool GkTexture::powerOfTwo = false; + +GkTexture::GkTexture(void) +{ + glGenTextures(1, &handle); + + glBindTexture(GL_TEXTURE_2D, this->handle); + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); +} + +GkTexture::~GkTexture(void) +{ + glDeleteTextures(1, &handle); +} + +void GkTexture::LoadFromImage(GkImage* image) +{ + this->LoadFromImage(image, 0, 0, image->width, image->height); +} + +void GkTexture::LoadFromImage(GkImage* image, int x, int y, int width, int height) +{ + if (GkTexture::powerOfTwo) + { + this->textureWidth = GkTexture::GetPowerOfTwo(width); + this->textureHeight = GkTexture::GetPowerOfTwo(height); + } + else + { + this->textureWidth = width; + this->textureHeight = height; + } + + this->width = width; + this->height = height; + + void *imageData = new char[this->textureWidth * this->textureHeight * 4]; + + if (this->width != this->textureWidth) + image->CopyPixels(imageData, x, y, width, height, 0, 0, this->textureWidth, this->textureHeight); + else + image->CopyPixels(imageData, x, y, width, height); + + glBindTexture(GL_TEXTURE_2D, this->handle); + //glPixelStorei (GL_UNPACK_ALIGNMENT, 1); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, this->textureWidth, this->textureHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, imageData); + + delete imageData; +} + +void GkTexture::LoadFromFile(char* fileName) +{ + GkImage* image = new GkImage(); + image->LoadFromFile(fileName); + this->LoadFromImage(image); + delete image; +} + +int GkTexture::GetPowerOfTwo(int value) +{ + int result = 1; + while (result < value) + result *= 2; + + return result; +} \ No newline at end of file diff --git a/COM380/Project5/GambleKit/Engine/Graphics/GkTexture.h b/COM380/Project5/GambleKit/Engine/Graphics/GkTexture.h new file mode 100644 index 0000000..de21089 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Graphics/GkTexture.h @@ -0,0 +1,27 @@ +#pragma once + +#include "..\GkDefinitions.h" + +#include "GkImage.h" +#include "..\Base\GkBase.h" + +class GKDLLCLASS GkTexture : + public GkBase +{ +public: + static bool powerOfTwo; + + unsigned int handle; + + int width, height, + textureWidth, textureHeight; + + GkTexture::GkTexture(void); + GkTexture::~GkTexture(void); + + void GkTexture::LoadFromImage(GkImage* image); + void GkTexture::LoadFromImage(GkImage* image, int x, int y, int width, int height); + void GkTexture::LoadFromFile(char* fileName); + + static int GkTexture::GetPowerOfTwo(int value); +}; \ No newline at end of file diff --git a/COM380/Project5/GambleKit/Engine/OSSpecific/GkFileSystem.cpp b/COM380/Project5/GambleKit/Engine/OSSpecific/GkFileSystem.cpp new file mode 100644 index 0000000..7e1472e --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/OSSpecific/GkFileSystem.cpp @@ -0,0 +1,285 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkFileSystem.h" + +#include +#include +#include +#include "..\Utils\GkStrings.h" + +std::wstring GkFileSystem::source; +//wchar_t *GkFileSystem::source; +FileSystemMode GkFileSystem::mode; +GkFileSystem::Init GkFileSystem::init; + +GkFileSystem::Init::Init(void) +{ + //GkFileSystem::source = GkStrings::Copy(L"\0"); +} + +GkFileSystem::Init::~Init(void) +{ + //delete[] GkFileSystem::source; +} + +GkFileSystem::GkFileSystem(void) +{ +} + + +GkFileSystem::~GkFileSystem(void) +{ +} + + +void GkFileSystem::SetSource(const wchar_t *source, FileSystemMode mode) +{ + //delete[] GkFileSystem::source; + + //if (source == 0) + // GkFileSystem::source = GkStrings::Copy(L"\0"); + //else + // GkFileSystem::source = GkStrings::Copy(source); + + if (source == 0) + GkFileSystem::source = std::wstring(L"\0"); + else + GkFileSystem::source = std::wstring(source); + + + + GkFileSystem::mode = mode; +} + +bool GkFileSystem::LoadFile(const wchar_t *fileName, void **fileData, unsigned int *fileSize) +{ + if (GkFileSystem::mode == FileSystemMode_Physical) + return GkFileSystem::LoadPhysicalFile(fileName, fileData, fileSize); + + if (GkFileSystem::mode == FileSystemMode_Virtual) + return GkFileSystem::LoadVirtualFile(fileName, fileData, fileSize); + + return false; +} + +void GkFileSystem::CreateVirtualFileSystem(const wchar_t* directory, const wchar_t* fileName) +{ + std::ofstream fileStream(fileName, std::ios::out | std::ios::binary); + + GkFileSystem::WriteVirtualFileSystem(directory, &fileStream); + + fileStream.close(); +} + +bool GkFileSystem::LoadVirtualFile(const wchar_t *fileName, void **fileData, unsigned int *fileSize) +{ + std::vector pathElements; + + int elementStart = 0; + int i = 0; + bool done; + do + { + done = *((char*)&fileName[i]) == 0; + + if ((fileName[i] == L'\\') || done) + { + int l = i - elementStart; + wchar_t *element = new wchar_t[l + 1]; + CopyMemory(element, &fileName[elementStart], l * sizeof(wchar_t)); + element[l] = 0; + pathElements.push_back(element); + elementStart = i + 1; + } + + i++; + } while (!done); + + + std::ifstream file(GkFileSystem::source, std::ios::in | std::ios::binary | std::ios::ate); + int pathElementIndex = 0; + + int dirLimit = (int)file.tellg(); + file.seekg(0); + + done = false; + while (file && !done) + { + wchar_t *vfn = GkFileSystem::ReadString(&file); + int size; + file.read((char*)&size, sizeof(int)); + + if (wcscmp(vfn, pathElements[pathElementIndex]) == 0) + { + pathElementIndex++; + dirLimit = (int)file.tellg() + size; + + if (pathElementIndex == pathElements.size()) + { + *fileSize = size; + *fileData = new char[size]; + file.read((char*)*fileData, size); + + done = true; + } + } + else + { + file.seekg((int)file.tellg() + size); + } + + delete vfn; + + if (file.tellg() >= dirLimit) + break; + } + + file.close(); + + + for (int i = 0; i < (int)pathElements.size(); i++) + { + delete pathElements[i]; + } + + return done; +} + +bool GkFileSystem::LoadPhysicalFile(const wchar_t *fileName, void **fileData, unsigned int *fileSize) +{ + // TODO: fix this static string + std::wstring fn(GkFileSystem::source); + fn.append(fileName); + + std::ifstream file(fn.c_str(), std::ios::in | std::ios::binary | std::ios::ate); + + if (!file) + return false; + + *fileSize = (unsigned int)file.tellg(); + *fileData = new char[*fileSize]; + + file.seekg(0); + file.read((char*)*fileData, *fileSize); + + file.close(); + + return true; +} + +wchar_t* GkFileSystem::ReadString(std::ifstream* fileStream) +{ + int l; + fileStream->read((char*)&l, sizeof(int)); + + wchar_t *result = new wchar_t[l + 1]; + fileStream->read((char*)result, l * sizeof(wchar_t)); + result[l] = 0; + + return result; +} + +void GkFileSystem::WriteVirtualFileSystem(const wchar_t* directory, std::ofstream* fileStream) +{ + std::wstring fullSearchDir(directory); + fullSearchDir.append(L"\\*"); + + WIN32_FIND_DATAW findData; + + HANDLE findHandle = INVALID_HANDLE_VALUE; + findHandle = FindFirstFileW(fullSearchDir.c_str(), &findData); + + if (findHandle == INVALID_HANDLE_VALUE) + { + return; + } + + int chunkSize, chunkSizePos; + do + { + if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) + { + if ((wcscmp(findData.cFileName, L".") != 0) && (wcscmp(findData.cFileName, L"..") != 0)) + { + std::wstring fullSearchSubDir(directory); + fullSearchSubDir.append(L"\\"); + fullSearchSubDir.append(findData.cFileName); + + GkFileSystem::WriteString(findData.cFileName, fileStream); + + chunkSizePos = (int)fileStream->tellp(); + fileStream->write((char*)&chunkSize, sizeof(int)); + + GkFileSystem::WriteVirtualFileSystem(fullSearchSubDir.c_str(), fileStream); + + int endPos = (int)fileStream->tellp(); + chunkSize = endPos - chunkSizePos - 4; + fileStream->seekp(chunkSizePos); + fileStream->write((char*)&chunkSize, sizeof(int)); + fileStream->seekp(endPos); + } + } + else + { + std::wstring fullFileName(directory); + fullFileName.append(L"\\"); + fullFileName.append(findData.cFileName); + + GkFileSystem::WriteString(findData.cFileName, fileStream); + + chunkSizePos = (int)fileStream->tellp(); + fileStream->write((char*)&chunkSize, sizeof(int)); + + GkFileSystem::WriteFile(fullFileName.c_str(), fileStream); + + int endPos = (int)fileStream->tellp(); + chunkSize = endPos - chunkSizePos - 4; + fileStream->seekp(chunkSizePos); + fileStream->write((char*)&chunkSize, sizeof(int)); + fileStream->seekp(endPos); + } + + } + while (FindNextFileW(findHandle, &findData) != 0); + + FindClose(findHandle); +} + +void GkFileSystem::WriteString(const wchar_t* s, std::ofstream* fileStream) +{ + int l = 0; + while (s[l] != 0) + l++; + + fileStream->write((char*)&l, sizeof(int)); + fileStream->write((char*)s, l * sizeof(wchar_t)); +} + +void GkFileSystem::WriteFile(const wchar_t* fileName, std::ofstream* fileStream) +{ + std::ifstream file(fileName, std::ios::in | std::ios::binary); + + const int bufferSize = 2048; + char buffer[bufferSize]; + + for (;;) + { + file.read(buffer, bufferSize); + fileStream->write(buffer, file.gcount()); + + if (!file) + break; + } + + file.close(); +} \ No newline at end of file diff --git a/COM380/Project5/GambleKit/Engine/OSSpecific/GkFileSystem.h b/COM380/Project5/GambleKit/Engine/OSSpecific/GkFileSystem.h new file mode 100644 index 0000000..8aa7fb6 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/OSSpecific/GkFileSystem.h @@ -0,0 +1,53 @@ +#pragma once + +#include "..\GkDefinitions.h" + +#include +#include + +enum FileSystemMode +{ + FileSystemMode_Physical, + FileSystemMode_Virtual +}; + +class GKDLLCLASS GkFileSystem +{ +private: + static class GKDLLCLASS Init + { + public: + Init(void); + ~Init(void); + } init; + + static std::wstring source; + //static wchar_t *source; + static FileSystemMode mode; + + static wchar_t* ReadString(std::ifstream* fileStream); + + static void WriteVirtualFileSystem(const wchar_t* directory, std::ofstream* fileStream); + + static void WriteString(const wchar_t* s, std::ofstream* fileStream); + static void WriteFile(const wchar_t* fileName, std::ofstream* fileStream); + + static bool LoadPhysicalFile(const wchar_t *fileName, void **fileData, unsigned int *fileSize); + static bool LoadVirtualFile(const wchar_t *fileName, void **fileData, unsigned int *fileSize); + +public: + GkFileSystem(void); + ~GkFileSystem(void); + + // Sets the source and mode of the virtual file system. + // If mode is FileSystemMode_Virtual, the source should be the name of the file, containing the virtual file system. Such file can be produced by the CreateVirtualFileSystem method. + // If mode is FileSystemMode_Physical, the source can be a root directory for the game's resources. Usually, this root directory is used to create a virtual file system from. + static void SetSource(const wchar_t *source, FileSystemMode mode); + + // Allocates memory in fileData and loads the requested file in it, returning the size of the file in fileSize + static bool LoadFile(const wchar_t *fileName, void **fileData, unsigned int *fileSize); + + // Writes the contents of a directory and all its subdirectories into a virtual file with the given name. The file can then be used as a virtual file system file. + static void CreateVirtualFileSystem(const wchar_t* directory, const wchar_t* fileName); +}; + diff --git a/COM380/Project5/GambleKit/Engine/OSSpecific/GkOSUtils.cpp b/COM380/Project5/GambleKit/Engine/OSSpecific/GkOSUtils.cpp new file mode 100644 index 0000000..8e7df9a --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/OSSpecific/GkOSUtils.cpp @@ -0,0 +1,201 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkOSUtils.h" + +#include +#include + +GkOSUtils::GkOSUtils(void) +{ +} + + +GkOSUtils::~GkOSUtils(void) +{ +} + + +void* GkOSUtils::GetMem(int size) +{ + return malloc(size); +} + +void GkOSUtils::FreeMem(void* data) +{ + free(data); +} + +void GkOSUtils::ZeroMem(void* data, int size) +{ + memset(data, 0, size); +} + +void GkOSUtils::CopyMem(void* destination, void* source, int size) +{ + memcpy(destination, source, size); +} + +int GkOSUtils::CompareMem(void* block1, void* block2, int size) +{ + return memcmp(block1, block2, size); +} + +long long GkOSUtils::GetPerformanceCounter() +{ + LARGE_INTEGER result; + + if (QueryPerformanceCounter(&result)) + return result.QuadPart; + else + return -1; +} + +long long GkOSUtils::GetPerformanceCounterFrequency() +{ + LARGE_INTEGER result; + + if (QueryPerformanceFrequency(&result)) + return result.QuadPart; + else + return -1; +} + +void GkOSUtils::ShowMessage(const char *text, HWND windowHandle) +{ + MessageBox(windowHandle, text, "Message", MB_OK); +} + +int GkOSUtils::GetScreenWidth() +{ + return GetSystemMetrics(SM_CXSCREEN); +} + +int GkOSUtils::GetScreenHeight() +{ + return GetSystemMetrics(SM_CYSCREEN); +} + + +BOOL CALLBACK MonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData) +{ + int *Count = (int*)dwData; + (*Count)++; + return TRUE; +} + +int GkOSUtils::GetNumberOfScreens() +{ + int Count = 0; + if (EnumDisplayMonitors(NULL, NULL, MonitorEnumProc, (LPARAM)&Count)) + return Count; + return -1;//signals an error +} + +DateTime GkOSUtils::GetDateTime() +{ + time_t currentTime; + time(¤tTime); + + tm localTime; + localtime_s(&localTime, ¤tTime); + + DateTime result; + result.day = localTime.tm_mday; + result.month = 1 + localTime.tm_mon; + result.year = 1900 + localTime.tm_year; + result.hour = localTime.tm_hour; + result.minute = localTime.tm_min; + result.second = localTime.tm_sec; + + return result; +} + +bool GkOSUtils::SetDateTime(DateTime &dateTime) +{ + SYSTEMTIME sysTime; + sysTime.wDay = dateTime.day; + sysTime.wMonth = dateTime.month; + sysTime.wYear = dateTime.year; + sysTime.wHour = dateTime.hour; + sysTime.wMinute = dateTime.minute; + sysTime.wSecond = dateTime.second; + sysTime.wMilliseconds = 0; + + return SetLocalTime(&sysTime) != 0; +} + +int GkOSUtils::GetSecondsElapsed(DateTime &since) +{ + //TODO + + DateTime now = GkOSUtils::GetDateTime(); + return ((now.hour - since.hour) * 60 + (now.minute - since.minute)) * 60 + (now.second - since.second); +} + +DateTime GkOSUtils::GetFileModificationDateTime(const wchar_t *fileName) +{ + DateTime result; + + HANDLE handle = CreateFileW(fileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); + if (handle != INVALID_HANDLE_VALUE) + { + FILETIME created, accessed, modified; + + GetFileTime(handle, &created, &accessed, &modified); + + FILETIME localFileTime; + FileTimeToLocalFileTime(&modified, &localFileTime); + + SYSTEMTIME localTime; + FileTimeToSystemTime(&localFileTime, &localTime); + + result.day = localTime.wDay; + result.month = localTime.wMonth; + result.year = localTime.wYear; + result.hour = localTime.wHour; + result.minute = localTime.wMinute; + result.second = localTime.wSecond; + } + CloseHandle(handle); + + return result; +} + +std::string GkOSUtils::GetApplicationName() +{ + TCHAR buffer[MAX_PATH]={0}; + GetModuleFileName(NULL, buffer, MAX_PATH); + return std::string(buffer); +} + +std::string GkOSUtils::GetApplicationPath() +{ + std::string applicationName = GkOSUtils::GetApplicationName(); + int nameLength = applicationName.length(); + char path[MAX_PATH]; + int pathLast = 0; + for (int i = 0; i < nameLength; i++) + { + path[i] = applicationName[i]; + if (path[i] == '\\') + pathLast = i; + } + path[pathLast + 1] = 0; + + return std::string(path); +} + +void GkOSUtils::Execute(const char *command) +{ + ShellExecuteA(GetDesktopWindow(), "open", command, NULL, NULL, SW_SHOWNORMAL); +} \ No newline at end of file diff --git a/COM380/Project5/GambleKit/Engine/OSSpecific/GkOSUtils.h b/COM380/Project5/GambleKit/Engine/OSSpecific/GkOSUtils.h new file mode 100644 index 0000000..274265c --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/OSSpecific/GkOSUtils.h @@ -0,0 +1,47 @@ +#pragma once + +#include "..\GkDefinitions.h" + +#include +#include + +struct DateTime +{ + int day, month, year, + hour, minute, second; +}; + +class GKDLLCLASS GkOSUtils +{ +public: + GkOSUtils(void); + ~GkOSUtils(void); + + static void* GkOSUtils::GetMem(int size); + static void GkOSUtils::FreeMem(void* data); + static void GkOSUtils::ZeroMem(void* data, int size); + static void GkOSUtils::CopyMem(void* destination, void* source, int size); + static int GkOSUtils::CompareMem(void* block1, void* block2, int size); + + static long long GkOSUtils::GetPerformanceCounter(); + static long long GkOSUtils::GetPerformanceCounterFrequency(); + + static void GkOSUtils::ShowMessage(const char *text, HWND windowHandle = 0); + + static int GetScreenWidth(); + static int GetScreenHeight(); + + static int GetNumberOfScreens(); + + static DateTime GetDateTime(); + static bool SetDateTime(DateTime &dateTime); + static int GetSecondsElapsed(DateTime &since); + + static DateTime GetFileModificationDateTime(const wchar_t *fileName); + + static std::string GetApplicationName(); + static std::string GetApplicationPath(); + + static void Execute(const char *command); +}; + diff --git a/COM380/Project5/GambleKit/Engine/OSSpecific/GkOpenGLWindowsForm.cpp b/COM380/Project5/GambleKit/Engine/OSSpecific/GkOpenGLWindowsForm.cpp new file mode 100644 index 0000000..a8ffe66 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/OSSpecific/GkOpenGLWindowsForm.cpp @@ -0,0 +1,87 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkOpenGLWindowsForm.h" + + +GkOpenGLWindowsForm::GkOpenGLWindowsForm(HGLRC renderContext) +{ + PIXELFORMATDESCRIPTOR d = + { + sizeof(PIXELFORMATDESCRIPTOR), // Size Of This Pixel Format Descriptor + 1, // Version Number + PFD_DRAW_TO_WINDOW | // Format Must Support Window + PFD_SUPPORT_OPENGL | // Format Must Support OpenGL + PFD_DOUBLEBUFFER, // Must Support Double Buffering + PFD_TYPE_RGBA, // Request An RGBA Format + 32, // Select Our Color Depth + 0, 0, 0, 0, 0, 0, // Color Bits Ignored + 0, // No Alpha Buffer + 0, // Shift Bit Ignored + 0, // No Accumulation Buffer + 0, 0, 0, 0, // Accumulation Bits Ignored + 16, // 16Bit Z-Buffer (Depth Buffer) + 0, // No Stencil Buffer + 0, // No Auxiliary Buffer + PFD_MAIN_PLANE, // Main Drawing Layer + 0, // Reserved + 0, 0, 0 // Layer Masks Ignored + }; + this->pixelFormatDescriptor = d; + + this->CreateContext(renderContext); +} + + +GkOpenGLWindowsForm::~GkOpenGLWindowsForm(void) +{ +} + +bool GkOpenGLWindowsForm::CreateContext(HGLRC renderContext) +{ + this->deviceContext = GetDC(this->handle); + if (this->deviceContext == 0) + return false; + + this->pixelFormat = ChoosePixelFormat(this->deviceContext, &this->pixelFormatDescriptor); + if (this->pixelFormat == 0) + return false; + + if(!SetPixelFormat(this->deviceContext, this->pixelFormat, &this->pixelFormatDescriptor)) + return false; + + if (renderContext == 0) + { + this->renderContext = wglCreateContext(this->deviceContext); + if (this->renderContext == 0) + return false; + } + else + { + this->renderContext = renderContext; + } + + if (!this->MakeCurrent()) + return false; + + return true; +} + +bool GkOpenGLWindowsForm::Present() +{ + return SwapBuffers(this->deviceContext) != 0; +} + +bool GkOpenGLWindowsForm::MakeCurrent() +{ + return wglMakeCurrent(this->deviceContext, this->renderContext) != 0; +} \ No newline at end of file diff --git a/COM380/Project5/GambleKit/Engine/OSSpecific/GkOpenGLWindowsForm.h b/COM380/Project5/GambleKit/Engine/OSSpecific/GkOpenGLWindowsForm.h new file mode 100644 index 0000000..2ef5efd --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/OSSpecific/GkOpenGLWindowsForm.h @@ -0,0 +1,24 @@ +#pragma once + +#include "..\GkDefinitions.h" + +#include "GkWindowsForm.h" + +class GKDLLCLASS GkOpenGLWindowsForm : + public GkWindowsForm +{ +public: + HDC deviceContext; + HGLRC renderContext; + + PIXELFORMATDESCRIPTOR pixelFormatDescriptor; + unsigned int pixelFormat; + + GkOpenGLWindowsForm(HGLRC renderContext = 0); + virtual ~GkOpenGLWindowsForm(void); + + bool GkOpenGLWindowsForm::CreateContext(HGLRC renderContext = 0); + bool GkOpenGLWindowsForm::Present(); + bool GkOpenGLWindowsForm::MakeCurrent(); +}; + diff --git a/COM380/Project5/GambleKit/Engine/OSSpecific/GkWindowsForm.cpp b/COM380/Project5/GambleKit/Engine/OSSpecific/GkWindowsForm.cpp new file mode 100644 index 0000000..18717cf --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/OSSpecific/GkWindowsForm.cpp @@ -0,0 +1,397 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkWindowsForm.h" + +#include + +const char* GkWindowsForm::FormClassName = "MyWindowsForm"; + +//std::vector GkWindowsForm::instances; +GkList GkWindowsForm::instances; + +LRESULT CALLBACK GkWindowsForm::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + GkWindowsForm* instance = GkWindowsForm::GetInstance(hWnd); + + if (instance != NULL) + { + switch (uMsg) + { + case WM_SYSCOMMAND: + { + switch (wParam) + { + case SC_SCREENSAVE: + { + if (instance->suppressScreenSaver) + return 0; + } + case SC_MONITORPOWER: + { + if (instance->suppressMonitorPowerSave) + return 0; + } + } + break; + } + + case WM_ACTIVATE: + { + // Minimization state + if (!HIWORD(wParam)) + { + instance->active=TRUE; + } + else + { + instance->active=FALSE; + } + + return 0; + } + + case WM_DESTROY: + { + if (instance->Close()) + { + GkWindowsForm::instances.Remove(instance); + + if (GkWindowsForm::instances.size == 0) + PostQuitMessage(0); + } + return 0; + } + + case WM_SIZE: + { + int width = LOWORD(lParam); + int height = HIWORD(lParam); + + instance->Resize(width, height); + + return 0; + } + + case WM_PAINT: + { + if (instance->Paint()) + { + ValidateRect(instance->handle, NULL); + } + + return 0; + } + + case WM_KEYDOWN: + { + int key = wParam; + + instance->KeyDown(key); + + if ((key >=0 ) && (key < 256)) + instance->keys[key] = TRUE; + return 0; + } + + case WM_KEYUP: + { + int key = wParam; + + instance->KeyUp(key); + + if ((key >=0 ) && (key < 256)) + instance->keys[key] = FALSE; + return 0; + } + + case WM_LBUTTONDOWN: + { + int x = GET_X_LPARAM(lParam); + int y = GET_Y_LPARAM(lParam); + + instance->MouseDown(x, y, GkWindowsForm::MouseButton_Left); + instance->mouseButtons |= GkWindowsForm::MouseButton_Left; + + return 0; + } + + case WM_LBUTTONUP: + { + int x = GET_X_LPARAM(lParam); + int y = GET_Y_LPARAM(lParam); + + instance->MouseUp(x, y, GkWindowsForm::MouseButton_Left); + instance->mouseButtons &= !GkWindowsForm::MouseButton_Left; + + return 0; + } + + case WM_RBUTTONDOWN: + { + int x = GET_X_LPARAM(lParam); + int y = GET_Y_LPARAM(lParam); + + instance->MouseDown(x, y, GkWindowsForm::MouseButton_Right); + instance->mouseButtons |= GkWindowsForm::MouseButton_Right; + + return 0; + } + + case WM_RBUTTONUP: + { + int x = GET_X_LPARAM(lParam); + int y = GET_Y_LPARAM(lParam); + + instance->MouseUp(x, y, GkWindowsForm::MouseButton_Right); + instance->mouseButtons &= !GkWindowsForm::MouseButton_Right; + + return 0; + } + + case WM_MBUTTONDOWN: + { + int x = GET_X_LPARAM(lParam); + int y = GET_Y_LPARAM(lParam); + + instance->MouseDown(x, y, GkWindowsForm::MouseButton_Middle); + instance->mouseButtons |= GkWindowsForm::MouseButton_Middle; + + return 0; + } + + case WM_MBUTTONUP: + { + int x = GET_X_LPARAM(lParam); + int y = GET_Y_LPARAM(lParam); + + instance->MouseUp(x, y, GkWindowsForm::MouseButton_Middle); + instance->mouseButtons &= !GkWindowsForm::MouseButton_Middle; + + return 0; + } + + case WM_MOUSEMOVE: + { + int x = GET_X_LPARAM(lParam); + int y = GET_Y_LPARAM(lParam); + + instance->MouseMove(x, y); + + instance->mouseX = x; + instance->mouseY = y; + + return 0; + } + + case WM_MOUSEHWHEEL: + { + int x = GET_X_LPARAM(lParam); + int y = GET_Y_LPARAM(lParam); + int deltaFactor = GET_WHEEL_DELTA_WPARAM(wParam); + + instance->MouseWheel(x, y, deltaFactor, WHEEL_DELTA); + + return 0; + } + } + + int result; + if (instance->HandleMessage(uMsg, wParam, lParam, &result)) + return result; + } + + return DefWindowProc(hWnd,uMsg,wParam,lParam); +} + +GkWindowsForm* GkWindowsForm::GetInstance(HWND instanceHandle) +{ + for (int i = 0; i < GkWindowsForm::instances.size; i++) + { + if (GkWindowsForm::instances[i]->handle == instanceHandle) + { + return GkWindowsForm::instances[i]; + } + } + + return NULL; +} + +bool GkWindowsForm::ProcessMessages() +{ + MSG msg; + + bool result = false; + + while (PeekMessage(&msg,NULL,0,0,PM_REMOVE)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + + result = true; + } + + return result; +} + +int GkWindowsForm::PerformFormLoop() +{ + MSG msg; + + bool done = false; + while(!done) // Loop That Runs While done=FALSE + { + if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) // Is There A Message Waiting? + { + if (msg.message == WM_QUIT) // Have We Received A Quit Message? + { + done = true; // If So done=TRUE + } + else // If Not, Deal With Window Messages + { + TranslateMessage(&msg); // Translate The Message + DispatchMessage(&msg); // Dispatch The Message + } + } + + if (!done) + { + for (int i = 0; i < GkWindowsForm::instances.size; i++) + { + GkWindowsForm::instances[i]->MainLoop(); + } + } + } + + return (int)msg.wParam; + + //while (GetMessage(&msg, NULL, 0, 0)) + // { + // TranslateMessage(&msg); + // DispatchMessage(&msg); + // } + + // return (int)msg.wParam; +} + +GkWindowsForm::GkWindowsForm(void) +{ + this->applicationInstance = GetModuleHandle(NULL); + ZeroMemory(keys, 256); + + this->left = 0; + this->top = 0; + this->width = 640; + this->height = 480; + this->caption = "Window Title"; + //this->windowMode = GkWindowsForm::WindowMode_Windowed; + this->windowMode = GkWindowsForm::WindowMode_FullScreen; + + GkWindowsForm::instances.Add(this); + //GkWindowsForm::instances.push_back(this); + + this->RegisterWindowClass(); + this->CreateFormWindow(); + this->ShowFormWindow(); +} + + +GkWindowsForm::~GkWindowsForm(void) +{ + this->DestroyFormWindow(); + //GkWindowsForm::instances.Remove(this); + //if (GkWindowsForm::instances.size == 0) + // PostMessage(this->handle, WM_CLOSE, 0, 0); +} + +bool GkWindowsForm::RegisterWindowClass() +{ + //LRESULT (CALLBACK GkWindowsForm::*memfun)(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); + //memfun = &GkWindowsForm::WndProc; + //this->ex.lpfnWndProc = *((WNDPROC*) (&memfun)); + + this->windowClass.cbSize = sizeof(WNDCLASSEX); + this->windowClass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; + this->windowClass.lpfnWndProc = (WNDPROC)GkWindowsForm::WndProc; + this->windowClass.cbClsExtra = 0; + this->windowClass.cbWndExtra = 0; + this->windowClass.hInstance = this->applicationInstance; + this->windowClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); + this->windowClass.hCursor = LoadCursor(NULL, IDC_ARROW); + this->windowClass.hbrBackground = NULL; + this->windowClass.lpszMenuName = NULL; + this->windowClass.hIconSm = NULL; + this->windowClass.lpszClassName = GkWindowsForm::FormClassName; + + return RegisterClassEx(&this->windowClass) != 0; +} + +bool GkWindowsForm::CreateFormWindow() +{ + long wndStyle = this->windowMode == GkWindowsForm::WindowMode_FullScreen ? WS_POPUP : WS_OVERLAPPEDWINDOW; + wndStyle |= WS_CLIPCHILDREN | WS_CLIPSIBLINGS; + + // Translate from client rect to window rect + RECT wRect = { this->left, this->top, this->left + this->width, this->top + this->height }; + AdjustWindowRect(&wRect, wndStyle, false); + + this->handle = CreateWindow(GkWindowsForm::FormClassName, this->caption, + wndStyle, + this->left, this->top, wRect.right - wRect.left, wRect.bottom - wRect.top, + NULL, NULL, + this->applicationInstance, + NULL); + + return this->handle != 0; +} + +void GkWindowsForm::ShowFormWindow() +{ + ShowWindow(this->handle,SW_SHOW); + //UpdateWindow(this->handle); + SetForegroundWindow(this->handle); // Slightly Higher Priority + SetFocus(this->handle); // Sets Keyboard Focus To The Window +} + +void GkWindowsForm::DestroyFormWindow() +{ + PostMessage(this->handle, WM_DESTROY, 0, 0); +} + +void GkWindowsForm::SetPosition(int left, int top) +{ + this->left = left; + this->top = top; + + SetWindowPos(this->handle, HWND_TOP, this->left, this->top, this->width, this->height, SWP_NOSIZE); +} + +void GkWindowsForm::SetSize(int width, int height) +{ + this->width = width; + this->height = height; + + SetWindowPos(this->handle, HWND_TOP, this->left, this->top, this->width, this->height, SWP_NOMOVE); +} + +void GkWindowsForm::SetStyle() +{ + SetWindowLong(this->handle, GWL_STYLE, WS_POPUP | WS_MINIMIZEBOX); + SetWindowLong(this->handle, GWL_EXSTYLE, 0); + //SetWindowLong(this->handle, GWL_STYLE, WS_POPUP); + //SetWindowLong(this->handle, GWL_EXSTYLE, WS_EX_APPWINDOW); +} + +void GkWindowsForm::SetActive() +{ + SetActiveWindow(this->handle); +} diff --git a/COM380/Project5/GambleKit/Engine/OSSpecific/GkWindowsForm.h b/COM380/Project5/GambleKit/Engine/OSSpecific/GkWindowsForm.h new file mode 100644 index 0000000..b969865 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/OSSpecific/GkWindowsForm.h @@ -0,0 +1,71 @@ +#pragma once + +#include "..\GkDefinitions.h" + +#include "..\Utils\GkList.h" +//#include + +#include + +class GKDLLCLASS GkWindowsForm +{ +public: + static const int WindowMode_Windowed = 0, + WindowMode_FullScreen = 1, + + MouseButton_None = 0, + MouseButton_Left = 1, + MouseButton_Right = 2, + MouseButton_Middle = 4; + + static const char* FormClassName; + + static GkList instances; + //static std::vector instances; + + + HINSTANCE applicationInstance; + WNDCLASSEX windowClass; + HWND handle; + + bool keys[256]; + int mouseX, mouseY, mouseButtons; + bool suppressScreenSaver, suppressMonitorPowerSave; + + bool active; + int windowMode; + int left, top, width, height; + char *caption; + + + GkWindowsForm(void); + virtual ~GkWindowsForm(void); + + bool GkWindowsForm::RegisterWindowClass(); + bool GkWindowsForm::CreateFormWindow(); + void GkWindowsForm::ShowFormWindow(); + void GkWindowsForm::DestroyFormWindow(); + void GkWindowsForm::SetPosition(int left, int top); + void GkWindowsForm::SetSize(int width, int height); + void GkWindowsForm::SetStyle(); + void GkWindowsForm::SetActive(); + + virtual bool GkWindowsForm::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam, int *result) { return false; }; + virtual void GkWindowsForm::MainLoop() { }; + virtual void GkWindowsForm::Created() { }; + virtual bool GkWindowsForm::Close() { return true; }; + virtual bool GkWindowsForm::Paint() { return true; }; + virtual void GkWindowsForm::KeyDown(int keyCode) { }; + virtual void GkWindowsForm::KeyUp(int keyCode) { }; + virtual void GkWindowsForm::Resize(int width, int height) { }; + virtual void GkWindowsForm::MouseMove(int x, int y) { }; + virtual void GkWindowsForm::MouseDown(int x, int y, int mouseButton) { }; + virtual void GkWindowsForm::MouseUp(int x, int y, int mouseButton) { }; + virtual void GkWindowsForm::MouseWheel(int x, int y, int deltaFactor, int delta) { }; + + static LRESULT CALLBACK GkWindowsForm::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); + static GkWindowsForm* GkWindowsForm::GetInstance(HWND instanceHandle); + static bool GkWindowsForm::ProcessMessages(); + static int GkWindowsForm::PerformFormLoop(); +}; + diff --git a/COM380/Project5/GambleKit/Engine/OSSpecific/GkWindowsMutex.cpp b/COM380/Project5/GambleKit/Engine/OSSpecific/GkWindowsMutex.cpp new file mode 100644 index 0000000..915145b --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/OSSpecific/GkWindowsMutex.cpp @@ -0,0 +1,36 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkWindowsMutex.h" + + +GkWindowsMutex::GkWindowsMutex(void) +{ + this->handle = CreateMutex(NULL, FALSE, NULL); +} + + +GkWindowsMutex::~GkWindowsMutex(void) +{ + if(this->handle != NULL) + CloseHandle(this->handle); +} + +bool GkWindowsMutex::Lock() +{ + return WaitForSingleObject(this->handle, INFINITE) == WAIT_OBJECT_0; +} + +void GkWindowsMutex::Unlock() +{ + ReleaseMutex(this->handle); +} \ No newline at end of file diff --git a/COM380/Project5/GambleKit/Engine/OSSpecific/GkWindowsMutex.h b/COM380/Project5/GambleKit/Engine/OSSpecific/GkWindowsMutex.h new file mode 100644 index 0000000..3df6e3e --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/OSSpecific/GkWindowsMutex.h @@ -0,0 +1,18 @@ +#pragma once + +#include "..\GkDefinitions.h" + +#include + +class GKDLLCLASS GkWindowsMutex +{ +public: + HANDLE handle; + + GkWindowsMutex(void); + ~GkWindowsMutex(void); + + bool Lock(); + void Unlock(); +}; + diff --git a/COM380/Project5/GambleKit/Engine/OSSpecific/GkWindowsThread.cpp b/COM380/Project5/GambleKit/Engine/OSSpecific/GkWindowsThread.cpp new file mode 100644 index 0000000..6a5e83b --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/OSSpecific/GkWindowsThread.cpp @@ -0,0 +1,50 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkWindowsThread.h" + + +DWORD WINAPI GkWindowsThread::ExecuteThread(LPVOID lpParam) +{ + GkWindowsThread *instance = (GkWindowsThread*)lpParam; + + int result = instance->Execute(); + instance->exited = true; + + return result; +} + +void GkWindowsThread::SleepX(int milliseconds) +{ + Sleep(milliseconds); +} + +GkWindowsThread::GkWindowsThread(void) +{ + this->handle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) GkWindowsThread::ExecuteThread, this, 0, &this->id); + this->terminated = this->handle == NULL; + this->exited = terminated; +} + + +GkWindowsThread::~GkWindowsThread(void) +{ + if(this->handle == NULL) + return; + + this->terminated = true; + + while (!this->exited) + Sleep(0); + + CloseHandle(this->handle); +} \ No newline at end of file diff --git a/COM380/Project5/GambleKit/Engine/OSSpecific/GkWindowsThread.h b/COM380/Project5/GambleKit/Engine/OSSpecific/GkWindowsThread.h new file mode 100644 index 0000000..8c8b932 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/OSSpecific/GkWindowsThread.h @@ -0,0 +1,26 @@ +#pragma once + +#include "..\GkDefinitions.h" + +#include + +class GKDLLCLASS GkWindowsThread +{ +public: + HANDLE handle; + DWORD id; + + bool terminated, exited; + + GkWindowsThread(void); + virtual ~GkWindowsThread(void); + + virtual int Execute() = 0; + + void Lock(); + void Unlock(); + + static void SleepX(int milliseconds); + static DWORD WINAPI ExecuteThread(LPVOID lpParam); +}; + diff --git a/COM380/Project5/GambleKit/Engine/Sound/GkSoundDevice.cpp b/COM380/Project5/GambleKit/Engine/Sound/GkSoundDevice.cpp new file mode 100644 index 0000000..8260963 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Sound/GkSoundDevice.cpp @@ -0,0 +1,67 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkSoundDevice.h" + +#include +#include + +void GkSoundDevice::Initialize() +{ + alutInit(0, 0); +} + +void GkSoundDevice::Close() +{ + alutExit(); +} + +GkSoundDevice::GkSoundDevice(int volume) +{ + this->volume = volume; +} + + +GkSoundDevice::~GkSoundDevice(void) +{ +} + +bool GkSoundDevice::IsPlaying(GkSoundSource *soundSource) +{ + ALenum state; + alGetSourcei(soundSource->handle, AL_SOURCE_STATE, &state); + + return (state == AL_PLAYING); +} + +void GkSoundDevice::PlaySource(GkSoundSource *soundSource) +{ + alSourcei (soundSource->handle, AL_LOOPING, AL_FALSE); + alSourcef (soundSource->handle, AL_GAIN, this->volume / 10.0f); + alSourcePlay(soundSource->handle); +} + +void GkSoundDevice::PlaySourceLooping(GkSoundSource *soundSource) +{ + alSourcei (soundSource->handle, AL_LOOPING, AL_TRUE); + alSourcePlay(soundSource->handle); +} + +void GkSoundDevice::PauseSource(GkSoundSource *soundSource) +{ + alSourcePause(soundSource->handle); +} + +void GkSoundDevice::StopSource(GkSoundSource *soundSource) +{ + alSourceStop(soundSource->handle); +} diff --git a/COM380/Project5/GambleKit/Engine/Sound/GkSoundDevice.h b/COM380/Project5/GambleKit/Engine/Sound/GkSoundDevice.h new file mode 100644 index 0000000..7904450 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Sound/GkSoundDevice.h @@ -0,0 +1,23 @@ +#pragma once + +#include "..\GkDefinitions.h" + +#include "GkSoundSource.h" + +class GKDLLCLASS GkSoundDevice +{ +public: + int volume; + + static void Initialize(); + static void Close(); + + GkSoundDevice(int volume = 100); + ~GkSoundDevice(void); + + bool IsPlaying(GkSoundSource *soundSource); + void PlaySource(GkSoundSource *soundSource); + void PlaySourceLooping(GkSoundSource *soundSource); + void PauseSource(GkSoundSource *soundSource); + void StopSource(GkSoundSource *soundSource); +}; \ No newline at end of file diff --git a/COM380/Project5/GambleKit/Engine/Sound/GkSoundSource.cpp b/COM380/Project5/GambleKit/Engine/Sound/GkSoundSource.cpp new file mode 100644 index 0000000..1390ae5 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Sound/GkSoundSource.cpp @@ -0,0 +1,87 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkSoundSource.h" + +#include +#include + +#pragma pack(1) +struct WAVFileHeader +{ + char chunkID[4]; // "RIFF" + unsigned int chunkSize; + char format[4]; // "WAVE" + + char subchunk1Id[4]; // "fmt " + unsigned int subchunk1Size; + unsigned short audioFormat; // 1 - PCM + unsigned short numChannels; // 1 - mono, 2 - stereo + unsigned int sampleRate; // 22050, 44100, etc. + unsigned int byteRate; // == SampleRate * NumChannels * BitsPerSample / 8 + unsigned short blockAlign; // == NumChannels * BitsPerSample / 8. The number of bytes for one sample including + unsigned short bitsPerSample; // 8, 16, etc. + //unsigned short extraParamsSize; //if PCM does not exist + //extraParams; //variable format + + //char subchunk2Id[4]; // "data" + //unsigned int subchunk2Size; +}; + +GkSoundSource::GkSoundSource(void) +{ + alGenSources(1, &this->handle); + + this->buffer = 0; +} + + +GkSoundSource::~GkSoundSource(void) +{ + this->UnloadBuffer(); + + alDeleteSources(1, &this->handle); +} + +void GkSoundSource::LoadFromMemory(void *wavData) +{ + ALenum format; + ALvoid *data; + ALsizei size, frequency; + + WAVFileHeader *header = (WAVFileHeader*)wavData; + int dataOffset = 20 + header->subchunk1Size; + while (memcmp((char*)&((char*)wavData)[dataOffset], &"data", 4) != 0) + { + dataOffset += *((int*)&(((char*)wavData)[dataOffset + 4])) + 8; + } + size = *((int*)&(((char*)wavData)[dataOffset + 4])); + data = (ALvoid*)&(((char*)wavData)[dataOffset + 8]); + format = header->numChannels == 1 ? header->bitsPerSample == 8 ? AL_FORMAT_MONO8 : AL_FORMAT_MONO16 : header->bitsPerSample == 8 ? AL_FORMAT_STEREO8 : AL_FORMAT_STEREO16; + frequency = header->sampleRate; + + this->UnloadBuffer(); + + alGenBuffers(1, &this->buffer); + alBufferData(this->buffer, format, data, size, frequency); + + alSourcei(this->handle, AL_BUFFER, this->buffer); +} + +void GkSoundSource::UnloadBuffer() +{ + if (this->buffer == 0) + return; + + alDeleteBuffers(1, &this->buffer); + this->buffer = 0; +} diff --git a/COM380/Project5/GambleKit/Engine/Sound/GkSoundSource.h b/COM380/Project5/GambleKit/Engine/Sound/GkSoundSource.h new file mode 100644 index 0000000..59e2444 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Sound/GkSoundSource.h @@ -0,0 +1,20 @@ +#pragma once + +#include "..\GkDefinitions.h" + +#include + +#include "..\Base\GkBase.h" + +class GKDLLCLASS GkSoundSource + : public GkBase +{ +public: + ALuint handle, buffer; + + GkSoundSource::GkSoundSource(void); + GkSoundSource::~GkSoundSource(void); + + void GkSoundSource::LoadFromMemory(void *data); + void GkSoundSource::UnloadBuffer(); +}; \ No newline at end of file diff --git a/COM380/Project5/GambleKit/Engine/Utils/GkList.h b/COM380/Project5/GambleKit/Engine/Utils/GkList.h new file mode 100644 index 0000000..b40a96c --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Utils/GkList.h @@ -0,0 +1,110 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#pragma once + +#include "..\GkDefinitions.h" + +#include "..\OSSpecific\GkOSUtils.h" + +template class GKDLLCLASS GkList +{ +public: + static const int ListIndex_NotFound = -1; + + int size, capacity; + T *values; + + T& operator [](int index) + { + return this->values[index]; + }; + + GkList::GkList(int capacity = 8) + { + this->capacity = 0; + this->size = 0; + this->values = 0; + + this->Resize(capacity); + }; + + GkList::~GkList(void) + { + delete this->values; + }; + + void GkList::Resize(int newCapacity) + { + T *newValues = new T[newCapacity]; + + if (this->size > 0) + GkOSUtils::CopyMem(newValues, values, this->size * sizeof(T)); + if (this->values != 0) + delete this->values; + + this->values = newValues; + this->capacity = newCapacity; + }; + + T GkList::Add(T value) + { + if (this->size >= this->capacity) + this->Resize(this->capacity * 2); + + this->values[this->size++] = value; + + return value; + }; + + T GkList::Insert(T value, int index) + { + if (this->size >= this->capacity) + this->Resize(this->capacity * 2); + + for (int i = this->size; i > index; i--) + this->values[i] = this->values[i - 1]; + + this->values[index] = value; + + this->size++; + }; + + bool GkList::Remove(T value) + { + int index = this->IndexOf(value); + if (index != GkList::ListIndex_NotFound) + { + this->RemoveIndex(index); + return true; + } + + return false; + }; + + void GkList::RemoveIndex(int index) + { + for (int i = index; i < this->size -1; i++) + this[i] = this[i + 1]; + this->size--; + }; + + int GkList::IndexOf(T value) + { + for (int i = 0; i < this->size; i++) + if (this->values[i] == value) + return i; + + return GkList::ListIndex_NotFound; + }; +}; + diff --git a/COM380/Project5/GambleKit/Engine/Utils/GkLogFile.h b/COM380/Project5/GambleKit/Engine/Utils/GkLogFile.h new file mode 100644 index 0000000..4d3bb9c --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Utils/GkLogFile.h @@ -0,0 +1,71 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#pragma once + +#include "..\GkDefinitions.h" + +#include "GkStrings.h" + +#include + +template class GKDLLCLASS GkLogFile +{ +public: + wchar_t *fileName; + int numRecords; + + GkLogFile(const wchar_t *fileName) + { + this->fileName = GkStrings::Copy(fileName); + + std::fstream file(this->fileName, std::ios::in | std::ios::out | std::ios::binary | std::ios::ate); + this->numRecords = (int)file.tellp() / (int)sizeof(T); + file.close(); + }; + + ~GkLogFile(void) + { + if (this->fileName != 0) + delete[] this->fileName; + }; + + void Write(T &record) + { + std::fstream file(this->fileName, std::ios::in | std::ios::out | std::ios::binary | std::ios::ate); + file.write((char*)&record, sizeof(T)); + file.close(); + + this->numRecords++; + }; + + bool Read(int recordIndex, T &record) + { + if (recordIndex >= this->numRecords) + return false; + + std::fstream file(this->fileName, std::ios::in | std::ios::binary); + file.seekg(recordIndex * sizeof(T)); + file.read((char*)&record, sizeof(T)); + file.close(); + + return true; + }; + + void Clear() + { + std::fstream file(this->fileName, std::ios::out | std::ios::trunc); + file.close(); + + this->numRecords = 0; + }; +}; diff --git a/COM380/Project5/GambleKit/Engine/Utils/GkMaths.cpp b/COM380/Project5/GambleKit/Engine/Utils/GkMaths.cpp new file mode 100644 index 0000000..878bbc8 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Utils/GkMaths.cpp @@ -0,0 +1,92 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkMaths.h" + +#include +#include +#include + +GkMaths::GkMaths(void) +{ +} + + +GkMaths::~GkMaths(void) +{ +} + +int GkMaths::Min(int a, int b) +{ + if (a < b) + return a; + + return b; +} + +int GkMaths::Max(int a, int b) +{ + if (a > b) + return a; + + return b; +} + +float GkMaths::Max(float a, float b) +{ + if (a > b) + return a; + + return b; +} + +int GkMaths::Trim(int x, int min, int max) +{ + if (x < min) + return min; + + if (x > max) + return max; + + return x; +} + +int GkMaths::Sign(int x) +{ + return x > 0 ? 1 : x < 0 ? -1 : 0; +} + +float GkMaths::Sign(float x) +{ + return x > 0 ? 1.0f : x < 0 ? -1.0f : 0.0f; +} + +float GkMaths::Abs(float x) +{ + return x >= 0 ? x : -x; +} + +int GkMaths::Abs(int x) +{ + return x >= 0 ? x : -x; +} + +int GkMaths::Random(int range) +{ + return rand() % range; +} + + +void GkMaths::Randomize() +{ + srand((unsigned int)time(NULL)); +} \ No newline at end of file diff --git a/COM380/Project5/GambleKit/Engine/Utils/GkMaths.h b/COM380/Project5/GambleKit/Engine/Utils/GkMaths.h new file mode 100644 index 0000000..56f6599 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Utils/GkMaths.h @@ -0,0 +1,23 @@ +#pragma once + +#include "..\GkDefinitions.h" + +class GKDLLCLASS GkMaths +{ +public: + GkMaths(void); + ~GkMaths(void); + + static int GkMaths::Trim(int x, int min, int max); + static int GkMaths::Min(int a, int b); + static int GkMaths::Max(int a, int b); + static float GkMaths::Max(float a, float b); + static int GkMaths::Sign(int x); + static float GkMaths::Sign(float x); + static float GkMaths::Abs(float x); + static int GkMaths::Abs(int x); + + static int GkMaths::Random(int n); + static void GkMaths::Randomize(); +}; + diff --git a/COM380/Project5/GambleKit/Engine/Utils/GkStrings.cpp b/COM380/Project5/GambleKit/Engine/Utils/GkStrings.cpp new file mode 100644 index 0000000..78a5080 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Utils/GkStrings.cpp @@ -0,0 +1,283 @@ +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// GambleKit Copyright (C) 2014 Ivan Donev +// +// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// contact: gamblekit@gmail.com +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#include "GkStrings.h" + +#include +#include "..\OSSpecific\GkOSUtils.h" + +GkStrings::GkStrings(void) +{ +} + + +GkStrings::~GkStrings(void) +{ +} + +struct FormatStringChunk +{ + bool isFormatter; + int start, length; +}; + +struct FormatStringChunks +{ + std::vector chunks; + int numFormatterChunks; +}; + +FormatStringChunks GetFormatStringChunks(const wchar_t *formatString) +{ + FormatStringChunks result; + result.numFormatterChunks = 0; + + FormatStringChunk chunk; + chunk.isFormatter = false; + chunk.start = 0; + + for (int i = 0; ; i++) + { + if (formatString[i] == L'{') + { + chunk.length = i - chunk.start; + + if (chunk.length > 0) + result.chunks.push_back(chunk); + + chunk.isFormatter = true; + chunk.start = i + 1; + } + else if (formatString[i] == L'}') + { + chunk.length = i - chunk.start; + + if (chunk.length > 0) + { + result.chunks.push_back(chunk); + + if (chunk.isFormatter) + result.numFormatterChunks++; + } + + chunk.isFormatter = false; + chunk.start = i + 1; + } + else if (formatString[i] == 0) + { + chunk.length = i - chunk.start; + + if (chunk.length > 0) + result.chunks.push_back(chunk); + + break; + } + } + + return result; +} + +std::wstring GkStrings::Format(const wchar_t *formatString, ...) +{ + wchar_t **parameters = (wchar_t**)((int)&formatString + 4); + + return GkStrings::FormatArray(formatString, parameters); +} + +std::wstring GkStrings::FormatArray(const wchar_t *formatString, wchar_t **parameters) +{ + FormatStringChunks chunks = GetFormatStringChunks(formatString); + + std::wstring result; + + int numChunks = chunks.chunks.size(); + for (int i = 0; i < numChunks; i++) + { + FormatStringChunk chunk = chunks.chunks[i]; + + if (chunk.isFormatter) + { + result.append(parameters[GkStrings::StringToInt(std::wstring(&formatString[chunk.start], chunk.length).c_str())]); + } + else + { + result.append(std::wstring(&formatString[chunk.start], chunk.length)); + } + } + + return result; +} + +std::wstring GkStrings::IntToString(int value, int base, int digits, const wchar_t defaultDigit) +{ + wchar_t s[256], result[256]; + _itow_s(value, s, base); + int intLength = wcslen(s); + int extraDigits = digits > intLength ? digits - intLength : 0; + int resultLength = extraDigits > 0 ? digits : intLength; + + for (int i = 0; i < resultLength; i++) + { + if (i < extraDigits) + result[i] = defaultDigit; + else + result[i] = s[i - extraDigits]; + } + + result[resultLength] = L'\0'; + + return std::wstring(result); +} + +std::wstring GkStrings::FloatToString(float value, int fracDigits, int intDigits, const wchar_t defaultDigit) +{ + int intPart = (int)value; + int fracPart = (int)((value - intPart) * pow(10.0f, fracDigits)); + + return GkStrings::Format(L"{0}.{1}", GkStrings::IntToString(intPart, 10, intDigits, defaultDigit).c_str(), GkStrings::IntToString(fracPart, 10, fracDigits, L'0').c_str()); +} + +int GkStrings::StringToInt(const wchar_t *string) +{ + return _wtoi(string); +} + +wchar_t *GkStrings::Copy(const wchar_t *string) +{ + if (string == 0) + return 0; + + int length = wcslen(string); + + wchar_t *result = new wchar_t[length + 1]; + memcpy(result, string, (length + 1) * 2); + + return result; +} + +char *GkStrings::Copy(const char *string) +{ + if (string == 0) + return 0; + + int length = strlen(string); + + char *result = new char[length + 1]; + memcpy(result, string, (length + 1)); + + return result; +} + +void GkStrings::Dispose(wchar_t **string) +{ + if (*string != 0) + { + delete[] *string; + string = 0; + } +} + +int GkStrings::GetLength(const wchar_t *string) +{ + return wcslen(string); +} + +int GkStrings::GetLength(const char *string) +{ + return strlen(string); +} + +int GkStrings::SubChar(const wchar_t *string, const wchar_t subChar) +{ + if (string == 0) + return -1; + + for (int i = 0; *string != 0; i++) + { + if (*string++ == subChar) + { + return i; + } + } + + return -1; +} + +int GkStrings::Compare(const char *string1, const char *string2) +{ + return strcmp(string1, string2); +} + +int GkStrings::Compare(const wchar_t *string1, const wchar_t *string2) +{ + return wcscmp(string1, string2); +} + +std::wstring GkStrings::FormatDateTime(const wchar_t *formatString, DateTime &dateTime) +{ + return std::wstring(GkStrings::Format(formatString, GkStrings::IntToString(dateTime.day, 10, 2).c_str(), GkStrings::IntToString(dateTime.month, 10, 2).c_str(), GkStrings::IntToString(dateTime.year, 10, 4).c_str(), GkStrings::IntToString(dateTime.hour, 10, 2).c_str(), GkStrings::IntToString(dateTime.minute, 10, 2).c_str(), GkStrings::IntToString(dateTime.second, 10, 2).c_str())); +} + +std::wstring GkStrings::IntToDecimalString(int value, int numFractionDigits) +{ + int fractionalFactor = 1; + for (int i = 0; i < numFractionDigits; i++) + fractionalFactor *= 10; + + return GkStrings::Format(L"{0}.{1}", GkStrings::IntToString(value / fractionalFactor).c_str(), GkStrings::IntToString(value % fractionalFactor, 10, numFractionDigits).c_str()); +} + +std::wstring GkStrings::FromShort(const char *chars) +{ + int length = GkStrings::GetLength(chars); + + wchar_t *wide = new wchar_t[length + 1]; + for (int i = 0; i < length; i++) + wide[i] = chars[i]; + wide[length] = 0; + + std::wstring result(wide); + + delete[] wide; + + return result; +} + +std::wstring GkStrings::FromShort(const char *chars, int start, int length) +{ + wchar_t *wide = new wchar_t[length + 1]; + for (int i = 0; i < length; i++) + wide[i] = chars[start + i]; + wide[length] = 0; + + std::wstring result(wide); + + delete[] wide; + + return result; +} + +std::string GkStrings::ToShort(const wchar_t *string) +{ + int length = GkStrings::GetLength(string); + + char *shortString = new char[length + 1]; + for (int i = 0; i < length; i++) + shortString[i] = (char)string[i]; + shortString[length] = 0; + + std::string result(shortString); + + delete[] shortString; + + return result; +} diff --git a/COM380/Project5/GambleKit/Engine/Utils/GkStrings.h b/COM380/Project5/GambleKit/Engine/Utils/GkStrings.h new file mode 100644 index 0000000..a3b91b5 --- /dev/null +++ b/COM380/Project5/GambleKit/Engine/Utils/GkStrings.h @@ -0,0 +1,35 @@ +#pragma once + +#include "..\GkDefinitions.h" + +#include + +struct DateTime; + +class GKDLLCLASS GkStrings +{ +public: + GkStrings::GkStrings(void); + GkStrings::~GkStrings(void); + + static std::wstring GkStrings::FromShort(const char *chars); + static std::wstring GkStrings::FromShort(const char *chars, int start, int length); + static std::string GkStrings::ToShort(const wchar_t *string); + static std::wstring GkStrings::Format(const wchar_t *formatString, ...); + static std::wstring GkStrings::FormatArray(const wchar_t *formatString, wchar_t **parameters); + static std::wstring GkStrings::IntToString(int value, int base = 10, int digits = 0, const wchar_t defaultDigit = L'0'); + static int GkStrings::StringToInt(const wchar_t *string); + static std::wstring GkStrings::FloatToString(float value, int fracDigits, int intDigits = 0, const wchar_t defaultDigit = L'0'); + static wchar_t *GkStrings::Copy(const wchar_t *string); + static char *GkStrings::Copy(const char *string); + static void GkStrings::Dispose(wchar_t **string); + static int GkStrings::GetLength(const wchar_t *string); + static int GkStrings::GetLength(const char *string); + static int GkStrings::SubChar(const wchar_t *string, const wchar_t subChar); + static int GkStrings::Compare(const char *string1, const char *string2); + static int GkStrings::Compare(const wchar_t *string1, const wchar_t *string2); + + static std::wstring GkStrings::FormatDateTime(const wchar_t *formatString, DateTime &dateTime); + static std::wstring GkStrings::IntToDecimalString(int value, int numFractionDigits = 2); +}; + diff --git a/COM380/Project5/GambleKit/GambleKit.vcxproj b/COM380/Project5/GambleKit/GambleKit.vcxproj new file mode 100644 index 0000000..59cc250 --- /dev/null +++ b/COM380/Project5/GambleKit/GambleKit.vcxproj @@ -0,0 +1,196 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {E6093060-EA31-4FF3-9230-2E9CDF34C694} + Win32Proj + GambleKit + + + + Application + true + MultiByte + v110 + + + Application + false + true + MultiByte + v110 + + + + + + + + + + + + + true + $(SolutionDir)lib\DevIL;$(SolutionDir)lib\AL;$(SolutionDir)lib\GL;$(SolutionDir)lib\vld\Win32;$(LibraryPath) + $(SolutionDir)include;$(SolutionDir)\include\AL;$(IncludePath) + + + false + $(SolutionDir)include;$(SolutionDir)\include\AL;$(IncludePath) + $(SolutionDir)lib\DevIL;$(SolutionDir)lib\AL;$(SolutionDir)lib\GL;$(LibraryPath) + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + NotSet + true + glut32.lib;DevIL.lib;ILU.lib;ILUT.lib;OpenAL32.lib;alut.lib;vld.lib;%(AdditionalDependencies) + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + NotSet + true + true + true + glut32.lib;DevIL.lib;ILU.lib;ILUT.lib;OpenAL32.lib;alut.lib;vld.lib;%(AdditionalDependencies) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/COM380/Project5/GambleKit/GambleKit.vcxproj.filters b/COM380/Project5/GambleKit/GambleKit.vcxproj.filters new file mode 100644 index 0000000..81c7764 --- /dev/null +++ b/COM380/Project5/GambleKit/GambleKit.vcxproj.filters @@ -0,0 +1,349 @@ + + + + + {3f4469b0-7c4f-4209-8d86-c635a412f491} + + + {abe5ace2-6fa2-49f8-a75c-7bdd1cb2d702} + + + {29a2bff4-0ad9-4ebd-9ab0-421c1bc47fd8} + + + {69d9be45-fad1-4dcc-8ae6-be36db0824c4} + + + {4a352382-1872-44d4-b20b-6c87fc2a960e} + + + {c231860d-988c-4cc2-a671-2ec8edac93d1} + + + {afe7aa3e-baf9-4e45-a55c-e4ca52abcc94} + + + {e661e87d-850a-490c-a3d2-24a5be94b765} + + + {82d32f9e-c1f2-4642-8d53-c23c76e52fc9} + + + {39edfe35-394e-49b3-a13c-efebc50f322e} + + + {490b83e7-4287-4fc8-a4e4-6095eb0b8fc0} + + + {9f15391c-49db-4601-8f29-c24eb9bf0ea4} + + + {f42eacd7-d7ed-4ef6-9543-605970a76838} + + + + + CustomGameLogic\Pages + + + CustomGameLogic + + + CustomGameLogic + + + CustomGameLogic + + + Engine\Utils + + + Engine\Utils + + + Engine\Sound + + + Engine\Sound + + + Engine\OSSpecific + + + Engine\OSSpecific + + + Engine\OSSpecific + + + Engine\OSSpecific + + + Engine\Graphics + + + Engine\OSSpecific + + + Engine\OSSpecific + + + Engine\Graphics + + + Engine\Graphics + + + Engine\Graphics + + + Engine\Graphics + + + Engine\Game + + + Engine\Game + + + Engine\Game + + + Engine\Game + + + Engine\Game + + + Engine\Game + + + Engine\Game + + + Engine\Game + + + Engine\Game\ReelModels + + + Engine\Game\ReelModels + + + Engine\Game\Entities + + + Engine\Game\Entities + + + Engine\Game\Entities + + + Engine\Game\Entities + + + Engine\Game\Entities + + + Engine\Game\Entities + + + Engine\Game\Entities\Buttons + + + Engine\Game\Entities\Buttons + + + Engine\Game\Entities\Buttons + + + Engine\Game\Entities\Bindings + + + Engine\Game\Entities\Bindings + + + Engine\Game\Entities\Bindings + + + Engine\Game\Entities\Bindings + + + Engine\Game\Entities\Bindings + + + Engine\Game\Entities\Bindings + + + Engine\Game\Entities\Bindings + + + Engine\Base + + + Engine\Base + + + Engine\Game + + + + + CustomGameLogic\Pages + + + CustomGameLogic + + + CustomGameLogic + + + Engine\Utils + + + Engine\Utils + + + Engine\Utils + + + Engine\Utils + + + Engine\Sound + + + Engine\Sound + + + Engine\OSSpecific + + + Engine\OSSpecific + + + Engine\OSSpecific + + + Engine\OSSpecific + + + Engine\OSSpecific + + + Engine\OSSpecific + + + Engine\Graphics + + + Engine\Graphics + + + Engine\Graphics + + + Engine\Graphics + + + Engine\Graphics + + + Engine\Game + + + Engine\Game + + + Engine\Game + + + Engine\Game + + + Engine\Game + + + Engine\Game + + + Engine\Game + + + Engine\Game + + + Engine\Game + + + Engine\Game\ReelModels + + + Engine\Game\ReelModels + + + Engine\Game\Entities + + + Engine\Game\Entities + + + Engine\Game\Entities + + + Engine\Game\Entities + + + Engine\Game\Entities + + + Engine\Game\Entities + + + Engine\Game\Entities\Buttons + + + Engine\Game\Entities\Buttons + + + Engine\Game\Entities\Buttons + + + Engine\Game\Entities\Bindings + + + Engine\Game\Entities\Bindings + + + Engine\Game\Entities\Bindings + + + Engine\Game\Entities\Bindings + + + Engine\Game\Entities\Bindings + + + Engine\Game\Entities\Bindings + + + Engine\Game\Entities\Bindings + + + Engine\Base + + + Engine\Base + + + Engine + + + + + + + + + + \ No newline at end of file diff --git a/COM380/Project5/GambleKit/Intruduction.txt b/COM380/Project5/GambleKit/Intruduction.txt new file mode 100644 index 0000000..66a076a --- /dev/null +++ b/COM380/Project5/GambleKit/Intruduction.txt @@ -0,0 +1,33 @@ +This is the first publicly released version of the Kit and its documentation is still scarcely written. + +1. GambleKit's ideology + + GambleKit aims at a declarative style of programming gambling games, and especially slot machine simulations. + The basic idea and guiding point is to emphasize on the declarative nature of the api, so that much coding and tedious work is saved by declaring the entities and models of the game, most often at its initialization, on game pages' creation. + As at creation time the environment is still relatively static, logic should be more plainly covered and readable after time, plus this greatly reduces the per-frame code, leaving mostly the higher level operations. + Because resources for woring on the kit are scarce, access to most, if not all parts of the entities is also provided. This leaves the ability to make custom changes at runtime and modify the parts of the game if required. + Just as any real-time rendering application, a game which uses GambleKit will need to process its entities at every frame. Aside from the declarations, the per-frame code is the second half of the general programing of a game with the kit. + + +2. Organization + The object, which is highest in a game's logic is an instance of the "GkGame" class. It manages all the game's screens, or "pages", and handles loading of resources. Normally, there would be one such object. + GambleKit is organized into "pages". That is because a game may have different screens, each with separate logic - for example a main screen with reels, or one with a bonus, or a menu, or whatever. These screens are represented by pages - instances of the GkGamePage class. Each page has its own visual and logical layout, and how one page is built does not affect another. Only one page can be rendered at a time. + Each page is constructed out of Entities. Entities are, in most part, visual objects like animated images, texts, buttons, reels. An entity can also be not visible - one such are the bindings. Basically, the entities are what constructs most, if not all of a page. The whole game might be constructed entirely of them by adding them to their page in the correct manner. A game page automatically handles the behaviour of its entities and they might run fairly well without any intervention from the programmer, aside from declaring them. + + Loading of resources is handled by the GkGame object. Each page of the game can and should separately load whatever resources it needs, regardless of other pages. The resources manager of GkGame handles the loading and prevents for doubling resources in memory. This way, a page is added or removed from GkGame and the exactly the right resources will be loaded with no overweight and no resource misses. Simply load in every page exactly and only what it requires. Releasing of the resources is automatically done when the GkGame object is destroyed. + There are a few methods for loading resources. Among their parameters, two can always be found: a "fileName" and a "virtualFileName". Because GambleKit can load its resources from a virtual file system contained in a single file, "fileName" is the name of the file containing the virtual file system. "virtualFileName" is the name to the actual file resource - either in the virtual file system, or in the real one, depending on how the file system management is set. + "AcquireAnimatedTexture" method loads a single image file and depending on the given parameters, may split it into pieces to form an animation + "AcquireAnimatedTextureFromMultipleFiles" method loads a number of image files, making animation out of each of them. The name of the files should be formatted with a five-digit index, giving the frame number, say "image_00000.png", "image_00001.png", "image_00002.png" and so on. With the latter example, the "virtualFileName" parameter should be given as "image_{0}.png", where the {0} denotes where the index is. + "AcquireAnimatedFontFromMultipleFiles" method loads an animated font. Like "AcquireAnimatedTextureFromMultipleFiles", it loads multiple images in the same manner, but it uses each image as a letter for the font, while the "numFrames" parameter determines in how many pieces, or frames, to split each image to animate it. + "AcquireSoundSource" method loads a single sound file in the raw PCM wav format and creates a sound source, which can be played. + +3. Entities + Entities will be described in a later release. I am lone, tired and hungry, so please forgive my lack of will for now. + +4. Demonstration code + Starting with "main.cpp" we have a standart entry point for the application. Some debug memory leak detection enabling, some initializers and then the mainWindow and the loop processing it. + Looking at the "MainWindow" class, there is its constructor, where a GkGraphicsDevice, a GkSoundDevice and a CustomGame objects are created. There is the MainLoop, where every frame is processed and rendered. There are the MouseDown and MouseUp method, where mouse events are fetched to the game object. And there are some other minor routines. The GkWindowsForm class GKDLLCLASS have a couple of methods which can be overridden when appropriate. The most interesting part here is the creation of CustomGame, which is, after all, the game. + In "CustomGame" class GKDLLCLASS there is not much code to behold - creation of a log and then the addition of a new GkGamePage - the "MainPage" to the game. + Finally, having a grasp of some real-deal code in the "MainPage" class, there's the actual difinition of the entities of the page in its constructor and some actual per-frame custom processing in its "Process" method. + In the constructor, the page is build through its "AddEntity" method which, just as its name promises, adds a GkGameEntity object to the page, and returns it so that it can eventually comfortably be assigned to a variable if needed. Most of the entities' constructors have many parameters with default values in order be easier to declare and add in one line. The buttons for example may not have only one or two animations for faces, while a GkGameAnimation's constructor may be given paramters such that flip the image, stretch it, override the animation framerate, make it inactive of invisible. + The page's "Process" method is called before the rendering of every frame. It is a convenient place to perform real-time routines, implement custom logic and program some additional dynamic to the game page. Here, the buttons are handled in regard to the motional state of the reels. Buttons are created with such parameters, that automatically renders them inactive, if their state was not asked for, which is why no logic has to be implemented for this task. Even though the "credits" member variable is changed instantly, the text for credits changes smoothly, because it was bound to a GkGameWinningCounter counter entity. \ No newline at end of file diff --git a/COM380/Project5/GambleKit/ReadMe.txt b/COM380/Project5/GambleKit/ReadMe.txt new file mode 100644 index 0000000..2c1fe7c --- /dev/null +++ b/COM380/Project5/GambleKit/ReadMe.txt @@ -0,0 +1,19 @@ +IMPORTANT: To run applications built with GambleKit, you'll need to have installed OpenAL and MSVS Redistributables, which are included in the "Prerequisites" folder + +GambleKit is a free open-source engine for easy building of slot machine gambling games with reels and GUI management. + +It relyes basically on declarative programming style, so the programmer needs simply to declare, for example at creation time, the basic layout and behaviour of the game, and then leave the game flow, requiring as little additional intervention as possible. +Of course, a game can hardly go without any need of customizing the designed behaviours and it can be customized at will, having direct access to all its elements. +The goal of GambleKit is to provide the base for this kind of games, the ability to handle common tasks declaratively with one or just a few lines of code, to leave only the very custom part of code for implementation by the programmer. +The basic idea being to code the very game logic and visuals immediately from the start and do it with as few lines of code as possible. +Even currently being implemented only for windows, GambleKit has little coupling with the OS and uses cross-platform tools with the prospect of easily increasing the number of supported platforms. + +For technical info and guide, please refer to the "Introduction" file. +For a brief demonstration of the api, look at the "CustomGameLogic" directory in the solution. + +GambleKit uses the following software products: +-OpenGL for its graphics http://www.opengl.org/ +-OpenAL for its sound http://openal-soft.org/ +-DevIL for image files decoding http://openil.sourceforge.net/ + +You can contact me at gamblekit@gmail.com \ No newline at end of file diff --git a/COM380/Project5/GambleKit/version.txt b/COM380/Project5/GambleKit/version.txt new file mode 100644 index 0000000..a838ebb --- /dev/null +++ b/COM380/Project5/GambleKit/version.txt @@ -0,0 +1,12 @@ +v 0.891 +Added a "Gk" prefix to all GambleKit class names. Still considering using namespece instead. +Added methods for creating a file containing a virtual file system. Changed the VirtualFileSystem class to GkFileSystem. Added functionality to dynamically change the file system mode to physical or virtual and to respectively set a root dir or a virtual file system file. +Removed the first parameter from the four Acquire methods of Game (now GkGame) +Made preparations for making the project as a library. + +For the next version: +Make GambleKit as a dll. After that, It will still be available to use directly from the source. +New examples +Settings manager + +v 0.89 - First release \ No newline at end of file diff --git a/COM380/Project5/GameData/Background.png b/COM380/Project5/GameData/Background.png new file mode 100644 index 0000000000000000000000000000000000000000..bd0a2527eb3f172726b5dcd821314406460c36d7 GIT binary patch literal 228425 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͡~Kv`K&WyA{xa$| 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

V&ycMwlLA75Ab4^zz_vR)=Lh~J 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

~#p_s&8*phRH2&4m&+wa;ora}9u@wH{k9OVr zrxdf{nngJm(M(+@_U+=UV@-ty);xVz^4Gh)tN#6}iTF#b?Oj)Fwv{bQ%YAx?W^MvY zBwTt}@&3ENGIm$)e(jE{dTI#=Ib%?O@ z{5GT6m$k8qWe;lLmsdhXM_;<&|B zeiHe>MruW^I2-eJXGpoxhA_z|5^@dpoH4#YuDom}*_O?NaSB^>)t@;`KEA*A(I?!i ziDM3sAUA6LF}l!&HtXzOIde4Ny|D3f-722IXxO>{qjufPu5XRzydhQ;U7ZQSH#P-N z{8avAyPw89646^A5-IEbxRfA*M%VBq5}FhRc8ewYw9d{!t7P>)PxtmtmyM@eK@iSq z5&tuZUUv11PD34t(voGhtlk{p7Ta-u#z}&%&zgGk^zo=33T8jWn($-<#8~0*ZICLz zas<~}+ui-Ecth5V3afo4uCnpWJU8TRRvWO&)jF`51#Yr#9arHcw*BD9BE!tXQ7E6l z^|{bTCDqzWzsu*>9>0CN@{v?d^ODLcD_nLB60b-F$VS`xCcamNxs1Jk zV=1|*Y5O0tibImOA#>@or8eG(BZUH=;)eNm0{Z{_07|UVKL(N!u5Mkcc8Ni{7#+w0 z=fi*h`b1#EubPu`<0;Nb{}ugVIE{`CQZOK$)8jkvDl%7I=#Xk9e1Mv3Dh33zW8Z!K zDmR0(kU}jsm&z4g;LSd8_MJizT=-J){u-H;73nna{vg^lk?-)B_I_lKftNi_F+TmU zLA`&f?0@Z)40UPTmVTdS+ruB}$)Y?HCfgC}$ZEf=m{FYPjJxjua#XtoICrdrp(wfK zR$tNXBoHg?J2Wc25a+-0&$r(=JoEP(gesR;j0HekMEA65KpdxU!jJh@ zL}0~7Wu%1SoScZN5hDbqB^fseg`|5%&s?zr-y`sSHr^M znc|badt-I0=>rL6 zzlyv{jP=#|s&vnrBSws!ABr?7C~Lj-F5ckR_b1*@bIh%B=5UrrF=OYPohY?V)2Xis zj`{x%FLwJSCx{4H3Sbr|!}f2e;Ikn5WYl)^<_=-&jK=JjXvWY=d)3x?ukv|0_b&@f z9De&n*?6<4wWyezQUUjn7KpyfXt84OxHTh7?61N0?lguvcyLM_`*0X|2u$rP0rk5%gCZLm|KSMN1v zU!xL=)e`$nU6pjy;XFSRP63G~f_x49D($o-MEPjr`p9q@;s7nQ)%|(JqoVR#L=a;?m?0HSc!BE}i`z_WGKzceS88h_cU!hxuSM zrte#waD6DQXG+I2e{B8Mz~-vs-lSPwJ$$>>IF_&QfS}*s)|Ck37V+^_7Hwry~K8%*94g&KnI4C2aJc z?-O?s)$(x25f2(2MNHR6O@MA_o^l=g#iLK3{aDHW= z>j*W$NO3ujqC3+4P(yPI;b^bCLIsKUEZ@jFH1$Xx+^Pz8`Ou=#klfOTnjp9xU1!<_ z^p#&$3xhe6CPH~_LIc{dj$T{98eO0GKk$VeEpm5fiL1UXf+@2Ve|G01uKSZu3D`JH z0y6>nId{u0V%m_ZZploY8l>i)h%X$v`iU1#>^e2J(k3Gjwe|`v zcmwk6jFVCXrwA1a^i>qcMANZ-5=mwnip`n9%5^>p78;ePKWnImhpyxL_N?ro0;3$r z9PesvA_MCrQ}27v#puDlPfhsbS3UMk#-hZMuNSVR+5So$tx>>tq9l~Np>zM(lehEm zO`h`1KfAHkJRByJ-O3;*|D6t#ggzvFMx3AQa$%Rnuqzi2rY{^5Z#$99394KD0jP)T z2JY7hVIA+6k{bZUFqB}bo|Isc8r*SF*;g1-0XIaQ&$GCI(@pEBk;I0+hgE^0< zEH88)NFhoOTu9hy9-(J9Dt)lNh(*~JUI6mERSXBq0UB|fut;4=P|C_BwP zoI^fQFPh6xGDK5DN{*&bfLSI$b7k~{0+%Rrxulbs3GbnLsA^|+nXWY&y#ox}1;f0-(W7;&p5Po8U@b6iq@Z)9xACTdoTJhjhLx-rQ@T!qQrT;I{NULQ(6oPc~{ ziA5jqI$T#Ni0?76w|5;0+14~CAUB^qg(Z^(j6n*5M4r2U-!uq<-bLTBlIiop$PY`zSN=S!EBu5mL1Gripe8-uRF%q%HUd3_tS@#X{ZfNP>_QO8~Btp;x{G z65fKG0~XF$^<+K?Al_WwzXhUen+JE#g-hfEqmCqOSt46+Rfchql7UaLre^UjaGg5& zcBksxac3a$RK4sVcMoU4R#T9lA%f#VZgotlY$c66%UUp-?#7C;{(P?INQNKa{4JO* z0l#tjw#zTiKwSMs4!i#`wa=Gc=*Knn(eP(ghaXbHNB-%zJGco{9Hhxe@(-QIUtspRxhP?_#jo7+EZ>FoYRa!t%nAjcVeX#r+v_Cm z3dg)fy}6~m9q{m;cPnPxS%CaQx2&6ut`FI2L zbB&oK9qVJXgL96Vhn~!_DUNOJEYudvmU&Way$BO|?={cX7yDb79L^v6A7iL7BkXgQ zQ*W?)**Q?)QVZD|%ZfM=MHJs66HJk*NV zZm4%TZw*0r-B0Z?=FeY+-dLEr15JWt2&fdA2_zE}*61xR-z2LwwvBl0tCE~kQ?gZ54agCx5Icl_RC z-$O1#GcS9(if_=p`5*3xvw|LIt|Jk5^}*o#5*Y95IJG2hc%3NkhxvTxh$m9^51;oo zWnJBTk_K;giJQ9s=M27v@nEkS>cvRED0n*Ja_z^7M|@Fp&N=Uo0*kK(s$q z96n!gocVV-8SJAnktzfU$LaHs_tY+0PO*wfbo(+$9OlZwCL=1c*)f7`KzK&hZsUn` z5wixfgmHCINaciUG^O|{IADtpb9cuqVphU^_5n%GC~q$uv8rz*$%X#=qA#uo@pqOf z-Fwvf;PH4~zSk>Tu9_t4={$hdA?c3>i_r0?w#2c~)O_B|${ zEF#9(T(5VM-HlAU@{VJ<5z7^{$ER+Ku_S|b>|c?jhm%4;qJ_MF&Cd@|BMOK)OuF(e zH3|{qHB%v34?>V@I;+hXZHZB~XiHiccKYwhhv1U; zrzmzqD;0t-t&~by=)4B!n&kb9q$LSox1O$0O-*G4Wv!%hs7K{z;wR2gG z_xyIGb2cC7A>t%t;_~U!)bZ`GC&lRJt3pTxXxbR9>LIGK9ebKr@miwImt!qOV>WtS zO}q+zpNzzPMEO+nD^iieZA4GOEXB(`jQ!1ggUd=6yMT0OPE+G8p+-`JeRmc6j?KMf zgSITjQRE`$5ZoHi7{}hMWZ%PdC6bw+mLjhD%%64{)7iM36_1HQ$PLPI3pMW8PfV3s zuP1R&ClvBJZri8b*O{{BvL;L}pjU6e)1|3ej&R?^ID2ovOFNWt^*~=gAo`^opf2&T z9kV^p>`Reu&&w#C(aQ@}lF9g~=!*&{c%9wlebXCo;~Lb{KVkm18@w4x7nT0jwZf`(@P^KVe@HsR=tQ&J_EQf3|AnTREWR5OH9i4 z(JbgZ(Sdt#IH^&+9Lt|(Ry&?P9mfdyNT@0@jJ+o2#vyR7^SPz0v&2I}+Yhg(q}qr+ z_6l)%EVLt|Q5Ww9Ix4^VgZt(t^_XN*b%QY%itTL-LvN$BJ9w-=kE?0WAfa6HBFfpm zR9qo9w+QU`O`F~HIGJHdBSg&ejUc!ep3E$nOXh|bC9{x37@tleoDmp0@Y zmBucwQ!676HPdEg?EfI&s{XQJ?1TqdH$I#GNIV&6rC%ap@_p(Q>yup721*1D6XEr> zx{>MD6SP=RqpS%|oHyr{_=s7_#)gb|P$C?BWo0h!Vl2dagbg<2y#rjBrTMjdwNFjt zi=}ou{}V#YOOedZ#vx8%-E&Gc`YRJwFmzI{8f}^jHhEG&RbNoYI^K2Jr5SnHj?nBOiS=KA}5QzKf|0;^ztql)B!q`)>_311B#BAOl`!8hT4bK*$&2-nLwjmEyr zUs1bd_RKK@%Ex`}qMf3oQwYv%e}K4eJJgj{kQXwBJDF_SgfzMPGC(TC&J_MT1gRgn zFYCXfuiSnsG-MjTNi+RWd#~bz^jchhKW?1;(vidYx{L6p**uS$XAfg)_3ioeEfIho!@WLzX=`oy0{a%QoU|nt{ab+viX=l*1vlqJMF)iUASANd2ST}ZE9~Ph3k6Gq*nIstouCQ-;t?xRr-20Z|y>c z0i=Rv@p`BX-WzYU(k}{RFfR1EFDYL*sJlmt66Ke$sv0{)!I2&BRX^f-p7*5XE40YkJuH))MyN z*VU3h=)o1bzZ4Dd$(Gy9|0#Y3KwmYv$r#Vd@0*j2=ZAW6aiP2y8?3;)$+3DSC<`2i z{sr)FF%2krJICl_MI+N5WZVevGtE@=Jcq|i(RU1vL~A@pRCsUAINs8KlnUAeR+osn z%)KH>E5)S7j69;ZE2)s7WPidwpr_t>xUnbNe2#W;meL~q52MbHUd6=&!F~HtxC}x{ zFTPY<_CP<$&fAMTZykRO>iRkO{2$W>G~6-r?Hgo!M%+Nio3aeb&gyeStA=yey2@RbB?z;#-ad5b9{8^P&xtY`XYeCxOM2q z2h5M884AB)h!yH=K1a}3v$+RAwLTnhT#wqO#42Jr_U=s>xPZKV`<-`#2SxvB?k=MV zs6`H0dnuo#^s;sN8xidcP1O!pm3bFdWn|@0t+a$m96O_sXwEc`#J1sH1-}ails(wa zZDEdmg8jf!`W3+nZurxMW*-{{Vka3w6#j+6Dr5AQp9xCpx6Dj=Wg+pdF2W(U9FV|D zozCTvm_eL30CGo-1m*C8Zg8b={Lb<`CzcPtMzw{sX(A~0 zAsh&Hfyf_wA$`azu8F{sL*`;2;!TQ!e89NuN z`4_j?{&MgfcIpr0W8=jEC_RG5^rUeKW!#ZQ9T-BU1g=yIo6-QjcSah4PDB{o3~?__r^k z6?Hu>;fkerhkF>-e+F5)MykT6UjRGWC~pG`1DQb&-kFIH-6Y>X9z-q{XH7?TiQW~I z5OnMM7N-Cv=p77tCDg&%umQ;dQBh$_X7+`0=+n|-o{+%FD>&03OG`=m`j9$!TWvuh z-&HytYJaPl6-aSC(xRY!)N;sJE5xjvU|4rWhh(#W5V=@DKe8OfgFAW|@!k(k zl^@m>0BobWX)XKCX@E4yHj$}3#xuJQfaRzrWD#bP(cmOBydW?~x2ZAuBi7y9H0p2^ zVZqXJ6$bjBcPwBsUm|5==mElD10sAt9CN;?aYAj}a8PqhbjF`+?UFh;*;q{?jyzYV ziqcQOVxQfgn~Ro>OGCI=T8fK}O|nL9!p6IfsAsfamam6NTZn_4|i zH$w(2h~-!pdcml<_izf!O@bhJg) zG++N9isKHf%btX90pt#dcWHJx{UCogu`N%FKejth0dhPo8RV?gLQJJL^rYIM88GKM zc0+8rjHSwI+);H=5wvba(igcg9FmReB|Z-XmO20zGc>fzIUKGOa>q`T_i-?q2>dWf zvBPE6mhh~Jd}mVZU^%!c1~?g)tvBeuCtpRSjE$kHuNx(gSuyLZ=$Z)h|CBb2pLt7x zCnsg{i4L;a@9TYvaj8Q!eSh-Y)eK8<*>^%I{z!mjfJANMrv+gSXx4sB*#wv>skS%; ztN&zvvg&e20T4hVcBDKYxguaCGI*Q zB-!@h1WQ@$oHVZjl3JUB^SQ&}U+jA?ri7IGU(LZHs6|G){;-Xo&Z=5G zL@yg@jgB+gpL&FCab4X>?tY|zb#vd8kBKmWVqvfcNdZ}unj?>r6X(>_ltT|LJhcLJ zU0}< z=?IrCZ%08Gpe~itjQSJ(JY|4BT9=c!tEIoZr6&+QxwiRAZ6%z-`dsHCWh!XKFI1rnbNE%r84+Dd@Uo7(&}Y@P9@M98=5&w9c(8@_ z#2Z4OADeXM=Vrn|n_{Vt{iFdxmqhH;b*Rz9HCRwXdFEqlbPl(B;`Ro&y9nR~1yOYy z`}aYt=>Px{!r58SG&K9*B|S~g>fF}!dE-kFm)Boand{I@vpfXygY7jF`bO5Gj<~VQPTc^E^23 z0sKBGv%DWl7SPkVyppQEPR?QFqt_97t>62i@ACI9g})Y?O>Kur+zMe$QnMSTnv zhCHyFuSNQ@llH-==gYX46Wr!*)K#V`Ru;mH@?QHQCF)UPLMSGrZ>wb1v(#MV=VuVF z)qQh#-iD6b7Z^Ia|IReFguCMIX^?s?fwE>f?SW`G5-@(*Rph+a>KlH)SAJ8zvdBc5 z&|%`+R90p|C9-%1ub=!KNGxepB3qMY#aQDbZ}U*(IKos;!W z#Bg&HHu^NpF{=o7ntI_h8$r!{Xluj*5@p=w+=$r^YXug+4+c6%qb;&}GpuI3^T)qU zEryXsLxc#jmY)NXu*wBl0X*jF#4*L2R)@o1BOn_Cs>M8U*f~Z_5Y33dsyuTKaIuCM zlR|rirmQW2%guI^SmMYIt|rc(e>m(%oVX83YQJc5c+s%8u9*iKr1mQjX#YDY?Zcqabe zk)_QBhcWeNKus-^6d*AooGx0iZCA%hOgMICYhSi zJ3h+ka~iVh@sL&t!dF)09TKmsvdi{$d&E_L$zNz;V$H6RW4U3riUtoaPxHbQkb^YH zm`>1HmJskXi_(HIODCDqDy!-G7jQ2s5rjQs~Q{zl)LEH--l4OeoEkxg1)C*S} zmEwRy$cwXJ}vBc>RCl+ak}3!kzWq(p*h9?<%-9MipKL;`q=MT&53KMzZTZ$7kPkz>paJI#!j63tg);QWyb^evukwW7B z+zZ!8{5v%RVDQm>)GW)bmJS6;4Ss_4@JYJI|7$xlLV2F9wKLVp%Hn@w6(sl#>rp0I zDA&2WPq1~Wn8g1A>Ooi}=nWZ^kVbbEa+jFT)Pz;&$%q9!<1*NSjWH@HXJj2OX?=wD z8aZ4_%9KTfm;LBMvP$tM&HrtQq2$_Q`)koJH3Z5+*rYR6bMbnMT3RLKI=HU`iPV$) z2T2*^3L~5d@y*y|zfKmdB>K41O`?n!d~sqCPzE65f<`rX@wyzntJNZKM_Ok6Kv;fa zlt2hqCSV2DjETMoQU~#G#eW{`@7;HM${JY!+*`!;1xE*~QCJY%le#VWBbYaSw6H*z z+p$iyj%Hh_e*dVWDd!STkPsd_Ow)TQ;@UN}f8#3R&o8^abU}$4{e`j@I&3rem=t|q zTnHs1kxpSHEJ>p#G0G*Trr8miT8W&xiDBGt8A(M&Xn)@Ay4bQYdD<7;c40hhlP*W! zp`nz1hW0-V1rF)%MRuFrHY5P*mC~DFyI(dVE2o7|HW0|}6M^^~EROh6KQH2GR-csa`-V0ZbLBC!*w8&y_fJP#5$c0QBkWTYUsF{JbdBqrm6C&hv)Yd z59HKuH-tl=ZfhK|eT`nJ{;|S_;OI1R=me4Cj+|+Lp8Nvh(J8WKge6F-N5;v{lkww6 zj+;}8G>xR6A`9)4kjKGu{?XT{;|qYCO>Lh*qpK5r#cuS$Il|7h5Z~ui>fk+cIAAI> zZ`=UCkGY+p;uL%)K}12^YQW->{AHH~AHAFMpIQ@h+%~e(3y17~<{#Jn7jHMbS3Tiu5s8WZloaK0 zXP%g1|9STwmLK4DQ{{8`Mc z{Ki`b;<*!%H0j{9y*Y99R{fOd;HKhl7e<}h|`5Bz0Z+wAvNqx-vGJ|CE7DQS9n2@z9M zT(<5rOCUln+$|c{ss9Bk`;MCyd&xg;MFTbcAqY}D(P&Gr7wV*+Aw{w`>Rp(5jyvvPmF^%C}2UMQ+Wi0Y>`mo$8nGyoRt2vDI*yNS(W zZh{ceRlrD*tVZr;#sda(+fLN1c>001ja8G{(X=KCial!-Vo(7Kgu#%MBbtCWc-Os8 zpdjcC?4H|{-68IhKH&TmFiE<>;b4EnUnmU{0_v7y%q(RFUc4DDf;P8hM_!5Dd`a0< ztsK1$;n01xvvjix0c?PvfV07;?>G@?25Jd>YRO4^R9U)v4Gc5-q1WG;LpxW)hMl4v ze@Gi7>FF`&8tbIPcsOGE)3MJth>j|9WUFQ(JN8cwO!+OCB~I$om0zry1$qz!qUPAQA3VtmW-zab2| zxL@C0e}4Yx#IuY=4iWCWtdWWhoLS_xZwojzw~G9a>;=7F3Pyy>Q3rDZ3X~Z}l8oB3wh% zVM$5{x3{Qo{#zad(p~Y9KjxyR1W)te5-eenL4Nw1AFuc0!4)E9pr_T#b~m6W=uPx_ zkeN;d^6jTbxD73Jvh2?J)q>;OL|uBkDxeEen}xj&DOIs1qD1%lAa#iHhT-|CdLhHL zeZR%mrRb>YMulY+v!T?*Nyi|SZ&F|<*vb!I71NDSS3z(57AR{S>5$X>kIUD54`v2y zMIC#Vv`*lci1wh}EwODpQdYA8t5AzlZtBB4np~z)I~qja(nL2y&))(;WYX1xu_f4K z#_N%3)nq%nCy~_+$VX~T2qA~-636^j{N*gkbe>nd9&7&l2*3#OY&90*^7=J|I7iC7 zXFX9>!W&K6h9sDNa_UTZQe6SLDaWcM3kqe4hBnMv+7z=d^QzCJCM)sC^K(a*h{CwW`l(Noxi0Ms4xvVgA(^tWC{NtUOAK>Z ztU0}BXsxsbMml;*QSx5DdU3OUDYy9@$GxtKoCi22%=v$J{PCDInM_I4MFv~3;3xSc zoM)e>i(sGe`6nAkGeQ6@;Gzy5;wk^*s9gf*FCx7!Xk?Jgl;DVFl z5;p>(lD%JLnVYELa7zacZI+Uc%Di0d+&o=?AxPD9aiCD$Otv7|Pg&0*Cb0)oQ#vfB zs&)!Qhx30Lw*A}1yK&Y@HLjAK44qb@&{^3-LUb&s-hdm4WJ^b<6$`V@hv%8M{+WQP zkO7hjK>c$}3&q{;zLQ}DU{|PF;La{Uh+rn3Z05FT_(wD#v=Q?1w-$MZ9UbjP>mQ$9 z_399OXpDpSmEW%~b`EJ?v%%FmS_#>nd5FAl_v!X_YmngN(s$^IWz>pej&+1YuQ;vD zv~t9J20(&Fo<@EKMSs*aVN%mJt&jxb=Y#mx_9R)OQh$O z%REn!b2Xss;qw)0_n(8gYcI@v-5)!v4N>CSYC`4JqY)<(HtI7TflnyMjFsUIP>}1X z6V>+)Yy;4~YK*gH;A=4DojEp@K6q$f9au#WfeFmj5Sk*#!s@7Gz`iu2X12TpOhzgx zn{xEN{0=0_AHC*2cwz~{phDBx{2xbR0oEvqzn^+viUtt%McpipauVS? z$*h(fhS-EFiYliIja9Ek&dA{}xm2KJ+&|}d84%5?2V95#`9+w#;7_AzaBO`H#Bdj( z?iSbSMflgXZk+vsY7bt+D21S|Nf#CDW!}P;T;Ydh6=yf)uu9mNa#%0jcQs<07_;9? z?63Y7u-PE7Wu-)cTw3ntEYwOLl($i1}6z&sTJD28p8H0VT`6EYTi42H|GPTrT z9e)!LcVVtWf8TKoFn#q>0Re|e-!=GNzijfO_2JVqZkjB$LJby4FVx zavna5e$vGMGtY+67{9G@Y2?U;Iy&63AXb?hB;mUqwM$3F5derGGJhob?&sFg0?DXc z8I~sMzJwz&F8?{3{9{@HU48tQ-AszWn!$&Wz*4UjPJKc_SOd%s%cG&e4VvPtXEi6#IWD4Tb$UVw4TV zFjOyiL>!FZV2I*_0@<+km^5WnK^K% zQE2jt%$v2b_m~nE6JaqCg_*{gqW14rNoT?}SaEc+0!UPMb82n=>vNKa%jzo#AxX`Z`vP!1cJW_V2*+?V( zwfdhvM^m@9&iCJ7XhMj@oG?Ie)6{vkxJ}v1&y#}nyY<|LNEP)xdbRC6L~Tdh3lY)H zxroKsJjdDC%!@b!p=wD@mA{cto<{7f2;+Q(Uh4arVxD5CM>+Cfj*kgW*p$qpS-F9x zOFr_ewg5>{jncL&RAKB3?VU!1$OVa*!`Q+F;F@AU2gt}FB>&YLD0+fCW zcU+23qpw#^GV_C#pOQUs>Rer4hIO@;X+AT*+G0`sR1M{dVgb8Pbi~7zwNjPDFjIyh z-5zlZ)9?HiNTmT9^aT@rM36RpoNqxoYA-sq3Hv)9Rv%HUm7T-P*Z%W*Ad}bU#!h?% z0CEI7{3F&7P=LI;IFB{ueByv2Ll`e4d^<0X3~mIFSfBIKqSF~@w;9cit2B~#u*Vv* zy(^=!6_?uKjzoQtv`9aR>3>j%I+SU7_Al}a3QA5_{^n*`^NYLu z|H%TUYj^zPREh2`CUg}1WmEzL+i>rHvf{biuWyMy`klLbyb!V~(#I!UV)^tF%Emsx zfhis;z(H6@HC9Zkb=t7L&SD#1PZ%g9rzV(Z2J)O^()S#SBk^+Q_B@~GE&bF45;;!R z@t(G!oR>Hs$AHu{`G^%hp{03cxa&P%iW;{#2F$Q_x7uuZ`1`3p#vK;q18)Dh&i}}P z+dp#fj)Ow7T055Q^(XBY1~9OhdszTZDXfAePhv^s;WCo!sv(&Ur#Iki4J6q`woOxy z%VI1Vsb9ljk;saSb&(l}v2+vVluXHGY(rflDkopcKAl*Y+UO3b3N^2WcDQIX?}|bS z?*U{b;jldO7Y0aX*c1*-p5tnD@+Xk8l_`#nPioYp%psxOrF0=QocZw@&viKBo)cGA zfvuuI%`|%d3>hxOkagsYxuOl-qZ8EN37NWi-L#f(-$sKt?atN%k|#u7`E3(a<)=xZ z$B3E(W+;J<$8jHMaV|P1!${9$7dXl41C3opWHB-Z@|Mjs>{epTvpJlPl=**DuVVI) z9h@4lqel0*bVm~O?)VHJH5MNbYEW6hj?uDbGU`JM@~3#VUS#(fc!X)8?6!yYGdZMC zD_`{ef53dCx3T){re5FidG9e_irO#S*ajkL9~eTN5@b~a33;L!yNgX|uaxNyQ8{Q& zrNYVWLm0rWz7y5iEo5*e>fg1e=W}TnMeaSp=}g4N0bp0@Z$5{FH&`HVBM~-rTz~wA zhBD4Id^GfpVaX!x1DfD(`|%M@wd%~1zQ5_`Z`9lg)Z+-K5fW=WYu}OJnd7^E1Mwl3 zj6)nIY_=K?Wk?dg!Vf6(Z~V?6vUY0r;qHcD(t(8`ApVnlFdAp>K+22MNEKSx!v zQz8&bV4lkY9UqFNxb*yq)%)gFk1HmYSUZ=;g9+4OJgZ!-Uaeov2X^ymIZ#6-eiJ$D z*TiCm`y!SsPpgI%e+xwViTV-2bv-208#OXAa%_B}jLG~x!p*%pGkX6+5|bA;PQ0h0 z7AJ=ED|9l-KQsi&#ic<~4uVz_zjs60znP2f`!|bS8Dr!zmi*@XN2s+MB$T4lDTW9K zH@wz1}{4R0kn*oO2OH`wd!3MesJ|Dc7PFUppJn`3ll&D}#vMoo$ti`N1 zvp&cS$_h8-;rvS8D=R_ld?f8pCq9PSZsPs~RLpzqnShNrAyqj|y&np5a(E52Dm`rx|inahrUUOm?4c)YC~;ZVZ%saG!%9lDQg9+42)&! zDnm0lT-*{kT^mC3xYxR7EUl1OSvhU4X&SUc&DfKmaOKeRU>&6X>NE%t>@XrzzLm4} zX^-tAc6MThUZyuR;8vkui%~a0B6eC7&`p_|+pwY2UwAs(P>YO?Hh0Q6JHA9US+&)> znK4sCx6wCaLrio%k2wOGNrOIa<|GwFPZ$%2bZr>f)z1P=)8FhyVVO=?sDO?Hh$Vyb z2wj=oX4JAu@p5?oBKqan< zjaJs-%3jAPc}T8kk}K2juR$09-lF$dfubd1nQ4&DOlT~?E^_4)(pT699xLT56s(HE z{MqSv#e4H{xfQJ;3!?u`V|&DW9Qk_$c0eR!wCF)yS5TNZ*=lioqQVroGzTvR#Q8v% z6U>eV7iqZQ=U`a%;ImSu2nMw~!mJ zw87)=1%p_X58Mqg9=$Fvk45mJL5w^mTx?NN&3Y*pe19vtU#mi5t-l?fvK#uOYCweo z;wg!rzK%@`^{0DQq8@TO!djvZ^r6V@z(OV2%#OQpcxEZT$|xN)KhMQZtb#Bso#+IX z&AyO>2fTm5>Kk6O;&EF)a=mmO8URsBSwpp^#&=qd5!D4a^3B`jip2d2SXS3M)8OXEd_&lT2H!s z8}`6tJ{9n)Xki^7*ukT_6V9%sHYO8R`L43?XAiRPqXuRBdGXY2DU~1W+j~34uXq6p z0w`#SdLg*~!dXMQGH@Gslg#FOauHN6QPv*N?kMIv(iy(P>#yMRspaPvNaJ!uzei+f zuQ$K&BVp$%)qJ%*5FvQbNueYW1!y%I;myKV4I>St&dtVKk4|*H1Q#pa81T@NY>q zQbKugm30B>W5F=fDGs|s(fsv8qe8|?fV*DHHD7isUR6H9$B^wg4*ei>M`e&05Z{#x z0agYnPKkqypqJLN4i7`$My@|OHiSM_hX;D6fA0$>V0(|Hl25}uigAtFNXd50|FP#; zR}3{HuS;4NGON$YB-c5-T$US!2M6^`*FtjUsXV+sVk%cPNG+K^8Qo#+cZen2n7ljoq+GW7{?x zHMVWP)8F%dzt4wr-LucxYp=D=I?hTas8RZNp#YTnc67y~^}aq<0cmbp^? zNebSh1V~X)_m+L_w-a?O?}mtMOi}8Cjya=TIym`pzx4HZum^3zWU#uL_zX=JAw6d7 zMt&AJI8v999u&oZ8Z1mGjpr&Zj z@B)b{9|mUY#1)zygWlgyJw5|1u-5L_oc~MA1LLcZ$~r8$z&{Tl`?L?$fif(wz$b>K zi-q|ZT(-#SdhlD$)e91km@R`_o+5$`>UD4%DcRA<`eOl`g#FywIM2UxD=oh0IXgif z6kQPzZZaQRAwsoEjVdUz#>203_{>cw_m>FPd`nYn87-)r z-g{FQA6IM{PShT=*{3*MuII>_M2*};_3qESKkRc45M#9 zV|pPbqO!Y3)TAz%g?fwHrNKIXtik&}-~2mL;J_F2Ja`se3F63wUQ^2E&zs}M1O=_> z)I?w`LxP1+;Hv%8;>~%>BuCzRgt#3^uXc~H{GMlET_9NzDbXaH^7Y4yBOcj6yM(0b zC0cb3xxbc^bRo^?iAfR4Bmoqqc?a}Z_$XN5Jd{x6lOpO8q;=_k+Xu|Nz2lCGS4IM& zrw1oYceScN7AVRJXe=5ETlC|T;03Y;2DO{p^#_o#TLxX{RT{tRil=BO;8RB+n2^h( z9^1z7WRyyMlgyz@4-Edcw80LJKVj2hN>kEJxxwPt;aNR$d2k=YGn@>1Y+iVsDcVvK z=R2Hv#?_fOIvc!`Yns$}hPJX#G>oTS zKH-aCgLC|kPbay~=D)-{sJ4Qz8UYyyNtlkQfDJVpt&qumQ#Rw12{*+?XFgdegnHwY ztftIp$ZPs>ZVP>`mSnOvDjKuYLlJ5*_lJ7MLLZpOC?4o4jOC-4v|>8+Lzb4r8R995 zD-(D}P!4b2Zz}RT#KEGX7gnjY`l>&txUX8yqsmj*)&oT$>qe56|HLoF|NfmZ?NX~P zq63!+)Ii_*C^^}8vl25D9@^L(F54D2#K8K;$11k}lSOT1zVfVw-&j8cW@zyffc=2o z;r{pHrB77r;~e!slUX4XViU$=b133}g>#9v)NBN643MivkrL?h>&a&zxDUe)7K)o< z@STevp^!95t0%A=id*6zu6B#P=@pRm1dnIvv|5Pz$#@$&@e6%&mtK9Yd;?8lPDwN4 zg!LUrGlPA5Fy-hQRh}TUQoh@On8A3ntqy&v%vxp&1zBHa&i_voM!qVgFI?`XZFe(2@o7re?j^*>5t;2f9{qI?lunx=q6syRx;-MQ9)95!zKi)3Q4WrySY#4bwU<;h z96WPlXxJ+f#;hVPc>qptd*Dt zX*mvNrl~!~f5$hh?QU6kAT$fY*PtqUl7IhSd)_H(O{2LlXgD!knP8WG=PKUAe=1*S z@0tl%FwCf#p!kW}Oz86Rod4l*j}~1NH$oP$JT#0%#VC=xaZ=N?VtFwbK%$t&oO5+* zH(->+zCT1enLf4Kt<-u>Q^= zn@ho~pFqMsUz=*VT8C$gQ^oSq@zu8#!ejf!v$~R}%bW`|kzm_q;~2nSOtz&@JPPvh zfcL!`n>s@6lei8BBPv^=x7{=idg?cdvr+L5YS-X)ko#=1sr_gj*Azhsg}h$Y%Hw^0 zcD81Uh$=$avs?rZ8F4MO;t{$U;enNw?7uw$J}e|C{rSHi7WuT_t$U=ghA5K?QZqZ> zqoJqeJb{%SuGRLBPsP71uB{L!kYIBJR9R@1>EO6`-srB8U}q!aVAfynGgogssbc`kp`e47fMuw-`9V|KY0@5Yy^G<7g)UC&ZPM4aDKFuQ>BKjFwRM=`G z-$zp|Gz)49+1yf`6?2J%$vN&H(*@_6Q8jk86t2sF4K5?X^4;B?j{nn6d>cSuy@%q~ z+7A?6PSUfT@IC{1LEJI&WEV!#-@^U_Plm*?)Boq3??gU%KN?F{N&{AY)xlEYVB17n}xm%us3Q)j=ZJE9J3NI<~!?; zbzhE-eU%B=my0*U)$Jl6%tta21~8ydf5mL64$~Pk*zAsKIYuoyz(5V(0|ROSFoQWip5Tm}b?FZSzH# zXM4e5Y+$w8|3L5Gyft(3AcNUw!+S6`CA@HAnmFCG5kd)e_IwkWN2&_EFNJ-mSlFx~2PguBE=BR3FBHTEvljO#8f zmV;zDmF!2cDu^vbPu<%1d{?N6j{+aT9Z~qXAzJb9AGI?8cB9?EKTr^fWs9HaOe)Jh ze6Rjw%9RZ;IHy`njRnVK=+!G1qa={x#o0P+d1-N=} z9`TJhMJ!dsAmnm=2H9n|QU9K9{Jz`|x`DfO@qERujxUa~O$vtY@e!@ay9+xKYiUkX zZDRXNUvhHmW+N6S;g^XIu8*g)ZAmVt?Z`VUP|(|jj<&_=wMsn$a1yyGB&!&ftVNp;nE4&>imL!d1j4a9i_hVEQ&-LC%#Yy}&c%>Y$1a z6o~=xf-hGvgL%%DP6tnpsy~x1zfix02GSJ~wzD?D$WTKi++FRNX3S^Rv*JU)*$wx+ zvqUcw_!S$^Pg;#dEyM!8l-m?(g*cZpDL$Pj3mx2IbA*t+zLS*x+FQQCSrB6-;AAbP zxVpNI>A4ieFe1ApE`)(;0@d#bK6gM*{`|=~nrFS)t`-I3u*T&Hi=t30mk`14=ZtBhBRgCaQT^uhzYU133hw%sKr?T)1N4*b1y`tN^uit#A-GhQzPB^<5YpT)_{j92X5`eblB!BMK9ej-jd$urwb}u;;;-CyNio!oc zY#h>JbM5riVP2_lU7GQlb2OAx;m71UAxsp@}+Fi4Pg9g{vF(oeBB!BW}Fp4{gv^<$g6x}AG%%rov~&W?;FG zwePYE3Pj#P%z3EFLi~$OUtc{UlW^kQQg8{I=thn_-I^tgWr{-*=p}!BtknYh#m&MXqC?>FJ z^4v(HFTC?!Pqu?#uhcoNj~_j++`wC~Dh^MS`@_d8J5qvANT_EI)=y{aEdqW0+t0b3 z1C`WOUmxNsrtDy62kk%i@#IJiGVN#GpWulR6bsj-GQjw|>W)@+F*Vv60 zsE>o5cwO#a;vy{EC@=pJXBd46bcKz#4wTVb?(r!4r;X6Dg#cVqT8P%gdt%Gy(@n86H`cS#BHAWh<_aN_`tfW3QrK~JSL@J35t(l%BOUWZ^u1T;TR(QpPJ*kv>de(dHFlje`c{LYCC^LZ;`!lqa z*#Moww`WVWvJ`S*;?PQd2CqHPo42c#%o~q5vpxOX3%g|Utf=hu?OBxNSv}B%M|v>^Pf3z-JG=F?dyqJdB#2K zO`8iZm{4Ob@88}+QHutYGFi_X2fn$&ATbt?r=o6${(;CavU~hnd=UTOQ=h?Z@OXZ2 zZv7_d5zTMjgiSk+O-ZaAez?)0LNL#z}ZV+|$c8@_z{;qsn{zy#>@aJs#W#X;F)IyUXSR`~U}b@yq+<=94Pt@(fDAhBsfKF5c( zy}V9rhi5i0AqG=IsPy6SkzuJ3wFq^Q%=#A6lnMXpzw}bYGE&Plh5mBp5^Bx4cuv7d zDG7eDNW-lmEhqgvhk(lhRRmKTpT!xnYL`kFr3;!2p%W6j8vqeVG0mB_(5kL^tU|i= zS8*lT@@5Oj$$b-1e%`wc&1m!Cyw?6ne{aP8AnRk<1~-*UXb>)XH)LpIedoxqqnsAg z0E;55CK5}uuv`MtJ}Y1tVVJQBVQ*GP8A1VBa@1F2`j|nhGG{!1;H+9w^B00;**sJ6 zD28=CbdW`i8G%@&oS10uR&F1<-zA0;E*Nn5tL}9cJtJnXYcSX zVPxJ0$Xz&9p2q+gD04n%Vo0D8r$C$FTd)qs{we7&rL@^MdG&p-6YfuKjoNuI*TDZ+ zKEqk zJP12nUI}~u{P}*ATGpLljwOD)jkNC54_n63L8+0ZsRNM@^FtRc!We(hnbMFo+%FM& z+y1LjyAp5Nc1FkcSap=gy$$=@AW>w4yil0O#pwb(iK3B(OZ1ggR=HtRLH9@qY(cD? zMy9Q{X0|sW81^>dhC+$A!VfzN4ASojgdgm5q>4hR-H0X zGzD-m;5a>@8*Vfo$L*Yrt^7q9_uU?~r*^8&_}=7oiVgZ9L$=%|Fs%o_2?k;Hs6*L3 zne#ezlc=nk@Gc6*f@Ki(K>3$~^4C@+-qSVnlTA}0|L2Q<_=RBUT|;y5*Uy0Xq3eqf z$OKB*vMH+OW73O+|NZQ36(ZA!iJv^Is5zDfamIy>rjN|02iXRX+8^qBePH_RBUXm< zm6~3w4|#BhUI$6*03;Yz|K4+Oz?LCQYZq#!R+Z_-;e#W)iQ(oZld?Tu)t^wJ`K^(- z>oj|MksIdz_m_8;wrRao<5hA`Ir4Hr(%M=qOK|pv65t0;szM#Mh7NNh?t)``0II9}ts|9^; zJ#b8H8p^DWY-VPLrDB1Y75Sd*e5)X+ql3k%V5026ltn50(M$##h8in^=GXjb;`q?6 zT67kl0(mxc^tHt|Y@NMerUyNuFSy6L9r;k002w=8@-XlhU*&>bwyO!bgJcJq>O~CE zq$^*3R;?Q2OTwLVZ2wV~2lC4f_+E%)@!kGqo@8ZxdfvtU5y1sH=QVQl#Y$)P zLh2DPD%n$5`FjSj6qj=6R`XGdnXmr6seFKA1Dq@g8w1^+*ICV=9cGN*#2uYE;^cRO zvqFXsaRb|ru`-bs?X?zSJFh<(Hndcj$Cf1=czwOEVk!{S2vLI?Un5Gx7t$@d+1>J& zh_d%+K3anZx7#eEmK$IJ`Z{^FAhtIabLAOhDlyczHv$`ooF0QzS>?hf7$LArkR%cu zLCM^lX3khFRR(XZ!>f7U3SzH-2}|XQwwHjml08HXSX+E zy9E&Rnq;XP>!HbYG}z30?=Iiqx$=Yf;1!Mh$wRCYI}2rgNvOi~^I$YSV-y?()xX~Z zBJ|kEL<15g8Jtv;S7TKKz7tQEo;p;B5YPLICuae-zlhK|VP-(Eqx5MjK9^a)xIZRG zV(j43%P;8>mbsdyEw5(?3l=3XV2R%+^Hpzm|T%gU& z`Bx!q*{G&a0QE#9OfQ7Dy)pZouFP&yrG$nil#j+;RH^KinkNipM0jmIfC*d&IAvHF zs8`0BP&=qA{S-`mY?*tjKGU1)een9R&Ps`l=WB1c2dP|AgQ%+0mcY(->s7e=dP%cz zqCp~1<+V3VU^yw7gWE_|xZN4@PeX47t4t`l`zcu+_J2H~y<4iPeJ_&ugyPJ2n>La}h#( ze&5{M_%zT=F?$?QkQZ+&B~5bB$7?-P*kOM1!^tOz;N}ed;_?8`5Q~T6dr0(COx+w9 zcPU9*XXCyerC(cJ(4dns2!&ZWiY=YTcgkswWsFA1F_+K66n3}tlcw!W#GV)2YG>v`q zD3~<&GKj#xgX?gR;Aq+OArsszQyx^1SKfqin^zLf4ZR8S;OuNyZ^v7I(FRqH-QcB` z5yH1(A}%v9m3GV(X(ttqKm~+^gu(5qsWFWA_d%VzmboTK<}+D*)i1ey0U%nTQHw!& zsuBm`b;}y;mDYRZ+AT4%4!_JhI&<&0PazWV))&wee>zpyD`*Q?7D=Xs`RL{X^XG$T7t-N{AW?{`qY9XAP z{?A7dRh>K(@{Q92-ZDuLZ}U@YZF76?Z&bZuD^}v1w5DmwT9lp~jJ&)Ra#SV3Gt>vp zJQb(fr4C1gnu>7Zr9Sgl?UOH{F}b;Uf%F0y@(AQh;4l(npDlivs$%Un;;|5Ukl{@b zoo2#fv!Y>>if})pr?BbkDM4k2q>d+?4;aGRdgEw>FOUKPqRSXF*1lz`#Vl%%bMnQa z`Lw-^OD&#)cjL8*eyGt?Y0pn`nQy{2^aV~Mv{Rks=yQd-eK6DP5P`@ot!dZkFN990 zg)3qQ0W4fvT%k871b+lYt}%f*V!shfaxr#cUE#QnCLLW1TYwuJ< zR6A~vVybRol^!0YIZL5T<0CfZPG0Ns>xzYeW6SdpCHUY3)?Z>GT_bZUrx%h{_7_wV7A5t zpv~UO!gc$?>a&Wy+FjXue*l+n=8$BI;$ zKm;hUC?6-6H&*eA3|f$l$5t85Pl$^mYb)e+k+@uJK@Tnt6-tUSRtk^|=q|dJ5K&gX zXB-Qc+-l%!CdXl>!}qhH6lB;oxLc+o&~TFikb5}R%eDCVB)f5D6c2gYn3}ClgTaW8)3}MQ^F#HR6<1GN!aBJL$D|j?5x$?Zv-uMv ztTdUKOtOyZ0kcg&eB!SD5Jv z9i9p_A4YNV)r&kOi76>qth6y(jq%|?R6<$sP1qD;V}xS_RaK)a29HW@ZTnUlzt%3cdmB;XYI=Nudq(<-wE9!~Ax_;}TS9T9q%%>Q+u$Ub z!jQ_TL!{1T{CR%Aso5dGaKPI-MHGC91%y+9j%6$~bf85&1*ZdE)<)JSaT3i`P7ZrI z!?ux7_;{6%kp4Vqx}_ARs$dlU_j>#9L7Jlf74GJ*5ZWZ34aXHu0j`nU{?n!HaKN%5SnqeTBkd2aBF92C(AIE0V$W4;*aM;9?d-T zbk_un4pLO-Ag7#MA#ub22r+o`dpJ=8gSE=O$oMJ8)}PT#;uR^$)hQnEqB4Mx2$u!K zHP10iUvS%g?ZA>V-KwJ{#uPq73S1;%j;TYaru65O3KhP_T|i2_HZy$vrspr zzWx}QW9e`H@)1Dd$8z+Q1s{bURJ7Nqd)pLc`}XTGQeMfEymuFPW?{R%OV@l7DMzWQ zkwtnvh4MRjXk7L$x!6h$Mbzh_b(c znG^61X@&_xz^nE4*P|XzttK)}gy{t^Rf(J06;cZ;Zu3}$QB$KT3n8!US~TcckTwV_ zj`AOQ5>|sv{=HW2yNmo)P5Xi4lHAf=nU@C7<}{=hUj0Mn>$(4P+*9$#ZQ!?fFmP49 z4-h)e*XRgRFB6YjUX?Q<$owo}^@UFa(Q7`{v{43;Nby{dkD5{N!uO;t*}9@s2~jQ_ z4MT9V;Ec4usb>WCwZMOA%kb4Fj`#1HiF-07frNwxG*gM+6o>E0mo1DnZ&k46ULqE* zSW7%1ol-GAx3rIuvN?b#P9~db8%AG+_BSh|1woi`8U%ejAIjJW$CWQZSn^*80wTMQ zs?2(*=JzX@zdn~EjQ75aaD$I<9NwzK{1?O`@Sin7(-aXQ6RsIl7|mmh#L$1&oHq9q+~X$e`#66P7xDyr{e>s+@ft+- zhB9f`^C(btTv=`==~j;^xpo&?Q<@<;&VVLwLXk~Q@NFf_R7DQ7-Z_#A1+6Ba*&aS%nIVrB9^z?at&YOus$VYnv{`8YS{EYOx zwof#=XOWe}c`n?l3=k(~IK%aQov7rOKVxlP}mnFe*V zOdb}OH4M}qx95uiWWs6$`tOhso)*N(QoTHWt%H14$zg`bH7d`34OtaU*fG!O8V2n_ zR&o(KfOD1^Ppz)2S^GLXc*_Ose%wawe;6w~{3N;V`?yIvXL()lzeKb9*1ag4*}HT) zpuM7U98@oJ1leKH@1?3zIC|(ixR6pIJ@_e5r0uAg#~>F;h_N{93#z3G?w3o|5b#=N5sQ}&-lkPV^R=Wbpxyur_qnS@n1Be zFtS%+lUj)J&l=h|0Wiim9t|nJES29oot?2l_q3CD+}zaog1kgf`q&s8GSHBoG9Yw- zVKsv|m%`(lpty}EbnrdiOjLY3r>8ptJgpQ?GrN3|>5J*3Qw%r~6)P@dk1A;oTO;r= zrs8Ry^2nEEO#}<~@}RnT6m9zV?9)s5N_)FsAn`o|(N|4aG<9>0`=>|j_c3A5!RFQC zc&-b9&Z(|f%kbBA$BP=_fPe%k_1W{F618&MO}FIgg+mpXKL^S2C4$6Cxy;oopwrK} zcw+nj-8=vv!ZD1i6PoCM#qDAnn3$#Fy!+)UFOwg!&2K*1XvX(XU}|^Q3xR;&_>t_W z7TBlucP&kmyAeIt$ReF8%>tZyL&{I&XIy~Z&$?H2HKxwl~ct?6K^JQd*c zR7+di1m4&sqq*CI_ZXvEH`(hJa?aZ&@5aZvP#ZsmPR48m`N(E;>gbL*4-c`*^yaCz z?j0pYeD@l4YP8=>OCj5yWo4~7h8pm zHA+}e{6i&*ah-3YiQk+iVxoKY={$7>{oVVDz0Y%}X0AeRG3=@p;&(flL$cq&;^{!v zz~CpA01qfp*zZ4kqkoDB1fLQD-%g8A85wi8EKoI|vRH131utS4IY6bz8A>=DhnRz835Bwmj|uc}s|!%>>rEEdjo@>5l_ z>G!$VFt;t9BKx>=`NfOU3Wk7?eba{J!BdQIi-6Q`sAxmTHqyzdO*?f= zw?XQGv^fgT-``iipRZF)s8v?&m+c2p0{A2Wt!`9z)WJ81{jy&k_6V8*VJ-;$R8Xo2 zs&%4ebKSgj*S+8Gz!l{n5rJ7Al`_--u?%$%{c{Dbr6A@AGgl#;roEv_?9E7NIN)Xchm~Y}<{oG9S?B3o zFCgI7k~FgJk8tax$DE{#0{F*RaTgK078|)Pby;veM^33g zPgO(=mMafI)r9xyRF}Zk*NE6kZN_S)DIn@9i3Kmgw+`Y5+IA}sUpGs2pCWz=caM$T z^?ceKVgxe7O-Ubi&Ny(k6_;RSqD4$x^LDzf2i9%wu-&rxM%6z~<0iB}P|bed0OzkAWAST4cFsMk^`y%04B8mkeB z=wuI50#Dy>yubJl0o;Gvy}f}Qh98@fjk)59<+n-ODi!>V;bH~!X0ZKE8fkq65n7|_ zh~jZlQ7{ygK{k61UW|g|jlyi>z!*dA01zH6N$yu<^g8^V0|0`TO7_0SS=5GayYYev zgjv!muifQww0t4>k-f#2m?73B!Bu0RH&}xV9wBB?%3BE=r@ckrbUvJ6rmJK-6 zTj+yvC*45v;bAOQCs_@U-P#H{yz|+5notD9A(R6BX_V4(5>Svts3-`JRr7 zjq-3Tw;3nAgw2s^z61)NV19G%xb$wMni{_w4nWd&u@d42nFkpY%4yfM2X=ljWp85R zOz^Q5sfGawWSsnvrz@tK`$JlT{!Q-(w8_=$;Krg-3K6sOKA9#kQuSl0h5aA@= zKM^mAu>4-1I9lewu?pE|@1&_itZ4?UX|ZbO>qM7#I#O-$Hb-J$bwa6BP95qAX7)2x zw1AO@!4~sZNlbHL(@h`wP5=7GBkkZa_#f0yz|>I)oyD(pL$iHY|*OSlRO) ztu7)|#;QmpIh|0eSPFziBw$`Yg(rMx`;j&C6lLWKCk6#`zi0SI-zaL(A8toOj;KSw1ViRlsdPgi4l4# zp0F{CjsVQ&#m#ms>CAp(!pH&E+nZ(Tk-B;dlvJw#0S~Z&jH1klYiuYxsI}WMrOqF< zqS|I)(0x7C8TW4JH%#_XhWEPj@rFV6HVFN<4GYw}Co>{XM7eXvD;0>yACr#J!!Wqc zwm<+Z%Ic)^bYm$2auSPijidt&)f6mtyNiWej6TkVhN^IxfS<}FZj$i|zoojj4Vdvs z71L_)Xz-iZR!!M`E==1MF_6@6xQ~Fzg_ODDEUb)cs5hA5)@y8T{Rj{4)j~WZIw|Gp zrodeAH?&681J80?mpi(?OaY9WjGI;V`Z0><$U}zrf<{({V}pca1%Y^no$4XhB*}&Itd&4U?cXYb`z)l5i^5{u?NK{zOQxV zdAbj*IX-wjN&71}zC=9zsi~VcN#W-t*umxRzLMGr-4my7++yb%{uYT0W5|7ouN+o_ zw9PpiU8id$!X9lsiaWYj5nndIa4L6%*}xBetoy^P;o-;kS+aV%8}mV36`BlrxRXxA zr%&t#9zxQQrp8=a?(WH&MEl6v;!sl}1*F)GiKhrq1Q2#r4m-UZxoCnei&MXUno_4I0&yc$t*00*trTNr&@Pt65 zFi11U`x#KFMgdTP-}8-{mC#XdA#HK~#?^}02BrRX%*-r4G_efOa)GBNv~QEoPrTlZQcMjdy0I+nF8?R7Y`0lLeTVA17cKQ3Zfo$XG z9%MX1ot+!4>k%<)>%ciy>DcZ<vs)ar&&!?jLGC4CxYagYrXgP}qCIU!d&&s#p=GdNUKSkV^IbdczwnW{uVw zFTNZw39SAkV&})+jTlkJWk0E*xdqk3`y1GFH>_Q-v9ZPHJG$(qByRL8SGT%j%~&WK z^Y^s6d5!{?+(ji}Dzu!8hJ^X#8PKX=2V=%TgFq`NbNAYU(2^_pO#*;CAo@@|!1fdsU_Te2_bBr9@~O2ACeDDuE5RL;7CSv5rY; z4Aa5VuQ&iJcO)pPqO~(B=!X-9gVmf?Iu_B+EPLo~W8|9{dx`39a&Ka{{T9Q9znE{T zh8&kQ`psYof*^C1pnHx&lxkCt?2bprwMD5dX(mVVmdFu6o_whtW&}xm+8&L(vZPvl z_1C+Q^q@54ni>b3CMKTo1}FTwYuT@O*kn{TzdtheBy~9dNj#;6gfW&;1S=oSwH5W6 zn&zhlDS)jmQ@ejt zAD}AkUBHH13$B# zBm~X94HX!JrP7?^t61lenzK>^2F7$z#4wbw8v*N@co%B=o6F0w*0^#U@@Y7kYg2A@ zzgVV4s6_+c+S-_Ekr629$q_vtpx})W zWPy8?tb#t~r92e^lp3uOYAG~(| z20uhSXfQP>TV@G8vHL=>|E zuLcrnlZuL$9pj=8;rOBMZ-+0fqBzBR(x?=Om=`RK7*C$Ob|2iu@`ZPf3I zoS+zZCj(t#|K4D%dWsYC6!XB#s@>5=is9cfRLSicv8%TVQbgEJ$uH zetOL-A$@fHp`Zh>3<_SjgWX=oUBB`+krWCoN?s_1 zs>!Eg%PA+M2^7D#wyu%20v{AZ3z#3`cw=m3__V6YRn+u>BAcb9ev@k6AajMJ>mh#b(DWtqhJbl&QZ>^y zd1#)~;JBxXi;&k7vXo>ES0NEMD^t^UsRE20kbd@5>2wAdX;34CNLjf=)r^3$3MOa% zI?i68U#d-?6W7kS$x~U~ypG8yD5!QV*tc^Pm?zWgaFN&z#{ViS)f5V374qqgKBxl0 zj!(&F1yANm@{NHi%LPd^(4=YjN_{p{ycFiAMiUc^At!kWD@vX6#bqs{WcKKt0*Cw#=Ez6-1gJn;p{#p^2=WA(x$~2{n`suJMJT$OmRc#e0pO zU@B7Ar;e7S+&Iot$sK9yzZopT?IivC)Zs zmmy|$HRK-+om?6+8p$ER49Pa#n6>Q-{s{wITy6e zXp9R6lsw{?vN>oMUly)a4*E`Z*zOS-8;lqL8o2VY+! zC*XK{aeX=CQ=hq(S=&;*FhxZR;?(D(%2i^+^K|kROHf!|ces8O9oK~CbFx(gHKW#G zz-Sz;fpo&So4r_3D9{*sFk41f@c3wuN~>IyY_BLCtr1dMx>3Pn4&EQ23DpK-|kKOHi=HfY9w5Dh$ZoF95WE)q(aL-k#P)=^{pq7+W$jAS?IhFh2TUSG|$1 z=}sl^%J{*uKVD2VDQ)R{e{@h74Wad!Uj6@(bXH+)bxRn=3GVK$#ob+tmf$YMt+=~8 z#hs$X-Q67urMN@U7I!Q{63XGsF@h{yc;ISZDGroC_@m*|KS1|1$6CtZXJeRpM`PvC_2V6ak0D&MmI=C z4OKZau|$J3oT zlFT_eUhl3TTwBXDWF%SCI$Vi@DmRJT-V-d27I%D5MBXk){RkQwVaYaauh!5!_*}(t zSPpz~)DO0wkW2BlVOd7lISQ8# zR7p8>6c;IEmiRs%;DPBgt^;K+X#Z8SA)4~Azju@K4h))+qVKuE&R74BdzGmsz*$K4H4YKF@g}&!7bc@J= z&U-w@j3KtXTgNr&BtEruV%2XXFkrBhUF>29({lOLHSaz2kFww2lc?nqVJh76s?CU7 z@}=+vejc2-APhJ8i8xf`KMnn@hf&{Q6KyXp*iCnQeg#hqiMoatQd4EoGxr&d(l7_n z*(j27XOVM<4nZ>ND)qi|Y=a=4-6X|GAlgNpSI--V!pazY3fkSH4wA`Q2-|E8PD0W!Q_6vOnE${=# z1lfJqH$Q^2^_#2cJbJzDsVv9lBaoM?C>X#5ix%{~0MTWiTt)7Hqz7-W5aywqSNT0r z(_d?F8JpbjlC%Xb!uP51@MCx_P>$PBX$x*+w?7QxO}Jtc8{YF9|WLL2%}3E z+aUjY-d4HaNLO7GtU(axBo!21xJgsQoA6fH1IQd8NskCHZb>jMTeh5dpi24_mgo5#l`-3dO0i8rCLm)4GN*= zG<La>UBS$`C(_59D@YLA$wSDad5fL(`Gu z(F{%FM?%fiuE22zVcjxDBPFn*>*`qmJ#@Rl=HU4*x*~IuoHp6<1d4UB;9>k1XK_U+ zua)%Y%!CZ*{tl57_&n>`Io|(!BUlxH;LFn<+%D@Yd`oQe&loAc(*kZq#i3t{U< zNVK7(BVe-=3uCg#u*vsx7kW{VrM%Wm<7kv@huC;r~uorUn0q~pX{%@>hAc_KOm@@?vx zY$Q~KkjU3<786x&7-VRCg@NY2;WlzavB~7u8C;gYYZzR48MRX88Wro`oH-#QltoFi zd?);*TjxJ)Wy#ryn2v?^je!eAsDs{-dsrpYDB1fsjXWvVX#5ID#!?}%KRw^4=gC*1 zvtBWiX=zC^hKUV%5MnF_87A6Q-1!NrL93b3+L)hw#C{}SGaCW}RNU*$?A8`+QuWnB zDfl-_7&h|gk`UiZB-!f^E%Lgxvo#2UExE;mu9~hz#>g-?)MfEmAZJ%46`8FYRGBi5mZ8``o01FuF$Cs0%dYM6a4{VKH+Yeldrf+JNr>(TUfdu z4s2lVQL#p_Owzny+LoN{ZbMh3+B=u_eTiM_`3mXH2<>9m42C2o*~?_NA6I-yBrOCifx9)O;?D1Bbs&~L*aVF?I%2xL2@ciff;+GFpJwgbA9dHX0AkfI)4T;7pniMa?IzP^d%>G-voz?rS%0=*vSUjsGk z(>PTIr|qP?>DziPZ!3=7lIVRZ0Z;rUIu{S!Bw2b+ht47QcRK|LfJ8|S3o~Qu5- zq5pXXu=z2VEHy?+5Htf;zClQYj&(p!sHi2ByVho#cv2U31{S79KPo=;0aW>H0wD>{ z8clJ3_xy6bwSM^U)ddl4ZyaX>Ibu%Hg$y*)P?fBh#su($bxPly$Ss~(zXK|Ir09w57(i``!L$WIN3Xj z=nMPHZ-bo>w7=K4k3iSoyGtOGEnjlCU<;J-`(T=b4nr<}0=-mBZ@CwK>-o+MuA6ph zw2K(U%b#QSVHq-BC<3pH#vmOX9?}J^LV_4XBXP{+{2?e1TGr}cKRiU&)M}^F^l+u& zZ0rjEdF)?l>fCSH58?gqg6KYcg6MYHXr7n^R8Vzp;({&EiVdfmo%MXzJ0Do&yqG;! z3JY-``igld3b;Pt4f0_E-eeJ0|g<))=M9k)1;` z6mlC@SMTUoteU&@&shS`3j-5ZfPSt*N-TMZJk>`d4O7tuo_%E=?W zzH*6dK}_}?*eObs;Uu?#Ya6@#AsSq;M46phJj!oLH?jCJk$T6N_j4y%!x~cL0Pf*z zX_vOx=_3*?Wn^C^oz_Q0S!EgTziO;?TfzQOWa$N9S$7RJjFG5$8>AjXmTt`&;zKBb zXTNw-k>8bMMi_5bw0pV|^_MZL2!PgOwgfwjJdC`Hh6})#>c^W04vqSJdQsXaw62+m z?P2%`XpE(4Gua(nH1x~pGY?4jPAUo0BE5ac=}I0n3T>IXdX zn@l=mqwxEuCP96bm+?R%v=GnxtzQZrTaq#z*{@u0d8|abp%3>#C1A413hZF~5?C=R z+x%HT!=z{K-rxi3E}!Jkpp@HvshcHH2jjb<^7=cdTlja z26dF`Z9L!w?Xl?nM3($w+(_8W=VA}0_qbl|xAvKx%QFBXy!U{L? zHth|g6FSJ#1I6vU@IJsk=KST2rz!m9IR7@Uzv6sBJhx)_L zqS42PE62Btgn**qGxL7;xm}0a;R7H7rA|pEN@jUG&3Qb3)WBc~GDu`XPpm`1Gvh)Z zgQe|Zga?)X+|j1DqRC@4p|nB(1R8UgFXp-kmqsUp+m2s?wIf3>ug`!W=n3tmrompZ zuJOXQ$JUe7D^&5}H*iFlnPgli*Nz($9vZ{=+ zh)t+Jl9gcy9=fhV`Lqr~$iWVg-&7eXX=b2B28T)h`=i8g%)wC!1$O~VU@D10&)iF+ z?)__om*4Nd1wYoX@XrQJ!1q1}9*Q#BV_A18FN@&_l=Qb&Wj&tB7v8&`@5l& zShHoU#(Y!Dzk>hX@vz3%GE6{emDp+wSC{`K<+D0-$urn-UbJE8GmVxDq}3Jlb88Q- z`68)(8bN&{=GxGNhRUT1r!+zdNh7-`mEt`Y=(@7~fN0#V_H@9|t z`AU97c2beIkT>>3ut|ol|_cO(6Ti-f8MnCN&=$aW4@2*^Fhjx0py8#(wrS z!MpfRY?)E9zKTLk*%CN16`}!lsytc}NkJ|f^>Bqh=;w~cq7267x+96xI3Yq0EuTb zo{<4(hd@d8%wvaVnAX8e?Yqy}pYxsy_7!?*JeT-cmO^Mt68e~A_d%+l zi)u7dti#!dMp5R+AG3KsK-;|juO3#!-rEGPdC9|&jnpMeYlo}>o-;?t=ms<~tcNVA zCb!R80kYx)*o8rKl|n={K@Z3u9FnIC8C#!c3aKvR7i=Sb@soqAt7y@w2rao2Ar96Nto8u;qlrX}k2!O+>&LxJzkW z1d7>pw(Wx$F(srwM+ou&$pz^EHMMdJztB4EGT;N&>o@XJwZGPRVG3fu*m~a~+aZ3L zX(g%Ivli}v7unx>>*wc)s76cqTs!Rxwbuxf>m~3EfAeII+Zg-fAoBCv=PV=DM|O41 z@uRGo3d2W>*NqOl3!$KL=xNfavH~|2d2))#N{No90*wEx3uL5^E(rImcgKQwGzk|T zWR$}mrP`SwSW*g!g|QkSpp@-rmmuCuzPDYa_x5>*Ck z+g^)~(4WhI=YY4AOKw+*9nqIVk9Jp9Yr#k&r@Vo2;+~hE3l4)ZWTaH6@u-FM)hV#V zcSQPZg==WbYa3>jTbAzJy9ZxgilJp?WqltdGFfZV%9v8&sY44~vHc$#syOJcF>7XV z;$ZOjE^06-{KIWxJ80`;Fz~Yf3A7y5=hkxU~OHK|*Ax_KUrA zvA%;6ma+@Pou{L>K=?KGg=5&YPLw;cP^$u0 zIH&VgkvC0Vf{@lAU9grn!Eg-3T22B9GTi(cOOG#?-%@ zek616vey7FNL8%f)ogwMl2zi(wcj>&duDcD4ma$%x<0=H+B~Cf^H5EO?%!72n@tl{ zVaC-JXOI<0xB_$ph~f~I3kZ68Y&t1idLNW~ge=*^+7=4eHcZ^Fat7j#&zm21eJ2J# zlUYgPVxETbjg8BaQ?!A6X}NUKn_;!Y@@PX*9=0Lv?0Fy7$Sj7SJw5UCL3DT*jVd^9 zYkr9XQ zn8$Nss}p?x<~KT%o6&~HNwoT6x;}R-OD!LqANq1ro41F(xrB;j&$ccn#p}Z^b_5{^ znp}tlxk3uaHdn}&kcMLwZaMxqS>M|qW~!N`P}){*9j(M;MF`Yf`@|*W^<7Aqggu9v z@6g#qx$`_R&9ZW<4~IeLds7Qlv~-Z|XsFU`h(|$VCmPJl=8udWw{WH~a~2^_czx&^ zIyT~d&noN_HK7^U$V#lAm7-Z@1+b3*@kF^H8HL^@88aJFnRMQaBpA>2S5UNH`+ z8Zt$o_@az>{WY;R;-4o#;|f6szRRN>T*()$)cP5EuF~(|Q{F-CM*L7*33v*aX~)g^ ziiVUYOi^&2pNK3j>t!RmAMqcVp|dYDOJ%TI8$rr?p6uLOxTKxh+$!N9zc6Qy+nHi%>&3x#Tm`qHX!F5PTo8NyFHd-I>*QE(Hf-@FdbS z%Q#5Uah#$fx7E645kep-uXtP~T7gc~x$S=_)Tn+bd1D39lkJ@eaEQ~+j89x&cJ{i- z^`!2=VeAQwh5-P4y?B)RjAEY9cjdZSoR+RHbz7zH+oy;>|8LcAtgB9x(7SaI9{U?idBK_7n(|`Iqw5RRtVtN0fOKopG z{HYcxszf-VDQ{368-Pp1!bLD1MvB$@6iclkt(NvgRi0h~g)=7r({#n9F$q@Oc@2?F zHkC@F9;%r<`!b=WBkt&}pvL%(*QnP&-z&ohK8)k>EBn@aGn}3*v=b+bAuTg5I&Gax znWQaS7(~OTwmkZ2S|L%xx@NK;qwJXoBA|?q6{4!mHm3MLDPjKO4{yzDZz-m2M$=-sr7_=Cg2RR zY0Ne0gY`2cPir^iLn!V9wngwY1|>!3Og#>4lebSS%jd2vrfXI@eSU2|ITlNzO*90E z-roq$vJ&8pv}QZ$1sfSnLtu&Ac4qcp(>G-P?Ph#{W1W3kX>1(>|t7OBrb<7ZhF zNhKy4Dc>WS{)(2@dCb-alqn@i2xLS0{bS-u!7#Y0VDp?BiMmjV38!W*uNBkIgeSQ5*Vb*^RtmLx0avZ%yPtch!6*1IfuvuS@>CC)k4GeSXw;mnfO;vu* z0t8gLkz^~p3G$yH^685E(HKs8L@^j}5QJ1};KA143s0#>i&;pW%@3tp541#H!tas* zTkXh(R~yaR|7Z+oi$;hZ;Dza_JPTuM6s}}GGKK!hjg0i;>|2bcHJD^J>e5d-u`Bhgc{73#&e9BVDlL31b#p!JEq>OxcTVr5t72O}#;w<$aI)8n0tmkyn zj~yxg&Bp1Fl-K9KAYP`@yRozQl`}cLt~k!%Lv$er)m z_hnV5ljV7AEH2;h6(R}QReTrG&?YJ-kHilZYaZTfA5 zx9Fd}#Ag%)H3WdOZhkKd0Ii;LVJ~x0 zNs8n52eb#MO=f%qjAg_4M?iy&H`pzWO~|LemGtlB`{UXyh%$1Js&p^Cfc-S?OFAh= zDxqC9`6M6u*g$FGNYsjWq)+w)X{?6Dj}VcUpO5M|q;mCmTj_%wm^ zCljlS5;zR1t&iIG#e5i2g*U30YTgN02}t560aMVXFDG_vOXobJM6DOP+r@qIa6N&> z!mcVG1Mq7}Ech^r5nW2F?9DXJ8Wsigdra|fn|_#;Dr7N*F{;!SI5~MNVer+9kdMHn zv#RS_f1Q1M$?$_$E1I?vD*SQel=-pzg$yIn(Oa6U`+GU1?c`F!dX0I?p5eiPs9m69 zBJMV)Cpwi&m?A9T16+oS4_$^$=@}#qk<{0O+9+|7$kM%HgX` zRF5#&;u(7H(2;2Qp)ac&UvUtMngePj z8Xb@@#>G{{OxsvYIu&iTK>G3d(>nT^mUL_1m~-ZEjyfV=#q(##3t}-5&vm9q(!b`| zg2TUogWEgVja!kCzS{7k2O ze=+Br;>C!+E7BJm?{a)zN`EM<>;AL6X^+tqT7yKdejreNt&j#lhfFH6+qM|r6pnG! zDCSNc*9d|wu6r)wT(mpjZtqIx&xRrNKPXtN_{>#5M=C|)w?4r4#=Z3C@4tBhf7G37 zTScm(-eX4tblJ$8 zwT84PO{R&yO%}IUNN!dX!p|Voj(|;{JPrN)8lh$VC}i=cQ`ec)JwZ!C9oh?N*Ml@>QU8=PQi@Yoo@o;q$D`NQ+kJ)TF*SvS1?@j$2{ z$&9E3S{KVwK~Qp6$$nu3Y$dwsxcZPD(}uA)tjeE1x|n#B#W)Qw&2pl)N|J8&&ISN7 zk&Dfwy2gV!m zoh>IaVFX31_J_o5;PnBjph4JeD3BEWghCUuU_oW@J;sF% zJxRCBwfO6f3jJCz4`K=Y_ip;sQI*RI&uZmoJ23aAxA_Os0g2jJM^k}m5KS2Y0#|tg zQ&8!z=;9U%B1Y(Kv>#CdCRHHliPp`oEBZ6k-lia#0G<7C{Q3(Y@abz;1k1(xd#CZP^ZoKMO-O4&0mnz6S+*8pt>XY4-AJ zul80*^Ab6}mw6t)>Akb*&F5dzc0~v+D0qU_VLr?9@Qu)h4H!YZ{~_x)PIvz#Uz#|3 zNW5YF578Kk(5n_cO^0>DcPw^;7_yZxA3`V#yckr;zqSmxOZM?NXU{dy=?Tuw<#Et<48)>wnsY$FoH_y+8SzRMc#<$-!d&4l%~QkULgv%XSq494wO_TV{1)G_X>4o7 z>tA}BC!ZCp9xRqq88?x1mk@vH-jp zZxXyb75>F*0{s3;PNR#75B$>xzH=(R(+rjj&9f{;H)PXu>fyIc<)hi(u1y9}aA+lD zo1i4j33Z0<%5#O|z0^5+UqD+S9ifE?d;WT2>D}9O4*}MSN?yJA00SuhQ%C>c1QPX@ z$~*40czKRRCkruI@m?`{He)P>n{nI3>hWzOZt{n|ECwI#!3+5(UY+0*h9I!j0S%wC zjnnPF8~rXrrb0AwF2BD9HyvfkZhG$Bl`J?jy9XhRjfBg9A|HNSGOSg+-2L$Jy}ON^ z>+hy|c!`1ileX<*!NCwEfDt5?g`SFYga4zfAC?OJ(U}jfO>?f7bmbeZ5dKIAQ?{a zqKSRs)F2CAh%IbiDmbJOR0`LFj}wd<-j5))koZLE>)Cmt2uVHKggAa8<$SN;D-kCDK7EX8|17J@!n$Lu9`tKIvR`{j~8T{g@T-08WZn; z#nC=sT&s17UZN*L2`k0kp7y} ztt-`;^HakRi5V;eMi9fz^GYTeGYBmLA8Bn@(mu1nZ4awiDOVnj|1P7xhR{!+w`>Vu z-<0!iH+C)~f1@XVhT%#DZze*axb2_t!~ex~a!bBgv5;s)(J|2U=Lpr|FiY!qYnYlm z+SP?7e1u9*Bc~`7(5)7MjeqpjzDN9iuhIiUmkJkD!CqJ^xl&@Idekh?^;O{fuJmN_ z%EMbjQRB3uI4#tnYq4tdmqLj|T07adO`!K*FjY9k$jZ6UbR~LNh1bUs+w5lw3H7Y; zN<2c4L*vBr9oJy6?E`a12+tbYQ%YR0GONX0wq%<&%@N^9w7~ntsVINx%Js|Y`w4oB zmL8FYNljktM5S6OJGQ-UoC5LsO4uuD(<)omPt;fNmxmOU*;#%i1&**7oq?~Gtny_9 zjmJ(@0cNj^TJi_k!9;#8 z(Bz(8-oNxgnU__XN6%U_aBtNc0?eYVzvjPoV&w@L*j~WrSjmWbbX|M)ExHaJlq9Dn zrm=xN>zKHHW3bBVe8A)ongh9K;z$b7Zy3*M>3 zWwTo2GV4+%H|Mb2b+4}@*gL0`XSvLpv$>^@&M4m~UJ08i=+C|X3m~{eO_M2tB%`gQ ze=as7)~1M9j{}G?0`S=%>W1?s;$#Prkit0RB3na&irT==Ya)5@+~9C3Ca-SSf-S~L zT&roG(Ko`~#UFF1ukH~NWkX8heyP3nS6`~Ugetc5yri1k-O3qjZ@umS=B$=WUn+7Q z-AfTr1mofpeXgroR`n818~+5{r@{%^AcocU`BT6+hPYw^5$?utW?ek}k z=e!NLVoNN-X&4b^S& z2GQ+vk?!q6L{KC|)MoaLsB5pZ!dsztf$#SLcbuD#1@f7KcRnaGA=m-UQ@vI@Iv1u@ zTq1&Wpb8N(m3)M66CR?z`Dl9?y-#PK3|XSH=RO!0!di6v#(-pz(JCJTpG6*>lA-ZcVG@Nnny-STI=4N$Y6xO6)34aPi`C}UtBbrfm6PY!yd~qG zlt4|lJY1Arxfu@lr}>yhVa8FlgY^m(W{Q=cfQGMh{4sYM6lp7jsW$Z-T$NlL@N|%P z3I_;3^dd-cr2%2@?ju8yvVvtLb!2G44@*}yr?>G0tJ`~E`JvR5BC#0dIMotor}1 z4ZB8MdSr~vUk8mke}Yp^n?*5;GZY;;VCxP1f*M4Po^}zmPED}(cV7F8Rw7J`>CTfn zI!+1_37(8B>gUcS*+S$o$jN&PuW8({J^Am@3!3>~Kt^72yR2*G2;dw`)Y zEF+Q0!k91G=p7us7zL;5hvmPX#YT7(kR7Vdj6*C{NPMRZ%LT!$LC%BtdP^s0G9`0x zrmnx?l7WesrPUO2!b5jK-z6##{rqr#^4k3<;qW0=pu%?dhNdThEjR(R%bwYEFB4C> z^oGr-{mI#4GXJ~?lHH5Oxgr*@|I+qBWYB-a1DwBUd!Iof0TZ4hjPH^|Aux8dfq+Xm zFA)cfIggJ0%FrF_2oZhL$>+Q>C-%^W&?e=1{Nt*bJ-JN7Zv8N$MH-LDr+ayACw~!1 z$%h#a)XNgf8!gLyPPyMSq7TiE*B5#e`TkGID!ot9ULtx?86}|ap<%lvVqhoT)S0;N zMahnWkmg>Mx+01s@r+P{deHQWrC#F&1Qe!mptx4=5iKb{lJxG6wO=YHw8QI_D_1N$ zONK}VV8O+kFk{(ljnwFSxB)N7rsBBjADSr1EpP%q00Ef@CX%@pVrVCHX>x!FZkub! zC!<6)4MpMn!s6@Hp(h&3hRFze?KL1@S4Z=`avkb@_t`Qjh)*9q#I6x9YMkCn&pmP0a2sskp;~2$C47p3rLLpeQyJIW54V4BENnX0dBn zSgly2%m6m@34+n7Tz3ZoMbF80d&R9Wel~8SoVvTaPt%hin;+yO12G-&+n>JZBBAOL z`%~)srD`aH>#K_|Q5s`3Hu9M$8p=_}iaRlBfrtJbre4Sld;V!+{_At(x2i7eOhYg~ zIrFo9liKf8Jaeucqt~T?j(M1c8-nU;SRDo~D)DT4|EpmJ={!x+c<$GNRw44579|xh zy+DCN6tm~XW4(V^eU+4)A!8i6E^0?Ltu=zl0i>5+@*K(@52?Pqs&`ikee_pGgl+{H z-q>b@CXAqvUk=dWbm;u}XA+{2y#F+p*7rLGk;w=`&fAqmXEFh6BO{)1;V{(d_D4Ay z*+NOkN$xaac0^`X=Z0Lhg7Hii1ghTjlL!_YVe3nA5L$UiacY^4hzN{=KF+Y-Zic;O zm5J4EJ3G+J0r#Y3M#NgF)iyh7zdqy)>T2(cb!pC6mWVjimLV2aN=2$7!~+ApO!2k{ zT7N>DMj(u+7f1gh%7=8#1i!LDXgNo>Q4+?{D|8{gB4UAIxHd0;VRZv@n-Uy57bf9R4h~M)(@=q=#ol3$FU;8_CdYCU2e}B_V214i@ za8;|gD<&A~(2EyKL8(F5YvCYICBsfTd^}!Eo{MY6ix`c8XK+rTC#9=VmT9GSHT$YH z$~iL|O8wFLrZbkMRLGC}V8<%b?q4WW@^^`cG85kl~OcaPlVE@DGe z54ye&6^yvzx$uClVjaC*BnIK*LTp6D{lz0r7_E8O96caKY8yTv&dVJf^k{z$f%K5g ztL-IBN@WjaFNy*RoP;&28T=TlYG~6g9CWGp&UMj#*mn0i2cF54Yxd|t&~;Q;&aHvHHGdk4T{C-36R;Kpqheth0Rwzb4m~HS^f!ly>+u6dI`dj+fk@9wi`!Lo zeY-z>^bF2@A1e*!IAr%*E{tEBn|}wp4Hgl>HcXXPhslBgr#!;RPxr`|18EYDmC`$$ z4efIq{B=NcU@dl3ZI>bF+YEe?0L&zzAbu;Y9;>J5=reMeL0A5+bj7FQ+nSGnDG)@@ zGydDD=pmOgGn^9X>n}%_OJKJ4i13wADY9r)ENvqX*A?b#Wt0Vy3fcw&o%%mUn;} z^7Q%MMNC5ps~mlT52@uP$qYZ_xmTPI1zU0LE#a>5sq8!I9_}A&3qqF+Lnfgv>b%b| z%5p#>rL~PQ)NtQ;`=}M#J;#y{v*vIvUU7sIK!V}U#a{#e_;kkBypvR@mZl43;xIXm zCgz-eJyr1iS>{+{g<4^R(D)QZjmR5O zdCe|Ox(q+DynR7WUN!+sFq5+KElVq>s6xOTztz2|f{GrAbi>Ev0QN`oRoCL)@JVwU z${+Wyxw)j(?tOQ;EFx81l!hjTecBY8o8Pci8X;eK)}u&dL(i}<_sXAgmn4evuG9F* zs-}Y_7S)wjC4N>x!OnlowA5`ySAz<2hu8oKR7Yx7DxrsBOPc_K#t*pUlP_q9iQh1( zyBL6WVwxBV={PQ-5We8hQen}O9qNC1_@S;i|EcGF&L7l`Y7%YEsHi?l68-V8zO zc~7KcHT?3_uzj!yyR-+BPcM!rTu=xOn_~gDUIj;TPGrl3*jlnu@**69<^uZ--DG(2 zLD%0^e}fmq(Wnihgk7O2;`Pcw@*U(35&udi!%(5w)UMRB^ytK2I?;g9CG}0v-`B?} zCnqr?C5&+<*5UPESnw&XC3M2nyE>yS_BGWlIGn3{e7TfA6$Uvitgf<>jfn59bN|VlYP`mPq z0`-tsnM8csDM)jaA4tMv+!VfFaD`Yy4OjIIqu<&QS=-I8Y?U@r=^J*Dce`>)9E}X1 z%j%s44z|&Voe)T+0;7DQug-=)4Q$}b^HgotcB34M6k&zK6z^jCk;J0vMcvJ zf2a&P`r@!Y2Y6SeZ>OJB4O^GabZ_~-ogF$?Yb2rM+wLsO!^^^Z zaQ`pifvynLuPB08VLD0dc&cUQZUzQP@2oxnznHC)f8U$*j=mb03OnEFS8!BTbb5Pt zl=;AMN+OF5AY+Ql(?;XXhy8W^z)5g^gK{J7IzDYq8={8EfG88(7ubjV`8e~qxuUZp zO@G$k)Q{IA!1b~RgKpRS4g>*(k- znU@iE!H^+DYCDk?*F)<$9z;_sq#x-PVMwUeSw{Ebp&nUmm|lCZ%&1NMa*{ps}_&POWq=Z!4E*4E^A$^2`Al=>;= zhT-8#E#foF0)P_g?wwY7j}YB0%MX|tA4j;R{mYnSu=@RX^k7kzomUqu_UFCF7Lxju zy5Psu24>=CcwrV%!4Qb7z8k`e*}|k>w=0-r291o^e2$Dmf#Mihom@<-zdBwE*$DI; z40(wI7M%Qaik8BM)qC{AH zpQSQs2;0!^`ogN>>j8;urMcG}8I$^QPbY6;TQSP>1_);mB$d5Li4`xGEVBeI9(}`L ze~8H5&%|E{gT63WVIh#dIsI3P54F35(k-xZYa4pqm=Zo6Go^LqxWqh6z+7_r1`1I= zu}YU3&83@De!p;`myy;sPiJuh=^q$gpM3iaP$Da+q#tL<_W;WQGGXt8%IqvMKj-Ou z?n8|xLdi~y{Xb{x%AR(z!b1i7#ero~LEZlG#{{@BQ0PO1Qk+s1Ee*bk#vk!6_AgSh zPhF~9zfb0B^9yjF#UWP?8-zzKh|QOD69om%g{DxVQpR>IKuI-aQ}8N_*7LeX{?vV zofDO%X@D3`S2P*sconi*u7!RQh7UrIe8s9^vBZv9s}WaZ;_xN$e0#LL>Ib=59BL83 z;NP!>CspEPgerNk{DH&u?vqnMS3K~=CQtGJ>=Ct2e$2SaVaVX~OHY|?!#gKY63u7@ zUk}U^k)p!?amYfpu1%zM4x;SL3GB6#jyyq7SSgVM5h_km-peUXyiBUJw~J7X6R&Jz zXH)w=to2I%3YZ!eeV}GhHy;eyOddqLZ}Uf8$_0&M=T)zcA8b9u#m?plAJ(4CDf1HD zI9FC0l)c-RLvc?FSXB7TbVL^hdqC>wfAXqR@&J4skuBDW!&(gI7nv|^Gm$wppxw|N zYE!t-LXBIVTAH#=4pKGxtU|O@NM34vFrI3&qDdXGD068*AYAHUHaIUdDi!uG#D8cS z2FYGz-$jnFOO5(oI6ZF>ll44vLb@S)$nY4xj22<6c!^oU8X6VuVE+-exo%Ev>y>i% zeA_$xS@}PXt~so-w~K~b-E7;|Sj#-Zr|TM^>og8 z-@VsfYwf)eG!XoEyc)OR7^&LqEXE~#B5ki@ zjG2XRF2VUwO})-AT9l=bAO!W42ZWi>2WBX10R>NKO0w%i!Zu7&dJ1|r5l>Y1%aHRt zoo9hHc|a~*$=w11%CO@V`bm1`$3@R!uIrUP0r+}Nj6rn64Ada7V9kr~UcSQhj0nF) zuhd%ay<@D3Vgm)!4}6aw0}y@T5oUV6S_Jfve!iic_dOWlw^i&Ar0(0Q_}Y67nfc?# zcZ=-dj5tgxS^f)Z7_X71+$iGB@~$ztuqWT=bcFQET!hctv8y6N!=3 zos+FgawH~RtFv_nb>xwO&;i|aKF4w@G2C#gpGv@7b#|!aHzBQ5$Jziq)mnXWFsExhh~k09us+Y<_j3s0etfX)NQ1Vx{$}8kt}BwMPJHmlv|4WmHll&)!?f_TJth1BcutW+1AB zRKR%m<#j;O7w})LVq3mK$C`wJnH#NdhlxBG{9i;Qkf9|ZNl({nZ@4ujac^1^zv1Ea z$>{LZ8w=)Wv{t1!1x{A_#5QmLF`b9cemFjS3+)<%_$GH6#T&tPgMx_m3&JnKB$PdB z^%p7*_@z$04#}g$A%ziYvg{mTTc!4%35SQXzcDz+&k(Prj=WC$2^r|kWZ+}-65U#qLuCE{69v$-#8~Ky82nTS zE+`ln|5Kp>SlR3Z!)Y)UMnT>rCOqu83z<1MOBhGG{6A)U#f;)D-LVkifv9g7|IA3G zZ$NN`LT33wn_D=#pd5cNU$qppfxn4f-%V1@n}cv$U&;&X zuQCbxQv1Zy8b}N5Y?E!(B6I%zRmf%LCJxJV;n<1s}gDwKl6ViaT;QTV2l2c z@#!D4lIz(nuqLWdgFi}rdpp--052GKXLlA;2I-GKrZa>iup}=Bq|WYt#c9oMq}S&Gd_L9suH9v!RJ{) z6bsz<^SpUyj~>c8le?yf0DMs)u$YaFFe=eB6@<}KDgWtwUB0`%P0WD@UQ9_M;0uu# zANer}4$i^0`oW2#AFLa;Fe{RT@((!E4&-BooPE{g`2ALRJj-pN8G zm%neW#`ar<5{XH^#lf#N*`d_p=Bh}lm6>cGjryJD+R>JQfALLM$RA%bdF*7G zv$wHHf=6rR8!!sXo!rD(v8k9=3B|S%+>mciW6mn*f9gDTw`bb5wnZ;I1f0o&2(W@3 zpHIk_HFXPo-zQw^3ujE7Lu;VjREDrBM?3sN(7=aPUsRXzuv0tLf;`JOBg#$2 z0qQ%=d8}1Ooiqh;9_V6EFceEne-~3a`%deJY=ts7E}fR99sBwU7<==XuxmUcBtz`i zeYaqXJytRG@i`p~FL$Tc5KMtus*iOYwGVpoTWE{+l+jq2TXx^*>N$Vk@D~{PLQ**C zz!<0GJgzoXkHIpX%BipdDUTFOCz>17p`X8bNpZwNkWVLs<@@g%TEDBaUoA+<{~>E` z3&02uxBrF*8QIzK>bBk*M)Mgrq;|f^`8Q|W?5oMbFG7^W=XFLQVyzC@FbZMC2{$51 zNmnwI{#IVOmg29Uc;6N3W*V(BBO4DH5Z7nWRlJOajFf1txCa8|NQYXWOwaZ`o|J6c zbvNB=+A)dO9e9EV1KF*3&Y)=u$X}AtS%7X@4Lm_Vdbwa5!+)lb*%_#W%qoFWbEq?G zWq@`+ltP@}|EA9Lcuwt)pyFMkUL!LdbCnT0c{)B2B0fTdFSTl>bg$-%1T{smG2yJFSS}#vp0$ z8mSZZIeFeGQ1RkKsdH~2o-+CEiUg*_8j?+6sxqI-Q5&&#E!g#J?P{Pk+PPbUt z-oJX!nh+YE*@D9ReW&74OGu()^&}0eU!+7R3<_`?VRfIfINSPP%ybh*Glhyo79LZbr#%XmwOlnOzpa<1&Mjf2-QB~v`d=T?m~ae? zzV#BYVU(6*(~byY?VA5BCCEcZHD)vR=&*2;-Ya+{xjva2U>3G{Y+VG;^yL-q=nq%_ z!K@)aULVOtmRJ*Ma*7bsO$Op>-I+5i=#tpV4Zo@tK3a92j%d!|3n|=`1jox}FV|7& zo|lNQsOTjd8d~Xp{~bPfOFFraIo?qbd@~(zQ}(~rA-ydLxG%|d>?}!%bbh@O)bDBC zvu6-%OdD;7c(b3E#$ouIZ#d7h_+QECH_4X4-u5FC4w>1?g&KyKF}C7xb}lI_6K!&1 zq;q5@EtXR6@p5xcu$22#RH)dM1U*~^+?%@W0QUyD!jlGyPvf7cC*tNN~{JHMPA`h*Dac{DJ+4A0n0H#*!-0=XILL>tXvX zL9Ism;{^Wmglg0fmbbC-dJ;XRjiSK$4H)y8EnYe~w#GMc#2maHq_NJ<(bwXFsGVs= zWZK)~1Dm%Hp%IOtw%<=64YD`Cu$C{MZkNM&iTmQQ6`zpknVOz~4sw-*TPCa11pERf zLHEJAY=4ij-2Ouc@1~3-3@L;Mz-_{8S_pr{%$Wv`wSPr}Ol(Gxm~D1Q-NIf9A@?)` z&oHS#Pmlp{dUAH=Zs(x)Lm@MYS;EL%vA?j@Pq^k$F&<7Sz7$7((M#xc z2TLQZ^W$AyzpLF?Wd#p%kb*|K5E4GZ0gW<~!ULclO<*#qhs)HPu{?rM{-@fb23Gk} zb^)E`$K^a(f9t-qd))(46XN2`l~LR?3^}J=P|D>HOw_qDB@+QEFzVQy;T+o60w~-A zD-;!t)#ifgOXkV#HD!$jZ-@FiN2c#6;cgXZUDOII^@53TStkycB$l~K8hP&7I!klJ zHDCONxzX<84Q%x6noAfMOX#BmkBcZ^AjW7Pm49S3y<3*Ol`${!2h1eYj!)0j!HzfABY09+jHrd+@|iFRsWND? zxlE(4Ukn$s$EDq0b*= zN~Fz~<>01vt8K=$cSSX=|7S<}E5zU&%va_UBG*V*(JsSe@E&nzhk;AqP*~++tZ4Sb zQ*uF!+W36K*z+B%Y#}~Ve-b+DiGdPY&oM0~b*7E1u8@#cnM7ikd_w9kkg{#hf5A|f zmQ)a6{6nbTjRXeoF;6x$WI&L`fDOFN@{BtB*b*>FL%X}m5DC)-y@f( zP3Plh-H1Xxe^l;X%;$&X&aHv&)y*MBr!i+S zK>C9G_dhfd=LGo#|t&YQ9i8LDLiAi&SGm3B`3~$ zqw08-T>&wOawr3S`C2Cbzo^ChsL_d`8(1Tz_FW&{0A#)s7`m zX(fgdAZNGNYo3jM2gk6Run=YP%pXizF@Cz>VvU7L_Ja^7ZDNZ%~P}nFagE8(!K<%r3H^N z;$$<$1zJjA*vpi0-l!u3)dXpHl3j{tE@9PfY)gNNr{@|_ATQ*bv?D&`$ZGN7DR#*4 zCDX-a{fhSEPR%A0%FLy!A_GRbhz_UJVI6|DEeJvs8WvISH&CxC!dkq)=1d{Bx(L@p zjtOJ6-<TnYiEH5FhG_Dk{{Cy6lxo3lZX>sFxq+mg5&{Kuusn)ThbjWDCWhLmME zT6OenSMZu({dM|?G=5717;x%s`5+xqFKRfdiMBBd?WJP0g^yv-(8BrNoW|1=%a{YB zsf*=Zv{7L=`9bd651P@5-W-qOwv5`H9cF)ojoCAuT>q3XAqLakS5gtj{lbnroV?we zz%S;<#O#IFV}|ok{S$P!X!1f2+outwpfksgNATSSIFFEj&qr_^D6ysWg8&Ly)F#(z zebg$-h0pEKGIL!LT&RNxDK>Fz{@{a6zPuEVj(X_rs6k}o=Sz%7@p0)y)JV_X9xb?! zX+X9=O8CW&dVS$9%9@_;@LmW?IayZ=6<^onO~r|GS#0brHtP=DI8J?;dDmKCDP{Q$ z9pya*K&b3_i0H#WBFwbcMt{B~vog7)_E_AEBj2Dq7l(xiO} zUpVY({p*CN#W52G6J#FyswEwh5SnZjng-qX=-)Y{x3nNJi2f1=JBZjw5cfZ$cMwQk zAfg!=VxXa7DBsZWQ}iSai|?oGG=f60Qzlqh$MpKCB4LISeU4RbAUHh7LmUD`eo_~r zqW<|PKJ4>|#}ic82Vb=Gb7Cj|x?FeL`N|6lg5bpJhM%Fa|1?*8UYFteJ^bbWydtGkX_2}{GEj-S9 zNRel2j?b#%)q!u1%xY9YYhftU>!lLJz)qc@M@iqTPS;D*HTcgx+bhl5OnF;=t^k{|wi3k8^A3h?5_O(auCDbYAbIb5yFP9ha~!(6dt-acV^nM$d4Pxq4Np}846`CM4TZ^ywN<@2?sCu;hC!nd4h|g zrakW_W5ZoXKxC6H7W~$aOimWSUmC-~TJ4{c=Ac{A-nCixy7`XhcyArk+36YWmVLE$ z5t%d{Y)-PZchUANc5JI~{ASVQ76q&iHy@G7xwy_e9 zxuJP^*@oi-Y?zDNtwu*V=dt{_BHls=u!oc`+~eer`J1$BiGkk>V5p0V=|`Ic7z=!xA9;q%CwP>@M%nDS95h1TQ`V*S9A;#h->N2s7kjXxef z5Z)VvBjvH$8W7!npJ?XK)4I0JtSkga-^%ZhU9cv0OvFO-qV_MulU!egIJo%V!?@w6 z&sg8+f`j$y?m?ePaRc`72HCv$H$uoV4UQPuwG>8`%8jP=DjONo_>eC4p}mYlta6y0 zP^2r^hZop|gKtCR#gIY9+$AUU14iQmaN)lbYCAohf)bk<3s2C7&}LcocGpQOJ^D?4 zubEZNk`lylg&MBKSL6eF3;wE56&p%!8Nu~=`GN~5%$Nb5puy*5`C4{koG0u@ocUq{ zdN!dql!xsX1L%pWnP?QTgX%Z?*^4mNMu(98Jq6EqxfChiv+))&b6`s()IOr=Vr04l$)>xEF_A2c_sgz-nruvAuvI*)2t+A!poxke7 zn$T}Z^P+O);Tx6H_()Reg?YNnK>a`4+a*klF$XD!n@%N6*Lt1e+)_@s5sFu4ZZG=TL@r8$I zXfwC(mHj&k`Ym5*V7k!o4?N8FlW^m2aqQT~H5QX4sC8d=p53J&sH}$i91~RdfZb$^ zh{J8O69n^<-?@WbH{DfZr#5bze2|%N zX6$qpSz+9CN*gbLvD(c=KDlzGK)2IBITd72-{=r#ZS0RWJn5#Dt7`J^k^ z5cC*+>;%3$2Es;L!Hm|NsZFgT%C-rKsmR-tiGE|4B(Cb@&Smz6+j6Z~9|rpy17|mA-Xa7J z@lBL$Mo=3z3`jGDzEDu6K=^bLh5}p0{&%_PD6{N@Lhq?<^!L9LK%$3SlXXenx__o# ztu8Y>dEUyUQL@12)zM3pN8Q2{6YdAwbkRn{I4iP_2_@KNN`E&K`o^*HGWpz?egRh^+22*9MiLxQ4Zv+YZ1th;z>Rm%ekwtg*xM$P(=P0D;1UkQF z?k`>K^wBqQbar|wusOOSB)^4@IfnArZRl!j=(1|DSXWPQBh+WRPcIXpHLqRSw;U9` zY(6}A-@#$xOn{dMMRMWUY=bAN8g!#WEOl6hmx};PgSmpbW5M)CQ8_`(G`^_@=Mv() zBjPPSQrynW^k*SctL|xOL;_$G3~tfw$yms|0}`aidr@3_~9e?}ZMfmG^Ne*ST2sgbZEPE7QEe=3Qk4wNuu!QidA~n3!Uj+$c zX0)vEiiuv&l)6gm;+0w9u!3-WxEJ_V`e>{FAVNqAtrT6n#hu*kpo+GbU&l z7TznFI0}C``l!}vZX}tTR8IA2qP?(S=Q+Fy?jf6nHX~-io<>a*1IQJAmMEc?>U}B| z;sgX?e)5ViYLIR)UxGi5xDLQcXO&tubYM61@eEq1j1@hZyt%6gi}I7)Cj%DrK?Xdp zDgi}L8$zkP79_xr7MPhCw$VS;Ih+B5N^-8M_|WS0fWXc%cv5`zVpua$n?^>@30?qk zjEP^{llEopGPwvYrKtdg{X8C?t5a8f60x?JVuoXo zi=U>w`G-ln(SK*Kfv{mdsZ2a6KUaOTVU-zyg5SPGf%!MEmT4)ngdUu)zbgEV*UL57 zl%6l7RV0yE%1YerKBK&qN(%?+0j2FJc}C`@mp9hMgreim;FTBO@dhs5IMer`vdl-&ef@Y%`~a z_>yWnnbccmy}V$gV?SUpovz1ZX&%?DA@nqc7>40_BF_Kd-OvTTH;w3M$s!n`5`Y}w za5X7Swsc}kE6rK3vFIF2tmGeIBFC5ZhzGD`A|0NEd@<@dV+YZ2sr|w^Vw9SqHfu%} zuZ~CV-@ko9oB*K$tlftP7-*?bh=!*#h23Wvu6o9-bj z7~2{{ZCYLTeOZ*t^Q zwWs=@sHBC*g#ivXO|BH`7b;+Zi|r2v*_>bmguplwF1;sL4AuTJ0Y+vZ`j>@xM69;U z@7>oHrvg)9xQ$aPl!?qX=vRMB&%%az{-Le?pbdKGEzqKl;4OzGVD5Y1^Ku;I5q6(U z>pz>ozV%idNWJ>gJj4PuKcfl^a@Jz+`Nh#wc5)2&Lz4iv6x{i0JcI%CxRv3SBm)h) zW3P#1&o$G8xA1W(Ydz_unzR23XPg0KdqAw3i@uzVq8x zM$N5%U=X19_+Rs%bxa_j^AVuN7R(-I%{63*h8|`D?A!O1-NZT&oTx_vLVo1+DN9Djm zBnQ)dP@V)Ubj}tmXO_QEbMaTV@OrXbUZ>cZ>_01DnFh#!t4IGF3jQ7Gp3dFlnHqMX z##30DuZf8-P*h~aZadxgyCyg-HMOfG`(3KfUEoy6O>0&_+PZn6C38 zCBb&>vRbvFP>p)N$P|B}nOf;P8(?v%w5qqe!p?L5j0Y;ETqZCZM!`_One|(8zi}N@ z95^{}mlop@=k2-?Dn0~tC4N^Rya~8L`bYR_H+gO9Q#26uo}6ISzj+?tQUaR1xq1eOiiY;Vi^Rw*6@v|Kk^$%dR$~Q z0_NzbxJwwIrx_vX3mUOuv4stT)h5ckv#_F18ep?1r*{CnFNCEAKmPd} z3QecC(Ec9I&DUilFin$yfNKx0FPkA^{_}_?A%|usli39R7yKR*N6Ey}Kc*-oL0rKVvm9YzX;buC(fL#Dh#% zNf~ssnF5_nf;r~Ym5AC`*Q}&RpIXaW{2wl}cZ$BQ$Sx{sD5w|`g!4>&+VXlDc73g~ zrG(T9E~yh3muuc@gZJZNF!R>!sofD%na?z)IEc1?-N4mNl} z3@?6BGJd|jvE0IIL^iPi&Z8ssSm$ok1bQ0eT-Rjf_74_iSQPodWtgx2hyR=oF#47&M>nLyx=a&C?f7lms}E8zErn^>rnhPLtJKFg=-6bX;((n*1re;r_k z@M@*lXvpb8(b&Xdz!agLIU{dIDpj(d>DJC~Hi9^>8`J)?3b2djAR8jce}-&&Z#=_a zhOYDGeE#-;Reu<)q1<%fkCAd`(e_WaY}Py|?T$%H-_fEz9mboWsGGi|pbt*{Vucg< zw}T#TEaNEf@;B*ie*t{`+^-PQR$5G(jh!6_yGhx)1WQ;lhcY|Ui55c$5-Rr{hqs2vWBBkdQ${VgfeEU6O{J3;DrE4_P zUiQUv>TIS5ph6;$wc{7Rr40Ust?~P%l(w=ljKlj0#Bv71$=_F+!heT%gJ}&%7XXxT zgTdb5XZg+@$kee>)>}?@ja->ZU2Zp0vDSc&wJ^Wia#xF93y+t)2hFLl>K=3c)eyaR z3B;OgrZaTW=;GT27d=2AIk*=RZRbgO$x>1R&zduU8gPYhi2&F&^zCObW%psd;eMOj zdiW>8Dz7zJtofe`#Iw(*zQ6?2eGTYNug^&1lqyA#{61mX2sa6K5^~>>cFm}~haQ8+ ze%E`BjfqYlN)8Y}*O3l}_z*AdMwMi$11>|R&h0zsMEc4r>dLWuWMStR&Iwz-s zg8fek6sLBHpf@K}MtGlaTBI<1tJE(k*-8aZm zz%Q3s7OkMMPK|Wv0!^<^t-&7;Ib>F z_+RRR>xA_oV7iO*R~pM$kJQyhi9%yF&W$asO7;HA()C|f7~I0Tkk@kf1TnXor`k{p zQ`$C}dXP~LfMk&>1oidy#3=*Gxmm-c_YURI_amyie>bs>VQ6?LuvtV178amy3HN7K zI)PvW3K26Bw%R13Ot508b`7MF&(*YBm2XU!X>qDV$kLS98E_ED1&009scUV6s0Z8a zxP7nFgbV4X*MFhRgD9aiYE(%;f{@*xup;3P5hY(#+pY6`_G878R6->|`j$F4IT3x+ zWU7(nkdG>XXEYqz8cn(*pCG(~*GN-6stB(C;hX6cgBYABgkndD{oQRq=%P6CU+#fm zAD%Y4v9?chu}xHwG7njEh2Prs{Q3tWJ5^8IFpGm%=M#Qn4L`Sn7B*MO2&$F&Osn44 zB*QgF4{#W{sMBU%e&pD^Ps-=yEDAB=OdHjS`&EFX@4e+i!IbJ!xI#MvN97*>8+|a* zl4Wz<1YIAJK7pKRA}KTat36vHaaPThb|1|&gj|hafol^sOi-2|Q;YA@5_8S8y$r@g zJrwp#`I&?ppCDzOp^Z!u<6msu>GsQwUs*7nbmiS|ZS%JG>)3;uNmSGdp=ztMmrWD} zPPzG@EUxwCs0b^&PDWHwF%2c~Ju{+;4FQ60605;9o8*w~SL!A|-}D7a$wjF*bgz)7 z&SAA~Y?8k`ZA}gjwsEkSR(AV04H>(6hkg5$>ShCX4;i~#kjFe4wm)n*(}0fN{}R?U zU|8h;#qRt0zdzF+oT`#!`3C+Gum`ij>l4c_%~Kn>kX6cwze`8uEVAyDTJ@Rej~T(> z)Kvj>a`{yh#?8?WxvyojoLl%CSwev|zsmO}Ny0sJjHJPYV|uAjNi7OvO*J-xK=h#s zdxSsCc196$v_kEdtWs=AjRB~>m7nGuCfr$*URVFAUWOtB>E?K@7p8ou$WFV3m1du{ z&71}IkuCo(7^^oJ+5T7Q^Exck$DN%>g&}Eok0iry-~v}gQP!It4lXctDw~`PS?Alu-ger%_;`Ef`{~TP?Z@<$Sj10Whi^N zNzbcC)cgmDvF5wBd){H_U;u$R?L`Y5KTlGQHUqYo(EI`{*@=sG*zLCt7@JkT!BI|GUSFE>mZHt{BV ziN~o{z1uUsT{s2}!Zf}9T26&1d_EpBpd|eVPa=_|N)^1eiCKiqjXh4DG#oh;sHo|C zK0{_^Xnh%eVS&$(5;!I~IwIVQY3ly%Vm5A`Aal~( zC23A{!+^r!@Me$CqDH8|3HoXOD^I?b(i$;GMGwqWzO9Z}d9^YyR_t6m*+U2PgfdA``tn6>;f2kYLseaW9 zY~zr#d<7=z1@8%F>20zJ3FPUfyxu&dWeGef=dmlNy(_-}bAc0#V(%w)!1{dxZvhsGXp9^@T7jh@nJfscd{R**%-zNjFn2UD&M zPmU&rTPIQ)RbBt`n1azN=ge(raoR3>Ys;YL znCBp2RYIaV2qoxDeh};9RPmzWA#prBz#&O{y%49$=`C4;9IIcizxG&d=9&?^c`ZCzuV1ST4DTk{v&Qw^A@y48(Iv|5U)D=xT0|@MBNJIjoc$bH!Z9`PEtr<_o zeXi|=nxdBN?Z^wv)Ui0WWuZHZuknAfq~vv} z_7rfETESursj!kxnFL6(#Ci6QBnu(Ct>IC$c<~x})r3dU*ly5P6rSvhKPdt3=DMfe zWO-Y^ax33#e-fv4M2Bx=szEvEwlxls(#g%vPPtzCXFO{{V|aNy{jJb>_NxW@>}S0d zkkI^2xI?8I$2$7-FCyW)46K^_->WSoFl3R$_ol5!aj~cuRzRvOGL}O>he%^-H-!RBQ_e6;+#Y_Tf)X|^@RE=+c6uA3 z;YP$Q#bS5Hh8#J5t6(EXn9VAcjt4SYcVZ6Wakh5M4nN1*y6u9ts#R;ad!jE=B5m9C z?czq<*q@&te{|8R3Rrsb07eOU*1&dS2%egqU0Er1I0w0#ZrT~l3~jQzPdNTB3tvpk z5U^2SnEB3rF|Yu4we7ZyF+~kEyX4mx4>NIySm+@#>*wqe6@~^j)`fkcQ>g1#yPcY9 zP&vH2O7~K!<+mcgaT{4Ns`%Gw=W^BryLQ}w1nYx8VHP_E0Ua`zfJQJ#r+{fm5Pn+) zVL6_0D3Gg&zV0uo+_L^;O-Z{9MG5%@uu%NnDx{v6%gRO(tZ`m+VN!zviW%Jva(+tz z*x^TOyZ}_)-zWo^QE)UMH3DTtU6dA5JUMcOWzvVRqc%(=We1EKTFwQ}2TcD&CA8j3 zG{d(qMf4ErmOcQB|v$>eRV&*ZU({8`Wif*%A)MRnyHM{r&Qt$6-;6H-o>= zkX(V|S)4jFtkR;6W&j%2?5kd)rhKY)Fy>;fBb8-sE`0P;y~02e=p?*3c~TN>;a#H8 z?w5@OSpRF&cyzkdJfE*#+jCo$5Nj_%H>rghHl^yRrY3V{efqXf)<3EP_`CFT|1MYQ ztBedBeXK0}m)^pHPwvfDQO9lTf_mUF&g;3#k9RG6UsN||ln~``;qp}>ThUt=C)*3= zxMkeBnLmZ`f)(8|6Z@e2hv=_6=2QKgaY6y)CIjacGHP&F#uiw(*KB>b+>^Q8Oy3_Q8|RoQnTGR~8la!5Rsc_E_Zc(M*foptU5=ctmf z6!i8684@B$RMN?ds4VRgdHyvqIYdaU&CtPNu;SJQXF^DJOMD&!@3W5lEj_#eqghAy zpqNG%ieS!z4HqsLb64jcXrr!a;-sLEib6k;A6poj;ape9bipsHcV=O?eubcyE;cZX za~TUG+Ev0N=M62M(ULsfWkX2q#gUU-To;H5Z8nYK#qxoCZvdOVyF190k>E1Czt~^h4k2 zdbPkvO9v{H`=(DFStk3QZeY(I>MPoKFsE!{F4Bu%Y6XD-quV|n3LM!EVR%$R5$v&m z29HJ~eLx&fLvHihwSAF3X!1!DPPRRTQKH3K0I*aI3+O8rOTr^Ku5HfSZa62sz!ZCT zXn|;B70^~|T1x)+oLp=N1Z-sWgY#1{(PmxkE&T89#UQ5&(QWMK&AlP{|9x@cBRrq!X z29DR3Z#0MHbJ%(AcRuuP3+Ic!6db1UvPqK4cP%;l%ca9Gza`z=+~ZdiVGw-ntHZ&! zD-`Fh@<0w=Ek#+i9(ie&i!EHi{&l8zSD4AsdWyA5+Ng@G_S1hRsn{>n-9PEZ;hO4> zC!ZwWp_7e=Rcp!MdMUAn17Ey+n%=S;AGhYe@OY)sv2;Cs=x{LLBkX>@31$+`Pn$Y9 z7JO#HYe%eq#_{(h1V`sCXu3wenMT$BBrnRjLv9E2_eQzNMGm3%`vAdvT?Lx3H?}eX zt#E_QQ;9rSqcl*#!K%_-u9?-}&y?gVDaygn`|`TTM4zSXZ?CV=ItKBXLv}EC74IKS zT@9s8WQq;Nu6E&bF+dh{na-5avR+Lgvmq`txbd?dD%h~-?On2tVv0$WI8UMPxuqgb zZ0o^dj>mavR=p4Yxq@2zz(%1!{(G2bwazU&{lu?59F91phfkKgHG?nel&@M}CAEcV zBN!VdsZRxch1NMf{w2MKj%}Xg-8qd~LCqk6HXh8aT)d9urpSW_sdIAvFp~{n%d<+^ z^Byh+3SvCjNJQ8_^_R;nbHqrSl(+9a-P(-T=hH!(&GHc2G&NSaWio$cFgN9$@#N|; zsJ*ZZ2RDIw#gj!+TO68fPLl7};`78D3{UQntgKJ&nbfFLej3M+4S(lBxzzY@mlWBm zy#Ld!)=n!kt6;C48PMGI=NgtADn2YeT@6|7SL3tas&X4OlJ~~saj!p^CDw8G3G_Q3 z!;50|s=YMC?kJYLxTZRM>w+ffR)2qu#!hPiEgW?-54}-Cg`xq${*JZv1E-IOa;J?g zCOo1~3HmkqBw^}LQM6D*Fojy0ZB8+S%m{C(h~yo=}=Ixkh3)5x;tcFDEo zqrtA}CR{z#OiMVp=FQqdyZ*vjZ5FmN@|LjmCn$I}0ez9)V~-+L9Ml>KRkJ)+UZb0*`*(FySZZL^FfPC z;%u zuluhwo>E)=tmZra)t5dE%?KYS=e(v2O(E}hCk!n`c1i|@<^l{bi2j-Pk>w<;l0=_= zVNpKN0HTNQapRh1j-4QM!*5K>Ro0n;SMd21ORn#b(E-%NAeJhzInS!q<@o1(UuJAK z``jF2sPIhYW|w^-sNhYtcnqeFsAP|Wd_=_=vof^n)OmZ-Z(hBEQ00P>{F4F;3Eia*he3AaWCy)oHnC;!S<+Y|qEx(nwT8G%mXJgkoa z*F^;ieb$l@sPf-w4(?jJ+Q>)+A%;K0&F}#Gy>X7tG(UMh)!IXy9N=~N)vgZS%bZ?a zUKx){*>kgzOSzmmV9j`xEfPEvywZKc_Giak`LGX$0-LPH2YD_970nP=?G1I`wxr-9 zqm*{gcMUnUAg*9`*gU(zgkt(FMlIuy5=OBAo$;UURXxiyR%u~PEbZt6>g_*8sURRZ zH;|PgCAj(Dp)jEkHTt~9;FP{N3miI+zn_rT;5tQ8c=(=Co@7E+ted=_=WORU^2iE_ zJpY6D{S?qa1~^KAZh&&L3nmzNV$ zs}(G}#(q3u79!(vY~k>RLO{^TL8T>@)YubdgQYU#=`5qC0WfGbz*_bf0KmyIeDfCD zl24ymb7@R_lxYyEunv-Ya1esJc@Vq3=djfdY|8QBadhMdw}8^Cz>`HK))GQSO6sDM z)p2e6e?7v@(GP;{uRL(Kul2#7<_3Qu{&T_WTBOQq4S-r_FsdEU=Xyz_ciZdsf$HYo z43f1wYd55?;&Ao$SjJyu8J9%pPc*pGQzOt5*d6{Dj2ahgQ+bEJP3sA6#dTJy^-h^x z3f_2XLBLy}RQ_Us{Y^@c3Xm!pc?;7N@|;~0^COcWp}q{S5MGEb3GdsQgN@W+*Zreq zMusn2zfDM3Z*H1Va>`i+VT{WB;?|R{EFmwiFd`9g5NN>p^m^+H-aXs0eLmyB?!k5? z#1pPu+ge1|g%@-)BZ<91=GhD?FxcoVe!pNy$~|3?kVMgX7=srz`>BeJ59Mw+_yWH* z&IYS(K)$yPW@Uu~+*ShsXE4dP_hlh$;!xmKh|+p%2MtwO(F*At;Ba>!#_)A>vPK2~ z?51e739h+jac!!CbVJ$C{{Xvcs#bv>Lnq~Q^a*S|dh9}9jr?7P?#!F7)6R~jJrvPx z=LevtH3&&p<@@sK*1U)_PY?OzNb^MLTWVe)HJMY99>WUpE7h@6VUsm4#z%jyi7Eva zR^gUqK0H=iQ%5B6NoRw3d+|cf%G8Mf7s->GRN7@p_Otj2^TLg4&`QuYUjnF;QcQ2kR86qxYMcS3QJ zR{Ru)uF8Ch{LQX^<53N{!jfVP2L@gta>GQ%LP5&NQbf+=QI?l<^IZ%ou`EF;Bj)G3 z;D+B2vSGVrOifc;|DyU6b_nL*-aW4A*roEa_+Ky4OGhHyOB~!9QhVZU)ucJocc;=A9= z+jmP>C`p^4sKB2wZG$_7l|cO%dnIipbO*i0PCHcuKexv~H5-+_+WZdXac|ELS?l*E z6x(FYE`;|!`EE2!&#mLA1uM}+KZh>2sbHU`G#NNLY#7K?7F1eSS0ns2jzbO`UonM? z>(d;438K2@%>g5m2eCszV{B5QU~+bGIRZlzXYnRE8EMk*tla=8Ay0s~H8RC4XSQfS zD5Bi{+3$yT!fkI31-<5AC~qZu+h|f5)d|Z#CiOid^`&%C#tU2(PI5IXC{##|Wf~M9 zrbMz_6bS)!f~3N5m!+O=tV)BW!@ut?XWZ=$@@*JaL*e#=;q%sIf$4!e=mHVqjpW;; z5Nv`UU$k#lQto^FE;MwPvHuc9FJ+BSdx9Mm;YtL>w_z0%F5eu$ZnHH+2%pm^S?vWS zf=bn3)PHD>`c?ud_LHMIkdC*j6RnO0s>>e_K3(ALoDXu7c}cNQB_mgkhHb6-SEpx; zNM;)bd+$)-soq4Sk4_4)F37U5KGMjmwMJUoYzA2imppUe69d6!z)bdoYI#mx(5srt zn4h$@zr%tv+GSYkh6 zOm`OiWGtmp>F)oy)*^ZGKLDpdSij>D?2YaefRT08WS0gO9O~3 z=B?f}wi4Zl3|W6oCr-@zd0C4Ok7(N=0350fN=<&)P7}TS>L+;TxJ&SgkFUeSJICc$ zKLNnjSD3oQH8oe)4bx_Yju-S#8q&Px{8h=Ie-rH`+Dp6tl((#wo<-%Ex*8umPQeAG z4od0g)Xf(Fod4x7@J$n!@N4$)O~d(L{sMr5_g})_IE0Tz@cjprL#1~zp*I;bZyL0& zxSn3c{Uz=%of9_Y*|Reaj|A@;uCJ$<)M2xRAWN!dinW)~UZTCU7ah|Z>T-e60&6R* zEa>MIM(%F!mDNtnLIJN(t7lae1pKD%LrG{ycfUQYsuc%a1-aU`(Tcvk)}yJQEGxVV zcOs^Xf~=Np0lI1zTQF^4!CFWX!)P=_Oa_v4^GN=6iVu0S-s7$SrYnds>%oFsDOVB@ zQ7oaG`>_@ux)CaZV)3Xt1P9uXjSc;yF|IB-|K$&&oc@||{>vZW>XIZBP+W0ZXDphU z+bf5gd8Su$@{#57Z-Dd)LVd~Tpo;eLHMbWDC9hsw@{1R9o?kUggF$^DcqIhe3J?c1 z*Bne1xT50KAO9>KnqRZWt3Uo3uBbS8^or5xHB<|5HS^~eEGy5&?Sg;!$#bSn&4c}Y zip3S)mvMjjn(r@ZT5K4ZyZ`QQ@btj}(lj*7lFTaF%n2c$M_+e) zS=A-8*)?TZ;(deCAULcI^n1cvZt~v{3F`>QuE<#X-;mmz)TZP~hUq?@+Js(~kfjM( zYRFQ%vjeUZvhv<;4as&v`?7)Q42n|0fOAS&DOIgF-zpL#7Q~{+|9^|nw~NgYlKx_kt83+-{$vJ8kH?wi>eV@Qo>Np8j0R8Q{_-{6U&_@Lb+N=$CCRGh z=Rf#4N4e+lNe>%p@?pa3%UjOp!uW8H!T9}XFJEJOxtdAl+9PQ)8^fTIq%kdIp0OjG_dR z1dMHkMmzQVE;(xx1p#Ux6Tt`YO&9&J?VqR9Tat92EE{357i=fC@1cAr$nEgz=*>!8LsP z&;CBuY8I{g9j98&`1GIseS&MqWx>-2LRu_&UKLz64Y-_IjV=YsXLilYc;U zyNC<=uG`D)f}i{+{{UY*PJjQJ!|zQY6L1!*4{^;y{y%@Uq;Y}ofA9^SEoUUXBg$gQ z?BW%JeG~VWuj&4h$dbw4Ehi_AC#ROCsoAR?sn1wm1<+>h>Jb6}~Ca(6pYu2tFuH)3lWw+o1{IZs?Fz{AcVERVXL)oD|mvo5f8tPMs%Y!+LW%Y4n>uq z0sDXYKmYIlFaKi~@P6b&ccz)MrN-JPOeaFvq-eE8=$5dV)+n@M#c-FBCHVF^@$Ewc z# zV06ZJ9{h7Ca(D&TpOyUl3&;QSpPbQn_~wI0{MDCV;t_6Ev+goZSWFl6279QF`^(pB zf2pWeKW97;_WC&^YkBtNE3TRfR|THkEcjxkJilm|6@sczHw8_zpf@;(_VP8em(n%- z^5qv4#e(1+OFK{nbC@)u;cQ;2M0r zU|65yR%cwCJtGN9)(of@1&gr4X~3emLI?r+drGo@$SN$r!{Ngc*G#AuM0@!f*o*oV z#m%SGs~hTKj;q=mr{GJ1ckMtXQQ!!nK%}i{Q`2t1j{n%)UB9tRd-T zBzYR`<=5C=s@am8pFiXC|N4)4{)c~wuN#i?XMEfIA?DK4JfCxO-XOjA_~BpfB9PMFQK5g{RP2K84hxcbG-WeE3R&5%o@j) zt66$Q1BCVMae$!hb9J*K@3pPIqrJTQ_EIzrU%YtS)=pb>*XyShMGROmc=d?VmZ%4?MzF@>gCnS7lU6jKN}3ABc7X%imOL0M zBvx=@v&B1vL!q= zQIB;qV$n@^;kLNE8!aepu9>Xc?QUv60%E!dh_)$P?Ns8>cE~bd5yXJOVoZWH2|~u~ zE0{j7sh4rO=(|Yp4b|e7#pNgXa)ztsgl56Omn=ht)f$h(n81M%vcxbxOt4RK^6x$* z3^S^Q$C^Ec`wv)Nd_Z|V!LLkQ+;{Q-aQNzqa{2{zF{3W$H06?}F7U3#H8tuSK?AA* zBZ3h~45UWrC2*7^*wi!01ZjSgMe!|)W*FD@9i)F$^6>E)^)LRA=M6jwC(P;vKP*=) zJv1Su3Qe1CKzj&Fl48@0B+W?k5n1nq-cZN~dmJ2pM1OFAkt8neJGsAjTzx|^dq!Q% z$cKG?Vue)W>S_`#pyni}6U_z(!8ZH+26K}?ECGHlu>?F~tLWAecs`^O(L935gz zw3m00+IwymbIxxrC{}Y;%Nf3D5CX+&$#OBrxr*Q&tJRXasqs!}yrP<;THY0bqoAg% z=(so6LzD!_(+nRRNn$8Ng9!99Ly{Wm#(|-m_iy@)Gg6%Q+AY=c79<%34 zaT6$R8=4}DkzZ@k5j?IgsEZlPo98s8!`BN!Jtfpj2o<-XMzq0q;#E;5j1a#fTPpst zrn#JPaQv9LESauuK`r*NWAOe6efj5qrFG$?d=hKhHAX*_%%O~&`{x$ z?`~h)G!P9QRYh!IGBM;?igSVB8*JY8V{RO%&&ceA;b=mdK(SnK{`!pI1J*)+VCfGM zjCC}j?d+3et&z7uDZx3xJE5u#b=3|_5(OOe(jGVG?O?6(sL#oxF^lGctS?kf2u+V_ znR5BnjNsdFa;C69P9e#8el{nB_Mb!pgfK)kA%t5{_?^G=w|IH^Q?LbDKV@;dWR#Ba ztAzPk!}Ml}`hwsaf~!$i6I?}TR)nTNo#h}+xvEMC6`~EP1e|oX5tO-Y7^9RcPkN!a zFQ({0pX8{I8CR_Ig2b;Fu!rnlF+4gTJ)ZF8A6WZ3=k>0_Y+Q!PARJ;i`9&Nl7j~F zUP_h=Nvbq%L6QlLcU)Y;aH#CiRgNq++0d&28~ z`V%y)T1U7Gs|O(D2fY9NG0*u*r*N%f_VdZAFglVcRz+_ zui*z*T}5L8z6MYGwGR}k0i309F@xHHQ=0X|L*p`>ukgNY4&c4Ph75xv;He4gTQ8*d z2;&69OGMh6JR@MuF_;tbVM$ZGL^Z{;q7KjmD1%V#AMxlnKIGD+&*lgUUng z6&JwycAeWpcnr+Z0BVJx9};-h{(GpR8VKGKT!m|vWDgSZ$ptqzfx$S#<|&OPB$?s( zbi`~{GW`N%PdGSuL}~~4CJ>x&Z_#U|Sgq5&YS3a+1iI;JuZmy@-RpYP+vCyWM|}Ck zb9}R4GK78(Ri#|d+7Z91LcM)~NINNc(r^F1i4lAQX+CDDp0X(T>kdrO1j%}6y`=qz zZZ9oIx#i)0U@upyML-)E4ch6+HE{4Sj;Jrmcz&OSG zw&1v_N_^d;msGqw57;#4@Zb@PVu~H6eCyjo&d*D%wPb0Zix;bI0g~>rR!GbMuMI{T zdU--qd+JSraJyP*FGFo0?dMo)2_axf(4f>+#h}-&P2(!+#?jB)K0xKNoju{!`+Cpd znw(Wrwzj!7OTwsZEZ}a!_WJznW>Db4q-6bm_uBEBT|Z4S%A&+K#ir|$h+?h9TGRSX zu08jRF;rF6r3TSmCJ9Yl1IlP`kE&Q9Vi8TL%f;qgS)Y8p^-kSAkplY$@?rZy=^rp# zIc{&~fJH-lZaUX?oN80*0ztdMw%%jK($tP+v7oLCYHgjRrmm^03hz9s0ns+)O2wcC zoCdrqCQUGj;M5W7?NGp$FE005@OGskPP9uc?(&Jd)=@qvc1y#w5sr4>>N2TXSGr5Z zT8}<723**E`L};>MeSW`;o1fQZSlGW-Rx7zzpShMFDpLQ5f6Ez)$UejEY`vyU^KM1 z0$t<-ZM$XNrC+rju?!v&wmc9D@@-awofAsMN{LK?LWml!0HA<0`o#Q0wnnL+q)dtpZ@5lj88nT&R#O; zXN?m_=Z=Z2CXr8axBM(kGY)Aae4^`UQ+Ne zLmDkvt{{Bk(DXIE-+n-ToN-%BQD2hv9YqybrMF~zAF#YVL&dh+pd10y?%=;W@I-ou zsn|C|&Sb^qt&sJFNtiI09HBC0zIaWVRus#MVLpM=5mnXa`g~3Z=g>Jx>u>t1IAecr zkJbE=)jelBMe*8pnrQ7?NffSEOJ)~0cN+o9^16LVs3_VfAAIW+brqK{rl@8xdO(=I zMzsd*p;~S2Dr<2i{MGa&dq$WHg!jMsgzOl`ClxQg{0!eX=JOScWkFdtWP>rye2D

i9D6Ub0Lb_*ocI)pVrfOOdzS%}{(4=*+Xf_*Jest7!p9<1B!P}o-b?Xrb z!Sg@-;R_(eS5v&N2~AD#6*u!|cvll#+hrsK&wu#8``h#;4a12-w#UQ$*Zk2x`5{*q zKj#nrR-fPe?Gt!tVX_ZDe-6ovr(XG7gfBEO48oTlP8!H8@WnY?{u#WQa#q5F1#tZt z9A?0K@ZT(83Fiu@e{$8@xgGGlTJrvR%@->{gW~;bg0@{y)KBrM^!+!Pj7xs_-~Sn_ z?L2Y?AEYfqEUtO>hu55b=a_FzEWh~i83%ii|2t#Y8-cNWzG@@X(m5hV6l+>%%u0n= zfZs7F`IDH?!^ILHK6--~l5587kGrTYH>IosV zX$YOeP_FH@drg|v1!CJYy0#coF!l=M3R!i1Bc*BAO$Dc|2x)@li)WS}{&dN-rWHRP znxHt}eooMCA5(yNdoYWlnj-ckszYFfhR{CL6GDyi74N-w!sDY6rw1*}R17A8>(>=m z7r!L2(6_L>X$OlLfup@sJ~=zz%2#N;m;E&1^{vMN-#8Yu+2ic;oRxHEX5NFU-0=}G zeF*J*uGV!ccXqJ-M-QlqOD=948A^^aTY@o4K7!?Sh6InPJtc;6;Wua5B89|4?S&9h zaP{WGWRnRmz)DD(5f2_7^ZKh#@IFwK?HTV^S1cAqCp^GN3X+rbJO{@;UjO1%ccBC# zV}yBUS8IuO4q0NjoK6W&XqpwSX$aooeJ4JAn|c+x8{_tM>)Y4MS~)t8 zcOKI;xVomU3d+TbkYt!7VKu+T*n|%b4fE@aXFm%J_l0kM{D>^S<>FNd#&B?OK$_*O zW>;ic#;TZd)08{H0}-;kkD3fe&7yGh1_PQpU_wHc=9J3&XJAdrtaROFmUR2MY{cy5UrE-|VqH9K$;XGNI2P5CG;7m)P)A)>q{d=J zC{`tj6(nui3+P4=5rX#=MMY@tq>Zr#*EE~UwDulfna?g6jZ&Jrp+rq z*{-%(0Hf>nuDX9bqmi6)c|%=>_WZ(7*KI8Y+Sc?0?f%`pr=Rb!T$U8oil&*q8>e#p`uwJ&fA ziEqEiilx`~?PJH}|w5zv8KJL|fuo)zH7wOQgj#r!3yq(}cyXZ#Og13!`v{TTHacvqF zU35f!n}4g)j(!)@R^E$kHy7<=%&?1qJVfLakwb)Rcf_3_(&MTIbq*H-DGe*<(GVC91BXYJ>9oK*Wijsrh_vx8n<~RWMlauMdoY)l&wkko zkAvYJRy@UON!_%w473Y}J$yf7wBMtsOZxdCbp@Aa*9?36G=GP)bUm+az)FhP z8e>3ATRT&}PXw33H@^2R4o)Ajs&6s&iaf0d#j1@^REE_O_QxkYdwGE%>SAsv2W*0>ZK==?{9$SGS0-X^Pg#I2oc?*XgLIvXk_?zE@G4S#W z=KuUh^mAAh!p%aNclSC^9x9W+^CA55f*=0bf)JG7IeGxe6f)2BtR(Fxlsx1Izx)#K zXxkwB*69yH$+HhwEDOA@P;~??cK7bhh3Y;=EMl%V!lNz1WD{}hGVC_dOy4<#K7iAw zIR6S48k}!a@4Rn+A0OJ!@m=Ata<3HB7(^an?2N;s6XuJTBuT<={qFyg&p!DlBx%b3 z_W$^s{N8pg8qcubC%BUN ztUyekn~PT{O`AHX_ryoo9s0X=0017n-)C{V0uOrw$diOg?|uIG=U;SAV!IbuVAQ&K zp_}AQM3{C_Numv!4;s&V36_jK|`W}o+_qMw1Rw~ z*evI!RQ~FVntU{5u@cnJ?^=Bt==Y(~9Jj1^(*Rn@^I){c$;lxX7q2i06jhtzG};sL z(H_sA&$~g$AacrJq*U&T(F8vH=qaE6^ckT7%K(+t#!^I-z6Mqrcrq~*TG5{jF-gL+ z&!1CI9ffP~&f%S-H}O3D@R0G|0VzFx_|JaC}5XNsz{4(mE0#Ry{7U4xRglTeak zY))?X@pge2!=v{S7IPSkg|ZS>i>}?#RwE#jrUd7@i&wo9I^Crbz;OSFU{^G@f<&<< zBe4UF&(S8q*PbL18o$8#6=4PG1nL_4{ghrFSWZ2mZbj{E*$VmfKg(E!G)=i`Ji0wS zPdf2Ij*wt_Bl1BXuYr7+gD6$KKtqF3MMEGFO9C{m!q~v7C`eNaJ|M=hnwRa3{rbhZ zam)>_5%PMhDznO=)UHLc;WR zPVLqyNo|x%l}>nCe5eWDwR@VY@ao7%V~S;gbAfVMFc=Qouk)d+=V%D(Da#dQ-5@Ag zW?0NUMg-RgL7S~Qkc1=|(zx4B;Q70`d|lLN-Nx5+lgihT4r5wjf>Eqh2E!gogKH|1 zOz8D9#CT9awCi-0*tT#zv26`V($;{OBqL2yk}M}pGSaL^n(mQiV{FnV??3n#Pr>@@ zx?OF@dv?T!=^`85&5*3y?3%CBO@TxCq#?W&ECxUN+% zT|{O5%XSfzF8RQiAtJ}^!N4O_`kg6y?u|*@gjlWKlIFg>u~$$hc&`K%#H3()h|S+p zhgMRqKE*emk)$tyg5WEBXA5b;H?(+l0NY7gNf1S`3f(Q>N2~CP1a|%TK`O@ZIlyz|a2b zC)9K34F+7TUUl2IW3QLc8#<~5EDGr7DM!aAy!`4F*H;iM9K1JzP%^#soa`rfW2vf& z%){@0_aUEs@tWrsu$o=tLZ9G@_8@mk@K-SF(fA?3U!n^0e|mkFhN8-Hdet4KU8-If zAY8Z6Fai}fh!(AQC14GxgiZR9LR&m#M=bqPJg_$@T!7;i|k85#%>FmMKqX|_JPbXDrm5w5mxy#z1Tb`OuN0vc)N<{ly=JhoWt zd%y1$j0OTvRD>p@KL}7}h9G2_2!b#oNfJsW=nclyT7j+zIv^{Lma&Mc;9zHn7g$cu zE*bUPygi+6fR1JovH~Ioy4^lmcFnNoGo4&uvvpI?{f*Y~+a-b>;7SPcrb?}aV44f= z9aysI)Dd5D$^3fGY+@OVwo%rnUR(gM6YWzK6OzdlZ=SzsewU@yoX>nk8!;>DNC384 zQ!W5>F>#|_SA)>%?(mamPbkY9=F@^tKYe@m{-8kWb&;O%i?;<=&_RvB179nbt6~a1+3Izsuy!8JEhP zhyVF6zvhqs$$f5`sf5JJiSiaUXWJ`#kvIkhfoc&fs9c z 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

3AHFJ1AFC?26=h*zL7LabG-DOFd^ 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 literal 0 HcmV?d00001 diff --git a/COM380/Project5/GameData/symbol_7.png b/COM380/Project5/GameData/symbol_7.png new file mode 100644 index 0000000000000000000000000000000000000000..1fdf44257d2e904187154da68764d3a013c4e6ea GIT binary patch literal 12762 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 G!T$vlG5tLN literal 0 HcmV?d00001 diff --git a/COM380/Project5/GameData/symbol_bell.png b/COM380/Project5/GameData/symbol_bell.png new file mode 100644 index 0000000000000000000000000000000000000000..196fb3d865e283568c7c3e4b8c6333e21bde129e GIT binary patch literal 12950 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 IM6N<$f}<+v@&Et; literal 0 HcmV?d00001 diff --git a/COM380/Project5/GameData/symbol_melon.png b/COM380/Project5/GameData/symbol_melon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a7dbcbb9761ad05bb5e4b74d9e6408b417e9d09 GIT binary patch literal 18983 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 SovsuB0000 Hz + */ +#define ALC_FREQUENCY 0x1007 + +/** + * followed by Hz + */ +#define ALC_REFRESH 0x1008 + +/** + * followed by AL_TRUE, AL_FALSE + */ +#define ALC_SYNC 0x1009 + +/** + * followed by Num of requested Mono (3D) Sources + */ +#define ALC_MONO_SOURCES 0x1010 + +/** + * followed by Num of requested Stereo Sources + */ +#define ALC_STEREO_SOURCES 0x1011 + +/** + * errors + */ + +/** + * No error + */ +#define ALC_NO_ERROR ALC_FALSE + +/** + * No device + */ +#define ALC_INVALID_DEVICE 0xA001 + +/** + * invalid context ID + */ +#define ALC_INVALID_CONTEXT 0xA002 + +/** + * bad enum + */ +#define ALC_INVALID_ENUM 0xA003 + +/** + * bad value + */ +#define ALC_INVALID_VALUE 0xA004 + +/** + * Out of memory. + */ +#define ALC_OUT_OF_MEMORY 0xA005 + + +/** + * The Specifier string for default device + */ +#define ALC_DEFAULT_DEVICE_SPECIFIER 0x1004 +#define ALC_DEVICE_SPECIFIER 0x1005 +#define ALC_EXTENSIONS 0x1006 + +#define ALC_MAJOR_VERSION 0x1000 +#define ALC_MINOR_VERSION 0x1001 + +#define ALC_ATTRIBUTES_SIZE 0x1002 +#define ALC_ALL_ATTRIBUTES 0x1003 + +/** + * ALC_ENUMERATE_ALL_EXT enums + */ +#define ALC_DEFAULT_ALL_DEVICES_SPECIFIER 0x1012 +#define ALC_ALL_DEVICES_SPECIFIER 0x1013 + +/** + * Capture extension + */ +#define ALC_CAPTURE_DEVICE_SPECIFIER 0x310 +#define ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER 0x311 +#define ALC_CAPTURE_SAMPLES 0x312 + + +/* + * Context Management + */ +ALC_API ALCcontext * ALC_APIENTRY alcCreateContext( ALCdevice *device, const ALCint* attrlist ); + +ALC_API ALCboolean ALC_APIENTRY alcMakeContextCurrent( ALCcontext *context ); + +ALC_API void ALC_APIENTRY alcProcessContext( ALCcontext *context ); + +ALC_API void ALC_APIENTRY alcSuspendContext( ALCcontext *context ); + +ALC_API void ALC_APIENTRY alcDestroyContext( ALCcontext *context ); + +ALC_API ALCcontext * ALC_APIENTRY alcGetCurrentContext( void ); + +ALC_API ALCdevice* ALC_APIENTRY alcGetContextsDevice( ALCcontext *context ); + + +/* + * Device Management + */ +ALC_API ALCdevice * ALC_APIENTRY alcOpenDevice( const ALCchar *devicename ); + +ALC_API ALCboolean ALC_APIENTRY alcCloseDevice( ALCdevice *device ); + + +/* + * Error support. + * Obtain the most recent Context error + */ +ALC_API ALCenum ALC_APIENTRY alcGetError( ALCdevice *device ); + + +/* + * Extension support. + * Query for the presence of an extension, and obtain any appropriate + * function pointers and enum values. + */ +ALC_API ALCboolean ALC_APIENTRY alcIsExtensionPresent( ALCdevice *device, const ALCchar *extname ); + +ALC_API void * ALC_APIENTRY alcGetProcAddress( ALCdevice *device, const ALCchar *funcname ); + +ALC_API ALCenum ALC_APIENTRY alcGetEnumValue( ALCdevice *device, const ALCchar *enumname ); + + +/* + * Query functions + */ +ALC_API const ALCchar * ALC_APIENTRY alcGetString( ALCdevice *device, ALCenum param ); + +ALC_API void ALC_APIENTRY alcGetIntegerv( ALCdevice *device, ALCenum param, ALCsizei size, ALCint *data ); + + +/* + * Capture functions + */ +ALC_API ALCdevice* ALC_APIENTRY alcCaptureOpenDevice( const ALCchar *devicename, ALCuint frequency, ALCenum format, ALCsizei buffersize ); + +ALC_API ALCboolean ALC_APIENTRY alcCaptureCloseDevice( ALCdevice *device ); + +ALC_API void ALC_APIENTRY alcCaptureStart( ALCdevice *device ); + +ALC_API void ALC_APIENTRY alcCaptureStop( ALCdevice *device ); + +ALC_API void ALC_APIENTRY alcCaptureSamples( ALCdevice *device, ALCvoid *buffer, ALCsizei samples ); + +/* + * Pointer-to-function types, useful for dynamically getting ALC entry points. + */ +typedef ALCcontext * (ALC_APIENTRY *LPALCCREATECONTEXT) (ALCdevice *device, const ALCint *attrlist); +typedef ALCboolean (ALC_APIENTRY *LPALCMAKECONTEXTCURRENT)( ALCcontext *context ); +typedef void (ALC_APIENTRY *LPALCPROCESSCONTEXT)( ALCcontext *context ); +typedef void (ALC_APIENTRY *LPALCSUSPENDCONTEXT)( ALCcontext *context ); +typedef void (ALC_APIENTRY *LPALCDESTROYCONTEXT)( ALCcontext *context ); +typedef ALCcontext * (ALC_APIENTRY *LPALCGETCURRENTCONTEXT)( void ); +typedef ALCdevice * (ALC_APIENTRY *LPALCGETCONTEXTSDEVICE)( ALCcontext *context ); +typedef ALCdevice * (ALC_APIENTRY *LPALCOPENDEVICE)( const ALCchar *devicename ); +typedef ALCboolean (ALC_APIENTRY *LPALCCLOSEDEVICE)( ALCdevice *device ); +typedef ALCenum (ALC_APIENTRY *LPALCGETERROR)( ALCdevice *device ); +typedef ALCboolean (ALC_APIENTRY *LPALCISEXTENSIONPRESENT)( ALCdevice *device, const ALCchar *extname ); +typedef void * (ALC_APIENTRY *LPALCGETPROCADDRESS)(ALCdevice *device, const ALCchar *funcname ); +typedef ALCenum (ALC_APIENTRY *LPALCGETENUMVALUE)(ALCdevice *device, const ALCchar *enumname ); +typedef const ALCchar* (ALC_APIENTRY *LPALCGETSTRING)( ALCdevice *device, ALCenum param ); +typedef void (ALC_APIENTRY *LPALCGETINTEGERV)( ALCdevice *device, ALCenum param, ALCsizei size, ALCint *dest ); +typedef ALCdevice * (ALC_APIENTRY *LPALCCAPTUREOPENDEVICE)( const ALCchar *devicename, ALCuint frequency, ALCenum format, ALCsizei buffersize ); +typedef ALCboolean (ALC_APIENTRY *LPALCCAPTURECLOSEDEVICE)( ALCdevice *device ); +typedef void (ALC_APIENTRY *LPALCCAPTURESTART)( ALCdevice *device ); +typedef void (ALC_APIENTRY *LPALCCAPTURESTOP)( ALCdevice *device ); +typedef void (ALC_APIENTRY *LPALCCAPTURESAMPLES)( ALCdevice *device, ALCvoid *buffer, ALCsizei samples ); + +#if defined(TARGET_OS_MAC) && TARGET_OS_MAC + #pragma export off +#endif + +#if defined(__cplusplus) +} +#endif + +#endif /* AL_ALC_H */ diff --git a/COM380/Project5/include/AL/alut.h b/COM380/Project5/include/AL/alut.h new file mode 100644 index 0000000..4b05a3c --- /dev/null +++ b/COM380/Project5/include/AL/alut.h @@ -0,0 +1,126 @@ +#if !defined(AL_ALUT_H) +#define AL_ALUT_H + +#if defined(_MSC_VER) +#include +#include +#elif defined(__APPLE__) +#include +#include +#else +#include +#include +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + +#if defined(_WIN32) && !defined(_XBOX) + #if defined (ALUT_BUILD_LIBRARY) + #define ALUT_API __declspec(dllexport) + #else + #define ALUT_API __declspec(dllimport) + #endif +#else + #if defined(ALUT_BUILD_LIBRARY) && defined(HAVE_GCC_VISIBILITY) + #define ALUT_API __attribute__((visibility("default"))) + #else + #define ALUT_API extern + #endif +#endif + +#if defined(_WIN32) + #define ALUT_APIENTRY __cdecl +#else + #define ALUT_APIENTRY +#endif + +#if defined(__MWERKS_) + #pragma export on +#endif + +/* Flag deprecated functions if possible (VisualC++ .NET and GCC >= 3.1.1). */ +#if defined(_MSC_VER) && _MSC_VER >= 1300 && !defined(MIDL_PASS) +#define ALUT_ATTRIBUTE_DEPRECATED __declspec(deprecated) +#elif defined(__GNUC__) && (__GNUC__ > 3 || (__GNUC__ == 3 && (__GNUC_MINOR__ > 1 || (__GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ >= 1)))) +#define ALUT_ATTRIBUTE_DEPRECATED __attribute__((deprecated)) +#else +#define ALUT_ATTRIBUTE_DEPRECATED +#endif + +#define ALUT_API_MAJOR_VERSION 1 +#define ALUT_API_MINOR_VERSION 1 + +#define ALUT_ERROR_NO_ERROR 0 +#define ALUT_ERROR_OUT_OF_MEMORY 0x200 +#define ALUT_ERROR_INVALID_ENUM 0x201 +#define ALUT_ERROR_INVALID_VALUE 0x202 +#define ALUT_ERROR_INVALID_OPERATION 0x203 +#define ALUT_ERROR_NO_CURRENT_CONTEXT 0x204 +#define ALUT_ERROR_AL_ERROR_ON_ENTRY 0x205 +#define ALUT_ERROR_ALC_ERROR_ON_ENTRY 0x206 +#define ALUT_ERROR_OPEN_DEVICE 0x207 +#define ALUT_ERROR_CLOSE_DEVICE 0x208 +#define ALUT_ERROR_CREATE_CONTEXT 0x209 +#define ALUT_ERROR_MAKE_CONTEXT_CURRENT 0x20A +#define ALUT_ERROR_DESTROY_CONTEXT 0x20B +#define ALUT_ERROR_GEN_BUFFERS 0x20C +#define ALUT_ERROR_BUFFER_DATA 0x20D +#define ALUT_ERROR_IO_ERROR 0x20E +#define ALUT_ERROR_UNSUPPORTED_FILE_TYPE 0x20F +#define ALUT_ERROR_UNSUPPORTED_FILE_SUBTYPE 0x210 +#define ALUT_ERROR_CORRUPT_OR_TRUNCATED_DATA 0x211 + +#define ALUT_WAVEFORM_SINE 0x100 +#define ALUT_WAVEFORM_SQUARE 0x101 +#define ALUT_WAVEFORM_SAWTOOTH 0x102 +#define ALUT_WAVEFORM_WHITENOISE 0x103 +#define ALUT_WAVEFORM_IMPULSE 0x104 + +#define ALUT_LOADER_BUFFER 0x300 +#define ALUT_LOADER_MEMORY 0x301 + +ALUT_API ALboolean ALUT_APIENTRY alutInit (int *argcp, char **argv); +ALUT_API ALboolean ALUT_APIENTRY alutInitWithoutContext (int *argcp, char **argv); +ALUT_API ALboolean ALUT_APIENTRY alutExit (void); + +ALUT_API ALenum ALUT_APIENTRY alutGetError (void); +ALUT_API const char *ALUT_APIENTRY alutGetErrorString (ALenum error); + +ALUT_API ALuint ALUT_APIENTRY alutCreateBufferFromFile (const char *fileName); +ALUT_API ALuint ALUT_APIENTRY alutCreateBufferFromFileImage (const ALvoid *data, ALsizei length); +ALUT_API ALuint ALUT_APIENTRY alutCreateBufferHelloWorld (void); +ALUT_API ALuint ALUT_APIENTRY alutCreateBufferWaveform (ALenum waveshape, ALfloat frequency, ALfloat phase, ALfloat duration); + +ALUT_API ALvoid *ALUT_APIENTRY alutLoadMemoryFromFile (const char *fileName, ALenum *format, ALsizei *size, ALfloat *frequency); +ALUT_API ALvoid *ALUT_APIENTRY alutLoadMemoryFromFileImage (const ALvoid *data, ALsizei length, ALenum *format, ALsizei *size, ALfloat *frequency); +ALUT_API ALvoid *ALUT_APIENTRY alutLoadMemoryHelloWorld (ALenum *format, ALsizei *size, ALfloat *frequency); +ALUT_API ALvoid *ALUT_APIENTRY alutLoadMemoryWaveform (ALenum waveshape, ALfloat frequency, ALfloat phase, ALfloat duration, ALenum *format, ALsizei *size, ALfloat *freq); + +ALUT_API const char *ALUT_APIENTRY alutGetMIMETypes (ALenum loader); + +ALUT_API ALint ALUT_APIENTRY alutGetMajorVersion (void); +ALUT_API ALint ALUT_APIENTRY alutGetMinorVersion (void); + +ALUT_API ALboolean ALUT_APIENTRY alutSleep (ALfloat duration); + +/* Nasty Compatibility stuff, WARNING: THESE FUNCTIONS ARE STRONGLY DEPRECATED */ +#if defined(__APPLE__) +ALUT_API ALUT_ATTRIBUTE_DEPRECATED void ALUT_APIENTRY alutLoadWAVFile (ALbyte *fileName, ALenum *format, void **data, ALsizei *size, ALsizei *frequency); +ALUT_API ALUT_ATTRIBUTE_DEPRECATED void ALUT_APIENTRY alutLoadWAVMemory (ALbyte *buffer, ALenum *format, void **data, ALsizei *size, ALsizei *frequency); +#else +ALUT_API ALUT_ATTRIBUTE_DEPRECATED void ALUT_APIENTRY alutLoadWAVFile (ALbyte *fileName, ALenum *format, void **data, ALsizei *size, ALsizei *frequency, ALboolean *loop); +ALUT_API ALUT_ATTRIBUTE_DEPRECATED void ALUT_APIENTRY alutLoadWAVMemory (ALbyte *buffer, ALenum *format, void **data, ALsizei *size, ALsizei *frequency, ALboolean *loop); +#endif +ALUT_API ALUT_ATTRIBUTE_DEPRECATED void ALUT_APIENTRY alutUnloadWAV (ALenum format, ALvoid *data, ALsizei size, ALsizei frequency); + +#if defined(__MWERKS_) + #pragma export off +#endif + +#if defined(__cplusplus) +} +#endif + +#endif diff --git a/COM380/Project5/include/DevIL/config.h b/COM380/Project5/include/DevIL/config.h new file mode 100644 index 0000000..b9fe5dc --- /dev/null +++ b/COM380/Project5/include/DevIL/config.h @@ -0,0 +1,140 @@ +/* include/IL/config.h. Generated by configure. */ +/* include/IL/config.h.in. Generated from configure.in by autoheader. */ +#ifndef __CONFIG_H__ +#define __CONFIG_H__ + +#define IL_USE_PRAGMA_LIBS + +// Supported image formats (IL) + +// #define IL_NO_BLP +// #define IL_NO_BMP +// #define IL_NO_CUT +// #define IL_NO_CHEAD +// #define IL_NO_DCX +// #define IL_NO_DDS +// #define IL_NO_DICOM +// #define IL_NO_DOOM +// #define IL_NO_EXR +// #define IL_NO_FITS +// #define IL_NO_FTX +// #define IL_NO_GIF +// #define IL_NO_HDR +// #define IL_NO_ICO +// #define IL_NO_ICNS +// #define IL_NO_IWI +// #define IL_NO_JP2 +// #define IL_NO_JPG +// #define IL_NO_LCMS +// #define IL_NO_LIF +// #define IL_NO_MDL +// #define IL_NO_MNG +// #define IL_NO_PCD +// #define IL_NO_PCX +// #define IL_NO_PIC +// #define IL_NO_PIX +// #define IL_NO_PNG +// #define IL_NO_PNM +// #define IL_NO_PSD +// #define IL_NO_PSP +// #define IL_NO_PXR +// #define IL_NO_RAW +// #define IL_NO_ROT +// #define IL_NO_SGI +// #define IL_NO_SUN +// #define IL_NO_TGA +// #define IL_NO_TIF +// #define IL_NO_TPL +// #define IL_NO_WAL +// #define IL_NO_WDP +// #define IL_NO_XPM +#define IL_USE_JPEGLIB_UNMODIFIED 1 +//#define IL_USE_DXTC_NVIDIA +#define IL_USE_DXTC_SQUISH + +/* Supported api (ilut) */ + + +// +// sorry just +// cant get this one to work under windows +// have disabled for the now +// +// will look at it some more later +// +// Kriss +// +#undef ILUT_USE_ALLEGRO + +#undef ILUT_USE_DIRECTX8 +//#define ILUT_USE_DIRECTX9 +//#define ILUT_USE_DIRECTX10 +//#define ILUT_USE_OPENGL +//#define ILUT_USE_SDL +//#define ILUT_USE_WIN32 + + +/* Define to 1 if you have the header file. */ +//#define HAVE_DLFCN_H 1 + +/* Define to 1 if you have the header file. */ +//#define HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the header file. */ +//#define HAVE_MEMORY_H 1 + +/* Define to 1 if you have the header file. */ +//#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +//#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the header file. */ +//#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +//#define HAVE_STRING_H 1 + +/* Define to 1 if you have the header file. */ +//#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +//#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +//#define HAVE_UNISTD_H 1 + +/* Name of package */ +#define IL_PACKAGE "DevIL" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "" + +/* Define to the full name of this package. */ +#define IL_PACKAGE_NAME "" + +/* Define to the full name and version of this package. */ +#define IL_PACKAGE_STRING "" + +/* Define to the one symbol short name of this package. */ +#define IL_PACKAGE_TARNAME "" + +/* Define to the version of this package. */ +#define IL_PACKAGE_VERSION "" + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Version number of package */ +//#define IL_VERSION "1.7.3" + +/* Define to 1 if your processor stores words with the most significant byte + first (like Motorola and SPARC, unlike Intel and VAX). */ +/* #undef WORDS_BIGENDIAN */ + +/* If using Mac OS X uncomment this line */ +/* #include "macconfig.h" */ + +/* Define to 1 if the X Window System is missing or not being used. */ +/* #undef X_DISPLAY_MISSING */ +#endif /* __CONFIG_H__ */ diff --git a/COM380/Project5/include/DevIL/config.h.win b/COM380/Project5/include/DevIL/config.h.win new file mode 100644 index 0000000..659f4ca --- /dev/null +++ b/COM380/Project5/include/DevIL/config.h.win @@ -0,0 +1,79 @@ +#ifndef __CONFIG_H__ +#define __CONFIG_H__ + +#define IL_USE_PRAGMA_LIBS // Links to only the libraries that are requested. +#define IL_INLINE_ASM 1 // Define if you can support at least some ASM + +// Supported images formats (IL) + +// #define IL_NO_BLP +// #define IL_NO_BMP +// #define IL_NO_CUT +// #define IL_NO_CHEAD +// #define IL_NO_DCX +// #define IL_NO_DDS +// #define IL_NO_DICOM +// #define IL_NO_DOOM +// #define IL_NO_EXR +// #define IL_NO_FITS +// #define IL_NO_FTX +// #define IL_NO_GIF +// #define IL_NO_HDR +// #define IL_NO_ICO +// #define IL_NO_ICNS +// #define IL_NO_IWI +// #define IL_NO_JP2 +// #define IL_NO_JPG +// #define IL_NO_LCMS +// #define IL_NO_LIF +// #define IL_NO_MDL +// #define IL_NO_MNG +// #define IL_NO_PCD +// #define IL_NO_PCX +// #define IL_NO_PIC +// #define IL_NO_PIX +// #define IL_NO_PNG +// #define IL_NO_PNM +// #define IL_NO_PSD +// #define IL_NO_PSP +// #define IL_NO_PXR +// #define IL_NO_RAW +// #define IL_NO_ROT +// #define IL_NO_SGI +// #define IL_NO_SUN +// #define IL_NO_TGA +// #define IL_NO_TIF +// #define IL_NO_TPL +// #define IL_NO_WAL +// #define IL_NO_WDP +// #define IL_NO_XPM + +#define IL_USE_JPEGLIB_UNMODIFIED 1 +#define IL_USE_DXTC_NVIDIA +#define IL_USE_DXTC_SQUISH + +//#define IL_NO_GAMES + +/* Supported api (ilut) */ + + +// +// sorry just +// cant get this one to work under windows +// have disabled for the now +// +// will look at it some more later +// +// Kriss +// +#undef ILUT_USE_ALLEGRO + +#undef ILUT_USE_DIRECTX8 +#define ILUT_USE_DIRECTX9 +#define ILUT_USE_DIRECTX10 +#define ILUT_USE_OPENGL +#define ILUT_USE_SDL +#define ILUT_USE_WIN32 + + +#endif /* __CONFIG_H__ */ diff --git a/COM380/Project5/include/DevIL/devil_internal_exports.h b/COM380/Project5/include/DevIL/devil_internal_exports.h new file mode 100644 index 0000000..30b7aaa --- /dev/null +++ b/COM380/Project5/include/DevIL/devil_internal_exports.h @@ -0,0 +1,161 @@ +//----------------------------------------------------------------------------- +// +// ImageLib Sources +// Copyright (C) 2000-2009 by Denton Woods +// Last modified: 01/06/2009 +// +// Filename: IL/devil_internal_exports.h +// +// Description: Internal stuff for DevIL (IL, ILU and ILUT) +// +//----------------------------------------------------------------------------- + +#ifndef IL_EXPORTS_H +#define IL_EXPORTS_H + +#include "IL/il.h" + +#ifdef DEBUG + #include +#else + #define assert(x) +#endif + +//#ifndef NOINLINE +#ifndef INLINE +#if defined(__GNUC__) + #define INLINE extern inline +#elif defined(_MSC_VER) //@TODO: Get this working in MSVC++. + // http://www.greenend.org.uk/rjk/2003/03/inline.html + #define NOINLINE + //#define INLINE + /*#ifndef _WIN64 // Cannot use inline assembly in x64 target platform. + #define USE_WIN32_ASM + #endif//_WIN64*/ + #define INLINE __inline +#else + #define INLINE inline +#endif +#endif +//#else +//#define INLINE +//#endif //NOINLINE + +#ifdef __cplusplus +extern "C" { +#endif + +#define IL_MAX(a,b) (((a) > (b)) ? (a) : (b)) +#define IL_MIN(a,b) (((a) < (b)) ? (a) : (b)) + + +//! Basic Palette struct +typedef struct ILpal +{ + ILubyte* Palette; //!< the image palette (if any) + ILuint PalSize; //!< size of the palette (in bytes) + ILenum PalType; //!< the palette types in il.h (0x0500 range) +} ILpal; + + +//! The Fundamental Image structure +/*! Every bit of information about an image is stored in this internal structure.*/ +typedef struct ILimage +{ + ILuint Width; //!< the image's width + ILuint Height; //!< the image's height + ILuint Depth; //!< the image's depth + ILubyte Bpp; //!< bytes per pixel (now number of channels) + ILubyte Bpc; //!< bytes per channel + ILuint Bps; //!< bytes per scanline (components for IL) + ILubyte* Data; //!< the image data + ILuint SizeOfData; //!< the total size of the data (in bytes) + ILuint SizeOfPlane; //!< SizeOfData in a 2d image, size of each plane slice in a 3d image (in bytes) + ILenum Format; //!< image format (in IL enum style) + ILenum Type; //!< image type (in IL enum style) + ILenum Origin; //!< origin of the image + ILpal Pal; //!< palette details + ILuint Duration; //!< length of the time to display this "frame" + ILenum CubeFlags; //!< cube map flags for sides present in chain + struct ILimage* Mipmaps; //!< mipmapped versions of this image terminated by a NULL - usu. NULL + struct ILimage* Next; //!< next image in the chain - usu. NULL + struct ILimage* Faces; //!< next cubemap face in the chain - usu. NULL + struct ILimage* Layers; //!< subsequent layers in the chain - usu. NULL + ILuint* AnimList; //!< animation list + ILuint AnimSize; //!< animation list size + void* Profile; //!< colour profile + ILuint ProfileSize; //!< colour profile size + ILuint OffX; //!< x-offset of the image + ILuint OffY; //!< y-offset of the image + ILubyte* DxtcData; //!< compressed data + ILenum DxtcFormat; //!< compressed data format + ILuint DxtcSize; //!< compressed data size +} ILimage; + + +// Memory functions +ILAPI void* ILAPIENTRY ialloc(const ILsizei Size); +ILAPI void ILAPIENTRY ifree(const void *Ptr); +ILAPI void* ILAPIENTRY icalloc(const ILsizei Size, const ILsizei Num); +#ifdef ALTIVEC_GCC +ILAPI void* ILAPIENTRY ivec_align_buffer(void *buffer, const ILuint size); +#endif + +// Internal library functions in IL +ILAPI ILimage* ILAPIENTRY ilGetCurImage(void); +ILAPI void ILAPIENTRY ilSetCurImage(ILimage *Image); +ILAPI void ILAPIENTRY ilSetError(ILenum Error); +ILAPI void ILAPIENTRY ilSetPal(ILpal *Pal); + +// +// Utility functions +// +ILAPI ILubyte ILAPIENTRY ilGetBppFormat(ILenum Format); +ILAPI ILenum ILAPIENTRY ilGetFormatBpp(ILubyte Bpp); +ILAPI ILubyte ILAPIENTRY ilGetBpcType(ILenum Type); +ILAPI ILenum ILAPIENTRY ilGetTypeBpc(ILubyte Bpc); +ILAPI ILubyte ILAPIENTRY ilGetBppPal(ILenum PalType); +ILAPI ILenum ILAPIENTRY ilGetPalBaseType(ILenum PalType); +ILAPI ILuint ILAPIENTRY ilNextPower2(ILuint Num); +ILAPI ILenum ILAPIENTRY ilTypeFromExt(ILconst_string FileName); +ILAPI void ILAPIENTRY ilReplaceCurImage(ILimage *Image); +ILAPI void ILAPIENTRY iMemSwap(ILubyte *, ILubyte *, const ILuint); + +// +// Image functions +// +ILAPI void ILAPIENTRY iBindImageTemp (void); +ILAPI ILboolean ILAPIENTRY ilClearImage_ (ILimage *Image); +ILAPI void ILAPIENTRY ilCloseImage (ILimage *Image); +ILAPI void ILAPIENTRY ilClosePal (ILpal *Palette); +ILAPI ILpal* ILAPIENTRY iCopyPal (void); +ILAPI ILboolean ILAPIENTRY ilCopyImageAttr (ILimage *Dest, ILimage *Src); +ILAPI ILimage* ILAPIENTRY ilCopyImage_ (ILimage *Src); +ILAPI void ILAPIENTRY ilGetClear (void *Colours, ILenum Format, ILenum Type); +ILAPI ILuint ILAPIENTRY ilGetCurName (void); +ILAPI ILboolean ILAPIENTRY ilIsValidPal (ILpal *Palette); +ILAPI ILimage* ILAPIENTRY ilNewImage (ILuint Width, ILuint Height, ILuint Depth, ILubyte Bpp, ILubyte Bpc); +ILAPI ILimage* ILAPIENTRY ilNewImageFull (ILuint Width, ILuint Height, ILuint Depth, ILubyte Bpp, ILenum Format, ILenum Type, void *Data); +ILAPI ILboolean ILAPIENTRY ilInitImage (ILimage *Image, ILuint Width, ILuint Height, ILuint Depth, ILubyte Bpp, ILenum Format, ILenum Type, void *Data); +ILAPI ILboolean ILAPIENTRY ilResizeImage (ILimage *Image, ILuint Width, ILuint Height, ILuint Depth, ILubyte Bpp, ILubyte Bpc); +ILAPI ILboolean ILAPIENTRY ilTexImage_ (ILimage *Image, ILuint Width, ILuint Height, ILuint Depth, ILubyte Bpp, ILenum Format, ILenum Type, void *Data); +ILAPI ILboolean ILAPIENTRY ilTexSubImage_ (ILimage *Image, void *Data); +ILAPI void* ILAPIENTRY ilConvertBuffer (ILuint SizeOfData, ILenum SrcFormat, ILenum DestFormat, ILenum SrcType, ILenum DestType, ILpal *SrcPal, void *Buffer); +ILAPI ILimage* ILAPIENTRY iConvertImage (ILimage *Image, ILenum DestFormat, ILenum DestType); +ILAPI ILpal* ILAPIENTRY iConvertPal (ILpal *Pal, ILenum DestFormat); +ILAPI ILubyte* ILAPIENTRY iGetFlipped (ILimage *Image); +ILAPI ILboolean ILAPIENTRY iMirror(); +ILAPI void ILAPIENTRY iFlipBuffer(ILubyte *buff, ILuint depth, ILuint line_size, ILuint line_num); +ILubyte* iFlipNewBuffer(ILubyte *buff, ILuint depth, ILuint line_size, ILuint line_num); +ILAPI void ILAPIENTRY iGetIntegervImage(ILimage *Image, ILenum Mode, ILint *Param); + +// Internal library functions in ILU +ILAPI ILimage* ILAPIENTRY iluRotate_(ILimage *Image, ILfloat Angle); +ILAPI ILimage* ILAPIENTRY iluRotate3D_(ILimage *Image, ILfloat x, ILfloat y, ILfloat z, ILfloat Angle); +ILAPI ILimage* ILAPIENTRY iluScale_(ILimage *Image, ILuint Width, ILuint Height, ILuint Depth); + +#ifdef __cplusplus +} +#endif + +#endif//IL_EXPORTS_H diff --git a/COM380/Project5/include/DevIL/il.h b/COM380/Project5/include/DevIL/il.h new file mode 100644 index 0000000..540a56e --- /dev/null +++ b/COM380/Project5/include/DevIL/il.h @@ -0,0 +1,644 @@ +//----------------------------------------------------------------------------- +// +// ImageLib Sources +// Copyright (C) 2000-2009 by Denton Woods +// Last modified: 03/07/2009 +// +// Filename: IL/il.h +// +// Description: The main include file for DevIL +// +//----------------------------------------------------------------------------- + +// Doxygen comment +/*! \file il.h + The main include file for DevIL +*/ + +#ifndef __il_h_ +#ifndef __IL_H__ + +#define __il_h_ +#define __IL_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +//this define controls if floats and doubles are clampled to [0..1] +//during conversion. It takes a little more time, but it is the correct +//way of doing this. If you are sure your floats are always valid, +//you can undefine this value... +#define CLAMP_HALF 1 +#define CLAMP_FLOATS 1 +#define CLAMP_DOUBLES 1 + +/*#ifdef _WIN32_WCE + #define IL_NO_EXR + #define IL_NO_GIF + #define IL_NO_JP2 + #define IL_NO_JPG + #define IL_NO_MNG + #define IL_NO_PNG + #define IL_NO_TIF + #define IL_NO_LCMS +#endif //_WIN32_WCE + +#ifdef DJGPP + #define IL_NO_EXR + #define IL_NO_GIF + #define IL_NO_JP2 + #define IL_NO_JPG + #define IL_NO_MNG + #define IL_NO_PNG + #define IL_NO_TIF + #define IL_NO_LCMS +#endif //DJGPP*/ + +#ifdef _WIN32 + #if (defined(IL_USE_PRAGMA_LIBS)) && (!defined(_IL_BUILD_LIBRARY)) + #if defined(_MSC_VER) || defined(__BORLANDC__) + #pragma comment(lib, "DevIL.lib") + #endif + #endif +#endif + +#ifdef RESTRICT_KEYWORD +#define RESTRICT restrict +#define CONST_RESTRICT const restrict +#else +#define RESTRICT +#define CONST_RESTRICT const +#endif + +#include + +typedef unsigned int ILenum; +typedef unsigned char ILboolean; +typedef unsigned int ILbitfield; +typedef signed char ILbyte; +typedef signed short ILshort; +typedef int ILint; +typedef size_t ILsizei; +typedef unsigned char ILubyte; +typedef unsigned short ILushort; +typedef unsigned int ILuint; +typedef float ILfloat; +typedef float ILclampf; +typedef double ILdouble; +typedef double ILclampd; + +#ifdef _MSC_VER +typedef __int64 ILint64; +typedef unsigned __int64 ILuint64; +#else +typedef long long int ILint64; +typedef long long unsigned int ILuint64; +#endif + + +#include +#ifdef _UNICODE + #ifndef _WIN32_WCE + #include + #endif + //if we use a define instead of a typedef, + //ILconst_string works as intended + #define ILchar wchar_t + #define ILstring wchar_t* + #define ILconst_string wchar_t const * +#else + //if we use a define instead of a typedef, + //ILconst_string works as intended + #define ILchar char + #define ILstring char* + #define ILconst_string char const * +#endif //_UNICODE + +#define IL_FALSE 0 +#define IL_TRUE 1 + +// Matches OpenGL's right now. +//! Data formats \link Formats Formats\endlink +#define IL_COLOUR_INDEX 0x1900 +#define IL_COLOR_INDEX 0x1900 +#define IL_ALPHA 0x1906 +#define IL_RGB 0x1907 +#define IL_RGBA 0x1908 +#define IL_BGR 0x80E0 +#define IL_BGRA 0x80E1 +#define IL_LUMINANCE 0x1909 +#define IL_LUMINANCE_ALPHA 0x190A + +//! Data types \link Types Types\endlink +#define IL_BYTE 0x1400 +#define IL_UNSIGNED_BYTE 0x1401 +#define IL_SHORT 0x1402 +#define IL_UNSIGNED_SHORT 0x1403 +#define IL_INT 0x1404 +#define IL_UNSIGNED_INT 0x1405 +#define IL_FLOAT 0x1406 +#define IL_DOUBLE 0x140A +#define IL_HALF 0x140B + + +#define IL_MAX_BYTE SCHAR_MAX +#define IL_MAX_UNSIGNED_BYTE UCHAR_MAX +#define IL_MAX_SHORT SHRT_MAX +#define IL_MAX_UNSIGNED_SHORT USHRT_MAX +#define IL_MAX_INT INT_MAX +#define IL_MAX_UNSIGNED_INT UINT_MAX + +#define IL_LIMIT(x,m,M) (xM?M:x)) +#define IL_CLAMP(x) IL_LIMIT(x,0,1) + +#define IL_VENDOR 0x1F00 +#define IL_LOAD_EXT 0x1F01 +#define IL_SAVE_EXT 0x1F02 + + +// +// IL-specific #define's +// + +#define IL_VERSION_1_7_8 1 +#define IL_VERSION 178 + + +// Attribute Bits +#define IL_ORIGIN_BIT 0x00000001 +#define IL_FILE_BIT 0x00000002 +#define IL_PAL_BIT 0x00000004 +#define IL_FORMAT_BIT 0x00000008 +#define IL_TYPE_BIT 0x00000010 +#define IL_COMPRESS_BIT 0x00000020 +#define IL_LOADFAIL_BIT 0x00000040 +#define IL_FORMAT_SPECIFIC_BIT 0x00000080 +#define IL_ALL_ATTRIB_BITS 0x000FFFFF + + +// Palette types +#define IL_PAL_NONE 0x0400 +#define IL_PAL_RGB24 0x0401 +#define IL_PAL_RGB32 0x0402 +#define IL_PAL_RGBA32 0x0403 +#define IL_PAL_BGR24 0x0404 +#define IL_PAL_BGR32 0x0405 +#define IL_PAL_BGRA32 0x0406 + + +// Image types +#define IL_TYPE_UNKNOWN 0x0000 +#define IL_BMP 0x0420 //!< Microsoft Windows Bitmap - .bmp extension +#define IL_CUT 0x0421 //!< Dr. Halo - .cut extension +#define IL_DOOM 0x0422 //!< DooM walls - no specific extension +#define IL_DOOM_FLAT 0x0423 //!< DooM flats - no specific extension +#define IL_ICO 0x0424 //!< Microsoft Windows Icons and Cursors - .ico and .cur extensions +#define IL_JPG 0x0425 //!< JPEG - .jpg, .jpe and .jpeg extensions +#define IL_JFIF 0x0425 //!< +#define IL_ILBM 0x0426 //!< Amiga IFF (FORM ILBM) - .iff, .ilbm, .lbm extensions +#define IL_PCD 0x0427 //!< Kodak PhotoCD - .pcd extension +#define IL_PCX 0x0428 //!< ZSoft PCX - .pcx extension +#define IL_PIC 0x0429 //!< PIC - .pic extension +#define IL_PNG 0x042A //!< Portable Network Graphics - .png extension +#define IL_PNM 0x042B //!< Portable Any Map - .pbm, .pgm, .ppm and .pnm extensions +#define IL_SGI 0x042C //!< Silicon Graphics - .sgi, .bw, .rgb and .rgba extensions +#define IL_TGA 0x042D //!< TrueVision Targa File - .tga, .vda, .icb and .vst extensions +#define IL_TIF 0x042E //!< Tagged Image File Format - .tif and .tiff extensions +#define IL_CHEAD 0x042F //!< C-Style Header - .h extension +#define IL_RAW 0x0430 //!< Raw Image Data - any extension +#define IL_MDL 0x0431 //!< Half-Life Model Texture - .mdl extension +#define IL_WAL 0x0432 //!< Quake 2 Texture - .wal extension +#define IL_LIF 0x0434 //!< Homeworld Texture - .lif extension +#define IL_MNG 0x0435 //!< Multiple-image Network Graphics - .mng extension +#define IL_JNG 0x0435 //!< +#define IL_GIF 0x0436 //!< Graphics Interchange Format - .gif extension +#define IL_DDS 0x0437 //!< DirectDraw Surface - .dds extension +#define IL_DCX 0x0438 //!< ZSoft Multi-PCX - .dcx extension +#define IL_PSD 0x0439 //!< Adobe PhotoShop - .psd extension +#define IL_EXIF 0x043A //!< +#define IL_PSP 0x043B //!< PaintShop Pro - .psp extension +#define IL_PIX 0x043C //!< PIX - .pix extension +#define IL_PXR 0x043D //!< Pixar - .pxr extension +#define IL_XPM 0x043E //!< X Pixel Map - .xpm extension +#define IL_HDR 0x043F //!< Radiance High Dynamic Range - .hdr extension +#define IL_ICNS 0x0440 //!< Macintosh Icon - .icns extension +#define IL_JP2 0x0441 //!< Jpeg 2000 - .jp2 extension +#define IL_EXR 0x0442 //!< OpenEXR - .exr extension +#define IL_WDP 0x0443 //!< Microsoft HD Photo - .wdp and .hdp extension +#define IL_VTF 0x0444 //!< Valve Texture Format - .vtf extension +#define IL_WBMP 0x0445 //!< Wireless Bitmap - .wbmp extension +#define IL_SUN 0x0446 //!< Sun Raster - .sun, .ras, .rs, .im1, .im8, .im24 and .im32 extensions +#define IL_IFF 0x0447 //!< Interchange File Format - .iff extension +#define IL_TPL 0x0448 //!< Gamecube Texture - .tpl extension +#define IL_FITS 0x0449 //!< Flexible Image Transport System - .fit and .fits extensions +#define IL_DICOM 0x044A //!< Digital Imaging and Communications in Medicine (DICOM) - .dcm and .dicom extensions +#define IL_IWI 0x044B //!< Call of Duty Infinity Ward Image - .iwi extension +#define IL_BLP 0x044C //!< Blizzard Texture Format - .blp extension +#define IL_FTX 0x044D //!< Heavy Metal: FAKK2 Texture - .ftx extension +#define IL_ROT 0x044E //!< Homeworld 2 - Relic Texture - .rot extension +#define IL_TEXTURE 0x044F //!< Medieval II: Total War Texture - .texture extension +#define IL_DPX 0x0450 //!< Digital Picture Exchange - .dpx extension +#define IL_UTX 0x0451 //!< Unreal (and Unreal Tournament) Texture - .utx extension +#define IL_MP3 0x0452 //!< MPEG-1 Audio Layer 3 - .mp3 extension + + +#define IL_JASC_PAL 0x0475 //!< PaintShop Pro Palette + + +// Error Types +#define IL_NO_ERROR 0x0000 +#define IL_INVALID_ENUM 0x0501 +#define IL_OUT_OF_MEMORY 0x0502 +#define IL_FORMAT_NOT_SUPPORTED 0x0503 +#define IL_INTERNAL_ERROR 0x0504 +#define IL_INVALID_VALUE 0x0505 +#define IL_ILLEGAL_OPERATION 0x0506 +#define IL_ILLEGAL_FILE_VALUE 0x0507 +#define IL_INVALID_FILE_HEADER 0x0508 +#define IL_INVALID_PARAM 0x0509 +#define IL_COULD_NOT_OPEN_FILE 0x050A +#define IL_INVALID_EXTENSION 0x050B +#define IL_FILE_ALREADY_EXISTS 0x050C +#define IL_OUT_FORMAT_SAME 0x050D +#define IL_STACK_OVERFLOW 0x050E +#define IL_STACK_UNDERFLOW 0x050F +#define IL_INVALID_CONVERSION 0x0510 +#define IL_BAD_DIMENSIONS 0x0511 +#define IL_FILE_READ_ERROR 0x0512 // 05/12/2002: Addition by Sam. +#define IL_FILE_WRITE_ERROR 0x0512 + +#define IL_LIB_GIF_ERROR 0x05E1 +#define IL_LIB_JPEG_ERROR 0x05E2 +#define IL_LIB_PNG_ERROR 0x05E3 +#define IL_LIB_TIFF_ERROR 0x05E4 +#define IL_LIB_MNG_ERROR 0x05E5 +#define IL_LIB_JP2_ERROR 0x05E6 +#define IL_LIB_EXR_ERROR 0x05E7 +#define IL_UNKNOWN_ERROR 0x05FF + + +// Origin Definitions +#define IL_ORIGIN_SET 0x0600 +#define IL_ORIGIN_LOWER_LEFT 0x0601 +#define IL_ORIGIN_UPPER_LEFT 0x0602 +#define IL_ORIGIN_MODE 0x0603 + + +// Format and Type Mode Definitions +#define IL_FORMAT_SET 0x0610 +#define IL_FORMAT_MODE 0x0611 +#define IL_TYPE_SET 0x0612 +#define IL_TYPE_MODE 0x0613 + + +// File definitions +#define IL_FILE_OVERWRITE 0x0620 +#define IL_FILE_MODE 0x0621 + + +// Palette definitions +#define IL_CONV_PAL 0x0630 + + +// Load fail definitions +#define IL_DEFAULT_ON_FAIL 0x0632 + + +// Key colour and alpha definitions +#define IL_USE_KEY_COLOUR 0x0635 +#define IL_USE_KEY_COLOR 0x0635 +#define IL_BLIT_BLEND 0x0636 + + +// Interlace definitions +#define IL_SAVE_INTERLACED 0x0639 +#define IL_INTERLACE_MODE 0x063A + + +// Quantization definitions +#define IL_QUANTIZATION_MODE 0x0640 +#define IL_WU_QUANT 0x0641 +#define IL_NEU_QUANT 0x0642 +#define IL_NEU_QUANT_SAMPLE 0x0643 +#define IL_MAX_QUANT_INDEXS 0x0644 //XIX : ILint : Maximum number of colors to reduce to, default of 256. and has a range of 2-256 +#define IL_MAX_QUANT_INDICES 0x0644 // Redefined, since the above #define is misspelled + + +// Hints +#define IL_FASTEST 0x0660 +#define IL_LESS_MEM 0x0661 +#define IL_DONT_CARE 0x0662 +#define IL_MEM_SPEED_HINT 0x0665 +#define IL_USE_COMPRESSION 0x0666 +#define IL_NO_COMPRESSION 0x0667 +#define IL_COMPRESSION_HINT 0x0668 + + +// Compression +#define IL_NVIDIA_COMPRESS 0x0670 +#define IL_SQUISH_COMPRESS 0x0671 + + +// Subimage types +#define IL_SUB_NEXT 0x0680 +#define IL_SUB_MIPMAP 0x0681 +#define IL_SUB_LAYER 0x0682 + + +// Compression definitions +#define IL_COMPRESS_MODE 0x0700 +#define IL_COMPRESS_NONE 0x0701 +#define IL_COMPRESS_RLE 0x0702 +#define IL_COMPRESS_LZO 0x0703 +#define IL_COMPRESS_ZLIB 0x0704 + + +// File format-specific values +#define IL_TGA_CREATE_STAMP 0x0710 +#define IL_JPG_QUALITY 0x0711 +#define IL_PNG_INTERLACE 0x0712 +#define IL_TGA_RLE 0x0713 +#define IL_BMP_RLE 0x0714 +#define IL_SGI_RLE 0x0715 +#define IL_TGA_ID_STRING 0x0717 +#define IL_TGA_AUTHNAME_STRING 0x0718 +#define IL_TGA_AUTHCOMMENT_STRING 0x0719 +#define IL_PNG_AUTHNAME_STRING 0x071A +#define IL_PNG_TITLE_STRING 0x071B +#define IL_PNG_DESCRIPTION_STRING 0x071C +#define IL_TIF_DESCRIPTION_STRING 0x071D +#define IL_TIF_HOSTCOMPUTER_STRING 0x071E +#define IL_TIF_DOCUMENTNAME_STRING 0x071F +#define IL_TIF_AUTHNAME_STRING 0x0720 +#define IL_JPG_SAVE_FORMAT 0x0721 +#define IL_CHEAD_HEADER_STRING 0x0722 +#define IL_PCD_PICNUM 0x0723 +#define IL_PNG_ALPHA_INDEX 0x0724 //XIX : ILint : the color in the palette at this index value (0-255) is considered transparent, -1 for no trasparent color +#define IL_JPG_PROGRESSIVE 0x0725 +#define IL_VTF_COMP 0x0726 + + +// DXTC definitions +#define IL_DXTC_FORMAT 0x0705 +#define IL_DXT1 0x0706 +#define IL_DXT2 0x0707 +#define IL_DXT3 0x0708 +#define IL_DXT4 0x0709 +#define IL_DXT5 0x070A +#define IL_DXT_NO_COMP 0x070B +#define IL_KEEP_DXTC_DATA 0x070C +#define IL_DXTC_DATA_FORMAT 0x070D +#define IL_3DC 0x070E +#define IL_RXGB 0x070F +#define IL_ATI1N 0x0710 +#define IL_DXT1A 0x0711 // Normally the same as IL_DXT1, except for nVidia Texture Tools. + +// Environment map definitions +#define IL_CUBEMAP_POSITIVEX 0x00000400 +#define IL_CUBEMAP_NEGATIVEX 0x00000800 +#define IL_CUBEMAP_POSITIVEY 0x00001000 +#define IL_CUBEMAP_NEGATIVEY 0x00002000 +#define IL_CUBEMAP_POSITIVEZ 0x00004000 +#define IL_CUBEMAP_NEGATIVEZ 0x00008000 +#define IL_SPHEREMAP 0x00010000 + + +// Values +#define IL_VERSION_NUM 0x0DE2 +#define IL_IMAGE_WIDTH 0x0DE4 +#define IL_IMAGE_HEIGHT 0x0DE5 +#define IL_IMAGE_DEPTH 0x0DE6 +#define IL_IMAGE_SIZE_OF_DATA 0x0DE7 +#define IL_IMAGE_BPP 0x0DE8 +#define IL_IMAGE_BYTES_PER_PIXEL 0x0DE8 +#define IL_IMAGE_BPP 0x0DE8 +#define IL_IMAGE_BITS_PER_PIXEL 0x0DE9 +#define IL_IMAGE_FORMAT 0x0DEA +#define IL_IMAGE_TYPE 0x0DEB +#define IL_PALETTE_TYPE 0x0DEC +#define IL_PALETTE_SIZE 0x0DED +#define IL_PALETTE_BPP 0x0DEE +#define IL_PALETTE_NUM_COLS 0x0DEF +#define IL_PALETTE_BASE_TYPE 0x0DF0 +#define IL_NUM_FACES 0x0DE1 +#define IL_NUM_IMAGES 0x0DF1 +#define IL_NUM_MIPMAPS 0x0DF2 +#define IL_NUM_LAYERS 0x0DF3 +#define IL_ACTIVE_IMAGE 0x0DF4 +#define IL_ACTIVE_MIPMAP 0x0DF5 +#define IL_ACTIVE_LAYER 0x0DF6 +#define IL_ACTIVE_FACE 0x0E00 +#define IL_CUR_IMAGE 0x0DF7 +#define IL_IMAGE_DURATION 0x0DF8 +#define IL_IMAGE_PLANESIZE 0x0DF9 +#define IL_IMAGE_BPC 0x0DFA +#define IL_IMAGE_OFFX 0x0DFB +#define IL_IMAGE_OFFY 0x0DFC +#define IL_IMAGE_CUBEFLAGS 0x0DFD +#define IL_IMAGE_ORIGIN 0x0DFE +#define IL_IMAGE_CHANNELS 0x0DFF + +# if defined __GNUC__ && (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0)) +// __attribute__((deprecated)) is supported by GCC 3.1 and later. +# define DEPRECATED(D) D __attribute__((deprecated)) +# elif defined _MSC_VER && _MSC_VER >= 1300 +// __declspec(deprecated) is supported by MSVC 7.0 and later. +# define DEPRECATED(D) __declspec(deprecated) D +# else +# define DEPRECATED (D) D +# endif + +// +// Section shamelessly modified from the glut header. +// + +// This is from Win32's +#if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED) || defined(__BORLANDC__) || defined(__LCC__) + #define ILAPIENTRY __stdcall + #define IL_PACKSTRUCT +//#elif defined(linux) || defined(MACOSX) || defined(__CYGWIN__) //fix bug 840364 +#elif defined( __GNUC__ ) + // this should work for any of the above commented platforms + // plus any platform using GCC + #ifdef __MINGW32__ + #define ILAPIENTRY __stdcall + #else + #define ILAPIENTRY + #endif + #define IL_PACKSTRUCT __attribute__ ((packed)) +#else + #define ILAPIENTRY + #define IL_PACKSTRUCT +#endif + +// This is from Win32's and +#if defined(__LCC__) + #define ILAPI __stdcall +#elif defined(_WIN32) //changed 20031221 to fix bug 840421 + #ifdef IL_STATIC_LIB + #define ILAPI + #else + #ifdef _IL_BUILD_LIBRARY + #define ILAPI __declspec(dllexport) + #else + #define ILAPI __declspec(dllimport) + #endif + #endif +#elif __APPLE__ + #define ILAPI extern +#else + #define ILAPI +#endif + + +#define IL_SEEK_SET 0 +#define IL_SEEK_CUR 1 +#define IL_SEEK_END 2 +#define IL_EOF -1 + + +// Callback functions for file reading +typedef void* ILHANDLE; +typedef void (ILAPIENTRY *fCloseRProc)(ILHANDLE); +typedef ILboolean (ILAPIENTRY *fEofProc) (ILHANDLE); +typedef ILint (ILAPIENTRY *fGetcProc) (ILHANDLE); +typedef ILHANDLE (ILAPIENTRY *fOpenRProc) (ILconst_string); +typedef ILint (ILAPIENTRY *fReadProc) (void*, ILuint, ILuint, ILHANDLE); +typedef ILint (ILAPIENTRY *fSeekRProc) (ILHANDLE, ILint, ILint); +typedef ILint (ILAPIENTRY *fTellRProc) (ILHANDLE); + +// Callback functions for file writing +typedef void (ILAPIENTRY *fCloseWProc)(ILHANDLE); +typedef ILHANDLE (ILAPIENTRY *fOpenWProc) (ILconst_string); +typedef ILint (ILAPIENTRY *fPutcProc) (ILubyte, ILHANDLE); +typedef ILint (ILAPIENTRY *fSeekWProc) (ILHANDLE, ILint, ILint); +typedef ILint (ILAPIENTRY *fTellWProc) (ILHANDLE); +typedef ILint (ILAPIENTRY *fWriteProc) (const void*, ILuint, ILuint, ILHANDLE); + +// Callback functions for allocation and deallocation +typedef void* (ILAPIENTRY *mAlloc)(const ILsizei); +typedef void (ILAPIENTRY *mFree) (const void* CONST_RESTRICT); + +// Registered format procedures +typedef ILenum (ILAPIENTRY *IL_LOADPROC)(ILconst_string); +typedef ILenum (ILAPIENTRY *IL_SAVEPROC)(ILconst_string); + + +// ImageLib Functions +ILAPI ILboolean ILAPIENTRY ilActiveFace(ILuint Number); +ILAPI ILboolean ILAPIENTRY ilActiveImage(ILuint Number); +ILAPI ILboolean ILAPIENTRY ilActiveLayer(ILuint Number); +ILAPI ILboolean ILAPIENTRY ilActiveMipmap(ILuint Number); +ILAPI ILboolean ILAPIENTRY ilApplyPal(ILconst_string FileName); +ILAPI ILboolean ILAPIENTRY ilApplyProfile(ILstring InProfile, ILstring OutProfile); +ILAPI void ILAPIENTRY ilBindImage(ILuint Image); +ILAPI ILboolean ILAPIENTRY ilBlit(ILuint Source, ILint DestX, ILint DestY, ILint DestZ, ILuint SrcX, ILuint SrcY, ILuint SrcZ, ILuint Width, ILuint Height, ILuint Depth); +ILAPI ILboolean ILAPIENTRY ilClampNTSC(void); +ILAPI void ILAPIENTRY ilClearColour(ILclampf Red, ILclampf Green, ILclampf Blue, ILclampf Alpha); +ILAPI ILboolean ILAPIENTRY ilClearImage(void); +ILAPI ILuint ILAPIENTRY ilCloneCurImage(void); +ILAPI ILubyte* ILAPIENTRY ilCompressDXT(ILubyte *Data, ILuint Width, ILuint Height, ILuint Depth, ILenum DXTCFormat, ILuint *DXTCSize); +ILAPI ILboolean ILAPIENTRY ilCompressFunc(ILenum Mode); +ILAPI ILboolean ILAPIENTRY ilConvertImage(ILenum DestFormat, ILenum DestType); +ILAPI ILboolean ILAPIENTRY ilConvertPal(ILenum DestFormat); +ILAPI ILboolean ILAPIENTRY ilCopyImage(ILuint Src); +ILAPI ILuint ILAPIENTRY ilCopyPixels(ILuint XOff, ILuint YOff, ILuint ZOff, ILuint Width, ILuint Height, ILuint Depth, ILenum Format, ILenum Type, void *Data); +ILAPI ILuint ILAPIENTRY ilCreateSubImage(ILenum Type, ILuint Num); +ILAPI ILboolean ILAPIENTRY ilDefaultImage(void); +ILAPI void ILAPIENTRY ilDeleteImage(const ILuint Num); +ILAPI void ILAPIENTRY ilDeleteImages(ILsizei Num, const ILuint *Images); +ILAPI ILenum ILAPIENTRY ilDetermineType(ILconst_string FileName); +ILAPI ILenum ILAPIENTRY ilDetermineTypeF(ILHANDLE File); +ILAPI ILenum ILAPIENTRY ilDetermineTypeL(const void *Lump, ILuint Size); +ILAPI ILboolean ILAPIENTRY ilDisable(ILenum Mode); +ILAPI ILboolean ILAPIENTRY ilDxtcDataToImage(void); +ILAPI ILboolean ILAPIENTRY ilDxtcDataToSurface(void); +ILAPI ILboolean ILAPIENTRY ilEnable(ILenum Mode); +ILAPI void ILAPIENTRY ilFlipSurfaceDxtcData(void); +ILAPI ILboolean ILAPIENTRY ilFormatFunc(ILenum Mode); +ILAPI void ILAPIENTRY ilGenImages(ILsizei Num, ILuint *Images); +ILAPI ILuint ILAPIENTRY ilGenImage(void); +ILAPI ILubyte* ILAPIENTRY ilGetAlpha(ILenum Type); +ILAPI ILboolean ILAPIENTRY ilGetBoolean(ILenum Mode); +ILAPI void ILAPIENTRY ilGetBooleanv(ILenum Mode, ILboolean *Param); +ILAPI ILubyte* ILAPIENTRY ilGetData(void); +ILAPI ILuint ILAPIENTRY ilGetDXTCData(void *Buffer, ILuint BufferSize, ILenum DXTCFormat); +ILAPI ILenum ILAPIENTRY ilGetError(void); +ILAPI ILint ILAPIENTRY ilGetInteger(ILenum Mode); +ILAPI void ILAPIENTRY ilGetIntegerv(ILenum Mode, ILint *Param); +ILAPI ILuint ILAPIENTRY ilGetLumpPos(void); +ILAPI ILubyte* ILAPIENTRY ilGetPalette(void); +ILAPI ILconst_string ILAPIENTRY ilGetString(ILenum StringName); +ILAPI void ILAPIENTRY ilHint(ILenum Target, ILenum Mode); +ILAPI ILboolean ILAPIENTRY ilInvertSurfaceDxtcDataAlpha(void); +ILAPI void ILAPIENTRY ilInit(void); +ILAPI ILboolean ILAPIENTRY ilImageToDxtcData(ILenum Format); +ILAPI ILboolean ILAPIENTRY ilIsDisabled(ILenum Mode); +ILAPI ILboolean ILAPIENTRY ilIsEnabled(ILenum Mode); +ILAPI ILboolean ILAPIENTRY ilIsImage(ILuint Image); +ILAPI ILboolean ILAPIENTRY ilIsValid(ILenum Type, ILconst_string FileName); +ILAPI ILboolean ILAPIENTRY ilIsValidF(ILenum Type, ILHANDLE File); +ILAPI ILboolean ILAPIENTRY ilIsValidL(ILenum Type, void *Lump, ILuint Size); +ILAPI void ILAPIENTRY ilKeyColour(ILclampf Red, ILclampf Green, ILclampf Blue, ILclampf Alpha); +ILAPI ILboolean ILAPIENTRY ilLoad(ILenum Type, ILconst_string FileName); +ILAPI ILboolean ILAPIENTRY ilLoadF(ILenum Type, ILHANDLE File); +ILAPI ILboolean ILAPIENTRY ilLoadImage(ILconst_string FileName); +ILAPI ILboolean ILAPIENTRY ilLoadL(ILenum Type, const void *Lump, ILuint Size); +ILAPI ILboolean ILAPIENTRY ilLoadPal(ILconst_string FileName); +ILAPI void ILAPIENTRY ilModAlpha(ILdouble AlphaValue); +ILAPI ILboolean ILAPIENTRY ilOriginFunc(ILenum Mode); +ILAPI ILboolean ILAPIENTRY ilOverlayImage(ILuint Source, ILint XCoord, ILint YCoord, ILint ZCoord); +ILAPI void ILAPIENTRY ilPopAttrib(void); +ILAPI void ILAPIENTRY ilPushAttrib(ILuint Bits); +ILAPI void ILAPIENTRY ilRegisterFormat(ILenum Format); +ILAPI ILboolean ILAPIENTRY ilRegisterLoad(ILconst_string Ext, IL_LOADPROC Load); +ILAPI ILboolean ILAPIENTRY ilRegisterMipNum(ILuint Num); +ILAPI ILboolean ILAPIENTRY ilRegisterNumFaces(ILuint Num); +ILAPI ILboolean ILAPIENTRY ilRegisterNumImages(ILuint Num); +ILAPI void ILAPIENTRY ilRegisterOrigin(ILenum Origin); +ILAPI void ILAPIENTRY ilRegisterPal(void *Pal, ILuint Size, ILenum Type); +ILAPI ILboolean ILAPIENTRY ilRegisterSave(ILconst_string Ext, IL_SAVEPROC Save); +ILAPI void ILAPIENTRY ilRegisterType(ILenum Type); +ILAPI ILboolean ILAPIENTRY ilRemoveLoad(ILconst_string Ext); +ILAPI ILboolean ILAPIENTRY ilRemoveSave(ILconst_string Ext); +ILAPI void ILAPIENTRY ilResetMemory(void); // Deprecated +ILAPI void ILAPIENTRY ilResetRead(void); +ILAPI void ILAPIENTRY ilResetWrite(void); +ILAPI ILboolean ILAPIENTRY ilSave(ILenum Type, ILconst_string FileName); +ILAPI ILuint ILAPIENTRY ilSaveF(ILenum Type, ILHANDLE File); +ILAPI ILboolean ILAPIENTRY ilSaveImage(ILconst_string FileName); +ILAPI ILuint ILAPIENTRY ilSaveL(ILenum Type, void *Lump, ILuint Size); +ILAPI ILboolean ILAPIENTRY ilSavePal(ILconst_string FileName); +ILAPI ILboolean ILAPIENTRY ilSetAlpha(ILdouble AlphaValue); +ILAPI ILboolean ILAPIENTRY ilSetData(void *Data); +ILAPI ILboolean ILAPIENTRY ilSetDuration(ILuint Duration); +ILAPI void ILAPIENTRY ilSetInteger(ILenum Mode, ILint Param); +ILAPI void ILAPIENTRY ilSetMemory(mAlloc, mFree); +ILAPI void ILAPIENTRY ilSetPixels(ILint XOff, ILint YOff, ILint ZOff, ILuint Width, ILuint Height, ILuint Depth, ILenum Format, ILenum Type, void *Data); +ILAPI void ILAPIENTRY ilSetRead(fOpenRProc, fCloseRProc, fEofProc, fGetcProc, fReadProc, fSeekRProc, fTellRProc); +ILAPI void ILAPIENTRY ilSetString(ILenum Mode, const char *String); +ILAPI void ILAPIENTRY ilSetWrite(fOpenWProc, fCloseWProc, fPutcProc, fSeekWProc, fTellWProc, fWriteProc); +ILAPI void ILAPIENTRY ilShutDown(void); +ILAPI ILboolean ILAPIENTRY ilSurfaceToDxtcData(ILenum Format); +ILAPI ILboolean ILAPIENTRY ilTexImage(ILuint Width, ILuint Height, ILuint Depth, ILubyte NumChannels, ILenum Format, ILenum Type, void *Data); +ILAPI ILboolean ILAPIENTRY ilTexImageDxtc(ILint w, ILint h, ILint d, ILenum DxtFormat, const ILubyte* data); +ILAPI ILenum ILAPIENTRY ilTypeFromExt(ILconst_string FileName); +ILAPI ILboolean ILAPIENTRY ilTypeFunc(ILenum Mode); +ILAPI ILboolean ILAPIENTRY ilLoadData(ILconst_string FileName, ILuint Width, ILuint Height, ILuint Depth, ILubyte Bpp); +ILAPI ILboolean ILAPIENTRY ilLoadDataF(ILHANDLE File, ILuint Width, ILuint Height, ILuint Depth, ILubyte Bpp); +ILAPI ILboolean ILAPIENTRY ilLoadDataL(void *Lump, ILuint Size, ILuint Width, ILuint Height, ILuint Depth, ILubyte Bpp); +ILAPI ILboolean ILAPIENTRY ilSaveData(ILconst_string FileName); + +// For all those weirdos that spell "colour" without the 'u'. +#define ilClearColor ilClearColour +#define ilKeyColor ilKeyColour + +#define imemclear(x,y) memset(x,0,y); + +#ifdef __cplusplus +} +#endif + +#endif // __IL_H__ +#endif // __il_h__ diff --git a/COM380/Project5/include/DevIL/il_wrap.h b/COM380/Project5/include/DevIL/il_wrap.h new file mode 100644 index 0000000..5cf9b0e --- /dev/null +++ b/COM380/Project5/include/DevIL/il_wrap.h @@ -0,0 +1,205 @@ +#ifndef WRAPPER_H +#define WRAPPER_H + +/*#include +#include */ +#include // Probably only have to #include this one + +#ifdef _MSC_VER + #ifndef _IL_WRAP_BUILD_LIB + #pragma comment(lib, "il_wrap.lib") + #endif +#endif + +class ilImage +{ +public: + ilImage(); + ilImage(char *); + ilImage(const ilImage &); + virtual ~ilImage(); + + ILboolean Load(char *); + ILboolean Load(char *, ILenum); + ILboolean Save(char *); + ILboolean Save(char *, ILenum); + + + // ImageLib functions + ILboolean ActiveImage(ILuint); + ILboolean ActiveLayer(ILuint); + ILboolean ActiveMipmap(ILuint); + ILboolean Clear(void); + ILvoid ClearColour(ILclampf, ILclampf, ILclampf, ILclampf); + ILboolean Convert(ILenum); + ILboolean Copy(ILuint); + ILboolean Default(void); + ILboolean Flip(void); + ILboolean SwapColours(void); + ILboolean Resize(ILuint, ILuint, ILuint); + ILboolean TexImage(ILuint, ILuint, ILuint, ILubyte, ILenum, ILenum, ILvoid*); + + + // Image handling + ILvoid Bind(void) const; + ILvoid Bind(ILuint); + ILvoid Close(void) { this->Delete(); } + ILvoid Delete(void); + ILvoid iGenBind(); + ILenum PaletteAlphaIndex(); + + // Image characteristics + ILuint Width(void); + ILuint Height(void); + ILuint Depth(void); + ILubyte Bpp(void); + ILubyte Bitpp(void); + ILenum PaletteType(void); + ILenum Format(void); + ILenum Type(void); + ILuint NumImages(void); + ILuint NumMipmaps(void); + ILuint GetId(void) const; + ILenum GetOrigin(void); + ILubyte *GetData(void); + ILubyte *GetPalette(void); + + + // Rendering + ILuint BindImage(void); + ILuint BindImage(ILenum); + + + // Operators + ilImage& operator = (ILuint); + ilImage& operator = (const ilImage &); + + +protected: + ILuint Id; + +private: + ILvoid iStartUp(); + + +}; + + +class ilFilters +{ +public: + static ILboolean Alienify(ilImage &); + static ILboolean BlurAvg(ilImage &, ILuint Iter); + static ILboolean BlurGaussian(ilImage &, ILuint Iter); + static ILboolean Contrast(ilImage &, ILfloat Contrast); + static ILboolean EdgeDetectE(ilImage &); + static ILboolean EdgeDetectP(ilImage &); + static ILboolean EdgeDetectS(ilImage &); + static ILboolean Emboss(ilImage &); + static ILboolean Gamma(ilImage &, ILfloat Gamma); + static ILboolean Negative(ilImage &); + static ILboolean Noisify(ilImage &, ILubyte Factor); + static ILboolean Pixelize(ilImage &, ILuint PixSize); + static ILboolean Saturate(ilImage &, ILfloat Saturation); + static ILboolean Saturate(ilImage &, ILfloat r, ILfloat g, ILfloat b, ILfloat Saturation); + static ILboolean ScaleColours(ilImage &, ILfloat r, ILfloat g, ILfloat b); + static ILboolean Sharpen(ilImage &, ILfloat Factor, ILuint Iter); +}; + + +#ifdef ILUT_USE_OPENGL +class ilOgl +{ +public: + static ILvoid Init(void); + static GLuint BindTex(ilImage &); + static ILboolean Upload(ilImage &, ILuint); + static GLuint Mipmap(ilImage &); + static ILboolean Screen(void); + static ILboolean Screenie(void); +}; +#endif//ILUT_USE_OPENGL + + +#ifdef ILUT_USE_ALLEGRO +class ilAlleg +{ +public: + static ILvoid Init(void); + static BITMAP *Convert(ilImage &); +}; +#endif//ILUT_USE_ALLEGRO + + +#ifdef ILUT_USE_WIN32 +class ilWin32 +{ +public: + static ILvoid Init(void); + static HBITMAP Convert(ilImage &); + static ILboolean GetClipboard(ilImage &); + static ILvoid GetInfo(ilImage &, BITMAPINFO *Info); + static ILubyte *GetPadData(ilImage &); + static HPALETTE GetPal(ilImage &); + static ILboolean GetResource(ilImage &, HINSTANCE hInst, ILint ID, char *ResourceType); + static ILboolean GetResource(ilImage &, HINSTANCE hInst, ILint ID, char *ResourceType, ILenum Type); + static ILboolean SetClipboard(ilImage &); +}; +#endif//ILUT_USE_WIN32 + + +class ilValidate +{ +public: + static ILboolean Valid(ILenum, char *); + static ILboolean Valid(ILenum, FILE *); + static ILboolean Valid(ILenum, ILvoid *, ILuint); + +protected: + +private: + +}; + + +class ilState +{ +public: + static ILboolean Disable(ILenum); + static ILboolean Enable(ILenum); + static ILvoid Get(ILenum, ILboolean &); + static ILvoid Get(ILenum, ILint &); + static ILboolean GetBool(ILenum); + static ILint GetInt(ILenum); + static const char *GetString(ILenum); + static ILboolean IsDisabled(ILenum); + static ILboolean IsEnabled(ILenum); + static ILboolean Origin(ILenum); + static ILvoid Pop(void); + static ILvoid Push(ILuint); + + +protected: + +private: + +}; + + +class ilError +{ +public: + static ILvoid Check(ILvoid (*Callback)(const char*)); + static ILvoid Check(ILvoid (*Callback)(ILenum)); + static ILenum Get(void); + static const char *String(void); + static const char *String(ILenum); + +protected: + +private: + +}; + + +#endif//WRAPPER_H diff --git a/COM380/Project5/include/DevIL/ilu.h b/COM380/Project5/include/DevIL/ilu.h new file mode 100644 index 0000000..0a07a97 --- /dev/null +++ b/COM380/Project5/include/DevIL/ilu.h @@ -0,0 +1,195 @@ +//----------------------------------------------------------------------------- +// +// ImageLib Utility Sources +// Copyright (C) 2000-2009 by Denton Woods +// Last modified: 03/07/2009 +// +// Filename: IL/ilu.h +// +// Description: The main include file for ILU +// +//----------------------------------------------------------------------------- + +// Doxygen comment +/*! \file ilu.h + The main include file for ILU +*/ + +#ifndef __ilu_h_ +#ifndef __ILU_H__ + +#define __ilu_h_ +#define __ILU_H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifdef _WIN32 + #if (defined(IL_USE_PRAGMA_LIBS)) && (!defined(_IL_BUILD_LIBRARY)) + #if defined(_MSC_VER) || defined(__BORLANDC__) + #pragma comment(lib, "ILU.lib") + #endif + #endif +#endif + + +#define ILU_VERSION_1_7_8 1 +#define ILU_VERSION 178 + + +#define ILU_FILTER 0x2600 +#define ILU_NEAREST 0x2601 +#define ILU_LINEAR 0x2602 +#define ILU_BILINEAR 0x2603 +#define ILU_SCALE_BOX 0x2604 +#define ILU_SCALE_TRIANGLE 0x2605 +#define ILU_SCALE_BELL 0x2606 +#define ILU_SCALE_BSPLINE 0x2607 +#define ILU_SCALE_LANCZOS3 0x2608 +#define ILU_SCALE_MITCHELL 0x2609 + + +// Error types +#define ILU_INVALID_ENUM 0x0501 +#define ILU_OUT_OF_MEMORY 0x0502 +#define ILU_INTERNAL_ERROR 0x0504 +#define ILU_INVALID_VALUE 0x0505 +#define ILU_ILLEGAL_OPERATION 0x0506 +#define ILU_INVALID_PARAM 0x0509 + + +// Values +#define ILU_PLACEMENT 0x0700 +#define ILU_LOWER_LEFT 0x0701 +#define ILU_LOWER_RIGHT 0x0702 +#define ILU_UPPER_LEFT 0x0703 +#define ILU_UPPER_RIGHT 0x0704 +#define ILU_CENTER 0x0705 +#define ILU_CONVOLUTION_MATRIX 0x0710 + +#define ILU_VERSION_NUM IL_VERSION_NUM +#define ILU_VENDOR IL_VENDOR + + +// Languages +#define ILU_ENGLISH 0x0800 +#define ILU_ARABIC 0x0801 +#define ILU_DUTCH 0x0802 +#define ILU_JAPANESE 0x0803 +#define ILU_SPANISH 0x0804 +#define ILU_GERMAN 0x0805 +#define ILU_FRENCH 0x0806 + + +// Filters +/* +#define ILU_FILTER_BLUR 0x0803 +#define ILU_FILTER_GAUSSIAN_3x3 0x0804 +#define ILU_FILTER_GAUSSIAN_5X5 0x0805 +#define ILU_FILTER_EMBOSS1 0x0807 +#define ILU_FILTER_EMBOSS2 0x0808 +#define ILU_FILTER_LAPLACIAN1 0x080A +#define ILU_FILTER_LAPLACIAN2 0x080B +#define ILU_FILTER_LAPLACIAN3 0x080C +#define ILU_FILTER_LAPLACIAN4 0x080D +#define ILU_FILTER_SHARPEN1 0x080E +#define ILU_FILTER_SHARPEN2 0x080F +#define ILU_FILTER_SHARPEN3 0x0810 +*/ + + +typedef struct ILinfo +{ + ILuint Id; // the image's id + ILubyte *Data; // the image's data + ILuint Width; // the image's width + ILuint Height; // the image's height + ILuint Depth; // the image's depth + ILubyte Bpp; // bytes per pixel (not bits) of the image + ILuint SizeOfData; // the total size of the data (in bytes) + ILenum Format; // image format (in IL enum style) + ILenum Type; // image type (in IL enum style) + ILenum Origin; // origin of the image + ILubyte *Palette; // the image's palette + ILenum PalType; // palette type + ILuint PalSize; // palette size + ILenum CubeFlags; // flags for what cube map sides are present + ILuint NumNext; // number of images following + ILuint NumMips; // number of mipmaps + ILuint NumLayers; // number of layers +} ILinfo; + + +typedef struct ILpointf { + ILfloat x; + ILfloat y; +} ILpointf; + +typedef struct ILpointi { + ILint x; + ILint y; +} ILpointi; + +ILAPI ILboolean ILAPIENTRY iluAlienify(void); +ILAPI ILboolean ILAPIENTRY iluBlurAvg(ILuint Iter); +ILAPI ILboolean ILAPIENTRY iluBlurGaussian(ILuint Iter); +ILAPI ILboolean ILAPIENTRY iluBuildMipmaps(void); +ILAPI ILuint ILAPIENTRY iluColoursUsed(void); +ILAPI ILboolean ILAPIENTRY iluCompareImage(ILuint Comp); +ILAPI ILboolean ILAPIENTRY iluContrast(ILfloat Contrast); +ILAPI ILboolean ILAPIENTRY iluCrop(ILuint XOff, ILuint YOff, ILuint ZOff, ILuint Width, ILuint Height, ILuint Depth); +ILAPI void ILAPIENTRY iluDeleteImage(ILuint Id); // Deprecated +ILAPI ILboolean ILAPIENTRY iluEdgeDetectE(void); +ILAPI ILboolean ILAPIENTRY iluEdgeDetectP(void); +ILAPI ILboolean ILAPIENTRY iluEdgeDetectS(void); +ILAPI ILboolean ILAPIENTRY iluEmboss(void); +ILAPI ILboolean ILAPIENTRY iluEnlargeCanvas(ILuint Width, ILuint Height, ILuint Depth); +ILAPI ILboolean ILAPIENTRY iluEnlargeImage(ILfloat XDim, ILfloat YDim, ILfloat ZDim); +ILAPI ILboolean ILAPIENTRY iluEqualize(void); +ILAPI ILconst_string ILAPIENTRY iluErrorString(ILenum Error); +ILAPI ILboolean ILAPIENTRY iluConvolution(ILint *matrix, ILint scale, ILint bias); +ILAPI ILboolean ILAPIENTRY iluFlipImage(void); +ILAPI ILboolean ILAPIENTRY iluGammaCorrect(ILfloat Gamma); +ILAPI ILuint ILAPIENTRY iluGenImage(void); // Deprecated +ILAPI void ILAPIENTRY iluGetImageInfo(ILinfo *Info); +ILAPI ILint ILAPIENTRY iluGetInteger(ILenum Mode); +ILAPI void ILAPIENTRY iluGetIntegerv(ILenum Mode, ILint *Param); +ILAPI ILstring ILAPIENTRY iluGetString(ILenum StringName); +ILAPI void ILAPIENTRY iluImageParameter(ILenum PName, ILenum Param); +ILAPI void ILAPIENTRY iluInit(void); +ILAPI ILboolean ILAPIENTRY iluInvertAlpha(void); +ILAPI ILuint ILAPIENTRY iluLoadImage(ILconst_string FileName); +ILAPI ILboolean ILAPIENTRY iluMirror(void); +ILAPI ILboolean ILAPIENTRY iluNegative(void); +ILAPI ILboolean ILAPIENTRY iluNoisify(ILclampf Tolerance); +ILAPI ILboolean ILAPIENTRY iluPixelize(ILuint PixSize); +ILAPI void ILAPIENTRY iluRegionfv(ILpointf *Points, ILuint n); +ILAPI void ILAPIENTRY iluRegioniv(ILpointi *Points, ILuint n); +ILAPI ILboolean ILAPIENTRY iluReplaceColour(ILubyte Red, ILubyte Green, ILubyte Blue, ILfloat Tolerance); +ILAPI ILboolean ILAPIENTRY iluRotate(ILfloat Angle); +ILAPI ILboolean ILAPIENTRY iluRotate3D(ILfloat x, ILfloat y, ILfloat z, ILfloat Angle); +ILAPI ILboolean ILAPIENTRY iluSaturate1f(ILfloat Saturation); +ILAPI ILboolean ILAPIENTRY iluSaturate4f(ILfloat r, ILfloat g, ILfloat b, ILfloat Saturation); +ILAPI ILboolean ILAPIENTRY iluScale(ILuint Width, ILuint Height, ILuint Depth); +ILAPI ILboolean ILAPIENTRY iluScaleAlpha(ILfloat scale); +ILAPI ILboolean ILAPIENTRY iluScaleColours(ILfloat r, ILfloat g, ILfloat b); +ILAPI ILboolean ILAPIENTRY iluSetLanguage(ILenum Language); +ILAPI ILboolean ILAPIENTRY iluSharpen(ILfloat Factor, ILuint Iter); +ILAPI ILboolean ILAPIENTRY iluSwapColours(void); +ILAPI ILboolean ILAPIENTRY iluWave(ILfloat Angle); + +#define iluColorsUsed iluColoursUsed +#define iluSwapColors iluSwapColours +#define iluReplaceColor iluReplaceColour +#define iluScaleColor iluScaleColour + +#ifdef __cplusplus +} +#endif + +#endif // __ILU_H__ +#endif // __ilu_h_ diff --git a/COM380/Project5/include/DevIL/ilu_region.h b/COM380/Project5/include/DevIL/ilu_region.h new file mode 100644 index 0000000..b5b3adc --- /dev/null +++ b/COM380/Project5/include/DevIL/ilu_region.h @@ -0,0 +1,25 @@ +//----------------------------------------------------------------------------- +// +// ImageLib Utility Sources +// Copyright (C) 2000-2002 by Denton Woods +// Last modified: 07/09/2002 <--Y2K Compliant! =] +// +// Filename: src-ILU/src/ilu_region.h +// +// Description: Creates an image region. +// +//----------------------------------------------------------------------------- + +#ifndef ILU_REGION_H +#define ILU_REGION_H + +typedef struct Edge +{ + ILint yUpper; + ILfloat xIntersect, dxPerScan; + struct Edge *next; +} Edge; + + +#endif//ILU_REGION_H + diff --git a/COM380/Project5/include/DevIL/ilut.h b/COM380/Project5/include/DevIL/ilut.h new file mode 100644 index 0000000..4a84b84 --- /dev/null +++ b/COM380/Project5/include/DevIL/ilut.h @@ -0,0 +1,390 @@ +//----------------------------------------------------------------------------- +// +// ImageLib Utility Toolkit Sources +// Copyright (C) 2000-2009 by Denton Woods +// Last modified: 03/07/2009 +// +// Filename: IL/ilut.h +// +// Description: The main include file for ILUT +// +//----------------------------------------------------------------------------- + +// Doxygen comment +/*! \file ilut.h + The main include file for ILUT +*/ + +#ifndef __ilut_h_ +#ifndef __ILUT_H__ + +#define __ilut_h_ +#define __ILUT_H__ + +#include +#include + + +//----------------------------------------------------------------------------- +// Defines +//----------------------------------------------------------------------------- + +#define ILUT_VERSION_1_7_8 1 +#define ILUT_VERSION 178 + + +// Attribute Bits +#define ILUT_OPENGL_BIT 0x00000001 +#define ILUT_D3D_BIT 0x00000002 +#define ILUT_ALL_ATTRIB_BITS 0x000FFFFF + + +// Error Types +#define ILUT_INVALID_ENUM 0x0501 +#define ILUT_OUT_OF_MEMORY 0x0502 +#define ILUT_INVALID_VALUE 0x0505 +#define ILUT_ILLEGAL_OPERATION 0x0506 +#define ILUT_INVALID_PARAM 0x0509 +#define ILUT_COULD_NOT_OPEN_FILE 0x050A +#define ILUT_STACK_OVERFLOW 0x050E +#define ILUT_STACK_UNDERFLOW 0x050F +#define ILUT_BAD_DIMENSIONS 0x0511 +#define ILUT_NOT_SUPPORTED 0x0550 + + +// State Definitions +#define ILUT_PALETTE_MODE 0x0600 +#define ILUT_OPENGL_CONV 0x0610 +#define ILUT_D3D_MIPLEVELS 0x0620 +#define ILUT_MAXTEX_WIDTH 0x0630 +#define ILUT_MAXTEX_HEIGHT 0x0631 +#define ILUT_MAXTEX_DEPTH 0x0632 +#define ILUT_GL_USE_S3TC 0x0634 +#define ILUT_D3D_USE_DXTC 0x0634 +#define ILUT_GL_GEN_S3TC 0x0635 +#define ILUT_D3D_GEN_DXTC 0x0635 +#define ILUT_S3TC_FORMAT 0x0705 +#define ILUT_DXTC_FORMAT 0x0705 +#define ILUT_D3D_POOL 0x0706 +#define ILUT_D3D_ALPHA_KEY_COLOR 0x0707 +#define ILUT_D3D_ALPHA_KEY_COLOUR 0x0707 +#define ILUT_FORCE_INTEGER_FORMAT 0x0636 + +//This new state does automatic texture target detection +//if enabled. Currently, only cubemap detection is supported. +//if the current image is no cubemap, the 2d texture is chosen. +#define ILUT_GL_AUTODETECT_TEXTURE_TARGET 0x0807 + + +// Values +#define ILUT_VERSION_NUM IL_VERSION_NUM +#define ILUT_VENDOR IL_VENDOR + +// The different rendering api's...more to be added later? +#define ILUT_OPENGL 0 +#define ILUT_ALLEGRO 1 +#define ILUT_WIN32 2 +#define ILUT_DIRECT3D8 3 +#define ILUT_DIRECT3D9 4 +#define ILUT_X11 5 +#define ILUT_DIRECT3D10 6 + +/* +// Includes specific config +#ifdef DJGPP + #define ILUT_USE_ALLEGRO +#elif _WIN32_WCE + #define ILUT_USE_WIN32 +#elif _WIN32 + //#ifdef __GNUC__ //__CYGWIN32__ (Cygwin seems to not define this with DevIL builds) + #define ILUT_USE_WIN32 + #include "IL/config.h" + + // Temporary fix for the SDL main() linker bug. + //#ifdef ILUT_USE_SDL + //#undef ILUT_USE_SDL + //#endif//ILUT_USE_SDL + + //#else + // #define ILUT_USE_WIN32 + // #define ILUT_USE_OPENGL + // #define ILUT_USE_SDL + // #define ILUT_USE_DIRECTX8 + //#endif +#elif BEOS // Don't know the #define + #define ILUT_USE_BEOS + #define ILUT_USE_OPENGL +#elif MACOSX + #define ILUT_USE_OPENGL +#else + + // We are surely using a *nix so the configure script + // may have written the configured config.h header + #include "IL/config.h" +#endif +*/ + +#if (defined(_WIN32) || defined(_WIN64)) + #if (defined(IL_USE_PRAGMA_LIBS)) && (!defined(_IL_BUILD_LIBRARY)) + #if defined(_MSC_VER) || defined(__BORLANDC__) + #pragma comment(lib, "ILUT.lib") + #endif + #endif + + #include +#endif + + + +//this should remain private and hidden +//#include "IL/config.h" + +////////////// +// OpenGL +////////////// + +#ifdef ILUT_USE_OPENGL + #if defined(_MSC_VER) || defined(_WIN32) + //#define WIN32_LEAN_AND_MEAN + #include + #endif//_MSC_VER + + #ifdef __APPLE__ + #include + #include + #else + #include + #include + #endif//__APPLE__ +#endif + + +#ifdef ILUT_USE_WIN32 + //#define WIN32_LEAN_AND_MEAN + #ifdef _DEBUG + #define _CRTDBG_MAP_ALLOC + #include + #ifndef _WIN32_WCE + #include + #endif + #endif + #include +#endif + + +// +// If we can avoid including these in all cases thing tend to break less +// and we can keep all of them defined as available +// +// Kriss +// + +// ImageLib Utility Toolkit's Allegro Functions +#ifdef ILUT_USE_ALLEGRO +// #include +#endif//ILUT_USE_ALLEGRO + +#ifdef ILUT_USE_SDL +// #include +#endif + +#ifdef ILUT_USE_DIRECTX8 + #include +#endif//ILUT_USE_DIRECTX9 + +#ifdef ILUT_USE_DIRECTX9 + #include +#endif//ILUT_USE_DIRECTX9 + +#ifdef ILUT_USE_DIRECTX10 + #pragma warning(push) + #pragma warning(disable : 4201) // Disables 'nonstandard extension used : nameless struct/union' warning + #include + #include + #include + #pragma warning(pop) +#endif//ILUT_USE_DIRECTX10 + +#ifdef ILUT_USE_X11 + #include + #include +#ifdef ILUT_USE_XSHM + #include + #include + #include +#endif//ILUT_USE_XSHM +#endif//ILUT_USE_X11 + + + +//----------------------------------------------------------------------------- +// Functions +//----------------------------------------------------------------------------- + +#ifdef __cplusplus +extern "C" { +#endif + +// ImageLib Utility Toolkit Functions +ILAPI ILboolean ILAPIENTRY ilutDisable(ILenum Mode); +ILAPI ILboolean ILAPIENTRY ilutEnable(ILenum Mode); +ILAPI ILboolean ILAPIENTRY ilutGetBoolean(ILenum Mode); +ILAPI void ILAPIENTRY ilutGetBooleanv(ILenum Mode, ILboolean *Param); +ILAPI ILint ILAPIENTRY ilutGetInteger(ILenum Mode); +ILAPI void ILAPIENTRY ilutGetIntegerv(ILenum Mode, ILint *Param); +ILAPI ILstring ILAPIENTRY ilutGetString(ILenum StringName); +ILAPI void ILAPIENTRY ilutInit(void); +ILAPI ILboolean ILAPIENTRY ilutIsDisabled(ILenum Mode); +ILAPI ILboolean ILAPIENTRY ilutIsEnabled(ILenum Mode); +ILAPI void ILAPIENTRY ilutPopAttrib(void); +ILAPI void ILAPIENTRY ilutPushAttrib(ILuint Bits); +ILAPI void ILAPIENTRY ilutSetInteger(ILenum Mode, ILint Param); + +ILAPI ILboolean ILAPIENTRY ilutRenderer(ILenum Renderer); + + +// ImageLib Utility Toolkit's OpenGL Functions +#ifdef ILUT_USE_OPENGL + ILAPI GLuint ILAPIENTRY ilutGLBindTexImage(); + ILAPI GLuint ILAPIENTRY ilutGLBindMipmaps(void); + ILAPI ILboolean ILAPIENTRY ilutGLBuildMipmaps(void); + ILAPI GLuint ILAPIENTRY ilutGLLoadImage(ILstring FileName); + ILAPI ILboolean ILAPIENTRY ilutGLScreen(void); + ILAPI ILboolean ILAPIENTRY ilutGLScreenie(void); + ILAPI ILboolean ILAPIENTRY ilutGLSaveImage(ILstring FileName, GLuint TexID); + ILAPI ILboolean ILAPIENTRY ilutGLSubTex2D(GLuint TexID, ILuint XOff, ILuint YOff); + ILAPI ILboolean ILAPIENTRY ilutGLSubTex3D(GLuint TexID, ILuint XOff, ILuint YOff, ILuint ZOff); + ILAPI ILboolean ILAPIENTRY ilutGLSetTex2D(GLuint TexID); + ILAPI ILboolean ILAPIENTRY ilutGLSetTex3D(GLuint TexID); + ILAPI ILboolean ILAPIENTRY ilutGLTexImage(GLuint Level); + ILAPI ILboolean ILAPIENTRY ilutGLSubTex(GLuint TexID, ILuint XOff, ILuint YOff); + + ILAPI ILboolean ILAPIENTRY ilutGLSetTex(GLuint TexID); // Deprecated - use ilutGLSetTex2D. + ILAPI ILboolean ILAPIENTRY ilutGLSubTex(GLuint TexID, ILuint XOff, ILuint YOff); // Use ilutGLSubTex2D. +#endif//ILUT_USE_OPENGL + + +// ImageLib Utility Toolkit's Allegro Functions +#ifdef ILUT_USE_ALLEGRO + #ifdef __cplusplus + extern "C" { + #endif + #include + #ifdef __cplusplus + } + #endif + + ILAPI BITMAP* ILAPIENTRY ilutAllegLoadImage(ILstring FileName); + ILAPI BITMAP* ILAPIENTRY ilutConvertToAlleg(PALETTE Pal); +#endif//ILUT_USE_ALLEGRO + + +// ImageLib Utility Toolkit's SDL Functions +#ifdef ILUT_USE_SDL + ILAPI struct SDL_Surface* ILAPIENTRY ilutConvertToSDLSurface(unsigned int flags); + ILAPI struct SDL_Surface* ILAPIENTRY ilutSDLSurfaceLoadImage(ILstring FileName); + ILAPI ILboolean ILAPIENTRY ilutSDLSurfaceFromBitmap(struct SDL_Surface *Bitmap); +#endif//ILUT_USE_SDL + + +// ImageLib Utility Toolkit's BeOS Functions +#ifdef ILUT_USE_BEOS + ILAPI BBitmap ILAPIENTRY ilutConvertToBBitmap(void); +#endif//ILUT_USE_BEOS + + +// ImageLib Utility Toolkit's Win32 GDI Functions +#ifdef ILUT_USE_WIN32 + ILAPI HBITMAP ILAPIENTRY ilutConvertToHBitmap(HDC hDC); + ILAPI HBITMAP ILAPIENTRY ilutConvertSliceToHBitmap(HDC hDC, ILuint slice); + ILAPI void ILAPIENTRY ilutFreePaddedData(ILubyte *Data); + ILAPI void ILAPIENTRY ilutGetBmpInfo(BITMAPINFO *Info); + ILAPI HPALETTE ILAPIENTRY ilutGetHPal(void); + ILAPI ILubyte* ILAPIENTRY ilutGetPaddedData(void); + ILAPI ILboolean ILAPIENTRY ilutGetWinClipboard(void); + ILAPI ILboolean ILAPIENTRY ilutLoadResource(HINSTANCE hInst, ILint ID, ILstring ResourceType, ILenum Type); + ILAPI ILboolean ILAPIENTRY ilutSetHBitmap(HBITMAP Bitmap); + ILAPI ILboolean ILAPIENTRY ilutSetHPal(HPALETTE Pal); + ILAPI ILboolean ILAPIENTRY ilutSetWinClipboard(void); + ILAPI HBITMAP ILAPIENTRY ilutWinLoadImage(ILstring FileName, HDC hDC); + ILAPI ILboolean ILAPIENTRY ilutWinLoadUrl(ILstring Url); + ILAPI ILboolean ILAPIENTRY ilutWinPrint(ILuint XPos, ILuint YPos, ILuint Width, ILuint Height, HDC hDC); + ILAPI ILboolean ILAPIENTRY ilutWinSaveImage(ILstring FileName, HBITMAP Bitmap); +#endif//ILUT_USE_WIN32 + +// ImageLib Utility Toolkit's DirectX 8 Functions +#ifdef ILUT_USE_DIRECTX8 +// ILAPI void ILAPIENTRY ilutD3D8MipFunc(ILuint NumLevels); + ILAPI struct IDirect3DTexture8* ILAPIENTRY ilutD3D8Texture(struct IDirect3DDevice8 *Device); + ILAPI struct IDirect3DVolumeTexture8* ILAPIENTRY ilutD3D8VolumeTexture(struct IDirect3DDevice8 *Device); + ILAPI ILboolean ILAPIENTRY ilutD3D8TexFromFile(struct IDirect3DDevice8 *Device, char *FileName, struct IDirect3DTexture8 **Texture); + ILAPI ILboolean ILAPIENTRY ilutD3D8VolTexFromFile(struct IDirect3DDevice8 *Device, char *FileName, struct IDirect3DVolumeTexture8 **Texture); + ILAPI ILboolean ILAPIENTRY ilutD3D8TexFromFileInMemory(struct IDirect3DDevice8 *Device, void *Lump, ILuint Size, struct IDirect3DTexture8 **Texture); + ILAPI ILboolean ILAPIENTRY ilutD3D8VolTexFromFileInMemory(struct IDirect3DDevice8 *Device, void *Lump, ILuint Size, struct IDirect3DVolumeTexture8 **Texture); + ILAPI ILboolean ILAPIENTRY ilutD3D8TexFromFileHandle(struct IDirect3DDevice8 *Device, ILHANDLE File, struct IDirect3DTexture8 **Texture); + ILAPI ILboolean ILAPIENTRY ilutD3D8VolTexFromFileHandle(struct IDirect3DDevice8 *Device, ILHANDLE File, struct IDirect3DVolumeTexture8 **Texture); + // These two are not tested yet. + ILAPI ILboolean ILAPIENTRY ilutD3D8TexFromResource(struct IDirect3DDevice8 *Device, HMODULE SrcModule, char *SrcResource, struct IDirect3DTexture8 **Texture); + ILAPI ILboolean ILAPIENTRY ilutD3D8VolTexFromResource(struct IDirect3DDevice8 *Device, HMODULE SrcModule, char *SrcResource, struct IDirect3DVolumeTexture8 **Texture); + ILAPI ILboolean ILAPIENTRY ilutD3D8LoadSurface(struct IDirect3DDevice8 *Device, struct IDirect3DSurface8 *Surface); +#endif//ILUT_USE_DIRECTX8 + +#ifdef ILUT_USE_DIRECTX9 + #pragma warning(push) + #pragma warning(disable : 4115) // Disables 'named type definition in parentheses' warning +// ILAPI void ILAPIENTRY ilutD3D9MipFunc(ILuint NumLevels); + ILAPI struct IDirect3DTexture9* ILAPIENTRY ilutD3D9Texture (struct IDirect3DDevice9* Device); + ILAPI struct IDirect3DVolumeTexture9* ILAPIENTRY ilutD3D9VolumeTexture (struct IDirect3DDevice9* Device); + ILAPI struct IDirect3DCubeTexture9* ILAPIENTRY ilutD3D9CubeTexture (struct IDirect3DDevice9* Device); + + ILAPI ILboolean ILAPIENTRY ilutD3D9CubeTexFromFile(struct IDirect3DDevice9 *Device, ILconst_string FileName, struct IDirect3DCubeTexture9 **Texture); + ILAPI ILboolean ILAPIENTRY ilutD3D9CubeTexFromFileInMemory(struct IDirect3DDevice9 *Device, void *Lump, ILuint Size, struct IDirect3DCubeTexture9 **Texture); + ILAPI ILboolean ILAPIENTRY ilutD3D9CubeTexFromFileHandle(struct IDirect3DDevice9 *Device, ILHANDLE File, struct IDirect3DCubeTexture9 **Texture); + ILAPI ILboolean ILAPIENTRY ilutD3D9CubeTexFromResource(struct IDirect3DDevice9 *Device, HMODULE SrcModule, ILconst_string SrcResource, struct IDirect3DCubeTexture9 **Texture); + + ILAPI ILboolean ILAPIENTRY ilutD3D9TexFromFile(struct IDirect3DDevice9 *Device, ILconst_string FileName, struct IDirect3DTexture9 **Texture); + ILAPI ILboolean ILAPIENTRY ilutD3D9VolTexFromFile(struct IDirect3DDevice9 *Device, ILconst_string FileName, struct IDirect3DVolumeTexture9 **Texture); + ILAPI ILboolean ILAPIENTRY ilutD3D9TexFromFileInMemory(struct IDirect3DDevice9 *Device, void *Lump, ILuint Size, struct IDirect3DTexture9 **Texture); + ILAPI ILboolean ILAPIENTRY ilutD3D9VolTexFromFileInMemory(struct IDirect3DDevice9 *Device, void *Lump, ILuint Size, struct IDirect3DVolumeTexture9 **Texture); + ILAPI ILboolean ILAPIENTRY ilutD3D9TexFromFileHandle(struct IDirect3DDevice9 *Device, ILHANDLE File, struct IDirect3DTexture9 **Texture); + ILAPI ILboolean ILAPIENTRY ilutD3D9VolTexFromFileHandle(struct IDirect3DDevice9 *Device, ILHANDLE File, struct IDirect3DVolumeTexture9 **Texture); + + // These three are not tested yet. + ILAPI ILboolean ILAPIENTRY ilutD3D9TexFromResource(struct IDirect3DDevice9 *Device, HMODULE SrcModule, ILconst_string SrcResource, struct IDirect3DTexture9 **Texture); + ILAPI ILboolean ILAPIENTRY ilutD3D9VolTexFromResource(struct IDirect3DDevice9 *Device, HMODULE SrcModule, ILconst_string SrcResource, struct IDirect3DVolumeTexture9 **Texture); + ILAPI ILboolean ILAPIENTRY ilutD3D9LoadSurface(struct IDirect3DDevice9 *Device, struct IDirect3DSurface9 *Surface); + #pragma warning(pop) +#endif//ILUT_USE_DIRECTX9 + +#ifdef ILUT_USE_DIRECTX10 + ILAPI ID3D10Texture2D* ILAPIENTRY ilutD3D10Texture(ID3D10Device *Device); + ILAPI ILboolean ILAPIENTRY ilutD3D10TexFromFile(ID3D10Device *Device, ILconst_string FileName, ID3D10Texture2D **Texture); + ILAPI ILboolean ILAPIENTRY ilutD3D10TexFromFileInMemory(ID3D10Device *Device, void *Lump, ILuint Size, ID3D10Texture2D **Texture); + ILAPI ILboolean ILAPIENTRY ilutD3D10TexFromResource(ID3D10Device *Device, HMODULE SrcModule, ILconst_string SrcResource, ID3D10Texture2D **Texture); + ILAPI ILboolean ILAPIENTRY ilutD3D10TexFromFileHandle(ID3D10Device *Device, ILHANDLE File, ID3D10Texture2D **Texture); +#endif//ILUT_USE_DIRECTX10 + + + +#ifdef ILUT_USE_X11 + ILAPI XImage * ILAPIENTRY ilutXCreateImage( Display* ); + ILAPI Pixmap ILAPIENTRY ilutXCreatePixmap( Display*,Drawable ); + ILAPI XImage * ILAPIENTRY ilutXLoadImage( Display*,char* ); + ILAPI Pixmap ILAPIENTRY ilutXLoadPixmap( Display*,Drawable,char* ); +#ifdef ILUT_USE_XSHM + ILAPI XImage * ILAPIENTRY ilutXShmCreateImage( Display*,XShmSegmentInfo* ); + ILAPI void ILAPIENTRY ilutXShmDestroyImage( Display*,XImage*,XShmSegmentInfo* ); + ILAPI Pixmap ILAPIENTRY ilutXShmCreatePixmap( Display*,Drawable,XShmSegmentInfo* ); + ILAPI void ILAPIENTRY ilutXShmFreePixmap( Display*,Pixmap,XShmSegmentInfo* ); + ILAPI XImage * ILAPIENTRY ilutXShmLoadImage( Display*,char*,XShmSegmentInfo* ); + ILAPI Pixmap ILAPIENTRY ilutXShmLoadPixmap( Display*,Drawable,char*,XShmSegmentInfo* ); +#endif//ILUT_USE_XSHM +#endif//ILUT_USE_X11 + + +#ifdef __cplusplus +} +#endif + +#endif // __ILUT_H__ +#endif // __ilut_h_ diff --git a/COM380/Project5/include/DevIL/ilut_config.h b/COM380/Project5/include/DevIL/ilut_config.h new file mode 100644 index 0000000..2b3625b --- /dev/null +++ b/COM380/Project5/include/DevIL/ilut_config.h @@ -0,0 +1,26 @@ +#ifndef __ILUT_CONFIG_H__ +#define __ILUT_CONFIG_H__ + +#define IL_USE_PRAGMA_LIBS + +// Supported APIs (ILUT) + +// +// sorry just +// cant get this one to work under windows +// have disabled for the now +// +// will look at it some more later +// +// Kriss +// +#undef ILUT_USE_ALLEGRO + +#undef ILUT_USE_DIRECTX8 +//#define ILUT_USE_DIRECTX9 +//#define ILUT_USE_DIRECTX10 +#define ILUT_USE_OPENGL +//#define ILUT_USE_SDL +#define ILUT_USE_WIN32 + +#endif//__ILUT_CONFIG_H__ diff --git a/COM380/Project5/include/GL/GLUt.h b/COM380/Project5/include/GL/GLUt.h new file mode 100644 index 0000000..0e6ddfb --- /dev/null +++ b/COM380/Project5/include/GL/GLUt.h @@ -0,0 +1,716 @@ +#ifndef __glut_h__ +#define __glut_h__ + +/* Copyright (c) Mark J. Kilgard, 1994, 1995, 1996, 1998. */ + +/* This program is freely distributable without licensing fees and is + provided without guarantee or warrantee expressed or implied. This + program is -not- in the public domain. */ + +#if defined(_WIN32) + +/* GLUT 3.7 now tries to avoid including + to avoid name space pollution, but Win32's + needs APIENTRY and WINGDIAPI defined properly. */ +# if 0 + /* This would put tons of macros and crap in our clean name space. */ +# define WIN32_LEAN_AND_MEAN +# include +# else + /* XXX This is from Win32's */ +# ifndef APIENTRY +# define GLUT_APIENTRY_DEFINED +# if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED) || defined(__BORLANDC__) || defined(__LCC__) +# define APIENTRY __stdcall +# else +# define APIENTRY +# endif +# endif + /* XXX This is from Win32's */ +# ifndef CALLBACK +# if (defined(_M_MRX000) || defined(_M_IX86) || defined(_M_ALPHA) || defined(_M_PPC)) && !defined(MIDL_PASS) || defined(__LCC__) +# define CALLBACK __stdcall +# else +# define CALLBACK +# endif +# endif + /* XXX Hack for lcc compiler. It doesn't support __declspec(dllimport), just __stdcall. */ +# if defined( __LCC__ ) +# undef WINGDIAPI +# define WINGDIAPI __stdcall +# else + /* XXX This is from Win32's and */ +# ifndef WINGDIAPI +# define GLUT_WINGDIAPI_DEFINED +# define WINGDIAPI __declspec(dllimport) +# endif +# endif + /* XXX This is from Win32's */ +# ifndef _WCHAR_T_DEFINED +typedef unsigned short wchar_t; +# define _WCHAR_T_DEFINED +# endif +# endif + +/* To disable automatic library usage for GLUT, define GLUT_NO_LIB_PRAGMA + in your compile preprocessor options. */ +# if !defined(GLUT_BUILDING_LIB) && !defined(GLUT_NO_LIB_PRAGMA) +# pragma comment (lib, "winmm.lib") /* link with Windows MultiMedia lib */ +/* To enable automatic SGI OpenGL for Windows library usage for GLUT, + define GLUT_USE_SGI_OPENGL in your compile preprocessor options. */ +# ifdef GLUT_USE_SGI_OPENGL +# pragma comment (lib, "opengl.lib") /* link with SGI OpenGL for Windows lib */ +# pragma comment (lib, "glu.lib") /* link with SGI OpenGL Utility lib */ +# pragma comment (lib, "glut.lib") /* link with Win32 GLUT for SGI OpenGL lib */ +# else +# pragma comment (lib, "opengl32.lib") /* link with Microsoft OpenGL lib */ +# pragma comment (lib, "glu32.lib") /* link with Microsoft OpenGL Utility lib */ +# pragma comment (lib, "glut32.lib") /* link with Win32 GLUT lib */ +# endif +# endif + +/* To disable supression of annoying warnings about floats being promoted + to doubles, define GLUT_NO_WARNING_DISABLE in your compile preprocessor + options. */ +# ifndef GLUT_NO_WARNING_DISABLE +# pragma warning (disable:4244) /* Disable bogus VC++ 4.2 conversion warnings. */ +# pragma warning (disable:4305) /* VC++ 5.0 version of above warning. */ +# endif + +/* Win32 has an annoying issue where there are multiple C run-time + libraries (CRTs). If the executable is linked with a different CRT + from the GLUT DLL, the GLUT DLL will not share the same CRT static + data seen by the executable. In particular, atexit callbacks registered + in the executable will not be called if GLUT calls its (different) + exit routine). GLUT is typically built with the + "/MD" option (the CRT with multithreading DLL support), but the Visual + C++ linker default is "/ML" (the single threaded CRT). + + One workaround to this issue is requiring users to always link with + the same CRT as GLUT is compiled with. That requires users supply a + non-standard option. GLUT 3.7 has its own built-in workaround where + the executable's "exit" function pointer is covertly passed to GLUT. + GLUT then calls the executable's exit function pointer to ensure that + any "atexit" calls registered by the application are called if GLUT + needs to exit. + + Note that the __glut*WithExit routines should NEVER be called directly. + To avoid the atexit workaround, #define GLUT_DISABLE_ATEXIT_HACK. */ + +/* XXX This is from Win32's */ +# if !defined(_MSC_VER) && !defined(__cdecl) + /* Define __cdecl for non-Microsoft compilers. */ +# define __cdecl +# define GLUT_DEFINED___CDECL +# endif +# ifndef _CRTIMP +# ifdef _NTSDK + /* Definition compatible with NT SDK */ +# define _CRTIMP +# else + /* Current definition */ +# ifdef _DLL +# define _CRTIMP __declspec(dllimport) +# else +# define _CRTIMP +# endif +# endif +# define GLUT_DEFINED__CRTIMP +# endif + +/* GLUT API entry point declarations for Win32. */ +# ifdef GLUT_BUILDING_LIB +# define GLUTAPI __declspec(dllexport) +# else +# ifdef _DLL +# define GLUTAPI __declspec(dllimport) +# else +# define GLUTAPI extern +# endif +# endif + +/* GLUT callback calling convention for Win32. */ +# define GLUTCALLBACK __cdecl + +#endif /* _WIN32 */ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(_WIN32) +# ifndef GLUT_BUILDING_LIB +extern _CRTIMP void __cdecl exit(int); +# endif +#else +/* non-Win32 case. */ +/* Define APIENTRY and CALLBACK to nothing if we aren't on Win32. */ +# define APIENTRY +# define GLUT_APIENTRY_DEFINED +# define CALLBACK +/* Define GLUTAPI and GLUTCALLBACK as below if we aren't on Win32. */ +# define GLUTAPI extern +# define GLUTCALLBACK +/* Prototype exit for the non-Win32 case (see above). */ +extern void exit(int); +#endif + +/** + GLUT API revision history: + + GLUT_API_VERSION is updated to reflect incompatible GLUT + API changes (interface changes, semantic changes, deletions, + or additions). + + GLUT_API_VERSION=1 First public release of GLUT. 11/29/94 + + GLUT_API_VERSION=2 Added support for OpenGL/GLX multisampling, + extension. Supports new input devices like tablet, dial and button + box, and Spaceball. Easy to query OpenGL extensions. + + GLUT_API_VERSION=3 glutMenuStatus added. + + GLUT_API_VERSION=4 glutInitDisplayString, glutWarpPointer, + glutBitmapLength, glutStrokeLength, glutWindowStatusFunc, dynamic + video resize subAPI, glutPostWindowRedisplay, glutKeyboardUpFunc, + glutSpecialUpFunc, glutIgnoreKeyRepeat, glutSetKeyRepeat, + glutJoystickFunc, glutForceJoystickFunc (NOT FINALIZED!). +**/ +#ifndef GLUT_API_VERSION /* allow this to be overriden */ +#define GLUT_API_VERSION 3 +#endif + +/** + GLUT implementation revision history: + + GLUT_XLIB_IMPLEMENTATION is updated to reflect both GLUT + API revisions and implementation revisions (ie, bug fixes). + + GLUT_XLIB_IMPLEMENTATION=1 mjk's first public release of + GLUT Xlib-based implementation. 11/29/94 + + GLUT_XLIB_IMPLEMENTATION=2 mjk's second public release of + GLUT Xlib-based implementation providing GLUT version 2 + interfaces. + + GLUT_XLIB_IMPLEMENTATION=3 mjk's GLUT 2.2 images. 4/17/95 + + GLUT_XLIB_IMPLEMENTATION=4 mjk's GLUT 2.3 images. 6/?/95 + + GLUT_XLIB_IMPLEMENTATION=5 mjk's GLUT 3.0 images. 10/?/95 + + GLUT_XLIB_IMPLEMENTATION=7 mjk's GLUT 3.1+ with glutWarpPoitner. 7/24/96 + + GLUT_XLIB_IMPLEMENTATION=8 mjk's GLUT 3.1+ with glutWarpPoitner + and video resize. 1/3/97 + + GLUT_XLIB_IMPLEMENTATION=9 mjk's GLUT 3.4 release with early GLUT 4 routines. + + GLUT_XLIB_IMPLEMENTATION=11 Mesa 2.5's GLUT 3.6 release. + + GLUT_XLIB_IMPLEMENTATION=12 mjk's GLUT 3.6 release with early GLUT 4 routines + signal handling. + + GLUT_XLIB_IMPLEMENTATION=13 mjk's GLUT 3.7 beta with GameGLUT support. + + GLUT_XLIB_IMPLEMENTATION=14 mjk's GLUT 3.7 beta with f90gl friend interface. + + GLUT_XLIB_IMPLEMENTATION=15 mjk's GLUT 3.7 beta sync'ed with Mesa +**/ +#ifndef GLUT_XLIB_IMPLEMENTATION /* Allow this to be overriden. */ +#define GLUT_XLIB_IMPLEMENTATION 15 +#endif + +/* Display mode bit masks. */ +#define GLUT_RGB 0 +#define GLUT_RGBA GLUT_RGB +#define GLUT_INDEX 1 +#define GLUT_SINGLE 0 +#define GLUT_DOUBLE 2 +#define GLUT_ACCUM 4 +#define GLUT_ALPHA 8 +#define GLUT_DEPTH 16 +#define GLUT_STENCIL 32 +#if (GLUT_API_VERSION >= 2) +#define GLUT_MULTISAMPLE 128 +#define GLUT_STEREO 256 +#endif +#if (GLUT_API_VERSION >= 3) +#define GLUT_LUMINANCE 512 +#endif + +/* Mouse buttons. */ +#define GLUT_LEFT_BUTTON 0 +#define GLUT_MIDDLE_BUTTON 1 +#define GLUT_RIGHT_BUTTON 2 + +/* Mouse button state. */ +#define GLUT_DOWN 0 +#define GLUT_UP 1 + +#if (GLUT_API_VERSION >= 2) +/* function keys */ +#define GLUT_KEY_F1 1 +#define GLUT_KEY_F2 2 +#define GLUT_KEY_F3 3 +#define GLUT_KEY_F4 4 +#define GLUT_KEY_F5 5 +#define GLUT_KEY_F6 6 +#define GLUT_KEY_F7 7 +#define GLUT_KEY_F8 8 +#define GLUT_KEY_F9 9 +#define GLUT_KEY_F10 10 +#define GLUT_KEY_F11 11 +#define GLUT_KEY_F12 12 +/* directional keys */ +#define GLUT_KEY_LEFT 100 +#define GLUT_KEY_UP 101 +#define GLUT_KEY_RIGHT 102 +#define GLUT_KEY_DOWN 103 +#define GLUT_KEY_PAGE_UP 104 +#define GLUT_KEY_PAGE_DOWN 105 +#define GLUT_KEY_HOME 106 +#define GLUT_KEY_END 107 +#define GLUT_KEY_INSERT 108 +#endif + +/* Entry/exit state. */ +#define GLUT_LEFT 0 +#define GLUT_ENTERED 1 + +/* Menu usage state. */ +#define GLUT_MENU_NOT_IN_USE 0 +#define GLUT_MENU_IN_USE 1 + +/* Visibility state. */ +#define GLUT_NOT_VISIBLE 0 +#define GLUT_VISIBLE 1 + +/* Window status state. */ +#define GLUT_HIDDEN 0 +#define GLUT_FULLY_RETAINED 1 +#define GLUT_PARTIALLY_RETAINED 2 +#define GLUT_FULLY_COVERED 3 + +/* Color index component selection values. */ +#define GLUT_RED 0 +#define GLUT_GREEN 1 +#define GLUT_BLUE 2 + +#if defined(_WIN32) +/* Stroke font constants (use these in GLUT program). */ +#define GLUT_STROKE_ROMAN ((void*)0) +#define GLUT_STROKE_MONO_ROMAN ((void*)1) + +/* Bitmap font constants (use these in GLUT program). */ +#define GLUT_BITMAP_9_BY_15 ((void*)2) +#define GLUT_BITMAP_8_BY_13 ((void*)3) +#define GLUT_BITMAP_TIMES_ROMAN_10 ((void*)4) +#define GLUT_BITMAP_TIMES_ROMAN_24 ((void*)5) +#if (GLUT_API_VERSION >= 3) +#define GLUT_BITMAP_HELVETICA_10 ((void*)6) +#define GLUT_BITMAP_HELVETICA_12 ((void*)7) +#define GLUT_BITMAP_HELVETICA_18 ((void*)8) +#endif +#else +/* Stroke font opaque addresses (use constants instead in source code). */ +GLUTAPI void *glutStrokeRoman; +GLUTAPI void *glutStrokeMonoRoman; + +/* Stroke font constants (use these in GLUT program). */ +#define GLUT_STROKE_ROMAN (&glutStrokeRoman) +#define GLUT_STROKE_MONO_ROMAN (&glutStrokeMonoRoman) + +/* Bitmap font opaque addresses (use constants instead in source code). */ +GLUTAPI void *glutBitmap9By15; +GLUTAPI void *glutBitmap8By13; +GLUTAPI void *glutBitmapTimesRoman10; +GLUTAPI void *glutBitmapTimesRoman24; +GLUTAPI void *glutBitmapHelvetica10; +GLUTAPI void *glutBitmapHelvetica12; +GLUTAPI void *glutBitmapHelvetica18; + +/* Bitmap font constants (use these in GLUT program). */ +#define GLUT_BITMAP_9_BY_15 (&glutBitmap9By15) +#define GLUT_BITMAP_8_BY_13 (&glutBitmap8By13) +#define GLUT_BITMAP_TIMES_ROMAN_10 (&glutBitmapTimesRoman10) +#define GLUT_BITMAP_TIMES_ROMAN_24 (&glutBitmapTimesRoman24) +#if (GLUT_API_VERSION >= 3) +#define GLUT_BITMAP_HELVETICA_10 (&glutBitmapHelvetica10) +#define GLUT_BITMAP_HELVETICA_12 (&glutBitmapHelvetica12) +#define GLUT_BITMAP_HELVETICA_18 (&glutBitmapHelvetica18) +#endif +#endif + +/* glutGet parameters. */ +#define GLUT_WINDOW_X ((GLenum) 100) +#define GLUT_WINDOW_Y ((GLenum) 101) +#define GLUT_WINDOW_WIDTH ((GLenum) 102) +#define GLUT_WINDOW_HEIGHT ((GLenum) 103) +#define GLUT_WINDOW_BUFFER_SIZE ((GLenum) 104) +#define GLUT_WINDOW_STENCIL_SIZE ((GLenum) 105) +#define GLUT_WINDOW_DEPTH_SIZE ((GLenum) 106) +#define GLUT_WINDOW_RED_SIZE ((GLenum) 107) +#define GLUT_WINDOW_GREEN_SIZE ((GLenum) 108) +#define GLUT_WINDOW_BLUE_SIZE ((GLenum) 109) +#define GLUT_WINDOW_ALPHA_SIZE ((GLenum) 110) +#define GLUT_WINDOW_ACCUM_RED_SIZE ((GLenum) 111) +#define GLUT_WINDOW_ACCUM_GREEN_SIZE ((GLenum) 112) +#define GLUT_WINDOW_ACCUM_BLUE_SIZE ((GLenum) 113) +#define GLUT_WINDOW_ACCUM_ALPHA_SIZE ((GLenum) 114) +#define GLUT_WINDOW_DOUBLEBUFFER ((GLenum) 115) +#define GLUT_WINDOW_RGBA ((GLenum) 116) +#define GLUT_WINDOW_PARENT ((GLenum) 117) +#define GLUT_WINDOW_NUM_CHILDREN ((GLenum) 118) +#define GLUT_WINDOW_COLORMAP_SIZE ((GLenum) 119) +#if (GLUT_API_VERSION >= 2) +#define GLUT_WINDOW_NUM_SAMPLES ((GLenum) 120) +#define GLUT_WINDOW_STEREO ((GLenum) 121) +#endif +#if (GLUT_API_VERSION >= 3) +#define GLUT_WINDOW_CURSOR ((GLenum) 122) +#endif +#define GLUT_SCREEN_WIDTH ((GLenum) 200) +#define GLUT_SCREEN_HEIGHT ((GLenum) 201) +#define GLUT_SCREEN_WIDTH_MM ((GLenum) 202) +#define GLUT_SCREEN_HEIGHT_MM ((GLenum) 203) +#define GLUT_MENU_NUM_ITEMS ((GLenum) 300) +#define GLUT_DISPLAY_MODE_POSSIBLE ((GLenum) 400) +#define GLUT_INIT_WINDOW_X ((GLenum) 500) +#define GLUT_INIT_WINDOW_Y ((GLenum) 501) +#define GLUT_INIT_WINDOW_WIDTH ((GLenum) 502) +#define GLUT_INIT_WINDOW_HEIGHT ((GLenum) 503) +#define GLUT_INIT_DISPLAY_MODE ((GLenum) 504) +#if (GLUT_API_VERSION >= 2) +#define GLUT_ELAPSED_TIME ((GLenum) 700) +#endif +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13) +#define GLUT_WINDOW_FORMAT_ID ((GLenum) 123) +#endif + +#if (GLUT_API_VERSION >= 2) +/* glutDeviceGet parameters. */ +#define GLUT_HAS_KEYBOARD ((GLenum) 600) +#define GLUT_HAS_MOUSE ((GLenum) 601) +#define GLUT_HAS_SPACEBALL ((GLenum) 602) +#define GLUT_HAS_DIAL_AND_BUTTON_BOX ((GLenum) 603) +#define GLUT_HAS_TABLET ((GLenum) 604) +#define GLUT_NUM_MOUSE_BUTTONS ((GLenum) 605) +#define GLUT_NUM_SPACEBALL_BUTTONS ((GLenum) 606) +#define GLUT_NUM_BUTTON_BOX_BUTTONS ((GLenum) 607) +#define GLUT_NUM_DIALS ((GLenum) 608) +#define GLUT_NUM_TABLET_BUTTONS ((GLenum) 609) +#endif +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13) +#define GLUT_DEVICE_IGNORE_KEY_REPEAT ((GLenum) 610) +#define GLUT_DEVICE_KEY_REPEAT ((GLenum) 611) +#define GLUT_HAS_JOYSTICK ((GLenum) 612) +#define GLUT_OWNS_JOYSTICK ((GLenum) 613) +#define GLUT_JOYSTICK_BUTTONS ((GLenum) 614) +#define GLUT_JOYSTICK_AXES ((GLenum) 615) +#define GLUT_JOYSTICK_POLL_RATE ((GLenum) 616) +#endif + +#if (GLUT_API_VERSION >= 3) +/* glutLayerGet parameters. */ +#define GLUT_OVERLAY_POSSIBLE ((GLenum) 800) +#define GLUT_LAYER_IN_USE ((GLenum) 801) +#define GLUT_HAS_OVERLAY ((GLenum) 802) +#define GLUT_TRANSPARENT_INDEX ((GLenum) 803) +#define GLUT_NORMAL_DAMAGED ((GLenum) 804) +#define GLUT_OVERLAY_DAMAGED ((GLenum) 805) + +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9) +/* glutVideoResizeGet parameters. */ +#define GLUT_VIDEO_RESIZE_POSSIBLE ((GLenum) 900) +#define GLUT_VIDEO_RESIZE_IN_USE ((GLenum) 901) +#define GLUT_VIDEO_RESIZE_X_DELTA ((GLenum) 902) +#define GLUT_VIDEO_RESIZE_Y_DELTA ((GLenum) 903) +#define GLUT_VIDEO_RESIZE_WIDTH_DELTA ((GLenum) 904) +#define GLUT_VIDEO_RESIZE_HEIGHT_DELTA ((GLenum) 905) +#define GLUT_VIDEO_RESIZE_X ((GLenum) 906) +#define GLUT_VIDEO_RESIZE_Y ((GLenum) 907) +#define GLUT_VIDEO_RESIZE_WIDTH ((GLenum) 908) +#define GLUT_VIDEO_RESIZE_HEIGHT ((GLenum) 909) +#endif + +/* glutUseLayer parameters. */ +#define GLUT_NORMAL ((GLenum) 0) +#define GLUT_OVERLAY ((GLenum) 1) + +/* glutGetModifiers return mask. */ +#define GLUT_ACTIVE_SHIFT 1 +#define GLUT_ACTIVE_CTRL 2 +#define GLUT_ACTIVE_ALT 4 + +/* glutSetCursor parameters. */ +/* Basic arrows. */ +#define GLUT_CURSOR_RIGHT_ARROW 0 +#define GLUT_CURSOR_LEFT_ARROW 1 +/* Symbolic cursor shapes. */ +#define GLUT_CURSOR_INFO 2 +#define GLUT_CURSOR_DESTROY 3 +#define GLUT_CURSOR_HELP 4 +#define GLUT_CURSOR_CYCLE 5 +#define GLUT_CURSOR_SPRAY 6 +#define GLUT_CURSOR_WAIT 7 +#define GLUT_CURSOR_TEXT 8 +#define GLUT_CURSOR_CROSSHAIR 9 +/* Directional cursors. */ +#define GLUT_CURSOR_UP_DOWN 10 +#define GLUT_CURSOR_LEFT_RIGHT 11 +/* Sizing cursors. */ +#define GLUT_CURSOR_TOP_SIDE 12 +#define GLUT_CURSOR_BOTTOM_SIDE 13 +#define GLUT_CURSOR_LEFT_SIDE 14 +#define GLUT_CURSOR_RIGHT_SIDE 15 +#define GLUT_CURSOR_TOP_LEFT_CORNER 16 +#define GLUT_CURSOR_TOP_RIGHT_CORNER 17 +#define GLUT_CURSOR_BOTTOM_RIGHT_CORNER 18 +#define GLUT_CURSOR_BOTTOM_LEFT_CORNER 19 +/* Inherit from parent window. */ +#define GLUT_CURSOR_INHERIT 100 +/* Blank cursor. */ +#define GLUT_CURSOR_NONE 101 +/* Fullscreen crosshair (if available). */ +#define GLUT_CURSOR_FULL_CROSSHAIR 102 +#endif + +/* GLUT initialization sub-API. */ +GLUTAPI void APIENTRY glutInit(int *argcp, char **argv); +#if defined(_WIN32) && !defined(GLUT_DISABLE_ATEXIT_HACK) +GLUTAPI void APIENTRY __glutInitWithExit(int *argcp, char **argv, void (__cdecl *exitfunc)(int)); +#ifndef GLUT_BUILDING_LIB +static void APIENTRY glutInit_ATEXIT_HACK(int *argcp, char **argv) { __glutInitWithExit(argcp, argv, exit); } +#define glutInit glutInit_ATEXIT_HACK +#endif +#endif +GLUTAPI void APIENTRY glutInitDisplayMode(unsigned int mode); +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9) +GLUTAPI void APIENTRY glutInitDisplayString(const char *string); +#endif +GLUTAPI void APIENTRY glutInitWindowPosition(int x, int y); +GLUTAPI void APIENTRY glutInitWindowSize(int width, int height); +GLUTAPI void APIENTRY glutMainLoop(void); + +/* GLUT window sub-API. */ +GLUTAPI int APIENTRY glutCreateWindow(const char *title); +#if defined(_WIN32) && !defined(GLUT_DISABLE_ATEXIT_HACK) +GLUTAPI int APIENTRY __glutCreateWindowWithExit(const char *title, void (__cdecl *exitfunc)(int)); +#ifndef GLUT_BUILDING_LIB +static int APIENTRY glutCreateWindow_ATEXIT_HACK(const char *title) { return __glutCreateWindowWithExit(title, exit); } +#define glutCreateWindow glutCreateWindow_ATEXIT_HACK +#endif +#endif +GLUTAPI int APIENTRY glutCreateSubWindow(int win, int x, int y, int width, int height); +GLUTAPI void APIENTRY glutDestroyWindow(int win); +GLUTAPI void APIENTRY glutPostRedisplay(void); +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 11) +GLUTAPI void APIENTRY glutPostWindowRedisplay(int win); +#endif +GLUTAPI void APIENTRY glutSwapBuffers(void); +GLUTAPI int APIENTRY glutGetWindow(void); +GLUTAPI void APIENTRY glutSetWindow(int win); +GLUTAPI void APIENTRY glutSetWindowTitle(const char *title); +GLUTAPI void APIENTRY glutSetIconTitle(const char *title); +GLUTAPI void APIENTRY glutPositionWindow(int x, int y); +GLUTAPI void APIENTRY glutReshapeWindow(int width, int height); +GLUTAPI void APIENTRY glutPopWindow(void); +GLUTAPI void APIENTRY glutPushWindow(void); +GLUTAPI void APIENTRY glutIconifyWindow(void); +GLUTAPI void APIENTRY glutShowWindow(void); +GLUTAPI void APIENTRY glutHideWindow(void); +#if (GLUT_API_VERSION >= 3) +GLUTAPI void APIENTRY glutFullScreen(void); +GLUTAPI void APIENTRY glutSetCursor(int cursor); +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9) +GLUTAPI void APIENTRY glutWarpPointer(int x, int y); +#endif + +/* GLUT overlay sub-API. */ +GLUTAPI void APIENTRY glutEstablishOverlay(void); +GLUTAPI void APIENTRY glutRemoveOverlay(void); +GLUTAPI void APIENTRY glutUseLayer(GLenum layer); +GLUTAPI void APIENTRY glutPostOverlayRedisplay(void); +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 11) +GLUTAPI void APIENTRY glutPostWindowOverlayRedisplay(int win); +#endif +GLUTAPI void APIENTRY glutShowOverlay(void); +GLUTAPI void APIENTRY glutHideOverlay(void); +#endif + +/* GLUT menu sub-API. */ +GLUTAPI int APIENTRY glutCreateMenu(void (GLUTCALLBACK *func)(int)); +#if defined(_WIN32) && !defined(GLUT_DISABLE_ATEXIT_HACK) +GLUTAPI int APIENTRY __glutCreateMenuWithExit(void (GLUTCALLBACK *func)(int), void (__cdecl *exitfunc)(int)); +#ifndef GLUT_BUILDING_LIB +static int APIENTRY glutCreateMenu_ATEXIT_HACK(void (GLUTCALLBACK *func)(int)) { return __glutCreateMenuWithExit(func, exit); } +#define glutCreateMenu glutCreateMenu_ATEXIT_HACK +#endif +#endif +GLUTAPI void APIENTRY glutDestroyMenu(int menu); +GLUTAPI int APIENTRY glutGetMenu(void); +GLUTAPI void APIENTRY glutSetMenu(int menu); +GLUTAPI void APIENTRY glutAddMenuEntry(const char *label, int value); +GLUTAPI void APIENTRY glutAddSubMenu(const char *label, int submenu); +GLUTAPI void APIENTRY glutChangeToMenuEntry(int item, const char *label, int value); +GLUTAPI void APIENTRY glutChangeToSubMenu(int item, const char *label, int submenu); +GLUTAPI void APIENTRY glutRemoveMenuItem(int item); +GLUTAPI void APIENTRY glutAttachMenu(int button); +GLUTAPI void APIENTRY glutDetachMenu(int button); + +/* GLUT window callback sub-API. */ +GLUTAPI void APIENTRY glutDisplayFunc(void (GLUTCALLBACK *func)(void)); +GLUTAPI void APIENTRY glutReshapeFunc(void (GLUTCALLBACK *func)(int width, int height)); +GLUTAPI void APIENTRY glutKeyboardFunc(void (GLUTCALLBACK *func)(unsigned char key, int x, int y)); +GLUTAPI void APIENTRY glutMouseFunc(void (GLUTCALLBACK *func)(int button, int state, int x, int y)); +GLUTAPI void APIENTRY glutMotionFunc(void (GLUTCALLBACK *func)(int x, int y)); +GLUTAPI void APIENTRY glutPassiveMotionFunc(void (GLUTCALLBACK *func)(int x, int y)); +GLUTAPI void APIENTRY glutEntryFunc(void (GLUTCALLBACK *func)(int state)); +GLUTAPI void APIENTRY glutVisibilityFunc(void (GLUTCALLBACK *func)(int state)); +GLUTAPI void APIENTRY glutIdleFunc(void (GLUTCALLBACK *func)(void)); +GLUTAPI void APIENTRY glutTimerFunc(unsigned int millis, void (GLUTCALLBACK *func)(int value), int value); +GLUTAPI void APIENTRY glutMenuStateFunc(void (GLUTCALLBACK *func)(int state)); +#if (GLUT_API_VERSION >= 2) +GLUTAPI void APIENTRY glutSpecialFunc(void (GLUTCALLBACK *func)(int key, int x, int y)); +GLUTAPI void APIENTRY glutSpaceballMotionFunc(void (GLUTCALLBACK *func)(int x, int y, int z)); +GLUTAPI void APIENTRY glutSpaceballRotateFunc(void (GLUTCALLBACK *func)(int x, int y, int z)); +GLUTAPI void APIENTRY glutSpaceballButtonFunc(void (GLUTCALLBACK *func)(int button, int state)); +GLUTAPI void APIENTRY glutButtonBoxFunc(void (GLUTCALLBACK *func)(int button, int state)); +GLUTAPI void APIENTRY glutDialsFunc(void (GLUTCALLBACK *func)(int dial, int value)); +GLUTAPI void APIENTRY glutTabletMotionFunc(void (GLUTCALLBACK *func)(int x, int y)); +GLUTAPI void APIENTRY glutTabletButtonFunc(void (GLUTCALLBACK *func)(int button, int state, int x, int y)); +#if (GLUT_API_VERSION >= 3) +GLUTAPI void APIENTRY glutMenuStatusFunc(void (GLUTCALLBACK *func)(int status, int x, int y)); +GLUTAPI void APIENTRY glutOverlayDisplayFunc(void (GLUTCALLBACK *func)(void)); +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9) +GLUTAPI void APIENTRY glutWindowStatusFunc(void (GLUTCALLBACK *func)(int state)); +#endif +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13) +GLUTAPI void APIENTRY glutKeyboardUpFunc(void (GLUTCALLBACK *func)(unsigned char key, int x, int y)); +GLUTAPI void APIENTRY glutSpecialUpFunc(void (GLUTCALLBACK *func)(int key, int x, int y)); +GLUTAPI void APIENTRY glutJoystickFunc(void (GLUTCALLBACK *func)(unsigned int buttonMask, int x, int y, int z), int pollInterval); +#endif +#endif +#endif + +/* GLUT color index sub-API. */ +GLUTAPI void APIENTRY glutSetColor(int, GLfloat red, GLfloat green, GLfloat blue); +GLUTAPI GLfloat APIENTRY glutGetColor(int ndx, int component); +GLUTAPI void APIENTRY glutCopyColormap(int win); + +/* GLUT state retrieval sub-API. */ +GLUTAPI int APIENTRY glutGet(GLenum type); +GLUTAPI int APIENTRY glutDeviceGet(GLenum type); +#if (GLUT_API_VERSION >= 2) +/* GLUT extension support sub-API */ +GLUTAPI int APIENTRY glutExtensionSupported(const char *name); +#endif +#if (GLUT_API_VERSION >= 3) +GLUTAPI int APIENTRY glutGetModifiers(void); +GLUTAPI int APIENTRY glutLayerGet(GLenum type); +#endif + +/* GLUT font sub-API */ +GLUTAPI void APIENTRY glutBitmapCharacter(void *font, int character); +GLUTAPI int APIENTRY glutBitmapWidth(void *font, int character); +GLUTAPI void APIENTRY glutStrokeCharacter(void *font, int character); +GLUTAPI int APIENTRY glutStrokeWidth(void *font, int character); +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9) +GLUTAPI int APIENTRY glutBitmapLength(void *font, const unsigned char *string); +GLUTAPI int APIENTRY glutStrokeLength(void *font, const unsigned char *string); +#endif + +/* GLUT pre-built models sub-API */ +GLUTAPI void APIENTRY glutWireSphere(GLdouble radius, GLint slices, GLint stacks); +GLUTAPI void APIENTRY glutSolidSphere(GLdouble radius, GLint slices, GLint stacks); +GLUTAPI void APIENTRY glutWireCone(GLdouble base, GLdouble height, GLint slices, GLint stacks); +GLUTAPI void APIENTRY glutSolidCone(GLdouble base, GLdouble height, GLint slices, GLint stacks); +GLUTAPI void APIENTRY glutWireCube(GLdouble size); +GLUTAPI void APIENTRY glutSolidCube(GLdouble size); +GLUTAPI void APIENTRY glutWireTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings); +GLUTAPI void APIENTRY glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings); +GLUTAPI void APIENTRY glutWireDodecahedron(void); +GLUTAPI void APIENTRY glutSolidDodecahedron(void); +GLUTAPI void APIENTRY glutWireTeapot(GLdouble size); +GLUTAPI void APIENTRY glutSolidTeapot(GLdouble size); +GLUTAPI void APIENTRY glutWireOctahedron(void); +GLUTAPI void APIENTRY glutSolidOctahedron(void); +GLUTAPI void APIENTRY glutWireTetrahedron(void); +GLUTAPI void APIENTRY glutSolidTetrahedron(void); +GLUTAPI void APIENTRY glutWireIcosahedron(void); +GLUTAPI void APIENTRY glutSolidIcosahedron(void); + +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9) +/* GLUT video resize sub-API. */ +GLUTAPI int APIENTRY glutVideoResizeGet(GLenum param); +GLUTAPI void APIENTRY glutSetupVideoResizing(void); +GLUTAPI void APIENTRY glutStopVideoResizing(void); +GLUTAPI void APIENTRY glutVideoResize(int x, int y, int width, int height); +GLUTAPI void APIENTRY glutVideoPan(int x, int y, int width, int height); + +/* GLUT debugging sub-API. */ +GLUTAPI void APIENTRY glutReportErrors(void); +#endif + +#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13) +/* GLUT device control sub-API. */ +/* glutSetKeyRepeat modes. */ +#define GLUT_KEY_REPEAT_OFF 0 +#define GLUT_KEY_REPEAT_ON 1 +#define GLUT_KEY_REPEAT_DEFAULT 2 + +/* Joystick button masks. */ +#define GLUT_JOYSTICK_BUTTON_A 1 +#define GLUT_JOYSTICK_BUTTON_B 2 +#define GLUT_JOYSTICK_BUTTON_C 4 +#define GLUT_JOYSTICK_BUTTON_D 8 + +GLUTAPI void APIENTRY glutIgnoreKeyRepeat(int ignore); +GLUTAPI void APIENTRY glutSetKeyRepeat(int repeatMode); +GLUTAPI void APIENTRY glutForceJoystickFunc(void); + +/* GLUT game mode sub-API. */ +/* glutGameModeGet. */ +#define GLUT_GAME_MODE_ACTIVE ((GLenum) 0) +#define GLUT_GAME_MODE_POSSIBLE ((GLenum) 1) +#define GLUT_GAME_MODE_WIDTH ((GLenum) 2) +#define GLUT_GAME_MODE_HEIGHT ((GLenum) 3) +#define GLUT_GAME_MODE_PIXEL_DEPTH ((GLenum) 4) +#define GLUT_GAME_MODE_REFRESH_RATE ((GLenum) 5) +#define GLUT_GAME_MODE_DISPLAY_CHANGED ((GLenum) 6) + +GLUTAPI void APIENTRY glutGameModeString(const char *string); +GLUTAPI int APIENTRY glutEnterGameMode(void); +GLUTAPI void APIENTRY glutLeaveGameMode(void); +GLUTAPI int APIENTRY glutGameModeGet(GLenum mode); +#endif + +#ifdef __cplusplus +} + +#endif + +#ifdef GLUT_APIENTRY_DEFINED +# undef GLUT_APIENTRY_DEFINED +# undef APIENTRY +#endif + +#ifdef GLUT_WINGDIAPI_DEFINED +# undef GLUT_WINGDIAPI_DEFINED +# undef WINGDIAPI +#endif + +#ifdef GLUT_DEFINED___CDECL +# undef GLUT_DEFINED___CDECL +# undef __cdecl +#endif + +#ifdef GLUT_DEFINED__CRTIMP +# undef GLUT_DEFINED__CRTIMP +# undef _CRTIMP +#endif + +#endif /* __glut_h__ */ diff --git a/COM380/Project5/include/vld/vld.h b/COM380/Project5/include/vld/vld.h new file mode 100644 index 0000000..29d1216 --- /dev/null +++ b/COM380/Project5/include/vld/vld.h @@ -0,0 +1,307 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Visual Leak Detector - Import Library Header +// Copyright (c) 2005-2012 VLD Team +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +// See COPYING.txt for the full terms of the GNU Lesser General Public License. +// +//////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include "vld_def.h" + +#if defined _DEBUG || defined VLD_FORCE_ENABLE + +#include + +#pragma comment(lib, "vld.lib") + +// Force a symbolic reference to the global VisualLeakDetector class object from +// the DLL. This ensures that the DLL is loaded and linked with the program, +// even if no code otherwise imports any of the DLL's exports. +#pragma comment(linker, "/include:__imp_?g_vld@@3VVisualLeakDetector@@A") + +//////////////////////////////////////////////////////////////////////////////// +// +// Visual Leak Detector APIs +// + +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + +// VLDDisable - Disables Visual Leak Detector's memory leak detection at +// runtime. If memory leak detection is already disabled, then calling this +// function has no effect. +// +// Note: In multithreaded programs, this function operates on a per-thread +// basis. In other words, if you call this function from one thread, then +// memory leak detection is only disabled for that thread. If memory leak +// detection is enabled for other threads, then it will remain enabled for +// those other threads. It was designed to work this way to insulate you, +// the programmer, from having to ensure thread synchronization when calling +// VLDEnable() and VLDDisable(). Without this, calling these two functions +// unsynchronized could result in unpredictable and unintended behavior. +// But this also means that if you want to disable memory leak detection +// process-wide, then you need to call this function from every thread in +// the process. +// +// Return Value: +// +// None. +// +__declspec(dllimport) void VLDDisable (); + +// VLDEnable - Enables Visual Leak Detector's memory leak detection at runtime. +// If memory leak detection is already enabled, which it is by default, then +// calling this function has no effect. +// +// Note: In multithreaded programs, this function operates on a per-thread +// basis. In other words, if you call this function from one thread, then +// memory leak detection is only enabled for that thread. If memory leak +// detection is disabled for other threads, then it will remain disabled for +// those other threads. It was designed to work this way to insulate you, +// the programmer, from having to ensure thread synchronization when calling +// VLDEnable() and VLDDisable(). Without this, calling these two functions +// unsynchronized could result in unpredictable and unintended behavior. +// But this also means that if you want to enable memory leak detection +// process-wide, then you need to call this function from every thread in +// the process. +// +// Return Value: +// +// None. +// +__declspec(dllimport) void VLDEnable (); + +// VLDRestore - Restore Visual Leak Detector's previous state. +// +// Return Value: +// +// None. +// +__declspec(dllimport) void VLDRestore (); + +// VLDGlobalDisable - Disables Visual Leak Detector's memory leak detection at +// runtime in all threads. If memory leak detection is already disabled, +// then calling this function has no effect. +// +// Return Value: +// +// None. +// +__declspec(dllimport) void VLDGlobalDisable (); + +// VLDGlobalEnable - Enables Visual Leak Detector's memory leak detection +// at runtime in all threads. If memory leak detection is already enabled, +// which it is by default, then calling this function has no effect. +// +// Return Value: +// +// None. +// +__declspec(dllimport) void VLDGlobalEnable (); + +// VLDReportLeaks - Report leaks up to the execution point. +// +// Return Value: +// +// None. +// +__declspec(dllimport) UINT VLDReportLeaks (); + +// VLDGetLeaksCount - Return memory leaks count to the execution point. +// +// Return Value: +// +// None. +// +__declspec(dllimport) UINT VLDGetLeaksCount (); + +// VLDMarkAllLeaksAsReported - Mark all leaks as reported. +// +// Return Value: +// +// None. +// +__declspec(dllimport) void VLDMarkAllLeaksAsReported (); + + +// VLDRefreshModules - Look for recently loaded DLLs and patch them if necessary. +// +// Return Value: +// +// None. +// +__declspec(dllimport) void VLDRefreshModules(); + + +// VLDEnableModule - Enable Memory leak checking on the specified module. +// +// module: module handle. +// +// Return Value: +// +// None. +// + +__declspec(dllimport) void VLDEnableModule(HMODULE module); + + +// VLDDisableModule - Disable Memory leak checking on the specified module. +// +// module: module handle. +// +// Return Value: +// +// None. +// +__declspec(dllimport) void VLDDisableModule(HMODULE module); + +// VLDGetOptions - Return all current options. +// +// Return Value: +// +// Mask of current options. +// +__declspec(dllimport) UINT VLDGetOptions(); + +// VLDGetReportFilename - Return current report filename. +// +// filename: current report filename (max characters - MAX_PATH). +// +// Return Value: +// +// None. +// +__declspec(dllimport) void VLDGetReportFilename(WCHAR *filename); + +// VLDSetOptions - Update the report options via function call rather than INI file. +// +// option_mask: Only the following flags are checked +// VLD_OPT_AGGREGATE_DUPLICATES +// VLD_OPT_MODULE_LIST_INCLUDE +// VLD_OPT_SAFE_STACK_WALK +// VLD_OPT_SLOW_DEBUGGER_DUMP +// VLD_OPT_TRACE_INTERNAL_FRAMES +// VLD_OPT_START_DISABLED +// VLD_OPT_SKIP_HEAPFREE_LEAKS +// VLD_OPT_VALIDATE_HEAPFREE +// +// maxDataDump: maximum number of user-data bytes to dump for each leaked block. +// +// maxTraceFrames: maximum number of frames per stack trace for each leaked block. +// +// Return Value: +// +// None. +// +__declspec(dllimport) void VLDSetOptions(UINT option_mask, SIZE_T maxDataDump, UINT maxTraceFrames); + +// VLDSetModulesList - Set list of modules included/excluded in leak detection +// depending on parameter "includeModules". +// +// modules: list of modules to be forcefully included/excluded in leak detection. +// +// includeModules: include or exclude that modules. +// +// Return Value: +// +// None. +// +__declspec(dllimport) void VLDSetModulesList(CONST WCHAR *modules, BOOL includeModules); + +// VLDGetModulesList - Return current list of included/excluded modules +// depending on flag VLD_OPT_TRACE_INTERNAL_FRAMES. +// +// modules: destination string for list of included/excluded modules (maximum length 512 characters). +// +// size: maximum string size. +// +// Return Value: +// +// BOOL: TRUE if include modules, otherwise FALSE. +// +__declspec(dllimport) BOOL VLDGetModulesList(WCHAR *modules, UINT size); + +// VLDSetReportOptions - Update the report options via function call rather than INI file. +// +// Only the following flags are checked +// VLD_OPT_REPORT_TO_DEBUGGER +// VLD_OPT_REPORT_TO_FILE +// VLD_OPT_REPORT_TO_STDOUT +// VLD_OPT_UNICODE_REPORT +// +// filename is optional and can be NULL. +// +// Return Value: +// +// None. +// +__declspec(dllimport) void VLDSetReportOptions(UINT option_mask, CONST WCHAR *filename); + +// VLDSetReportHook - Installs or uninstalls a client-defined reporting function by hooking it +// into the C run-time debug reporting process (debug version only). +// +// mode: The action to take: VLD_RPTHOOK_INSTALL or VLD_RPTHOOK_REMOVE. +// +// pfnNewHook: Report hook to install or remove. +// +// Return Value: +// +// int: 0 if success. +// +__declspec(dllimport) int VLDSetReportHook(int mode, VLD_REPORT_HOOK pfnNewHook); + +// VLDResolveCallstacks - Performs symbol resolution for all saved extent CallStack's that have +// been tracked by Visual Leak Detector. This function is necessary for applications that +// dynamically load and unload modules, and through which memory leaks might be included. +// If this is NOT called, stack traces may have stack frames with no symbol information. This +// happens because the symbol API's cannot look up symbols for a binary / module that has been unloaded +// from the process. +// +// Return Value: +// +// None. +// +__declspec(dllexport) void VLDResolveCallstacks(); + +#ifdef __cplusplus +} +#endif // __cplusplus + +#else // !_DEBUG + +#define VLDEnable() +#define VLDDisable() +#define VLDRestore() +#define VLDReportLeaks() 0 +#define VLDGetLeaksCount() 0 +#define VLDMarkAllLeaksAsReported() +#define VLDRefreshModules() +#define VLDEnableModule(a) +#define VLDDisableModule(b) +#define VLDGetOptions() 0 +#define VLDGetReportFilename(a) +#define VLDSetOptions(a, b, c) +#define VLDSetReportHook(a, b) +#define VLDSetModulesList(a) +#define VLDGetModulesList(a, b) FALSE +#define VLDSetReportOptions(a, b) + +#endif // _DEBUG diff --git a/COM380/Project5/include/vld/vld_def.h b/COM380/Project5/include/vld/vld_def.h new file mode 100644 index 0000000..252835d --- /dev/null +++ b/COM380/Project5/include/vld/vld_def.h @@ -0,0 +1,45 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Visual Leak Detector - Import Library Header +// Copyright (c) 2005-2012 VLD Team +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +// See COPYING.txt for the full terms of the GNU Lesser General Public License. +// +//////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#define VLD_OPT_AGGREGATE_DUPLICATES 0x0001 // If set, aggregate duplicate leaks in the leak report. +#define VLD_OPT_MODULE_LIST_INCLUDE 0x0002 // If set, modules in the module list are included, all others are excluded. +#define VLD_OPT_REPORT_TO_DEBUGGER 0x0004 // If set, the memory leak report is sent to the debugger. +#define VLD_OPT_REPORT_TO_FILE 0x0008 // If set, the memory leak report is sent to a file. +#define VLD_OPT_SAFE_STACK_WALK 0x0010 // If set, the stack is walked using the "safe" method (StackWalk64). +#define VLD_OPT_SELF_TEST 0x0020 // If set, perform a self-test to verify memory leak self-checking. +#define VLD_OPT_SLOW_DEBUGGER_DUMP 0x0040 // If set, inserts a slight delay between sending output to the debugger. +#define VLD_OPT_START_DISABLED 0x0080 // If set, memory leak detection will initially disabled. +#define VLD_OPT_TRACE_INTERNAL_FRAMES 0x0100 // If set, include useless frames (e.g. internal to VLD) in call stacks. +#define VLD_OPT_UNICODE_REPORT 0x0200 // If set, the leak report will be encoded UTF-16 instead of ASCII. +#define VLD_OPT_VLDOFF 0x0400 // If set, VLD will be completely deactivated. It will not attach to any modules. +#define VLD_OPT_REPORT_TO_STDOUT 0x0800 // If set, the memory leak report is sent to stdout. +#define VLD_OPT_SKIP_HEAPFREE_LEAKS 0x1000 // If set, VLD skip HeapFree memory leaks. +#define VLD_OPT_VALIDATE_HEAPFREE 0x2000 // If set, VLD verifies and reports heap consistency for HeapFree calls. +#define VLD_OPT_RELEASE_CRT_RUNTIME 0x4000 // If set, VLD treat CRT runtime as release version (use only with define VLD_FORCE_ENABLE). + +#define VLD_RPTHOOK_INSTALL 0 +#define VLD_RPTHOOK_REMOVE 1 + +typedef int (__cdecl * VLD_REPORT_HOOK)(int reportType, wchar_t *message, int *returnValue);
{;V5oMvApqDsst=%3&J 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 KMNUMnLSTaDnLHW* literal 0 HcmV?d00001 diff --git a/COM380/Project5/GameData/btn_bet_disabled.png b/COM380/Project5/GameData/btn_bet_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..8b8e2792e56e1d8218d797410a932dc922aff07c GIT binary patch literal 3776 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 LNkvXXu0mjfJ)M)N literal 0 HcmV?d00001 diff --git a/COM380/Project5/GameData/btn_lines_default.png b/COM380/Project5/GameData/btn_lines_default.png new file mode 100644 index 0000000000000000000000000000000000000000..7d99f95b2f9278a913fc14bf3c667951f8346c6e GIT binary patch literal 4531 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 literal 0 HcmV?d00001 diff --git a/COM380/Project5/GameData/font_main_00000.png b/COM380/Project5/GameData/font_main_00000.png new file mode 100644 index 0000000000000000000000000000000000000000..0cc6bfb32ca57e13482eaae0d7aba6f90583c265 GIT binary patch literal 821 zcmV-51Iqk~P)(_`fdByeS^xlqOaK6M{Qv;*%m4s76aWAf@7|hK zKL7v%yGcYrRCwCVm0w8HQ545N`=d^`)XfatSXpYA+8+~&$bn!H859$$mlSFQK`0T` zW0^03FBQ_85V(TS{!mW^1z}TC@=v5#=^QjjQZk!Eoj7hUyT5+F&CI}u4jef5{Q2H< z&%Nhdoe+YxBt2_Px)p5u0T)mXSXKHrz)PSDU^OQ!2A%=pFZ>)R7DAxr_zX*dLBNo2 zGf;on&Q^OGmK1~H&>xuP;oC`k{s=%6*d>G*TJFdSSW`_drz`EGsesfp7m0HB^;fPw zo=5;y1NH!Wnrd=6f5^G23%K(lC_#Nf2$veL0l4ihv(S33SQ9iH4AUQ&1z`8)b(AsHbDofHenRI{pDaAJ6dW_rRY^0?a z@VKl1nSe_H+`ds;o6!7{6h~C*kvJOwnPyoztZUMG&McD@xBM$$4nTUUQKJlgUy$Os z9vF{P0${hLNO7Ai7f=nbGf!Kd@o)1|^c#UbfS%Ei#%agzn$`i1SkVhTE-QK2shX~N zG7tus5kmCo0YBjL`6CPm!-`{edNS?x1#(#hl)K9;Tt2!^;{%MW5>9xT`%B~HuZe^9J_IMNAEPz zrA3_UO`6Q+B2hX&&T!@47*7Yo0HZ*)5Msp)YJn;BboRKc!d+%rZely)C-$Ex7q|ty ziv#%)`yOhg<7xrbWC9M#o{y)5Kjpvwmwyca|F112`ZTf^00000NkvXXu0mjf^uc8L literal 0 HcmV?d00001 diff --git a/COM380/Project5/GameData/font_main_00001.png b/COM380/Project5/GameData/font_main_00001.png new file mode 100644 index 0000000000000000000000000000000000000000..2dc47469519ef4dd23b3c62d5e0b017e33c0da26 GIT binary patch literal 424 zcmV;Z0ayNsP)(_`fdByeS^xlqOaK6M{Qv;*%m4s76aWAf@7|hK zKL7v$E=fc|RCwC7ls!uWK@f(YO->Rug}Fc=g-A>nLO?7OOhE7#7%c)~B?$ftNuia$ z!oo6OWhq|Tpx{R#1i{8ai69~fk=MdIy$gxw1soWd*?riZoqczWB>rkKBA7L7!WdHo zDsI}6bc3XT153a$&;#Up4=DPfO~CO1YSeOS)N)?FZMj<>0d;^%A;J1$mbHZ}6Nxy7 zXAfRwwq=a5fqKD?v%isNrDXrwjXXekW_%!cdH?E#?URif`?7SbI1(?nx1F)SM`wmAgBi#C4h=%wrkR0@+oIcP2N|G@D_7y~eKL-GVdU|C# S6>OXU0000(_`fdByeS^xlqOaK6M{Qv;*%m4s76aWAf@7|hK zKL7v%jY&j7RCwCVm0d`aQ5eU6bAnF9+)P1XV$P4!3St)q+eGNgM2pC}5$i%I2t+B& zh(5fEs2eHhCPK&}=tF`a3h~A{$UxA@K+_snEnK;h;hZ^67oKx?w_FBw(E~4>_vJai z^L+fz^O}SZ{H>+%56qP0y9@9DPQVI;fDyn8_>7LLW#W>K;x~_1`e}$M0WbvMcBIj` zJ&&@23^LQqgrhMgKP~X^#VkY9QRVLjd`5@{bT`>)uFg-IfA3&`_PaA0B!uv(!gl@% z0HC=#pYA5RdcCZ=;{qBSHZupS^0f2t)OYq@86)TTOHSW;i$55N137GF0Jq6xvZVlr z09yAJkdbEAfV!&_I{#bV5I3HGh>NJEGD|I;DY8I#Hf3vvOMQN|Yy&I`l+03PL7ifQtYJwq?d`oD2WZOVyocz@CHy+`vwt3t;eE1(o&{P;h>UjUA%^ z?}ZS>sd7Ut;E)O}mV)X88UXIMmS_OL&4G_<=}jhk7w{NZ@35KaIZ+-57mn^4s}`2j&J*C31nI&)02-fm zlv7o*E~%*e!3bmiFusXzN_@M85dA8hcL1M5ON`Hi*^p<^1vOexu7#pp3-gg>nGsH) zUqw1O-nVyU3QDD?byKhNu7l002ovPDHLk FV1l4+P9XpQ literal 0 HcmV?d00001 diff --git a/COM380/Project5/GameData/font_main_00003.png b/COM380/Project5/GameData/font_main_00003.png new file mode 100644 index 0000000000000000000000000000000000000000..10efad3016af8b46223c701f5463e210482a1d5e GIT binary patch literal 691 zcmV;k0!;mhP)(_`fdByeS^xlqOaK6M{Qv;*%m4s76aWAf@7|hK zKL7v%IY~r8RCwCN)Lm%JaTo{i&+OQ6j@gzYn@sC0iX|*jc1RRO*^rdz7e)?m9#>+3Ybqqo)u17NY zHq@QF^IFO1Z>a|_Qc9x{``1)w!IvKPIe4ZU(%2K;!gSon4}{O}n`U0kIMCVq$%e!2 zI{MPE8BJjwv|}c=<0NcNmSw?k==Addd@=y%3aK40u`y9zXy2+S*^8#D-Ok=k!7Xh1 zl@cq^2nW_yiI)_CM_s94W$^5GQchz0-sN$t=f<G`bjYOgJe;-bZcN~0rj0iiY%!u&)eiR^nXr8AV#F5r6$FB9mQyk4*V@u!( zTNYQUnK(KN>>2p1xveKqVj8pXFt@>^zi_3SsQsNM!ph7%>O#3^8O}|4P4&Oq`mhUp Z9RMTlxOn5u>OcSh002ovPDHLkV1oXrMSlPQ literal 0 HcmV?d00001 diff --git a/COM380/Project5/GameData/font_main_00004.png b/COM380/Project5/GameData/font_main_00004.png new file mode 100644 index 0000000000000000000000000000000000000000..c3c5361e3be16653979698b8007e92a4ae4b6ce6 GIT binary patch literal 597 zcmV-b0;>IqP)(_`fdByeS^xlqOaK6M{Qv;*%m4s76aWAf@7|hK zKL7v$+et)0RCwCNl}$?L7{)4 z8$lF*fVc~E*F~4z6$&ksCKS5RF4}Y<#zM1kV?>P@#c;dG++i|~I>Ci63>?nozUS+` zXBvbM+yy@Fh=yCv2LS`v0y03k9`Zpz*uEWLr5=I|AU0lhiY24XPUMMX3J|)ch=X)O z9HbNC+j3kIeD>1B*8q#pB9>$S=t7!%w-LmFX-)Mr)~j01&5s3pX*UwQ0azFg6IA>F zeED4@n?DE00`G1jcwml=7f&C%Mc2(fWMne~F12?p8Eu4Gnrfo!nnI|hkqa4v6yZdL--10e_H|G-FiQ}_N zX&we_qniMjO;!nh>>d$|1c^n007O*9BKY;MWMvSrHP62`(_xJ+8Ev&n@$#H?fXV(x zo*v29+;L3?8Ze-13a8}?xk8EUzb9AH9q(&rq`Ruje6b>rivb`He9Gp}$Ia2WqUXs& zSHJARb5mJ{P49AkqrgaiS2LIzFp+f%Y4w`mqt|HQyVu3C0tij@3&)0(_`fdByeS^xlqOaK6M{Qv;*%m4s76aWAf@7|hK zKL7v%7D+@wRCwCNlut-hQ5431GjH&TNRv;r9B5&0O2`2N!7-e1BUFo8RMIAD)1nBX zAaK#948gW7`$wCCC@2P87_{?kw4y1hg=q>>M8k|34^2f*i{8E58Am6XMF%dNd%5Sk z=bm%EFC-#VV_~Yakm2_L=`weA2TR!)FbH5~KMKee)-?qX0bJlv%C+h5ZeI6%%(2-S ztnqnQEusMAZ+Gd-0}nrQ ze{6mutfRn)i0C%{1Xx^NtCWPNf=lP%4ZzHgrOg5_1;raFH%RjUzLCL+?q<%W8*m*9 zAO+k4#({(h5HT|7pZvB+G9CpW8INjzd}@KaFTe8qt=|P?f&IXTe;(yzJj%WE`?ztu z1;7HH0kviqdd$`Uq+FYW9S$cC?4W5|O}Xw|7m>kIF5C?MtIc&R9$aXneOEmIALo2E zjh=|4!v+_;AlL)W0PVoz>B1VB*EtQSfYd{wfD2P8*Z$kD>E(4ba2<<@;ZD78JU2l= zrcl`ALS~?YCl}*fIownPFnp?2`?+5$%AGOWsI4#I(3fzydaSi+0!LJkh!km}sf(RJ qgK_>Pc;G4Uy9nUF%X-xSe+B?Oy|zIrDajxJ0000(_`fdByeS^xlqOaK6M{Qv;*%m4s76aWAf@7|hK zKL7v%c}YY;RCwCNlv_v?Q5eU6I=bs+y^XE3h@q{bZAMVABY#bZ|Gv_PZ=Ad57oR?>EW`n?fxPbKd^YB$01%3(c)Q2B&=U~;4}hI! zf*Ac-2jm^CNHf3y4L9D=`7#Lb1?ZoDx;cb8fXbqDW8>DNPXY|E0;mPrbO8(JhoAtd z6PHR!u>VR-)%jP{Zpxq}CkcRHMCEGlr1?fgz+@Cq3Ouhac5toU13+MA7650mZ9$ID zb&d*6x`2JrdYK|SVhtx}vJGdljZj2oa3W|B0yOSggZG+R#(u;uI! z1D&zCMj4n})|_ z=lBj6RU4cD_yb|;Z;k=H2U;bymvP4Id=Z`)xn?Dfd;Kd;kUK`LT+Ibi#P{LZ_ zm4{O}Y(Ge}OJt(_`fdByeS^xlqOaK6M{Qv;*%m4s76aWAf@7|hK zKL7v$v`IukRCwCNmA^{@VHn3hrbK~hT^KY7nJrmM89AiUP|)ho6w*-tL0e1o2Lz1` zH8eFeI0X$2MZYLAA<2jcqk7vMNt&~B6a*x zEb2J~i~^yeZ+k#a)nn?JDbh6=0+bq`J)jrBCcG|9y6N{cX{cwZH%(96$$9tk7ty#3 z5Cm3%fK5?fv*VE7WZP01yD?i^|vucmUk34Vv+L z?wiG}G{B1<0ANAq{1otqx|<8txG$mqXx527!0(l;bhsJ|h&Qh#^vwW90j5UUN-o!S zo~j0z02uH(w2RyH2RE5-(bh>b03Q(aN>&10&ca|^z6f={(li><-%UOXb)ynM8GT*% z9hdh2d(~_l>o}<>$=aBfn-Gg=sH{0eZPqWC|=2`Oov*OaGzbj wg(B6A`}!~ID^knOkbp73U)5Ir_y5Ar0JC48eMR_qtN;K207*qoM6N<$f)NGmMF0Q* literal 0 HcmV?d00001 diff --git a/COM380/Project5/GameData/font_main_00008.png b/COM380/Project5/GameData/font_main_00008.png new file mode 100644 index 0000000000000000000000000000000000000000..fc85f2cf773050f28f5c72186a3e152a3d0e1245 GIT binary patch literal 802 zcmV+-1Ks?IP)(_`fdByeS^xlqOaK6M{Qv;*%m4s76aWAf@7|hK zKL7v%s7XXYRCwCVm0w7cQ5eR5+b6B9(VxLAjfFZPnih$nK@N-pLkd$8x{0Av$M{v>a&0*jn&$y68J!+nRP!7ach8z2AG@ z=X~#Zp7VSLAq0OrjQoRPNbznz;06k{_%+}K9%^wR5CG-@k~_)Q7KtpGILoSi z+97giXS%*15>vVKc$&%2QF7Lssn}sB&tXm2p!?;VeDtQJ+A%N}rL8xlMPb@{Lku*# z$a7fr)~1yYN~>pDrW%D1-;BU>V5ny}%xEwS zK$hK1`|)g@jh5;hz0I@T0m;lQsU6AAX`sbvQ@GveBFp}h-qB!~>~u30lR_k>Qr9si z85shKrP$&X+XWm>29o1SUyxItSqV@De3T%@II&d&94Srz4FI6FG?U5#D?kz8Np%6w z14_Kurb1CFF1+E!z$^e3lfvcN&GA5W@gNz%0jEu&wlq@*C~SU<&mW_qGnfE$V(&&- zTOAML1~^z`)5YX{|3&7X05o(434Q$zKymIGnJZb=PuyG9;F)hm|ulMGiy?AtO)>-n94cNlnn1AJ6nRE z)RjBfw&_<3k(kPh@kN?Cb+z^Z`%*cZOY;@+hj|~+DO$?tYk=#(WL)8bR$P<3SO|gP gzxieS6ObPR0B@fXIcFAE(_`fdByeS^xlqOaK6M{Qv;*%m4s76aWAf@7|hK zKL7v%cu7P-RCwCNm0w6xaTLct?yA#mxVD&-vIo19Vn!gBv|yKrpeG~5m;O8m{s{`~ zp@*IZzE#jmMGqM*Ujji9&3Y*4$pyK>43wxGtmr}5(y5KjEywMl`}?`Z9F-3pxNv^I zbI$ji-|u{X=T;bo!A``&4y9t7{SH6}G;^H1b^8eKLJYR?q=F0SKs8 zdX6{X+fxfbDw}6~CQc}v6uzf`r-cAA_+eiYrw@BdmiPEgf}RI4fN#JdU`YXLfJtC? zaq#CvhSl^YyX;i}9B8zY-^}qUnzjKRVA29y0GfMsmkds4^IUzjh!&hj3(nJb?>*^k z9)SK6jRId6ZPWp}j?~M{mxn)!^DY9j6LTqI@eBZ-x@tOG9RN*$W)ZF0S6?g3o|sDk z%mN<(O?4~OJF8^^x1&m`l_nCNx?c`nU*rfCZCTHvl~pPBs-*(S2;M)Stgw7V22>b6x_v0Y7jOcnxstyjPw*v7QtBh?N2m zvH|n}ZJn(Sy4tr0c5~{BP{ZO`mjW0B&ZusM>*sv3g^}o5Av-UYn@Bpq@TL8dJc;!j z1EHv}-v!d;hRPsdsBXoW4*HF+cQm83)gf+vfVEdbSIS9NkgP#G7 k|2lZpvQzoL{}+A^01W-un4=zx>i_@%07*qoM6N<$f;jL(UjP6A literal 0 HcmV?d00001 diff --git a/COM380/Project5/GameData/font_main_00010.png b/COM380/Project5/GameData/font_main_00010.png new file mode 100644 index 0000000000000000000000000000000000000000..b18966b7c180f531301bb5d2a985f848aa85ff53 GIT binary patch literal 265 zcmeAS@N?(olHy`uVBq!ia0vp^>_9BV!3HF&rQD_gDb50q$YKTtZeb8+WSBKa0w}1E z>=ES4z)+>iz|hdh!0UeCIh(?4A%v`_Gi zx~zfhmdTGTj`NxQ=92My&f={RSK-z&Wm|=pbW+cz_j{hzG927uwE4u(DL|JoFnGH9 KxvX&HoPQGpc+KV0(5zFoIdw^O!R4k%oC%Mh6%I%+F+- z^KOwef3mZ$F-Dq$(dw+y%_+`HCoBv-Ka-`AcMZd|+sw;9e@#6nw1M5^b@*0^YiE8~ zoNVVlQ7qegYw7U`%%0y(7qdT3I%7S-!R`Wc&E?50U%x)S!^UvTJciNOWPd-(_`fdByeS^xlqOaK6M{Qv;*%m4s76aWAf@7|hK zKL7v#%t=H+RCwC#(=kdzQ4odU@0we@M<8fGP_TC9<^1Zwpp3V$pV5PjZslNi_19d3GJbDM zM#0hL&FBLhJx@J8O@HEt5i!yHoEwF9XBJGYkw?A`A?o@9)hDwFjy_7;z4P5W@7tl?f1Ar^ z|FC56PH0r|43cGA(BEO}pf&xwP?w75q^v9MN345Gtx8?@tm~e)|Sn48oN@Nm=xBTxdRnw=6?&t;ucLK6V?HF(be literal 0 HcmV?d00001 diff --git a/COM380/Project5/GameData/line45.png b/COM380/Project5/GameData/line45.png new file mode 100644 index 0000000000000000000000000000000000000000..79b4479119fdc47e8c3cb821806f6efa489b0b53 GIT binary patch literal 16051 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 literal 0 HcmV?d00001 diff --git a/COM380/Project5/GameData/reel.wav b/COM380/Project5/GameData/reel.wav new file mode 100644 index 0000000000000000000000000000000000000000..3589bb421dac8c74ce81fb6e2dfe7bc2e8ff82d0 GIT binary patch literal 12322 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 M5`lJvo=xQc1APwu?f?J) literal 0 HcmV?d00001 diff --git a/COM380/Project5/GameData/reels.wav b/COM380/Project5/GameData/reels.wav new file mode 100644 index 0000000000000000000000000000000000000000..26dce8d8efbcdd159f6ade5007dc6f6ff7dba084 GIT binary patch literal 278034 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

?9| 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/OOU9KK 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

S0yR;o&x0yF*L_TjMd^R+mV| z*jmuCk~&YRjiKcm-uqyOT9(L`An3+S=82ndtcl`2tyWABI^!2(4O-WfRZdx!2xC|#3HfA7o#!i$9Y>p4kGUI@nAPW+ zDZhKJfwD2haDrpoWEHepnlLhWz9Ez?+Flo3c%*7UW-?&a;I!=TN^YhlGb{$fFtXg_ z8cpnIMZ)s*=@DDoUFP!%lj(viuh>28kt8ME?U4PW118gJ(q*|4SD|Xfq;Xxc)*{;$ z-mq#21FWoh=^TKceM(TwRefin=C>4Zd%vDg#2%ZW~5heU@oW7KuXH8;PU(iqZQH`vT9XNZ9ePfT#Lpy!x97@X+tX;4SS5o z1KMq$e!oo=`3N+Y+G$#)OGUTV`8$MhlRB~CXeO-0;F|Tul#P>Bql=bqPY}&|DDFJ0 z(;YSXkX7yUF7UW@?G(-&#N4K#-#)t}bm@6`(rW<83V?)286#wb@5le~3CQg<=lj8j z8^x@|E$?i3-vd6@;`3&)acSmm+Of*_km7dg;S$ePBSLqSE4g0Ct+S6rHWrHkk~TsP zk#YygGo*Y3qWhhx$M=GdI-}i5@HTLYHC02kTA=kDt(R2g3{}rDI>p+m5w%w6#+9kA zU6`3tl@kVOg|!MHT{p#;n!0Q{KWO?rN4@f_CNB)N)&#Xh3PqwE+Lg)>gq9$%cs_WZ zM9Ll)mx|dkzjc)|F~%ro@uxkygAO~pyL|rj36+L}gFSAhQ-1r|8S_O+S(aGiH#Z2k zV|LPI+EUS>p=j=1Zx36=8){^~$ zEmWd8y}aV;e1SHz<~`dxd}?FhxVwvo;nm3*+O{#2cdS?2?JnKEqI=KMJA|<3th%I( znO&uBA6retHcU4n5u(r_-1U%K%Rw|^p$aa{Z2|W7n+b6#=nF&ag)EAWqkS~TBear% z)hIj~wE|@+kZpknsZ)$c@D$IeyQe+BI@GEhNhViPnog_D)jV^Zq%Fb6KYm6h zih1$n8Tn#^Yb~JG1@q*Z!T5;0oHJd#rM5Yv@t9>^aWk*@^z$1g%NZc3Y=^DgBeLw8 zs<2p5xx!k&eX)fn3fjQ^d%L_zQwk%POw*<*bbBH!@aX-ZT^rjOPo%D~RvKJ9j& zFlzJWx`Mb6^b7oKch%P zYFjqIL#z#T5K+^_5~2 z(eFJ*=_`s7e)NNFS}l*V(4@*@B`ouLZHIe(dBe`APrDVcSWKAQT#;o7!$F_@ogId~ zE~C+qG)uX zq*IMXu!CS~VAK~>_*^e4rqe0Y>C73u2v@{(hx>$~*JN5~r0;a1B)q`4)7t8f= zw?c3<1iYHs2to~=z_mtv*#|p7%OyM8W45+iSQNkc)d|Z)(c9_}wYzAq=KiDm1g#LI z6h;&nYp4_~^jZ~5FBCj@?=i|ky2#dhg|KkE7jrYMxSC|tOZy$*u>#QJ-2wekk6v#? zf3Qti!{t>1z<22q;8CrL9bf+*+{$N*&^V1UNb@k4?@BTR&{ z#fD(&_JH43Zc7JVSkde6D}_< zsH>7eug~tzF2~1@=yvwBl>2FbJj{vqnNxx)SadL9zbQ-|T z%@xa~qiq)Dty%wF=7onJ^pL(ltE!XQ;>c; zrrYreBa82uhMwvI2IHvhGGt8M0E~zr2oM6at?{HsyA=}#5f+KDG*j8tIwc!$VeYJ3 zclE6sAf);DcG|J|`W*lwJiHYE@nWPO<9q)R0CFoj|E^eNQxoEh3^u_B|3UC!Hv$Hw zY(fMv2+!#{IIOY>KSD@!>G(@7If9nO)8A3oF}+;U_|0vnY5}LC@>mT zRVbrCYT}M&cVA~DF-?I$1wwTNo z7K*YU9752B={Gr8C#2r#3#!QQ;`IVw3f_PE5fYD3d5opc`6h-3WWA}WvUIA703POT4Jf zV%Y&5(;Gwxvjn4vJ!l7DOF=$^dI`SP91J2vsSp*YOp~alC1!q8i8W^-4lM=^vEWaW~mA5rB6E$y>RYkZ(jfWkC3 z;exIJPl`tG0!nMx_Nk&iufFjRWp-y=yT3Q&r@#9H!bq@pe8lMB9@F!41mL$1=tTn- zmlLw;EdsSt$?|GCWw@g`yf4|?yH5~!oL*<_4n6jc0s}vE#gZJ*SH$LL!r%QhE z@6Y+ozx|x+mvcUO_J@4&#Tn0k@eAI(y5!-#4=83O*ZIO7gG%uH)3QaX=JcAInL_vyVH&*!DMfzmvWjGhCnOyip@har z=m>?C5c&dL))cGrFofRWed_sQUCjL#|JgSF@RCPA4%m6p;{JPmLNDiF?>_(2zx*wy zSBs{bZ<_1L-r6g2OQ&90E3WJ{?+CI*jZrJNuF^S1Y0FpNobmEx%A3<0e)VO}{{0^9 zC}#O)O1&^Fu4*11jW{~$GMP;{JD(B7E%1g+XElS~faT3Kz5?Giy5o9DKiFoeGK5r( zi;FY@-%1f@Ch$ZFV`Ep6t|YaQbJ1#j4DWzDfx2FcE8V{)1}Hw_O=h1P8NLi^>g%O zLX}qt->2J(L04R!z9y?(et@xXeU-Ac{fw=h59xI8Qzt^EI^%+)_Kh!zp-?e4I%-DPJS(`qS#z_~IBA<%Vz$~C_5=yzi#lQ}}bI22Tk{`PDt z*xB~D|M-Z!D$zpn=;;r5dv%Er1>Ihoteo)mm)FiEu_ZAgV4gW`Q*SgRZpHXf%)#M3 zMq4f7jz>H2sFoGAa2YX0IYW9ry&U1)(qTq~K_Ok3pwHC?T0m2!v%h zpOGgC3<<+F=V#Z<7faG*&N4|!mjzen7c3V!^F=~c)=aK)iaf^}4^>*q zLUVOC;l=YQwU*2l3$CsfRI0|9nmp5_3qx5>8`h1}q*Vsy$%2cUYbKMoOy;K)WkQ*G z^!pv+RzSC7@x2<+g!!$)|Li(B!)bSFlYw#YL~BbJ!l2(H%MvD&gqthHV(tJ+6k5VS zHumU}POC+?+ojuSqZ(?L(^h*_l_o82t%O_cHr6VXDgli~QR|XQRW4se=(QP{0~q>N z>nFwS=Qn{!Gfj~V`0%B`lM)&LB31yz+n`{rsaQTzhIn2J>Bab7@cjT}6MQ&d^G&Uv zy(6@9`5kw2KHP+(vD{rvKI8`YXl!<+G>xT~MhXoL?Mkl2<_-O7)m?Q1q_ukq_(;)0 z%08alMu;bP@+pYHI+W<|2OkODUW#0S52G!$8xL*3XpeBT!(uVRSVh0zr{C>S7CGbbHWwEceEZFXBgx1XDg&b@8{lIXYf~0> z!H9^;D)#7LZB1Ik@w0$=W++s^kAL(tf@;c}o0`EMJa}@C?ZFPZGGvP-y3mByx-nqO z3HzrPC9j_w{^=in#EWmQDAxcaYQhOCtThx(7R0R+l3pVTAq2Ze+vF;xzu#x~=$O6z zW2Tb@muDrSYCH}ENYQbldm-5J+IS+QXuQ6ybshE_>%d27+tjvR3*i%ESQzljjG3zM z1bmI7F}BVSNQ&l884R~+bt7i;jQlc1SWR!>>E1fhhMlt^C^ZFfnEfaR;pJK*E^a7e#xQPrH` zsE;P#>M9{mW(a?bEfpBgUB}Fu`&mNI^7ttn9S00XTVxZ%Z+~$~Y2cGbdmKF8W_mrP zs4ctuFGb89#AJG3$17aN(g@X zK}6Ko96s)_f4@g&axUkBSEmWjUtDuJsT;AThpOQ1i!Vv1r)&HAx96u^XA6XcEjcFg z6qPWXpJe>bpMFTIpJC&e^RJd`@F4{VnNsP3%gY<4lbqedr)=-t=i#IG818K24Pw$H zL+B7Glq<{x_(C%5^vHBhB@_z@``y@0K_whMikKA|asi^^qxXKq<@FiI+i?8Ivh$!u z#G1-h2sB&W4*$b{_YGftl@Qo~x~Yon%B_%F(0vzttSBU2BesRXCx^WM(~miM^%hgw zyLPn(mTArPw4$smi(<*%-UB+a$7H5>d71J2BIE5v!ruK|N@e-8PpACy?Iq7|=6rT~ zjZyHUr_Xrs@ByuX&#Q|m%X)?o>UI;Ag5Y38r&F?Z&*PIH9&!9&%+??#6mzyi$=PDb zg;}iaCnEuW_zylo>zdOGS2*Xu5cu(f`}khOzyJ9Ol@fOX@iqr-5AW~O9k+P=;X{Vo z2fTTG!t||k5bFjZzw?7#bbZO+J)cqvLEBRtKe*4!H*+qpu8;ycazr2^jHuQCq#yLi ziX~T6^EVhFhGzeM@$80ltr|D$?nUw=duF_RT4SR*$4Ci7ov2 z;SYH`z2MFB=k)pqbmI;;Czo8kJmK_<8Mds+E4Pd9v`3tmDPbt+jJBChm$w}q;W?MF zXyho=);iKDwudlASJa^Z-1%CSD z5Bc_+Gm_M>zZVdOKF7QJWR)gwI(Py>-0PC(2}UU%J$&F&s_PUFORw$m3AV^oj0Uf_kL6BELb1zKcrYL$d?OF3&!L?CtRQ$uY*%eDV2bTwPsqadk!@1&jHVi}Tlfd-fX7)(C0P z7=-Yd&KA6UdCJM@B{$QAWm=##WJTqII<2Gnxru&&QWaJ?YuWicWirjlb3@>JAiXB= zSrbMsSEHQNNG~RiMkqDg7!s{C&}MURgrOiyOQKlf`--R)a_?}D;jl+l0w$)?#ahOo zb-i}KbJQVbH~BA7dnWp_ymZ zM)TEo)PJMad%4(*U)i8q-D*J`fN)bzyIzNGZOfYph!oBltKpT3@0oyjjrK#{dG?Va z#PdU>7vjn2y8uLR$5`Z@tdCoCA~rzBDm2*%(M_Y#u#JuG2JNbue2B(k7aZ_#o9wOF zTnOc+9#S_G6!%LdZt@|8beu9ePU|7|5#oKMxbFht-c{}Yhq5`!gkH~eCxK?Fk)U;o zH3_Poqw9pSn2@DYge{O%2va*xGFzj~Y6?=LmFw~ttuVHEZp64+8Ar#`3Zpb$sF9(; zj}1|1$mRy63|cvZ`A*a(%{3FH*P(rQmN4j0jJ)+JLQG9@|JXETQgkX7HIFD)}*5JcAmM98atbg8S_i50JdHTT< zy8R=ruFkL)9(H|nVK82e-?ik~?R(2=!;luKE!PyD#XLjXnCa;fVWBh7U{bt5;DrHc zuIRP|7caq2L8opSfv{Yk)npbt<8xV79PPF_dhdugmlx!DdJBHo4E)(RIQGa*M4FG= zQqb!Ucy%(PJB|rDhR#4@u~ap*qX3@}-*|{TAh2U5(|MEnD%KhrPY8^FOb9|DQNj}V z0;!-}NYY{zoaan#&RiH_x78RNT%!<;lU-xO*|rS&(CGyD zD(2;9SG=BDTEKCqruES=y9Y5x@9*O+6}k?1`6gp>o$z44%QUIj0eHG zr*l{QzJKI1h$XUyX z@ZLvV?(MZ0)B;^690dXQ2R+WKl4nm2siKnB)_|AaTqA0?khesLUX8t*h5hX9g6mw; zZo}4=-M`MsV!c*)W?qU@bON(7Yk7j)IBlLG0%aHoZ_Q+9Sjg2-}oyu<$SkoSIg%)MuQ+PfOBU6IZl7yHl? zTwh!=9FBG!*tU)Qq*@Bi=zWPgZ5rwn7=#rOeWbA}J{6 zOLqDl4#r!2`Q@k7dBS+mCiWz0QQc`wB!yewYYWrKgvx3cOnUh>`SdNH{^E0%*9$rb z_PP<|njA>V)KS(7LD1@wCTVjYIN$%)@G09{116VeWJ}9pUSd>891Tfk3xv6*E)+?g zGT7=Oe2W$aFK7{lF=4Aq7@(o~4Z z!;b^x^3Kq*0Kj@Jq8A|V1LM7jM@5_FMi}3xpy| zt0sj`qqIT6ZS_c&Q^H76tAesBk=AE2Pbh^%M1n^j{(#+sV~p`QKfOlP7F7%0 zoLsTgZXb`mw$pWO(yumXSk}S^kB`X~DV4FDo?mnS-XWgQT;7!Qh9SefHU|%OFpy0+|WZ!sJW$?F>7Nos3I%YwovW<`Fx$2Qez)br?cB-wJp zBu`lTC~dq~h2R+G)cqP+P$?w=_~V%i-Ar6njA0Ky4$-FIM(cb-V&J)E*&R88`>Wo2{D2QX zdPJ-5VT59l<(ywFn9edPlizWNde;nR^}NV)JYQ1P1x8zh2db{!WM$AMj6yU9<28A` z_^6`8%NIAyvz)Th+%>i`cjd1eVB;2$IOO4`9!;i4W0bL(3nDl2%~ljlZ%x6HPL#e9 zp?gjP@~#Noff66-1xOj;c`?5KjtKpZ=zPt^eCL3RRdLc>WpWiPXm6(>qRI5Is|m=) zesj4m)bMe8NjEU4AYS)k?<>S~TJE3B=s+UY(#S-XIk#_p2Et_!+lOW zagu1B;2R_V3s(3T`Fxt}UZgKD4 zAzRxc%DiB9Gvmw8Pw+g+WRf$RWmxT+=&PUMLgHslac$NGM{O;;K@UMjDg;~iq4J>H z^QcmbA4rIOOilu`syM4@xM(5Kt$BBY1bHD_n=cF|bWnX<9n^_@WL z9q?iAoItbgIu!Giv-Fyq8_l58iN9v$$%{I4GI!B6_^9B*-YosuuyWX7`*%BJMa zM9wsCw5(!KIesLt8g_SMdi@besyI8VobWY-owl=8?~Ej~g=UsQ0+d$scyEv4Zpg{i zYtGK@7K7HduL>a@*h@y02wpdv5Dy2J!DRn`sA2MImC` zw14VsRvEA)4Jt^@m9P}(#rvuuAu3FE&GqRi zufI8=F0a`cbcnG8wPqX+xJegGvKw?u^YPD~AVb6KVu8YNlg=3pC4cby@1ye>i_Bd# zzJRM)j;*1{Ep@SEcY7C87)JeV>{2tiEcoTG;N`^}r5l}->|u39;J4|85nazs!ou3p zw=M@^U_Bl@7!$S((l@+)KH>W9&3C}Z>b0BFHk@VcrX$N7vU+8;Yi_kA7L1KBYc9Hz zAkWH-tLfAw8;i|}l0e7B*Y+9vqS`reunZX{}v1EGp}4JU`mnVtX&({MD3H-5&4b@tBi&>Oux@s}#~C zMFjn(spEs_@&2=8q)^NzXILg6<|vhuW*Wo{gtMb>by~!+Kzc6gtKII>>GlvZKwCq% zAETu}m&RGL0;6slX>(MSk|%~NFX?nc+TEC<&Iw|lb}wR)B`6JXBnShKA}^?FL+A}y z&dSC#)vz<(;?a{`;y7S(v&86-o7wVKW3mpCHS0~I-H)6e0D<)(TWX}ABP9f(j~@ht zQHYdKRvBTp#n!<#ek&rYa*Wk<+8s{boNzOpF;|Mv!XWBltR=6j^||SF+8iE^xVP7* z6)9SgWiS}<>SDUSwkC@NU$)S;0(Y%6lkkiW-0R|q0l7<_jizOLw~PJJP6405>+WIIdK#aBbhr--FKYQJG44uT46|9 z=6CjMYaJlb?|>_~O+>e0gctfuXV>_?M;He@di;o|PaiWFcIb3Gy8VEMkB&LNJmpuv z`3-O0T$7cx3m+rG5`nJJRf$zqb5AM|`PvMLm7^0lTDS->!Z>%pCU|=C?X-2XT`wYbx3}nzS}f8DZ{D8r_H{v?sk^yU>v}Wk_d0*g0%@cTv(y>d^|6}moc6fIUuqEAmZKFc5z$% ziFXi+6wMVUZo!AQ5jME`9Kzx?6fCa+B0}no$wwnDUjdF4{R-8H%~y+qTz6jt5mNLK za){swp7#XA=zBrNe=Oa+-J0R~a!t8X^#ZMyC^e_5X4KUTqZcTZG)UU%JhZ97I`^t9 zcbOhay9tQrDXi3tw>8~?W-)0JmyNSF)LNq|L%VC~_6*8s>RRJ_mUiU2L#Uc%qEXu3 znQ~~;g!h?u=~stND6b9qe8KhEHCJa>Z0+5n-5!z^C9U=zXXi^);Wv7fsIe#YZbRzq zJKa5N*&6JU+a>#t+XTG;>sjhTgMvy46{wjTIiMDyfQ;AQ046sifW+H_Mj7~8^_ay^pn1iMsq`kixkN2DkOBD3hl0%7lt689g$Xe{{gj|GqK zcX)Wz;U~X)%)O&A*Vhv&ongESDpm6G#f(SyBmtH@h3$dQa;d2;%r2LF{No?+@BaL6 zxm=_m`b;k~uujl5Xq>cMho}iO)48LG`JiioFbW|el!106=(jouWeHS_?|Hnwta!VG z(pp+<;aNd{)JFMp;-R3w>vQKR8>khhMj@4!L|b8 zjz$a1a;flqmyc2umTni~R-ffkVnv_%ye3;FYs4lIm`ZY9%-L?ilY95LPL>SXf>c8; zS6vggpe@75kl4Uhk|Tb^4SbTRdew0LprSvB!<8GH=lBITCqs7I~2}ahd(&@WS{Z& z9P8b1dUXXN#cx%#`Vq6VLK&Z#wY+(I$#5rOvZy$C7|}TvJo@1gc2p5Q0DrHd)e$VN z#dkJ|`AyBqiy6x|Q^xIp#npnjsrm4eXS_Op#r6CRKmF-5o;`WY*I&Hm;UkZq{N5Ah z%L|k$xtTgzpjiQSC0HaNO2J~f08{b&^95HIIluZjENXbT13&qw$B#cejhU=5Oy^89&Rz-A2XdR>axD=DmIO_RBM)%11ArIHV2W<(IDd9ev5lY zBmA~yl2uGIn3tLdTWw}}O;T9~amfcCY-5Uq$?_I_ur?NP$M+)5IlV54HSBmHGp*4U z)FLAV_WFDHUY}g0O_A;zbRrty$33?9M{Ms$l=YP9_05J*yh5;W!K}c}!9K%LL>L;3 zuE_EnAtbF<7pz41KGK&2VTk92RFx$RLbP(a2Hyuif?i+H?gl7RQ&uTPR484rTsna5 zd)``)qYHsm9$B(%T(n>`*rwfz@MJ`hRU98Z=9?F9*Tsw{0^02swQ`{LlOI1}cYi=l z!uvlsW^ZS}WHv`i&1g76)w*F|Sn6tl3~GiuU5+2^;>CudnlqnWkuIlf4F|k>dyTf1 z%0gf@lhQSnwue3L9d0ui$BcJ7^oMP>b_VS1?U1Ay=a8_{HTTJOO(p-JwcWiq{}5~mXW1P ziZY`pOJ2Qv!|RuGip=175c+YWtx!%2N!&yo8erB0CEj&nWh4FpVX;CZgdvDSEE?f8 z-|q>e?>hMwm*aAqPiHp(>Me!IX`dB~S;An{C5!?*PtxhRsf8bP$kU>UK5hXWu$^_f z`6?3!z$%Zb@UbGq_d|j(ByNvTCZMW4%E~9rCDUoe)p<^l8mEta$C37(WpV>__#1#j zu7?D-;De3VPE#VJX=qiqLA3IY_}l>%Z-av6ttTK(eC}<45h(*aFTj&d1LFCy3nKh} z@bTRokW~S}JG3m>2)Bi}O+9y-|0aA;Xl#?~v7USgHwloeY z>?6e(!9#?+k0AP9!0~G7$ZI(!pqUzLv4y904 zjr3|f=^U-9s&XFI)>+sGKO_Pj?rIZC$ zgbcPj7@hF?w06Lw0U=sjy28Wn#9U7E#uBg71o)|S(2X?`V>G9y6QuCSu9wU&mv>Vs zt!d7kb}nKY<2u{$0j&_cxw^riIEvcnG9h0m<_Uxna-AUtC4L-(?~x=Ltuuz*A-)e~ zRpAFAWs~Bmbxk|ew8l;he0cOezx}hbwXLY@U|7oXihe_)TLAaNEy9lA)%1p{=~`I< z|M~y^kNEUA6E45{91HxD|J5Hc>TBB30;6AGRY5w-81{Df<*&ZsW&)EL+9MpWQYg-@F4$=)j>lUBtqzk( zj;;(BuWz8X$R>xO-;rq1B1@O6`4EquZZW%=fVLO~lZjz0lhBFlaxgf zGr6u9v=8pwCkBg>DgWe;9`gG2D=IHzf86GLny(#j)&=tr_U;Arx`IbfAF#N&;g`QS zr(EF~QQZp4nu^ki@hru1$^YXo2+}Qs7 z(xNiK;>Hq1u+{hZ=tD)P)1}|-frjbT1)u%=IX4$D5Kz~ao`8NEdOe@XjiRjGwIoW2 z@yKd{HtU=$?49nXz!ElAs_t`bzl&FAEYWPyW?_9w7I!z%?^r~Nrc-&l-8!QL4dNU` zhxgvU$Ez1_s1@AX61;s|@!4-b<-?C26Z$dIiwOJ+Gqs6|<)gj(Q-0+C6svN?%`(YD~(evf`{ z#O%7}=_ur@uc!R>bxN*M9^4TmT+br9c0O9P;fqubgXD&}D1COHnWJeF=fP-`d@no7oL<+$IcK z7^5gBP^B;$!p+T`x^|s&ZQ;@5ki1&(;&sllD6!UKF-y^zp=H|i`!JchwQQzpd<)7# zk>#}eKFcDd)&WV9P#YKxM`XD{dM?|+oq)Kx;0sRPrnK5SB=eZ%$Dzr zSKeVMy^}fVGV}y@zP8dbinX~D8+PI5oi%tf(Lj6;y~{BqtaV>s0TzU~OT`i~LWW2Y zI6(4$+Mr~#@H;UkFGdJid{A;cjhsg@*n}H5lb` zH3Hw@dlp?eFH6spSYgqoLi!Mf5>MAG7PiUBu!I`M!y$eck(WMYS!1+xAx*|_GBj`$ zudq)&Us9zFH|K&B+^7|I8rg_m=q(ZaEZ~U9goc?GNEPwbXI~=^^+L<>?@YOV6F|h z4<@oyRzLuyu?)rohC3dY&kH`?RI(f z?Q52a;KAbo(k~Fc<>20st?eP>agTdDJ)Xasud^y51f_*p3HJtq2Zt@nR1^CxOlkP? z*E4?c%Y^gSH7bR`!opb6W>SfTXcS{xz`)0LV3Hcn7Zrc;*;~pDVeRH5Lz^07^@dxP zrO*}K!4XNeAh9*IE#22yS(I*+5i1AA#%6b|!C7_Yyo!VUZT{(>{vPi=-C}%D@w-3U zC-8I9rJ^iKs&Yx1l&Dg2@@7ga*rCW3{b7I&7O1E~w0vHlpCkQ{;b6?k>sgcB3)*TD zTY!b0g+F-zJ|BNH;PD3$AN+XClMjdd$v^&pMRv-IFP3b^4^0t=vP8bcmk_j|J@8RM!NM-7T7u3|kM3d3 z&2`Pq70j-3c3Ls5Ofj*_t@RBJOWTsGnPOgK%+>8$R;@vu_w<$LNwle~76i?YK=82Kcf~GKKj~L0!A1$NP^zq~9BGeKAE? z$@TRmpMHJHxZP(k9Fb%*tOpktPODd>aCLLVB1tI=&E@5U`79$(YtSxdC7Bm2CW>+a zWeN{J7-L1iWS&wg5MGS6KK<^9s&5SB{^0qw6QLSqBCHg z)CfPO$cmL(6;K4>Hd>cVCQIU|N0FPxpk>waHfU2LjKK3fM-}%4Lb_a#S~<6_vJz;m z@FPL1X^(haT3%BCv9i++a#*x3794q~9G;lnTM9xo+xP831O3nbU+^3yU9m zjq{TO1kM%4HD-hq4JAr9tOD~+W7cjsLTyf~?Z!mJ83^4e?%&PKd$-fS&UfJ*s zswz-rjw*A|^>;-ice422oqTZD2K-&Yxm-<=SAauoP+DmmW}ENXoPw+#-YWOQz4p9D zo9#ORdff78wS1z;!w-CX&%^U#Cp`Du)Kg0TmV#x)_fI|?_}B;jG0uvrs>8^bw+iCx>|A2q~U`IQUQ2dzfNE+*%T~ z9H6nrU{vntR&_#M&(UgzQ8PCMQ42g-l4TWIuW~+Wys)OKD-bnxf@!-f~cX-Ip|N1$L)bWy~Fns;>H#|Jrzt}mZ12Mlel)@hM`$y^_xAYm>vL`<3tCaci`UM;dpgUQFDr^AeE#hj2YY+WP7`eH zbZY&k`_*kMTr;CkYv&-lZqItcVCxc$BJzF4gBC(-Ol3$KCo3Uitm$AI_YP~};~)08 zyh^w{*LYMU*ENxl+#B>6_u3o{B!R6dbxPE67R^x{J3t{jq`9IU$EczvPeD~RK?q?0 z!t?Qh7RU~>Ig}?0sMGabKj`i9$q#oqc)CU8SA6>-;qpSUNPOn$OS1eNAz*m4%fp8w zq}42LD&D@lAzS9ekxx~v?71QE{Ko6t5{QUE)MzaIW?A;7aDW1T?Y^|yyt>bh_`&bK zPoWB~U!L*x=M%n}8SV#wwgesoUckk~aCxQp=C=#}@^1=WmXKLE4kE%BNR$#4IgA=aceyd_xPYC;MyfCJ$G`L)LJW~&fDkEH=X35oIOLlb zugNA^BklxI&kndXf37EOwx*?fcea@n8R$Mxtb-+uL_E^ zxGm+-|E$Cn^I+xyEFtSQN_dJOo zx@m{f5~DqwK*Mtac2D4WffJ*zlh6h4DCoaC`9Q4yzBM0L+SQcf_GGW79q#0r#_h(e zBjttIq+K)G z)l5Hh?eY|iNziJs4i+pcmsD*s9I4K3a!-I?aB`{X`(T;B4`^z z-*9=ZP?e=B4Rv8aT0CjVa+heXbdySormkJrI$t`#8~WQ^T_1~L+!J57cR5SyuS>6R5_LdeC+IxJk^%Rq4WRzgx>4O2g2LZjP!c=f? z2eMkw-gorNb_8kS48b~WkTLipK{$dc0NHiIbsK^gK_FwwxksI~ID3_lq*e2N1lAst zsBfJE7ZBJkDHZ41aIN8Z)Fp~wZ*a)`G~%zmxw=pbxVi4}+rK&I^Iu%^&1YAnQ^DEmoU_wnU2LeeEwTIC_KzP@%w|k- zmoB?4eQu0l(D2+VYnto{aYtCzX$#VYB?>H~VN4iCJU?5yf_t^`n^o~0gLQ(k(Sy(`&A;uei6j$5-E^7@OU8o&{8C#`Rgk~Iz=mp zBcGk!K0?-%rRDMC7NcRzY+gEVe&J!7G5Dj7TimvHEVBgSz@t*;j?>r2fBZ4CB;oAJ z^4I_3Emt!aGE9P0hD24NrgYgn#`%-f(^mrG@vl-{=0l_xSAUf@!HKngZwd z{_7F_T}vbsonD{C#gy^Rm|3Z~PBbIYCErL9fgFUo!wV9&#3k4LUy;du*Rdz zEGVDri-pTf5peu?M1Ryp%NngTfoD*OVC1zK1_wyJMJRSS*nh%oYWVWSg8lcNu=DsH z@#u*8B4<8dl3y9#eEEWt&tG6n&7ccUo*t4+Q$oLu)siANNYTP*O{H@>y@)i+INsmp z^di4Qmk<`-&f%tjjunK>-c_W|5MnSKQKvcQ79#7&4sSGkxhOeXDwo5--4L}q4|@wb zEMAk$>>3;f-+>NvBL6rBzX$1z#H#1P>5F;SlD+1}DWD(kx?VH=y5_ zL_q}Brz{kCT4A+7cpg?eTk`olp;%Z>UM!lu)UB&Mf5744E@;K+$vJOsPUw0uzVN86 zMi66^&$3vq?`;bV#w~>qB?AI7x%0hOB4>IjN_i7_R0ZE1Hr{I(&AMqFQ|4C`h5E*S_s>K~3Vy$yU z%kw2+&_ehvRCOEFYk|o3ST5&ux-G15z`^q&jKX#H1D>OTWramqOVkPo;uvM2)|yHi zidxa@4Jnq@Z8+ij9`{_+z?$2M<$3}lzFTWsgGJ(nZNex9sWBo&Yen1&oG@J9E+|@C zXGmo?V6n9rqgf_%v?&@ImIcu#jK+jv3#Ia=&UE#t7eW{{;i_68d=O#SuxoT<$F0}l z*1``E*4xlTYy@9RZnelOiqb~0zt)@JIcGQYJ0QepbP zRfpfcm#_=>AHu=0tPEcw|RaL0Eq%3Qo0$DpNK3So%npU@F zIMAqCk!K23>Biwo6NH+)(2iy$9o=kxWzdzO)v_d0cY~SQQY&}Stpq>LWx+#YsVi6} zmSkbba*s60*Mjr7HzF+zDywhZv6^&ZHvy4Y6E|Q)HO0LHBbeg5QxAKKymwlA1iB{B zAau%hFXrB(J=)!X=btZVg)r=T#C=2J3DOE$0#05)oxym^L$o7IDDYbWT4?YfYWuXh zLprT3hQU6u9kIBo`236Orr-~;Ho%z49TB{Xlj}BJ=#n?{n$KS=K6%u_RDFJXa)A)e zO0(B_j8fN}oMim$XZw8qWy<+^&HkYv>a@tplABpgkqF8>yLIH)=mJU`H#dD7W2F=5 zH#VbZZ!X#1eavCJ#dR`aXZInKWXhHgxq?o&#iCRj>xsMW^3rug4)-Dg->0Z*u4WZ+ z%OmOzsPX~`uw-lS0fI7_bN<#%S0WESczS@YDo!pdJYi_}THMAAA7gdjW%S zmsh7*b6p1On&9!n{*j^cD)mm7~7hg}-#qbB8{2%!8#h-C{bJ7$# z4t%`-gCl3mDsv^(=DxWHkP^yoxJ+80jwAv%y{M{=q z-rn%$#U;-_Kc%xB@!oq6uwKdR(se`wozW3B-+nr!+X)$u4=7SY6!g&Ak}T&8MlF_E zh989_S;6-9HnW=yrQI>A8W3_2wAmjG(M3+(2*_(~SY{QUYC{I32=d0y-<3FBEY%%0 zz-oG78kd)q!^;YcSm0iN4{dx(y?p2Y`dG8TuH0Oj0(c!n2Y2m{R}L%^A|KivL0Ln$ zqnXYH{eh*`68!L!M_f#292^O%qNLLvU`)m2y!qLFO|4Rf;~xFNm~MA~?@6*{Lgaxo zCBmk7p2m7`lQ;*wS!sE3zF<+n>6v0agO@KVuC8;w`sIu)saH`J>uzIR-4Mll7`^21 z_<-Jchh#Fjr9L!;Ojy@Ey0=ZO5*Blip&@KRyC<0?mJFxuYDLiL^~g;@Su0v$jI@?T zG9hY5?Cf?idBNGzlG&QVtfn8n%WYYES1g_NIvcb%>)fBpS}>hf6uH29hIVJfaJ)@c zC6sFF_QXo#3yCiTWm>VEEkSGIAi`+tG>BTxR%Q#By11bzYL@71FCQ70ho8d7PL_Wmrfa^s8+8HtwrE7AwS}o!@#0xwMqnvgNsEi`3TzDu_ zVh|`}F`lG198oJDz3F&mZL>~?0L?%$zZ=Qvn>jh+9W9t^wE0mB-}jqbv>a_}e9xoI zHB=DB;jNanv1woF9!ztMRJvTVafBEmgooA>l$x!aeSkE8>A5(cv zBhuXQV!l0YciAZ4DRzZv)=Kw&#(N=04?8@5+U3KK#*DW-dOe6j?cBkr2?9eL38Hww zY$mCSd`-iWO>1twj>Az#x@REEBC9F&cj=!p!?0oev^pq ziT^P8ps_~=99?ML5WIC6xSf1#yhb}s$a?bO0Ee||E#{VM z-r6nr5W+*!LomdXkMX?s5u)?=x?EXfp}wX&Ft-{gW6*Vm(J87N&NV z0y$MxQq`5yd*}+!Q%G6k2QJCH%AJ_6$QyU7+D$)#P}6Q}N3qHct**iIoDL=o4V|v# z`oe(^Yaog&<8g=Uo6>cwOPEeArZNOFCQoWEo^Sp6kDhUP#Z3{4hIP9`} zka2zm4<2aPrbCDG*|l@vv2uey4b$0#^Q6L1 zakE@F9h7!`@}yL5!QL$B`$K$FVl`w-#h@P}!#3wvDRpff_^^&IjIA~{W3UB`yG=s( zIrKVkc9xNqP#Spr!8SL^HE+)~7gsg2q`(V16iKmOy*fJ`hCL@@uks2{_9&{rg@W0; zg>|bv=E3oRYI#HKM?|8}d{Xh|)fK<|^6E|ykywL{4IZh?5mHkGHL?YjZ`eL+Gu#ik zm@LShSq?{gBkt{NaWzly0tmJb>F$5XG?!eQ-nbDx`fitY<@|Ohe}Y@ng?G9~mlvPj zS;SX>HuOe}_ID|B!TGBRmnWL5Q^9MqN|&}#)m2(qfCoTlrG^ycl7tISRg4!iV2kHvMuaBGP4B{eyd`8jb1=J^e0lZx?vn>Qy;z-xhywNy<| zVS&3gF;M5LJ+TKt*NILyY%z^-?pTYPIlWGwM~^?^>f-Gkp0-5Ml9Ex}MyQ-B2N6Ov z^4YoHrZ=#ZMzgqq^S3!I-?G!~&<_MvmQvSHnuwD-r{%rmNm**Nbj?VpEPH(YKz z*Q?gJ-LPQ*ke)}}8WKcp{8*xy6NCoO2tpZ9W;NLobZIG4jVfxo?KacN64RJw>}+ol zwp%RblZKK5$S%Em#~9hd7zx^~U)^ok-gbpgvRq)bAqYZhqlsG~ogOG{oYBS=)J5Pd zn{BUIv)v@MNGfux)_+UfB!0VnrVZ3<+8F|N_77Ohm-sD3tLrmQawao~B3G2%ySIz) zwKzFRDe{8(#2`G6e!quBfz&M13DfxmAuY4%94SL~wsx7%GA47~Ow3`XO9E?9R#90) z0Q7n>t!|5;6;sq2TP3)%+x|sDn+fANYAB{+tP72b*(Vg5QS|#0@R92zBUC}fn-aoHFDs`rU+54ryg=e!SXG> z@1cxBuWXy?1{!HAgs9h!P;08>Mqw_*t()Ur`qg)ho3IK@fK?v0 zl9<|u+G6Y4HOHFJ<-1dmceEk)d;EM?zpD>Nk34n{eU2V<+1l}ueu33F%9Mmbiy-KL zY2kT&qF|e3Zu#Q#Da+|5_~1_1pp=5W<1SmH4#Q#0|DUiwd6Fc{^ZUTh(_PheGv7V- zh>XasvMQ^ps~X)+paBRL669bAq3|%rIf1}X1Zc|0T)@BO~N-*@Q^5{5(jIF7*&9E9sw zlM}s}fUKq=EBjs7ZESd556|@*E8b=T;)S^X@K651&%_%g{jJT`*llGM=(0Ze>tMl+ z*k?5bvAT{e@Uhl<=q6-PHI}<#I7?mn<_F>^W%TQ5G$pU(DCs zOj#8C^soMy)0d}QUoZK=j~@^vGyeSF7Cd~s!=L`E*W2cF&BeaN$H!F?*U_Awobvg_ zv?*+3v?*^3^R;!VSS=73hs+pOXJ#0;S=QD11eImM;qgNr-9I1+1Z5?erxmlb+6rZo z_SiQYL_c)cX*=xoB6j*c!oXqBb@}e)lB5ma|Is5(&L@o11zD-dGjLr{m7!eZx4I?D zhrspmJ(tCzrYLQ2=H}w)L*q;o;BdS@Bu`7IJ(i1_Z?4an6%tRtsMW!Dd=3sCGFw`( zAzbTB6drWYS+xc!CW6tPOK+GEw*|d^K->!{nA3WmXdwPF| z+47pF&mQpb;eGzu|K(p&mRAJ6PgyBG|9nm*b0+7K!M;zBz~0`_hRQmUup2VT#?(3| zid^z6<>X~faT}b1DhhvZh#8P2mZP3Q{WE zZii?%!s`!No{ZlB@M5hy(?;AbesCHQ?53IuqKIyPhgQ2qnoYn@sY)ACr)!C$HSLzq zpcfPRg1W3p=Ow*fj7HOH$L#ElxW2h;Y)QfGc4!Sks$zyKBy~O`=>^<>G$M&=0w1KT z5IA^#OkEr1vyA1krk0wjw9Sc8ug7$;Y=EVMF%_N};F*BTEVn2@J~b)E4A}4Q;JOh- zy=V&PJ)p*mBJwn)yAzS+3x=bJvb2B8yYGI0=XH4fYRq(8Qsx$XCUKiGPsz&#QQ{JY z9#xUk@9h$}13b6KH=mx6&g8A8iEj*n(X^6~K{sLla71s|#*baXBp`}I%GyqAw9*!o zqin{QfMt>2TCal8(C)-^x(PUvJTtcf4jaQGq!QG1O|3NAa~ju62j$pIH{&&QG-JT? zk-~BKt$^hkfNxJY z%$9xNZEell(~q@-)(D=x+vezauSrrj7%dS7JU_y5BI?>f%ZOTrjIT<*`sRWc-{jO) z!)6cyCraoJx+I+#HxPs&#EFN|HCdK38D~r<8MA4|d{Ho)DP}W6T>#o?s95grn1nRo zLo{H-ajpKti);{~8{z(=fASB0wmMsccoV&`rdk=X;o+^_uN*sg7iioy_|VM=>h|Qr zQnKVa`(q=9ad3nMA2gE>tNCca2l0O}&jX+?=CoQVLFlZXQ?jP6Qlwm1jfa|}b)cu%J?nb*-YT6md(Vv}QWdXr3J zmow{frA3op@`jjPgYg7M_jWlt9C39q-vS@dF@j;-V^I|x_l~*AFE=Osn;M{|D|XBg z%H;U6MWkDtp3eF0=cnAfn3FDiYExP8pdo*i^7=)|>ysLjgD$t7x9rapxyR9w<*jbJ zN^Ocp3DFT0m$yw31YDlO*Uw8{oX@v}VKF$8d0BIGXOG#<49$!m{_tb`u;8n&F05T+ z8=`?j*zZx!OF&R*NiIXqCMnZ=Q=mP5_L%tK9<%ccy9nqvMPM5?XKXwq3P(hwid%xp z+1z2dEV;TEGo2TtnLwJY0HW3AAHuVzyM*47z&G?eUFuSDb-mzfEKv^NgA;gEI%APR zp25+vq1*Ebl91(GzA?h}DGQA!V(Q#On>RovO+jr!+MdU^r>Bh5jPY{8yk6209J4Z%aJT~>|MZY(FyRmX#xtBy^ZI4J*66H5G!1CoPyo!E)SvBTEWq*J z#pu(969dH*Zf-1dy4!-g$038jqZ2snA9e8pSS}UM9)6$kblw1vCK0z8yT5wzntS*5 zc=k>g!<^+@pqj3|(h=IUDMi7DgC~r-1D?;P=-lw^{DhY$ zFStH?$-xecI?!?;yM~ij&;ok9aP+R>;BkVQ)=YAkEj1xIqy0AH>4bDCaQz{dHwD+v zGfXWoCc&6`i)ynv-rdH*&#*|L2uh4s616pV_j?RoL#tGr>4I}ILTw$ZE=)lt$_7L< z9%l`g*4z&5xrO}^VhvJmG28?Q5rHVzo4o6c5Kh)iK-vf=!f~oCKC zFz}A3X9>?w78q^wdZxy3gkfUT+LqUgp*`rKTo+xYh+5uC9o}iZM=q}sIPA9Wk<~Ms z*IZ8Uf*c_%t*Xr)p?Yx%m&L2Bw!(vBTm*AN6A zvuVL}qPV&!xw$E+YUp$lI-L%I?=rcrm@Ue!_1R8zlqqqIhctG=(KaK>H5hR?Jm`~E zIeD?f(8ExIuu~P|SM2PJc=<(2p(Q(`9{2A(qun~-*S~yDnmQC&+N?nyd73ky7dR-S z%oq(?I3nccs^s+ZYo=${sM@TXCR#hRh*>s@YlB3%C2>a(L{Q6|s$P;8DUM^T#Xkl= z2yg_*#yQXcVFIJQgyE=#>$_C4L~GU16txw?Yc`XEwVxJL(ok!OGPV$Pg=@Q6!qO>G z8soS&114}WT2qxdyhpk;cQO_%(`Y3J|qJhG(6gI=#Of;1I2LH;qa)<-Mc&7yL(70X&Nd< z5Je$U)yS#=Z|j^M7z_-fVN5#-tT~YuXlW^9+xyrprvYI9{$rvbLF))r`_z?-tOCl~ zqsUyYu9v)cIp^Ewb6&rkF}}>Hiq-pf*YBy_X)_uQXeTWK&m{^Y+O0Oe7g81#RjDyr zpp`(@0<8t^dQ!4A`4H|#jP5wiv|}|1@o~MN0Uli(*S7%Vzxt>D`Om~Hj`OCxa<{;T zvu(NCP_0&gL#)7uX_JmvO zJu+0CBGm$;Qly+Cm)B>_Xe6+{+N-hn z#`h8obm=lSGZYRTvBL{<)hsR^#uRHxgVsZOj>46itg+Kp8X|p<%H(LR8o|8J4}b45 zi|m4GW`*<82#g7#p>I%LZt4=Tq2~z!qvIb@q!(M1AiLSuS&rBCDCRk{3B*aj&TyYk zKe^=SzTl@n{XRhu^YXKE`}g}jj4Dw^u+zUon$Ng@aF^j|kFUP`lG*vVp)C9*Jj}-7 zC&0roicFQnBBnIex&wsCDas|a(bNc}Rv6kCzlD(-my@R-?9=T!%qA&HS-{I$f7dQ_Q4*0bL=y~UDi6q!v7 zYz}r}o!(aTO9AbqgVc&eJtYu5jFTfAc>MH$U;g3~_V!0Scyi43^%xA?f6%AX_E;<~ zX@x$buJC(3?({-lzO+=hF7VSoxi7cY8SToa5s@&z?Ny-~Pp~ zcs9IGKkOjADgWRf{Kq{1G^G}nQgd-W$5nHT5j=eIkm)ovu-s- z2}$4TlC;yorNbyZV83TY<^3dKzvFSd+hsYM(d~L1+&SXlu)}z|pl}Rs559d~6BI6S z<}fpc>zQP~@A1XgbMiuRb)8eH2$396PAy+sHwBq)_}TWCxtzzMalnZE>!<;FOl8>ws`-3qH1h$L`L3 zigL!zuFv&2<<7mBFmVZE#Ud+_3hv#%%h~CSi;EnYgPXKaMU5AGjBm~v3_7@x-RxcA z&`b7k<%sK7E?<3C^7`z`ig-;MZ7Ko-Px=w9Sn~eIJAClN1D-xRW_Q2KJ5L|s#G0HL zZUEAL{N(l3dghtSyooM_Zci}Ug@+G4?i|@QI9;%IWa>4=Vj)4!n|vNopge^MU7~(~ zA8U-#RF$c%rXMhlr$#_W^8uGkkZ)XoB6|;G5ftWG`k#(=gvzo{a$@5jJc%$pn zf}ZKIV7}HOlt>%cXRM{I)CJ4JUZ<8aSYQZo0>$3ph$!*6I-651;qiwLxpVgspZw-) zUVQn2BCndg430+cuuP{oMiKgkJTok&87C)878jXiDy$kNEB%_*lnwZB>>wS5!SPGV zx@5k{DJxqKD5J@9dk#fWfN0XDJE??>er^L zCsw_(N?RvRV{nY6h?_Ahe*vzMjGe@H`hI z%f>#|Y)wBl-|vhBabySr>k8(1reWp0X<2KZk9#oM_c%BX*xB{i-3wSEoy^&Xz33HFefRCDDWt#vPofgJT>V ztT~LV3l_5pv+39dLN1r2i*T->P3q0Hy z-;Z(s;XnCb|7?{eD7N0EV^g23+Z7ta3WVGS9|+w{IaVp>8b`==&c{l4Zk+~XV|^yp zk?$^|(R{RV9IN>d;+?m^$D3cOD)7BAtxmIKm zN(?o^t--OJKPf9~ZL1`nXTgV7lDf1B=62ChNNK@G6lrENOSn>RQxLPEOeq@u#ulJZ+mEgOL@RFn&YPga^?afp_&tNBWHb=SVu4C)Zf0;i z5d83+XLQ1lG|zc)J=rR#)dqZkC4t-YAU^89%QU}48%0Kq(VCtYp;bu|cFF721r=jV zz(VCLjIr7%;~=%6GBZmJTkB3*JpK4C|MnLzDRPh|Aao9pdSbhYyM6Ss*b;W#=HC~o zhY<5kH=^N)3jxJE=cj-C0jDpnIXj(Gq;r;;8 zA*72X=dV+4t_0Hs+{|i}fN0>--RtoBe2(jZ@4JjIB=d2NEG#!U2w^!hv|^8LXGpdz z*Tw>>$WXGlomphSHCEc6;FF`@$o!6MA-Gi-7P_X8RTF4uyM@BBe*R@v@!;+e#|Hz7 z{EWpId_N-$7j%*cKa4=u=rqF*I~)%?oSw`G03qk>wEBE|Y8P6!gvgbAeF;wwOSNl1+TVsy|Ll?*zprPL~SK4HJNS^$D%>IKmUw%EIv!jSc z1+}w8JCf5EIqg=9Z^tkA;P>|E?e#f7FIi^ebrU6DfFlKqv|y6eYoYq4@D{hCTrZwa zm@P`CzdUDL_IUa4zT?}Uf62vHzvSYZ7jy{t;x{M!_^*8g-I!B3B|hlT8Yc8dJ>u>@ zzxp?0ZgNB0w3wTU(7>}NkND*CD~duBwfZbG!|whACa! z2p`9Z5Ke^;)ViS*p#S z|NGYrhI^!wC915@20TCE{M&+{&M3=@(dZDz9rDdLHJ|_coayUp>blXUX@fRCPezX! zFRze=q{tyia+01;t7EviK4G3Nn9pX&s%ANdAcnmiOFgaC>NHSv19nW`C~{e{6q2|%pxtXDjUunCmoh zn(4V7QaapBYP2x~p>Mh00+Ln;)Xe7-JY%Q|MK4KkjgOXsd|BW+hQVNnQE+}Xp)Lh= zVKoCKz)3zOC-^cYms=7uvg1V~FTHrW7#yDho zL6%AC+TaI1fgdzDLcbx&*jn`!m|Ei~gC_)@YYWGfg|5*G94joARf&=XQQ%Y85-pqe zBqc^_in_W5K8yj^aS7wdrff*7Y0(B8;aRbH)%f)bv*jfz8wWzY1|S>TTaD+3$hyGy z1c4vgCaA1z16){N-wl<@tk)6Y7=j264?FA(TJ+iholZb2aq&Id;F8L&Ypu4S(-rLR zcewXpz@58&hNGA`fxwe!v$VP!VfQ3e1=M9gI(3;|E6!gPsLI^Zcyxw_4?Y_4gC8EU zw`Umipw|iLw*yRFadUpk)$4Pz`I0I(lyB%m-u(D%R0Z_AK1%A_n#E>%6Slw$e6-`@ zdJY(ckeN*^7kaI8*}mVN0Ew-p&jyG%ctPWaJ1=a>{#m!@bMT0U=~7bVo1c{$Zf+`OWlpvP-*xCjyU4soDuuw%Zu_WOQ5WDDpXqF| z?v{u*G(DIe9x<8%-FS;lSzY%oyTLOur9jL#mb3oI@;}xY3>zVOrysJI<#b0L^TiF{ zJU?T4Y1hT}$d0&!AVdIO?66!eI6b*0h}u+nPSTF)_XlM2ik?)+LUXO5T3C^0G7 zM`V@DKmQlM;^bea>vY*|O56q{ZgZYnjkU3B6J~GiyzY9Vv;Aek@Bh8u$B8O_`C>z6YZYv#LPmCEt8;%H*+yN!$*|azryd_i;pR_l!5dhvRg3=jl_X z)ARK-M5~&?4(uIu=?^=6_UkFrD|q((E`wp8|M7qNhGGWkc)31r?!Nmy&R@RbUJ_7G z6<1@;GOhX5FD{sWzCh>MhI+Z4fY#hBuLw-QfRJI&<7QsdYD-#i$ko-Dbde)WK;XAX z(}JYcWT;4xHFQEa*iGmTEZt_Ym@}O$DVNra#dSQAmPe=W5k(Fsb47`wYR=*%kV!!~ z2Dz}#M$%-sZiF8txM4(%LQ&)TP-H2sc7*2{&dy&k81`_JfXS;3ozc?rtTu4dY|%(v zB0R%zw?|eN=u+c`E>Yx@=L_46tf0!QZG2st#!V<7Uux#Lv<3!Rkfu3TH#tF|34EVr zI>SMbFEmwF;R=`8WJWuQdGO#q)9DQ_Uo6Qo$d(FO>D!$7S`kD(MOxXZvUYHc+t@nW z_YfG50H4CtTicw#3t+g@q-MHAaDQC0QZ4bAKP<1Wcw2CX*?%*@9kwK)anV zzL;V>huHO*mMK&*ymusP11HzYC)dOkaf0UYc$TKb>ZN<1L9!BGSytX zUTlH}4eTGoM<4I$4la_+-L2zpa>z4LXNNSQbfTZc~c4 zY3T^TP7pF|cjyEjuB^Zae6gjmQ=p|r7)z5Bs+lx9`gX=ibMHD1p5qY)0fFb?dmdrn z5{CiZPQu>KfP?)u-Cn_9C>Zt~`hAyv-=)`e>9k#1iANl{t=GQA{X`39>3|s9>Y{K-fS* zqigE2LP?ug>bnw$8Yv}OD)Q2f`}7w0kW%CNnsjOKeQUAXZFhP3Jf*4(-F9qG=)%&F zv`WcKI{|5X2}u}H76z%*E%4zvaCiWNHuxpT(k3Mv?U5*lxz5(0q^LC?+<(Ghug~l2 zEAkq4h7QJ4B&`n1c}{v$bMg&zy@;#Rj9*;dP#Ez1K3Trl=srxezQ~~mCItldMjw%7 znrdZ9+I%R=NKURN+&kD~x>&yDVZAC6FVmY%=;78aaR(d>I{f0#zkX}7@bTYzKr~p; zKQJh7!r}cs51-w`ANHA?E)iPY8jr3mVYe1j)qs!tM={4oZOVMk$@7wXcZW7vR>Qsf zLvC&glHQEJ{r7&1tY2|-C*c%VKo1FfXpJxw$OqMLQhdz0dCM2ru%;O-0@Ce1!qogx!_7VX;VY zv|_&ndjp@7%bGH`=TOyntae@K_w8o3`tsd9&|yQkvRvpAf!EA75r(C{0Z}xQCc%5Z z|CI4mVCp%-5$mak5Q4#Bi%b>#;ExU=Ua)(dpoL^PwmKfh+YsK{hNE_0Np znWkV|2NAS5y!Q^nhaYfxGw0rudrWW67z)@);QNoBaQSM^|L`xq;Isevl>Bt#f_2Nq z4c-dJ+Sa!OZh|t)H`9#}!S+zZMRx%^iwV9Mp&P;UNI)nAk$_NW9<}x;>o%oGdHlm&qT?JLNsjOBQKy2d(`(*)a0fM6 zP-^HIhrB6zW7DV71+&SLFMs}ui5qaRe@M@bSX@jPpXOA>o0Bz|6eS1AE~U(n5~9%n zEowT45xbA?Gd;O(fLhWx1yx&mnTAq@?HIQYengc{LC7t-qu9#i*a8*J4M(6HFpfYu zY6CddKfCq2x31epTrPy2f~@)4V#^v*@c4e8mS1o)TdYAz6uTr{!TpDav+IFZ85~-C_hN}jSLc{nPd<3VuDmvi88wrl z=AbVqQpwj}F8JzOsB1%~)uk#zrZ*{`2Zsj%_wVh}>lxgj#`6^tO`etb+Qn3cFzn*E z9kL9RaY>R0#}~wY#r50*j}mAj@ES)-Q9_bJl|fNt5IFe#7AA6#lt@ugsS4LuTu&Fc zK?|HVj^Dy*c`RNp8&C?4@f&`=S<{x{mPaWit+qk9nqr|auEN148w;iIjKVSCdxlP@ zMI3dQOe-!Yd2^l_D(O)vE5KG|O|RQ!I$bck(d>`x#4TS|q|)H3igq_(na$8fvwsj0 z#tucLP?B39q{^*6b5+>4MNFw}0o*ZN9HW_&V~n5|CJY8$;Z z-2lDe9`maulX=eg#e(abIh8V0mE`*M1i$5Q{OAzRG4ukTt4T`H0FENpJ!BYwSh|3NWgVHWTm;j7?b4%RjGb=l+c(}OOYffWPQB_;*iQ@@e*R^?Pb&c0d*M!zA7AbKUQkE9Ut-PvSTs!U9 znu3HuL|K(yFrJU~Hxz z?Y5!ccL+m6T`j4L3Rzn4;=0gk+gz$UcYW^M>yfksQEY&UET564%SI1jo&V~JM!VwU z(4ojZUZ31>c{X2vxa~gt_@_M{J?;_3Iff~a;yQxF+hK9-@a1pL_|2b7t}YFMg05q$ zG2cmSGs&p6K7ZvE>U3{j#P3}cd(pxqX9dp?6fK&$PdNy(NAs-khgG7hS8s7r^k5M&FNY~fH> zo^97QHoU^|k{vP8)gr50$ppe$#| zdX7>v95Rf_scQ>9l&%Tm8mVlm`HFJ2N;D6Hn!s1cQc;(Zveu3EV*@_4GSroBMvsO# zGL(g8K9?9}n9XWDN1(OA5A6rq3A@}mxJ#5kr_80&M{lgN!uX2Gi>wd;U1k%$kp|7tMddQF73o; z*zfYr!>3HobE?Kws?s^nzdhMdK36VMogwf2=nl!iQ0NJ6P*IgBsw~(a?lagq;^Moj z2GDZ5d%7-e!nKCs-FFXhUB%CTG3AHfzsKjly|CE>b5aa>0WKhxnnxWKpnl6f)Y|V>Z8G`kjFYPG5uL!QNg> zZ@5cVX@VrCRuVr9I6XVztLG^{e*X#WV23Y1{f^%*vd!jw%jxYl=!k$HzI%sdSy0^C zgln`}+6A?Bk8W>BnNJY{{^bAg$Am4#i*M!#VVF#3T>L8K>PCTEQB{g6wIP(h`HL%L zmZK`o(f%I&pu@?F)HX*%X8GAd5DIXG;8Z{^1eL6qF#|&GyuZuf$l92`{O*Pqzdgqo zxSGuQaL^&mO2%7e2bC^tNSux_WFYV6Y~h;@c`8tA`(|f-JeE~vX*dD= z;Kv{G(GTCJvzKu1!CgB04|x6M8OAKu;N!NlN|R_TG*x+B*#h;WKqV8m%MWwt?vaM%(zidz$q(Z0+6PJ*aPZWhJ*ccg^* z)KI7yLijv=_YPVY%x5{Rq|N!+oZ+C$JC7gp^6U~PjG0U)m_nfn%}oUf9mZ8|DKcx2 zYt{xHyx~TpjkPJxQ;-==Hk9_J`yc=U9i$IqV78}#W8yBMdUk`>*~fNZG{ zG9ZaYeDTFKCl?u)pty!iBT4dk^^xQ^`{tJOJJY2uc(+l-SIv+Dwh zqOK*~P6t_5xM-?UQx%}4$1>HNHG6?)0&BRjHCai54sqy{Ef)BWrR}s^EsDG%_FX*B zb~z@dqC^@^Bm~2~0rO%)5F6rl%;#U6 zP^NY|xxc>;!n47{2-^J}(#Z@{*|q23;azUNyFyAsXVfN+Vw;BJNBs7)6FcoNhEjuT zA_`qK6t_3PhiUS1+#yEgY-fDiE!{!mA#eypfYA~Ov?7;wyM|71C7>8gr|_Ipe(J1 z)%7gx*>w!fFacG&cy0%yV!r$Kf^=4|&&iK}(&fpsF8#iPVTmz{!0`~;LuNi-e{#cD zpGNA_<)h4-)VUBBK@S%xGzC_J;sI>|$NPQucRPfEAqYK^ zIHJ{w>G!(ydM%PxjO%(RrIA`TbTtS(h!cla5|ShVQWoTe)k+6}M;Q5NB`I>lGIQ`< zLFhZUp1XFx5{?7Lqf#z3IuJ)RIuI|$aa*`f+yIb2`TIXxcQ@H~xMBl5oM!q#!>?l{ zK38vmk8RK)aa_5!+Z7It*xYFVNPsK4ILEL zvhG%8F$1%(18b90RyDG&P^!WWDvYTqs|tj))^NJU_Y_qnxfx5QQ^hh@l(hvOrU4#y z5@Pip_OT(144z{+Kb2b|af9o|IIgBUh#Bs5$%~A-&QV&Sl%Xn1M#B-)`J613;Mc^l zAq+gKyk?ndc1L%}FAYmolIfaSL(lEd>H5r;HCdkV^8A9V*)S#($%}6$T%63P(~|KN zMg}4Sd+i?ce9ppvSLb~6@jc>x%=j{0m9@5FVPu_X$k0r|z=!YL<#IfKYmHmV3|O$c z+vnG%wHe3Dkc=ii-d3h<^=vJt!6uP0A`#Nnf33SF>Rj`2K! zQyY9K2qfH`yyoU2qt)4^u32|OoLfMojSvft4j&SR4liDuG9384cs^lTLtVkgKRzN( z1pR)8`$u<4Zx)=qxL~=gIX=F}B3*ELKBid0BCEGHItQO21ECnjin|9c<3&m2!=!@A z>x?K?TwTtXly7qf8)HB)`7Juu>R+eVH@y1hhSRG#aTs#<&JnxA9fBmGzq3c2#AuaK zml_dkF3)T3wH>0u-~&&e45@X+XRpQ-3z!#{?kJ^M2fO)r9Ee?VCR{Qn6UCNrcr(&H zI7*n$Q}RXADHATjF^u*Pm`+|%<(eOTe2;QA6p*ec4G2o18j7jrDmV1|_Zf7a zadra5&H4KLSIZJ*Eah&5OS z_B#v?k8tCd(9`(c4wv7(-g3WtgC@A;7i+JvE#1a$k9!}y!{7Q_f0O_0fAtfdJ&`=V zqZm0;#6%#4pyfaqhScb$DUewpA_9bC^)YK+vDgM0tM9G$bpucw_8%p@|NbG*9zSL} zS#mi}8M$pLQLp!wdrt;@`q_+czn*aQT$0xsR|TBD%&7AjyMvIuogI4ZA%osA7bjD^SfZJpSMTyLS(He)b(fC!*bH+eC4< z!;9}OIlC^oxLIs6Rkr@GLV{Zvd^aQvLW;7Y&T9$`OCyLF(05{xIVywv%5d>r!64Fd|v`wYR?z=QA{N@*|Y))%26b7 zOz8V8)0`qVsM_V?vSgW-M8;5RgVd5?cf>N!tjU3vWJQTgOU84B&Mb2&O|84t&S)3U zkCD12juNgXC9Nc8KC}PcZh6Sk8oqd;ux>{PwA4hdL)A3Ucf2Ev@>w#o(~q5fq+e2z zle9zT^OVKdtV|xsmrG<-SwfBRaiSJQYBhl-a9LbT?HVKv-MGVUcLX&&|Kg0is@Fin z7$|hL)_c574K)oNE4RSIvDbCf9a0s|b0{=6EU({fk+=}Y9>)i}EEYFhoi8n^G_#X_ zS)27_?oFBETT+j0E9jLFy`fkdp;1DkxAc}mfGY)&2c|OAOGW59IJgvfjZ%h#QAiR7 zoLwz%g$PSy)9Yz6Jj`EWAhZeX+h(e|Tj0aDnH){HwIeoGxsHf&oaT8)Z9RWm@3Gc0 z*jRNOX#-575TY3RBg5WdM1PpzhmH+>6bi?MqEtkYhwvcFG_{5#iHPC|2od!VU3Pi> z@|ssK7Rbu3CwHE}PyT3+POrxGmS|bv7?;TDqnB-7f3xJPUrxFDPLVIb(}qAp)c_E* z!8iu5ouC4rx`IN>H$K-!%r7(vu;)138FlF<4ql+~V}~FL2-^ux;4v>Vrn5P-Wy&H= zSuP8dbSR1n!=|a*>2&FIdw8zL>BWSsFw_!?N-$3)rg9liN-8bvq+2;?TVl!X zWpA}Ija8oIz-kS?6BC6#LO@xT%w|iZRLI(Jc9t<2XOyL4GR;^nYD=j~4cBKii)BTt z71L=A$Z|zqDP~!@?#gvK4u|);Jbo|6n2hw=`u96)eT6{PkS^^N-vb^!*rhHqCb=cw zlmtgfh!GJq= zM|68WUQjaHiwVMjlW(&vV4}g1cx@0)&R_YXXUwKoc)DT^=l57FPuIC6J~o^$Oj>;KlaF}v>=-w2 z@uCj%MS+o$J9mzF`2PER@$=vOj$%c;o%r5#7=QG^h#&s=K8yKxyngvhCO2R4)mNX< zjSJp?a*zET*hw_g8_n40h6b^kbl6bW6~I`5kB!ac_9VpKyIT{GGMD_|`^S9x^UwJF z+X;?s!>i&r`zM^<+8!rg8TQM@%gV_A`95rg+bS2Z*WX8H~hOl`}tbq z;TfM$w^``y4a@Cq`qcn91afQGv2~7VpzZk7Mxz9D0w@&(iDB<>he}qA=Mz5r?YDgT z$tBa9DbK&TX1O%C!Q&ekXW$Q*&ZeARFDT|I=V`ePhcpIeG!q*msEh(5C=HCyD`uxl z`rQO@@!c3x8BC_}3y&}V;+)r~b#rYwYrs|2hDZp6Zo=yf)FqUqp{xw5ka#^y)ynfF zaU7tuq{uYmnMP`}=BsOC0og2TGO6@t3bL#f4@MEAoe<+FmZfHzfs_S!9@+?$He^}J za#6E0jHvRO*+f$n_9%7YHV3=MTwdKYIttU+%(s~6F$Ie?HL=wnu_z~Kqe+q&bijO8 zttZE-pAmo#VD(r>U2W_$EOu`dHwR7>-nNN{$}lTwf%T|@}b#)kaj3Y zA}cJ<4Mc5+Qr0xaSdIKz6AG6waBcI{NanLSjte_G2~yVNnRU?;P17MHMjE+g5N|ER zEp=YpaybWaj6@EgjT|SwuPb0BuW~FgEqZxLRFSbX7yVM-hv2i zQ$IE-@3(3^vz7O{ohI(C_Z%TY3qYLPrWKCUuxEtYa$Vg3jg{4I+wG#*vh^0wiJ?D$ z;f`VdAfnd`Nm?GBuR+vkV+(R+tQEAB3Mmb)>rmH*@kBCTRA}iiA1j_ezb4NuEo*oP zzxM|RJbE+$kx}F`LeC=*G1XFV{xaqHm)D%VC`rfQ)DRg%;`>y!W~!ku22X<@Mrbc$ zx-6KK*_KXklT#&{&nW>$gEmrTM6t(k)TP#nWs#vB5WbJ=hd926RGKu;SS%!2RiK4h zA2;DZRhQItg{*6v9Pezc*{+~cHLTsR?34iSKoGxM;h==T3NqZr5zA(qrDYIhAj(3maoAd}w5yBjv(^54E5yCsgGWhXqATS6FnV&=PKB#BIIJ4vDax42PKyi!=UAJ z`nn*DpsrocFXkITw($vr0a6u!X5@$DN>S!h;(=?!pNc7}$f1Dezdh&bRe^8d@x2k3 zlYG4pc?hCJ@abn?V$8N%mRPT=%M!l-&K`L==g~Wdv^xn^WeAfNC#Nr&E_0@NMzMge zK0jwxc~D7Yb0}it6BAKVu9r`ZVduER{-HyeOX?aP-ARygPL%kJ_WHa$TdXm)*=B5- z7N!YTGQY!-#Jmw~wh{sx*<+39IiDw&++ zOsd(t0(vSB-;L z#M#LW5_~aw}RaPq&N? zgrz+g!F!M1;mM=>h{(kVpRa!NEyug}==Khnr3?Ba!O^ojeEsvUZoA>EyP^&V!`)c$ zun&&|!G2P3I9l@JWyW{k!t0ZYMIm_l>2X|pO>T~fT<=_127pRrCLmO(NSm<(-5^iqWZrkEXg1N!LX>ti}U!RrH ztn3CHEvPX>z&np0F}WG@$)CQWNG*0LriK;PUQUbdAlq(Rt47CMTcNB<>KW47oa;adR$lnt;RA)WF_+Tz^xQ@p46t2)Dp`f3HcuHA%vW7x&y9i$ejQ09Sm6Mkx*K>^@8(bgeg)NNo zs$@1T?J-h@VlGLm&2jng$r1T7vWV0@V( zr47tnk&s8b_i@7xd3JNF$cqNY#2p{wWC$efc8kd*l3zk_y zQN7V0F$zQ2>~qbe)`&NzGPl3qmg>W3(+-Nim>nslej^m$N`-usd+*^q}4K==OZVmcR*0gsU)4*@QgmwOzQ<2BjQ~b`eDQL5si(kfmZat$2M_ zp=(3bgCG2)&3hjn;82jJ6I|nx_^rq%7m$H8hn@}i=w40Tmg$r2+3MP>Cu$_VQv=DN6^6@$l7M3xt~ zf!#`9(`5K{S|0m5ee$fpI9s_NZqq1o1%cz>yAC)m2-g}Ic&j`R`~TShLT_stVnYZ$ zuZ{bU|KvaW*?RgR>=oiTD;F#)P;rEAfQD|yUiJ^RHoL--c>(5j-wiIqeR-^K{5?)S)Od z(s{=82HKJB5*H=t8uGP{OOO!I4Fme45G_g+8D2Y}E+tt7Rb5b(IjT;r0PJ@RpvLnG zUFP)r`z#lddOJxQ=taA@%I6}TaW&6)=k7k~bcyS^bbBqvV!`}vga{tkTcWk5`63i|XY z$k(r3A^GX=f51DBdsK@Xw5<8y{remoAL2#{=hqXmOl=K7+_jhacBj*`f!S|NLf!@- z7{S%-f^nHr7)zK7d+^{xs9a4UT$ZI^ew{aqc^j7qC90;+*Jjs!OlGbDIJnoxxQeVy z>9pbA@g9pw$v2;$^8DMI+gT0{$UtH|$p_y*arW($Wu|Y(PzVr2>rH5Om2!Pr^H<&-aek6f6e*Kyi!_D5 zgD|2Q`Pt~ z&el8js%h}~^B3#)7~=5kSypgm&m&O?IOVVS+a(KGHmIOKA+pqiI&o^TvG(CNU(KkU(J zmwfvY{J7>1{@M;7{NaeZ?{@gX2On_n-V+x299+Z2#gtY*B@#kzcKX?8~^>L z>GdcY@X^ylN;#&8pmo$kdLCw3-x_2(M6~gkD@i%O;p?xj)`DZ|&D29Qg=Q-mP*(X{ z9Zs{=-L^k3*pH5>YDG=sHncAI?B9EAeA){!=ZgKk9<3NO z30YQdSy?M8qX-O0ZGn%#Ym%*-;-|K*8(P?$3D+^m3Ig9J3S-VMaw-k`!#$QuiE09K zSJ!VG$BcH{l;xaK+T6P&35k<7j_Z)LS|qImVM>xf(~kvJW&_emi=tvM>VXlAujf>yq2nLo>K48mp`C|=PqA;Y_=@0^ovR(tWfRMw(UFORvj_2YEha_rI7G{0E7$euf z!x(2v@v;I$Vq>ezCVy@%EMKRNJDZ<#KsX7)sTyGNHuY+?{)Zw&HM$XmA#!2wphJHc zy^2YG;>ubLHwC4N-vV}oc)!S@v%h~#Eo-W(SWiG42Ra==zaQiK zFzB^0x+bsn?MbyG==B_qjw6P{m|3b3!ohV{0fa7&=ixfu8hm)Jhv$WOuGN3|L4x~_ z|K#ueYz016*&i$4WoIQk7fryR*ajcXeFHpf=0`L6unn|kbmkz8MNUG*I8GmjBZPQ{ z5bfVB`;aL?^oC$b*BHH|mJ8})hLTfMJ)_R&^1yjio!Zw zX(>TV%1p5=6jejHl2V~$qxEQX9$INk13Z*6pggoTl-X7|pxRjHx}HHxSk9r8)(LCS z>yj=@WK~(S2MwB#`;Yb+-&|1SHGTlQ2XNTLh{`UNf;XjBUt7+m*;c(y*(yZ zC8sYGM~4A*<`(i>OzDb*rTBtl~1gS?`*|PK4AsuP$qj_l`KZoKR#XmC|d= zQy~;(SvAsGK{lIPuWRhFI(s#xn*_v8Otq+S@`~9doMoHN^qsvH_aE+1lrzpQmgKeI z!w=u#<8cFh68a?2 zc#WAAjpr6CrrUT{tpGkq0kwdmkHFi5J5TPReZh;93$h#NAMH~vmKX;FB{&JgogK!@ z6F~9gy$3`spL9|(Xt!vE1-rd2|N38_lQuaPp$NHme1~Z|vx|74*t-i+oO5w$!=4_$ z2T5NLb{ziIpT0u4F0-=&DllG`^y-@L|Ku6UEXj&F51u~cYCOeDB0M3OpPw^Kx@6Oe z@4l@X5wL@!{l*>}9t}d=jtyvA^YaZ{U)KD^|M!$H|9#5mpInn>x=AsCec)a<;Jv5& z9FO3~@9f|$=j?W2p23~a<8@kbeUonV4JKpXO9+ji6gItAlm_1o=(f5j8B(yxpSklm zrl_U_al!H3A@`pg(&`5Y*Wg7R>Rf@y?dKW7!2=(q7RYLXQ8{I%Z)LOGI`0fj^McR6 z$?5jskN)@>Zl}#mIka~VIk~pi+`*{Bo!uVe^D|6YvELtXwn#C+^>obH#gx&b2Q0FH zhwuCVDKwr}Q7&Jwn7-hXPrhO>taGleQGj-GH6<1clLD zj&rn83_Bz0WyZhym;Z)&nlakH$LRij&Wa4ZA25kB-uoMO={@lX?;7GG51mMYKExf( z^KVMN|Gv-P`CH#7%|GYS{UP~0{Hy!_kbd9&r{XWlC09`+1>_VS8e z7an~7fMln`)#Vk9soZ+-)nUYvDbm1vY2BZa$l9vv#==_}gJ&G1(ZorMyvS}j2GImV z-WeXV$QHN_ov5zu3R0Vzs2daahZKvA0f>ur!Ep_g8s-v;b>@e)0-labrZWXPpscH= zQ?J&q(J=|y)Yd}R7$pAs-&e;+mDYW0v9NoeBRrC%kAuS`EtoAcl&;r-eOg1%i8wfD zb9#0`yJu}@)e`bq&3s-kU(`&e1@m!Eo@;t7pPgPGQ)jds=tkfraGjPE^|lLM*l1D( z$|!c)L(Ypco5fldC{r<=OjyhdRy6ujmsBjMbdJ*bTaNSwFfE@CK6*l)F33_z67)EK zJx0nE;7|;L9+}MFn0~APq5U~yy?tz0Uu@|1J)+2?Gw3mw6|G*6(P)p!VnVglxBiCO z7}}kH?x0Urlw@^<8-(ClhfG~qF|-Z)t2VpKR+caVJR#VL;h+n9eUDBO5_*cjHPm^* z^XCQE8MGQBjoA{atfbqE7z_pkkx#jtlS{jcwIYKNny8hag^yC;c>w}JSvSC|L7iqb z0coQQuO}j6YdW$Kse`6ozg{bVgTpRK$3b`%nu2OI zQe0EFoOMX6(oOzi5L49}BVCO4nB1hieq~J;x;yaXL)bfR;W&`a7dYCd9SkUDaPrld z-~7d#(-W8#P-{b_>~*P>4S_MjC$FJa9z`t}YrVGI)!Tu(Z!AV;Ys#-M1R|gtdemCt zHj};cLStl2tpvt#aa`X{R?CXItSBobmx^>*09~4a@Va@Z4+Rc})=EKmKq2lb_KDd}t_Fq5&TU zjl1Q11zRpx&PMy;h(>VU(5_bCgNAlxH~F9eA47!m6d`v0(sXkz7lhGm@S#j~YFRgQEJd3Yg`us*I_suG8pY}c`;shbcYA;aOe1# z^Os*D3qz;VSlmiTT0TZ7YNPQY2$Ri%l%_D7F8J=b;+-cuOs-NEQ&<)-liNgMpJg>i z>8?c*<8oAknZ(DW|QkRAJ`9Fdfg6@2nkTQCgbuX_?bK3g!;km+?CuHP{o#L zfy00F@n7Mn4<9}1^3nYPx*qe%*9*SBF8J~HVqTvt30(NzqkX>pZcIObnTEgl(;p%0 zlto@qn36(BA}2x#d&Xu`;yMx2`f|M~hB53P3YLYYzvE)uimaSaRw+>&(CxHYEGL*6 z?maqU{~)BUQZ8RYmJ7;-V&@=2_QAMoxj>_b|Sq)pB_MS-_p69WKwmW^b=WzR3CS{@IrdA{ez| zL@9W%f51*VM3oCZKb!Ed-RJ4?eGZ4a+{~A}9$(xBAAmUA=kNS)ejmvMAqwssA2Pix z`S!*6dcv`4(%5e|RGGIEr#wK@5fJz`**o3?(Nl!o7MU!m&gCs$d)_2*2%zslw+rKi zA!^HH)Ba8EW@MI z_lde5y~B{ndEM075s4E}Xgi&*s*Keq61gr}ZTD(`$P1{oEsD(>BmWH!jWN`iP_Q%V zlch_>*JGPAqD+(YZQqkGG`W08#|D+}Hzf=(yK^L&iwqrHH3Z%7<1xjmbrL1-Y#}@os`heB@ZwH1}0G$MOhArBy0MFHg zzK3HZNfM)~nh3#@Cwm+n9S{VHDE1gn=ioqAESWEBk_Zm=d-$Qlc%D*7fi@mWyEsmO z)S9v=Zg=f(2^ZWA_*iKRg^R##3ShkjBvyHG!5UQ9Jh^%eNWuVmEx~9I((48!F?g;< zStj0kuRK29VX)I9YI%5}Yj1%~OLtul*9(CFtu4^d+5tRdZE0?Gp(t|O#BRrM_im4e z5BKN{6Y8=?mV(3^p!1LyUtaOqFJ`=YshE~lSdKC{${LLn+E6M>e-tv}MwQH^BGdW} zmq)WTiQO`(SP#DAbzSW>0`EBRk-B1Ggk@D|EAjV&2tSH22+FFof3ud%)A^dZ)@r-7 z+R$o2oIo5vzZVkt9&sEqo94H)AC4pF@A$;600T_t5^!+5CI#JfEC_Ke_;EZB&-3y9 z1kbk-Wl5!4ehOB2uwM0-+78ZOMT~k&yMpaaGZRuCi z`h{yHQA&bR_>Lrw6~-u3X@OOmX_mE}cKBXE);L^12qL7a%La6KTj}JnwI}miJa}-Q zS1+!Z-qZ-!CYbtBi11zOGJs*3R)9|^TD*Av1w~;43tLW%gHK*a91+m!b_rsiZr>rz zYw*DFVKRqaKVUG5$+DVa0d+3ORpTRWHgH)P#k}zhPiMAkzI*I(aU)q23%o#bbDohd z7q)ZPaVSfJ5fz2Zh<(4YVY7}h&KtQbw?Dgt?%pA@*@U3eC!JfWk-$Zx(QG#9mJqCZ zR#I$CtsfjbM%4~kBe<#?8dN9*17dO{2tkC)-f@?`!x0zf3-VGB_)ye0)M`%B@;G^Q z!l%EXra`82=7NW@F1>m?7mcbS$GR#6h7 zthskQq$+28`U&jp!+YOzxbt|x^`fF$`fI79!G*fm;^@AyIExtV`oytIU6)Ngm^M?! z`mK?*S>znFMhLCBd-RaWbFbzVTvCUe*XFVDI1|moKiU7cf23oPJv{+-Y%jeN7zKJb7}+%ik_g3ri>QlO2xl zczp8jFX;|bIvtOint3`$Iw@#Hl^VYN?Sk2*q!S2KWjLLbNMmSec(T7sQD1YFrQCfM z(B5_UYk%`8&klz4f{@R@es0e*VeozUJ~x=lCDO&ARWVWu89+ePIpM2 zOE3yQFyJco_Ywjxpw1=Jv83CE@BJX++4t|U^JJIrUY%NPvx#nHF@U%=9Z^c$DlS|% z=FV=&*>%NePjIjYPwofYoN219;_B-4EB@|Z|1StbkJA^w=70LX{tsM!Td?~eVkaKZ z*IoYkzj(DSw^wKDiWT@M2}p*}8B{!eG-PMLL!M>CeuvLLtGKfd?I9dJ+hts5yz`R} zh}%7ui;6)sBy`%;x~4J`=|NswW01kH%k<^~BQ-*G`P2XRYl?~B;cf@7$ho)EAr_j~ zr>|M28OniN7Q9;Aa5}r8cH}0hckAZeIpE;PXF5OQ-o3l@dINs-$v4)mqj{J2_MS3J zuUF&tw=L_|ym_nH8TMeV;qLe0=)Dn6yNz;OhJzvJ=VNP!wK2-J4Hg4~1DIEa?g%=4 z`?|H#Ht=k#>9EmZI8AEzruE^n2}XT0_XWM0Ttq|!RHi03aE+j?6E00fz12sML z-8LV7a0jnlVZ;L8ueoU`sLEJfnQtI*K%wwx4&Rnu#Aut%A*ICg!Syt8oNzOqTUNl9 z?n7(CA}bg-;eVUw?Y^{jjT&_59_-TTcS*-{d};p=PeSb4A}I_V{6KIuk*L}lcT{E* zHtJ(=8aB8)JG&g+?a&_txULP99#1mP&ZlVC5XK#(c33VI+C*p-A!R^SdE|u+ zf2|5lRT{=OORBQAU_Vy`K8!|v+DSlJ=3HG(P-V#C+VI_H*L?BI1?MM&7H4k6tfkci3S#NN|P0cU{V&Kx#>?-=JWP zLL667){^-Q3p$+D^uxjRye9L*#q<0ID22FQg6k!OVS@X=`)~fv&sJfA)^68=4dJ{Y zHs5l(vcew)NE}CQ_;-!)L*T5lK7{abL>I>$;P3>;x!Vl+|MIUe$Z#Bik|nZEsmeKZ zJwxdQT2E2+l)B21vcMQS{irHSyOPqTn>$WTU0Js)3qDjMK38-*if&IaohufZrl_~{ z9@;eEL!%UwbxmDW>tu5aJ`7riM1Df-$1ImQSC`kTkWh3D!iS_25{4d&`2Qdrp zm)T;0(TY8%hpQA-VQ@vrd{J^eu5djMWn4}#=R|Q#Ed}$rrj{_9Yi0|V=|oX2JSKIC zGy>PeB(w;Pk4J4~&P|mou{x3VU<97#?t^{KU(eXoAvPKzwh z*cn>KiCo$)oh7=|TV575c`7kfq_YLW-Non>-)Rvzidx%_M+hADLoQ3z%uZq}?m#e~ zEop}x(rQK^d=lZ&2^?~*sc}$^Pq-3>@w8;;pu^s72j5KzLwM)OA-zGDm#D|ndXbHu2`gcO@%WgHtWO$KpV3X+27);D%yKTw2ece4eeU9pyFZ2 zC(kv<2N6dHUFtgJ_y6E7e#_-*JjKvvnhQ)-0}kDzI~4QT@6_8gLw7JGRb6h`;chauj_3C+{;EPx$)F1;Y{adwou?=F|%q?%wCY z@d00d@q)p?kS}3xr;Y2jiIRY;afUE3KG$SZ!=2FxQ~3PyvlQ6~%`tF&J!3wB);?UP zOP;@;;5kzcc02s~-+#gNq~6qvN)nlxR$LPW6}uzDw^y1lg4d@tvt`EXbNKq@n43v$ z-OB`Ajc>TTm}11rB32Y((~Cni0SvcTwP6Z9hc+7 zBd#tlQMF)qHwJCj#GRdh$4~a?b{%pxqjQiDbvvAYHo=%4hHOK}GSH#NvA4rmFTe;M z-h-?ZC<%34@$vWH}qhgseO#UrKiN z23(wu`JexPr|jVp;ac|{0;;Bi|5W&BlcKwt-oY;OToJWLB;6sidByt=_Q;Ej)G>Vc zhaYqN@dKiMhdeKdT@P1kRGE{seGE0(vLN&!bOlAaBrqP1O!)u&Kd!mF5&YoZ5jU@H z@FXl|CBI$f2nP=QE;WkWF%1Rdc6zS`AuWWcF*g%-9*sB{cDXsbBKBKEPK&G8H}*U+ zY6CuQ^})?;*U}Yd9+%u0e)8AvFs|l!oe1r;7z_?Em8QruDk(69yhX2+SVx=TvF%~) z9e413k7Zg@WN+r#Y*BXzo4?A^an#BusCjW84{7_FD`E>nhGb^G34b$?89|{nu^;f> zyC0!zk3}{|YDJZny#MZ9=EWs1Pc8}llE7#d%guzN($Mz6wVoU#0c5pU>qT6;^m<)d zt%RMO9Tv-+S0@vM@KCjb)``ur5fRCt%h8=fD_&08_(6}jHKaQj(ce3yeRRaV55I>J zJ~yu~=yXTiKRUvcH53_@wmOK;Fvd+hq$}}5$@KabS(UCYsI(vy4o5pXC|Oe|O+WA{ z)K(izK%vsN)?WjdO0J7%ZD2WDG8)8mI|;8|Tp%>;?(8wXnK7A8m=@LVn1Dc5PQmz% z3lwY7xKa{7@bJS3FY1E`m|icqxt>v{)3pXebw0ltPhy&kxlQ1pgW0&JzCpoS zX*!~|;PGRR?jR@dYdW0;f)p)N>T1Dkal>RfCM)MCV<^g+*&=5$$ym-epYVKEasGP7 z`Q?I1S~8!OET)qAtYUnVb9s?*eqM2QQFC!oGroc4($c^N{e*VXLah?tm4heRy!>X& zXTL1CzJaW=4tS-q;vJy`p7QXN2g)T^f?Cwsu9MJw8#cmup`+utbLML;8* zgi0xdDG|bu<^@G#ypmOtvNlwDi82*Rm$njoBlSECTsobYIC614Y!G*uv7D#Ky2AAw z7HNSW`ec={Swqbf#0#zaU0Fh1*_wYXKyRiWUNil0J>TBk2-i;tgBD@XLVWT1|73(P zO$617YGp%RjM?ZuM3ei0SS6iHgiyF*Bb42AURRcsHX%}oK92JkM?3_={~-9l)FjCi zrAk!2psG@&oKsa(gjfI>vYb=qC5~eOM_o13kFrK7n{aN^%%!DsD2Y~9aPFYk-BGxK z!>iMZ#dMSLp&HGHT3PKj!Bm_3ZSmq(q2TW@FRnKioQ97mT}jS zN@iA`R^Yl_7E8g!(EXD z#usU`An=Au$!gJU@(^6sxd^T+ntS;Ek00>)uU_D~&A&O2ID$dj4p^1~b{m%=Bj6hN z(ar;YK7O(01_#0l+57ztujc6%XSfYc3Zf5j2T`7^d9sKe-8)D0+99vM`XxfZ=)iWs zA3qyV7cGAK%M*6n5Bc)zZ#nE)7b!oo1=&yj>R;u>#dBmlLt|K0!7kk+?VyT`jBudhn}-d}~?on1ctR`c^;-P{(Y z2ljCic;va=-ycv5Nt7u1-7fQKNwIYJ;@49s z;L)=Lt!sP_!pLvhzBN%SNcsVO&*%Kq@QeR(v6TT~)2?G;=H%-W!~=f#v5%Lu__u#H zw^qOo96sz3`z|71(lVMd_joz60h8Odn8vgSgI)6cHLfw#rb7D$Q*4W8H}u0++vkJB z1SuBW|HJPw(FG2M4mn@nUCA2Z%w_L0fYmvL2 zU>N@3?|y(Upw}Ak7ysrLynJaXfo+q}F)d!3O%UJqPnJ?4pnB?t4eUoS!`9Xc?fF3t?3C{o%bLL35ClfwbrT& zY+GqoS&?yRN&;Y**hx)ZS@)*GY}Z5ykTC4UjOSNd%^QKCO?xn)(~ao%U5t^Gvc_{` ze7B1(!80y?6!ZG(f_af5r!VdM>Fg7j8kLRLRGO#99=rE@jLR{i1A*7#xBqh47)QX- zZWmo!y3DxD34vmD41~BP?oR?iR@-Th2I8F_{lSovm#@%Sy#+uFo(q9*NCG$;+cPaw z25HQ#iHA*;w@iff{sQ>4sZH6~yKc^pqzz8oM`@q*`q~1ZTePLk_XxYsRExL623H}^ z;tf579!TFn_`R&ns!9F*4S1R zq;r8*_Pnes8+P02bWy~N$0aA|SoVyxe8bkn{F7(@)b6dWDJFCfG+Y}=@Vy>EI3fxMwA;J5|Mma=Z~bhW zZsj<)wH{)9Zzmr%+e0?rzimP382iqJ2ytj5L=Q(iKsXN(ME_y%0T`9ydKp@!XthMi zDN@ala)LH9q{=9Z5_E;<)l^kQS+2qcSJRIAE$|_f!e~V;6-BO?P9=+(UWW=Qy=Akj zt>$9|KJ*p{*}iEFiSOe3F5iVri&yhnt&>>-l26`K8T8 z>>EMk4p>S{VbRr=KH=7V^~QM4a+oWuO{v#J3L0P{tACK#*n+b(f z%oZ7gVIMa%+MkRSbc z56`(_c4J>a3;5m#cX@p|XTKA&yEkH*F3AN*M{u6c)<9w?97+MBPKVcNdb{WrjnRN8 z5o*qsSv!J~a&gV#=6wA*_d4+5_YOHYI7Cz-k<;bs)r|QvBdYCbCse?T*OFiT`~|PR zm~rw+&g)MKuD&d|`Zi@Yt*Dyo$ zd<2R#Q;Y`i`V4;mZ$9IbPp(;}KA6f17=4%bfA9OWv|>3)@m$9?UIa~}#jNdNH(esJ ze%$US96s>4xW1sXBk)=g#s8nZKM%5XOVhis-&)_i=bdxrnWsC~*wxk5>Q<{oTQ*<@ zStc05*bXpun6Q!C2qc6tR0sz)cE|{a1w>%WVAELP5VUNCKoFAX35l+5byam$-SM1z z=5un~^Zw?wmj75^?%a9KElD)$8){g;imc3&!_C}#f5Up#`@YXpmqbxWnib5aDfhpX zA!@{H}(JWsH*J)qr=DT+B^o@tKehEb-es6Qi%tfH>RfI>Iz8a4sXT-pVWW z356k48kuVRLa^QG+MTj0K~G!!)xTtOJtTsqDA^a=v}KP+V!?)hQff*esb$^x&a0KJ z`^5shx;%sqJpJT^{mrY$RPycbeF_+QND4~YL=;wR+3HhDG!Bk|Lcl z9iMUX@{E(i5#!@2XNO~sUye9AdCAeq3tk@HXE{4TWz&lmlwv_$7Hjz#0&O&%t(f6n zpVlB|(BEKuIH6qH=OIsRcVW=7r8wA!0-;-t)=Gf_M@|7=tor8m`r0LSG z6R->De3?_E>Ds)6k3kUzJ+5EBO+`MUcEYiE_{LKXXNQ2+42ZgjxlOUohi~8EXI({Y-EA1AWdO1 zg5zTtk6=D8c=mL`}LYsPR?jy#S zcGGfoJ~yK;U(jvYA0fphVYMD8EJV=U^YzM7-`?XqLKzVWfiE?22(2U{X^E!LU}x9T zOfajhV7DU?0&^Z7>shxjJc%cy{dY6>VF%AWyui+a_+EhL1^7XL=eO{^7C}=1@&4c+ z`k8OqVIUhWc%A`rp79}2&G1j%Jm7leOkn3d&NCMz(wz75g-Fr8BtD?^*_|h^36LpL zPOSjZQ%uu#g_&ba4yL5cN~9>s@{%gAFsiZERn5FdZD&4eU9Z}&YNaS^Z3RfK$@BAY zL49GbtIe7SVQrYsTnb0i8vJ30gKHgcBE)WidJZ#(zK%iXDvms4OT@U;O=1Y4X z4flG8TA<5{bK|Y87DT?FRLyLK6zp7)(HAkF1{9h~7i31&2F!rbi5 z;KlKT!9a0sZ-c8hpbAR1u0!fcmZs$T+xPgvhmR?RKuJMIKubncLRqomTX8q9%jUu# zgRIvsTw=8VW9`D${(|7m9~mH|U~yXU?t6VU1_4PNlFcigKU^?+S@ZD4ksXSyAuJ@z zrD37W( z_{tYzglh2%zxV{q&^~umNTV4&KcuTth7sJldXu`eR*u`7JKWg6$LZwo@@&B>%Oa$^ zmk@7c=%{2_33{6vKZux)6zzBqVFH%rlCS>w0K*(rrxb-IPc=o6;&~7yK3Q7u-}RmmcIb>J{=wi0S?e*Ff?o?xbG#<^kR#)9oz6`g@(^n6X2hp_*qpt}KsEuYy) zubraygX{f-X<=89gBY&fin;gZEfSG1n$A#WLOMGG4OwnjE;WY_r+oU|_j&Q*b6$M# zg5!@5o0AmAhZ#>E&3Jad;`WbHD*Eer4&8GMf zY-|s?bN4P$5cB-m8TUVaOkKg=&OV(aq|7r$Cud9-#cFG9{Y@H=0F58nl=N1|R(ieA z5Vu0I%m(n4B}8$HWt#Ey#ixx`v#q{(q5av58ARRWgcOu%&2%wA8$(&teE8uboT>PgFd@ghTOb!osF$+iW;6Dp7Q)@hDNOIn2QSwTWJ@n zTGguxFakQeF~h9^!nXl-)b{e!8NzT|&>8xKEr}OP{3Iqy+K8Y_o!Kg%jl3|I1<0j2 zkP9(VrdC|EBSAigqv!C+`*8m;JbwYt58>qzq+=VB7)7=-Kr8F?R%EX>F-R~;BbW_F zduT1KWw6#wEW)|?2rx#FrArvM-w7TiYsMsm!Vh zqP4Bil)7rnlrFC$*R!ow%@@?zGq!9R=r4fFKBTxwUf z_p<;YHNFJj#&=MZHNqDdV@Q>)*ychYJZk|S#W6^093=flfcVyA%4@`j?=@8s&&TsU zyheQZkxv+fcrwKE5`wTz5_bv1Hr^lnXMXQDrMzgdlHPf^V7;n(AQWEHer5ainmG?? z-wPp-#%msUjHHJYeWbj-5+8rFsNxXmO;PofsvM)#1g&S(bzyz3bxEF9ltqQA&qYUR zg+^UBLZqhFY9&5a7Q0HL>kHwrE0 zEezS*pmGQ#96n$0a#E5O`9&h^N_|`Lk!ujzw{9bs5}@sTg3;nqd)MWw;RZV!o6OP? zJp?z}9d@Fa;b4Q4#R4r}3H&(^M{Caf&3>P(urmkUevi%FO-{$B%;#fzy^!Ic&2)ZB zS;E2o26dg0rZnP1T(bOoWj)W`V+L*jOi!LUO&E)i8t(72og zF>LRJY;1dMA0*VmPz#S@sqLj|tvVvGgSllf<@oHBmq#x-epyi#aC)|6z9?3I$Jc)3 z4!yw^voxewWpn7uHDR-UTaO4x*u={*Mw~CfhM#lsHjuJ_WmZ5MM_@f z3^xWmdYDs}c8B5W{wACKh(WteF|QFu)5C^B1qf;?z(+SNX(AGAU%kTQ;d5lISLyFk zfY1V8<)rgDL0A)XU~{iWZ9+~Tq?{a{BC$L9Z3!*WCJ+&+EbPsNiwlWz+K;&?6jlci*e}yZ%EsFV)mya?qg>_M@J>LJ#=Y0IhjL~Fv>G;0*&;uf>F3%~ASVBQcxok%?@r{h)b%ycSQNobdL&tGxgIAx9?} zLM(~fH!=12!aYSnHwc)FryN%~$|#oEoUX2!mg%L7xfFZNY+FV?FX-Lrk#r=;3T+I> zhXwnacky(Gv!e;`y>pYQnv$m_i@9OY^NFH>bY7$Dl2#HipH+PFk-gDwZ(V0zF4;M_ z%Gt@Z*%9wH+Xpq_-7Ea$&%8%bPwDhJYz!qQXAAasL$2-Lh<`EZ`{I*=6v->?(xO1Ugw=JU*YyUH<6tP*=;enx<@5^RA#`m z5G<+58do<+*TO`5p%uSHL|YsD_)q^nbQQ3e9j&gJ>9Xed$qQaS zdIV^)s%~~EZRbEcev`5afjRS0$v1xb_mJlWDmSRq@Z{kXQ$Shdm{t2~v~s>WuYduV z1mc09md!Z2@<|u1_vXA|Cf^Ig(3<@W7+WLeHK&#du;NLZ4u?ol1lXOS%_MalI$ zd+Z+U5Xyvy_n-3Oac@CyyU$kqQFgR-%86g9Nk&}v5n ziBG4~V!lYJYJ=7SO~L8th_ms_)h#>l1%6<-b$6f5Z97YIb~e8x!1AUO;_Cigj1I_) z8Cok;Wupe{_j$yoOGV!NZJp+tZQJx=A+Mr@pmj*A?P zwYJlN;MUu_47R#t`IPZ=hBDSv;f;GS{hq=LG@fS&TM==qh4d3NKC`1^pjx#!UhHQD zjU%I6Rj*e;i2=O*cEDG@c)-nT8|-Yi=ye34Eb%JamOYFkHd`^rX@$z5+lGF(M;rwR z8K9M+EY&4*nN{bAZd}8fg!{`I%Lc8KT?f`aS*A%BHS<}?Y*H|pR#Y{3+R$sojoYf7 zkt!?5YP)zZoA#?nC*-S{;fvpMeokm}`P{JQ#CksbxoR+%IuWY6AWP?VSJ!VLRCXak zB(DgL&-z$_R4AeGgdvGrq}o<$YGaQBecrw$L3@HA4D5^VXJWnFe=RbT8 zKk)FQ06z>!T0Th<(Q5bcWK0-#2!l3BtB3cq|LjkH6VxhT@KUmQGmP%Z+76sIKGCau zkCp3{MBpPt3n8rd5aIyFKsmn-Lf&i!mjC9dvWH+M)YTZJW~ge05CvM5NJ@k*S7C!n z)o5L=oUYIc)wo@0tzH)&O~{}X9Ga*Z3aVEYyNw9BG$ho*=r%?#R-sC{M&oWz` zGN8+naZ&JMvEaRXR~YQH2!?`<>l-XpiEhH$&KD6`S*&)u(?!m;TQ~W^2OqJyoiONj zm`q0mo?tla5QZVcjRAF)vPex6N+eK1d}alt+ZGsdLO-&-nW~~L?e42mDPdG0q|KBV zPwkDjztJJ-wW)V00oFZVgDf397WtU^KfGJ_%z}Q>8h=Gfd~u z?rbs{&H4J*evFOH0Y+s+k;K#$lX1poC{PN{07T7BGNjvzn3U=H1QoNRGen*?eV(yB zN1KZROGu>P_z>Q>wM}3`_BVDpd~rfu*dV1?MzsAFBbH>MxY!{%Z!MC7o7eWJ%#y15 zj6PX;7r|5OztJ6VV}FyQ=P%eCbU3)uqTk-(ZG_r;hW`KfDMd3y`LEjWFat)BCmK9F9@ON=(|qO%iTycqHH z$W}b009}m{Ubwo^-oV{~Mp2vA?s2E=uas_BqF)Pr6h*epE6WL#H2d`@OI8?GK+ZJ~Nyh z+3Xr`Z;vZ)Z*${Iw>g@=WN$a2T%6Di4gJV){Opvl6zukIB21qTzx$Hy{vL1Ld5c<4 zD6*OD=M|cTnNga8UeskeDd{AJrz6fjtj#E&{y{q_}}JR6}a*dBC= ztAhPOL^pz`OG7CHJ3_G6y~=TYxEeN(1sG`qzrOnQH!!l|#n~|@c}g8d^m+rXU%f&$ znQ;8kV}z*?BDY(6LUZmRBLrOEzXrOd*GWi3!L9v1Z(ZM|B?Yr=f)+Iy8WGlf>AgE_ z^}0Ox^y5{Z^-7?}K<%$~D9`sY%GztJbeB+NJpSH?Oh!5L(VEqJerf@Zc+6^rKYKX0qC^A5hT3%zV?nY?Eab+N?Wn zX_N_?|F&u-Kbs7r=6DxIAe7A_ITsx(hbb8$Wg975NH4UljMA)xi4?GVD`tDALy?V` zPM2U{Zwszp?GkwvLfhXL#tH3iA5F;N(Tv&Cvz4o#F`sR^a-McB1SB!sxCvi;&*R#G zN2|5Km=R%I&~8cmuto-kFoqz}gpr^VC@cLHNLk=ZgOFAXdA@bDI)5JHp@(c6+FQ`w zGgLlo?QAn&)YL_NsWNZh3)@LkYjj;x*BY%PiR_>%$!M7q`hvWM+8Df`sovza4bNyO zbwJ%zJ=VpJ6(DPs!PlEH2z(!7_>MWEjT<$ z886DUWb#);$R(d|2uz3K(rib7G5QrTV)xsP88$xl`NihFsqqPDV}ooG0SAMCpf3pe z9*b&DcMy@Z0y@Js^V96YYg=^f;IYUN0-nD(LoO37qg zHxWbU8*uVMgf#byR-}j`NjvG|;WHVX5qg3s@Gz>dbxbL#>xk*1CW<|F_6`_qZVHxx{q5ad_O5pLiJ$leKlYnUBVY_<1r*C1FRaZHAsgXoDG4-1+i0qs0rhx4L}k&0CCK9x=)5mH4>mCpPHp1R>g7 zxw^%4G+l`kDM0!O(v(O6TO#4zo$Ks$J>Gj`hr74h>}>g{B4>Mdlb7T1S{0-bA5A+# z_TrS&(}Ma%%I&xI**h4p99Ni95P1=!qZ6*}@A1)xPZ3(tZV4u%iud1FoSnkF()LbTB3n6y6Q#c#ZzHGoKH?%le^gAecX>;L(JYyr~r`PMHV^5Jj3 zw7dIxNV?3pabp`@Yl=#+fBhOkTQVA@K4r7iNC0DmQ93N#AKp)%E__CVVA^YZ@<4fqoaP>}`v)L(WA=$lhhf)Oe zhdV?;!s*Kq-}|NSzS382Uh9pXEvFQ9Md%5JorLYJAtxu#m}eO#Fw84WC4sWy~tKiJ=Ck+c=kk131l^5%{T{7W%=5LsQ#;w9*iV&`Dr-uTSU)Oy=dK_My*u`>aaH`C>jW z3WZurbP*Br%x6n!(4i zWH9W}AGR6nba;69F-M0Zre`IEDw$8um`qQ2@Zb?e&RW$Y#^5!T7_&B0V32`Fuhm5; zL#Ar$m{}^u;{{<9p_IapJfg_Q4{bH4t}ld4Sy}g>@wnjRctX}3N0+NahBTWonV#A? zo2Hs@xgD%(MDXR7+4apP*|d?`0d>29W!ta1NU57)Wa}Kd8eHzetuJ)xbwje{8EIOv zF@Wn=dUQJxx~Lc(7WhcQs7F=#Jby9e;rkP+N%eZr=cPXFi@B@4O?dNe!dq{)xN|#Z z&<81Ubgj5@u!+%z`8;Kr8-frz{fMaJ<9UkhVGrMAs{wYU?0j1s`LsJR!;Kb$tu}Yx zy27n{2W;&m?CiJMzuIGWs}FUHm(NG2;-W&a>V8ogtzxwH(MmR(*9K3tiNiKUmV#%9 zTQU8?CVtpwwy0U=HA+LRBh=cQhZW==TA#1&;zoEkp_Q;U-vz$W36muQV>lEn7ByN4Yc(peRU$OTaOqN>^6yv4zlTO^$h!jJgD_wTbfUapDWRUL#hTM!_)d3%$S)0FXO zNxLVAq88{5Klt7QKK}H3WVs?OrhMnS-?h=Zml9~s-){jay6MmL8ZmP2>lFz5ajk5V zR3bEy3^`sj1CQsv=hl6X3OE^;r1J@0AZWD>aU$8=>{3??JPEton}l9~kQHgEm={Zq zCxz`;79d2cvAebxS7eQp8Bz-NWSgNE@M)E^9l|nS;w3&J5csW_@nlJVDEP{c9H8H60(`d{=li-}bvY;`S&V@^#*RL;n7N$fh!>t1-5;%D4faSbke6+;NLzat-(@BkZ zrBmo)omp}9TFi|%-{$bi%Zo~eDe?PVLRE5Ovu3AXbNqb5%cBXycuv2Q^UjanVEfvT zmhgFgI%_soItby}D%7e;xu7?Q$d?n+#hh-d&)M0C`C?9*S4g#FxzN1%w$Jg2;_M7M zE!ZA{uA#^cCJHHL%L|`(19!gkGc4y*$Wv+s2g8_RmeX#v_};fBh+0r(FdJ8Eu67J^AmH)Y3jnSiRLELT*DyfR>+SMj{G3UZbMw7>?A+QX zS0%+fL#&pR_B^Sw0tFn;ax}IDX(;Ub<(j)wPe39h2Uj=Qzp;&xG0URQZ+!a^JHvfM zDR}(JGrsqW-?=;ovc3!a8A2qhYO<_gGMbQULwn1oPBhT~?!D{N>1&D<^2)5WD+VA+ zJW~=RhOpCOF)1#!pPn0AZ1~qX*t^Zyd}-aGUfJ!uy0b^RTv)?YqpTPajmuXzBs*IY z3?@cFsqD`b9+%?;!6uI zZNQh-^)8VDPkWrpxr>TW(~gp5ltoP&2+9gy!Oh!4y8RZtVVA0!v$F@n6Wq87U;Ww@ zI_(^<(zMzhzw4)doO|!xCGLAH>oEscH}G^xHwn0Q{VJo;jLEcKUB@LpgQSbDYHH4} z@Ahk62adHE!1!2G$mU|c?~H?NSPyKiIkP?>2E>21zS6UK$du-#+Q)9 zl3uF|N-!VInVwasrKHN*oE(?j|7gMDOkwKRD}0y!&b4yLd-o*wZpIuO#I)mrx>%4c zYJ3Czc8~cCjt>i-Kd%{&ZCg;>@$qAW^c49d!_(FvVO4#ot<|ZWC1*EPEG`St(e5#{`H%e`KA@lrKPS4~@%y>8}ZMknqt91b`dP4U8rS|z-EnX*_c zRvk1(i^jM}t+g4OMtq!C{;JOm#ay+F7Iw{RDr>+I#sNt?LWqh=t%(pkMBGCJ9fVF1 zQc&eb&1-8`f^+47B|(ddPSiq)s&T|p&DUzAESrzT+WRI2J&KS*TPLhF@!`p)1vbyS{l|^^ly;dsrW72^Wqd%>qygugUlb z5VVl8k0%ERaT_UbTl>zxsd4kqKtQqltBw6`NuJw5oU$ya8kZ}j>@bg!6{@uDR$;8b zRH(8M9Zma{sxONVsSTCV#IZqmf~eJ^(uzXa-e*4yNxD6Z?~yBo$@SVi#>MU}#`=wi zzQ9y9#t5=yg;oKx(X6?Mdti1krq>M6Z-U8Q+YvC$Aek*WH^begZW4Ocr3;L8l}N4S ztw|c!lon8snT*W9P7tuO7t`xiw1ytWHxzY=Hk!IDDASbCuQ4@bX(Kw;EFD2`czVXQ z>)QmLAj=jgUDHYeyr6NSA+Wnl{e-+$l%-i!L(WA=yX6!3n$r_SHc#m!ZHg?X$|0Ru z+q_!A>9Hm)t=Jk4uF~psIUS$y?Ds>JQP>z#J|kcd*xtQH&)1M=Yz5W|RsxHrUb5Mf_^}}^tR3ay ztYWk*s9)LK>39PIX)A8Z*cl+-H$;)7$a4mr4fc2UiNcrk&%}_d8aGb$pZpbpjVpekJ?Jl?9+~MiVXM{b$WYn}x z`i9NDZM@KM@WxeIyM2zwrxZm^mQ|!_PLu?6`Z2Y?M7DhjRU?|&{o@BO`104kL^p2p zpZo{kY0SgyLA=?yNm@L*T=6hqwD%bz#H=bF#_YrD9BI2d z>{AvM&!3-C;nVLAdGYWG-}|NKoQ@0b-5GHDbPl!Q>W0tDg<_1MwY$US?z=oWUU2;6 z;cCG!IxBhdJfj_i6f?!yndaqm$^EA@G_W7Hxch}G98D)|_j{Z!6wiw>)%g%?H>R`S zvsk$ zizPt}I|myiVUOvgyqGf*5k+kisJ$>ic|LVsU22~KNY#Y1*~`WSC~WQr=QAIYB#OvY zi88UxAzJ-xjjkewxAq9b5UnKdfA0bFM>AAvXSJ@ryTu!CZ&DOfioC>NSfqxkfTRn; z^Dw5(%O}Uwb=fTX``o*Jlby{DXUAiTX2E;)>P@1~E{kc}4C!9pFau2|iRs5J^1NW7 z!K)2PJEp4UV9Z5+$od*{b#Dt-k6Sm@dSh5sJSr`ynxMlHy=MHjZF6zfuGDp&uM&jwItMTr*#Xd~@9W$l<*uX^Y;aiWc0RnjiIUYXam$9Zdx;4?BcE-D|k^-3e< z{L<%x4Z(0nu(=t~ZTk%R9fUNb%Zm9#b8=Mh^kL4?OGCPVJTn}QOBRdz_3V#zwQZzr zt25>5^7W1P-s0Zv4SF4rqQ>_mtt24|Z8%_AC4BP98O9`Zx;T7yjKQnG z_dNUj)^@Pp_iY>G=&a_$hciY;Bee37Cc-Gma$a%x?2Km*N1Pq5b-E}Yt$n*zTnUi1 zZkV;V*>b_zc!sKBIjfjX=2T_AHpt#=TpRs*n7^@{MnaGW>>}h{q`2B7H~d#4oBtA3nNyS{N)-rglXJB$DT@mHnp&6C zxplbmV?|X~R%t3lRW$-+O?-ID9tB0MF~Sfh0eM+cSB>Yg7UY>CTh<68iK7-6L0%M? z>S8E-eHXV%OX8?S5_gcwrxkTLdpRX93NWD^4l`pgGg|RJRekc>?uBWFu`n7*K)V&< zhaR=DZDOoaZ|%6P@jcs9cOF`2bw3agm<B&w{@G#plaMb7p0~u z?J;CDjHfwO1zuAYo)wU#)`Iwa=rZs^I{g;Y=^2kde%jRDA@&5rA@sViSZFr-g4@>* z*d1*1==lhZpyhQK&q|J89y2~WT$_qFpAq~L14VcCR?)x6^QZ=g^)o!%BzZKzbm?#>3PRy=z;Bb`?iSvwX(!bVk0E43h)qXC((acW8A6L`j>XuGrn(qZLJr z&qk>HVs&AT;a7j*eaJ5MZKQ!^aq>!k#cIXTe7X&*xr%U#yX^#CQD(F$7fkz<77 z_S;vPOlQnb8Z&?dqOPF33%A}Ll4m*7>AFuOAljUJ>*OU|8FuJ+0 zL=3u2DoxnyGM$e}XNLXWfFFG8Q?g6F_!qeiwE|gsY!3H$^6UkrGKBGf<$TdBFfQso zni@%uOwWmQkDZM@0wH<)$pcPb%mKsoTLCw(-6W1B-Hn+0kLDaUUi#yc1<#*9XE_^z zf#{m;$JV()S8#Y*aJC9fQ zu5KR?nUG9f^gi!&H@SCnpH5hiEpuXF2qo-nLaQ%H>p5vXB58-@sX_~zZP61@=8CGy zr~^m^6hTQijM>=QW^^*QwOwINB5DQ8d5Oxai=B+-_>F=+YUL65A+?&*YxT&>+3NWA zj38s;Cq|Mcr|?s9mEuQ&GCFnV4&X?gi*kFG^Z@{i#d!n5rQ-nb;U9-Y?3!V zqe^jnnsaR{W}~C278+AQ$=YCfbNw}V7=MUSS(DcN*}M2=-Ge>e!2~{30z-Le=1(Ii zfn^3K%ZmF?j#w-;s3#XV@o-6F&OjBfj;Y ze?q?0WT{}XtX4A`fovm?wRb!;UD1Av`%P7Wp zK9#YSz%@{7gYjx)Xsk0@X&<*AK+;YS!lSI})pMxL`R2`fs<`1Z-0okuvt1i3KX144 zq_TbfvO>xnDT7rOglIv3AZR5J_?k{TqAW|&v|u`g@feEbxdBl#c&*lslh<1K&Tj>g zt%9A~Mgf?B>Llgt^oT6aQMJc(Rxw*h3>(a55g&bWMyVo%ALEBm>jEJwHu`g}?(?@frBP%A9jvE)Ord3~y zwK-sK?c=rijaQ-=w0fnzSpW4qUS0`@w{2Gv^o;uNraIr0pj_-ZN~~c ze9yP;SH6!QM1+2uC~6Z%T|AlK{h>ed^>5mN^V%+SSQ}Il-m2|N2nhs8+D+AC10ioA z#a#qjzvY&zR~aAuf=x5m1*np;Dp7Sa_fc2WWsNRtl&+DXJ+C&-w0jgO^b*0etk!l->@IIzl*Dm_@M@H? z&Pf8%%!IV;2}zr$k53vCY;kd8S@Wl_G~~(-B=-9uNh~QUO<6WpgiUMH`MyX|7Cd|Q zn8|1i2zK}3Cx84+4t9LXV#&rvmv`R1OLw@z(cv*qo*a=W`!^S=q%8A`{j%N_di=x%Rw2Akx&*wp8I;A+)g@u(=Vlz1Ia% zv0Uo4pf~%Nm)U}<>FFQ#yA)-Kpk`}hgLb<|x-2LPjgXQk3F&Nf(V^h}lY(qfHaC&F zc}uJa6!24j$B)qJL!oDU;VWO_ov*%wj;tN^cCSZJSDZ~0L1EY!4k(4;bU8&wFxcHj zc^+l0=?(f^xw^~g;UW1n<@v`CnH^7f`t*?fy&IroeA(yGCntRHtq-ZQ%LU@me6;%a zf$)j7W+xaDsWuCipHbaAUu~4H-Jn_q-tOoW!S!vErN4#_I9;4};m(Ncxj2JE@SSk=c9&K_)>}*|S zk&YN{wis-Aj80RgXPOUw@RGN`bdORAo*j}QH zV{hMD_9_9&GnB?IXTugmNsDFLMQH0FlL3RE30ezbu-~Titp%=>CEMF=OqP=u=b1oj zI&gh+!$74LZ0}rc24NTEMS7_!AWXtE9skh#r4a(ml6*9>!!?bz9o*>h=Dj;Se(;#X z2L*fAd=L;PU6#uNPe!E6ipBbFzJXj%@rXEEjuVv~>FF!Ubr+dOrGP9i$vZr%(9w<0Ix1(3QrM32C0MuHm&Q(WXZDO^BX^q-7Xx1#E8hiCQt!>5Q}Ib~BS& zfohry&Bd^JUD~;sS{sb?(L$iKLinQD+=H?i;#b;$sFA)0zE54*R&gVO3+GI85t#Yf zf%A&^kWIkf#jrWH;vt$g8&BX#W8)R1hirv}i9%v$b&?1=Elm(f;wWS|=&--r<;wnm z-JLEQ!+?H2W_y31_MlCx>*ISBtrpz4vPC!W7|jZLMv$AjaiFT#&JxYSl#DV%KGU>2 zJrHd^esIRGe{aI4Pp6EgHD{BG!=sdwvlL}2%EB<4=A0daD&gU$aC&AqKCKyza^}m5 z$+YHdR54jpD6Ln*q0$x0B4?Inmj#7VmuG(09jnyq@e7wbV$7P^g15?K`%EEb{HCW! zUz(G>$Q2YAVF;y1)CurHgV*wjdma3^i_rnT5rk6XHx;c&LMZL#nR<1|{D%sV(zaNw z35$zLhu6$_T>OmJR873Vr`5JU;|GE$kwk(01$ExEVfkLucI7peyna&&3GkzUb{vr; zeFDFYlrcfn#`{Bmph!AC-G0Pi*dmSt%1TpJuVhwe&}B_kEkMnh1KPa0xle{+Rw`5l zvs|ER@Xy`03W2F1Y57!@4N>xiu!*zsB2W^c+1?zWRf%ZkV)CW^`Q^eeTWZp*UbBo_ zKdZ#0mV~Ma!t#AVx08^x1QJE41tY!o@R}Wx^G9^$dIwC!@$oTAL!7jE^5l?jf9HtF ztfFWZo-!7^_oaJuhCSkLo20)*;KNtHaEGT4?t_8t8!=z{;!WzsGxEutJJ*J6_FBY& zMyUm}^qA2+Wm(q{8)OI0meAjZ?Slv}R5n~kf+|av(+Y*5svFlAD zm$d%(d1YJuq9j2}$wv=Q@nVmtJK%I`!ynI`zE(GrWE-KEoI8@xcx{Jwj z#G>Ho`!9HWtdO4d?tXDHB0XNP96`71(+S)3q7L04L@yWQ(=&EABC^>D*|K@LYQ?jM zFL?aPV;+C>A(NAn*FxGZszF~BIVn4-C{{Wd2{D|l6Pg<_iG4>s7{?6VPfnLS;Ed%fefFV= zshdS$&NB%*xGaYV z2XCS!_;J9=@fnljg2%t{1Yx7$P&y#33#7?O3n-eKdhJ7hLqT9jdNIB24cglqjHeTZ z?G~|?%%7ie^yve(`x0L%j`MQ|Kf_+qA!-?BX$iiey8&ThFagvOyvRPWS{l4C#&{7| zZeC|}Is&;-80r=;5w?Ckb2Rmyw;fe&B$kzIBV0&d>i=4?Ep zDnR;@FTD3P9^C&vX|}jj5H$E;H2TtF?D7X@<*ZS-meDd*#=g%MrGTN;!NS`b(n2xIptKO!~Lzx0&6q|z$hW&&`hi4p}OjmZgp}#?Y z;|l3=z7iuC1BGCAGD2vB6pC7DY6Ys^tJXybKynS`@EA&GmX}fH5r8zkr^WtzsZxgn*H|g}cq-nwTfAd2= z{lT%F!2+tr$*`)ci)u%+&{x_XGg~``gDabOp~vybnCCB-Eaq5eD|O)>)+`7vE2&yT zsZpK{lRMuj7sf-?8c*7@T4|d5h;9~vcCo6e`jQRss|Ec_&&HbJhLD#XucVAF#K-Eb zS!fD_&=qvfiliZz@0i|;kfypyyo zhijERdyIF1PUBXlUKv~rnst{V_I+BN056u*!VtF;L?979bbAp=OA`1coyhL}iYCj$ zlLGxpyOofQxH$j!c_l-NOI44^gV6H`J=@*C5+B~VScU$eLljD+XV-ClV4LlWMKgeY zUj0~m^BVyo{Q%GN2>gg3Xyf}Wq~9h8+IauWAN}e#g~6uNdUj!9vp%fwkRrg7=b?f_ zq_~X`cYt9tcFcdJ%7-zEa(SQS!Zh}E#y*?E#|vT%f;20rGN^Myp4Ak~l6;wy&Qqk{A_`knwV*1kOGy~E zSk80O=^Uf#HD{CNMxt^S^9fq(*KWwMX%Puw6OH-obZtCI5_=4{I$}5a-?)LJ&0n@MTO8w5XJiF&>M;TIe0@?4W9>8cRJP z1XZcHer=CRDI_69RxzD|ss+YGC=-#BVCwvmcl9cv*9bdI-`qMXU{ToKM=$VDS`vgk z`pLkyyVd2ThtS!yKb7Sv&!53~0%e(Ta;8z|9SNSW7lR0npNtrvOjt~2EGJ{~`IKk( z@7wUT+a4Po&Dqf@TYbZggDu7J%yA%Jp4TopR&q7LgR(|KNQhEqQwX8P!s-6MF0fZMLHxgH{Xa88TgS z^Tq+a?f_L*P$@zw`QC5b$K*41hh2`(O13(1b?-W(`N&$VUf6@J?edyeZhRh^iyOwd z02SC-C(|6Tl6TPNr1_@as%`M<5WaV`Kmgr+xcwu2hBr1jx_^u*K~UODwSidL9&vyx z_d0y#$L?_R&JDi$<*!rMGZynX+dHr^fV=kw{K(f1xOzS0jk_HpzhJYk@fE0fO})@e z=OtAJtqtgH#zZYimMbQ6=x&9yH}?2z-#=o0B53Wx#->2)1+A7~GBN0)Vli8+S}V?< zgOla)MN5L7V(Oawc*^N$N_u+A;r)!TZt*l-Hs>*HHaF&X@7!cEno=~kD1%KWK7Y1@ zX6M%z5t?$f9P97i!)vwJI@loWLha||YC>sJmf4ifmf^-5d(okWw)k6&xPEpxx?I7RBX7$faI> zamf^Dy@C`sGb_@--j?K(PhPAR-^Re%>4cltt`LM7XXBEyL%>gwQc~55>B!!5dK*KG zmr$1)5kzQJvCJ~2^K3PTAq@1o)@M1(CP?8?Hx*ofTGf=bW|5WzMsxGlCYw8g;kIFN zrs?$sFHV-s^PH$1lNB{u2#oNpBc1^-j8R&E2v;pxpgKGMHik)pB+5F@j5N zhv&~l6eYxQi(aRVstR(g?fnk8dAq~r)+T9@^W@QU&d$axCOKuU=(H1BQH!$7$*RW9 zaaF}O$O!z{aP@kK7Yp(-XEaVZ8yR$Qxe{T-y2ZZ!jLOrmBp5M2Zpj)Ci;xnk}8>dmt)HsX8^AZU93>sRJLMDsOe2b?|F z=)?7Ef~)&o;z*%YZtvH^;7JcvRTRsVY+=_aRc+040x4;?+Js)r+3|?8;}p->7OkFv zy>3XP4XQS@g+1oxuav{Ga$S5}bWxnIdz7}8`>G1@WS7N4H*+W+lT49mL-`p2e_F>R zVHaI_HkewQwXa3il3HJ`XjowpG~&|3G)iN=y=r}c=Rz2kuZxe>V+xS8@I-_bIYO9= z&|j&o>!bvqnjjVkUpB4Yl0}|To0_N{Q<;jQDhU!FKWbX^5Cl>XNT0y-P*OCOx<9N6 z0y6Lj1tg&rBSspuXMaYliw_TyBqH>|n3B*JgrPMPk_UC3#k(b#2>}vYI@%StV7i zNoR_p)Cg&)l|UH}WjxZnL>qgul~sj8QES`Zyq@=wr#S}OepQ#6GB-?4CzRP_t@5E) zL+G!iX&V9f48%5t$tbZswULxm#=Isz;(mv~7kFV!x9=0T1ZkdAi@Rp?6D6?2(h-Z@yy%V*cn<>mH|_4Xc;l^i+1%cts4CJ$-ee())sXc05dGS^jXO66L{ZIhUbD01 z5e5-w$8)q6j7A0{?9C>KAnI5LnO3)Ldo2SGZESLA;71?=7K@B5(_FiLizI0?8qe&U zh_N@Z+SC``_l+x7UV#W8Y6XPd9#OYXDFaSs1t-UImX$y#y_!i8qSv@CU6j&`y5Q#3 z19VpM?e83s&OsD&Zd|!azuO}S6ArFlp*`&2g@*kb`<#wWID9chnUbTI$2|S$gfz>@ zXEq<;-RocD(a}?~8qVgEwK*U|Ko2bn1g*6ux${>!1bp`C)1si;wTaSMZ5U!0aKNH* zYSX4=UE2)JP^ldR_j+)!57*ze*>=N&KEfaH{5z+wU0CupmGgxky~-EA{0)+Di)>!7 zyS+(OKOu<}-FAz`e9rOl2wg4kWr!{`ds`c*G~?qZ$}XybzOgd~?O{b{w?#OpC?u4k zW?m?so)oYxc;ic5p1z!bR2=Ljq`D%VzdA{DVNS8V(Pf#Im+iL~Fh7I9K%Qz+qihep zfe~=fv#oUs&Ca0Bcv&G341u~ie-%Elmr$8=5#R$Idc$qrdhZS*$T^ukBkFoA%M^iR zayG$3(r<^{yK|dXH)J%Mk&bhWfz#(1qxpzVx5M#q!RGb``}>>hU%5t_Ejc^6u$V2H zyo#0c9t&Gp+_=Hjo4Y8PQY>nSX6)_`IsN1@LMdB*TC==9->NVIdQDiS0sLrxH7^e{@SAynKyz?) zA8j;cRW$Qipz7ROayM<5%{C{YX@WuVXnP6T$R?0ge8z6wyCd7unZL+FPnA?bC7ND-0E74vby*5gXW!14^<0h zs>aX*Q(S7xTYr>c`wn5eO_`sqL|#!T7MUS03$j{~);0Aj?NKX%VL86V#WB!06cw~EMZ%$o#4R2Y$Agf%uf zcO6|11nvZow6Gz5VM5&71TUsGK7QQB3nG@2IjU4tBB0exP_k;oi%mZdrAN#2ke(e> zH|tdpPaq?KY{OtP!4DKsB&@lgF9>2t+7L!fHw+L25XGVyfxxz31-81P3S0f?3?y3H z43H@F@d8N{`xx!vc>$j16Zm!w<@p_gpiLOI3BwNFAO531`b}%C>otStK9UIOb&z6! zl)FfI7r_mr=zzIUr@s}it9G-cumcNE4o}g7uRTmV69W+N;(V^``Ep5_ zr&Q(gl^lchfh%)KcwB4}8*8cCv@0k9!Wh(Ane@Ce-fl&-J0Vq_W2mTA!Lr%(>9qz# zUQ9a)sf#6{(QL#X!)~9^Xw1=k%IR#35(Qdmf|iF&x~RNy*&-&Qg(n0W8}ugyC}Bv8 zh223F5JZ9?pefaXG8ZQLLI}#*P*j4z3rKT2OHIog{VreDj%2LnliFz#q_s#5n;rmXU9wrM~zXJZ-XQeYk333 zg(tfNRca1jjyXD6A|&*rK-Pjdlyp0r%+rcbpFc(!O{dppGMf>{E#}#h?d>5(S7eKd zBCA&SM=uwQi>bYUHJ^K9Yru9lA@T}-^h@s{>WuL+U9BMP)2@Jul#E1p_#H)*z`%z@ zDr5!I^V)!zzSi@4@6A5f-t-8E75!^n23NO{(SYOQf|HLYpV{Ig4Rp8Q>p%7dCZ~cA zzyFBC7fh_@t< zj}?zTDe(L7){kt`-i!%bOIlqhvx-i)MZDEza+YJ1z?c@8h>e{t6&Z?>FTD2#FP@)W z+*FPIy;{Lk+xC{W@tGOT)evSiJe=5e$lGtchp1}uG-G~#REPkCqBd}_b)BGSkyC+K zkj{@O>Xcje_89K88PCty80;`Rn-LLk@-(H+mb`p?L_3LT$9+yu<`~(-=z_(W=4ez9 zC2cl0uW>S-;Y9&q+~M&jqgUGMBI~?|4T!sOZ=aw1JKkmgN<>z?zt^UiR=j-vjIeFUmpS?j{19$mi3w$mrld9* zMncfGdm?3X%_X#Mwk81O2|FO~8R}*cZL~cf{gy%3;F*#rjPYeeSu_=zSxwL~sM>~* z`kr7sg=JOZcVpVU2w4|QPYe$~sW?7O8E$A=tq`MA;;_Zu#$8TE8HQG~Q>oV0sx5AB zZ&EH7Y>0q2u5Pn2^eKy!H}879ac754JEF=p^P_^LhFX+twmRIrz0JvJPFcdy;fz~% zZ!;K1AeM{|ZHVFKW}gqf^MIB9sWpYp*xetpv)kdy!8Uj9+#rZNgr`v|r^qVm%3iNR zd=lCe=gvjVb!@t*nT;0&fu!B)QK^FIyrxvp?sy0Z@B|#H3Yj=$xz!1q0 zqoG(C@kVQ{Dgr{uTkqWF#;skhT-o6Eo$DB_$+I~a&Gr2qzVzO^T)%dMEH8QZ@EK`V z@%XWwwNVx1d4{ekmdliRo?i@mV-TTTd~Ixb1Yw9maCnq6UmB_kbY(EPeXorj1~$gF z!K`OEnDqxO{fqSA^98NeAOnn)oZDyA=T`sCK(a9B8>8lj?(kk}yIQl@6|1Zdo7ZIr z&soiWToxd=d zsu35m$xKtLudgSK8x6zV1S4yT%67%nm1;yt3!`Ut*jtB9`&5O|#bp<`wE$@Q=CLWd zbi#!Gu*>dNpM!3Xe%K~5K8vcroEz)DW{YePqPjF#e*S)I6Lxk2gftYD!U(})Suvkw zn8gy4Wa#!^>JD zWJr-K>%w6K=^`ax<*iQ()tXSs4(fsKQR zC7NndAX)~Uo-g8SY6=7bDeU&~fP|cSwWA~giS%Lb$~OB4+YC2)bXp#&%BgCbY-|K{ zLXSazgR-_W4CfCnXhqajLEPz3=>Sx5Q9{SNylb=mE*N5@54yZ$%enqRl__rBzKbs- zo;^F^;}4$k`0){=v-zdx_CkdC$mj}2&6*P@;O#G7rIHgCYQ)iW&MZ@;3eM&rV#D3H zHxN?Va3CX4wI-WGF}I!5ouErBTa+nGPE)d_p*9ioJf&J{rd7uN-ZptQA@eYN;e2dcY|~Z zNG#0)8)to<_kH4=^E;oj|G>`N^PQ{b8fLg|H(ssBQZzK+j@uj7Fz2DIQ7jbT(5n?l z6knY))4u-RYc1D(oPhYTob~G?t_pnU7OlEEc}}3~g^>$Hra?tb0oUnj1u|m};mPlS zvs?3ThY{pWsWU}(A_}pB=aq;DJuytGqE*V6yBlBNMvfA=}h1Ku2%F z9hOb1e`@8A33Ut=2d(eE2~>4#QP9I|z_!OQg{)3pNGcY^)&NhqIV7!e)R((hKeJ%+ zKEXz-(|!|CrE5ZYTvV5#VAa2dEr5e&yds%5iFk{l1Kwof%1d(IEQt&<@$Br!&+|{9 zrt7|!FC-vWEI8MXT889QY@a2n)14m{*}hcLK}Md_zTAFqRqb-iIPT}?AQISGoHcRS z;B8Q9ThU|OC@_Zqg04$s??-OMtF*wYGsd{*$0KHo-_ZHmJ*D8^H@rSH_$upl6-%Ej zEwTGSP@d=Y<_brSjl}vd)0nWzYBIij*&LK$Ny2oArR1Q(Ua5PU-7ai*$B6OJJ{I?^ zyyO$>{;2uV_P|XSIq9AlbmIC^yS+cZ+M$$xRmgc7VUJy=(<8wPkX33pl$W~nQ=vd+eKPsc zmoD(0ZIDubKkYn*Im;Ox%P{PX;hC= zrvoR_yYE@cif~Q!X*y|AJdK?|&K_WQxpo3;t=f#0hj-)=sI|rAf_Lr{jgHh#E?#$M zI~(%%-m*7m(?s=O)HFY`enOUzV|p#{0Z-bvBAlknBz3~}`1rWaU;@*M!s#kw0#V&a zleA+d_KgPoGZFo?-@=SP#=EOwJ-sTGoh#o{T=a*<8=1MB1a-gjZT37q3Z44K*74ID zo>7IK2hheoY*0f~-1yAN)7yTbSTC}!5>c|1)4~|4j6QXUbq|%YoU;*+S^A9aV%C9Kmvj$vCf6TcinghxRttJHzu`#`dZ zLBiLVJvnhxm7+docuf-U7Tf(${dd50P6pwPAG_4uN2AB51fPG2j#{f^F6${*jW&Md zK&(6tA%SblNAn7&ku+b|j;2-QKK7^W1m=M&+#^2kBRRy!B1 zK?Q1gwl7P)@tRG@Fm(hX1stqvIE&?*#3*!)9{ebme$fh<^}0lkoF9wH3iQ^O%G;xL zo%m}1a0YB*VIB**?{)0Swg;v3?F1lq4xdzz;m4+UDdJ)f)jdYq?&M{oZqF|`C&$3r%7DKQxhiP4fsLUT- zTv&dk8p3A1Qra+$xn-SD&56IPX?7lb60+9$R!9i_`1EAz@P>ld{iUveIMwy9 z5W||#kgwkH_p6KwKyOmDZwGI_A5KSm+J|+8w!~G(jn3oCU}iH~%vG|lW3C6fB+0!b zR2i-_U_g#ZiR6kJ=T53v6mohn&E(5ocqIxB4y{(LL;EbpoVJP4Eovz`%63U5FHdpH z$MnYgDKp*G!DA$CDzVOF)epOOZD7o)QcB2sA&UsUdc2Qs8T^N+fbDKL+b=Q(WgKGSNBrJ+0;&tAL93|${)S{;s@hW z@E5grFjd0F!|qE0LI)}HOGz5>v_@5zy2T!^u3MY*y831_-TK`epv|uKjp^WW7xXe5 z7k)QbS$W9MK~#$Rbe1_GV2!OoR~iWJ;U7iINf02QSI->VJmA{vnI&3&T(*eU>K70< zTZFcQT#bkNG^+lQs<~#9z!gjIpl#NIyqj{BYGLu91dfOlkNx0EJpTTiEhPb+4K9j! zItgpcngoC3$=at}K~4wxlln1%5g84q^UA>1a<<};yz)iR`p@OKqPWpmx|(po!ov3X z()N<&))}SwEZZdM);F1wBulw94Vh;8d;t>H{B^G_pH9ZOhY4s>J=bp#F;hPqM<02^ zNmQ87^Cl81d?O+zZY7{Xd5m{AvKUNo=pN;Hzt!J}NbR8CNheAPD4nnr%XB<*x2XF( z(V<9Svz~#U$+P=7-=@Sx3MvD|){v^cE0MF$y1zpfB64bOLL30J&nsXjJ;oKy9-n?8 zvXprCZgvN&K7vu5fzxTP$mu0d$J7rt@*lxGhd)TG>6g@y7-c!yc^_dXk63)%oEO3* zK#9$=&MQQ9GCkxAGSud>kcvnMPCq%3y7W{r`u0;XNi*urWm=C6lVtn*mD44@26c?Q zPJ?GQe3i7bH(43c_+N}ti$sUhB`C*5%z7^>e+uWPk7?LCfsX6OUYH4-Uq8K?{;+k{ zPig56Fe5je%uLkA&sSsk+Ek4w9)T5Pd{{%0^5n3IrBAkZ%~-z$j<~&h3(dhGu*peK z+AWD1snUwe<#*80(u|D-$Vxk>%#&ATa8qiN3i_GxQQS~!JTvPWi+L?xz#DYtM1ZME z-KLTxf{FQjCC&vG*PpS=Hmct7F_=*mV=isqW+5agxk)Y%vYj^lMxI2~e~m{eYOsk# z`Mx+Vbf<{F-cP-Rk@&iwFR0$$cb&!~*yYw}YMIaJ?X~6r^9#Is!-+Sq5VwP8X2fj0 zncJZFTAWO=au9}ZzNu{&d?QMmMCkldQX_VcQ@?RyJw+VA+?&@DTS*_FI? zY-#c%lk;zCmZ@>EU8va&uEa^YbclB5ps~^2OU{c*Bg(VAEJ{^An-J%A-dMMox}6qt zB->($(BQP^&raJ__~vQk@l-W4(c?l+XFf}{FU|^4_w$pfKD+hGvy-67bqxE{sLW8q z6rIcgv{-*`j4+!N-J0)%{uSGMkoT^-NVU~Ehb)$L4!{N1{an-24!2xup`G(t#L=#1 zNhKOemvi<*7PzI7ad_Bp*CVk`bhM7O0#dGk++mbmB0l@#}g~Gln*P+4cl}mahGk9RpvmtPF!B(?;KIRYFXa zjSLOqQq5#}(4-kBUegaol=i&i8#Jh;ayN*d;vQF6ZhMIt^SHF5`h=c4f|M)oNs4x1 zI6Curd=&Y;e9B`?38R>#v>uN5soS95Z+cP?hMvnG;fSqI66A6NT$;w8N+;*EIZUm5 zhu-TX%tPgvOZd}8F_5A>Fj31EwTCEATK0%tLA0cLaPB&%oQ*9Gx#~qY8-Hmro9eH+ zVh)a%hJ_9h)sEX!KTfHtzUVeSV)V1;_6gEhLSlXE^fRh~yhDQf%WT$D?rc}e+B)61 z;v^2#k_EdeHr?2T{=F%RPP040nqogQI;z#vDL9m=G#_m5Iu=>E<J)s(WkE`=0ork7I%*bG^bWzc#idV#L0nb8@J`O1q-$-r2 z-)yn>;}kg@9lu)jenrZN=L_2~wlN+Klq?%6r9xPr6Mxu`l1OKpLu)hk5lsw3D}c+r zU#})Ho`mS`)i8T0?d*{kmb^k${XoBby+IxZ5oLpx9dq`UVkdUG z*rd0gZZIb5l?5!Yt2{7T_pD5@;mCDJCITM1dUz4stU`Zf>IqYKcY_ZE@DGl$LnN;3WMCp8&j!QiB6TDNP zYySBb*8EG&@s9~E5c~lH$Bi!AdS*E+XrfZya%_*I`q!V=H&up6`CXLA59nCLEMPO7|c<35YQ{&B@>M4 zj?gxRSfsz-NtLK5_&8@D!^0><6g7`&FVTL~c7sutrzB+_Tv}5KXsQ{IKM{>)zg)&D zvg*GfyqDrqrSJ`1xs7x>CHUg00xTLY99mw(F?{Jn>TX$J=f5UN`ab(Li&R6`*Ob$f zw}r~fG<0X+9-_E1N)0oK$5(>OPO*&J71B3ev9A@&n6ZpRLsN&|b4>{3y%QnqxL)8H zhikk=OhShELPET!hDlDkl!t^qSEAOt8F^sR z{g=HWLzPz|VUw4;9%aYU=_-4{TJyFZ*c$`%dh@$;X;fi?dQhp7pxc^_o6*)DpHo1C zQKUdrPh{~_q_xouoxv=TZpatZ!&Qb7CAD!y=~5$-@H|9Xlwye*&X2egEJu;3j@yUV z;WLNiVf1(S=P8?p(Z zuVC)f8j$VQ(>Sa+gr>amS9yCpmNYPB->795?~_M#Q9fT6RQr-R%{r|sTF%7=W4zU! zRpwwIfy6`9^HSo?wTWGa&=Jv$%ZbhrvIdzlRu$RtDUS2%!PFsUpgCW5JY|x*Q59X) zg3$ZgpL<#Z%gS!=F?qZn{er*pi`eTA}I=zz|w|5mH!72KBv zWgxKh*^i26yHt?wKmREgqD=I(Go$tc`7;Jf@@g|$fGDpSP3nH~zF=P2 z`Sa%$Poh^Abg)P)HIwBZeG2;3%Ua>c%%{DrK%|gcSi<(3F0hY}~1LUMBR+H8CN3*#Cnh5Tk0HTrMd4%8v=SfhpL ze}NMxRYF=AJ^z~d+>en=0~SAu()l1AG8|ANs&i>8+I`3omM z8{kIzKTL`I{crpnz~8L?gN%PM_CL}tg0%e~jk${a6A1sw|6M}=0sg~ov49rs(c}KNB;Et2oiW$`Vi|$^{U0XqPg)0ov}n=U|5X0J zrFia#MJOD8`WMd#k_t`#P4f5gf9g^zqy_t5=J)?ZzeAv-{4G(bCkS+$kN>pZXvcpt zRs?Y4Hu&58Jct>pk^eP(8<8CTw|{V-RmS9>Xf$Zi75}95MaaLc7mIK)bnoA+{&RQ- z>c5G}|2Hw0{|7M_;(qA6Pz|#SXp-5*aGw>KJ(5fr>G^s#2IRD6!`f=<{w);ReV?lY z*(^#Ayg10{JfU-0{js$seA60i-A8K($J^aIPt%~wJ41{C_E~}UgJFwc*dT97yKLt0GpF`i)# zyX^hZ?PlnIgAXK;oFOSc30wv%kq%pk{5@q2gxSaU)@VN}7)}qzc@hZUNr!a8t8Rmh zVR_!1$QB>xI|8cu+7~Tq=zD?SRP%>Z;^5Osm>9r32t)<103P4EdW!7}cfr$sqb0%D zQMx?q`*?wTTeiSc_6<0g#bsm7OKAthXGS-vS93@YX|Fkd23r2rpATJ#rVn%<+Sz9g zKGX+!*!Jz*0)zTux6K2-5lD&dPDC!!2-Ct~^lOp8qo82e${?fQE4(>I^060Hun0$nZ_`7>@1}Xp;KmoXuwnQM60?t?iz4IvTC zZ|%1?;0tkm--qgo<3CqKUxko^4J4rs;Kjy+wM|@(^p%hEWj7dP@<1I7zs+0fUwybG zxQl{scK3~TaU}L~5 z+VyT=ix?SfAAX?Wx-+szStJeJ4-Nx$!MCG=H(nc7ejjwX_JQ!h>bw2(;iKJ`aR-7# z&^3a*OAs6mqk>0CU);9+%KIZyCypZTy4;dgn#0GRKz{h-yCN*k7JfR~-teS86+US$ zxxE36u%e46v3NKG?!EK+e%}a^YP|~1MaWU9%p;Fh-GB$jjAoK22)fwi2n6v$eg(n4 zz^6e!?>XaYyVoyo=8a7OMk#~RX9={ydp$b1(vSzd$S1r5625^W`Cy%H@Q=lfZs5>w zRb2w_Fd#9&Ljn<^i)JFw>e^nBXXBXXNL;zX^&~88g~;9lYU1NiQ<}nu1S?x$=&0| zK-hcpd(05{IDJd-my=)9Dg)ABU@(wHV&d)t1{%Vv_kJ6~7vMHoHz zP@L|3wyQ53{l7(X*252hFSp-*W}TEE*ff`YC)2|6*d6CFp^Pla+!v!7$sd#zE9%qJ z&vMnv$X8A>bLX2@PL|&u`I{u!<}TCON_aKT*4s`unu-VHklEN8@t)L%eJfw$_-sOg zDJ#o^h1HB1I&e(S3wmz$=*;^gar?%kx$^q1+PZ{$-o^tYZ-YR_(oh(7S2oki+*^F> zvnem$~8m+h&sN87ZF zHxfmky%%vu`M&d_?yPJ_P(<@JF;X-S2P)c~1Brgy86FRfT z9$#{e6Hxn&CIQOwcKdv$YWa2d`XxZ2elrbM!aW=7(dl0PCMn$7?`{-*PFH;werx$2F@ z5O-)2%ca`VR~vj>EPg-;et@(TWcM-P8%>Rzuie+zPkCn*BBDDUXpbHRYPXYR6d@?W z8wUy%e66IW55ADjc*aZ=g`cnVkTL%#GbdEXU?HKmu0D293f_hu^3$+UF^Azw?2lTIHStf1`Pi8K5ksoVoRX9q07+vJgLzfPP_Dy)!o8=x zf{n43cxY&;g<=+dGlKboN~4^2Z3F7B1g>I1F4gSXDZwlOHYySV4pFaZjB=cdOYEjS z=iebjPgs(L4FF#?s1*~B>>{I!My4cy=oboG>PGh^)jU_Bc{`Uij@mGg5HS+TE#kexaegx4SSmK;o%P+r{>KZ8++(!?C%;KY6 z**9JN))KDOms1}E0pC6f7WE9CJ3J9O{opS&L_O@K#pvtNh~J*1`o+jfpAGT>c|sL; z&|~zGyi8c3cgBux>}Fs7-f|H;PXN9->3$kF)Ql>1yJ%}GoTp&dhJ`_nG;~er#5X7* zjU&TKlXIp9J#rP30B@i$-mXDZ=?P>%yQG%pQ|iER?6CoVDUX@gr`4yZL7qb``@z<_ zk77AXNE6y6PlG2JG3X!6gkl&J+-Pwf#?*CtwmoA){Ir5O{!n%TmW(rov;TM6jg_}a z8&)&8R5{fhq4!NlZWwKq)k??Y?9I5JR+-dJZ3A?f%k2*OOG~;w0NqpP0mn<1$96Rs z0ULbkW~ULNW`dT|kNhHvYpnRi@T~xkSQ-OOt!L(rwWH%a z0CN{~1h2>#(i~G>+;Q^a>}uO2d4EZ+|2THDxw0B#lKX{>uN~h4@6-e8?3qq+L9wE0 z`=wdWLrViKc}?3H!oa2!BG~i{PH$Q;LjGlJzfI2dxm6nVxkF z?xQSg34^WHp;k`JZclwtcj9yyjCrQk;y0SGXlBr>MIE9i>G0bnAcvKvFQ@hzdg|Kf zjwNRzuW_yrTGd0C>4P)`Z@CtYEbAnU$wF;DB4(}!5eT#l7J?=R*Cs_f!pf3ftkm8r zQ`?l4pN*yZB0NSG5pX`=cx`EmKUH(1p+VT|6(1S{QM6`6!Rph;+6EyhIhSGFY?8C6 zz7j*Kv$8e1MPK@3DD7dOi4kj!x28M?jYLz9^It_xzTV<-a#$@Z>akOaqbr=b7B(4A zi>R-MJ>`5xH-Amr65JOwIC(KQ;siNwahc}<3{9%Y$@^kX=$ZF@gr=Vl{2`gRBgv|3gB{l^LC<7Goi4PIBt2G3{TXRA~_&5FBFBNR6+B)v2t08O~?=Q;E~M)NO=H` zjij|j=r8(g<}?C()1)$U#Jr>j*Fd7jLBjo$?!$*Mej<7?(a}S~0IVzZ1Dv0acTC0w zJA$TSQ%|P1@sAPF(8M26+Kl(MaNZ9^|5!LVyYOTAy-BL-5C8NI!NU@gFQsHpoCBPh zIl1vk_l?i0N;Gy`YH~`noJ4>gjRJ-=?UW{6ea5C6evA2i8@U#(k5U{hFrRRi@XTY? z>L}fOM!570lPcyYyV*j@t;W0k+6epKGSkplkq0oAb~EFjZ+^*`eE|+55;i*U*w|m0aFR8_bC_$g9f!hSNikDLEabg6n;v z)dz&@1)?O&XrvfO@RA}3b*(PNLj*hB<5`5IfSsa0RNTk2VDO-X32&YICco#Wm6g@` zTJ@RMaep8N3nq@n+AqpM6;S)|nU+N`hzXBtut4!}!6~QyhFOc4BQ!g}Ix#&A+n(tj zf-M<*j)Ib?FFyT~MlQ{vJY#McN{Ucs#=@h5r}0J^sa9Ifhl=$JzXUCUq-pZqon2Yr`lZ zU~n~ZzTiYpGA``#^opk9x4)gCF#yhb+gk1Hye)3E#1Z3qZ}9A66FSzly)1XS5?4{H zzw~42xO35&I}OyiW`8FuuXUUgWl!D@yarLz-L4Xw?!S{g z^mE)-rS^t;rG0GIv(5C(nM3>fQirCpY7M+?LcTDO@VwO;vvk*hD=#~=M#E6k`A`nA zf{C@2fFuw`L6@{&-KA6JD1bI%-q;j?SO)Sq1wkG0`g$yPsPux|JRRU3Yl9qTuCZqf zeV_LXSP%{+jWqN;xrmmSGP2p+H1SqiET*^4Ic@Hh4tgx7=uxM1V_TZ%Qw{&akcTfR+ zydq2HCwc2Sk3)uI&8uSCuLFxB-u!XvWH;?olzw zV+@?E-;qq z|zYexNc2cF{y7zAEZk-nv|(=9P%m zkm}yNg^tYN)-GKY`6(wRZGXmd?S}5+s^`1t2HsLCayzfP@2qXmkZ*Xrk;nAzs>S9{ zvHWdc`z{)*=Z!dY`7zryzesY2Is=ARkKAtE6NUAUNDgBVjQBnj=+^2#p8c$#9!aNB zlQsNK2EhvqB^eI3?s@K$UAGmBB8cZbC+zd-&WHdVz2pO)l{W6v1fxpB6s*N>d{P|M zazXVdVrnA4oq=lS?5dnH*u1{H`gw=hWg{KM`_~1t@(iP&6}%(q5JVjucE3xFwV4z8 z@%`vWE(#)9~qBMF&6kE-zBWHk&a&&O_TbnGd1&c8bf6Hc+8VPbvy z@;qmQ{);Sv#I17sApr-=m$3>#9*aW;sRN+XpeJr_FOkB_^v63YcGjVHbq`X5Tg`PO z_WCH#oekd3sG3z=qIXGvNFHk3pOx*D(C;w|srL8$me2^`%|>-u=96KrSl(F8A5^?7IDejS*u32A$_YO|JfEbVI+I{A@S~d z#G)JCk$Jv!Q6B-RLj*r%$`BIRECFSR1Vi?vSX+*E^9^nh*=#BLdEu1L$OM6^<=YcQ z*)FQ~;MaNrMl_BVLkXlS6&7x7=QkBEEY;`FkP+LD6uuAC3iLTVtTb&I)7qsSrB|ji zHb+s7jns!(7DR!#xGK6^O{9&SSvJVp!$;#9kGHSGxIf!}Wn3d1jZ;SOW`=}G9YHjW zN>#0FZ!lRi755=&lEZ09?=h)!a<&amE+z9!{jN63A+ELGdJxc=cye!p;`b^~*5TdiC(esPl<-90F~x~Dxsf=c6#Hm|ZY$NxY^w0+ zDT^_c1oZ&>eE<1f1zV;C`A@X>6d`9!zh@zu zE=FUB{|`12=I<7wphaZD|Be~{#~AXEueiK_JfUU;=mm%UK@Te@V2h6M_gqX_4S;ZV zgFna-@I%7fA^5Yk^6yrABut&Je+;vmK_(oa|MOWyD>V_qz7fRiqA_%!|JkYn^8tKM W(;0qbA~6g=d{h+F<*Vf^LjM;p^K=CO literal 0 HcmV?d00001 diff --git a/COM380/Project5/GameData/Thumbs.db b/COM380/Project5/GameData/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..ed103deda5b05b4112f406acfe5857c033f0c651 GIT binary patch literal 174080 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