From 0c4f1a95175869e2586e086839b7f25ab1183089 Mon Sep 17 00:00:00 2001 From: Sanjay Madhav Date: Sun, 12 Nov 2017 18:26:26 -0800 Subject: [PATCH 01/40] Chapter 1 code (test on Mac still) --- Chapter01/Chapter01-windows.sln | 22 ++ .../Chapter3-mac.xcodeproj/project.pbxproj | 342 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/xcschemes/Game-mac.xcscheme | 92 +++++ Chapter01/Game.cpp | 250 +++++++++++++ Chapter01/Game.h | 55 +++ Chapter01/Game.vcxproj | 110 ++++++ Chapter01/Game.vcxproj.filters | 22 ++ Chapter01/Main.cpp | 21 ++ 9 files changed, 921 insertions(+) create mode 100644 Chapter01/Chapter01-windows.sln create mode 100644 Chapter01/Chapter3-mac.xcodeproj/project.pbxproj create mode 100644 Chapter01/Chapter3-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 Chapter01/Chapter3-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme create mode 100644 Chapter01/Game.cpp create mode 100644 Chapter01/Game.h create mode 100644 Chapter01/Game.vcxproj create mode 100644 Chapter01/Game.vcxproj.filters create mode 100644 Chapter01/Main.cpp diff --git a/Chapter01/Chapter01-windows.sln b/Chapter01/Chapter01-windows.sln new file mode 100644 index 00000000..f560df0f --- /dev/null +++ b/Chapter01/Chapter01-windows.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.26430.12 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Game", "Game.vcxproj", "{BC508D87-495F-4554-932D-DD68388B63CC}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {BC508D87-495F-4554-932D-DD68388B63CC}.Debug|Win32.ActiveCfg = Debug|Win32 + {BC508D87-495F-4554-932D-DD68388B63CC}.Debug|Win32.Build.0 = Debug|Win32 + {BC508D87-495F-4554-932D-DD68388B63CC}.Release|Win32.ActiveCfg = Release|Win32 + {BC508D87-495F-4554-932D-DD68388B63CC}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chapter01/Chapter3-mac.xcodeproj/project.pbxproj b/Chapter01/Chapter3-mac.xcodeproj/project.pbxproj new file mode 100644 index 00000000..991e7d82 --- /dev/null +++ b/Chapter01/Chapter3-mac.xcodeproj/project.pbxproj @@ -0,0 +1,342 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 9223C4781F009428009A94D7 /* Game.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4671F009428009A94D7 /* Game.cpp */; }; + 9223C4791F009428009A94D7 /* Actor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4681F009428009A94D7 /* Actor.cpp */; }; + 9223C47A1F009428009A94D7 /* AnimSpriteComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C46A1F009428009A94D7 /* AnimSpriteComponent.cpp */; }; + 9223C47B1F009428009A94D7 /* BGSpriteComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C46C1F009428009A94D7 /* BGSpriteComponent.cpp */; }; + 9223C47C1F009428009A94D7 /* Component.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C46E1F009428009A94D7 /* Component.cpp */; }; + 9223C47D1F009428009A94D7 /* Main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4711F009428009A94D7 /* Main.cpp */; }; + 9223C47E1F009428009A94D7 /* Math.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4721F009428009A94D7 /* Math.cpp */; }; + 9223C47F1F009428009A94D7 /* Ship.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4741F009428009A94D7 /* Ship.cpp */; }; + 9223C4801F009428009A94D7 /* SpriteComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4761F009428009A94D7 /* SpriteComponent.cpp */; }; + 92D324FB1B697389005A86C7 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 92D324FA1B697389005A86C7 /* CoreFoundation.framework */; }; + 92E46E941B6353E50035CD21 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 92E46E931B6353E50035CD21 /* OpenGL.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 9223C4671F009428009A94D7 /* Game.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Game.cpp; sourceTree = ""; }; + 9223C4681F009428009A94D7 /* Actor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Actor.cpp; sourceTree = ""; }; + 9223C4691F009428009A94D7 /* Actor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Actor.h; sourceTree = ""; }; + 9223C46A1F009428009A94D7 /* AnimSpriteComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AnimSpriteComponent.cpp; sourceTree = ""; }; + 9223C46B1F009428009A94D7 /* AnimSpriteComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AnimSpriteComponent.h; sourceTree = ""; }; + 9223C46C1F009428009A94D7 /* BGSpriteComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BGSpriteComponent.cpp; sourceTree = ""; }; + 9223C46D1F009428009A94D7 /* BGSpriteComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BGSpriteComponent.h; sourceTree = ""; }; + 9223C46E1F009428009A94D7 /* Component.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Component.cpp; sourceTree = ""; }; + 9223C46F1F009428009A94D7 /* Component.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Component.h; sourceTree = ""; }; + 9223C4701F009428009A94D7 /* Game.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Game.h; sourceTree = ""; }; + 9223C4711F009428009A94D7 /* Main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Main.cpp; sourceTree = ""; }; + 9223C4721F009428009A94D7 /* Math.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Math.cpp; sourceTree = ""; }; + 9223C4731F009428009A94D7 /* Math.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Math.h; sourceTree = ""; }; + 9223C4741F009428009A94D7 /* Ship.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Ship.cpp; sourceTree = ""; }; + 9223C4751F009428009A94D7 /* Ship.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Ship.h; sourceTree = ""; }; + 9223C4761F009428009A94D7 /* SpriteComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpriteComponent.cpp; sourceTree = ""; }; + 9223C4771F009428009A94D7 /* SpriteComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpriteComponent.h; sourceTree = ""; }; + 92D324FA1B697389005A86C7 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; + 92E46DF71B634EA30035CD21 /* Game-mac */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "Game-mac"; sourceTree = BUILT_PRODUCTS_DIR; }; + 92E46E931B6353E50035CD21 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 92E46DF41B634EA30035CD21 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 92D324FB1B697389005A86C7 /* CoreFoundation.framework in Frameworks */, + 92E46E941B6353E50035CD21 /* OpenGL.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 92E46DEE1B634EA30035CD21 = { + isa = PBXGroup; + children = ( + 9223C4681F009428009A94D7 /* Actor.cpp */, + 9223C4691F009428009A94D7 /* Actor.h */, + 9223C46A1F009428009A94D7 /* AnimSpriteComponent.cpp */, + 9223C46B1F009428009A94D7 /* AnimSpriteComponent.h */, + 9223C46C1F009428009A94D7 /* BGSpriteComponent.cpp */, + 9223C46D1F009428009A94D7 /* BGSpriteComponent.h */, + 9223C46E1F009428009A94D7 /* Component.cpp */, + 9223C46F1F009428009A94D7 /* Component.h */, + 9223C4671F009428009A94D7 /* Game.cpp */, + 9223C4701F009428009A94D7 /* Game.h */, + 9223C4711F009428009A94D7 /* Main.cpp */, + 9223C4721F009428009A94D7 /* Math.cpp */, + 9223C4731F009428009A94D7 /* Math.h */, + 9223C4741F009428009A94D7 /* Ship.cpp */, + 9223C4751F009428009A94D7 /* Ship.h */, + 9223C4761F009428009A94D7 /* SpriteComponent.cpp */, + 9223C4771F009428009A94D7 /* SpriteComponent.h */, + 92E46DF81B634EA30035CD21 /* Products */, + 92D324FA1B697389005A86C7 /* CoreFoundation.framework */, + 92E46E931B6353E50035CD21 /* OpenGL.framework */, + ); + sourceTree = ""; + }; + 92E46DF81B634EA30035CD21 /* Products */ = { + isa = PBXGroup; + children = ( + 92E46DF71B634EA30035CD21 /* Game-mac */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 92E46DF61B634EA30035CD21 /* Game-mac */ = { + isa = PBXNativeTarget; + buildConfigurationList = 92E46DFE1B634EA40035CD21 /* Build configuration list for PBXNativeTarget "Game-mac" */; + buildPhases = ( + 92E46DF31B634EA30035CD21 /* Sources */, + 92E46DF41B634EA30035CD21 /* Frameworks */, + 92E46EA11B63615B0035CD21 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Game-mac"; + productName = "Game-mac"; + productReference = 92E46DF71B634EA30035CD21 /* Game-mac */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 92E46DEF1B634EA30035CD21 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0720; + ORGANIZATIONNAME = "Sanjay Madhav"; + TargetAttributes = { + 92E46DF61B634EA30035CD21 = { + CreatedOnToolsVersion = 6.4; + }; + }; + }; + buildConfigurationList = 92E46DF21B634EA30035CD21 /* Build configuration list for PBXProject "Chapter3-mac" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 92E46DEE1B634EA30035CD21; + productRefGroup = 92E46DF81B634EA30035CD21 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 92E46DF61B634EA30035CD21 /* Game-mac */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXShellScriptBuildPhase section */ + 92E46EA11B63615B0035CD21 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if [ -d \"$BUILD_DIR/Debug\" ]; then\n cp \"$SRCROOT\"/../external/GLEW/lib/mac/*.dylib $BUILD_DIR/Debug\n cp \"$SRCROOT\"/../external/SDL/lib/mac/*.dylib $BUILD_DIR/Debug\nfi\n\nif [ -d \"$BUILD_DIR/Release\" ]; then\n cp \"$SRCROOT\"/../external/GLEW/lib/mac/*.dylib $BUILD_DIR/Release\n cp \"$SRCROOT\"/../external/SDL/lib/mac/*.dylib $BUILD_DIR/Release\nfi"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 92E46DF31B634EA30035CD21 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9223C47D1F009428009A94D7 /* Main.cpp in Sources */, + 9223C47E1F009428009A94D7 /* Math.cpp in Sources */, + 9223C47A1F009428009A94D7 /* AnimSpriteComponent.cpp in Sources */, + 9223C47B1F009428009A94D7 /* BGSpriteComponent.cpp in Sources */, + 9223C4781F009428009A94D7 /* Game.cpp in Sources */, + 9223C4801F009428009A94D7 /* SpriteComponent.cpp in Sources */, + 9223C47F1F009428009A94D7 /* Ship.cpp in Sources */, + 9223C4791F009428009A94D7 /* Actor.cpp in Sources */, + 9223C47C1F009428009A94D7 /* Component.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 92E46DFC1B634EA40035CD21 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + 92E46DFD1B634EA40035CD21 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + }; + name = Release; + }; + 92E46DFF1B634EA40035CD21 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "c++14"; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_ENABLE_CPP_RTTI = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, + "$(SRCROOT)/../external/SDL/include", + "$(SRCROOT)/../external/GLEW/include", + "$(SRCROOT)/../external/SOIL/include", + ); + LIBRARY_SEARCH_PATHS = ( + "$(SRCROOT)/../external/GLEW/lib/mac", + "$(SRCROOT)/../external/SDL/lib/mac", + "$(SRCROOT)/../external/SOIL/lib/mac", + ); + OTHER_LDFLAGS = ( + "-lGLEW.2.1.0", + "-lSDL2-2.0.0", + "-lSDL2_mixer-2.0.0", + "-lSDL2_ttf-2.0.0", + "-lSOIL", + "-lSDL2_image-2.0.0", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 92E46E001B634EA40035CD21 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "c++14"; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_ENABLE_CPP_RTTI = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, + "$(SRCROOT)/../external/SDL/include", + "$(SRCROOT)/../external/GLEW/include", + "$(SRCROOT)/../external/SOIL/include", + ); + LIBRARY_SEARCH_PATHS = ( + "$(SRCROOT)/../external/GLEW/lib/mac", + "$(SRCROOT)/../external/SDL/lib/mac", + "$(SRCROOT)/../external/SOIL/lib/mac", + ); + OTHER_LDFLAGS = ( + "-lGLEW.2.1.0", + "-lSDL2-2.0.0", + "-lSDL2_mixer-2.0.0", + "-lSDL2_ttf-2.0.0", + "-lSOIL", + "-lSDL2_image-2.0.0", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 92E46DF21B634EA30035CD21 /* Build configuration list for PBXProject "Chapter3-mac" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 92E46DFC1B634EA40035CD21 /* Debug */, + 92E46DFD1B634EA40035CD21 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 92E46DFE1B634EA40035CD21 /* Build configuration list for PBXNativeTarget "Game-mac" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 92E46DFF1B634EA40035CD21 /* Debug */, + 92E46E001B634EA40035CD21 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 92E46DEF1B634EA30035CD21 /* Project object */; +} diff --git a/Chapter01/Chapter3-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Chapter01/Chapter3-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..84be36ce --- /dev/null +++ b/Chapter01/Chapter3-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Chapter01/Chapter3-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme b/Chapter01/Chapter3-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme new file mode 100644 index 00000000..8c41bc4b --- /dev/null +++ b/Chapter01/Chapter3-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter01/Game.cpp b/Chapter01/Game.cpp new file mode 100644 index 00000000..daeae319 --- /dev/null +++ b/Chapter01/Game.cpp @@ -0,0 +1,250 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "Game.h" + +const int thickness = 15; +const float paddleH = 100.0f; + +Game::Game() +:mWindow(nullptr) +,mRenderer(nullptr) +,mTicksCount(0) +,mIsRunning(true) +,mPaddleDir(0) +{ + +} + +bool Game::Initialize() +{ + // Initialize SDL + int sdlResult = SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO); + if (sdlResult != 0) + { + SDL_Log("Unable to initialize SDL: %s", SDL_GetError()); + return false; + } + + // Create an SDL Window + mWindow = SDL_CreateWindow( + "Game Programming in C++ (Chapter 1)", // Window title + 100, // Top left x-coordinate of window + 100, // Top left y-coordinate of window + 1024, // Width of window + 768, // Height of window + 0 // Flags (0 for no flags set) + ); + + if (!mWindow) + { + SDL_Log("Failed to create window: %s", SDL_GetError()); + return false; + } + + // Create SDL renderer + mRenderer = SDL_CreateRenderer( + mWindow, // Window to create renderer for + -1, // Usually -1 + SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC + ); + + if (!mRenderer) + { + SDL_Log("Failed to create renderer: %s", SDL_GetError()); + return false; + } + + mPaddlePos.x = 10.0f; + mPaddlePos.y = 768.0f/2.0f; + mBallPos.x = 1024.0f/2.0f; + mBallPos.y = 768.0f/2.0f; + mBallVel.x = -200.0f; + mBallVel.y = 235.0f; + return true; +} + +void Game::RunLoop() +{ + while (mIsRunning) + { + ProcessInput(); + UpdateGame(); + GenerateOutput(); + } +} + +void Game::ProcessInput() +{ + SDL_Event event; + // Use poll event to figure out if user + // is trying to quit + while (SDL_PollEvent(&event)) + { + switch (event.type) + { + case SDL_QUIT: + mIsRunning = false; + break; + } + } + + // Get state of keyboard + const Uint8 *state = SDL_GetKeyboardState(NULL); + if (state[SDL_SCANCODE_ESCAPE]) + { + mIsRunning = false; + } + + mPaddleDir = 0; + if (state[SDL_SCANCODE_W]) + { + mPaddleDir -= 1; + } + if (state[SDL_SCANCODE_S]) + { + mPaddleDir += 1; + } +} + +void Game::UpdateGame() +{ + // Compute delta time + // Wait until 16ms has elapsed since last frame + while (!SDL_TICKS_PASSED(SDL_GetTicks(), mTicksCount + 16)) + ; + + // Delta time is the difference in ticks from last frame + // (converted to seconds) + float deltaTime = (SDL_GetTicks() - mTicksCount) / 1000.0f; + + // Clamp maximum delta time value + if (deltaTime > 0.05f) + { + deltaTime = 0.05f; + } + + // Update tick counts (for next frame) + mTicksCount = SDL_GetTicks(); + + // Update paddle position based on direction + if (mPaddleDir != 0) + { + mPaddlePos.y += mPaddleDir * 300.0f * deltaTime; + if (mPaddlePos.y < (paddleH/2.0f + thickness)) + { + mPaddlePos.y = paddleH/2.0f + thickness; + } + else if (mPaddlePos.y > (768.0f - paddleH/2.0f - thickness)) + { + mPaddlePos.y = 768.0f - paddleH/2.0f - thickness; + } + } + + // Update ball position based on ball velocity + mBallPos.x += mBallVel.x * deltaTime; + mBallPos.y += mBallVel.y * deltaTime; + + // Bounce if needed + // Did we intrsect with the paddle? + float diff = mPaddlePos.y - mBallPos.y; + diff = (diff > 0.0f) ? diff : -diff; + if (mBallPos.x <= 25.0f && mBallPos.x >= 20.0f && diff <= paddleH/2.0f + && mBallVel.x < 0.0f) + { + mBallVel.x *= -1.0f; + mBallPos.x = 26.0f; + } + // Did the ball go off the screen? (if so, end game) + else if (mBallPos.x <= 0.0f) + { + mIsRunning = false; + } + // Did the ball collide with the right wall? + else if (mBallPos.x >= (1024.0f - thickness) && mBallVel.x > 0.0f) + { + mBallVel.x *= -1.0f; + mBallPos.x = 1024.0f - thickness; + } + + // Did the ball collide with the top wall? + if (mBallPos.y <= thickness && mBallVel.y < 0.0f) + { + mBallVel.y *= -1; + mBallPos.y = thickness; + } + // Did the ball collide with the right wall? + else if (mBallPos.y >= (768 - thickness) && + mBallVel.y > 0.0f) + { + mBallVel.y *= -1; + mBallPos.y = 768 - thickness; + } +} + +void Game::GenerateOutput() +{ + SDL_SetRenderDrawColor( + mRenderer, + 0, // R + 0, // G + 255, // B + 255 // A + ); + SDL_RenderClear(mRenderer); + + // Draw walls + SDL_SetRenderDrawColor(mRenderer, 255, 255, 255, 255); + + // Draw top wall + SDL_Rect wall{ + 0, // Top left x + 0, // Top left y + 1024, // Width + thickness // Height + }; + SDL_RenderFillRect(mRenderer, &wall); + + // Draw bottom wall + wall.y = 768 - thickness; + SDL_RenderFillRect(mRenderer, &wall); + + // Draw right wall + wall.x = 1024 - thickness; + wall.y = 0; + wall.w = thickness; + wall.h = 1024; + SDL_RenderFillRect(mRenderer, &wall); + + // Draw paddle + SDL_Rect paddle{ + static_cast(mPaddlePos.x), + static_cast(mPaddlePos.y - paddleH/2), + thickness, + static_cast(paddleH) + }; + SDL_RenderFillRect(mRenderer, &paddle); + + // Draw ball + SDL_Rect ball{ + static_cast(mBallPos.x - thickness/2), + static_cast(mBallPos.y - thickness/2), + thickness, + thickness + }; + SDL_RenderFillRect(mRenderer, &ball); + + SDL_RenderPresent(mRenderer); +} + +void Game::Shutdown() +{ + SDL_DestroyRenderer(mRenderer); + SDL_DestroyWindow(mWindow); + SDL_Quit(); +} diff --git a/Chapter01/Game.h b/Chapter01/Game.h new file mode 100644 index 00000000..ba4d5be8 --- /dev/null +++ b/Chapter01/Game.h @@ -0,0 +1,55 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "SDL/SDL.h" + +// Vector2 struct just stores x/y coordinates +// (for now) +struct Vector2 +{ + float x; + float y; +}; + +// Game class +class Game +{ +public: + Game(); + // Initialize the game + bool Initialize(); + // Runs the game loop until the game is over + void RunLoop(); + // Shutdown the game + void Shutdown(); +private: + // Helper functions for the game loop + void ProcessInput(); + void UpdateGame(); + void GenerateOutput(); + + // Window created by SDL + SDL_Window* mWindow; + // Renderer for 2D drawing + SDL_Renderer* mRenderer; + // Number of ticks since start of game + Uint32 mTicksCount; + // Game is still running + bool mIsRunning; + + // Pong specific + // Direction of paddle + int mPaddleDir; + // Position of paddle + Vector2 mPaddlePos; + // Position of ball + Vector2 mBallPos; + // Velocity of ball + Vector2 mBallVel; +}; diff --git a/Chapter01/Game.vcxproj b/Chapter01/Game.vcxproj new file mode 100644 index 00000000..1f8e815e --- /dev/null +++ b/Chapter01/Game.vcxproj @@ -0,0 +1,110 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + + + + + + + + {BC508D87-495F-4554-932D-DD68388B63CC} + Win32Proj + Game + 10.0.16299.0 + + + + Application + true + v141 + Unicode + + + Application + false + v141 + true + Unicode + + + + + + + + + + + + + true + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) + true + ..\external\SDL\include;..\external\GLEW\include;..\external\SOIL\include;%(AdditionalIncludeDirectories) + false + Sync + + + Console + true + ..\external\SDL\lib\win\x86;..\external\GLEW\lib\win\x86;..\external\SOIL\lib\win\x86;%(AdditionalLibraryDirectories) + opengl32.lib;SDL2.lib;SDL2main.lib;SDL2_ttf.lib;SDL2_mixer.lib;SDL2_image.lib;glew32.lib;SOIL.lib;%(AdditionalDependencies) + /NODEFAULTLIB:msvcrt.lib %(AdditionalOptions) + + + xcopy "$(ProjectDir)\..\external\SDL\lib\win\x86\*.dll" "$(OutDir)" /i /s /y +xcopy "$(ProjectDir)\..\external\GLEW\lib\win\x86\*.dll" "$(OutDir)" /i /s /y + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) + true + ..\external\SDL\include;..\external\GLEW\include;..\external\SOIL\include;%(AdditionalIncludeDirectories) + false + Sync + + + Console + true + true + true + ..\external\SDL\lib\win\x86;..\external\GLEW\lib\win\x86;..\external\SOIL\lib\win\x86;%(AdditionalLibraryDirectories) + opengl32.lib;SDL2.lib;SDL2main.lib;SDL2_ttf.lib;SDL2_mixer.lib;SDL2_image.lib;glew32.lib;SOIL.lib;%(AdditionalDependencies) + + + xcopy "$(ProjectDir)\..\external\SDL\lib\win\x86\*.dll" "$(OutDir)" /i /s /y +xcopy "$(ProjectDir)\..\external\GLEW\lib\win\x86\*.dll" "$(OutDir)" /i /s /y + + + + + + \ No newline at end of file diff --git a/Chapter01/Game.vcxproj.filters b/Chapter01/Game.vcxproj.filters new file mode 100644 index 00000000..013c77e9 --- /dev/null +++ b/Chapter01/Game.vcxproj.filters @@ -0,0 +1,22 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + + + Source Files + + + Source Files + + + + + Source Files + + + \ No newline at end of file diff --git a/Chapter01/Main.cpp b/Chapter01/Main.cpp new file mode 100644 index 00000000..22ea0c69 --- /dev/null +++ b/Chapter01/Main.cpp @@ -0,0 +1,21 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "Game.h" + +int main(int argc, char** argv) +{ + Game game; + bool success = game.Initialize(); + if (success) + { + game.RunLoop(); + } + game.Shutdown(); + return 0; +} From a52d0fe900a4802b702bf53a7e11507f0e7aa1fd Mon Sep 17 00:00:00 2001 From: Sanjay Madhav Date: Sun, 12 Nov 2017 22:44:35 -0800 Subject: [PATCH 02/40] Code changes --- Chapter01/Game.cpp | 29 +++++++++++++++-------------- Chapter01/Game.h | 2 +- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/Chapter01/Game.cpp b/Chapter01/Game.cpp index daeae319..886932e4 100644 --- a/Chapter01/Game.cpp +++ b/Chapter01/Game.cpp @@ -24,7 +24,7 @@ Game::Game() bool Game::Initialize() { // Initialize SDL - int sdlResult = SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO); + int sdlResult = SDL_Init(SDL_INIT_VIDEO); if (sdlResult != 0) { SDL_Log("Unable to initialize SDL: %s", SDL_GetError()); @@ -47,7 +47,7 @@ bool Game::Initialize() return false; } - // Create SDL renderer + //// Create SDL renderer mRenderer = SDL_CreateRenderer( mWindow, // Window to create renderer for -1, // Usually -1 @@ -59,7 +59,7 @@ bool Game::Initialize() SDL_Log("Failed to create renderer: %s", SDL_GetError()); return false; } - + // mPaddlePos.x = 10.0f; mPaddlePos.y = 768.0f/2.0f; mBallPos.x = 1024.0f/2.0f; @@ -82,12 +82,11 @@ void Game::RunLoop() void Game::ProcessInput() { SDL_Event event; - // Use poll event to figure out if user - // is trying to quit while (SDL_PollEvent(&event)) { switch (event.type) { + // If we get an SDL_QUIT event, end loop case SDL_QUIT: mIsRunning = false; break; @@ -95,12 +94,14 @@ void Game::ProcessInput() } // Get state of keyboard - const Uint8 *state = SDL_GetKeyboardState(NULL); + const Uint8* state = SDL_GetKeyboardState(NULL); + // If escape is pressed, also end loop if (state[SDL_SCANCODE_ESCAPE]) { mIsRunning = false; } + // Update paddle direction based on W/S keys mPaddleDir = 0; if (state[SDL_SCANCODE_W]) { @@ -114,7 +115,6 @@ void Game::ProcessInput() void Game::UpdateGame() { - // Compute delta time // Wait until 16ms has elapsed since last frame while (!SDL_TICKS_PASSED(SDL_GetTicks(), mTicksCount + 16)) ; @@ -136,6 +136,7 @@ void Game::UpdateGame() if (mPaddleDir != 0) { mPaddlePos.y += mPaddleDir * 300.0f * deltaTime; + // Make sure paddle doesn't move off screen! if (mPaddlePos.y < (paddleH/2.0f + thickness)) { mPaddlePos.y = paddleH/2.0f + thickness; @@ -158,7 +159,6 @@ void Game::UpdateGame() && mBallVel.x < 0.0f) { mBallVel.x *= -1.0f; - mBallPos.x = 26.0f; } // Did the ball go off the screen? (if so, end game) else if (mBallPos.x <= 0.0f) @@ -169,26 +169,24 @@ void Game::UpdateGame() else if (mBallPos.x >= (1024.0f - thickness) && mBallVel.x > 0.0f) { mBallVel.x *= -1.0f; - mBallPos.x = 1024.0f - thickness; } // Did the ball collide with the top wall? if (mBallPos.y <= thickness && mBallVel.y < 0.0f) { mBallVel.y *= -1; - mBallPos.y = thickness; } - // Did the ball collide with the right wall? + // Did the ball collide with the bottom wall? else if (mBallPos.y >= (768 - thickness) && mBallVel.y > 0.0f) { mBallVel.y *= -1; - mBallPos.y = 768 - thickness; } } void Game::GenerateOutput() { + // Set draw color to blue SDL_SetRenderDrawColor( mRenderer, 0, // R @@ -196,8 +194,10 @@ void Game::GenerateOutput() 255, // B 255 // A ); - SDL_RenderClear(mRenderer); + // Clear back buffer + SDL_RenderClear(mRenderer); + // Draw walls SDL_SetRenderDrawColor(mRenderer, 255, 255, 255, 255); @@ -231,7 +231,7 @@ void Game::GenerateOutput() SDL_RenderFillRect(mRenderer, &paddle); // Draw ball - SDL_Rect ball{ + SDL_Rect ball{ static_cast(mBallPos.x - thickness/2), static_cast(mBallPos.y - thickness/2), thickness, @@ -239,6 +239,7 @@ void Game::GenerateOutput() }; SDL_RenderFillRect(mRenderer, &ball); + // Swap front buffer and back buffer SDL_RenderPresent(mRenderer); } diff --git a/Chapter01/Game.h b/Chapter01/Game.h index ba4d5be8..3d59a468 100644 --- a/Chapter01/Game.h +++ b/Chapter01/Game.h @@ -40,7 +40,7 @@ class Game SDL_Renderer* mRenderer; // Number of ticks since start of game Uint32 mTicksCount; - // Game is still running + // Game should continue to run bool mIsRunning; // Pong specific From ab0e6a19a71731e5f676dd362a05a664a74dd892 Mon Sep 17 00:00:00 2001 From: Sanjay Madhav Date: Sun, 12 Nov 2017 23:32:41 -0800 Subject: [PATCH 03/40] Minor changes --- Chapter01/Game.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Chapter01/Game.cpp b/Chapter01/Game.cpp index 886932e4..3b18199e 100644 --- a/Chapter01/Game.cpp +++ b/Chapter01/Game.cpp @@ -152,11 +152,17 @@ void Game::UpdateGame() mBallPos.y += mBallVel.y * deltaTime; // Bounce if needed - // Did we intrsect with the paddle? + // Did we intersect with the paddle? float diff = mPaddlePos.y - mBallPos.y; + // Take absolute value of difference diff = (diff > 0.0f) ? diff : -diff; - if (mBallPos.x <= 25.0f && mBallPos.x >= 20.0f && diff <= paddleH/2.0f - && mBallVel.x < 0.0f) + if ( + // Our y-difference is small enough + diff <= paddleH / 2.0f && + // We are in the correct x-position + mBallPos.x <= 25.0f && mBallPos.x >= 20.0f && + // The ball is moving to the left + mBallVel.x < 0.0f) { mBallVel.x *= -1.0f; } From d220bd5e9bad4818bcfb0c93b8eb6386b5cc97f0 Mon Sep 17 00:00:00 2001 From: Sanjay Madhav Date: Mon, 13 Nov 2017 02:25:21 -0800 Subject: [PATCH 04/40] Chapter 2 code, I think (need to test Mac still)? --- Chapter02/Actor.cpp | 83 ++ Chapter02/Actor.h | 60 + Chapter02/AnimSpriteComponent.cpp | 49 + Chapter02/AnimSpriteComponent.h | 30 + Chapter02/Assets/Enemy01.png | Bin 0 -> 10492 bytes Chapter02/Assets/Enemy02.png | Bin 0 -> 10308 bytes Chapter02/Assets/Enemy03.png | Bin 0 -> 10215 bytes Chapter02/Assets/Enemy04.png | Bin 0 -> 10194 bytes Chapter02/Assets/Enemy05.png | Bin 0 -> 10215 bytes Chapter02/Assets/Enemy06.png | Bin 0 -> 10308 bytes Chapter02/Assets/Farback01.png | Bin 0 -> 1089225 bytes Chapter02/Assets/Farback02.png | Bin 0 -> 1004765 bytes Chapter02/Assets/LICENSE.txt | 5 + Chapter02/Assets/Laser.png | Bin 0 -> 691 bytes Chapter02/Assets/MapLayer1.csv | 24 + Chapter02/Assets/MapLayer2.csv | 24 + Chapter02/Assets/MapLayer3.csv | 24 + Chapter02/Assets/Ship01.png | Bin 0 -> 4669 bytes Chapter02/Assets/Ship02.png | Bin 0 -> 4630 bytes Chapter02/Assets/Ship03.png | Bin 0 -> 4659 bytes Chapter02/Assets/Ship04.png | Bin 0 -> 4657 bytes Chapter02/Assets/Stars.png | Bin 0 -> 47027 bytes Chapter02/Assets/Tiles.png | Bin 0 -> 28383 bytes Chapter02/BGSpriteComponent.cpp | 69 ++ Chapter02/BGSpriteComponent.h | 37 + Chapter02/Chapter02-windows.sln | 22 + .../Chapter3-mac.xcodeproj/project.pbxproj | 342 ++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/xcschemes/Game-mac.xcscheme | 92 ++ Chapter02/Component.cpp | 27 + Chapter02/Component.h | 27 + Chapter02/Game.cpp | 312 +++++ Chapter02/Game.h | 58 + Chapter02/Game.vcxproj | 124 ++ Chapter02/Game.vcxproj.filters | 64 + Chapter02/Main.cpp | 21 + Chapter02/Math.cpp | 240 ++++ Chapter02/Math.h | 1033 +++++++++++++++++ Chapter02/Ship.cpp | 78 ++ Chapter02/Ship.h | 22 + Chapter02/SpriteComponent.cpp | 56 + Chapter02/SpriteComponent.h | 30 + 42 files changed, 2960 insertions(+) create mode 100644 Chapter02/Actor.cpp create mode 100644 Chapter02/Actor.h create mode 100644 Chapter02/AnimSpriteComponent.cpp create mode 100644 Chapter02/AnimSpriteComponent.h create mode 100644 Chapter02/Assets/Enemy01.png create mode 100644 Chapter02/Assets/Enemy02.png create mode 100644 Chapter02/Assets/Enemy03.png create mode 100644 Chapter02/Assets/Enemy04.png create mode 100644 Chapter02/Assets/Enemy05.png create mode 100644 Chapter02/Assets/Enemy06.png create mode 100644 Chapter02/Assets/Farback01.png create mode 100644 Chapter02/Assets/Farback02.png create mode 100644 Chapter02/Assets/LICENSE.txt create mode 100644 Chapter02/Assets/Laser.png create mode 100644 Chapter02/Assets/MapLayer1.csv create mode 100644 Chapter02/Assets/MapLayer2.csv create mode 100644 Chapter02/Assets/MapLayer3.csv create mode 100644 Chapter02/Assets/Ship01.png create mode 100644 Chapter02/Assets/Ship02.png create mode 100644 Chapter02/Assets/Ship03.png create mode 100644 Chapter02/Assets/Ship04.png create mode 100644 Chapter02/Assets/Stars.png create mode 100644 Chapter02/Assets/Tiles.png create mode 100644 Chapter02/BGSpriteComponent.cpp create mode 100644 Chapter02/BGSpriteComponent.h create mode 100644 Chapter02/Chapter02-windows.sln create mode 100644 Chapter02/Chapter3-mac.xcodeproj/project.pbxproj create mode 100644 Chapter02/Chapter3-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 Chapter02/Chapter3-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme create mode 100644 Chapter02/Component.cpp create mode 100644 Chapter02/Component.h create mode 100644 Chapter02/Game.cpp create mode 100644 Chapter02/Game.h create mode 100644 Chapter02/Game.vcxproj create mode 100644 Chapter02/Game.vcxproj.filters create mode 100644 Chapter02/Main.cpp create mode 100644 Chapter02/Math.cpp create mode 100644 Chapter02/Math.h create mode 100644 Chapter02/Ship.cpp create mode 100644 Chapter02/Ship.h create mode 100644 Chapter02/SpriteComponent.cpp create mode 100644 Chapter02/SpriteComponent.h diff --git a/Chapter02/Actor.cpp b/Chapter02/Actor.cpp new file mode 100644 index 00000000..dd256c2d --- /dev/null +++ b/Chapter02/Actor.cpp @@ -0,0 +1,83 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "Actor.h" +#include "Game.h" +#include "Component.h" +#include + +Actor::Actor(Game* game) + :mState(EActive) + , mPosition(Vector2::Zero) + , mScale(1.0f) + , mRotation(0.0f) + , mGame(game) +{ + mGame->AddActor(this); +} + +Actor::~Actor() +{ + mGame->RemoveActor(this); + // Need to delete components + // Because ~Component calls RemoveComponent, need a different style loop + while (!mComponents.empty()) + { + delete mComponents.back(); + } +} + +void Actor::Update(float deltaTime) +{ + if (mState == EActive) + { + UpdateComponents(deltaTime); + UpdateActor(deltaTime); + } +} + +void Actor::UpdateComponents(float deltaTime) +{ + for (auto comp : mComponents) + { + comp->Update(deltaTime); + } +} + +void Actor::UpdateActor(float deltaTime) +{ +} + +void Actor::AddComponent(Component* component) +{ + // Find the insertion point in the sorted vector + // (The first element with a order higher than me) + int myOrder = component->GetUpdateOrder(); + auto iter = mComponents.begin(); + for (; + iter != mComponents.end(); + ++iter) + { + if (myOrder < (*iter)->GetUpdateOrder()) + { + break; + } + } + + // Inserts element before position of iterator + mComponents.insert(iter, component); +} + +void Actor::RemoveComponent(Component* component) +{ + auto iter = std::find(mComponents.begin(), mComponents.end(), component); + if (iter != mComponents.end()) + { + mComponents.erase(iter); + } +} diff --git a/Chapter02/Actor.h b/Chapter02/Actor.h new file mode 100644 index 00000000..7afbf095 --- /dev/null +++ b/Chapter02/Actor.h @@ -0,0 +1,60 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#pragma once +#include +#include "Math.h" +class Actor +{ +public: + enum State + { + EActive, + EPaused, + EDead + }; + + Actor(class Game* game); + virtual ~Actor(); + + // Update function called from Game (not overridable) + void Update(float deltaTime); + // Updates all the components attached to the actor (not overridable) + void UpdateComponents(float deltaTime); + // Any actor-specific update code (overridable) + virtual void UpdateActor(float deltaTime); + + // Getters/setters + const Vector2& GetPosition() const { return mPosition; } + void SetPosition(const Vector2& pos) { mPosition = pos; } + float GetScale() const { return mScale; } + void SetScale(float scale) { mScale = scale; } + float GetRotation() const { return mRotation; } + void SetRotation(float rotation) { mRotation = rotation; } + + State GetState() const { return mState; } + void SetState(State state) { mState = state; } + + class Game* GetGame() { return mGame; } + + + // Add/remove components + void AddComponent(class Component* component); + void RemoveComponent(class Component* component); +private: + // Actor's state + State mState; + + // Transform + Vector2 mPosition; + float mScale; + float mRotation; + + std::vector mComponents; + class Game* mGame; +}; diff --git a/Chapter02/AnimSpriteComponent.cpp b/Chapter02/AnimSpriteComponent.cpp new file mode 100644 index 00000000..f39ac8dd --- /dev/null +++ b/Chapter02/AnimSpriteComponent.cpp @@ -0,0 +1,49 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "AnimSpriteComponent.h" +#include "Math.h" + +AnimSpriteComponent::AnimSpriteComponent(Actor* owner, int drawOrder) + :SpriteComponent(owner, drawOrder) + , mCurrFrame(0.0f) + , mAnimFPS(24.0f) +{ +} + +void AnimSpriteComponent::Update(float deltaTime) +{ + SpriteComponent::Update(deltaTime); + + if (mAnimTextures.size() > 0) + { + // Update the current frame based on frame rate + // and delta time + mCurrFrame += mAnimFPS * deltaTime; + + // Wrap current frame if needed + while (mCurrFrame >= mAnimTextures.size()) + { + mCurrFrame -= mAnimTextures.size(); + } + + // Set the current texture + SetTexture(mAnimTextures[static_cast(mCurrFrame)]); + } +} + +void AnimSpriteComponent::SetAnimTextures(const std::vector& textures) +{ + mAnimTextures = textures; + if (mAnimTextures.size() > 0) + { + // Set the active texture to first frame + mCurrFrame = 0.0f; + SetTexture(mAnimTextures[0]); + } +} diff --git a/Chapter02/AnimSpriteComponent.h b/Chapter02/AnimSpriteComponent.h new file mode 100644 index 00000000..496a47e6 --- /dev/null +++ b/Chapter02/AnimSpriteComponent.h @@ -0,0 +1,30 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "SpriteComponent.h" +#include +class AnimSpriteComponent : public SpriteComponent +{ +public: + AnimSpriteComponent(class Actor* owner, int drawOrder = 100); + // Update animation every frame (overriden from component) + void Update(float deltaTime) override; + // Set the textures used for animation + void SetAnimTextures(const std::vector& textures); + // Set/get the animation FPS + float GetAnimFPS() const { return mAnimFPS; } + void SetAnimFPS(float fps) { mAnimFPS = fps; } +private: + // All textures in the animation + std::vector mAnimTextures; + // Current frame displayed + float mCurrFrame; + // Animation frame rate + float mAnimFPS; +}; diff --git a/Chapter02/Assets/Enemy01.png b/Chapter02/Assets/Enemy01.png new file mode 100644 index 0000000000000000000000000000000000000000..e986995871e523c15d6d0ad006b65103daa92887 GIT binary patch literal 10492 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 z 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

Hxi^Px{C3C^Mm55hMpPMHq@8Lz7$%iik1`V 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�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≥c4vA$l?43m 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 ~m+@C5`Ys&|&!Od8pDwk{6dQ{QH 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

Dp=zuLH<7k>W|V^e>D??SJ9 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%0A^T)u&21kj6Knf-IU8WJ+IMYI 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 Ef~@gIjQ{`u literal 0 HcmV?d00001 diff --git a/Chapter02/Assets/Farback02.png b/Chapter02/Assets/Farback02.png new file mode 100644 index 0000000000000000000000000000000000000000..f6dec9a8088eb2c0a2ec16326226c03350f3afca GIT binary patch literal 1004765 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

)nCA(mhEb9;6gUptO`b5g6p`OmFr#WD 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

f`@97<=+ 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%0ASD|WiI&h0@b_hO0deQw#uJMrtk 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

wlU|$*s;Am)zA^BxlQzsSw1~+~`~`@d1LJ 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�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ν15(cYN{%iBH;95Nz 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

-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%0A3l-*3i41p0$y`&KJlZfS%<3 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

`18xc|N8%Y<1g=px5vTzp*%+6M;Ctk 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

#X0^s_JGuA|c}hVT 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%0AI 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 Tu#A7a00000NkvXXu0mjf5cekI literal 0 HcmV?d00001 diff --git a/Chapter02/Assets/LICENSE.txt b/Chapter02/Assets/LICENSE.txt new file mode 100644 index 00000000..c7c07f86 --- /dev/null +++ b/Chapter02/Assets/LICENSE.txt @@ -0,0 +1,5 @@ +These sprites were designed by Jacob Zinman-Jeanes (http://jeanes.co) for Gamedevtuts+ (http://gamedev.tutsplus.com/). + +To find out more about what's in this mini sprite pack, check out this post: http://gamedev.tutsplus.com/articles/news/enjoy-these-totally-free-space-based-shoot-em-up-sprites/ + +These sprites are licensed under the CC BY 3.0 license: http://creativecommons.org/licenses/by/3.0/ \ No newline at end of file diff --git a/Chapter02/Assets/Laser.png b/Chapter02/Assets/Laser.png new file mode 100644 index 0000000000000000000000000000000000000000..c65bc5e057bc48241682fd6e0532a75dc3a94f06 GIT binary patch literal 691 zcmV;k0!;mhP)QpyWY0P&Z~%0Hu0k%p3RL!d2C6o|064O}=cw#i07YoYe{3^210?yEK$aBf z0k46#riMBK6cz=)fjrnBcYzb&y#aWRt*OvU3It%F@J`@^K*!Oz0&APyHb7tCBXF+J zagM_^uvO@a9YL-Qz-OAd4<~#AzP5c}2z(*SKB4L-K$GNaVyp!E2_P3ZVK_YH;-Zf_ z27oHW2$RVvRW(RHAixQu(Llyyp)CCb0EiL2x;kb$?E{hkj$||vE-xEG&yi)w*;&x( zw37e;avcsE!pu7p1HIl(kOWZ3!vmBhRF!irj4+$kR+2SXa(L9qq?YUJTw}zsAwh}) zy}vJjO#-NaIk&fS9gp95ra%C#Yh|(cWeF(;ASx`REbq9vIk)QQ$x#7!2B5)SEP-#P zhG#Vtlm5FEr8)qWz*^zX+Ob3Da=Ze5SXr);0&9Vv_V?b^a0SdviI|*l1Wq>CTj0?^gR>7jo6{G&Ftqx-G{gJoikIz7m;lzc z_H2mKy;TFXm-yd|YBOG^BT(BswQemqhhk|qwGEKYe;)wRZpTRcPtzh!R@>X; Z=`SZ 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 literal 0 HcmV?d00001 diff --git a/Chapter02/Assets/Stars.png b/Chapter02/Assets/Stars.png new file mode 100644 index 0000000000000000000000000000000000000000..3ceb00ec64226f149f2dc3cb1939d5daee3e4831 GIT binary patch literal 47027 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 literal 0 HcmV?d00001 diff --git a/Chapter02/BGSpriteComponent.cpp b/Chapter02/BGSpriteComponent.cpp new file mode 100644 index 00000000..34635832 --- /dev/null +++ b/Chapter02/BGSpriteComponent.cpp @@ -0,0 +1,69 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "BGSpriteComponent.h" +#include "Actor.h" + +BGSpriteComponent::BGSpriteComponent(class Actor* owner, int drawOrder) + :SpriteComponent(owner, drawOrder) + ,mScrollSpeed(0.0f) +{ +} + +void BGSpriteComponent::Update(float deltaTime) +{ + SpriteComponent::Update(deltaTime); + for (auto& bg : mBGTextures) + { + // Update the x offset + bg.mOffset.x += mScrollSpeed * deltaTime; + // If this is completely off the screen, reset offset to + // the right of the last bg texture + if (bg.mOffset.x < -mScreenSize.x) + { + bg.mOffset.x = (mBGTextures.size() - 1) * mScreenSize.x - 1; + } + } +} + +void BGSpriteComponent::Draw(SDL_Renderer* renderer) +{ + // Draw each background texture + for (auto& bg : mBGTextures) + { + SDL_Rect r; + // Assume screen size dimensions + r.w = static_cast(mScreenSize.x); + r.h = static_cast(mScreenSize.y); + // Center the rectangle around the position of the owner + r.x = static_cast(mOwner->GetPosition().x - r.w / 2 + bg.mOffset.x); + r.y = static_cast(mOwner->GetPosition().y - r.h / 2 + bg.mOffset.y); + + // Draw this background + SDL_RenderCopy(renderer, + bg.mTexture, + nullptr, + &r + ); + } +} + +void BGSpriteComponent::SetBGTextures(const std::vector& textures) +{ + int count = 0; + for (auto tex : textures) + { + BGTexture temp; + temp.mTexture = tex; + // Each texture is screen width in offset + temp.mOffset.x = count * mScreenSize.x; + temp.mOffset.y = 0; + mBGTextures.emplace_back(temp); + count++; + } +} diff --git a/Chapter02/BGSpriteComponent.h b/Chapter02/BGSpriteComponent.h new file mode 100644 index 00000000..910bee5a --- /dev/null +++ b/Chapter02/BGSpriteComponent.h @@ -0,0 +1,37 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "SpriteComponent.h" +#include +#include "Math.h" +class BGSpriteComponent : public SpriteComponent +{ +public: + // Set draw order to default to lower (so it's in the background) + BGSpriteComponent(class Actor* owner, int drawOrder = 10); + // Update/draw overriden from parent + void Update(float deltaTime) override; + void Draw(SDL_Renderer* renderer) override; + // Set the textures used for the background + void SetBGTextures(const std::vector& textures); + // Get/set screen size and scroll speed + void SetScreenSize(const Vector2& size) { mScreenSize = size; } + void SetScrollSpeed(float speed) { mScrollSpeed = speed; } + float GetScrollSpeed() const { return mScrollSpeed; } +private: + // Struct to encapsulate each bg image and its offset + struct BGTexture + { + SDL_Texture* mTexture; + Vector2 mOffset; + }; + std::vector mBGTextures; + Vector2 mScreenSize; + float mScrollSpeed; +}; diff --git a/Chapter02/Chapter02-windows.sln b/Chapter02/Chapter02-windows.sln new file mode 100644 index 00000000..f560df0f --- /dev/null +++ b/Chapter02/Chapter02-windows.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.26430.12 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Game", "Game.vcxproj", "{BC508D87-495F-4554-932D-DD68388B63CC}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {BC508D87-495F-4554-932D-DD68388B63CC}.Debug|Win32.ActiveCfg = Debug|Win32 + {BC508D87-495F-4554-932D-DD68388B63CC}.Debug|Win32.Build.0 = Debug|Win32 + {BC508D87-495F-4554-932D-DD68388B63CC}.Release|Win32.ActiveCfg = Release|Win32 + {BC508D87-495F-4554-932D-DD68388B63CC}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chapter02/Chapter3-mac.xcodeproj/project.pbxproj b/Chapter02/Chapter3-mac.xcodeproj/project.pbxproj new file mode 100644 index 00000000..991e7d82 --- /dev/null +++ b/Chapter02/Chapter3-mac.xcodeproj/project.pbxproj @@ -0,0 +1,342 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 9223C4781F009428009A94D7 /* Game.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4671F009428009A94D7 /* Game.cpp */; }; + 9223C4791F009428009A94D7 /* Actor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4681F009428009A94D7 /* Actor.cpp */; }; + 9223C47A1F009428009A94D7 /* AnimSpriteComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C46A1F009428009A94D7 /* AnimSpriteComponent.cpp */; }; + 9223C47B1F009428009A94D7 /* BGSpriteComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C46C1F009428009A94D7 /* BGSpriteComponent.cpp */; }; + 9223C47C1F009428009A94D7 /* Component.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C46E1F009428009A94D7 /* Component.cpp */; }; + 9223C47D1F009428009A94D7 /* Main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4711F009428009A94D7 /* Main.cpp */; }; + 9223C47E1F009428009A94D7 /* Math.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4721F009428009A94D7 /* Math.cpp */; }; + 9223C47F1F009428009A94D7 /* Ship.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4741F009428009A94D7 /* Ship.cpp */; }; + 9223C4801F009428009A94D7 /* SpriteComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4761F009428009A94D7 /* SpriteComponent.cpp */; }; + 92D324FB1B697389005A86C7 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 92D324FA1B697389005A86C7 /* CoreFoundation.framework */; }; + 92E46E941B6353E50035CD21 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 92E46E931B6353E50035CD21 /* OpenGL.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 9223C4671F009428009A94D7 /* Game.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Game.cpp; sourceTree = ""; }; + 9223C4681F009428009A94D7 /* Actor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Actor.cpp; sourceTree = ""; }; + 9223C4691F009428009A94D7 /* Actor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Actor.h; sourceTree = ""; }; + 9223C46A1F009428009A94D7 /* AnimSpriteComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AnimSpriteComponent.cpp; sourceTree = ""; }; + 9223C46B1F009428009A94D7 /* AnimSpriteComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AnimSpriteComponent.h; sourceTree = ""; }; + 9223C46C1F009428009A94D7 /* BGSpriteComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BGSpriteComponent.cpp; sourceTree = ""; }; + 9223C46D1F009428009A94D7 /* BGSpriteComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BGSpriteComponent.h; sourceTree = ""; }; + 9223C46E1F009428009A94D7 /* Component.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Component.cpp; sourceTree = ""; }; + 9223C46F1F009428009A94D7 /* Component.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Component.h; sourceTree = ""; }; + 9223C4701F009428009A94D7 /* Game.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Game.h; sourceTree = ""; }; + 9223C4711F009428009A94D7 /* Main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Main.cpp; sourceTree = ""; }; + 9223C4721F009428009A94D7 /* Math.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Math.cpp; sourceTree = ""; }; + 9223C4731F009428009A94D7 /* Math.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Math.h; sourceTree = ""; }; + 9223C4741F009428009A94D7 /* Ship.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Ship.cpp; sourceTree = ""; }; + 9223C4751F009428009A94D7 /* Ship.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Ship.h; sourceTree = ""; }; + 9223C4761F009428009A94D7 /* SpriteComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpriteComponent.cpp; sourceTree = ""; }; + 9223C4771F009428009A94D7 /* SpriteComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpriteComponent.h; sourceTree = ""; }; + 92D324FA1B697389005A86C7 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; + 92E46DF71B634EA30035CD21 /* Game-mac */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "Game-mac"; sourceTree = BUILT_PRODUCTS_DIR; }; + 92E46E931B6353E50035CD21 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 92E46DF41B634EA30035CD21 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 92D324FB1B697389005A86C7 /* CoreFoundation.framework in Frameworks */, + 92E46E941B6353E50035CD21 /* OpenGL.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 92E46DEE1B634EA30035CD21 = { + isa = PBXGroup; + children = ( + 9223C4681F009428009A94D7 /* Actor.cpp */, + 9223C4691F009428009A94D7 /* Actor.h */, + 9223C46A1F009428009A94D7 /* AnimSpriteComponent.cpp */, + 9223C46B1F009428009A94D7 /* AnimSpriteComponent.h */, + 9223C46C1F009428009A94D7 /* BGSpriteComponent.cpp */, + 9223C46D1F009428009A94D7 /* BGSpriteComponent.h */, + 9223C46E1F009428009A94D7 /* Component.cpp */, + 9223C46F1F009428009A94D7 /* Component.h */, + 9223C4671F009428009A94D7 /* Game.cpp */, + 9223C4701F009428009A94D7 /* Game.h */, + 9223C4711F009428009A94D7 /* Main.cpp */, + 9223C4721F009428009A94D7 /* Math.cpp */, + 9223C4731F009428009A94D7 /* Math.h */, + 9223C4741F009428009A94D7 /* Ship.cpp */, + 9223C4751F009428009A94D7 /* Ship.h */, + 9223C4761F009428009A94D7 /* SpriteComponent.cpp */, + 9223C4771F009428009A94D7 /* SpriteComponent.h */, + 92E46DF81B634EA30035CD21 /* Products */, + 92D324FA1B697389005A86C7 /* CoreFoundation.framework */, + 92E46E931B6353E50035CD21 /* OpenGL.framework */, + ); + sourceTree = ""; + }; + 92E46DF81B634EA30035CD21 /* Products */ = { + isa = PBXGroup; + children = ( + 92E46DF71B634EA30035CD21 /* Game-mac */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 92E46DF61B634EA30035CD21 /* Game-mac */ = { + isa = PBXNativeTarget; + buildConfigurationList = 92E46DFE1B634EA40035CD21 /* Build configuration list for PBXNativeTarget "Game-mac" */; + buildPhases = ( + 92E46DF31B634EA30035CD21 /* Sources */, + 92E46DF41B634EA30035CD21 /* Frameworks */, + 92E46EA11B63615B0035CD21 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Game-mac"; + productName = "Game-mac"; + productReference = 92E46DF71B634EA30035CD21 /* Game-mac */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 92E46DEF1B634EA30035CD21 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0720; + ORGANIZATIONNAME = "Sanjay Madhav"; + TargetAttributes = { + 92E46DF61B634EA30035CD21 = { + CreatedOnToolsVersion = 6.4; + }; + }; + }; + buildConfigurationList = 92E46DF21B634EA30035CD21 /* Build configuration list for PBXProject "Chapter3-mac" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 92E46DEE1B634EA30035CD21; + productRefGroup = 92E46DF81B634EA30035CD21 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 92E46DF61B634EA30035CD21 /* Game-mac */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXShellScriptBuildPhase section */ + 92E46EA11B63615B0035CD21 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if [ -d \"$BUILD_DIR/Debug\" ]; then\n cp \"$SRCROOT\"/../external/GLEW/lib/mac/*.dylib $BUILD_DIR/Debug\n cp \"$SRCROOT\"/../external/SDL/lib/mac/*.dylib $BUILD_DIR/Debug\nfi\n\nif [ -d \"$BUILD_DIR/Release\" ]; then\n cp \"$SRCROOT\"/../external/GLEW/lib/mac/*.dylib $BUILD_DIR/Release\n cp \"$SRCROOT\"/../external/SDL/lib/mac/*.dylib $BUILD_DIR/Release\nfi"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 92E46DF31B634EA30035CD21 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9223C47D1F009428009A94D7 /* Main.cpp in Sources */, + 9223C47E1F009428009A94D7 /* Math.cpp in Sources */, + 9223C47A1F009428009A94D7 /* AnimSpriteComponent.cpp in Sources */, + 9223C47B1F009428009A94D7 /* BGSpriteComponent.cpp in Sources */, + 9223C4781F009428009A94D7 /* Game.cpp in Sources */, + 9223C4801F009428009A94D7 /* SpriteComponent.cpp in Sources */, + 9223C47F1F009428009A94D7 /* Ship.cpp in Sources */, + 9223C4791F009428009A94D7 /* Actor.cpp in Sources */, + 9223C47C1F009428009A94D7 /* Component.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 92E46DFC1B634EA40035CD21 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + 92E46DFD1B634EA40035CD21 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + }; + name = Release; + }; + 92E46DFF1B634EA40035CD21 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "c++14"; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_ENABLE_CPP_RTTI = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, + "$(SRCROOT)/../external/SDL/include", + "$(SRCROOT)/../external/GLEW/include", + "$(SRCROOT)/../external/SOIL/include", + ); + LIBRARY_SEARCH_PATHS = ( + "$(SRCROOT)/../external/GLEW/lib/mac", + "$(SRCROOT)/../external/SDL/lib/mac", + "$(SRCROOT)/../external/SOIL/lib/mac", + ); + OTHER_LDFLAGS = ( + "-lGLEW.2.1.0", + "-lSDL2-2.0.0", + "-lSDL2_mixer-2.0.0", + "-lSDL2_ttf-2.0.0", + "-lSOIL", + "-lSDL2_image-2.0.0", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 92E46E001B634EA40035CD21 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "c++14"; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_ENABLE_CPP_RTTI = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, + "$(SRCROOT)/../external/SDL/include", + "$(SRCROOT)/../external/GLEW/include", + "$(SRCROOT)/../external/SOIL/include", + ); + LIBRARY_SEARCH_PATHS = ( + "$(SRCROOT)/../external/GLEW/lib/mac", + "$(SRCROOT)/../external/SDL/lib/mac", + "$(SRCROOT)/../external/SOIL/lib/mac", + ); + OTHER_LDFLAGS = ( + "-lGLEW.2.1.0", + "-lSDL2-2.0.0", + "-lSDL2_mixer-2.0.0", + "-lSDL2_ttf-2.0.0", + "-lSOIL", + "-lSDL2_image-2.0.0", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 92E46DF21B634EA30035CD21 /* Build configuration list for PBXProject "Chapter3-mac" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 92E46DFC1B634EA40035CD21 /* Debug */, + 92E46DFD1B634EA40035CD21 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 92E46DFE1B634EA40035CD21 /* Build configuration list for PBXNativeTarget "Game-mac" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 92E46DFF1B634EA40035CD21 /* Debug */, + 92E46E001B634EA40035CD21 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 92E46DEF1B634EA30035CD21 /* Project object */; +} diff --git a/Chapter02/Chapter3-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Chapter02/Chapter3-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..84be36ce --- /dev/null +++ b/Chapter02/Chapter3-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Chapter02/Chapter3-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme b/Chapter02/Chapter3-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme new file mode 100644 index 00000000..8c41bc4b --- /dev/null +++ b/Chapter02/Chapter3-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter02/Component.cpp b/Chapter02/Component.cpp new file mode 100644 index 00000000..9b345987 --- /dev/null +++ b/Chapter02/Component.cpp @@ -0,0 +1,27 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "Component.h" +#include "Actor.h" + +Component::Component(Actor* owner, int updateOrder) + :mOwner(owner) + ,mUpdateOrder(updateOrder) +{ + // Add to actor's vector of components + mOwner->AddComponent(this); +} + +Component::~Component() +{ + mOwner->RemoveComponent(this); +} + +void Component::Update(float deltaTime) +{ +} diff --git a/Chapter02/Component.h b/Chapter02/Component.h new file mode 100644 index 00000000..26d6fb87 --- /dev/null +++ b/Chapter02/Component.h @@ -0,0 +1,27 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#pragma once +class Component +{ +public: + // Constructor + // (the lower the update order, the earlier the component updates) + Component(class Actor* owner, int updateOrder = 100); + // Destructor + virtual ~Component(); + // Update this component by delta time + virtual void Update(float deltaTime); + + int GetUpdateOrder() const { return mUpdateOrder; } +protected: + // Owning actor + class Actor* mOwner; + // Update order of component + int mUpdateOrder; +}; diff --git a/Chapter02/Game.cpp b/Chapter02/Game.cpp new file mode 100644 index 00000000..77896c3b --- /dev/null +++ b/Chapter02/Game.cpp @@ -0,0 +1,312 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "Game.h" +#include "SDL/SDL_image.h" +#include +#include "Actor.h" +#include "SpriteComponent.h" +#include "Ship.h" +#include "BGSpriteComponent.h" + +Game::Game() +:mWindow(nullptr) +,mRenderer(nullptr) +,mIsRunning(true) +,mUpdatingActors(false) +{ + +} + +bool Game::Initialize() +{ + if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO) != 0) + { + SDL_Log("Unable to initialize SDL: %s", SDL_GetError()); + return false; + } + + mWindow = SDL_CreateWindow("Game Programming in C++ (Chapter 3)", 100, 100, 1024, 768, 0); + if (!mWindow) + { + SDL_Log("Failed to create window: %s", SDL_GetError()); + return false; + } + + mRenderer = SDL_CreateRenderer(mWindow, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); + if (!mRenderer) + { + SDL_Log("Failed to create renderer: %s", SDL_GetError()); + return false; + } + + if (IMG_Init(IMG_INIT_PNG) == 0) + { + SDL_Log("Unable to initialize SDL_image: %s", SDL_GetError()); + return false; + } + + LoadData(); + + mTicksCount = SDL_GetTicks(); + + return true; +} + +void Game::RunLoop() +{ + while (mIsRunning) + { + ProcessInput(); + UpdateGame(); + GenerateOutput(); + } +} + +void Game::ProcessInput() +{ + SDL_Event event; + while (SDL_PollEvent(&event)) + { + switch (event.type) + { + case SDL_QUIT: + mIsRunning = false; + break; + } + } + + const Uint8* state = SDL_GetKeyboardState(NULL); + if (state[SDL_SCANCODE_ESCAPE]) + { + mIsRunning = false; + } + + // Process ship input + mShip->ProcessKeyboard(state); +} + +void Game::UpdateGame() +{ + // Compute delta time + // Wait until 16ms has elapsed since last frame + while (!SDL_TICKS_PASSED(SDL_GetTicks(), mTicksCount + 16)) + ; + + float deltaTime = (SDL_GetTicks() - mTicksCount) / 1000.0f; + if (deltaTime > 0.05f) + { + deltaTime = 0.05f; + } + mTicksCount = SDL_GetTicks(); + + // Update all actors + mUpdatingActors = true; + for (auto actor : mActors) + { + actor->Update(deltaTime); + } + mUpdatingActors = false; + + // Move any pending actors to mActors + for (auto pending : mPendingActors) + { + mActors.emplace_back(pending); + } + mPendingActors.clear(); + + // Add any dead actors to a temp vector + std::vector deadActors; + for (auto actor : mActors) + { + if (actor->GetState() == Actor::EDead) + { + deadActors.emplace_back(actor); + } + } + + // Delete dead actors (which removes them from mActors) + for (auto actor : deadActors) + { + delete actor; + } +} + +void Game::GenerateOutput() +{ + SDL_SetRenderDrawColor(mRenderer, 0, 0, 0, 255); + SDL_RenderClear(mRenderer); + + // Draw all sprite components + for (auto sprite : mSprites) + { + sprite->Draw(mRenderer); + } + + SDL_RenderPresent(mRenderer); +} + +void Game::LoadData() +{ + // Load textures + LoadTexture("Assets/Laser.png"); + LoadTexture("Assets/Ship01.png"); + LoadTexture("Assets/Ship02.png"); + LoadTexture("Assets/Ship03.png"); + LoadTexture("Assets/Ship04.png"); + LoadTexture("Assets/Farback01.png"); + LoadTexture("Assets/Farback02.png"); + LoadTexture("Assets/Stars.png"); + + // Create player's ship + mShip = new Ship(this); + mShip->SetPosition(Vector2(100.0f, 384.0f)); + mShip->SetScale(1.5f); + + // Create actor for the background (this doesn't need a subclass) + Actor* temp = new Actor(this); + temp->SetPosition(Vector2(512.0f, 384.0f)); + // Create the "far back" background + BGSpriteComponent* bg = new BGSpriteComponent(temp); + bg->SetScreenSize(Vector2(1024.0f, 768.0f)); + std::vector bgtexs = { + GetTexture("Assets/Farback01.png"), + GetTexture("Assets/Farback02.png") + }; + bg->SetBGTextures(bgtexs); + bg->SetScrollSpeed(-100.0f); + // Create the closer background + bg = new BGSpriteComponent(temp, 50); + bg->SetScreenSize(Vector2(1024.0f, 768.0f)); + bgtexs = { + GetTexture("Assets/Stars.png"), + GetTexture("Assets/Stars.png") + }; + bg->SetBGTextures(bgtexs); + bg->SetScrollSpeed(-200.0f); +} + +void Game::UnloadData() +{ + // Delete actors + // Because ~Actor calls RemoveActor, have to use a different style loop + while (!mActors.empty()) + { + delete mActors.back(); + } + + // Destroy textures + for (auto i : mTextures) + { + SDL_DestroyTexture(i.second); + } + mTextures.clear(); +} + +void Game::LoadTexture(const char* fileName) +{ + // Load from file + SDL_Surface* surf = IMG_Load(fileName); + if (!surf) + { + SDL_Log("Failed to load texture file %s", fileName); + return; + } + + // Create texture from surface + SDL_Texture* text = SDL_CreateTextureFromSurface(mRenderer, surf); + SDL_FreeSurface(surf); + if (!text) + { + SDL_Log("Failed to convert surface to texture for %s", fileName); + return; + } + + mTextures.emplace(fileName, text); +} + +SDL_Texture * Game::GetTexture(const char * fileName) +{ + SDL_Texture* tex = nullptr; + auto iter = mTextures.find(fileName); + if (iter != mTextures.end()) + { + tex = iter->second; + } + return tex; +} + +void Game::Shutdown() +{ + UnloadData(); + IMG_Quit(); + SDL_DestroyRenderer(mRenderer); + SDL_DestroyWindow(mWindow); + SDL_Quit(); +} + +void Game::AddActor(Actor* actor) +{ + // If we're updating actors, need to add to pending + if (mUpdatingActors) + { + mPendingActors.emplace_back(actor); + } + else + { + mActors.emplace_back(actor); + } +} + +void Game::RemoveActor(Actor* actor) +{ + // Is it in pending actors? + auto iter = std::find(mPendingActors.begin(), mPendingActors.end(), actor); + if (iter != mPendingActors.end()) + { + // Swap to end of vector and pop off (avoid erase copies) + std::iter_swap(iter, mPendingActors.end() - 1); + mPendingActors.pop_back(); + } + + // Is it in actors? + iter = std::find(mActors.begin(), mActors.end(), actor); + if (iter != mActors.end()) + { + // Swap to end of vector and pop off (avoid erase copies) + std::iter_swap(iter, mActors.end() - 1); + mActors.pop_back(); + } +} + +void Game::AddSprite(SpriteComponent* sprite) +{ + // Find the insertion point in the sorted vector + // (The first element with a higher draw order than me) + int myDrawOrder = sprite->GetDrawOrder(); + auto iter = mSprites.begin(); + for ( ; + iter != mSprites.end(); + ++iter) + { + if (myDrawOrder < (*iter)->GetDrawOrder()) + { + break; + } + } + + // Inserts element before position of iterator + mSprites.insert(iter, sprite); +} + +void Game::RemoveSprite(SpriteComponent* sprite) +{ + // (We can't swap because it ruins ordering) + auto iter = std::find(mSprites.begin(), mSprites.end(), sprite); + mSprites.erase(iter); +} diff --git a/Chapter02/Game.h b/Chapter02/Game.h new file mode 100644 index 00000000..0f980ca4 --- /dev/null +++ b/Chapter02/Game.h @@ -0,0 +1,58 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "SDL/SDL.h" +#include +#include +#include + +class Game +{ +public: + Game(); + bool Initialize(); + void RunLoop(); + void Shutdown(); + + void AddActor(class Actor* actor); + void RemoveActor(class Actor* actor); + + void AddSprite(class SpriteComponent* sprite); + void RemoveSprite(class SpriteComponent* sprite); + + void LoadTexture(const char* fileName); + SDL_Texture* GetTexture(const char* fileName); +private: + void ProcessInput(); + void UpdateGame(); + void GenerateOutput(); + void LoadData(); + void UnloadData(); + + // Map of textures loaded + std::unordered_map mTextures; + + // All the actors in the game + std::vector mActors; + // Any pending actors + std::vector mPendingActors; + + // All the sprite components drawn + std::vector mSprites; + + SDL_Window* mWindow; + SDL_Renderer* mRenderer; + Uint32 mTicksCount; + bool mIsRunning; + // Track if we're updating actors right now + bool mUpdatingActors; + + // Game-specific + class Ship* mShip; // Player's ship +}; diff --git a/Chapter02/Game.vcxproj b/Chapter02/Game.vcxproj new file mode 100644 index 00000000..ff4157f9 --- /dev/null +++ b/Chapter02/Game.vcxproj @@ -0,0 +1,124 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + + + + + + + + + + + + + + + + + + + + + + {BC508D87-495F-4554-932D-DD68388B63CC} + Win32Proj + Game + 10.0.16299.0 + + + + Application + true + v141 + Unicode + + + Application + false + v141 + true + Unicode + + + + + + + + + + + + + true + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) + true + ..\external\SDL\include;..\external\GLEW\include;..\external\SOIL\include;%(AdditionalIncludeDirectories) + false + Sync + + + Console + true + ..\external\SDL\lib\win\x86;..\external\GLEW\lib\win\x86;..\external\SOIL\lib\win\x86;%(AdditionalLibraryDirectories) + opengl32.lib;SDL2.lib;SDL2main.lib;SDL2_ttf.lib;SDL2_mixer.lib;SDL2_image.lib;glew32.lib;SOIL.lib;%(AdditionalDependencies) + /NODEFAULTLIB:msvcrt.lib %(AdditionalOptions) + + + xcopy "$(ProjectDir)\..\external\SDL\lib\win\x86\*.dll" "$(OutDir)" /i /s /y +xcopy "$(ProjectDir)\..\external\GLEW\lib\win\x86\*.dll" "$(OutDir)" /i /s /y + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) + true + ..\external\SDL\include;..\external\GLEW\include;..\external\SOIL\include;%(AdditionalIncludeDirectories) + false + Sync + + + Console + true + true + true + ..\external\SDL\lib\win\x86;..\external\GLEW\lib\win\x86;..\external\SOIL\lib\win\x86;%(AdditionalLibraryDirectories) + opengl32.lib;SDL2.lib;SDL2main.lib;SDL2_ttf.lib;SDL2_mixer.lib;SDL2_image.lib;glew32.lib;SOIL.lib;%(AdditionalDependencies) + + + xcopy "$(ProjectDir)\..\external\SDL\lib\win\x86\*.dll" "$(OutDir)" /i /s /y +xcopy "$(ProjectDir)\..\external\GLEW\lib\win\x86\*.dll" "$(OutDir)" /i /s /y + + + + + + \ No newline at end of file diff --git a/Chapter02/Game.vcxproj.filters b/Chapter02/Game.vcxproj.filters new file mode 100644 index 00000000..760534ef --- /dev/null +++ b/Chapter02/Game.vcxproj.filters @@ -0,0 +1,64 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/Chapter02/Main.cpp b/Chapter02/Main.cpp new file mode 100644 index 00000000..1f15d82b --- /dev/null +++ b/Chapter02/Main.cpp @@ -0,0 +1,21 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "Game.h" + +int main(int argc, char** argv) +{ + Game game; + bool success = game.Initialize(); + if (success) + { + game.RunLoop(); + } + game.Shutdown(); + return 0; +} diff --git a/Chapter02/Math.cpp b/Chapter02/Math.cpp new file mode 100644 index 00000000..9e1b7932 --- /dev/null +++ b/Chapter02/Math.cpp @@ -0,0 +1,240 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "Math.h" + +const Vector2 Vector2::Zero(0.0f, 0.0f); +const Vector2 Vector2::UnitX(1.0f, 0.0f); +const Vector2 Vector2::UnitY(0.0f, 1.0f); +const Vector2 Vector2::NegUnitX(-1.0f, 0.0f); +const Vector2 Vector2::NegUnitY(0.0f, -1.0f); + +const Vector3 Vector3::Zero(0.0f, 0.0f, 0.f); +const Vector3 Vector3::UnitX(1.0f, 0.0f, 0.0f); +const Vector3 Vector3::UnitY(0.0f, 1.0f, 0.0f); +const Vector3 Vector3::UnitZ(0.0f, 0.0f, 1.0f); +const Vector3 Vector3::NegUnitX(-1.0f, 0.0f, 0.0f); +const Vector3 Vector3::NegUnitY(0.0f, -1.0f, 0.0f); +const Vector3 Vector3::NegUnitZ(0.0f, 0.0f, -1.0f); +const Vector3 Vector3::Infinity(Math::Infinity, Math::Infinity, Math::Infinity); +const Vector3 Vector3::NegInfinity(Math::NegInfinity, Math::NegInfinity, Math::NegInfinity); + +static float m3Ident[3][3] = +{ + { 1.0f, 0.0f, 0.0f }, + { 0.0f, 1.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f } +}; +const Matrix3 Matrix3::Identity(m3Ident); + +static float m4Ident[4][4] = +{ + { 1.0f, 0.0f, 0.0f, 0.0f }, + { 0.0f, 1.0f, 0.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f, 0.0f }, + { 0.0f, 0.0f, 0.0f, 1.0f } +}; + +const Matrix4 Matrix4::Identity(m4Ident); + +const Quaternion Quaternion::Identity(0.0f, 0.0f, 0.0f, 1.0f); + +Vector2 Vector2::Transform(const Vector2& vec, const Matrix3& mat, float w /*= 1.0f*/) +{ + Vector2 retVal; + retVal.x = vec.x * mat.mat[0][0] + vec.y * mat.mat[1][0] + w * mat.mat[2][0]; + retVal.y = vec.x * mat.mat[0][1] + vec.y * mat.mat[1][1] + w * mat.mat[2][1]; + //ignore w since we aren't returning a new value for it... + return retVal; +} + +Vector3 Vector3::Transform(const Vector3& vec, const Matrix4& mat, float w /*= 1.0f*/) +{ + Vector3 retVal; + retVal.x = vec.x * mat.mat[0][0] + vec.y * mat.mat[1][0] + + vec.z * mat.mat[2][0] + w * mat.mat[3][0]; + retVal.y = vec.x * mat.mat[0][1] + vec.y * mat.mat[1][1] + + vec.z * mat.mat[2][1] + w * mat.mat[3][1]; + retVal.z = vec.x * mat.mat[0][2] + vec.y * mat.mat[1][2] + + vec.z * mat.mat[2][2] + w * mat.mat[3][2]; + //ignore w since we aren't returning a new value for it... + return retVal; +} + +// This will transform the vector and renormalize the w component +Vector3 Vector3::TransformWithPerspDiv(const Vector3& vec, const Matrix4& mat, float w /*= 1.0f*/) +{ + Vector3 retVal; + retVal.x = vec.x * mat.mat[0][0] + vec.y * mat.mat[1][0] + + vec.z * mat.mat[2][0] + w * mat.mat[3][0]; + retVal.y = vec.x * mat.mat[0][1] + vec.y * mat.mat[1][1] + + vec.z * mat.mat[2][1] + w * mat.mat[3][1]; + retVal.z = vec.x * mat.mat[0][2] + vec.y * mat.mat[1][2] + + vec.z * mat.mat[2][2] + w * mat.mat[3][2]; + float transformedW = vec.x * mat.mat[0][3] + vec.y * mat.mat[1][3] + + vec.z * mat.mat[2][3] + w * mat.mat[3][3]; + if (!Math::NearZero(Math::Abs(transformedW))) + { + transformedW = 1.0f / transformedW; + retVal *= transformedW; + } + return retVal; +} + +// Transform a Vector3 by a quaternion +Vector3 Vector3::Transform(const Vector3& v, const Quaternion& q) +{ + // v + 2.0*cross(q.xyz, cross(q.xyz,v) + q.w*v); + Vector3 qv(q.x, q.y, q.z); + Vector3 retVal = v; + retVal += 2.0f * Vector3::Cross(qv, Vector3::Cross(qv, v) + q.w * v); + return retVal; +} + +void Matrix4::Invert() +{ + // Thanks slow math + float tmp[12]; /* temp array for pairs */ + float src[16]; /* array of transpose source matrix */ + float dst[16]; /* storage */ + float det; /* determinant */ + /* transpose matrix */ + + // row 1 to col 1 + src[0] = mat[0][0]; + src[4] = mat[0][1]; + src[8] = mat[0][2]; + src[12] = mat[0][3]; + + // row 2 to col 2 + src[1] = mat[1][0]; + src[5] = mat[1][1]; + src[9] = mat[1][2]; + src[13] = mat[1][3]; + + // row 3 to col 3 + src[2] = mat[2][0]; + src[6] = mat[2][1]; + src[10] = mat[2][2]; + src[14] = mat[2][3]; + + // row 4 to col 4 + src[3] = mat[3][0]; + src[7] = mat[3][1]; + src[11] = mat[3][2]; + src[15] = mat[3][3]; + + // for (int i = 0; i < 4; i++) { + // src[i] = mat[i*4]; + // src[i + 4] = mat[i*4 + 1]; + // src[i + 8] = mat[i*4 + 2]; + // src[i + 12] = mat[i*4 + 3]; + // } + /* calculate pairs for first 8 elements (cofactors) */ + tmp[0] = src[10] * src[15]; + tmp[1] = src[11] * src[14]; + tmp[2] = src[9] * src[15]; + tmp[3] = src[11] * src[13]; + tmp[4] = src[9] * src[14]; + tmp[5] = src[10] * src[13]; + tmp[6] = src[8] * src[15]; + tmp[7] = src[11] * src[12]; + tmp[8] = src[8] * src[14]; + tmp[9] = src[10] * src[12]; + tmp[10] = src[8] * src[13]; + tmp[11] = src[9] * src[12]; + /* calculate first 8 elements (cofactors) */ + dst[0] = tmp[0] * src[5] + tmp[3] * src[6] + tmp[4] * src[7]; + dst[0] -= tmp[1] * src[5] + tmp[2] * src[6] + tmp[5] * src[7]; + dst[1] = tmp[1] * src[4] + tmp[6] * src[6] + tmp[9] * src[7]; + dst[1] -= tmp[0] * src[4] + tmp[7] * src[6] + tmp[8] * src[7]; + dst[2] = tmp[2] * src[4] + tmp[7] * src[5] + tmp[10] * src[7]; + dst[2] -= tmp[3] * src[4] + tmp[6] * src[5] + tmp[11] * src[7]; + dst[3] = tmp[5] * src[4] + tmp[8] * src[5] + tmp[11] * src[6]; + dst[3] -= tmp[4] * src[4] + tmp[9] * src[5] + tmp[10] * src[6]; + dst[4] = tmp[1] * src[1] + tmp[2] * src[2] + tmp[5] * src[3]; + dst[4] -= tmp[0] * src[1] + tmp[3] * src[2] + tmp[4] * src[3]; + dst[5] = tmp[0] * src[0] + tmp[7] * src[2] + tmp[8] * src[3]; + dst[5] -= tmp[1] * src[0] + tmp[6] * src[2] + tmp[9] * src[3]; + dst[6] = tmp[3] * src[0] + tmp[6] * src[1] + tmp[11] * src[3]; + dst[6] -= tmp[2] * src[0] + tmp[7] * src[1] + tmp[10] * src[3]; + dst[7] = tmp[4] * src[0] + tmp[9] * src[1] + tmp[10] * src[2]; + dst[7] -= tmp[5] * src[0] + tmp[8] * src[1] + tmp[11] * src[2]; + /* calculate pairs for second 8 elements (cofactors) */ + tmp[0] = src[2] * src[7]; + tmp[1] = src[3] * src[6]; + tmp[2] = src[1] * src[7]; + tmp[3] = src[3] * src[5]; + tmp[4] = src[1] * src[6]; + tmp[5] = src[2] * src[5]; + tmp[6] = src[0] * src[7]; + tmp[7] = src[3] * src[4]; + tmp[8] = src[0] * src[6]; + tmp[9] = src[2] * src[4]; + tmp[10] = src[0] * src[5]; + tmp[11] = src[1] * src[4]; + /* calculate second 8 elements (cofactors) */ + dst[8] = tmp[0] * src[13] + tmp[3] * src[14] + tmp[4] * src[15]; + dst[8] -= tmp[1] * src[13] + tmp[2] * src[14] + tmp[5] * src[15]; + dst[9] = tmp[1] * src[12] + tmp[6] * src[14] + tmp[9] * src[15]; + dst[9] -= tmp[0] * src[12] + tmp[7] * src[14] + tmp[8] * src[15]; + dst[10] = tmp[2] * src[12] + tmp[7] * src[13] + tmp[10] * src[15]; + dst[10] -= tmp[3] * src[12] + tmp[6] * src[13] + tmp[11] * src[15]; + dst[11] = tmp[5] * src[12] + tmp[8] * src[13] + tmp[11] * src[14]; + dst[11] -= tmp[4] * src[12] + tmp[9] * src[13] + tmp[10] * src[14]; + dst[12] = tmp[2] * src[10] + tmp[5] * src[11] + tmp[1] * src[9]; + dst[12] -= tmp[4] * src[11] + tmp[0] * src[9] + tmp[3] * src[10]; + dst[13] = tmp[8] * src[11] + tmp[0] * src[8] + tmp[7] * src[10]; + dst[13] -= tmp[6] * src[10] + tmp[9] * src[11] + tmp[1] * src[8]; + dst[14] = tmp[6] * src[9] + tmp[11] * src[11] + tmp[3] * src[8]; + dst[14] -= tmp[10] * src[11] + tmp[2] * src[8] + tmp[7] * src[9]; + dst[15] = tmp[10] * src[10] + tmp[4] * src[8] + tmp[9] * src[9]; + dst[15] -= tmp[8] * src[9] + tmp[11] * src[10] + tmp[5] * src[8]; + /* calculate determinant */ + det = src[0] * dst[0] + src[1] * dst[1] + src[2] * dst[2] + src[3] * dst[3]; + /* calculate matrix inverse */ + det = 1 / det; + for (int j = 0; j < 16; j++) + dst[j] *= det; + + // Set it back + for (int i = 0; i < 4; i++) + { + for (int j = 0; j < 4; j++) + { + mat[i][j] = dst[i * 4 + j]; + } + } +} + +Matrix4 Matrix4::CreateFromQuaternion(const class Quaternion& q) +{ + float mat[4][4]; + + mat[0][0] = 1.0f - 2.0f * q.y * q.y - 2.0f * q.z * q.z; + mat[0][1] = 2.0f * q.x * q.y + 2.0f * q.w * q.z; + mat[0][2] = 2.0f * q.x * q.z - 2.0f * q.w * q.y; + mat[0][3] = 0.0f; + + mat[1][0] = 2.0f * q.x * q.y - 2.0f * q.w * q.z; + mat[1][1] = 1.0f - 2.0f * q.x * q.x - 2.0f * q.z * q.z; + mat[1][2] = 2.0f * q.y * q.z + 2.0f * q.w * q.x; + mat[1][3] = 0.0f; + + mat[2][0] = 2.0f * q.x * q.z + 2.0f * q.w * q.y; + mat[2][1] = 2.0f * q.y * q.z - 2.0f * q.w * q.x; + mat[2][2] = 1.0f - 2.0f * q.x * q.x - 2.0f * q.y * q.y; + mat[2][3] = 0.0f; + + mat[3][0] = 0.0f; + mat[3][1] = 0.0f; + mat[3][2] = 0.0f; + mat[3][3] = 1.0f; + + return Matrix4(mat); +} diff --git a/Chapter02/Math.h b/Chapter02/Math.h new file mode 100644 index 00000000..51de3a26 --- /dev/null +++ b/Chapter02/Math.h @@ -0,0 +1,1033 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#pragma once + +#include +#include +#include + +namespace Math +{ + const float Pi = 3.1415926535f; + const float TwoPi = Pi * 2.0f; + const float PiOver2 = Pi / 2.0f; + const float Infinity = std::numeric_limits::infinity(); + const float NegInfinity = -std::numeric_limits::infinity(); + + inline float ToRadians(float degrees) + { + return degrees * Pi / 180.0f; + } + + inline float ToDegrees(float radians) + { + return radians * 180.0f / Pi; + } + + inline bool NearZero(float val, float epsilon = 0.001f) + { + if (fabs(val) <= epsilon) + { + return true; + } + else + { + return false; + } + } + + template + T Max(const T& a, const T& b) + { + return (a < b ? b : a); + } + + template + T Min(const T& a, const T& b) + { + return (a < b ? a : b); + } + + template + T Clamp(const T& value, const T& lower, const T& upper) + { + return Min(upper, Max(lower, value)); + } + + inline float Abs(float value) + { + return fabs(value); + } + + inline float Cos(float angle) + { + return cosf(angle); + } + + inline float Sin(float angle) + { + return sinf(angle); + } + + inline float Tan(float angle) + { + return tanf(angle); + } + + inline float Acos(float value) + { + return acosf(value); + } + + inline float Atan2(float y, float x) + { + return atan2f(y, x); + } + + inline float Cot(float angle) + { + return 1.0f / Tan(angle); + } + + inline float Lerp(float a, float b, float f) + { + return a + f * (b - a); + } + + inline float Sqrt(float value) + { + return sqrtf(value); + } + + inline float Fmod(float numer, float denom) + { + return fmod(numer, denom); + } +} + +// 2D Vector +class Vector2 +{ +public: + float x; + float y; + + Vector2() + :x(0.0f) + ,y(0.0f) + {} + + explicit Vector2(float inX, float inY) + :x(inX) + ,y(inY) + {} + + // Set both components in one line + void Set(float inX, float inY) + { + x = inX; + y = inY; + } + + // Vector addition (a + b) + friend Vector2 operator+(const Vector2& a, const Vector2& b) + { + return Vector2(a.x + b.x, a.y + b.y); + } + + // Vector subtraction (a - b) + friend Vector2 operator-(const Vector2& a, const Vector2& b) + { + return Vector2(a.x - b.x, a.y - b.y); + } + + // Component-wise multiplication + // (a.x * b.x, ...) + friend Vector2 operator*(const Vector2& a, const Vector2& b) + { + return Vector2(a.x * b.x, a.y * b.y); + } + + // Scalar multiplication + friend Vector2 operator*(const Vector2& vec, float scalar) + { + return Vector2(vec.x * scalar, vec.y * scalar); + } + + // Scalar multiplication + friend Vector2 operator*(float scalar, const Vector2& vec) + { + return Vector2(vec.x * scalar, vec.y * scalar); + } + + // Scalar *= + Vector2& operator*=(float scalar) + { + x *= scalar; + y *= scalar; + return *this; + } + + // Vector += + Vector2& operator+=(const Vector2& right) + { + x += right.x; + y += right.y; + return *this; + } + + // Vector -= + Vector2& operator-=(const Vector2& right) + { + x -= right.x; + y -= right.y; + return *this; + } + + // Length squared of vector + float LengthSq() const + { + return (x*x + y*y); + } + + // Length of vector + float Length() const + { + return (Math::Sqrt(LengthSq())); + } + + // Normalize this vector + void Normalize() + { + float length = Length(); + x /= length; + y /= length; + } + + // Normalize the provided vector + static Vector2 Normalize(const Vector2& vec) + { + Vector2 temp = vec; + temp.Normalize(); + return temp; + } + + // Dot product between two vectors (a dot b) + static float Dot(const Vector2& a, const Vector2& b) + { + return (a.x * b.x + a.y * b.y); + } + + // Lerp from A to B by f + static Vector2 Lerp(const Vector2& a, const Vector2& b, float f) + { + return Vector2(a + f * (b - a)); + } + + // Reflect V about (normalized) N + static Vector2 Reflect(const Vector2& v, const Vector2& n) + { + return v - 2.0f * Vector2::Dot(v, n) * n; + } + + // Transform vector by matrix + static Vector2 Transform(const Vector2& vec, const class Matrix3& mat, float w = 1.0f); + + static const Vector2 Zero; + static const Vector2 UnitX; + static const Vector2 UnitY; + static const Vector2 NegUnitX; + static const Vector2 NegUnitY; +}; + +// 3D Vector +class Vector3 +{ +public: + float x; + float y; + float z; + + Vector3() + :x(0.0f) + ,y(0.0f) + ,z(0.0f) + {} + + explicit Vector3(float inX, float inY, float inZ) + :x(inX) + ,y(inY) + ,z(inZ) + {} + + // Cast to a const float pointer + const float* GetAsFloatPtr() const + { + return reinterpret_cast(&x); + } + + // Set all three components in one line + void Set(float inX, float inY, float inZ) + { + x = inX; + y = inY; + z = inZ; + } + + // Vector addition (a + b) + friend Vector3 operator+(const Vector3& a, const Vector3& b) + { + return Vector3(a.x + b.x, a.y + b.y, a.z + b.z); + } + + // Vector subtraction (a - b) + friend Vector3 operator-(const Vector3& a, const Vector3& b) + { + return Vector3(a.x - b.x, a.y - b.y, a.z - b.z); + } + + // Component-wise multiplication + friend Vector3 operator*(const Vector3& left, const Vector3& right) + { + return Vector3(left.x * right.x, left.y * right.y, left.z * right.z); + } + + // Scalar multiplication + friend Vector3 operator*(const Vector3& vec, float scalar) + { + return Vector3(vec.x * scalar, vec.y * scalar, vec.z * scalar); + } + + // Scalar multiplication + friend Vector3 operator*(float scalar, const Vector3& vec) + { + return Vector3(vec.x * scalar, vec.y * scalar, vec.z * scalar); + } + + // Scalar *= + Vector3& operator*=(float scalar) + { + x *= scalar; + y *= scalar; + z *= scalar; + return *this; + } + + // Vector += + Vector3& operator+=(const Vector3& right) + { + x += right.x; + y += right.y; + z += right.z; + return *this; + } + + // Vector -= + Vector3& operator-=(const Vector3& right) + { + x -= right.x; + y -= right.y; + z -= right.z; + return *this; + } + + // Length squared of vector + float LengthSq() const + { + return (x*x + y*y + z*z); + } + + // Length of vector + float Length() const + { + return (Math::Sqrt(LengthSq())); + } + + // Normalize this vector + void Normalize() + { + float length = Length(); + x /= length; + y /= length; + z /= length; + } + + // Normalize the provided vector + static Vector3 Normalize(const Vector3& vec) + { + Vector3 temp = vec; + temp.Normalize(); + return temp; + } + + // Dot product between two vectors (a dot b) + static float Dot(const Vector3& a, const Vector3& b) + { + return (a.x * b.x + a.y * b.y + a.z * b.z); + } + + // Cross product between two vectors (a cross b) + static Vector3 Cross(const Vector3& a, const Vector3& b) + { + Vector3 temp; + temp.x = a.y * b.z - a.z * b.y; + temp.y = a.z * b.x - a.x * b.z; + temp.z = a.x * b.y - a.y * b.x; + return temp; + } + + // Lerp from A to B by f + static Vector3 Lerp(const Vector3& a, const Vector3& b, float f) + { + return Vector3(a + f * (b - a)); + } + + // Reflect V about (normalized) N + static Vector3 Reflect(const Vector3& v, const Vector3& n) + { + return v - 2.0f * Vector3::Dot(v, n) * n; + } + + static Vector3 Transform(const Vector3& vec, const class Matrix4& mat, float w = 1.0f); + // This will transform the vector and renormalize the w component + static Vector3 TransformWithPerspDiv(const Vector3& vec, const class Matrix4& mat, float w = 1.0f); + + // Transform a Vector3 by a quaternion + static Vector3 Transform(const Vector3& v, const class Quaternion& q); + + static const Vector3 Zero; + static const Vector3 UnitX; + static const Vector3 UnitY; + static const Vector3 UnitZ; + static const Vector3 NegUnitX; + static const Vector3 NegUnitY; + static const Vector3 NegUnitZ; + static const Vector3 Infinity; + static const Vector3 NegInfinity; +}; + +// 3x3 Matrix +class Matrix3 +{ +public: + float mat[3][3]; + + Matrix3() + { + *this = Matrix3::Identity; + } + + explicit Matrix3(float inMat[3][3]) + { + memcpy(mat, inMat, 9 * sizeof(float)); + } + + // Cast to a const float pointer + const float* GetAsFloatPtr() const + { + return reinterpret_cast(&mat[0][0]); + } + + // Matrix multiplication + friend Matrix3 operator*(const Matrix3& left, const Matrix3& right) + { + Matrix3 retVal; + // row 0 + retVal.mat[0][0] = + left.mat[0][0] * right.mat[0][0] + + left.mat[0][1] * right.mat[1][0] + + left.mat[0][2] * right.mat[2][0]; + + retVal.mat[0][1] = + left.mat[0][0] * right.mat[0][1] + + left.mat[0][1] * right.mat[1][1] + + left.mat[0][2] * right.mat[2][1]; + + retVal.mat[0][2] = + left.mat[0][0] * right.mat[0][2] + + left.mat[0][1] * right.mat[1][2] + + left.mat[0][2] * right.mat[2][2]; + + // row 1 + retVal.mat[1][0] = + left.mat[1][0] * right.mat[0][0] + + left.mat[1][1] * right.mat[1][0] + + left.mat[1][2] * right.mat[2][0]; + + retVal.mat[1][1] = + left.mat[1][0] * right.mat[0][1] + + left.mat[1][1] * right.mat[1][1] + + left.mat[1][2] * right.mat[2][1]; + + retVal.mat[1][2] = + left.mat[1][0] * right.mat[0][2] + + left.mat[1][1] * right.mat[1][2] + + left.mat[1][2] * right.mat[2][2]; + + // row 2 + retVal.mat[2][0] = + left.mat[2][0] * right.mat[0][0] + + left.mat[2][1] * right.mat[1][0] + + left.mat[2][2] * right.mat[2][0]; + + retVal.mat[2][1] = + left.mat[2][0] * right.mat[0][1] + + left.mat[2][1] * right.mat[1][1] + + left.mat[2][2] * right.mat[2][1]; + + retVal.mat[2][2] = + left.mat[2][0] * right.mat[0][2] + + left.mat[2][1] * right.mat[1][2] + + left.mat[2][2] * right.mat[2][2]; + + return retVal; + } + + Matrix3& operator*=(const Matrix3& right) + { + *this = *this * right; + return *this; + } + + // Create a scale matrix with x and y scales + static Matrix3 CreateScale(float xScale, float yScale) + { + float temp[3][3] = + { + { xScale, 0.0f, 0.0f }, + { 0.0f, yScale, 0.0f }, + { 0.0f, 0.0f, 1.0f }, + }; + return Matrix3(temp); + } + + static Matrix3 CreateScale(const Vector2& scaleVector) + { + return CreateScale(scaleVector.x, scaleVector.y); + } + + // Create a scale matrix with a uniform factor + static Matrix3 CreateScale(float scale) + { + return CreateScale(scale, scale); + } + + // Create a rotation matrix about the Z axis + // theta is in radians + static Matrix3 CreateRotation(float theta) + { + float temp[3][3] = + { + { Math::Cos(theta), Math::Sin(theta), 0.0f }, + { -Math::Sin(theta), Math::Cos(theta), 0.0f }, + { 0.0f, 0.0f, 1.0f }, + }; + return Matrix3(temp); + } + + // Create a translation matrix (on the xy-plane) + static Matrix3 CreateTranslation(const Vector2& trans) + { + float temp[3][3] = + { + { 1.0f, 0.0f, 0.0f }, + { 0.0f, 1.0f, 0.0f }, + { trans.x, trans.y, 1.0f }, + }; + return Matrix3(temp); + } + + static const Matrix3 Identity; +}; + +// 4x4 Matrix +class Matrix4 +{ +public: + float mat[4][4]; + + Matrix4() + { + *this = Matrix4::Identity; + } + + explicit Matrix4(float inMat[4][4]) + { + memcpy(mat, inMat, 16 * sizeof(float)); + } + + // Cast to a const float pointer + const float* GetAsFloatPtr() const + { + return reinterpret_cast(&mat[0][0]); + } + + // Matrix multiplication (a * b) + friend Matrix4 operator*(const Matrix4& a, const Matrix4& b) + { + Matrix4 retVal; + // row 0 + retVal.mat[0][0] = + a.mat[0][0] * b.mat[0][0] + + a.mat[0][1] * b.mat[1][0] + + a.mat[0][2] * b.mat[2][0] + + a.mat[0][3] * b.mat[3][0]; + + retVal.mat[0][1] = + a.mat[0][0] * b.mat[0][1] + + a.mat[0][1] * b.mat[1][1] + + a.mat[0][2] * b.mat[2][1] + + a.mat[0][3] * b.mat[3][1]; + + retVal.mat[0][2] = + a.mat[0][0] * b.mat[0][2] + + a.mat[0][1] * b.mat[1][2] + + a.mat[0][2] * b.mat[2][2] + + a.mat[0][3] * b.mat[3][2]; + + retVal.mat[0][3] = + a.mat[0][0] * b.mat[0][3] + + a.mat[0][1] * b.mat[1][3] + + a.mat[0][2] * b.mat[2][3] + + a.mat[0][3] * b.mat[3][3]; + + // row 1 + retVal.mat[1][0] = + a.mat[1][0] * b.mat[0][0] + + a.mat[1][1] * b.mat[1][0] + + a.mat[1][2] * b.mat[2][0] + + a.mat[1][3] * b.mat[3][0]; + + retVal.mat[1][1] = + a.mat[1][0] * b.mat[0][1] + + a.mat[1][1] * b.mat[1][1] + + a.mat[1][2] * b.mat[2][1] + + a.mat[1][3] * b.mat[3][1]; + + retVal.mat[1][2] = + a.mat[1][0] * b.mat[0][2] + + a.mat[1][1] * b.mat[1][2] + + a.mat[1][2] * b.mat[2][2] + + a.mat[1][3] * b.mat[3][2]; + + retVal.mat[1][3] = + a.mat[1][0] * b.mat[0][3] + + a.mat[1][1] * b.mat[1][3] + + a.mat[1][2] * b.mat[2][3] + + a.mat[1][3] * b.mat[3][3]; + + // row 2 + retVal.mat[2][0] = + a.mat[2][0] * b.mat[0][0] + + a.mat[2][1] * b.mat[1][0] + + a.mat[2][2] * b.mat[2][0] + + a.mat[2][3] * b.mat[3][0]; + + retVal.mat[2][1] = + a.mat[2][0] * b.mat[0][1] + + a.mat[2][1] * b.mat[1][1] + + a.mat[2][2] * b.mat[2][1] + + a.mat[2][3] * b.mat[3][1]; + + retVal.mat[2][2] = + a.mat[2][0] * b.mat[0][2] + + a.mat[2][1] * b.mat[1][2] + + a.mat[2][2] * b.mat[2][2] + + a.mat[2][3] * b.mat[3][2]; + + retVal.mat[2][3] = + a.mat[2][0] * b.mat[0][3] + + a.mat[2][1] * b.mat[1][3] + + a.mat[2][2] * b.mat[2][3] + + a.mat[2][3] * b.mat[3][3]; + + // row 3 + retVal.mat[3][0] = + a.mat[3][0] * b.mat[0][0] + + a.mat[3][1] * b.mat[1][0] + + a.mat[3][2] * b.mat[2][0] + + a.mat[3][3] * b.mat[3][0]; + + retVal.mat[3][1] = + a.mat[3][0] * b.mat[0][1] + + a.mat[3][1] * b.mat[1][1] + + a.mat[3][2] * b.mat[2][1] + + a.mat[3][3] * b.mat[3][1]; + + retVal.mat[3][2] = + a.mat[3][0] * b.mat[0][2] + + a.mat[3][1] * b.mat[1][2] + + a.mat[3][2] * b.mat[2][2] + + a.mat[3][3] * b.mat[3][2]; + + retVal.mat[3][3] = + a.mat[3][0] * b.mat[0][3] + + a.mat[3][1] * b.mat[1][3] + + a.mat[3][2] * b.mat[2][3] + + a.mat[3][3] * b.mat[3][3]; + + return retVal; + } + + Matrix4& operator*=(const Matrix4& right) + { + *this = *this * right; + return *this; + } + + // Invert the matrix - super slow + void Invert(); + + // Get the translation component of the matrix + Vector3 GetTranslation() const + { + return Vector3(mat[3][0], mat[3][1], mat[3][2]); + } + + // Get the X axis of the matrix (forward) + Vector3 GetXAxis() const + { + return Vector3::Normalize(Vector3(mat[0][0], mat[0][1], mat[0][2])); + } + + // Get the Y axis of the matrix (left) + Vector3 GetYAxis() const + { + return Vector3::Normalize(Vector3(mat[1][0], mat[1][1], mat[1][2])); + } + + // Get the Z axis of the matrix (up) + Vector3 GetZAxis() const + { + return Vector3::Normalize(Vector3(mat[2][0], mat[2][1], mat[2][2])); + } + + // Extract the scale component from the matrix + Vector3 GetScale() const + { + Vector3 retVal; + retVal.x = Vector3(mat[0][0], mat[0][1], mat[0][2]).Length(); + retVal.y = Vector3(mat[1][0], mat[1][1], mat[1][2]).Length(); + retVal.z = Vector3(mat[2][0], mat[2][1], mat[2][2]).Length(); + return retVal; + } + + // Create a scale matrix with x, y, and z scales + static Matrix4 CreateScale(float xScale, float yScale, float zScale) + { + float temp[4][4] = + { + { xScale, 0.0f, 0.0f, 0.0f }, + { 0.0f, yScale, 0.0f, 0.0f }, + { 0.0f, 0.0f, zScale, 0.0f }, + { 0.0f, 0.0f, 0.0f, 1.0f } + }; + return Matrix4(temp); + } + + static Matrix4 CreateScale(const Vector3& scaleVector) + { + return CreateScale(scaleVector.x, scaleVector.y, scaleVector.z); + } + + // Create a scale matrix with a uniform factor + static Matrix4 CreateScale(float scale) + { + return CreateScale(scale, scale, scale); + } + + // Rotation about x-axis + static Matrix4 CreateRotationX(float theta) + { + float temp[4][4] = + { + { 1.0f, 0.0f, 0.0f , 0.0f }, + { 0.0f, Math::Cos(theta), Math::Sin(theta), 0.0f }, + { 0.0f, -Math::Sin(theta), Math::Cos(theta), 0.0f }, + { 0.0f, 0.0f, 0.0f, 1.0f }, + }; + return Matrix4(temp); + } + + // Rotation about y-axis + static Matrix4 CreateRotationY(float theta) + { + float temp[4][4] = + { + { Math::Cos(theta), 0.0f, -Math::Sin(theta), 0.0f }, + { 0.0f, 1.0f, 0.0f, 0.0f }, + { Math::Sin(theta), 0.0f, Math::Cos(theta), 0.0f }, + { 0.0f, 0.0f, 0.0f, 1.0f }, + }; + return Matrix4(temp); + } + + // Rotation about z-axis + static Matrix4 CreateRotationZ(float theta) + { + float temp[4][4] = + { + { Math::Cos(theta), Math::Sin(theta), 0.0f, 0.0f }, + { -Math::Sin(theta), Math::Cos(theta), 0.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f, 0.0f }, + { 0.0f, 0.0f, 0.0f, 1.0f }, + }; + return Matrix4(temp); + } + + // Create a rotation matrix from a quaternion + static Matrix4 CreateFromQuaternion(const class Quaternion& q); + + static Matrix4 CreateTranslation(const Vector3& trans) + { + float temp[4][4] = + { + { 1.0f, 0.0f, 0.0f, 0.0f }, + { 0.0f, 1.0f, 0.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f, 0.0f }, + { trans.x, trans.y, trans.z, 1.0f } + }; + return Matrix4(temp); + } + + static Matrix4 CreateLookAt(const Vector3& eye, const Vector3& target, const Vector3& up) + { + Vector3 zaxis = Vector3::Normalize(target - eye); + Vector3 xaxis = Vector3::Normalize(Vector3::Cross(up, zaxis)); + Vector3 yaxis = Vector3::Normalize(Vector3::Cross(zaxis, xaxis)); + Vector3 trans; + trans.x = -Vector3::Dot(xaxis, eye); + trans.y = -Vector3::Dot(yaxis, eye); + trans.z = -Vector3::Dot(zaxis, eye); + + float temp[4][4] = + { + { xaxis.x, yaxis.x, zaxis.x, 0.0f }, + { xaxis.y, yaxis.y, zaxis.y, 0.0f }, + { xaxis.z, yaxis.z, zaxis.z, 0.0f }, + { trans.x, trans.y, trans.z, 1.0f } + }; + return Matrix4(temp); + } + + static Matrix4 CreateOrtho(float width, float height, float near, float far) + { + float temp[4][4] = + { + { 2.0f / width, 0.0f, 0.0f, 0.0f }, + { 0.0f, 2.0f / height, 0.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f / (far - near), 0.0f }, + { 0.0f, 0.0f, near / (near - far), 1.0f } + }; + return Matrix4(temp); + } + + static Matrix4 CreatePerspectiveFOV(float fovY, float width, float height, float near, float far) + { + float yScale = Math::Cot(fovY / 2.0f); + float xScale = yScale * height / width; + float temp[4][4] = + { + { xScale, 0.0f, 0.0f, 0.0f }, + { 0.0f, yScale, 0.0f, 0.0f }, + { 0.0f, 0.0f, far / (far - near), 1.0f }, + { 0.0f, 0.0f, -near * far / (far - near), 0.0f } + }; + return Matrix4(temp); + } + + // Create "Simple" View-Projection Matrix from Chapter 6 + static Matrix4 CreateSimpleViewProj(float width, float height) + { + float temp[4][4] = + { + { 2.0f/width, 0.0f, 0.0f, 0.0f }, + { 0.0f, 2.0f/height, 0.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f, 1.0f } + }; + return Matrix4(temp); + } + + static const Matrix4 Identity; +}; + +// (Unit) Quaternion +class Quaternion +{ +public: + float x; + float y; + float z; + float w; + + Quaternion() + { + *this = Quaternion::Identity; + } + + // This directly sets the quaternion components -- + // don't use for axis/angle + explicit Quaternion(float inX, float inY, float inZ, float inW) + { + Set(inX, inY, inZ, inW); + } + + // Construct the quaternion from an axis and angle + // It is assumed that axis is already normalized, + // and the angle is in radians + explicit Quaternion(const Vector3& axis, float angle) + { + float scalar = Math::Sin(angle / 2.0f); + x = axis.x * scalar; + y = axis.y * scalar; + z = axis.z * scalar; + w = Math::Cos(angle / 2.0f); + } + + // Directly set the internal components + void Set(float inX, float inY, float inZ, float inW) + { + x = inX; + y = inY; + z = inZ; + w = inW; + } + + void Conjugate() + { + x *= -1.0f; + y *= -1.0f; + z *= -1.0f; + } + + float LengthSq() const + { + return (x*x + y*y + z*z + w*w); + } + + float Length() const + { + return Math::Sqrt(LengthSq()); + } + + void Normalize() + { + float length = Length(); + x /= length; + y /= length; + z /= length; + w /= length; + } + + // Normalize the provided quaternion + static Quaternion Normalize(const Quaternion& q) + { + Quaternion retVal = q; + retVal.Normalize(); + return retVal; + } + + // Linear interpolation + static Quaternion Lerp(const Quaternion& a, const Quaternion& b, float f) + { + Quaternion retVal; + retVal.x = Math::Lerp(a.x, b.x, f); + retVal.y = Math::Lerp(a.y, b.y, f); + retVal.z = Math::Lerp(a.z, b.z, f); + retVal.w = Math::Lerp(a.w, b.w, f); + retVal.Normalize(); + return retVal; + } + + static float Dot(const Quaternion& a, const Quaternion& b) + { + return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w; + } + + // Spherical Linear Interpolation + static Quaternion Slerp(const Quaternion& a, const Quaternion& b, float f) + { + float rawCosm = Quaternion::Dot(a, b); + + float cosom = -rawCosm; + if (rawCosm >= 0.0f) + { + cosom = rawCosm; + } + + float scale0, scale1; + + if (cosom < 0.9999f) + { + const float omega = Math::Acos(cosom); + const float invSin = 1.f / Math::Sin(omega); + scale0 = Math::Sin((1.f - f) * omega) * invSin; + scale1 = Math::Sin(f * omega) * invSin; + } + else + { + // Use linear interpolation if the quaternions + // are collinear + scale0 = 1.0f - f; + scale1 = f; + } + + if (rawCosm < 0.0f) + { + scale1 = -scale1; + } + + Quaternion retVal; + retVal.x = scale0 * a.x + scale1 * b.x; + retVal.y = scale0 * a.y + scale1 * b.y; + retVal.z = scale0 * a.z + scale1 * b.z; + retVal.w = scale0 * a.w + scale1 * b.w; + retVal.Normalize(); + return retVal; + } + + // Concatenate + // Rotate by q FOLLOWED BY p + static Quaternion Concatenate(const Quaternion& q, const Quaternion& p) + { + Quaternion retVal; + + // Vector component is: + // ps * qv + qs * pv + pv x qv + Vector3 qv(q.x, q.y, q.z); + Vector3 pv(p.x, p.y, p.z); + Vector3 newVec = p.w * qv + q.w * pv + Vector3::Cross(pv, qv); + retVal.x = newVec.x; + retVal.y = newVec.y; + retVal.z = newVec.z; + + // Scalar component is: + // ps * qs - pv . qv + retVal.w = p.w * q.w - Vector3::Dot(pv, qv); + + return retVal; + } + + static const Quaternion Identity; +}; + +namespace Color +{ + static const Vector3 Black(0.0f, 0.0f, 0.0f); + static const Vector3 White(1.0f, 1.0f, 1.0f); + static const Vector3 Red(1.0f, 0.0f, 0.0f); + static const Vector3 Green(0.0f, 1.0f, 0.0f); + static const Vector3 Blue(0.0f, 0.0f, 1.0f); + static const Vector3 Yellow(1.0f, 1.0f, 0.0f); + static const Vector3 LightYellow(1.0f, 1.0f, 0.88f); + static const Vector3 LightBlue(0.68f, 0.85f, 0.9f); + static const Vector3 LightPink(1.0f, 0.71f, 0.76f); + static const Vector3 LightGreen(0.56f, 0.93f, 0.56f); +} diff --git a/Chapter02/Ship.cpp b/Chapter02/Ship.cpp new file mode 100644 index 00000000..06196e64 --- /dev/null +++ b/Chapter02/Ship.cpp @@ -0,0 +1,78 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "Ship.h" +#include "AnimSpriteComponent.h" +#include "Game.h" + +Ship::Ship(Game* game) + :Actor(game) + ,mRightSpeed(0.0f) + ,mDownSpeed(0.0f) +{ + // Create an animated sprite component + AnimSpriteComponent* asc = new AnimSpriteComponent(this); + std::vector anims = { + game->GetTexture("Assets/Ship01.png"), + game->GetTexture("Assets/Ship02.png"), + game->GetTexture("Assets/Ship03.png"), + game->GetTexture("Assets/Ship04.png"), + }; + asc->SetAnimTextures(anims); +} + +void Ship::UpdateActor(float deltaTime) +{ + Actor::UpdateActor(deltaTime); + // Update position based on speeds and delta time + Vector2 pos = GetPosition(); + pos.x += mRightSpeed * deltaTime; + pos.y += mDownSpeed * deltaTime; + // Restrict position to left half of screen + if (pos.x < 25.0f) + { + pos.x = 25.0f; + } + else if (pos.x > 500.0f) + { + pos.x = 500.0f; + } + if (pos.y < 25.0f) + { + pos.y = 25.0f; + } + else if (pos.y > 743.0f) + { + pos.y = 743.0f; + } + SetPosition(pos); +} + +void Ship::ProcessKeyboard(const uint8_t* state) +{ + mRightSpeed = 0.0f; + mDownSpeed = 0.0f; + // right/left + if (state[SDL_SCANCODE_D]) + { + mRightSpeed += 250.0f; + } + if (state[SDL_SCANCODE_A]) + { + mRightSpeed -= 250.0f; + } + // up/down + if (state[SDL_SCANCODE_S]) + { + mDownSpeed += 300.0f; + } + if (state[SDL_SCANCODE_W]) + { + mDownSpeed -= 300.0f; + } +} diff --git a/Chapter02/Ship.h b/Chapter02/Ship.h new file mode 100644 index 00000000..597b32ed --- /dev/null +++ b/Chapter02/Ship.h @@ -0,0 +1,22 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "Actor.h" +class Ship : public Actor +{ +public: + Ship(class Game* game); + void UpdateActor(float deltaTime) override; + void ProcessKeyboard(const uint8_t* state); + float GetRightSpeed() const { return mRightSpeed; } + float GetDownSpeed() const { return mDownSpeed; } +private: + float mRightSpeed; + float mDownSpeed; +}; \ No newline at end of file diff --git a/Chapter02/SpriteComponent.cpp b/Chapter02/SpriteComponent.cpp new file mode 100644 index 00000000..d22efb6c --- /dev/null +++ b/Chapter02/SpriteComponent.cpp @@ -0,0 +1,56 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "SpriteComponent.h" +#include "Actor.h" +#include "Game.h" + +SpriteComponent::SpriteComponent(Actor* owner, int drawOrder) + :Component(owner) + ,mTexture(nullptr) + ,mDrawOrder(drawOrder) + ,mTexWidth(0) + ,mTexHeight(0) +{ + mOwner->GetGame()->AddSprite(this); +} + +SpriteComponent::~SpriteComponent() +{ + mOwner->GetGame()->RemoveSprite(this); +} + +void SpriteComponent::Draw(SDL_Renderer* renderer) +{ + if (mTexture) + { + SDL_Rect r; + // Scale the width/height by owner's scale + r.w = static_cast(mTexWidth * mOwner->GetScale()); + r.h = static_cast(mTexHeight * mOwner->GetScale()); + // Center the rectangle around the position of the owner + r.x = static_cast(mOwner->GetPosition().x - r.w / 2); + r.y = static_cast(mOwner->GetPosition().y - r.h / 2); + + // Draw (have to convert angle from radians to degrees, and clockwise to counter) + SDL_RenderCopyEx(renderer, + mTexture, + nullptr, + &r, + -Math::ToDegrees(mOwner->GetRotation()), + nullptr, + SDL_FLIP_NONE); + } +} + +void SpriteComponent::SetTexture(SDL_Texture* texture) +{ + mTexture = texture; + // Set width/height + SDL_QueryTexture(texture, nullptr, nullptr, &mTexWidth, &mTexHeight); +} diff --git a/Chapter02/SpriteComponent.h b/Chapter02/SpriteComponent.h new file mode 100644 index 00000000..a6c37a64 --- /dev/null +++ b/Chapter02/SpriteComponent.h @@ -0,0 +1,30 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "Component.h" +#include "SDL/SDL.h" +class SpriteComponent : public Component +{ +public: + // (Lower draw order corresponds with further back) + SpriteComponent(class Actor* owner, int drawOrder = 100); + ~SpriteComponent(); + + virtual void Draw(SDL_Renderer* renderer); + virtual void SetTexture(SDL_Texture* texture); + + int GetDrawOrder() const { return mDrawOrder; } + int GetTexHeight() const { return mTexHeight; } + int GetTexWidth() const { return mTexWidth; } +protected: + SDL_Texture* mTexture; + int mDrawOrder; + int mTexWidth; + int mTexHeight; +}; From 15e683160d3caeda9a4935af7efb53147bedd898 Mon Sep 17 00:00:00 2001 From: Sanjay Madhav Date: Mon, 13 Nov 2017 02:49:46 -0800 Subject: [PATCH 05/40] Made single get texture function --- Chapter02/Game.cpp | 56 +++++++++++++++++++--------------------------- Chapter02/Game.h | 3 +-- 2 files changed, 24 insertions(+), 35 deletions(-) diff --git a/Chapter02/Game.cpp b/Chapter02/Game.cpp index 77896c3b..e721d3b6 100644 --- a/Chapter02/Game.cpp +++ b/Chapter02/Game.cpp @@ -153,16 +153,6 @@ void Game::GenerateOutput() void Game::LoadData() { - // Load textures - LoadTexture("Assets/Laser.png"); - LoadTexture("Assets/Ship01.png"); - LoadTexture("Assets/Ship02.png"); - LoadTexture("Assets/Ship03.png"); - LoadTexture("Assets/Ship04.png"); - LoadTexture("Assets/Farback01.png"); - LoadTexture("Assets/Farback02.png"); - LoadTexture("Assets/Stars.png"); - // Create player's ship mShip = new Ship(this); mShip->SetPosition(Vector2(100.0f, 384.0f)); @@ -208,36 +198,36 @@ void Game::UnloadData() mTextures.clear(); } -void Game::LoadTexture(const char* fileName) -{ - // Load from file - SDL_Surface* surf = IMG_Load(fileName); - if (!surf) - { - SDL_Log("Failed to load texture file %s", fileName); - return; - } - - // Create texture from surface - SDL_Texture* text = SDL_CreateTextureFromSurface(mRenderer, surf); - SDL_FreeSurface(surf); - if (!text) - { - SDL_Log("Failed to convert surface to texture for %s", fileName); - return; - } - - mTextures.emplace(fileName, text); -} - -SDL_Texture * Game::GetTexture(const char * fileName) +SDL_Texture* Game::GetTexture(const std::string& fileName) { SDL_Texture* tex = nullptr; + // Is the texture already in the map? auto iter = mTextures.find(fileName); if (iter != mTextures.end()) { tex = iter->second; } + else + { + // Load from file + SDL_Surface* surf = IMG_Load(fileName.c_str()); + if (!surf) + { + SDL_Log("Failed to load texture file %s", fileName.c_str()); + return nullptr; + } + + // Create texture from surface + tex = SDL_CreateTextureFromSurface(mRenderer, surf); + SDL_FreeSurface(surf); + if (!tex) + { + SDL_Log("Failed to convert surface to texture for %s", fileName.c_str()); + return nullptr; + } + + mTextures.emplace(fileName.c_str(), tex); + } return tex; } diff --git a/Chapter02/Game.h b/Chapter02/Game.h index 0f980ca4..2a5d0adb 100644 --- a/Chapter02/Game.h +++ b/Chapter02/Game.h @@ -26,8 +26,7 @@ class Game void AddSprite(class SpriteComponent* sprite); void RemoveSprite(class SpriteComponent* sprite); - void LoadTexture(const char* fileName); - SDL_Texture* GetTexture(const char* fileName); + SDL_Texture* GetTexture(const std::string& fileName); private: void ProcessInput(); void UpdateGame(); From 57badb5e2028881e3a784cb0f1ad5e7820fa42f6 Mon Sep 17 00:00:00 2001 From: Sanjay Madhav Date: Wed, 15 Nov 2017 00:38:28 -0800 Subject: [PATCH 06/40] Comment fixes --- Chapter02/Actor.cpp | 2 +- Chapter02/Actor.h | 2 +- Chapter02/AnimSpriteComponent.cpp | 2 +- Chapter02/AnimSpriteComponent.h | 2 +- Chapter02/BGSpriteComponent.cpp | 2 +- Chapter02/BGSpriteComponent.h | 2 +- Chapter02/Component.cpp | 2 +- Chapter02/Component.h | 2 +- Chapter02/Game.cpp | 2 +- Chapter02/Game.h | 2 +- Chapter02/Main.cpp | 2 +- Chapter02/Math.cpp | 35 +++++++++++++++---------------- Chapter02/Math.h | 2 +- Chapter02/Ship.cpp | 2 +- Chapter02/Ship.h | 2 +- Chapter02/SpriteComponent.cpp | 2 +- Chapter02/SpriteComponent.h | 2 +- External/FMOD/README.md | 5 +++++ README.md | 2 +- 19 files changed, 39 insertions(+), 35 deletions(-) create mode 100644 External/FMOD/README.md diff --git a/Chapter02/Actor.cpp b/Chapter02/Actor.cpp index dd256c2d..91278a65 100644 --- a/Chapter02/Actor.cpp +++ b/Chapter02/Actor.cpp @@ -3,7 +3,7 @@ // Copyright (C) 2017 Sanjay Madhav. All rights reserved. // // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #include "Actor.h" diff --git a/Chapter02/Actor.h b/Chapter02/Actor.h index 7afbf095..6e435bf7 100644 --- a/Chapter02/Actor.h +++ b/Chapter02/Actor.h @@ -3,7 +3,7 @@ // Copyright (C) 2017 Sanjay Madhav. All rights reserved. // // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #pragma once diff --git a/Chapter02/AnimSpriteComponent.cpp b/Chapter02/AnimSpriteComponent.cpp index f39ac8dd..8b5f15e9 100644 --- a/Chapter02/AnimSpriteComponent.cpp +++ b/Chapter02/AnimSpriteComponent.cpp @@ -3,7 +3,7 @@ // Copyright (C) 2017 Sanjay Madhav. All rights reserved. // // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #include "AnimSpriteComponent.h" diff --git a/Chapter02/AnimSpriteComponent.h b/Chapter02/AnimSpriteComponent.h index 496a47e6..d5aa387a 100644 --- a/Chapter02/AnimSpriteComponent.h +++ b/Chapter02/AnimSpriteComponent.h @@ -3,7 +3,7 @@ // Copyright (C) 2017 Sanjay Madhav. All rights reserved. // // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #pragma once diff --git a/Chapter02/BGSpriteComponent.cpp b/Chapter02/BGSpriteComponent.cpp index 34635832..4c143704 100644 --- a/Chapter02/BGSpriteComponent.cpp +++ b/Chapter02/BGSpriteComponent.cpp @@ -3,7 +3,7 @@ // Copyright (C) 2017 Sanjay Madhav. All rights reserved. // // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #include "BGSpriteComponent.h" diff --git a/Chapter02/BGSpriteComponent.h b/Chapter02/BGSpriteComponent.h index 910bee5a..0d4c9e50 100644 --- a/Chapter02/BGSpriteComponent.h +++ b/Chapter02/BGSpriteComponent.h @@ -3,7 +3,7 @@ // Copyright (C) 2017 Sanjay Madhav. All rights reserved. // // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #pragma once diff --git a/Chapter02/Component.cpp b/Chapter02/Component.cpp index 9b345987..c4ed432d 100644 --- a/Chapter02/Component.cpp +++ b/Chapter02/Component.cpp @@ -3,7 +3,7 @@ // Copyright (C) 2017 Sanjay Madhav. All rights reserved. // // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #include "Component.h" diff --git a/Chapter02/Component.h b/Chapter02/Component.h index 26d6fb87..19e21f02 100644 --- a/Chapter02/Component.h +++ b/Chapter02/Component.h @@ -3,7 +3,7 @@ // Copyright (C) 2017 Sanjay Madhav. All rights reserved. // // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #pragma once diff --git a/Chapter02/Game.cpp b/Chapter02/Game.cpp index e721d3b6..2096307d 100644 --- a/Chapter02/Game.cpp +++ b/Chapter02/Game.cpp @@ -3,7 +3,7 @@ // Copyright (C) 2017 Sanjay Madhav. All rights reserved. // // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #include "Game.h" diff --git a/Chapter02/Game.h b/Chapter02/Game.h index 2a5d0adb..03f0548c 100644 --- a/Chapter02/Game.h +++ b/Chapter02/Game.h @@ -3,7 +3,7 @@ // Copyright (C) 2017 Sanjay Madhav. All rights reserved. // // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #pragma once diff --git a/Chapter02/Main.cpp b/Chapter02/Main.cpp index 1f15d82b..22ea0c69 100644 --- a/Chapter02/Main.cpp +++ b/Chapter02/Main.cpp @@ -3,7 +3,7 @@ // Copyright (C) 2017 Sanjay Madhav. All rights reserved. // // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #include "Game.h" diff --git a/Chapter02/Math.cpp b/Chapter02/Math.cpp index 9e1b7932..a16e7261 100644 --- a/Chapter02/Math.cpp +++ b/Chapter02/Math.cpp @@ -3,7 +3,7 @@ // Copyright (C) 2017 Sanjay Madhav. All rights reserved. // // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #include "Math.h" @@ -99,12 +99,13 @@ Vector3 Vector3::Transform(const Vector3& v, const Quaternion& q) void Matrix4::Invert() { // Thanks slow math - float tmp[12]; /* temp array for pairs */ - float src[16]; /* array of transpose source matrix */ - float dst[16]; /* storage */ - float det; /* determinant */ - /* transpose matrix */ + // This is a really janky way to unroll everything... + float tmp[12]; + float src[16]; + float dst[16]; + float det; + // Transpose matrix // row 1 to col 1 src[0] = mat[0][0]; src[4] = mat[0][1]; @@ -129,13 +130,7 @@ void Matrix4::Invert() src[11] = mat[3][2]; src[15] = mat[3][3]; - // for (int i = 0; i < 4; i++) { - // src[i] = mat[i*4]; - // src[i + 4] = mat[i*4 + 1]; - // src[i + 8] = mat[i*4 + 2]; - // src[i + 12] = mat[i*4 + 3]; - // } - /* calculate pairs for first 8 elements (cofactors) */ + // Calculate cofactors tmp[0] = src[10] * src[15]; tmp[1] = src[11] * src[14]; tmp[2] = src[9] * src[15]; @@ -148,7 +143,7 @@ void Matrix4::Invert() tmp[9] = src[10] * src[12]; tmp[10] = src[8] * src[13]; tmp[11] = src[9] * src[12]; - /* calculate first 8 elements (cofactors) */ + dst[0] = tmp[0] * src[5] + tmp[3] * src[6] + tmp[4] * src[7]; dst[0] -= tmp[1] * src[5] + tmp[2] * src[6] + tmp[5] * src[7]; dst[1] = tmp[1] * src[4] + tmp[6] * src[6] + tmp[9] * src[7]; @@ -165,7 +160,7 @@ void Matrix4::Invert() dst[6] -= tmp[2] * src[0] + tmp[7] * src[1] + tmp[10] * src[3]; dst[7] = tmp[4] * src[0] + tmp[9] * src[1] + tmp[10] * src[2]; dst[7] -= tmp[5] * src[0] + tmp[8] * src[1] + tmp[11] * src[2]; - /* calculate pairs for second 8 elements (cofactors) */ + tmp[0] = src[2] * src[7]; tmp[1] = src[3] * src[6]; tmp[2] = src[1] * src[7]; @@ -178,7 +173,7 @@ void Matrix4::Invert() tmp[9] = src[2] * src[4]; tmp[10] = src[0] * src[5]; tmp[11] = src[1] * src[4]; - /* calculate second 8 elements (cofactors) */ + dst[8] = tmp[0] * src[13] + tmp[3] * src[14] + tmp[4] * src[15]; dst[8] -= tmp[1] * src[13] + tmp[2] * src[14] + tmp[5] * src[15]; dst[9] = tmp[1] * src[12] + tmp[6] * src[14] + tmp[9] * src[15]; @@ -195,12 +190,16 @@ void Matrix4::Invert() dst[14] -= tmp[10] * src[11] + tmp[2] * src[8] + tmp[7] * src[9]; dst[15] = tmp[10] * src[10] + tmp[4] * src[8] + tmp[9] * src[9]; dst[15] -= tmp[8] * src[9] + tmp[11] * src[10] + tmp[5] * src[8]; - /* calculate determinant */ + + // Calculate determinant det = src[0] * dst[0] + src[1] * dst[1] + src[2] * dst[2] + src[3] * dst[3]; - /* calculate matrix inverse */ + + // Inverse of matrix is divided by determinant det = 1 / det; for (int j = 0; j < 16; j++) + { dst[j] *= det; + } // Set it back for (int i = 0; i < 4; i++) diff --git a/Chapter02/Math.h b/Chapter02/Math.h index 51de3a26..752963f1 100644 --- a/Chapter02/Math.h +++ b/Chapter02/Math.h @@ -3,7 +3,7 @@ // Copyright (C) 2017 Sanjay Madhav. All rights reserved. // // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #pragma once diff --git a/Chapter02/Ship.cpp b/Chapter02/Ship.cpp index 06196e64..5daca54a 100644 --- a/Chapter02/Ship.cpp +++ b/Chapter02/Ship.cpp @@ -3,7 +3,7 @@ // Copyright (C) 2017 Sanjay Madhav. All rights reserved. // // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #include "Ship.h" diff --git a/Chapter02/Ship.h b/Chapter02/Ship.h index 597b32ed..8a34e962 100644 --- a/Chapter02/Ship.h +++ b/Chapter02/Ship.h @@ -3,7 +3,7 @@ // Copyright (C) 2017 Sanjay Madhav. All rights reserved. // // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #pragma once diff --git a/Chapter02/SpriteComponent.cpp b/Chapter02/SpriteComponent.cpp index d22efb6c..56884fbc 100644 --- a/Chapter02/SpriteComponent.cpp +++ b/Chapter02/SpriteComponent.cpp @@ -3,7 +3,7 @@ // Copyright (C) 2017 Sanjay Madhav. All rights reserved. // // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #include "SpriteComponent.h" diff --git a/Chapter02/SpriteComponent.h b/Chapter02/SpriteComponent.h index a6c37a64..c430e888 100644 --- a/Chapter02/SpriteComponent.h +++ b/Chapter02/SpriteComponent.h @@ -3,7 +3,7 @@ // Copyright (C) 2017 Sanjay Madhav. All rights reserved. // // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #pragma once diff --git a/External/FMOD/README.md b/External/FMOD/README.md new file mode 100644 index 00000000..419c1c4d --- /dev/null +++ b/External/FMOD/README.md @@ -0,0 +1,5 @@ +Code for Chapter 7 and beyond uses the FMOD API for audio. This requires +a separate installation from (https://www.fmod.com/download). Download +and install version 1.10.x of the FMOD Studio API. On Windows, install +FMOD to the default directory. On Mac, copy the contents of the FMOD package +into External/FMOD. diff --git a/README.md b/README.md index a8b0f953..c740f003 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ license. See LICENSE for more detail. Note that this license does not apply to the code in the External directory. Each External project is licensed separately. # Building the Code -All chapters projects are tested on both Microsoft Windows and Apple macOS. +Each chapter's code is tested and works on both Microsoft Windows and Apple macOS. To compile on Windows, install Microsoft Visual Studio 2017 Community (https://www.visualstudio.com/downloads/). During installation, select the From 61add4104348bb7071e24b810b993456e3c30548 Mon Sep 17 00:00:00 2001 From: Sanjay Madhav Date: Wed, 15 Nov 2017 00:47:26 -0800 Subject: [PATCH 07/40] Fixed FMOD version reference in readme --- External/FMOD/README.md | 6 +++--- README.md | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/External/FMOD/README.md b/External/FMOD/README.md index 419c1c4d..00a032f2 100644 --- a/External/FMOD/README.md +++ b/External/FMOD/README.md @@ -1,5 +1,5 @@ Code for Chapter 7 and beyond uses the FMOD API for audio. This requires a separate installation from (https://www.fmod.com/download). Download -and install version 1.10.x of the FMOD Studio API. On Windows, install -FMOD to the default directory. On Mac, copy the contents of the FMOD package -into External/FMOD. +and install version 1.09.x of the FMOD Studio API (newer versions are untested). +On Windows, install FMOD to the default directory. On Mac, copy the contents +of the FMOD package into External/FMOD. diff --git a/README.md b/README.md index c740f003..41b4a0db 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,6 @@ a corresponding ChapterXX-mac.xcodeproj file. Code for Chapter 7 and beyond uses the FMOD API for audio. This requires a separate installation from (https://www.fmod.com/download). Download -and install version 1.10.x of the FMOD Studio API. On Windows, install -FMOD to the default directory. On Mac, copy the contents of the FMOD package -into External/FMOD. +and install version 1.09.x of the FMOD Studio API (newer versions are untested). +On Windows, install FMOD to the default directory. On Mac, copy the contents +of the FMOD package into External/FMOD. From 1273bf289e3933e9c8f76882e0c9f66085b08727 Mon Sep 17 00:00:00 2001 From: Sanjay Madhav Date: Sun, 19 Nov 2017 23:52:46 -0800 Subject: [PATCH 08/40] Fixed window name typo for chapter 2 --- Chapter02/Game.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Chapter02/Game.cpp b/Chapter02/Game.cpp index 2096307d..2bf0af03 100644 --- a/Chapter02/Game.cpp +++ b/Chapter02/Game.cpp @@ -31,7 +31,7 @@ bool Game::Initialize() return false; } - mWindow = SDL_CreateWindow("Game Programming in C++ (Chapter 3)", 100, 100, 1024, 768, 0); + mWindow = SDL_CreateWindow("Game Programming in C++ (Chapter 2)", 100, 100, 1024, 768, 0); if (!mWindow) { SDL_Log("Failed to create window: %s", SDL_GetError()); From de7752588ff92c7673d6b53d76e868b1f28e8a39 Mon Sep 17 00:00:00 2001 From: Sanjay Madhav Date: Sun, 19 Nov 2017 23:53:12 -0800 Subject: [PATCH 09/40] Chapter 3 basic add --- Chapter03/Actor.cpp | 83 ++ Chapter03/Actor.h | 62 + Chapter03/Assets/Asteroid.png | Bin 0 -> 5577 bytes Chapter03/Assets/Laser.png | Bin 0 -> 3345 bytes Chapter03/Assets/Ship.png | Bin 0 -> 8692 bytes Chapter03/Assets/ShipWithThrust.png | Bin 0 -> 8953 bytes Chapter03/Chapter03-windows.sln | 22 + .../Chapter3-mac.xcodeproj/project.pbxproj | 342 ++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/xcschemes/Game-mac.xcscheme | 92 ++ Chapter03/Component.cpp | 27 + Chapter03/Component.h | 27 + Chapter03/Game.cpp | 278 +++++ Chapter03/Game.h | 57 + Chapter03/Game.vcxproj | 122 ++ Chapter03/Game.vcxproj.filters | 58 + Chapter03/Main.cpp | 21 + Chapter03/Math.cpp | 239 ++++ Chapter03/Math.h | 1033 +++++++++++++++++ Chapter03/MoveComponent.cpp | 35 + Chapter03/MoveComponent.h | 26 + Chapter03/Ship.cpp | 72 ++ Chapter03/Ship.h | 22 + Chapter03/SpriteComponent.cpp | 56 + Chapter03/SpriteComponent.h | 30 + 25 files changed, 2711 insertions(+) create mode 100644 Chapter03/Actor.cpp create mode 100644 Chapter03/Actor.h create mode 100644 Chapter03/Assets/Asteroid.png create mode 100644 Chapter03/Assets/Laser.png create mode 100644 Chapter03/Assets/Ship.png create mode 100644 Chapter03/Assets/ShipWithThrust.png create mode 100644 Chapter03/Chapter03-windows.sln create mode 100644 Chapter03/Chapter3-mac.xcodeproj/project.pbxproj create mode 100644 Chapter03/Chapter3-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 Chapter03/Chapter3-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme create mode 100644 Chapter03/Component.cpp create mode 100644 Chapter03/Component.h create mode 100644 Chapter03/Game.cpp create mode 100644 Chapter03/Game.h create mode 100644 Chapter03/Game.vcxproj create mode 100644 Chapter03/Game.vcxproj.filters create mode 100644 Chapter03/Main.cpp create mode 100644 Chapter03/Math.cpp create mode 100644 Chapter03/Math.h create mode 100644 Chapter03/MoveComponent.cpp create mode 100644 Chapter03/MoveComponent.h create mode 100644 Chapter03/Ship.cpp create mode 100644 Chapter03/Ship.h create mode 100644 Chapter03/SpriteComponent.cpp create mode 100644 Chapter03/SpriteComponent.h diff --git a/Chapter03/Actor.cpp b/Chapter03/Actor.cpp new file mode 100644 index 00000000..91278a65 --- /dev/null +++ b/Chapter03/Actor.cpp @@ -0,0 +1,83 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "Actor.h" +#include "Game.h" +#include "Component.h" +#include + +Actor::Actor(Game* game) + :mState(EActive) + , mPosition(Vector2::Zero) + , mScale(1.0f) + , mRotation(0.0f) + , mGame(game) +{ + mGame->AddActor(this); +} + +Actor::~Actor() +{ + mGame->RemoveActor(this); + // Need to delete components + // Because ~Component calls RemoveComponent, need a different style loop + while (!mComponents.empty()) + { + delete mComponents.back(); + } +} + +void Actor::Update(float deltaTime) +{ + if (mState == EActive) + { + UpdateComponents(deltaTime); + UpdateActor(deltaTime); + } +} + +void Actor::UpdateComponents(float deltaTime) +{ + for (auto comp : mComponents) + { + comp->Update(deltaTime); + } +} + +void Actor::UpdateActor(float deltaTime) +{ +} + +void Actor::AddComponent(Component* component) +{ + // Find the insertion point in the sorted vector + // (The first element with a order higher than me) + int myOrder = component->GetUpdateOrder(); + auto iter = mComponents.begin(); + for (; + iter != mComponents.end(); + ++iter) + { + if (myOrder < (*iter)->GetUpdateOrder()) + { + break; + } + } + + // Inserts element before position of iterator + mComponents.insert(iter, component); +} + +void Actor::RemoveComponent(Component* component) +{ + auto iter = std::find(mComponents.begin(), mComponents.end(), component); + if (iter != mComponents.end()) + { + mComponents.erase(iter); + } +} diff --git a/Chapter03/Actor.h b/Chapter03/Actor.h new file mode 100644 index 00000000..91923c25 --- /dev/null +++ b/Chapter03/Actor.h @@ -0,0 +1,62 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once +#include +#include "Math.h" +class Actor +{ +public: + enum State + { + EActive, + EPaused, + EDead + }; + + Actor(class Game* game); + virtual ~Actor(); + + // Update function called from Game (not overridable) + void Update(float deltaTime); + // Updates all the components attached to the actor (not overridable) + void UpdateComponents(float deltaTime); + // Any actor-specific update code (overridable) + virtual void UpdateActor(float deltaTime); + + // Getters/setters + const Vector2& GetPosition() const { return mPosition; } + void SetPosition(const Vector2& pos) { mPosition = pos; } + float GetScale() const { return mScale; } + void SetScale(float scale) { mScale = scale; } + float GetRotation() const { return mRotation; } + void SetRotation(float rotation) { mRotation = rotation; } + + Vector2 GetForward() const { return Vector2(Math::Cos(mRotation), -Math::Sin(mRotation)); } + + State GetState() const { return mState; } + void SetState(State state) { mState = state; } + + class Game* GetGame() { return mGame; } + + + // Add/remove components + void AddComponent(class Component* component); + void RemoveComponent(class Component* component); +private: + // Actor's state + State mState; + + // Transform + Vector2 mPosition; + float mScale; + float mRotation; + + std::vector mComponents; + class Game* mGame; +}; diff --git a/Chapter03/Assets/Asteroid.png b/Chapter03/Assets/Asteroid.png new file mode 100644 index 0000000000000000000000000000000000000000..98e831e9b4a3d85367d3976b134d448a903db4cf GIT binary patch literal 5577 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 b&;$4dQ+D450G(2M00000NkvXXu0mjf8PZhG literal 0 HcmV?d00001 diff --git a/Chapter03/Assets/Ship.png b/Chapter03/Assets/Ship.png new file mode 100644 index 0000000000000000000000000000000000000000..965144366ea2820ea4c0827a765f02fc760483a1 GIT binary patch literal 8692 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 + + + + diff --git a/Chapter03/Chapter3-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme b/Chapter03/Chapter3-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme new file mode 100644 index 00000000..8c41bc4b --- /dev/null +++ b/Chapter03/Chapter3-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter03/Component.cpp b/Chapter03/Component.cpp new file mode 100644 index 00000000..c4ed432d --- /dev/null +++ b/Chapter03/Component.cpp @@ -0,0 +1,27 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "Component.h" +#include "Actor.h" + +Component::Component(Actor* owner, int updateOrder) + :mOwner(owner) + ,mUpdateOrder(updateOrder) +{ + // Add to actor's vector of components + mOwner->AddComponent(this); +} + +Component::~Component() +{ + mOwner->RemoveComponent(this); +} + +void Component::Update(float deltaTime) +{ +} diff --git a/Chapter03/Component.h b/Chapter03/Component.h new file mode 100644 index 00000000..19e21f02 --- /dev/null +++ b/Chapter03/Component.h @@ -0,0 +1,27 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once +class Component +{ +public: + // Constructor + // (the lower the update order, the earlier the component updates) + Component(class Actor* owner, int updateOrder = 100); + // Destructor + virtual ~Component(); + // Update this component by delta time + virtual void Update(float deltaTime); + + int GetUpdateOrder() const { return mUpdateOrder; } +protected: + // Owning actor + class Actor* mOwner; + // Update order of component + int mUpdateOrder; +}; diff --git a/Chapter03/Game.cpp b/Chapter03/Game.cpp new file mode 100644 index 00000000..3762fb0f --- /dev/null +++ b/Chapter03/Game.cpp @@ -0,0 +1,278 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "Game.h" +#include "SDL/SDL_image.h" +#include +#include "Actor.h" +#include "SpriteComponent.h" +#include "Ship.h" + +Game::Game() +:mWindow(nullptr) +,mRenderer(nullptr) +,mIsRunning(true) +,mUpdatingActors(false) +{ + +} + +bool Game::Initialize() +{ + if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO) != 0) + { + SDL_Log("Unable to initialize SDL: %s", SDL_GetError()); + return false; + } + + mWindow = SDL_CreateWindow("Game Programming in C++ (Chapter 3)", 100, 100, 1024, 768, 0); + if (!mWindow) + { + SDL_Log("Failed to create window: %s", SDL_GetError()); + return false; + } + + mRenderer = SDL_CreateRenderer(mWindow, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); + if (!mRenderer) + { + SDL_Log("Failed to create renderer: %s", SDL_GetError()); + return false; + } + + if (IMG_Init(IMG_INIT_PNG) == 0) + { + SDL_Log("Unable to initialize SDL_image: %s", SDL_GetError()); + return false; + } + + LoadData(); + + mTicksCount = SDL_GetTicks(); + + return true; +} + +void Game::RunLoop() +{ + while (mIsRunning) + { + ProcessInput(); + UpdateGame(); + GenerateOutput(); + } +} + +void Game::ProcessInput() +{ + SDL_Event event; + while (SDL_PollEvent(&event)) + { + switch (event.type) + { + case SDL_QUIT: + mIsRunning = false; + break; + } + } + + const Uint8* state = SDL_GetKeyboardState(NULL); + if (state[SDL_SCANCODE_ESCAPE]) + { + mIsRunning = false; + } + + // Process ship input + mShip->ProcessKeyboard(state); +} + +void Game::UpdateGame() +{ + // Compute delta time + // Wait until 16ms has elapsed since last frame + while (!SDL_TICKS_PASSED(SDL_GetTicks(), mTicksCount + 16)) + ; + + float deltaTime = (SDL_GetTicks() - mTicksCount) / 1000.0f; + if (deltaTime > 0.05f) + { + deltaTime = 0.05f; + } + mTicksCount = SDL_GetTicks(); + + // Update all actors + mUpdatingActors = true; + for (auto actor : mActors) + { + actor->Update(deltaTime); + } + mUpdatingActors = false; + + // Move any pending actors to mActors + for (auto pending : mPendingActors) + { + mActors.emplace_back(pending); + } + mPendingActors.clear(); + + // Add any dead actors to a temp vector + std::vector deadActors; + for (auto actor : mActors) + { + if (actor->GetState() == Actor::EDead) + { + deadActors.emplace_back(actor); + } + } + + // Delete dead actors (which removes them from mActors) + for (auto actor : deadActors) + { + delete actor; + } +} + +void Game::GenerateOutput() +{ + SDL_SetRenderDrawColor(mRenderer, 0, 0, 0, 255); + SDL_RenderClear(mRenderer); + + // Draw all sprite components + for (auto sprite : mSprites) + { + sprite->Draw(mRenderer); + } + + SDL_RenderPresent(mRenderer); +} + +void Game::LoadData() +{ + // Create player's ship + mShip = new Ship(this); + mShip->SetPosition(Vector2(100.0f, 384.0f)); +} + +void Game::UnloadData() +{ + // Delete actors + // Because ~Actor calls RemoveActor, have to use a different style loop + while (!mActors.empty()) + { + delete mActors.back(); + } + + // Destroy textures + for (auto i : mTextures) + { + SDL_DestroyTexture(i.second); + } + mTextures.clear(); +} + +SDL_Texture* Game::GetTexture(const std::string& fileName) +{ + SDL_Texture* tex = nullptr; + // Is the texture already in the map? + auto iter = mTextures.find(fileName); + if (iter != mTextures.end()) + { + tex = iter->second; + } + else + { + // Load from file + SDL_Surface* surf = IMG_Load(fileName.c_str()); + if (!surf) + { + SDL_Log("Failed to load texture file %s", fileName.c_str()); + return nullptr; + } + + // Create texture from surface + tex = SDL_CreateTextureFromSurface(mRenderer, surf); + SDL_FreeSurface(surf); + if (!tex) + { + SDL_Log("Failed to convert surface to texture for %s", fileName.c_str()); + return nullptr; + } + + mTextures.emplace(fileName.c_str(), tex); + } + return tex; +} + +void Game::Shutdown() +{ + UnloadData(); + IMG_Quit(); + SDL_DestroyRenderer(mRenderer); + SDL_DestroyWindow(mWindow); + SDL_Quit(); +} + +void Game::AddActor(Actor* actor) +{ + // If we're updating actors, need to add to pending + if (mUpdatingActors) + { + mPendingActors.emplace_back(actor); + } + else + { + mActors.emplace_back(actor); + } +} + +void Game::RemoveActor(Actor* actor) +{ + // Is it in pending actors? + auto iter = std::find(mPendingActors.begin(), mPendingActors.end(), actor); + if (iter != mPendingActors.end()) + { + // Swap to end of vector and pop off (avoid erase copies) + std::iter_swap(iter, mPendingActors.end() - 1); + mPendingActors.pop_back(); + } + + // Is it in actors? + iter = std::find(mActors.begin(), mActors.end(), actor); + if (iter != mActors.end()) + { + // Swap to end of vector and pop off (avoid erase copies) + std::iter_swap(iter, mActors.end() - 1); + mActors.pop_back(); + } +} + +void Game::AddSprite(SpriteComponent* sprite) +{ + // Find the insertion point in the sorted vector + // (The first element with a higher draw order than me) + int myDrawOrder = sprite->GetDrawOrder(); + auto iter = mSprites.begin(); + for ( ; + iter != mSprites.end(); + ++iter) + { + if (myDrawOrder < (*iter)->GetDrawOrder()) + { + break; + } + } + + // Inserts element before position of iterator + mSprites.insert(iter, sprite); +} + +void Game::RemoveSprite(SpriteComponent* sprite) +{ + // (We can't swap because it ruins ordering) + auto iter = std::find(mSprites.begin(), mSprites.end(), sprite); + mSprites.erase(iter); +} diff --git a/Chapter03/Game.h b/Chapter03/Game.h new file mode 100644 index 00000000..03f0548c --- /dev/null +++ b/Chapter03/Game.h @@ -0,0 +1,57 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "SDL/SDL.h" +#include +#include +#include + +class Game +{ +public: + Game(); + bool Initialize(); + void RunLoop(); + void Shutdown(); + + void AddActor(class Actor* actor); + void RemoveActor(class Actor* actor); + + void AddSprite(class SpriteComponent* sprite); + void RemoveSprite(class SpriteComponent* sprite); + + SDL_Texture* GetTexture(const std::string& fileName); +private: + void ProcessInput(); + void UpdateGame(); + void GenerateOutput(); + void LoadData(); + void UnloadData(); + + // Map of textures loaded + std::unordered_map mTextures; + + // All the actors in the game + std::vector mActors; + // Any pending actors + std::vector mPendingActors; + + // All the sprite components drawn + std::vector mSprites; + + SDL_Window* mWindow; + SDL_Renderer* mRenderer; + Uint32 mTicksCount; + bool mIsRunning; + // Track if we're updating actors right now + bool mUpdatingActors; + + // Game-specific + class Ship* mShip; // Player's ship +}; diff --git a/Chapter03/Game.vcxproj b/Chapter03/Game.vcxproj new file mode 100644 index 00000000..1a1c8a47 --- /dev/null +++ b/Chapter03/Game.vcxproj @@ -0,0 +1,122 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + + + + + + + + + + + + + + + + + + + + {BC508D87-495F-4554-932D-DD68388B63CC} + Win32Proj + Game + 10.0.16299.0 + + + + Application + true + v141 + Unicode + + + Application + false + v141 + true + Unicode + + + + + + + + + + + + + true + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) + true + ..\external\SDL\include;..\external\GLEW\include;..\external\SOIL\include;%(AdditionalIncludeDirectories) + false + Sync + + + Console + true + ..\external\SDL\lib\win\x86;..\external\GLEW\lib\win\x86;..\external\SOIL\lib\win\x86;%(AdditionalLibraryDirectories) + opengl32.lib;SDL2.lib;SDL2main.lib;SDL2_ttf.lib;SDL2_mixer.lib;SDL2_image.lib;glew32.lib;SOIL.lib;%(AdditionalDependencies) + /NODEFAULTLIB:msvcrt.lib %(AdditionalOptions) + + + xcopy "$(ProjectDir)\..\external\SDL\lib\win\x86\*.dll" "$(OutDir)" /i /s /y +xcopy "$(ProjectDir)\..\external\GLEW\lib\win\x86\*.dll" "$(OutDir)" /i /s /y + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) + true + ..\external\SDL\include;..\external\GLEW\include;..\external\SOIL\include;%(AdditionalIncludeDirectories) + false + Sync + + + Console + true + true + true + ..\external\SDL\lib\win\x86;..\external\GLEW\lib\win\x86;..\external\SOIL\lib\win\x86;%(AdditionalLibraryDirectories) + opengl32.lib;SDL2.lib;SDL2main.lib;SDL2_ttf.lib;SDL2_mixer.lib;SDL2_image.lib;glew32.lib;SOIL.lib;%(AdditionalDependencies) + + + xcopy "$(ProjectDir)\..\external\SDL\lib\win\x86\*.dll" "$(OutDir)" /i /s /y +xcopy "$(ProjectDir)\..\external\GLEW\lib\win\x86\*.dll" "$(OutDir)" /i /s /y + + + + + + \ No newline at end of file diff --git a/Chapter03/Game.vcxproj.filters b/Chapter03/Game.vcxproj.filters new file mode 100644 index 00000000..6505ebef --- /dev/null +++ b/Chapter03/Game.vcxproj.filters @@ -0,0 +1,58 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/Chapter03/Main.cpp b/Chapter03/Main.cpp new file mode 100644 index 00000000..22ea0c69 --- /dev/null +++ b/Chapter03/Main.cpp @@ -0,0 +1,21 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "Game.h" + +int main(int argc, char** argv) +{ + Game game; + bool success = game.Initialize(); + if (success) + { + game.RunLoop(); + } + game.Shutdown(); + return 0; +} diff --git a/Chapter03/Math.cpp b/Chapter03/Math.cpp new file mode 100644 index 00000000..a16e7261 --- /dev/null +++ b/Chapter03/Math.cpp @@ -0,0 +1,239 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "Math.h" + +const Vector2 Vector2::Zero(0.0f, 0.0f); +const Vector2 Vector2::UnitX(1.0f, 0.0f); +const Vector2 Vector2::UnitY(0.0f, 1.0f); +const Vector2 Vector2::NegUnitX(-1.0f, 0.0f); +const Vector2 Vector2::NegUnitY(0.0f, -1.0f); + +const Vector3 Vector3::Zero(0.0f, 0.0f, 0.f); +const Vector3 Vector3::UnitX(1.0f, 0.0f, 0.0f); +const Vector3 Vector3::UnitY(0.0f, 1.0f, 0.0f); +const Vector3 Vector3::UnitZ(0.0f, 0.0f, 1.0f); +const Vector3 Vector3::NegUnitX(-1.0f, 0.0f, 0.0f); +const Vector3 Vector3::NegUnitY(0.0f, -1.0f, 0.0f); +const Vector3 Vector3::NegUnitZ(0.0f, 0.0f, -1.0f); +const Vector3 Vector3::Infinity(Math::Infinity, Math::Infinity, Math::Infinity); +const Vector3 Vector3::NegInfinity(Math::NegInfinity, Math::NegInfinity, Math::NegInfinity); + +static float m3Ident[3][3] = +{ + { 1.0f, 0.0f, 0.0f }, + { 0.0f, 1.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f } +}; +const Matrix3 Matrix3::Identity(m3Ident); + +static float m4Ident[4][4] = +{ + { 1.0f, 0.0f, 0.0f, 0.0f }, + { 0.0f, 1.0f, 0.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f, 0.0f }, + { 0.0f, 0.0f, 0.0f, 1.0f } +}; + +const Matrix4 Matrix4::Identity(m4Ident); + +const Quaternion Quaternion::Identity(0.0f, 0.0f, 0.0f, 1.0f); + +Vector2 Vector2::Transform(const Vector2& vec, const Matrix3& mat, float w /*= 1.0f*/) +{ + Vector2 retVal; + retVal.x = vec.x * mat.mat[0][0] + vec.y * mat.mat[1][0] + w * mat.mat[2][0]; + retVal.y = vec.x * mat.mat[0][1] + vec.y * mat.mat[1][1] + w * mat.mat[2][1]; + //ignore w since we aren't returning a new value for it... + return retVal; +} + +Vector3 Vector3::Transform(const Vector3& vec, const Matrix4& mat, float w /*= 1.0f*/) +{ + Vector3 retVal; + retVal.x = vec.x * mat.mat[0][0] + vec.y * mat.mat[1][0] + + vec.z * mat.mat[2][0] + w * mat.mat[3][0]; + retVal.y = vec.x * mat.mat[0][1] + vec.y * mat.mat[1][1] + + vec.z * mat.mat[2][1] + w * mat.mat[3][1]; + retVal.z = vec.x * mat.mat[0][2] + vec.y * mat.mat[1][2] + + vec.z * mat.mat[2][2] + w * mat.mat[3][2]; + //ignore w since we aren't returning a new value for it... + return retVal; +} + +// This will transform the vector and renormalize the w component +Vector3 Vector3::TransformWithPerspDiv(const Vector3& vec, const Matrix4& mat, float w /*= 1.0f*/) +{ + Vector3 retVal; + retVal.x = vec.x * mat.mat[0][0] + vec.y * mat.mat[1][0] + + vec.z * mat.mat[2][0] + w * mat.mat[3][0]; + retVal.y = vec.x * mat.mat[0][1] + vec.y * mat.mat[1][1] + + vec.z * mat.mat[2][1] + w * mat.mat[3][1]; + retVal.z = vec.x * mat.mat[0][2] + vec.y * mat.mat[1][2] + + vec.z * mat.mat[2][2] + w * mat.mat[3][2]; + float transformedW = vec.x * mat.mat[0][3] + vec.y * mat.mat[1][3] + + vec.z * mat.mat[2][3] + w * mat.mat[3][3]; + if (!Math::NearZero(Math::Abs(transformedW))) + { + transformedW = 1.0f / transformedW; + retVal *= transformedW; + } + return retVal; +} + +// Transform a Vector3 by a quaternion +Vector3 Vector3::Transform(const Vector3& v, const Quaternion& q) +{ + // v + 2.0*cross(q.xyz, cross(q.xyz,v) + q.w*v); + Vector3 qv(q.x, q.y, q.z); + Vector3 retVal = v; + retVal += 2.0f * Vector3::Cross(qv, Vector3::Cross(qv, v) + q.w * v); + return retVal; +} + +void Matrix4::Invert() +{ + // Thanks slow math + // This is a really janky way to unroll everything... + float tmp[12]; + float src[16]; + float dst[16]; + float det; + + // Transpose matrix + // row 1 to col 1 + src[0] = mat[0][0]; + src[4] = mat[0][1]; + src[8] = mat[0][2]; + src[12] = mat[0][3]; + + // row 2 to col 2 + src[1] = mat[1][0]; + src[5] = mat[1][1]; + src[9] = mat[1][2]; + src[13] = mat[1][3]; + + // row 3 to col 3 + src[2] = mat[2][0]; + src[6] = mat[2][1]; + src[10] = mat[2][2]; + src[14] = mat[2][3]; + + // row 4 to col 4 + src[3] = mat[3][0]; + src[7] = mat[3][1]; + src[11] = mat[3][2]; + src[15] = mat[3][3]; + + // Calculate cofactors + tmp[0] = src[10] * src[15]; + tmp[1] = src[11] * src[14]; + tmp[2] = src[9] * src[15]; + tmp[3] = src[11] * src[13]; + tmp[4] = src[9] * src[14]; + tmp[5] = src[10] * src[13]; + tmp[6] = src[8] * src[15]; + tmp[7] = src[11] * src[12]; + tmp[8] = src[8] * src[14]; + tmp[9] = src[10] * src[12]; + tmp[10] = src[8] * src[13]; + tmp[11] = src[9] * src[12]; + + dst[0] = tmp[0] * src[5] + tmp[3] * src[6] + tmp[4] * src[7]; + dst[0] -= tmp[1] * src[5] + tmp[2] * src[6] + tmp[5] * src[7]; + dst[1] = tmp[1] * src[4] + tmp[6] * src[6] + tmp[9] * src[7]; + dst[1] -= tmp[0] * src[4] + tmp[7] * src[6] + tmp[8] * src[7]; + dst[2] = tmp[2] * src[4] + tmp[7] * src[5] + tmp[10] * src[7]; + dst[2] -= tmp[3] * src[4] + tmp[6] * src[5] + tmp[11] * src[7]; + dst[3] = tmp[5] * src[4] + tmp[8] * src[5] + tmp[11] * src[6]; + dst[3] -= tmp[4] * src[4] + tmp[9] * src[5] + tmp[10] * src[6]; + dst[4] = tmp[1] * src[1] + tmp[2] * src[2] + tmp[5] * src[3]; + dst[4] -= tmp[0] * src[1] + tmp[3] * src[2] + tmp[4] * src[3]; + dst[5] = tmp[0] * src[0] + tmp[7] * src[2] + tmp[8] * src[3]; + dst[5] -= tmp[1] * src[0] + tmp[6] * src[2] + tmp[9] * src[3]; + dst[6] = tmp[3] * src[0] + tmp[6] * src[1] + tmp[11] * src[3]; + dst[6] -= tmp[2] * src[0] + tmp[7] * src[1] + tmp[10] * src[3]; + dst[7] = tmp[4] * src[0] + tmp[9] * src[1] + tmp[10] * src[2]; + dst[7] -= tmp[5] * src[0] + tmp[8] * src[1] + tmp[11] * src[2]; + + tmp[0] = src[2] * src[7]; + tmp[1] = src[3] * src[6]; + tmp[2] = src[1] * src[7]; + tmp[3] = src[3] * src[5]; + tmp[4] = src[1] * src[6]; + tmp[5] = src[2] * src[5]; + tmp[6] = src[0] * src[7]; + tmp[7] = src[3] * src[4]; + tmp[8] = src[0] * src[6]; + tmp[9] = src[2] * src[4]; + tmp[10] = src[0] * src[5]; + tmp[11] = src[1] * src[4]; + + dst[8] = tmp[0] * src[13] + tmp[3] * src[14] + tmp[4] * src[15]; + dst[8] -= tmp[1] * src[13] + tmp[2] * src[14] + tmp[5] * src[15]; + dst[9] = tmp[1] * src[12] + tmp[6] * src[14] + tmp[9] * src[15]; + dst[9] -= tmp[0] * src[12] + tmp[7] * src[14] + tmp[8] * src[15]; + dst[10] = tmp[2] * src[12] + tmp[7] * src[13] + tmp[10] * src[15]; + dst[10] -= tmp[3] * src[12] + tmp[6] * src[13] + tmp[11] * src[15]; + dst[11] = tmp[5] * src[12] + tmp[8] * src[13] + tmp[11] * src[14]; + dst[11] -= tmp[4] * src[12] + tmp[9] * src[13] + tmp[10] * src[14]; + dst[12] = tmp[2] * src[10] + tmp[5] * src[11] + tmp[1] * src[9]; + dst[12] -= tmp[4] * src[11] + tmp[0] * src[9] + tmp[3] * src[10]; + dst[13] = tmp[8] * src[11] + tmp[0] * src[8] + tmp[7] * src[10]; + dst[13] -= tmp[6] * src[10] + tmp[9] * src[11] + tmp[1] * src[8]; + dst[14] = tmp[6] * src[9] + tmp[11] * src[11] + tmp[3] * src[8]; + dst[14] -= tmp[10] * src[11] + tmp[2] * src[8] + tmp[7] * src[9]; + dst[15] = tmp[10] * src[10] + tmp[4] * src[8] + tmp[9] * src[9]; + dst[15] -= tmp[8] * src[9] + tmp[11] * src[10] + tmp[5] * src[8]; + + // Calculate determinant + det = src[0] * dst[0] + src[1] * dst[1] + src[2] * dst[2] + src[3] * dst[3]; + + // Inverse of matrix is divided by determinant + det = 1 / det; + for (int j = 0; j < 16; j++) + { + dst[j] *= det; + } + + // Set it back + for (int i = 0; i < 4; i++) + { + for (int j = 0; j < 4; j++) + { + mat[i][j] = dst[i * 4 + j]; + } + } +} + +Matrix4 Matrix4::CreateFromQuaternion(const class Quaternion& q) +{ + float mat[4][4]; + + mat[0][0] = 1.0f - 2.0f * q.y * q.y - 2.0f * q.z * q.z; + mat[0][1] = 2.0f * q.x * q.y + 2.0f * q.w * q.z; + mat[0][2] = 2.0f * q.x * q.z - 2.0f * q.w * q.y; + mat[0][3] = 0.0f; + + mat[1][0] = 2.0f * q.x * q.y - 2.0f * q.w * q.z; + mat[1][1] = 1.0f - 2.0f * q.x * q.x - 2.0f * q.z * q.z; + mat[1][2] = 2.0f * q.y * q.z + 2.0f * q.w * q.x; + mat[1][3] = 0.0f; + + mat[2][0] = 2.0f * q.x * q.z + 2.0f * q.w * q.y; + mat[2][1] = 2.0f * q.y * q.z - 2.0f * q.w * q.x; + mat[2][2] = 1.0f - 2.0f * q.x * q.x - 2.0f * q.y * q.y; + mat[2][3] = 0.0f; + + mat[3][0] = 0.0f; + mat[3][1] = 0.0f; + mat[3][2] = 0.0f; + mat[3][3] = 1.0f; + + return Matrix4(mat); +} diff --git a/Chapter03/Math.h b/Chapter03/Math.h new file mode 100644 index 00000000..752963f1 --- /dev/null +++ b/Chapter03/Math.h @@ -0,0 +1,1033 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once + +#include +#include +#include + +namespace Math +{ + const float Pi = 3.1415926535f; + const float TwoPi = Pi * 2.0f; + const float PiOver2 = Pi / 2.0f; + const float Infinity = std::numeric_limits::infinity(); + const float NegInfinity = -std::numeric_limits::infinity(); + + inline float ToRadians(float degrees) + { + return degrees * Pi / 180.0f; + } + + inline float ToDegrees(float radians) + { + return radians * 180.0f / Pi; + } + + inline bool NearZero(float val, float epsilon = 0.001f) + { + if (fabs(val) <= epsilon) + { + return true; + } + else + { + return false; + } + } + + template + T Max(const T& a, const T& b) + { + return (a < b ? b : a); + } + + template + T Min(const T& a, const T& b) + { + return (a < b ? a : b); + } + + template + T Clamp(const T& value, const T& lower, const T& upper) + { + return Min(upper, Max(lower, value)); + } + + inline float Abs(float value) + { + return fabs(value); + } + + inline float Cos(float angle) + { + return cosf(angle); + } + + inline float Sin(float angle) + { + return sinf(angle); + } + + inline float Tan(float angle) + { + return tanf(angle); + } + + inline float Acos(float value) + { + return acosf(value); + } + + inline float Atan2(float y, float x) + { + return atan2f(y, x); + } + + inline float Cot(float angle) + { + return 1.0f / Tan(angle); + } + + inline float Lerp(float a, float b, float f) + { + return a + f * (b - a); + } + + inline float Sqrt(float value) + { + return sqrtf(value); + } + + inline float Fmod(float numer, float denom) + { + return fmod(numer, denom); + } +} + +// 2D Vector +class Vector2 +{ +public: + float x; + float y; + + Vector2() + :x(0.0f) + ,y(0.0f) + {} + + explicit Vector2(float inX, float inY) + :x(inX) + ,y(inY) + {} + + // Set both components in one line + void Set(float inX, float inY) + { + x = inX; + y = inY; + } + + // Vector addition (a + b) + friend Vector2 operator+(const Vector2& a, const Vector2& b) + { + return Vector2(a.x + b.x, a.y + b.y); + } + + // Vector subtraction (a - b) + friend Vector2 operator-(const Vector2& a, const Vector2& b) + { + return Vector2(a.x - b.x, a.y - b.y); + } + + // Component-wise multiplication + // (a.x * b.x, ...) + friend Vector2 operator*(const Vector2& a, const Vector2& b) + { + return Vector2(a.x * b.x, a.y * b.y); + } + + // Scalar multiplication + friend Vector2 operator*(const Vector2& vec, float scalar) + { + return Vector2(vec.x * scalar, vec.y * scalar); + } + + // Scalar multiplication + friend Vector2 operator*(float scalar, const Vector2& vec) + { + return Vector2(vec.x * scalar, vec.y * scalar); + } + + // Scalar *= + Vector2& operator*=(float scalar) + { + x *= scalar; + y *= scalar; + return *this; + } + + // Vector += + Vector2& operator+=(const Vector2& right) + { + x += right.x; + y += right.y; + return *this; + } + + // Vector -= + Vector2& operator-=(const Vector2& right) + { + x -= right.x; + y -= right.y; + return *this; + } + + // Length squared of vector + float LengthSq() const + { + return (x*x + y*y); + } + + // Length of vector + float Length() const + { + return (Math::Sqrt(LengthSq())); + } + + // Normalize this vector + void Normalize() + { + float length = Length(); + x /= length; + y /= length; + } + + // Normalize the provided vector + static Vector2 Normalize(const Vector2& vec) + { + Vector2 temp = vec; + temp.Normalize(); + return temp; + } + + // Dot product between two vectors (a dot b) + static float Dot(const Vector2& a, const Vector2& b) + { + return (a.x * b.x + a.y * b.y); + } + + // Lerp from A to B by f + static Vector2 Lerp(const Vector2& a, const Vector2& b, float f) + { + return Vector2(a + f * (b - a)); + } + + // Reflect V about (normalized) N + static Vector2 Reflect(const Vector2& v, const Vector2& n) + { + return v - 2.0f * Vector2::Dot(v, n) * n; + } + + // Transform vector by matrix + static Vector2 Transform(const Vector2& vec, const class Matrix3& mat, float w = 1.0f); + + static const Vector2 Zero; + static const Vector2 UnitX; + static const Vector2 UnitY; + static const Vector2 NegUnitX; + static const Vector2 NegUnitY; +}; + +// 3D Vector +class Vector3 +{ +public: + float x; + float y; + float z; + + Vector3() + :x(0.0f) + ,y(0.0f) + ,z(0.0f) + {} + + explicit Vector3(float inX, float inY, float inZ) + :x(inX) + ,y(inY) + ,z(inZ) + {} + + // Cast to a const float pointer + const float* GetAsFloatPtr() const + { + return reinterpret_cast(&x); + } + + // Set all three components in one line + void Set(float inX, float inY, float inZ) + { + x = inX; + y = inY; + z = inZ; + } + + // Vector addition (a + b) + friend Vector3 operator+(const Vector3& a, const Vector3& b) + { + return Vector3(a.x + b.x, a.y + b.y, a.z + b.z); + } + + // Vector subtraction (a - b) + friend Vector3 operator-(const Vector3& a, const Vector3& b) + { + return Vector3(a.x - b.x, a.y - b.y, a.z - b.z); + } + + // Component-wise multiplication + friend Vector3 operator*(const Vector3& left, const Vector3& right) + { + return Vector3(left.x * right.x, left.y * right.y, left.z * right.z); + } + + // Scalar multiplication + friend Vector3 operator*(const Vector3& vec, float scalar) + { + return Vector3(vec.x * scalar, vec.y * scalar, vec.z * scalar); + } + + // Scalar multiplication + friend Vector3 operator*(float scalar, const Vector3& vec) + { + return Vector3(vec.x * scalar, vec.y * scalar, vec.z * scalar); + } + + // Scalar *= + Vector3& operator*=(float scalar) + { + x *= scalar; + y *= scalar; + z *= scalar; + return *this; + } + + // Vector += + Vector3& operator+=(const Vector3& right) + { + x += right.x; + y += right.y; + z += right.z; + return *this; + } + + // Vector -= + Vector3& operator-=(const Vector3& right) + { + x -= right.x; + y -= right.y; + z -= right.z; + return *this; + } + + // Length squared of vector + float LengthSq() const + { + return (x*x + y*y + z*z); + } + + // Length of vector + float Length() const + { + return (Math::Sqrt(LengthSq())); + } + + // Normalize this vector + void Normalize() + { + float length = Length(); + x /= length; + y /= length; + z /= length; + } + + // Normalize the provided vector + static Vector3 Normalize(const Vector3& vec) + { + Vector3 temp = vec; + temp.Normalize(); + return temp; + } + + // Dot product between two vectors (a dot b) + static float Dot(const Vector3& a, const Vector3& b) + { + return (a.x * b.x + a.y * b.y + a.z * b.z); + } + + // Cross product between two vectors (a cross b) + static Vector3 Cross(const Vector3& a, const Vector3& b) + { + Vector3 temp; + temp.x = a.y * b.z - a.z * b.y; + temp.y = a.z * b.x - a.x * b.z; + temp.z = a.x * b.y - a.y * b.x; + return temp; + } + + // Lerp from A to B by f + static Vector3 Lerp(const Vector3& a, const Vector3& b, float f) + { + return Vector3(a + f * (b - a)); + } + + // Reflect V about (normalized) N + static Vector3 Reflect(const Vector3& v, const Vector3& n) + { + return v - 2.0f * Vector3::Dot(v, n) * n; + } + + static Vector3 Transform(const Vector3& vec, const class Matrix4& mat, float w = 1.0f); + // This will transform the vector and renormalize the w component + static Vector3 TransformWithPerspDiv(const Vector3& vec, const class Matrix4& mat, float w = 1.0f); + + // Transform a Vector3 by a quaternion + static Vector3 Transform(const Vector3& v, const class Quaternion& q); + + static const Vector3 Zero; + static const Vector3 UnitX; + static const Vector3 UnitY; + static const Vector3 UnitZ; + static const Vector3 NegUnitX; + static const Vector3 NegUnitY; + static const Vector3 NegUnitZ; + static const Vector3 Infinity; + static const Vector3 NegInfinity; +}; + +// 3x3 Matrix +class Matrix3 +{ +public: + float mat[3][3]; + + Matrix3() + { + *this = Matrix3::Identity; + } + + explicit Matrix3(float inMat[3][3]) + { + memcpy(mat, inMat, 9 * sizeof(float)); + } + + // Cast to a const float pointer + const float* GetAsFloatPtr() const + { + return reinterpret_cast(&mat[0][0]); + } + + // Matrix multiplication + friend Matrix3 operator*(const Matrix3& left, const Matrix3& right) + { + Matrix3 retVal; + // row 0 + retVal.mat[0][0] = + left.mat[0][0] * right.mat[0][0] + + left.mat[0][1] * right.mat[1][0] + + left.mat[0][2] * right.mat[2][0]; + + retVal.mat[0][1] = + left.mat[0][0] * right.mat[0][1] + + left.mat[0][1] * right.mat[1][1] + + left.mat[0][2] * right.mat[2][1]; + + retVal.mat[0][2] = + left.mat[0][0] * right.mat[0][2] + + left.mat[0][1] * right.mat[1][2] + + left.mat[0][2] * right.mat[2][2]; + + // row 1 + retVal.mat[1][0] = + left.mat[1][0] * right.mat[0][0] + + left.mat[1][1] * right.mat[1][0] + + left.mat[1][2] * right.mat[2][0]; + + retVal.mat[1][1] = + left.mat[1][0] * right.mat[0][1] + + left.mat[1][1] * right.mat[1][1] + + left.mat[1][2] * right.mat[2][1]; + + retVal.mat[1][2] = + left.mat[1][0] * right.mat[0][2] + + left.mat[1][1] * right.mat[1][2] + + left.mat[1][2] * right.mat[2][2]; + + // row 2 + retVal.mat[2][0] = + left.mat[2][0] * right.mat[0][0] + + left.mat[2][1] * right.mat[1][0] + + left.mat[2][2] * right.mat[2][0]; + + retVal.mat[2][1] = + left.mat[2][0] * right.mat[0][1] + + left.mat[2][1] * right.mat[1][1] + + left.mat[2][2] * right.mat[2][1]; + + retVal.mat[2][2] = + left.mat[2][0] * right.mat[0][2] + + left.mat[2][1] * right.mat[1][2] + + left.mat[2][2] * right.mat[2][2]; + + return retVal; + } + + Matrix3& operator*=(const Matrix3& right) + { + *this = *this * right; + return *this; + } + + // Create a scale matrix with x and y scales + static Matrix3 CreateScale(float xScale, float yScale) + { + float temp[3][3] = + { + { xScale, 0.0f, 0.0f }, + { 0.0f, yScale, 0.0f }, + { 0.0f, 0.0f, 1.0f }, + }; + return Matrix3(temp); + } + + static Matrix3 CreateScale(const Vector2& scaleVector) + { + return CreateScale(scaleVector.x, scaleVector.y); + } + + // Create a scale matrix with a uniform factor + static Matrix3 CreateScale(float scale) + { + return CreateScale(scale, scale); + } + + // Create a rotation matrix about the Z axis + // theta is in radians + static Matrix3 CreateRotation(float theta) + { + float temp[3][3] = + { + { Math::Cos(theta), Math::Sin(theta), 0.0f }, + { -Math::Sin(theta), Math::Cos(theta), 0.0f }, + { 0.0f, 0.0f, 1.0f }, + }; + return Matrix3(temp); + } + + // Create a translation matrix (on the xy-plane) + static Matrix3 CreateTranslation(const Vector2& trans) + { + float temp[3][3] = + { + { 1.0f, 0.0f, 0.0f }, + { 0.0f, 1.0f, 0.0f }, + { trans.x, trans.y, 1.0f }, + }; + return Matrix3(temp); + } + + static const Matrix3 Identity; +}; + +// 4x4 Matrix +class Matrix4 +{ +public: + float mat[4][4]; + + Matrix4() + { + *this = Matrix4::Identity; + } + + explicit Matrix4(float inMat[4][4]) + { + memcpy(mat, inMat, 16 * sizeof(float)); + } + + // Cast to a const float pointer + const float* GetAsFloatPtr() const + { + return reinterpret_cast(&mat[0][0]); + } + + // Matrix multiplication (a * b) + friend Matrix4 operator*(const Matrix4& a, const Matrix4& b) + { + Matrix4 retVal; + // row 0 + retVal.mat[0][0] = + a.mat[0][0] * b.mat[0][0] + + a.mat[0][1] * b.mat[1][0] + + a.mat[0][2] * b.mat[2][0] + + a.mat[0][3] * b.mat[3][0]; + + retVal.mat[0][1] = + a.mat[0][0] * b.mat[0][1] + + a.mat[0][1] * b.mat[1][1] + + a.mat[0][2] * b.mat[2][1] + + a.mat[0][3] * b.mat[3][1]; + + retVal.mat[0][2] = + a.mat[0][0] * b.mat[0][2] + + a.mat[0][1] * b.mat[1][2] + + a.mat[0][2] * b.mat[2][2] + + a.mat[0][3] * b.mat[3][2]; + + retVal.mat[0][3] = + a.mat[0][0] * b.mat[0][3] + + a.mat[0][1] * b.mat[1][3] + + a.mat[0][2] * b.mat[2][3] + + a.mat[0][3] * b.mat[3][3]; + + // row 1 + retVal.mat[1][0] = + a.mat[1][0] * b.mat[0][0] + + a.mat[1][1] * b.mat[1][0] + + a.mat[1][2] * b.mat[2][0] + + a.mat[1][3] * b.mat[3][0]; + + retVal.mat[1][1] = + a.mat[1][0] * b.mat[0][1] + + a.mat[1][1] * b.mat[1][1] + + a.mat[1][2] * b.mat[2][1] + + a.mat[1][3] * b.mat[3][1]; + + retVal.mat[1][2] = + a.mat[1][0] * b.mat[0][2] + + a.mat[1][1] * b.mat[1][2] + + a.mat[1][2] * b.mat[2][2] + + a.mat[1][3] * b.mat[3][2]; + + retVal.mat[1][3] = + a.mat[1][0] * b.mat[0][3] + + a.mat[1][1] * b.mat[1][3] + + a.mat[1][2] * b.mat[2][3] + + a.mat[1][3] * b.mat[3][3]; + + // row 2 + retVal.mat[2][0] = + a.mat[2][0] * b.mat[0][0] + + a.mat[2][1] * b.mat[1][0] + + a.mat[2][2] * b.mat[2][0] + + a.mat[2][3] * b.mat[3][0]; + + retVal.mat[2][1] = + a.mat[2][0] * b.mat[0][1] + + a.mat[2][1] * b.mat[1][1] + + a.mat[2][2] * b.mat[2][1] + + a.mat[2][3] * b.mat[3][1]; + + retVal.mat[2][2] = + a.mat[2][0] * b.mat[0][2] + + a.mat[2][1] * b.mat[1][2] + + a.mat[2][2] * b.mat[2][2] + + a.mat[2][3] * b.mat[3][2]; + + retVal.mat[2][3] = + a.mat[2][0] * b.mat[0][3] + + a.mat[2][1] * b.mat[1][3] + + a.mat[2][2] * b.mat[2][3] + + a.mat[2][3] * b.mat[3][3]; + + // row 3 + retVal.mat[3][0] = + a.mat[3][0] * b.mat[0][0] + + a.mat[3][1] * b.mat[1][0] + + a.mat[3][2] * b.mat[2][0] + + a.mat[3][3] * b.mat[3][0]; + + retVal.mat[3][1] = + a.mat[3][0] * b.mat[0][1] + + a.mat[3][1] * b.mat[1][1] + + a.mat[3][2] * b.mat[2][1] + + a.mat[3][3] * b.mat[3][1]; + + retVal.mat[3][2] = + a.mat[3][0] * b.mat[0][2] + + a.mat[3][1] * b.mat[1][2] + + a.mat[3][2] * b.mat[2][2] + + a.mat[3][3] * b.mat[3][2]; + + retVal.mat[3][3] = + a.mat[3][0] * b.mat[0][3] + + a.mat[3][1] * b.mat[1][3] + + a.mat[3][2] * b.mat[2][3] + + a.mat[3][3] * b.mat[3][3]; + + return retVal; + } + + Matrix4& operator*=(const Matrix4& right) + { + *this = *this * right; + return *this; + } + + // Invert the matrix - super slow + void Invert(); + + // Get the translation component of the matrix + Vector3 GetTranslation() const + { + return Vector3(mat[3][0], mat[3][1], mat[3][2]); + } + + // Get the X axis of the matrix (forward) + Vector3 GetXAxis() const + { + return Vector3::Normalize(Vector3(mat[0][0], mat[0][1], mat[0][2])); + } + + // Get the Y axis of the matrix (left) + Vector3 GetYAxis() const + { + return Vector3::Normalize(Vector3(mat[1][0], mat[1][1], mat[1][2])); + } + + // Get the Z axis of the matrix (up) + Vector3 GetZAxis() const + { + return Vector3::Normalize(Vector3(mat[2][0], mat[2][1], mat[2][2])); + } + + // Extract the scale component from the matrix + Vector3 GetScale() const + { + Vector3 retVal; + retVal.x = Vector3(mat[0][0], mat[0][1], mat[0][2]).Length(); + retVal.y = Vector3(mat[1][0], mat[1][1], mat[1][2]).Length(); + retVal.z = Vector3(mat[2][0], mat[2][1], mat[2][2]).Length(); + return retVal; + } + + // Create a scale matrix with x, y, and z scales + static Matrix4 CreateScale(float xScale, float yScale, float zScale) + { + float temp[4][4] = + { + { xScale, 0.0f, 0.0f, 0.0f }, + { 0.0f, yScale, 0.0f, 0.0f }, + { 0.0f, 0.0f, zScale, 0.0f }, + { 0.0f, 0.0f, 0.0f, 1.0f } + }; + return Matrix4(temp); + } + + static Matrix4 CreateScale(const Vector3& scaleVector) + { + return CreateScale(scaleVector.x, scaleVector.y, scaleVector.z); + } + + // Create a scale matrix with a uniform factor + static Matrix4 CreateScale(float scale) + { + return CreateScale(scale, scale, scale); + } + + // Rotation about x-axis + static Matrix4 CreateRotationX(float theta) + { + float temp[4][4] = + { + { 1.0f, 0.0f, 0.0f , 0.0f }, + { 0.0f, Math::Cos(theta), Math::Sin(theta), 0.0f }, + { 0.0f, -Math::Sin(theta), Math::Cos(theta), 0.0f }, + { 0.0f, 0.0f, 0.0f, 1.0f }, + }; + return Matrix4(temp); + } + + // Rotation about y-axis + static Matrix4 CreateRotationY(float theta) + { + float temp[4][4] = + { + { Math::Cos(theta), 0.0f, -Math::Sin(theta), 0.0f }, + { 0.0f, 1.0f, 0.0f, 0.0f }, + { Math::Sin(theta), 0.0f, Math::Cos(theta), 0.0f }, + { 0.0f, 0.0f, 0.0f, 1.0f }, + }; + return Matrix4(temp); + } + + // Rotation about z-axis + static Matrix4 CreateRotationZ(float theta) + { + float temp[4][4] = + { + { Math::Cos(theta), Math::Sin(theta), 0.0f, 0.0f }, + { -Math::Sin(theta), Math::Cos(theta), 0.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f, 0.0f }, + { 0.0f, 0.0f, 0.0f, 1.0f }, + }; + return Matrix4(temp); + } + + // Create a rotation matrix from a quaternion + static Matrix4 CreateFromQuaternion(const class Quaternion& q); + + static Matrix4 CreateTranslation(const Vector3& trans) + { + float temp[4][4] = + { + { 1.0f, 0.0f, 0.0f, 0.0f }, + { 0.0f, 1.0f, 0.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f, 0.0f }, + { trans.x, trans.y, trans.z, 1.0f } + }; + return Matrix4(temp); + } + + static Matrix4 CreateLookAt(const Vector3& eye, const Vector3& target, const Vector3& up) + { + Vector3 zaxis = Vector3::Normalize(target - eye); + Vector3 xaxis = Vector3::Normalize(Vector3::Cross(up, zaxis)); + Vector3 yaxis = Vector3::Normalize(Vector3::Cross(zaxis, xaxis)); + Vector3 trans; + trans.x = -Vector3::Dot(xaxis, eye); + trans.y = -Vector3::Dot(yaxis, eye); + trans.z = -Vector3::Dot(zaxis, eye); + + float temp[4][4] = + { + { xaxis.x, yaxis.x, zaxis.x, 0.0f }, + { xaxis.y, yaxis.y, zaxis.y, 0.0f }, + { xaxis.z, yaxis.z, zaxis.z, 0.0f }, + { trans.x, trans.y, trans.z, 1.0f } + }; + return Matrix4(temp); + } + + static Matrix4 CreateOrtho(float width, float height, float near, float far) + { + float temp[4][4] = + { + { 2.0f / width, 0.0f, 0.0f, 0.0f }, + { 0.0f, 2.0f / height, 0.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f / (far - near), 0.0f }, + { 0.0f, 0.0f, near / (near - far), 1.0f } + }; + return Matrix4(temp); + } + + static Matrix4 CreatePerspectiveFOV(float fovY, float width, float height, float near, float far) + { + float yScale = Math::Cot(fovY / 2.0f); + float xScale = yScale * height / width; + float temp[4][4] = + { + { xScale, 0.0f, 0.0f, 0.0f }, + { 0.0f, yScale, 0.0f, 0.0f }, + { 0.0f, 0.0f, far / (far - near), 1.0f }, + { 0.0f, 0.0f, -near * far / (far - near), 0.0f } + }; + return Matrix4(temp); + } + + // Create "Simple" View-Projection Matrix from Chapter 6 + static Matrix4 CreateSimpleViewProj(float width, float height) + { + float temp[4][4] = + { + { 2.0f/width, 0.0f, 0.0f, 0.0f }, + { 0.0f, 2.0f/height, 0.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f, 1.0f } + }; + return Matrix4(temp); + } + + static const Matrix4 Identity; +}; + +// (Unit) Quaternion +class Quaternion +{ +public: + float x; + float y; + float z; + float w; + + Quaternion() + { + *this = Quaternion::Identity; + } + + // This directly sets the quaternion components -- + // don't use for axis/angle + explicit Quaternion(float inX, float inY, float inZ, float inW) + { + Set(inX, inY, inZ, inW); + } + + // Construct the quaternion from an axis and angle + // It is assumed that axis is already normalized, + // and the angle is in radians + explicit Quaternion(const Vector3& axis, float angle) + { + float scalar = Math::Sin(angle / 2.0f); + x = axis.x * scalar; + y = axis.y * scalar; + z = axis.z * scalar; + w = Math::Cos(angle / 2.0f); + } + + // Directly set the internal components + void Set(float inX, float inY, float inZ, float inW) + { + x = inX; + y = inY; + z = inZ; + w = inW; + } + + void Conjugate() + { + x *= -1.0f; + y *= -1.0f; + z *= -1.0f; + } + + float LengthSq() const + { + return (x*x + y*y + z*z + w*w); + } + + float Length() const + { + return Math::Sqrt(LengthSq()); + } + + void Normalize() + { + float length = Length(); + x /= length; + y /= length; + z /= length; + w /= length; + } + + // Normalize the provided quaternion + static Quaternion Normalize(const Quaternion& q) + { + Quaternion retVal = q; + retVal.Normalize(); + return retVal; + } + + // Linear interpolation + static Quaternion Lerp(const Quaternion& a, const Quaternion& b, float f) + { + Quaternion retVal; + retVal.x = Math::Lerp(a.x, b.x, f); + retVal.y = Math::Lerp(a.y, b.y, f); + retVal.z = Math::Lerp(a.z, b.z, f); + retVal.w = Math::Lerp(a.w, b.w, f); + retVal.Normalize(); + return retVal; + } + + static float Dot(const Quaternion& a, const Quaternion& b) + { + return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w; + } + + // Spherical Linear Interpolation + static Quaternion Slerp(const Quaternion& a, const Quaternion& b, float f) + { + float rawCosm = Quaternion::Dot(a, b); + + float cosom = -rawCosm; + if (rawCosm >= 0.0f) + { + cosom = rawCosm; + } + + float scale0, scale1; + + if (cosom < 0.9999f) + { + const float omega = Math::Acos(cosom); + const float invSin = 1.f / Math::Sin(omega); + scale0 = Math::Sin((1.f - f) * omega) * invSin; + scale1 = Math::Sin(f * omega) * invSin; + } + else + { + // Use linear interpolation if the quaternions + // are collinear + scale0 = 1.0f - f; + scale1 = f; + } + + if (rawCosm < 0.0f) + { + scale1 = -scale1; + } + + Quaternion retVal; + retVal.x = scale0 * a.x + scale1 * b.x; + retVal.y = scale0 * a.y + scale1 * b.y; + retVal.z = scale0 * a.z + scale1 * b.z; + retVal.w = scale0 * a.w + scale1 * b.w; + retVal.Normalize(); + return retVal; + } + + // Concatenate + // Rotate by q FOLLOWED BY p + static Quaternion Concatenate(const Quaternion& q, const Quaternion& p) + { + Quaternion retVal; + + // Vector component is: + // ps * qv + qs * pv + pv x qv + Vector3 qv(q.x, q.y, q.z); + Vector3 pv(p.x, p.y, p.z); + Vector3 newVec = p.w * qv + q.w * pv + Vector3::Cross(pv, qv); + retVal.x = newVec.x; + retVal.y = newVec.y; + retVal.z = newVec.z; + + // Scalar component is: + // ps * qs - pv . qv + retVal.w = p.w * q.w - Vector3::Dot(pv, qv); + + return retVal; + } + + static const Quaternion Identity; +}; + +namespace Color +{ + static const Vector3 Black(0.0f, 0.0f, 0.0f); + static const Vector3 White(1.0f, 1.0f, 1.0f); + static const Vector3 Red(1.0f, 0.0f, 0.0f); + static const Vector3 Green(0.0f, 1.0f, 0.0f); + static const Vector3 Blue(0.0f, 0.0f, 1.0f); + static const Vector3 Yellow(1.0f, 1.0f, 0.0f); + static const Vector3 LightYellow(1.0f, 1.0f, 0.88f); + static const Vector3 LightBlue(0.68f, 0.85f, 0.9f); + static const Vector3 LightPink(1.0f, 0.71f, 0.76f); + static const Vector3 LightGreen(0.56f, 0.93f, 0.56f); +} diff --git a/Chapter03/MoveComponent.cpp b/Chapter03/MoveComponent.cpp new file mode 100644 index 00000000..cdf1fdf9 --- /dev/null +++ b/Chapter03/MoveComponent.cpp @@ -0,0 +1,35 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "MoveComponent.h" +#include "Actor.h" + +MoveComponent::MoveComponent(class Actor* owner, int updateOrder) +:Component(owner, updateOrder) +,mAngularSpeed(0.0f) +,mForwardSpeed(0.0f) +{ + +} + +void MoveComponent::Update(float deltaTime) +{ + if (!Math::NearZero(mAngularSpeed)) + { + float rot = mOwner->GetRotation(); + rot += mAngularSpeed * deltaTime; + mOwner->SetRotation(rot); + } + + if (!Math::NearZero(mForwardSpeed)) + { + Vector2 pos = mOwner->GetPosition(); + pos += mOwner->GetForward() * mForwardSpeed * deltaTime; + mOwner->SetPosition(pos); + } +} diff --git a/Chapter03/MoveComponent.h b/Chapter03/MoveComponent.h new file mode 100644 index 00000000..def7d389 --- /dev/null +++ b/Chapter03/MoveComponent.h @@ -0,0 +1,26 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "Component.h" + +class MoveComponent : public Component +{ +public: + // Lower update order to update first + MoveComponent(class Actor* owner, int updateOrder = 10); + void Update(float deltaTime) override; + + float GetAngularSpeed() const { return mAngularSpeed; } + float GetForwardSpeed() const { return mForwardSpeed; } + void SetAngularSpeed(float speed) { mAngularSpeed = speed; } + void SetForwardSpeed(float speed) { mForwardSpeed = speed; } +private: + float mAngularSpeed; + float mForwardSpeed; +}; diff --git a/Chapter03/Ship.cpp b/Chapter03/Ship.cpp new file mode 100644 index 00000000..85227a27 --- /dev/null +++ b/Chapter03/Ship.cpp @@ -0,0 +1,72 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "Ship.h" +#include "SpriteComponent.h" +#include "Game.h" + +Ship::Ship(Game* game) + :Actor(game) + ,mRightSpeed(0.0f) + ,mDownSpeed(0.0f) +{ + // Create an animated sprite component + SpriteComponent* sc = new SpriteComponent(this); + sc->SetTexture(game->GetTexture("Assets/Ship.png")); +} + +void Ship::UpdateActor(float deltaTime) +{ + Actor::UpdateActor(deltaTime); + // Update position based on speeds and delta time + Vector2 pos = GetPosition(); + pos.x += mRightSpeed * deltaTime; + pos.y += mDownSpeed * deltaTime; + // Restrict position to left half of screen + if (pos.x < 25.0f) + { + pos.x = 25.0f; + } + else if (pos.x > 500.0f) + { + pos.x = 500.0f; + } + if (pos.y < 25.0f) + { + pos.y = 25.0f; + } + else if (pos.y > 743.0f) + { + pos.y = 743.0f; + } + SetPosition(pos); +} + +void Ship::ProcessKeyboard(const uint8_t* state) +{ + mRightSpeed = 0.0f; + mDownSpeed = 0.0f; + // right/left + if (state[SDL_SCANCODE_D]) + { + mRightSpeed += 250.0f; + } + if (state[SDL_SCANCODE_A]) + { + mRightSpeed -= 250.0f; + } + // up/down + if (state[SDL_SCANCODE_S]) + { + mDownSpeed += 300.0f; + } + if (state[SDL_SCANCODE_W]) + { + mDownSpeed -= 300.0f; + } +} diff --git a/Chapter03/Ship.h b/Chapter03/Ship.h new file mode 100644 index 00000000..8a34e962 --- /dev/null +++ b/Chapter03/Ship.h @@ -0,0 +1,22 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "Actor.h" +class Ship : public Actor +{ +public: + Ship(class Game* game); + void UpdateActor(float deltaTime) override; + void ProcessKeyboard(const uint8_t* state); + float GetRightSpeed() const { return mRightSpeed; } + float GetDownSpeed() const { return mDownSpeed; } +private: + float mRightSpeed; + float mDownSpeed; +}; \ No newline at end of file diff --git a/Chapter03/SpriteComponent.cpp b/Chapter03/SpriteComponent.cpp new file mode 100644 index 00000000..56884fbc --- /dev/null +++ b/Chapter03/SpriteComponent.cpp @@ -0,0 +1,56 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "SpriteComponent.h" +#include "Actor.h" +#include "Game.h" + +SpriteComponent::SpriteComponent(Actor* owner, int drawOrder) + :Component(owner) + ,mTexture(nullptr) + ,mDrawOrder(drawOrder) + ,mTexWidth(0) + ,mTexHeight(0) +{ + mOwner->GetGame()->AddSprite(this); +} + +SpriteComponent::~SpriteComponent() +{ + mOwner->GetGame()->RemoveSprite(this); +} + +void SpriteComponent::Draw(SDL_Renderer* renderer) +{ + if (mTexture) + { + SDL_Rect r; + // Scale the width/height by owner's scale + r.w = static_cast(mTexWidth * mOwner->GetScale()); + r.h = static_cast(mTexHeight * mOwner->GetScale()); + // Center the rectangle around the position of the owner + r.x = static_cast(mOwner->GetPosition().x - r.w / 2); + r.y = static_cast(mOwner->GetPosition().y - r.h / 2); + + // Draw (have to convert angle from radians to degrees, and clockwise to counter) + SDL_RenderCopyEx(renderer, + mTexture, + nullptr, + &r, + -Math::ToDegrees(mOwner->GetRotation()), + nullptr, + SDL_FLIP_NONE); + } +} + +void SpriteComponent::SetTexture(SDL_Texture* texture) +{ + mTexture = texture; + // Set width/height + SDL_QueryTexture(texture, nullptr, nullptr, &mTexWidth, &mTexHeight); +} diff --git a/Chapter03/SpriteComponent.h b/Chapter03/SpriteComponent.h new file mode 100644 index 00000000..c430e888 --- /dev/null +++ b/Chapter03/SpriteComponent.h @@ -0,0 +1,30 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "Component.h" +#include "SDL/SDL.h" +class SpriteComponent : public Component +{ +public: + // (Lower draw order corresponds with further back) + SpriteComponent(class Actor* owner, int drawOrder = 100); + ~SpriteComponent(); + + virtual void Draw(SDL_Renderer* renderer); + virtual void SetTexture(SDL_Texture* texture); + + int GetDrawOrder() const { return mDrawOrder; } + int GetTexHeight() const { return mTexHeight; } + int GetTexWidth() const { return mTexWidth; } +protected: + SDL_Texture* mTexture; + int mDrawOrder; + int mTexWidth; + int mTexHeight; +}; From 25cb1fe08e91f94ae86ab1bb47accc56ed9aee10 Mon Sep 17 00:00:00 2001 From: Sanjay Madhav Date: Tue, 21 Nov 2017 00:26:24 -0800 Subject: [PATCH 10/40] Chapter 3 code done --- Chapter03/Actor.cpp | 18 +++++++++ Chapter03/Actor.h | 7 ++++ Chapter03/Asteroid.cpp | 46 +++++++++++++++++++++++ Chapter03/Asteroid.h | 20 ++++++++++ Chapter03/CircleComponent.cpp | 40 ++++++++++++++++++++ Chapter03/CircleComponent.h | 26 +++++++++++++ Chapter03/Component.h | 4 ++ Chapter03/Game.cpp | 43 ++++++++++++++++++--- Chapter03/Game.h | 6 +++ Chapter03/Game.vcxproj | 10 +++++ Chapter03/Game.vcxproj.filters | 30 +++++++++++++++ Chapter03/InputComponent.cpp | 47 +++++++++++++++++++++++ Chapter03/InputComponent.h | 45 ++++++++++++++++++++++ Chapter03/Laser.cpp | 56 ++++++++++++++++++++++++++++ Chapter03/Laser.h | 20 ++++++++++ Chapter03/MoveComponent.cpp | 10 ++++- Chapter03/MoveComponent.h | 3 ++ Chapter03/Random.cpp | 51 +++++++++++++++++++++++++ Chapter03/Random.h | 36 ++++++++++++++++++ Chapter03/Ship.cpp | 68 ++++++++++++---------------------- Chapter03/Ship.h | 8 ++-- 21 files changed, 537 insertions(+), 57 deletions(-) create mode 100644 Chapter03/Asteroid.cpp create mode 100644 Chapter03/Asteroid.h create mode 100644 Chapter03/CircleComponent.cpp create mode 100644 Chapter03/CircleComponent.h create mode 100644 Chapter03/InputComponent.cpp create mode 100644 Chapter03/InputComponent.h create mode 100644 Chapter03/Laser.cpp create mode 100644 Chapter03/Laser.h create mode 100644 Chapter03/Random.cpp create mode 100644 Chapter03/Random.h diff --git a/Chapter03/Actor.cpp b/Chapter03/Actor.cpp index 91278a65..4b8eea91 100644 --- a/Chapter03/Actor.cpp +++ b/Chapter03/Actor.cpp @@ -53,6 +53,24 @@ void Actor::UpdateActor(float deltaTime) { } +void Actor::ProcessInput(const uint8_t* keyState) +{ + if (mState == EActive) + { + // First process input for components + for (auto comp : mComponents) + { + comp->ProcessInput(keyState); + } + + ActorInput(keyState); + } +} + +void Actor::ActorInput(const uint8_t* keyState) +{ +} + void Actor::AddComponent(Component* component) { // Find the insertion point in the sorted vector diff --git a/Chapter03/Actor.h b/Chapter03/Actor.h index 91923c25..767d3c1a 100644 --- a/Chapter03/Actor.h +++ b/Chapter03/Actor.h @@ -9,6 +9,8 @@ #pragma once #include #include "Math.h" +#include + class Actor { public: @@ -29,6 +31,11 @@ class Actor // Any actor-specific update code (overridable) virtual void UpdateActor(float deltaTime); + // ProcessInput function called from Game (not overridable) + void ProcessInput(const uint8_t* keyState); + // Any actor-specific input code (overridable) + virtual void ActorInput(const uint8_t* keyState); + // Getters/setters const Vector2& GetPosition() const { return mPosition; } void SetPosition(const Vector2& pos) { mPosition = pos; } diff --git a/Chapter03/Asteroid.cpp b/Chapter03/Asteroid.cpp new file mode 100644 index 00000000..c1dddb9e --- /dev/null +++ b/Chapter03/Asteroid.cpp @@ -0,0 +1,46 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "Asteroid.h" +#include "SpriteComponent.h" +#include "MoveComponent.h" +#include "Game.h" +#include "Random.h" +#include "CircleComponent.h" + +Asteroid::Asteroid(Game* game) + :Actor(game) + ,mCircle(nullptr) +{ + // Initialize to random position/orientation + Vector2 randPos = Random::GetVector(Vector2::Zero, + Vector2(1024.0f, 768.0f)); + SetPosition(randPos); + + SetRotation(Random::GetFloatRange(0.0f, Math::TwoPi)); + + // Create a sprite component + SpriteComponent* sc = new SpriteComponent(this); + sc->SetTexture(game->GetTexture("Assets/Asteroid.png")); + + // Create a move component, and set a forward speed + MoveComponent* mc = new MoveComponent(this); + mc->SetForwardSpeed(150.0f); + + // Create a circle component (for collision) + mCircle = new CircleComponent(this); + mCircle->SetRadius(40.0f); + + // Add to mAsteroids in game + game->AddAsteroid(this); +} + +Asteroid::~Asteroid() +{ + GetGame()->RemoveAsteroid(this); +} diff --git a/Chapter03/Asteroid.h b/Chapter03/Asteroid.h new file mode 100644 index 00000000..45305770 --- /dev/null +++ b/Chapter03/Asteroid.h @@ -0,0 +1,20 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "Actor.h" +class Asteroid : public Actor +{ +public: + Asteroid(class Game* game); + ~Asteroid(); + + class CircleComponent* GetCircle() { return mCircle; } +private: + class CircleComponent* mCircle; +}; diff --git a/Chapter03/CircleComponent.cpp b/Chapter03/CircleComponent.cpp new file mode 100644 index 00000000..d41aab2c --- /dev/null +++ b/Chapter03/CircleComponent.cpp @@ -0,0 +1,40 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "CircleComponent.h" +#include "Actor.h" + +CircleComponent::CircleComponent(class Actor* owner) +:Component(owner) +,mRadius(0.0f) +{ + +} + +const Vector2& CircleComponent::GetCenter() const +{ + return mOwner->GetPosition(); +} + +float CircleComponent::GetRadius() const +{ + return mOwner->GetScale() * mRadius; +} + +bool Intersect(const CircleComponent& a, const CircleComponent& b) +{ + // Calculate distance squared + Vector2 diff = a.GetCenter() - b.GetCenter(); + float distSq = diff.LengthSq(); + + // Calculate sum of radii squared + float radiiSq = a.GetRadius() + b.GetRadius(); + radiiSq *= radiiSq; + + return distSq <= radiiSq; +} diff --git a/Chapter03/CircleComponent.h b/Chapter03/CircleComponent.h new file mode 100644 index 00000000..4eecb2a4 --- /dev/null +++ b/Chapter03/CircleComponent.h @@ -0,0 +1,26 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "Component.h" +#include "Math.h" + +class CircleComponent : public Component +{ +public: + CircleComponent(class Actor* owner); + + void SetRadius(float radius) { mRadius = radius; } + float GetRadius() const; + + const Vector2& GetCenter() const; +private: + float mRadius; +}; + +bool Intersect(const CircleComponent& a, const CircleComponent& b); diff --git a/Chapter03/Component.h b/Chapter03/Component.h index 19e21f02..fb41dd75 100644 --- a/Chapter03/Component.h +++ b/Chapter03/Component.h @@ -7,6 +7,8 @@ // ---------------------------------------------------------------- #pragma once +#include + class Component { public: @@ -17,6 +19,8 @@ class Component virtual ~Component(); // Update this component by delta time virtual void Update(float deltaTime); + // Process input for this component + virtual void ProcessInput(const uint8_t* keyState) {} int GetUpdateOrder() const { return mUpdateOrder; } protected: diff --git a/Chapter03/Game.cpp b/Chapter03/Game.cpp index 3762fb0f..ed758b2a 100644 --- a/Chapter03/Game.cpp +++ b/Chapter03/Game.cpp @@ -12,6 +12,8 @@ #include "Actor.h" #include "SpriteComponent.h" #include "Ship.h" +#include "Asteroid.h" +#include "Random.h" Game::Game() :mWindow(nullptr) @@ -50,6 +52,8 @@ bool Game::Initialize() return false; } + Random::Init(); + LoadData(); mTicksCount = SDL_GetTicks(); @@ -80,14 +84,18 @@ void Game::ProcessInput() } } - const Uint8* state = SDL_GetKeyboardState(NULL); - if (state[SDL_SCANCODE_ESCAPE]) + const Uint8* keyState = SDL_GetKeyboardState(NULL); + if (keyState[SDL_SCANCODE_ESCAPE]) { mIsRunning = false; } - // Process ship input - mShip->ProcessKeyboard(state); + mUpdatingActors = true; + for (auto actor : mActors) + { + actor->ProcessInput(keyState); + } + mUpdatingActors = false; } void Game::UpdateGame() @@ -138,7 +146,7 @@ void Game::UpdateGame() void Game::GenerateOutput() { - SDL_SetRenderDrawColor(mRenderer, 0, 0, 0, 255); + SDL_SetRenderDrawColor(mRenderer, 220, 220, 220, 255); SDL_RenderClear(mRenderer); // Draw all sprite components @@ -154,7 +162,15 @@ void Game::LoadData() { // Create player's ship mShip = new Ship(this); - mShip->SetPosition(Vector2(100.0f, 384.0f)); + mShip->SetPosition(Vector2(512.0f, 384.0f)); + mShip->SetRotation(Math::PiOver2); + + // Create asteroids + const int numAsteroids = 20; + for (int i = 0; i < numAsteroids; i++) + { + new Asteroid(this); + } } void Game::UnloadData() @@ -207,6 +223,21 @@ SDL_Texture* Game::GetTexture(const std::string& fileName) return tex; } +void Game::AddAsteroid(Asteroid* ast) +{ + mAsteroids.emplace_back(ast); +} + +void Game::RemoveAsteroid(Asteroid* ast) +{ + auto iter = std::find(mAsteroids.begin(), + mAsteroids.end(), ast); + if (iter != mAsteroids.end()) + { + mAsteroids.erase(iter); + } +} + void Game::Shutdown() { UnloadData(); diff --git a/Chapter03/Game.h b/Chapter03/Game.h index 03f0548c..5a7b8261 100644 --- a/Chapter03/Game.h +++ b/Chapter03/Game.h @@ -27,6 +27,11 @@ class Game void RemoveSprite(class SpriteComponent* sprite); SDL_Texture* GetTexture(const std::string& fileName); + + // Game-specific (add/remove asteroid) + void AddAsteroid(class Asteroid* ast); + void RemoveAsteroid(class Asteroid* ast); + std::vector& GetAsteroids() { return mAsteroids; } private: void ProcessInput(); void UpdateGame(); @@ -54,4 +59,5 @@ class Game // Game-specific class Ship* mShip; // Player's ship + std::vector mAsteroids; }; diff --git a/Chapter03/Game.vcxproj b/Chapter03/Game.vcxproj index 1a1c8a47..f88503fe 100644 --- a/Chapter03/Game.vcxproj +++ b/Chapter03/Game.vcxproj @@ -12,20 +12,30 @@ + + + + + + + + + + diff --git a/Chapter03/Game.vcxproj.filters b/Chapter03/Game.vcxproj.filters index 6505ebef..f6b3a112 100644 --- a/Chapter03/Game.vcxproj.filters +++ b/Chapter03/Game.vcxproj.filters @@ -31,6 +31,21 @@ Source Files + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + @@ -54,5 +69,20 @@ Source Files + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + \ No newline at end of file diff --git a/Chapter03/InputComponent.cpp b/Chapter03/InputComponent.cpp new file mode 100644 index 00000000..148ffc95 --- /dev/null +++ b/Chapter03/InputComponent.cpp @@ -0,0 +1,47 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "InputComponent.h" +#include "Actor.h" + +InputComponent::InputComponent(class Actor* owner) +:MoveComponent(owner) +,mForwardKey(0) +,mBackKey(0) +,mClockwiseKey(0) +,mCounterClockwiseKey(0) +{ + +} + +void InputComponent::ProcessInput(const uint8_t* keyState) +{ + // Calculate forward speed for MoveComponent + float forwardSpeed = 0.0f; + if (keyState[mForwardKey]) + { + forwardSpeed += mMaxForwardSpeed; + } + if (keyState[mBackKey]) + { + forwardSpeed -= mMaxForwardSpeed; + } + SetForwardSpeed(forwardSpeed); + + // Calculate angular speed for MoveComponent + float angularSpeed = 0.0f; + if (keyState[mClockwiseKey]) + { + angularSpeed += mMaxAngularSpeed; + } + if (keyState[mCounterClockwiseKey]) + { + angularSpeed -= mMaxAngularSpeed; + } + SetAngularSpeed(angularSpeed); +} diff --git a/Chapter03/InputComponent.h b/Chapter03/InputComponent.h new file mode 100644 index 00000000..57b32ccb --- /dev/null +++ b/Chapter03/InputComponent.h @@ -0,0 +1,45 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "MoveComponent.h" +#include + +class InputComponent : public MoveComponent +{ +public: + // Lower update order to update first + InputComponent(class Actor* owner); + + void ProcessInput(const uint8_t* keyState) override; + + // Getters/setters for private variables + float GetMaxForward() const { return mMaxForwardSpeed; } + float GetMaxAngular() const { return mMaxAngularSpeed; } + int GetForwardKey() const { return mForwardKey; } + int GetBackKey() const { return mBackKey; } + int GetClockwiseKey() const { return mClockwiseKey; } + int GetCounterClockwiseKey() const { return mCounterClockwiseKey; } + + void SetMaxForwardSpeed(float speed) { mMaxForwardSpeed = speed; } + void SetMaxAngularSpeed(float speed) { mMaxAngularSpeed = speed; } + void SetForwardKey(int key) { mForwardKey = key; } + void SetBackKey(int key) { mBackKey = key; } + void SetClockwiseKey(int key) { mClockwiseKey = key; } + void SetCounterClockwiseKey(int key) { mCounterClockwiseKey = key; } +private: + // The maximum forward/angular speeds + float mMaxForwardSpeed; + float mMaxAngularSpeed; + // Keys for forward/back movement + int mForwardKey; + int mBackKey; + // Keys for angular movement + int mClockwiseKey; + int mCounterClockwiseKey; +}; diff --git a/Chapter03/Laser.cpp b/Chapter03/Laser.cpp new file mode 100644 index 00000000..a03c1981 --- /dev/null +++ b/Chapter03/Laser.cpp @@ -0,0 +1,56 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "Laser.h" +#include "SpriteComponent.h" +#include "MoveComponent.h" +#include "Game.h" +#include "CircleComponent.h" +#include "Asteroid.h" + +Laser::Laser(Game* game) + :Actor(game) + ,mDeathTimer(1.0f) +{ + // Create a sprite component + SpriteComponent* sc = new SpriteComponent(this); + sc->SetTexture(game->GetTexture("Assets/Laser.png")); + + // Create a move component, and set a forward speed + MoveComponent* mc = new MoveComponent(this); + mc->SetForwardSpeed(800.0f); + + // Create a circle component (for collision) + mCircle = new CircleComponent(this); + mCircle->SetRadius(11.0f); +} + +void Laser::UpdateActor(float deltaTime) +{ + // If we run out of time, laser is dead + mDeathTimer -= deltaTime; + if (mDeathTimer <= 0.0f) + { + SetState(EDead); + } + else + { + // Do we intersect with an asteroid? + for (auto ast : GetGame()->GetAsteroids()) + { + if (Intersect(*mCircle, *(ast->GetCircle()))) + { + // The first asteroid we intersect with, + // set ourselves and the asteroid to dead + SetState(EDead); + ast->SetState(EDead); + break; + } + } + } +} diff --git a/Chapter03/Laser.h b/Chapter03/Laser.h new file mode 100644 index 00000000..f1afd638 --- /dev/null +++ b/Chapter03/Laser.h @@ -0,0 +1,20 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "Actor.h" +class Laser : public Actor +{ +public: + Laser(class Game* game); + + void UpdateActor(float deltaTime) override; +private: + class CircleComponent* mCircle; + float mDeathTimer; +}; diff --git a/Chapter03/MoveComponent.cpp b/Chapter03/MoveComponent.cpp index cdf1fdf9..2f0b8a6a 100644 --- a/Chapter03/MoveComponent.cpp +++ b/Chapter03/MoveComponent.cpp @@ -29,7 +29,15 @@ void MoveComponent::Update(float deltaTime) if (!Math::NearZero(mForwardSpeed)) { Vector2 pos = mOwner->GetPosition(); - pos += mOwner->GetForward() * mForwardSpeed * deltaTime; + pos += mOwner->GetForward() * mForwardSpeed * deltaTime; + + // (Screen wrapping code only for asteroids) + if (pos.x < 0.0f) { pos.x = 1022.0f; } + else if (pos.x > 1024.0f) { pos.x = 2.0f; } + + if (pos.y < 0.0f) { pos.y = 766.0f; } + else if (pos.y > 768.0f) { pos.y = 2.0f; } + mOwner->SetPosition(pos); } } diff --git a/Chapter03/MoveComponent.h b/Chapter03/MoveComponent.h index def7d389..482c1e66 100644 --- a/Chapter03/MoveComponent.h +++ b/Chapter03/MoveComponent.h @@ -14,6 +14,7 @@ class MoveComponent : public Component public: // Lower update order to update first MoveComponent(class Actor* owner, int updateOrder = 10); + void Update(float deltaTime) override; float GetAngularSpeed() const { return mAngularSpeed; } @@ -21,6 +22,8 @@ class MoveComponent : public Component void SetAngularSpeed(float speed) { mAngularSpeed = speed; } void SetForwardSpeed(float speed) { mForwardSpeed = speed; } private: + // Controls rotation (radians/second) float mAngularSpeed; + // Controls forward movement (units/second) float mForwardSpeed; }; diff --git a/Chapter03/Random.cpp b/Chapter03/Random.cpp new file mode 100644 index 00000000..05a3a32a --- /dev/null +++ b/Chapter03/Random.cpp @@ -0,0 +1,51 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "Random.h" + +void Random::Init() +{ + std::random_device rd; + Random::Seed(rd()); +} + +void Random::Seed(unsigned int seed) +{ + sGenerator.seed(seed); +} + +float Random::GetFloat() +{ + return GetFloatRange(0.0f, 1.0f); +} + +float Random::GetFloatRange(float min, float max) +{ + std::uniform_real_distribution dist(min, max); + return dist(sGenerator); +} + +int Random::GetIntRange(int min, int max) +{ + std::uniform_int_distribution dist(min, max); + return dist(sGenerator); +} + +Vector2 Random::GetVector(const Vector2& min, const Vector2& max) +{ + Vector2 r = Vector2(GetFloat(), GetFloat()); + return min + (max - min) * r; +} + +Vector3 Random::GetVector(const Vector3& min, const Vector3& max) +{ + Vector3 r = Vector3(GetFloat(), GetFloat(), GetFloat()); + return min + (max - min) * r; +} + +std::mt19937 Random::sGenerator; diff --git a/Chapter03/Random.h b/Chapter03/Random.h new file mode 100644 index 00000000..3ae92fe5 --- /dev/null +++ b/Chapter03/Random.h @@ -0,0 +1,36 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once +#include +#include "Math.h" + +class Random +{ +public: + static void Init(); + + // Seed the generator with the specified int + // NOTE: You should generally not need to manually use this + static void Seed(unsigned int seed); + + // Get a float between 0.0f and 1.0f + static float GetFloat(); + + // Get a float from the specified range + static float GetFloatRange(float min, float max); + + // Get an int from the specified range + static int GetIntRange(int min, int max); + + // Get a random vector given the min/max bounds + static Vector2 GetVector(const Vector2& min, const Vector2& max); + static Vector3 GetVector(const Vector3& min, const Vector3& max); +private: + static std::mt19937 sGenerator; +}; diff --git a/Chapter03/Ship.cpp b/Chapter03/Ship.cpp index 85227a27..3429b911 100644 --- a/Chapter03/Ship.cpp +++ b/Chapter03/Ship.cpp @@ -8,65 +8,43 @@ #include "Ship.h" #include "SpriteComponent.h" +#include "InputComponent.h" #include "Game.h" +#include "Laser.h" Ship::Ship(Game* game) :Actor(game) - ,mRightSpeed(0.0f) - ,mDownSpeed(0.0f) + ,mLaserCooldown(0.0f) { - // Create an animated sprite component + // Create a sprite component SpriteComponent* sc = new SpriteComponent(this); sc->SetTexture(game->GetTexture("Assets/Ship.png")); + + // Create an input component and set keys/speed + InputComponent* ic = new InputComponent(this); + ic->SetForwardKey(SDL_SCANCODE_W); + ic->SetBackKey(SDL_SCANCODE_S); + ic->SetClockwiseKey(SDL_SCANCODE_A); + ic->SetCounterClockwiseKey(SDL_SCANCODE_D); + ic->SetMaxForwardSpeed(300.0f); + ic->SetMaxAngularSpeed(Math::TwoPi); } void Ship::UpdateActor(float deltaTime) { - Actor::UpdateActor(deltaTime); - // Update position based on speeds and delta time - Vector2 pos = GetPosition(); - pos.x += mRightSpeed * deltaTime; - pos.y += mDownSpeed * deltaTime; - // Restrict position to left half of screen - if (pos.x < 25.0f) - { - pos.x = 25.0f; - } - else if (pos.x > 500.0f) - { - pos.x = 500.0f; - } - if (pos.y < 25.0f) - { - pos.y = 25.0f; - } - else if (pos.y > 743.0f) - { - pos.y = 743.0f; - } - SetPosition(pos); + mLaserCooldown -= deltaTime; } -void Ship::ProcessKeyboard(const uint8_t* state) +void Ship::ActorInput(const uint8_t* keyState) { - mRightSpeed = 0.0f; - mDownSpeed = 0.0f; - // right/left - if (state[SDL_SCANCODE_D]) - { - mRightSpeed += 250.0f; - } - if (state[SDL_SCANCODE_A]) - { - mRightSpeed -= 250.0f; - } - // up/down - if (state[SDL_SCANCODE_S]) - { - mDownSpeed += 300.0f; - } - if (state[SDL_SCANCODE_W]) + if (keyState[SDL_SCANCODE_SPACE] && mLaserCooldown <= 0.0f) { - mDownSpeed -= 300.0f; + // Create a laser and set it's position/rotation to mine + Laser* laser = new Laser(GetGame()); + laser->SetPosition(GetPosition()); + laser->SetRotation(GetRotation()); + + // Reset laser cooldown (half second) + mLaserCooldown = 0.5f; } } diff --git a/Chapter03/Ship.h b/Chapter03/Ship.h index 8a34e962..808639ff 100644 --- a/Chapter03/Ship.h +++ b/Chapter03/Ship.h @@ -12,11 +12,9 @@ class Ship : public Actor { public: Ship(class Game* game); + void UpdateActor(float deltaTime) override; - void ProcessKeyboard(const uint8_t* state); - float GetRightSpeed() const { return mRightSpeed; } - float GetDownSpeed() const { return mDownSpeed; } + void ActorInput(const uint8_t* keyState) override; private: - float mRightSpeed; - float mDownSpeed; + float mLaserCooldown; }; \ No newline at end of file From 481d2c71206eca66ce4b59cb74368c4446b646d6 Mon Sep 17 00:00:00 2001 From: Sanjay Madhav Date: Wed, 22 Nov 2017 00:42:16 -0800 Subject: [PATCH 11/40] Chapter 3 done (windows) --- Chapter03/Ship.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Chapter03/Ship.cpp b/Chapter03/Ship.cpp index 3429b911..e5b236db 100644 --- a/Chapter03/Ship.cpp +++ b/Chapter03/Ship.cpp @@ -17,7 +17,7 @@ Ship::Ship(Game* game) ,mLaserCooldown(0.0f) { // Create a sprite component - SpriteComponent* sc = new SpriteComponent(this); + SpriteComponent* sc = new SpriteComponent(this, 150); sc->SetTexture(game->GetTexture("Assets/Ship.png")); // Create an input component and set keys/speed @@ -39,7 +39,7 @@ void Ship::ActorInput(const uint8_t* keyState) { if (keyState[SDL_SCANCODE_SPACE] && mLaserCooldown <= 0.0f) { - // Create a laser and set it's position/rotation to mine + // Create a laser and set its position/rotation to mine Laser* laser = new Laser(GetGame()); laser->SetPosition(GetPosition()); laser->SetRotation(GetRotation()); From 2d71b1b38e17e2ce1d840f9ca7d707f3d1f2f7c8 Mon Sep 17 00:00:00 2001 From: Sanjay Madhav Date: Wed, 22 Nov 2017 00:43:58 -0800 Subject: [PATCH 12/40] Chapter 4 (first push) --- Chapter04/Actor.cpp | 71 ++ Chapter04/Actor.h | 62 + Chapter04/Assets/Airplane.png | Bin 0 -> 1642 bytes Chapter04/Assets/Base.png | Bin 0 -> 2232 bytes Chapter04/Assets/LICENSE.txt | 3 + Chapter04/Assets/Missile.png | Bin 0 -> 869 bytes Chapter04/Assets/Projectile.png | Bin 0 -> 707 bytes Chapter04/Assets/TileBrown.png | Bin 0 -> 1491 bytes Chapter04/Assets/TileBrownSelected.png | Bin 0 -> 1338 bytes Chapter04/Assets/TileGreen.png | Bin 0 -> 1742 bytes Chapter04/Assets/TileGreenSelected.png | Bin 0 -> 1492 bytes Chapter04/Assets/TileGrey.png | Bin 0 -> 1290 bytes Chapter04/Assets/TileGreySelected.png | Bin 0 -> 1137 bytes Chapter04/Assets/TileTan.png | Bin 0 -> 1431 bytes Chapter04/Assets/TileTanSelected.png | Bin 0 -> 1173 bytes Chapter04/Assets/Tower.png | Bin 0 -> 775 bytes Chapter04/Bullet.cpp | 56 + Chapter04/Bullet.h | 20 + Chapter04/Chapter04-windows.sln | 22 + .../Chapter5-mac.xcodeproj/project.pbxproj | 380 ++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/xcschemes/Game-mac.xcscheme | 92 ++ Chapter04/CircleComponent.cpp | 27 + Chapter04/CircleComponent.h | 24 + Chapter04/CollisionComponent.cpp | 20 + Chapter04/CollisionComponent.h | 17 + Chapter04/Component.cpp | 27 + Chapter04/Component.h | 27 + Chapter04/Enemy.cpp | 56 + Chapter04/Enemy.h | 21 + Chapter04/Game.cpp | 288 +++++ Chapter04/Game.h | 61 + Chapter04/Game.vcxproj | 135 +++ Chapter04/Game.vcxproj.filters | 100 ++ Chapter04/Grid.cpp | 248 ++++ Chapter04/Grid.h | 35 + Chapter04/Main.cpp | 543 +++++++++ Chapter04/Math.cpp | 240 ++++ Chapter04/Math.h | 1033 +++++++++++++++++ Chapter04/MoveComponent.cpp | 35 + Chapter04/MoveComponent.h | 26 + Chapter04/NavComponent.cpp | 49 + Chapter04/NavComponent.h | 23 + Chapter04/SpriteComponent.cpp | 56 + Chapter04/SpriteComponent.h | 30 + Chapter04/Tile.cpp | 66 ++ Chapter04/Tile.h | 44 + Chapter04/Tower.cpp | 53 + Chapter04/Tower.h | 22 + 49 files changed, 4019 insertions(+) create mode 100644 Chapter04/Actor.cpp create mode 100644 Chapter04/Actor.h create mode 100644 Chapter04/Assets/Airplane.png create mode 100644 Chapter04/Assets/Base.png create mode 100644 Chapter04/Assets/LICENSE.txt create mode 100644 Chapter04/Assets/Missile.png create mode 100644 Chapter04/Assets/Projectile.png create mode 100644 Chapter04/Assets/TileBrown.png create mode 100644 Chapter04/Assets/TileBrownSelected.png create mode 100644 Chapter04/Assets/TileGreen.png create mode 100644 Chapter04/Assets/TileGreenSelected.png create mode 100644 Chapter04/Assets/TileGrey.png create mode 100644 Chapter04/Assets/TileGreySelected.png create mode 100644 Chapter04/Assets/TileTan.png create mode 100644 Chapter04/Assets/TileTanSelected.png create mode 100644 Chapter04/Assets/Tower.png create mode 100644 Chapter04/Bullet.cpp create mode 100644 Chapter04/Bullet.h create mode 100644 Chapter04/Chapter04-windows.sln create mode 100644 Chapter04/Chapter5-mac.xcodeproj/project.pbxproj create mode 100644 Chapter04/Chapter5-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 Chapter04/Chapter5-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme create mode 100644 Chapter04/CircleComponent.cpp create mode 100644 Chapter04/CircleComponent.h create mode 100644 Chapter04/CollisionComponent.cpp create mode 100644 Chapter04/CollisionComponent.h create mode 100644 Chapter04/Component.cpp create mode 100644 Chapter04/Component.h create mode 100644 Chapter04/Enemy.cpp create mode 100644 Chapter04/Enemy.h create mode 100644 Chapter04/Game.cpp create mode 100644 Chapter04/Game.h create mode 100644 Chapter04/Game.vcxproj create mode 100644 Chapter04/Game.vcxproj.filters create mode 100644 Chapter04/Grid.cpp create mode 100644 Chapter04/Grid.h create mode 100644 Chapter04/Main.cpp create mode 100644 Chapter04/Math.cpp create mode 100644 Chapter04/Math.h create mode 100644 Chapter04/MoveComponent.cpp create mode 100644 Chapter04/MoveComponent.h create mode 100644 Chapter04/NavComponent.cpp create mode 100644 Chapter04/NavComponent.h create mode 100644 Chapter04/SpriteComponent.cpp create mode 100644 Chapter04/SpriteComponent.h create mode 100644 Chapter04/Tile.cpp create mode 100644 Chapter04/Tile.h create mode 100644 Chapter04/Tower.cpp create mode 100644 Chapter04/Tower.h diff --git a/Chapter04/Actor.cpp b/Chapter04/Actor.cpp new file mode 100644 index 00000000..28b8dbbf --- /dev/null +++ b/Chapter04/Actor.cpp @@ -0,0 +1,71 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "Actor.h" +#include "Game.h" +#include "Component.h" +#include + +Actor::Actor(Game* game) + :mState(EActive) + , mPosition(Vector2::Zero) + , mScale(1.0f) + , mRotation(0.0f) + , mGame(game) +{ + mGame->AddActor(this); +} + +Actor::~Actor() +{ + mGame->RemoveActor(this); + // Need to delete components + // Because ~Component calls RemoveComponent, need a different style loop + while (!mComponents.empty()) + { + delete mComponents.back(); + } +} + +void Actor::Update(float deltaTime) +{ + if (mState == EActive) + { + UpdateComponents(deltaTime); + UpdateActor(deltaTime); + } +} + +void Actor::UpdateComponents(float deltaTime) +{ + for (auto comp : mComponents) + { + comp->Update(deltaTime); + } +} + +void Actor::UpdateActor(float deltaTime) +{ +} + +void Actor::AddComponent(Component* component) +{ + mComponents.emplace_back(component); + std::sort(mComponents.begin(), mComponents.end(), [](Component* a, Component* b) { + return a->GetUpdateOrder() < b->GetUpdateOrder(); + }); +} + +void Actor::RemoveComponent(Component* component) +{ + auto iter = std::find(mComponents.begin(), mComponents.end(), component); + if (iter != mComponents.end()) + { + mComponents.erase(iter); + } +} diff --git a/Chapter04/Actor.h b/Chapter04/Actor.h new file mode 100644 index 00000000..76fd53c6 --- /dev/null +++ b/Chapter04/Actor.h @@ -0,0 +1,62 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#pragma once +#include +#include "Math.h" +class Actor +{ +public: + enum State + { + EActive, + EPaused, + EDead + }; + + Actor(class Game* game); + virtual ~Actor(); + + // Update function called from Game (not overridable) + void Update(float deltaTime); + // Updates all the components attached to the actor (not overridable) + void UpdateComponents(float deltaTime); + // Any actor-specific update code (overridable) + virtual void UpdateActor(float deltaTime); + + // Getters/setters + const Vector2& GetPosition() const { return mPosition; } + void SetPosition(const Vector2& pos) { mPosition = pos; } + float GetScale() const { return mScale; } + void SetScale(float scale) { mScale = scale; } + float GetRotation() const { return mRotation; } + void SetRotation(float rotation) { mRotation = rotation; } + + Vector2 GetForward() const { return Vector2(Math::Cos(mRotation), -Math::Sin(mRotation)); } + + State GetState() const { return mState; } + void SetState(State state) { mState = state; } + + class Game* GetGame() { return mGame; } + + + // Add/remove components + void AddComponent(class Component* component); + void RemoveComponent(class Component* component); +private: + // Actor's state + State mState; + + // Transform + Vector2 mPosition; + float mScale; + float mRotation; + + std::vector mComponents; + class Game* mGame; +}; diff --git a/Chapter04/Assets/Airplane.png b/Chapter04/Assets/Airplane.png new file mode 100644 index 0000000000000000000000000000000000000000..df752ef1ee4edb82ba8bd5f3e9564f5ec1427adc GIT binary patch literal 1642 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 literal 0 HcmV?d00001 diff --git a/Chapter04/Assets/TileBrown.png b/Chapter04/Assets/TileBrown.png new file mode 100644 index 0000000000000000000000000000000000000000..285f393f997eb1eca76daa45afc2eeb374f5cd99 GIT binary patch literal 1491 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 literal 0 HcmV?d00001 diff --git a/Chapter04/Assets/TileGreen.png b/Chapter04/Assets/TileGreen.png new file mode 100644 index 0000000000000000000000000000000000000000..b890b603898434a59647f53371a941fac3cfe923 GIT binary patch literal 1742 zcmV;<1~K`GP)00006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru;Rg#B3JUjW^c34Sy0CY)qL2o!3KWkLTL8e_3*b~p2Ft!weM&*O8pwjS);mRCL;Ax7Q5Od9NJ?ae zs>ga}mr(VnEiKE0!5vS32Yb&9aRGC2&EUmh^PgVdo3g`6+8h|I3P42QONbQ*O#l#x zP#BEwU{j#+8iS(KfA+{pjs+l*oTL4kZH~*0CjhEv4V~4$oR43{$AEHD{Bpcmxn^j$!2pTh}0Ce_`~2jBl63f zOG(3E)fxn&U(~9#ydhZssHGaHV)VaP`qc=`wC1o$Uj@+VuRVU>D?Lf0pqxxICmejL zQ(qTOWq3@!p76lnL>x&m(oBqNQElco-#%3S_YVMZtK~^bG#W|Pgz+?f?FoyXXcSUZ zJ9E)JFuqmxY!04NkeBaN_9`*C+qZ)q(2P^8O4)t;Icy|SMTApm(*c^TkwjrIiAU)L zt$>Es8A_$de8SpV2#lW?pl}Mvxf{KiqjNsY? z5#HgIXa~)7k^z8-1AL~WwYa!KBL)DYUw@nfV2FF^$&Il08z+8#Abc2|v@_GkP|HuN zy<)4y0c7xuu>jBO#)N5>nh4%;3b?8mP?hn@e-u#o%l4v?q@jTN8XHHAK8>y?@we`E zx+&!`E_tKA>XVmhiyn3~yMO$ntx7$Gi&}Vj^ayK7F>8N}sDM1%Kl>fb^r#Y5Iu8Wct8i!||m3~bzMbUL=0 zk5t^xH?~ct0N|A{*}TA~1${gpriUrsMeW6iRY~3s-w*)!~l(ACaUMI z3SPx&Pvt+VKRN0!WQHnUdQNKqWb~YpzNe#Rd;2widQ&|PbnkSl?Oai&iN#EX!uevZJ z-=PuZjArkdQ!J880L}e?LPp0aW|Z&@7=pq7WLvXvzSI=!W+35LwZiH<<}*!7Sc`!# zl4I(D0HyWp;YLT+;1rLnC~JHX-igygE@=UvkuhFBBEfOdd9yaN-+BP>8W>{Z8GzrV zUwG_rDL>j>Jp*9l?!RwJN7AOCziHmI5ux^ki)O7VR@WxY_zqHdt@4EYG}{eZF#^qO3Y@AL zhGwnxDc6$f#i>{_PJ>+(Wjp@)&>)X|gO zNgQ)S^@ceJl1&Dw~sFmD|^?4d!dOm;~a(MO=R9nSflaq z$8?+QfcXx@r^ViAR_#^K&CYI}4wWK!SARNYtvvP8R_!P~>x0wsvqO9{iGg=#_b4PT zV=Y-}ud^o4`pV1thsx7g{pT@jFB^qo)%uBb!aG{I=X|Pw2omDB{6U^Oyk@$nKkM7) zn7rya?^1*D-kWNF)y)9yMfVis##3U7*_yjLo?!kIfLuN6gMRE#0gz5%51xIwdU*yw kM>cG4-s`W)A9A_>0M&IHpH4*ZD*ylh07*qoM6N<$f}Al{EdT%j literal 0 HcmV?d00001 diff --git a/Chapter04/Assets/TileGreenSelected.png b/Chapter04/Assets/TileGreenSelected.png new file mode 100644 index 0000000000000000000000000000000000000000..56156bd609219869e223dcdf740c1978697c8889 GIT binary patch literal 1492 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 literal 0 HcmV?d00001 diff --git a/Chapter04/Assets/Tower.png b/Chapter04/Assets/Tower.png new file mode 100644 index 0000000000000000000000000000000000000000..c7c1d179d974e3903ded4e4a0fc22af0740e0476 GIT binary patch literal 775 zcmV+i1Ni)jP)zc)4z)PGc2w3|wB0HhqE2WU9~-Bc_o7f4S4S<+Ry>Mm)nkQ*SO zF1mtU(?!)bQi8yEUKgM$1jn&quqXEW?Lgq+`}pR)X9hqJ1VIo4K@f5Y#eGBdQ{xbf zCV{HkF3!LJO1H=Fzn-UMfE!DEzi~`VO@r@FXTdZ6Fxyq^eG<&00qps?Fu)Bpz`(CRahOi07IgszwC5+<3DPhi zvS{E3%PCr!pjS7L9 zvy02ciJIooEdhw@%+Ncr6L+`C#5%3c~vJt_bb7fyd)}u95o# zJ@Ih$?Z+YstrN1T281TTL`%H=R~f6@;F<})uebW}Hi?fs2i!Kn`*oEG@%Pq%u$o}3 z@BwGz*2!DDC&8OZApXeUu_5sTD18J$5ClOG1VIpz<{u{d22?j{jbZ=*002ovPDHLk FV1ixgS~LIv literal 0 HcmV?d00001 diff --git a/Chapter04/Bullet.cpp b/Chapter04/Bullet.cpp new file mode 100644 index 00000000..8febb479 --- /dev/null +++ b/Chapter04/Bullet.cpp @@ -0,0 +1,56 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "Bullet.h" +#include "SpriteComponent.h" +#include "MoveComponent.h" +#include "CircleComponent.h" +#include "Game.h" +#include "Enemy.h" + +Bullet::Bullet(class Game* game) +:Actor(game) +{ + SpriteComponent* sc = new SpriteComponent(this); + sc->SetTexture(game->GetTexture("Assets/Projectile.png")); + + MoveComponent* mc = new MoveComponent(this); + mc->SetForwardSpeed(400.0f); + + mCircle = new CircleComponent(this); + mCircle->SetRadius(5.0f); + + mLiveTime = 1.0f; +} + +void Bullet::UpdateActor(float deltaTime) +{ + Actor::UpdateActor(deltaTime); + + // Check for collision vs enemies + for (Enemy* e : GetGame()->GetEnemies()) + { + Vector2 diff = e->GetCircle()->GetCenter() - mCircle->GetCenter(); + float rad = e->GetCircle()->GetRadius() + mCircle->GetRadius(); + rad *= rad; + if (diff.LengthSq() <= rad) + { + // We both die on collision + e->SetState(EDead); + SetState(EDead); + break; + } + } + + mLiveTime -= deltaTime; + if (mLiveTime <= 0.0f) + { + // Time limit hit, die + SetState(EDead); + } +} diff --git a/Chapter04/Bullet.h b/Chapter04/Bullet.h new file mode 100644 index 00000000..bccdfbc4 --- /dev/null +++ b/Chapter04/Bullet.h @@ -0,0 +1,20 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "Actor.h" + +class Bullet : public Actor +{ +public: + Bullet(class Game* game); + void UpdateActor(float deltaTime) override; +private: + class CircleComponent* mCircle; + float mLiveTime; +}; diff --git a/Chapter04/Chapter04-windows.sln b/Chapter04/Chapter04-windows.sln new file mode 100644 index 00000000..f560df0f --- /dev/null +++ b/Chapter04/Chapter04-windows.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.26430.12 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Game", "Game.vcxproj", "{BC508D87-495F-4554-932D-DD68388B63CC}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {BC508D87-495F-4554-932D-DD68388B63CC}.Debug|Win32.ActiveCfg = Debug|Win32 + {BC508D87-495F-4554-932D-DD68388B63CC}.Debug|Win32.Build.0 = Debug|Win32 + {BC508D87-495F-4554-932D-DD68388B63CC}.Release|Win32.ActiveCfg = Release|Win32 + {BC508D87-495F-4554-932D-DD68388B63CC}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chapter04/Chapter5-mac.xcodeproj/project.pbxproj b/Chapter04/Chapter5-mac.xcodeproj/project.pbxproj new file mode 100644 index 00000000..7c2d9853 --- /dev/null +++ b/Chapter04/Chapter5-mac.xcodeproj/project.pbxproj @@ -0,0 +1,380 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 9203E9F01F0DD69900F9FFC2 /* Tower.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9203E9EE1F0DD69900F9FFC2 /* Tower.cpp */; }; + 9203E9F31F0DE24000F9FFC2 /* Enemy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9203E9F11F0DE24000F9FFC2 /* Enemy.cpp */; }; + 9203E9F61F0DF13600F9FFC2 /* NavComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9203E9F41F0DF13600F9FFC2 /* NavComponent.cpp */; }; + 9203E9F91F0F12FE00F9FFC2 /* Bullet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9203E9F71F0F12FE00F9FFC2 /* Bullet.cpp */; }; + 9223C4781F009428009A94D7 /* Game.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4671F009428009A94D7 /* Game.cpp */; }; + 9223C4791F009428009A94D7 /* Actor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4681F009428009A94D7 /* Actor.cpp */; }; + 9223C47C1F009428009A94D7 /* Component.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C46E1F009428009A94D7 /* Component.cpp */; }; + 9223C47D1F009428009A94D7 /* Main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4711F009428009A94D7 /* Main.cpp */; }; + 9223C47E1F009428009A94D7 /* Math.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4721F009428009A94D7 /* Math.cpp */; }; + 9223C4801F009428009A94D7 /* SpriteComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4761F009428009A94D7 /* SpriteComponent.cpp */; }; + 9223C48B1F0CA3CE009A94D7 /* MoveComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C48A1F0CA3CE009A94D7 /* MoveComponent.cpp */; }; + 9223C48F1F0CA67A009A94D7 /* Tile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C48D1F0CA67A009A94D7 /* Tile.cpp */; }; + 9223C4941F0CA766009A94D7 /* CollisionComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4901F0CA766009A94D7 /* CollisionComponent.cpp */; }; + 9223C4951F0CA766009A94D7 /* CircleComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4911F0CA766009A94D7 /* CircleComponent.cpp */; }; + 9223C4981F0DBD69009A94D7 /* Grid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4961F0DBD69009A94D7 /* Grid.cpp */; }; + 92D324FB1B697389005A86C7 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 92D324FA1B697389005A86C7 /* CoreFoundation.framework */; }; + 92E46E941B6353E50035CD21 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 92E46E931B6353E50035CD21 /* OpenGL.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 9203E9EE1F0DD69900F9FFC2 /* Tower.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Tower.cpp; sourceTree = ""; }; + 9203E9EF1F0DD69900F9FFC2 /* Tower.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Tower.h; sourceTree = ""; }; + 9203E9F11F0DE24000F9FFC2 /* Enemy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Enemy.cpp; sourceTree = ""; }; + 9203E9F21F0DE24000F9FFC2 /* Enemy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Enemy.h; sourceTree = ""; }; + 9203E9F41F0DF13600F9FFC2 /* NavComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NavComponent.cpp; sourceTree = ""; }; + 9203E9F51F0DF13600F9FFC2 /* NavComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NavComponent.h; sourceTree = ""; }; + 9203E9F71F0F12FE00F9FFC2 /* Bullet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Bullet.cpp; sourceTree = ""; }; + 9203E9F81F0F12FE00F9FFC2 /* Bullet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Bullet.h; sourceTree = ""; }; + 9223C4671F009428009A94D7 /* Game.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Game.cpp; sourceTree = ""; }; + 9223C4681F009428009A94D7 /* Actor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Actor.cpp; sourceTree = ""; }; + 9223C4691F009428009A94D7 /* Actor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Actor.h; sourceTree = ""; }; + 9223C46E1F009428009A94D7 /* Component.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Component.cpp; sourceTree = ""; }; + 9223C46F1F009428009A94D7 /* Component.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Component.h; sourceTree = ""; }; + 9223C4701F009428009A94D7 /* Game.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Game.h; sourceTree = ""; }; + 9223C4711F009428009A94D7 /* Main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Main.cpp; sourceTree = ""; }; + 9223C4721F009428009A94D7 /* Math.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Math.cpp; sourceTree = ""; }; + 9223C4731F009428009A94D7 /* Math.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Math.h; sourceTree = ""; }; + 9223C4761F009428009A94D7 /* SpriteComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpriteComponent.cpp; sourceTree = ""; }; + 9223C4771F009428009A94D7 /* SpriteComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpriteComponent.h; sourceTree = ""; }; + 9223C48A1F0CA3CE009A94D7 /* MoveComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MoveComponent.cpp; sourceTree = ""; }; + 9223C48C1F0CA3D4009A94D7 /* MoveComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MoveComponent.h; sourceTree = ""; }; + 9223C48D1F0CA67A009A94D7 /* Tile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Tile.cpp; sourceTree = ""; }; + 9223C48E1F0CA67A009A94D7 /* Tile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Tile.h; sourceTree = ""; }; + 9223C4901F0CA766009A94D7 /* CollisionComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CollisionComponent.cpp; sourceTree = ""; }; + 9223C4911F0CA766009A94D7 /* CircleComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CircleComponent.cpp; sourceTree = ""; }; + 9223C4921F0CA766009A94D7 /* CollisionComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CollisionComponent.h; sourceTree = ""; }; + 9223C4931F0CA766009A94D7 /* CircleComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CircleComponent.h; sourceTree = ""; }; + 9223C4961F0DBD69009A94D7 /* Grid.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Grid.cpp; sourceTree = ""; }; + 9223C4971F0DBD69009A94D7 /* Grid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Grid.h; sourceTree = ""; }; + 92D324FA1B697389005A86C7 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; + 92E46DF71B634EA30035CD21 /* Game-mac */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "Game-mac"; sourceTree = BUILT_PRODUCTS_DIR; }; + 92E46E931B6353E50035CD21 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 92E46DF41B634EA30035CD21 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 92D324FB1B697389005A86C7 /* CoreFoundation.framework in Frameworks */, + 92E46E941B6353E50035CD21 /* OpenGL.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 92E46DEE1B634EA30035CD21 = { + isa = PBXGroup; + children = ( + 9223C4681F009428009A94D7 /* Actor.cpp */, + 9223C4691F009428009A94D7 /* Actor.h */, + 9203E9F71F0F12FE00F9FFC2 /* Bullet.cpp */, + 9203E9F81F0F12FE00F9FFC2 /* Bullet.h */, + 9223C46E1F009428009A94D7 /* Component.cpp */, + 9223C46F1F009428009A94D7 /* Component.h */, + 9223C4911F0CA766009A94D7 /* CircleComponent.cpp */, + 9223C4931F0CA766009A94D7 /* CircleComponent.h */, + 9223C4901F0CA766009A94D7 /* CollisionComponent.cpp */, + 9223C4921F0CA766009A94D7 /* CollisionComponent.h */, + 9203E9F11F0DE24000F9FFC2 /* Enemy.cpp */, + 9203E9F21F0DE24000F9FFC2 /* Enemy.h */, + 9223C4671F009428009A94D7 /* Game.cpp */, + 9223C4701F009428009A94D7 /* Game.h */, + 9223C4961F0DBD69009A94D7 /* Grid.cpp */, + 9223C4971F0DBD69009A94D7 /* Grid.h */, + 9223C4711F009428009A94D7 /* Main.cpp */, + 9223C4721F009428009A94D7 /* Math.cpp */, + 9223C4731F009428009A94D7 /* Math.h */, + 9223C48A1F0CA3CE009A94D7 /* MoveComponent.cpp */, + 9223C48C1F0CA3D4009A94D7 /* MoveComponent.h */, + 9203E9F41F0DF13600F9FFC2 /* NavComponent.cpp */, + 9203E9F51F0DF13600F9FFC2 /* NavComponent.h */, + 9223C4761F009428009A94D7 /* SpriteComponent.cpp */, + 9223C4771F009428009A94D7 /* SpriteComponent.h */, + 9223C48D1F0CA67A009A94D7 /* Tile.cpp */, + 9223C48E1F0CA67A009A94D7 /* Tile.h */, + 9203E9EE1F0DD69900F9FFC2 /* Tower.cpp */, + 9203E9EF1F0DD69900F9FFC2 /* Tower.h */, + 92E46DF81B634EA30035CD21 /* Products */, + 92D324FA1B697389005A86C7 /* CoreFoundation.framework */, + 92E46E931B6353E50035CD21 /* OpenGL.framework */, + ); + sourceTree = ""; + }; + 92E46DF81B634EA30035CD21 /* Products */ = { + isa = PBXGroup; + children = ( + 92E46DF71B634EA30035CD21 /* Game-mac */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 92E46DF61B634EA30035CD21 /* Game-mac */ = { + isa = PBXNativeTarget; + buildConfigurationList = 92E46DFE1B634EA40035CD21 /* Build configuration list for PBXNativeTarget "Game-mac" */; + buildPhases = ( + 92E46DF31B634EA30035CD21 /* Sources */, + 92E46DF41B634EA30035CD21 /* Frameworks */, + 92E46EA11B63615B0035CD21 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Game-mac"; + productName = "Game-mac"; + productReference = 92E46DF71B634EA30035CD21 /* Game-mac */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 92E46DEF1B634EA30035CD21 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0830; + ORGANIZATIONNAME = "Sanjay Madhav"; + TargetAttributes = { + 92E46DF61B634EA30035CD21 = { + CreatedOnToolsVersion = 6.4; + }; + }; + }; + buildConfigurationList = 92E46DF21B634EA30035CD21 /* Build configuration list for PBXProject "Chapter5-mac" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 92E46DEE1B634EA30035CD21; + productRefGroup = 92E46DF81B634EA30035CD21 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 92E46DF61B634EA30035CD21 /* Game-mac */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXShellScriptBuildPhase section */ + 92E46EA11B63615B0035CD21 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if [ -d \"$BUILD_DIR/Debug\" ]; then\n cp \"$SRCROOT\"/../external/GLEW/lib/mac/*.dylib $BUILD_DIR/Debug\n cp \"$SRCROOT\"/../external/SDL/lib/mac/*.dylib $BUILD_DIR/Debug\nfi\n\nif [ -d \"$BUILD_DIR/Release\" ]; then\n cp \"$SRCROOT\"/../external/GLEW/lib/mac/*.dylib $BUILD_DIR/Release\n cp \"$SRCROOT\"/../external/SDL/lib/mac/*.dylib $BUILD_DIR/Release\nfi"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 92E46DF31B634EA30035CD21 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9223C4941F0CA766009A94D7 /* CollisionComponent.cpp in Sources */, + 9223C47D1F009428009A94D7 /* Main.cpp in Sources */, + 9223C47E1F009428009A94D7 /* Math.cpp in Sources */, + 9203E9F01F0DD69900F9FFC2 /* Tower.cpp in Sources */, + 9223C4781F009428009A94D7 /* Game.cpp in Sources */, + 9203E9F61F0DF13600F9FFC2 /* NavComponent.cpp in Sources */, + 9223C4801F009428009A94D7 /* SpriteComponent.cpp in Sources */, + 9223C48B1F0CA3CE009A94D7 /* MoveComponent.cpp in Sources */, + 9203E9F31F0DE24000F9FFC2 /* Enemy.cpp in Sources */, + 9223C4791F009428009A94D7 /* Actor.cpp in Sources */, + 9203E9F91F0F12FE00F9FFC2 /* Bullet.cpp in Sources */, + 9223C4951F0CA766009A94D7 /* CircleComponent.cpp in Sources */, + 9223C47C1F009428009A94D7 /* Component.cpp in Sources */, + 9223C48F1F0CA67A009A94D7 /* Tile.cpp in Sources */, + 9223C4981F0DBD69009A94D7 /* Grid.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 92E46DFC1B634EA40035CD21 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "c++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + 92E46DFD1B634EA40035CD21 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "c++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + }; + name = Release; + }; + 92E46DFF1B634EA40035CD21 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + FRAMEWORK_SEARCH_PATHS = ""; + GCC_ENABLE_CPP_RTTI = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, + "$(SRCROOT)/../external/SDL/include", + "$(SRCROOT)/../external/GLEW/include", + "$(SRCROOT)/../external/SOIL/include", + ); + LIBRARY_SEARCH_PATHS = ( + "$(SRCROOT)/../external/GLEW/lib/mac", + "$(SRCROOT)/../external/SDL/lib/mac", + "$(SRCROOT)/../external/SOIL/lib/mac", + ); + OTHER_LDFLAGS = ( + "-lGLEW.2.1.0", + "-lSDL2-2.0.0", + "-lSDL2_mixer-2.0.0", + "-lSDL2_ttf-2.0.0", + "-lSOIL", + "-lSDL2_image-2.0.0", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 92E46E001B634EA40035CD21 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + FRAMEWORK_SEARCH_PATHS = ""; + GCC_ENABLE_CPP_RTTI = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, + "$(SRCROOT)/../external/SDL/include", + "$(SRCROOT)/../external/GLEW/include", + "$(SRCROOT)/../external/SOIL/include", + ); + LIBRARY_SEARCH_PATHS = ( + "$(SRCROOT)/../external/GLEW/lib/mac", + "$(SRCROOT)/../external/SDL/lib/mac", + "$(SRCROOT)/../external/SOIL/lib/mac", + ); + OTHER_LDFLAGS = ( + "-lGLEW.2.1.0", + "-lSDL2-2.0.0", + "-lSDL2_mixer-2.0.0", + "-lSDL2_ttf-2.0.0", + "-lSOIL", + "-lSDL2_image-2.0.0", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 92E46DF21B634EA30035CD21 /* Build configuration list for PBXProject "Chapter5-mac" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 92E46DFC1B634EA40035CD21 /* Debug */, + 92E46DFD1B634EA40035CD21 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 92E46DFE1B634EA40035CD21 /* Build configuration list for PBXNativeTarget "Game-mac" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 92E46DFF1B634EA40035CD21 /* Debug */, + 92E46E001B634EA40035CD21 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 92E46DEF1B634EA30035CD21 /* Project object */; +} diff --git a/Chapter04/Chapter5-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Chapter04/Chapter5-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..b1898c28 --- /dev/null +++ b/Chapter04/Chapter5-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Chapter04/Chapter5-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme b/Chapter04/Chapter5-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme new file mode 100644 index 00000000..0cdf7699 --- /dev/null +++ b/Chapter04/Chapter5-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter04/CircleComponent.cpp b/Chapter04/CircleComponent.cpp new file mode 100644 index 00000000..996b3ecc --- /dev/null +++ b/Chapter04/CircleComponent.cpp @@ -0,0 +1,27 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "CircleComponent.h" +#include "Actor.h" + +CircleComponent::CircleComponent(class Actor* owner) +:CollisionComponent(owner) +,mRadius(0.0f) +{ + +} + +const Vector2& CircleComponent::GetCenter() const +{ + return mOwner->GetPosition(); +} + +float CircleComponent::GetRadius() const +{ + return mOwner->GetScale() * mRadius; +} diff --git a/Chapter04/CircleComponent.h b/Chapter04/CircleComponent.h new file mode 100644 index 00000000..ed4c99a7 --- /dev/null +++ b/Chapter04/CircleComponent.h @@ -0,0 +1,24 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "CollisionComponent.h" +#include "Math.h" + +class CircleComponent : public CollisionComponent +{ +public: + CircleComponent(class Actor* owner); + + void SetRadius(float radius) { mRadius = radius; } + float GetRadius() const; + + const Vector2& GetCenter() const; +private: + float mRadius; +}; diff --git a/Chapter04/CollisionComponent.cpp b/Chapter04/CollisionComponent.cpp new file mode 100644 index 00000000..79c626fc --- /dev/null +++ b/Chapter04/CollisionComponent.cpp @@ -0,0 +1,20 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "CollisionComponent.h" + +CollisionComponent::CollisionComponent(class Actor* owner,int updateOrder) +:Component(owner, updateOrder) +{ + +} + +CollisionComponent::~CollisionComponent() +{ + +} diff --git a/Chapter04/CollisionComponent.h b/Chapter04/CollisionComponent.h new file mode 100644 index 00000000..4074fa58 --- /dev/null +++ b/Chapter04/CollisionComponent.h @@ -0,0 +1,17 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "Component.h" +class CollisionComponent : public Component +{ +public: + CollisionComponent(class Actor* owner, int updateOrder = 100); + ~CollisionComponent(); +}; + diff --git a/Chapter04/Component.cpp b/Chapter04/Component.cpp new file mode 100644 index 00000000..9b345987 --- /dev/null +++ b/Chapter04/Component.cpp @@ -0,0 +1,27 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "Component.h" +#include "Actor.h" + +Component::Component(Actor* owner, int updateOrder) + :mOwner(owner) + ,mUpdateOrder(updateOrder) +{ + // Add to actor's vector of components + mOwner->AddComponent(this); +} + +Component::~Component() +{ + mOwner->RemoveComponent(this); +} + +void Component::Update(float deltaTime) +{ +} diff --git a/Chapter04/Component.h b/Chapter04/Component.h new file mode 100644 index 00000000..26d6fb87 --- /dev/null +++ b/Chapter04/Component.h @@ -0,0 +1,27 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#pragma once +class Component +{ +public: + // Constructor + // (the lower the update order, the earlier the component updates) + Component(class Actor* owner, int updateOrder = 100); + // Destructor + virtual ~Component(); + // Update this component by delta time + virtual void Update(float deltaTime); + + int GetUpdateOrder() const { return mUpdateOrder; } +protected: + // Owning actor + class Actor* mOwner; + // Update order of component + int mUpdateOrder; +}; diff --git a/Chapter04/Enemy.cpp b/Chapter04/Enemy.cpp new file mode 100644 index 00000000..72400715 --- /dev/null +++ b/Chapter04/Enemy.cpp @@ -0,0 +1,56 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "Enemy.h" +#include "Game.h" +#include "SpriteComponent.h" +#include "NavComponent.h" +#include "Grid.h" +#include "Tile.h" +#include "CircleComponent.h" +#include + +Enemy::Enemy(class Game* game) +:Actor(game) +{ + // Add to enemy vector + game->GetEnemies().emplace_back(this); + + SpriteComponent* sc = new SpriteComponent(this); + sc->SetTexture(game->GetTexture("Assets/Airplane.png")); + // Set position at start tile + SetPosition(GetGame()->GetGrid()->GetStartTile()->GetPosition()); + // Setup a nav component at the start tile + NavComponent* nc = new NavComponent(this); + nc->SetForwardSpeed(150.0f); + nc->StartPath(GetGame()->GetGrid()->GetStartTile()); + // Setup a circle for collision + mCircle = new CircleComponent(this); + mCircle->SetRadius(25.0f); +} + +Enemy::~Enemy() +{ + // Remove from enemy vector + auto iter = std::find(GetGame()->GetEnemies().begin(), + GetGame()->GetEnemies().end(), + this); + GetGame()->GetEnemies().erase(iter); +} + +void Enemy::UpdateActor(float deltaTime) +{ + Actor::UpdateActor(deltaTime); + + // Am I near the end tile? + Vector2 diff = GetPosition() - GetGame()->GetGrid()->GetEndTile()->GetPosition(); + if (Math::NearZero(diff.Length(), 10.0f)) + { + SetState(EDead); + } +} diff --git a/Chapter04/Enemy.h b/Chapter04/Enemy.h new file mode 100644 index 00000000..b8777550 --- /dev/null +++ b/Chapter04/Enemy.h @@ -0,0 +1,21 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "Actor.h" + +class Enemy : public Actor +{ +public: + Enemy(class Game* game); + ~Enemy(); + void UpdateActor(float deltaTime) override; + class CircleComponent* GetCircle() { return mCircle; } +private: + class CircleComponent* mCircle; +}; diff --git a/Chapter04/Game.cpp b/Chapter04/Game.cpp new file mode 100644 index 00000000..accc9a14 --- /dev/null +++ b/Chapter04/Game.cpp @@ -0,0 +1,288 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "Game.h" +#include "SDL/SDL_image.h" +#include +#include "Actor.h" +#include "SpriteComponent.h" +#include "Grid.h" +#include "Enemy.h" + +Game::Game() +:mWindow(nullptr) +,mRenderer(nullptr) +,mIsRunning(true) +{ + +} + +bool Game::Initialize() +{ + if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO) != 0) + { + SDL_Log("Unable to initialize SDL: %s", SDL_GetError()); + return false; + } + + mWindow = SDL_CreateWindow("Game Programming in C++ (Chapter 5)", 100, 100, 1024, 768, 0); + if (!mWindow) + { + SDL_Log("Failed to create window: %s", SDL_GetError()); + return false; + } + + mRenderer = SDL_CreateRenderer(mWindow, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); + if (!mRenderer) + { + SDL_Log("Failed to create renderer: %s", SDL_GetError()); + return false; + } + + if (IMG_Init(IMG_INIT_PNG) == 0) + { + SDL_Log("Unable to initialize SDL_image: %s", SDL_GetError()); + return false; + } + + LoadData(); + + mTicksCount = SDL_GetTicks(); + + return true; +} + +void Game::RunLoop() +{ + while (mIsRunning) + { + ProcessInput(); + UpdateGame(); + GenerateOutput(); + } +} + +void Game::ProcessInput() +{ + SDL_Event event; + while (SDL_PollEvent(&event)) + { + switch (event.type) + { + case SDL_QUIT: + mIsRunning = false; + break; + } + } + + const Uint8* state = SDL_GetKeyboardState(NULL); + if (state[SDL_SCANCODE_ESCAPE]) + { + mIsRunning = false; + } + if (state[SDL_SCANCODE_B]) + { + mGrid->BuildTower(); + } + + // Process mouse + int x, y; + Uint32 buttons = SDL_GetMouseState(&x, &y); + if (SDL_BUTTON(buttons) & SDL_BUTTON_LEFT) + { + mGrid->ProcessClick(x, y); + } +} + +void Game::UpdateGame() +{ + // Compute delta time + // Wait until 16ms has elapsed since last frame + while (!SDL_TICKS_PASSED(SDL_GetTicks(), mTicksCount + 16)) + ; + + float deltaTime = (SDL_GetTicks() - mTicksCount) / 1000.0f; + if (deltaTime > 0.05f) + { + deltaTime = 0.05f; + } + mTicksCount = SDL_GetTicks(); + + // Make copy of actor vector + // (iterate over this in case new actors are created) + std::vector copy = mActors; + + // Update all actors + for (auto actor : copy) + { + actor->Update(deltaTime); + } + + // Add any dead actors to a temp vector + std::vector deadActors; + for (auto actor : mActors) + { + if (actor->GetState() == Actor::EDead) + { + deadActors.emplace_back(actor); + } + } + + // Delete any of the dead actors (which will + // remove them from mActors) + for (auto actor : deadActors) + { + delete actor; + } +} + +void Game::GenerateOutput() +{ + SDL_SetRenderDrawColor(mRenderer, 34, 139, 34, 255); + SDL_RenderClear(mRenderer); + + // Draw all sprite components + for (auto sprite : mSprites) + { + sprite->Draw(mRenderer); + } + + SDL_RenderPresent(mRenderer); +} + +void Game::LoadData() +{ + // Load textures + LoadTexture("Assets/TileBrown.png"); + LoadTexture("Assets/TileGreen.png"); + LoadTexture("Assets/TileGrey.png"); + LoadTexture("Assets/TileTan.png"); + LoadTexture("Assets/TileBrownSelected.png"); + LoadTexture("Assets/TileGreenSelected.png"); + LoadTexture("Assets/TileGreySelected.png"); + LoadTexture("Assets/TileTanSelected.png"); + LoadTexture("Assets/Base.png"); + LoadTexture("Assets/Tower.png"); + LoadTexture("Assets/Airplane.png"); + LoadTexture("Assets/Projectile.png"); + + mGrid = new Grid(this); +} + +void Game::UnloadData() +{ + // Delete actors + // Because ~Actor calls RemoveActor, have to use a different style loop + while (!mActors.empty()) + { + delete mActors.back(); + } + + // Destroy textures + for (auto i : mTextures) + { + SDL_DestroyTexture(i.second); + } + mTextures.clear(); +} + +void Game::LoadTexture(const char* fileName) +{ + // Load from file + SDL_Surface* surf = IMG_Load(fileName); + if (!surf) + { + SDL_Log("Failed to load texture file %s", fileName); + return; + } + + // Create texture from surface + SDL_Texture* text = SDL_CreateTextureFromSurface(mRenderer, surf); + SDL_FreeSurface(surf); + if (!text) + { + SDL_Log("Failed to convert surface to texture for %s", fileName); + return; + } + + mTextures.emplace(fileName, text); +} + +SDL_Texture * Game::GetTexture(const std::string& fileName) +{ + SDL_Texture* tex = nullptr; + auto iter = mTextures.find(fileName); + if (iter != mTextures.end()) + { + tex = iter->second; + } + return tex; +} + +void Game::Shutdown() +{ + UnloadData(); + IMG_Quit(); + SDL_DestroyRenderer(mRenderer); + SDL_DestroyWindow(mWindow); + SDL_Quit(); +} + +void Game::AddActor(Actor* actor) +{ + mActors.emplace_back(actor); +} + +void Game::RemoveActor(Actor* actor) +{ + auto iter = std::find(mActors.begin(), mActors.end(), actor); + if (iter != mActors.end()) + { + // Swap to end of vector and pop off (avoid erase copies) + std::iter_swap(iter, mActors.end() - 1); + mActors.pop_back(); + } +} + +void Game::AddSprite(SpriteComponent* sprite) +{ + mSprites.emplace_back(sprite); + // Resort sprites by draw order + std::sort(mSprites.begin(), mSprites.end(), [](SpriteComponent* a, SpriteComponent* b) { + return a->GetDrawOrder() < b->GetDrawOrder(); + }); +} + +void Game::RemoveSprite(SpriteComponent* sprite) +{ + auto iter = std::find(mSprites.begin(), mSprites.end(), sprite); + mSprites.erase(iter); +} + +Enemy* Game::GetNearestEnemy(const Vector2& pos) +{ + Enemy* best = nullptr; + + if (mEnemies.size() > 0) + { + best = mEnemies[0]; + // Save the distance squared of first enemy, and test if others are closer + float bestDistSq = (pos - mEnemies[0]->GetPosition()).LengthSq(); + for (size_t i = 1; i < mEnemies.size(); i++) + { + float newDistSq = (pos - mEnemies[i]->GetPosition()).LengthSq(); + if (newDistSq < bestDistSq) + { + bestDistSq = newDistSq; + best = mEnemies[i]; + } + } + } + + return best; +} diff --git a/Chapter04/Game.h b/Chapter04/Game.h new file mode 100644 index 00000000..ae5a40d7 --- /dev/null +++ b/Chapter04/Game.h @@ -0,0 +1,61 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "SDL/SDL.h" +#include +#include +#include +#include "Math.h" + +class Game +{ +public: + Game(); + bool Initialize(); + void RunLoop(); + void Shutdown(); + + void AddActor(class Actor* actor); + void RemoveActor(class Actor* actor); + + void AddSprite(class SpriteComponent* sprite); + void RemoveSprite(class SpriteComponent* sprite); + + void LoadTexture(const char* fileName); + SDL_Texture* GetTexture(const std::string& fileName); + + class Grid* GetGrid() { return mGrid; } + std::vector& GetEnemies() { return mEnemies; } + class Enemy* GetNearestEnemy(const Vector2& pos); +private: + void ProcessInput(); + void UpdateGame(); + void GenerateOutput(); + void LoadData(); + void UnloadData(); + + // Map of textures loaded + std::unordered_map mTextures; + + // All the actors in the game + std::vector mActors; + + // All the sprite components drawn + std::vector mSprites; + + SDL_Window* mWindow; + SDL_Renderer* mRenderer; + Uint32 mTicksCount; + bool mIsRunning; + + // Game-specific + std::vector mEnemies; + class Grid* mGrid; + float mNextEnemy; +}; diff --git a/Chapter04/Game.vcxproj b/Chapter04/Game.vcxproj new file mode 100644 index 00000000..0b334498 --- /dev/null +++ b/Chapter04/Game.vcxproj @@ -0,0 +1,135 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {BC508D87-495F-4554-932D-DD68388B63CC} + Win32Proj + Game + + + + Application + true + v141 + Unicode + + + Application + false + v141 + true + Unicode + + + + + + + + + + + + + true + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) + true + ..\external\SDL\include;..\external\GLEW\include;..\external\SOIL\include;%(AdditionalIncludeDirectories) + false + Sync + + + Console + true + ..\external\SDL\lib\win\x86;..\external\GLEW\lib\win\x86;..\external\SOIL\lib\win\x86;%(AdditionalLibraryDirectories) + opengl32.lib;SDL2.lib;SDL2main.lib;SDL2_ttf.lib;SDL2_mixer.lib;SDL2_image.lib;glew32.lib;SOIL.lib;%(AdditionalDependencies) + /NODEFAULTLIB:msvcrt.lib %(AdditionalOptions) + + + xcopy "$(ProjectDir)\..\external\SDL\lib\win\x86\*.dll" "$(OutDir)" /i /s /y +xcopy "$(ProjectDir)\..\external\GLEW\lib\win\x86\*.dll" "$(OutDir)" /i /s /y + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) + true + ..\external\SDL\include;..\external\GLEW\include;..\external\SOIL\include;%(AdditionalIncludeDirectories) + false + Sync + + + Console + true + true + true + ..\external\SDL\lib\win\x86;..\external\GLEW\lib\win\x86;..\external\SOIL\lib\win\x86;%(AdditionalLibraryDirectories) + opengl32.lib;SDL2.lib;SDL2main.lib;SDL2_ttf.lib;SDL2_mixer.lib;SDL2_image.lib;glew32.lib;SOIL.lib;%(AdditionalDependencies) + + + xcopy "$(ProjectDir)\..\external\SDL\lib\win\x86\*.dll" "$(OutDir)" /i /s /y +xcopy "$(ProjectDir)\..\external\GLEW\lib\win\x86\*.dll" "$(OutDir)" /i /s /y + + + + + + \ No newline at end of file diff --git a/Chapter04/Game.vcxproj.filters b/Chapter04/Game.vcxproj.filters new file mode 100644 index 00000000..bb5a9195 --- /dev/null +++ b/Chapter04/Game.vcxproj.filters @@ -0,0 +1,100 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/Chapter04/Grid.cpp b/Chapter04/Grid.cpp new file mode 100644 index 00000000..95b62bbe --- /dev/null +++ b/Chapter04/Grid.cpp @@ -0,0 +1,248 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "Grid.h" +#include "Tile.h" +#include "Tower.h" +#include "Enemy.h" +#include + +Grid::Grid(class Game* game) +:Actor(game) +,mSelectedTile(nullptr) +{ + // 7 rows, 16 columns + mTiles.resize(NumRows); + for (size_t i = 0; i < mTiles.size(); i++) + { + mTiles[i].resize(NumCols); + } + + // Create tiles + for (size_t i = 0; i < NumRows; i++) + { + for (size_t j = 0; j < NumCols; j++) + { + mTiles[i][j] = new Tile(GetGame()); + mTiles[i][j]->SetPosition(Vector2(TileSize/2.0f + j * TileSize, StartY + i * TileSize)); + } + } + + // Set start/end tiles + GetStartTile()->SetTileState(Tile::EStart); + GetEndTile()->SetTileState(Tile::EBase); + + // Set up adjacency lists + for (size_t i = 0; i < NumRows; i++) + { + for (size_t j = 0; j < NumCols; j++) + { + if (i > 0) + { + mTiles[i][j]->mAdjacent.push_back(mTiles[i-1][j]); + } + if (i < NumRows - 1) + { + mTiles[i][j]->mAdjacent.push_back(mTiles[i+1][j]); + } + if (j > 0) + { + mTiles[i][j]->mAdjacent.push_back(mTiles[i][j-1]); + } + if (j < NumCols - 1) + { + mTiles[i][j]->mAdjacent.push_back(mTiles[i][j+1]); + } + } + } + + // Find path (in reverse) + FindPath(GetEndTile(), GetStartTile()); + UpdatePathTiles(GetStartTile()); + + mNextEnemy = EnemyTime; +} + +void Grid::SelectTile(size_t row, size_t col) +{ + // Make sure it's a valid selection + Tile::TileState tstate = mTiles[row][col]->GetTileState(); + if (tstate != Tile::EStart && tstate != Tile::EBase) + { + // Deselect previous one + if (mSelectedTile) + { + mSelectedTile->ToggleSelect(); + } + mSelectedTile = mTiles[row][col]; + mSelectedTile->ToggleSelect(); + } +} + +void Grid::ProcessClick(int x, int y) +{ + y -= static_cast(StartY - TileSize / 2); + if (y >= 0) + { + x /= static_cast(TileSize); + y /= static_cast(TileSize); + if (x >= 0 && x < static_cast(NumCols) && y >= 0 && y < static_cast(NumRows)) + { + SelectTile(y, x); + } + } +} + +// Implements A* pathfinding +bool Grid::FindPath(Tile* start, Tile* goal) +{ + for (size_t i = 0; i < NumRows; i++) + { + for (size_t j = 0; j < NumCols; j++) + { + mTiles[i][j]->g = 0.0f; + } + } + + // Open/closed sets + std::vector openSet; + std::vector closedSet; + + // Set current node to start, and add to closed set + Tile* current = start; + closedSet.emplace_back(current); + + do + { + // Add adjacent nodes to open set + for (Tile* neighbor : current->mAdjacent) + { + if (neighbor->mBlocked) + { + continue; + } + + // Only check nodes that aren't in the closed set + auto iter = std::find(closedSet.begin(), closedSet.end(), + neighbor); + if (iter == closedSet.end()) + { + iter = std::find(openSet.begin(), openSet.end(), neighbor); + if (iter == openSet.end()) + { + // Not in the open set, so set parent + neighbor->mParent = current; + neighbor->h = Math::Abs(neighbor->GetPosition().x - goal->GetPosition().x) + + Math::Abs(neighbor->GetPosition().y - goal->GetPosition().y); + // g(x) is the parent's g plus cost of traversing edge + neighbor->g = current->g + TileSize; + neighbor->f = neighbor->g + neighbor->h; + openSet.emplace_back(neighbor); + } + else + { + // Compute g(x) cost if current becomes the parent + float newG = current->g + TileSize; + if (newG < current->g) + { + // Adopt this node + neighbor->mParent = current; + neighbor->g = newG; + // f(x) changes because g(x) changes + neighbor->f = neighbor->g + neighbor->h; + } + } + } + } + + // If open set is empty, all possible paths are exhausted + if (openSet.empty()) + { + break; + } + + // Find lowest cost node in open set + auto iter = std::min_element(openSet.begin(), openSet.end(), + [](Tile* a, Tile* b) { + return a->f < b->f; + }); + // Set to current and move from open to closed + current = *iter; + openSet.erase(iter); + closedSet.emplace_back(current); + } + while (current != goal); + + // Did we find a path? + return (current == goal) ? true : false; +} + +void Grid::UpdatePathTiles(class Tile* start) +{ + // Reset all tiles to normal (except for start/end) + for (size_t i = 0; i < NumRows; i++) + { + for (size_t j = 0; j < NumCols; j++) + { + if (!(i == 3 && j == 0) && !(i == 3 && j == 15)) + { + mTiles[i][j]->SetTileState(Tile::EDefault); + } + } + } + + Tile* t = start->mParent; + while (t != GetEndTile()) + { + t->SetTileState(Tile::EPath); + t = t->mParent; + } +} + +void Grid::BuildTower() +{ + if (mSelectedTile && !mSelectedTile->mBlocked) + { + mSelectedTile->mBlocked = true; + if (FindPath(GetEndTile(), GetStartTile())) + { + Tower* t = new Tower(GetGame()); + t->SetPosition(mSelectedTile->GetPosition()); + } + else + { + // This tower would block the path, so don't allow build + mSelectedTile->mBlocked = false; + FindPath(GetEndTile(), GetStartTile()); + } + UpdatePathTiles(GetStartTile()); + } +} + +Tile* Grid::GetStartTile() +{ + return mTiles[3][0]; +} + +Tile* Grid::GetEndTile() +{ + return mTiles[3][15]; +} + +void Grid::UpdateActor(float deltaTime) +{ + Actor::UpdateActor(deltaTime); + + // Is it time to spawn a new enemy? + mNextEnemy -= deltaTime; + if (mNextEnemy <= 0.0f) + { + new Enemy(GetGame()); + mNextEnemy += EnemyTime; + } +} diff --git a/Chapter04/Grid.h b/Chapter04/Grid.h new file mode 100644 index 00000000..159874ed --- /dev/null +++ b/Chapter04/Grid.h @@ -0,0 +1,35 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "Actor.h" +#include + +class Grid : public Actor +{ +public: + Grid(class Game* game); + void ProcessClick(int x, int y); + bool FindPath(class Tile* start, class Tile* goal); + void BuildTower(); + class Tile* GetStartTile(); + class Tile* GetEndTile(); + void UpdateActor(float deltaTime) override; +private: + void SelectTile(size_t row, size_t col); + void UpdatePathTiles(class Tile* start); + class Tile* mSelectedTile; + std::vector> mTiles; + float mNextEnemy; + + const size_t NumRows = 7; + const size_t NumCols = 16; + const float StartY = 192.0f; + const float TileSize = 64.0f; + const float EnemyTime = 1.5f; +}; diff --git a/Chapter04/Main.cpp b/Chapter04/Main.cpp new file mode 100644 index 00000000..d140a430 --- /dev/null +++ b/Chapter04/Main.cpp @@ -0,0 +1,543 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "Game.h" +#include +#include +#include + +struct GraphNode +{ + // Adjacency list + std::vector mAdjacent; + // Previous node visited on path + GraphNode* mParent; +}; + +struct Graph +{ + // A graph contains nodes + std::vector mNodes; +}; + +struct WeightedEdge +{ + // Which nodes are connected by this edge? + struct WeightedGraphNode* mFrom; + struct WeightedGraphNode* mTo; + // Weight of this edge + float mWeight; +}; +struct WeightedGraphNode +{ + std::vector mEdges; + // Edge from parent to me + WeightedEdge* mParentEdge; + float f; + float g; + float h; +}; +struct WeightedGraph +{ + std::vector mNodes; +}; + +float ComputeHeuristic(WeightedGraphNode* a, WeightedGraphNode* b) +{ + return 0.0f; +} + +bool AStar(WeightedGraph& g, WeightedGraphNode* start, + WeightedGraphNode* goal) +{ + // Reset mParentEdge for all nodes + for (WeightedGraphNode* node : g.mNodes) + { + node->mParentEdge = nullptr; + } + + // Open/closed sets + std::vector openSet; + std::vector closedSet; + + // Set current node to start, and add to closed set + WeightedGraphNode* current = start; + closedSet.emplace_back(current); + + do + { + // Add adjacent nodes to open set + for (WeightedEdge* edge : current->mEdges) + { + // Only check nodes that aren't in the closed set + auto iter = std::find(closedSet.begin(), closedSet.end(), + edge->mTo); + if (iter == closedSet.end()) + { + iter = std::find(openSet.begin(), openSet.end(), edge->mTo); + if (iter == openSet.end()) + { + // Not in the open set, so set parent + WeightedGraphNode* neighbor = edge->mTo; + neighbor->mParentEdge = edge; + neighbor->h = ComputeHeuristic(neighbor, goal); + // g(x) is the parent's g plus cost of traversing edge + neighbor->g = current->g + edge->mWeight; + neighbor->f = neighbor->g + neighbor->h; + openSet.emplace_back(neighbor); + } + else + { + WeightedGraphNode* neighbor = edge->mTo; + // Compute g(x) cost if current becomes the parent + float newG = current->g + edge->mWeight; + if (newG < current->g) + { + // Adopt this node + neighbor->mParentEdge = edge; + neighbor->g = newG; + // f(x) changes because g(x) changes + neighbor->f = neighbor->g + neighbor->h; + } + } + } + } + + // If open set is empty, all possible paths are exhausted + if (openSet.empty()) + { + break; + } + + // Find lowest cost node in open set + auto iter = std::min_element(openSet.begin(), openSet.end(), + [](WeightedGraphNode* a, WeightedGraphNode* b) { + return a->f < b->f; + }); + // Set to current and move from open to closed + current = *iter; + openSet.erase(iter); + closedSet.emplace_back(current); + } + while (current != goal); + + // Did we find a path? + return (current == goal) ? true : false; +} + +bool GBFS(WeightedGraph& g, WeightedGraphNode* start, + WeightedGraphNode* goal) +{ + // Reset mParentEdge for all nodes + for (WeightedGraphNode* node : g.mNodes) + { + node->mParentEdge = nullptr; + } + + // Open/closed sets + std::vector openSet; + std::vector closedSet; + + // Set current node to start, and add to closed set + WeightedGraphNode* current = start; + closedSet.emplace_back(current); + + do + { + // Add adjacent nodes to open set + for (WeightedEdge* edge : current->mEdges) + { + // Only check nodes that aren't in the closed set + auto iter = std::find(closedSet.begin(), closedSet.end(), + edge->mTo); + if (iter == closedSet.end()) + { + // Set the adjacent node's parent edge + edge->mTo->mParentEdge = edge; + iter = std::find(openSet.begin(), openSet.end(), edge->mTo); + if (iter == openSet.end()) + { + // Compute the heuristic for this node, and add to open set + edge->mTo->h = ComputeHeuristic(edge->mTo, goal); + openSet.emplace_back(edge->mTo); + } + } + } + + // If open set is empty, all possible paths are exhausted + if (openSet.empty()) + { + break; + } + + // Find lowest cost node in open set + auto iter = std::min_element(openSet.begin(), openSet.end(), + [](WeightedGraphNode* a, WeightedGraphNode* b) { + return a->h < b->h; + }); + // Set to current and move from open to closed + current = *iter; + openSet.erase(iter); + closedSet.emplace_back(current); + } + while (current != goal); + + // Did we find a path? + return (current == goal) ? true : false; +} + +bool BFS(Graph& graph, GraphNode* start, GraphNode* goal) +{ + // Reset mParent for all nodes + for (GraphNode* node : graph.mNodes) + { + node->mParent = nullptr; + } + + // Whether or not we found a path + bool pathFound = false; + // Nodes to consider + std::queue q; + // Enqueue the first node + q.emplace(start); + + while (!q.empty()) + { + // Dequeue a node + GraphNode* current = q.front(); + q.pop(); + if (current == goal) + { + pathFound = true; + break; + } + + // Enqueue adjacent nodes that aren't already queued + for (GraphNode* node : current->mAdjacent) + { + // If the parent is null, it hasn't been enqueued + // (except for the start node) + if (node->mParent == nullptr && node != start) + { + // Enqueue this node, setting its parent + node->mParent = current; + q.emplace(node); + } + } + } + + return pathFound; +} + +void test() +{ + WeightedGraph g; + for (int i = 0; i < 5; i++) + { + for (int j = 0; j < 5; j++) + { + WeightedGraphNode* node = new WeightedGraphNode; + g.mNodes.emplace_back(node); + } + } + + for (int i = 0; i < 5; i++) + { + for (int j = 0; j < 5; j++) + { + WeightedGraphNode* node = g.mNodes[i*5 + j]; + if (i > 0) + { + WeightedEdge* e = new WeightedEdge; + e->mFrom = node; + e->mTo = g.mNodes[(i - 1) * 5 + j]; + e->mWeight = 1.0f; + node->mEdges.emplace_back(e); + } + if (i < 4) + { + WeightedEdge* e = new WeightedEdge; + e->mFrom = node; + e->mTo = g.mNodes[(i + 1) * 5 + j]; + e->mWeight = 1.0f; + node->mEdges.emplace_back(e); + } + if (j > 0) + { + WeightedEdge* e = new WeightedEdge; + e->mFrom = node; + e->mTo = g.mNodes[i*5 + j - 1]; + e->mWeight = 1.0f; + node->mEdges.emplace_back(e); + } + if (j < 4) + { + WeightedEdge* e = new WeightedEdge; + e->mFrom = node; + e->mTo = g.mNodes[i*5 + j + 1]; + e->mWeight = 1.0f; + node->mEdges.emplace_back(e); + } + } + } + bool found = AStar(g, g.mNodes[0], g.mNodes[9]); + std::cout << found << '\n'; +} + +struct GameState +{ + // (For tic-tac-toe, array of board) + enum SquareState { Empty, X, O }; + SquareState mBoard[3][3]; +}; + +struct GTNode +{ + // Children nodes + std::vector mChildren; + // State of game + GameState mState; +}; + +void GenStates(GTNode* root, bool xPlayer) +{ + for (int i = 0; i < 3; i++) + { + for (int j = 0; j < 3; j++) + { + if (root->mState.mBoard[i][j] == GameState::Empty) + { + GTNode* node = new GTNode; + root->mChildren.emplace_back(node); + node->mState = root->mState; + node->mState.mBoard[i][j] = xPlayer ? GameState::X : GameState::O; + GenStates(node, !xPlayer); + } + } + } +} + +float GetScore(GameState& state) +{ + // Are any of the rows the same? + for (int i = 0; i < 3; i++) + { + bool same = true; + GameState::SquareState v = state.mBoard[i][0]; + for (int j = 1; j < 3; j++) + { + if (state.mBoard[i][j] != v) + { + same = false; + } + } + + if (same) + { + if (v == GameState::X) + { + return 1.0f; + } + else + { + return -1.0f; + } + } + } + + // Are any of the columns the same? + for (int j = 0; j < 3; j++) + { + bool same = true; + GameState::SquareState v = state.mBoard[0][j]; + for (int i = 1; i < 3; i++) + { + if (state.mBoard[i][j] != v) + { + same = false; + } + } + + if (same) + { + if (v == GameState::X) + { + return 1.0f; + } + else + { + return -1.0f; + } + } + } + + // What about diagonals? + if (((state.mBoard[0][0] == state.mBoard[1][1]) && + (state.mBoard[1][1] == state.mBoard[2][2])) || + ((state.mBoard[2][0] == state.mBoard[1][1]) && + (state.mBoard[1][1] == state.mBoard[0][2]))) + { + if (state.mBoard[1][1] == GameState::X) + { + return 1.0f; + } + else + { + return -1.0f; + } + } + // We tied + return 0.0f; +} + +float MinPlayer(GTNode* node); + +float MaxPlayer(GTNode* node) +{ + // If this is a leaf, return score + if (node->mChildren.empty()) + { + return GetScore(node->mState); + } + + float maxValue = -std::numeric_limits::infinity(); + // Find the subtree with the maximum value + for (GTNode* child : node->mChildren) + { + maxValue = std::max(maxValue, MinPlayer(child)); + } + return maxValue; +} + +float MinPlayer(GTNode* node) +{ + // If this is a leaf, return score + if (node->mChildren.empty()) + { + return GetScore(node->mState); + } + + float minValue = std::numeric_limits::infinity(); + // Find the subtree with the minimum value + for (GTNode* child : node->mChildren) + { + minValue = std::min(minValue, MaxPlayer(child)); + } + return minValue; +} + +GTNode* MinimaxDecide(GTNode* root) +{ + // Find the subtree with the maximum value, and save the choice + GTNode* choice = nullptr; + float maxValue = -std::numeric_limits::infinity(); + for (GTNode* child : root->mChildren) + { + float v = MinPlayer(child); + if (v > maxValue) + { + maxValue = v; + choice = child; + } + } + return choice; +} + +float AlphaBetaMin(GTNode* node, float alpha, float beta); + +float AlphaBetaMax(GTNode* node, float alpha, float beta) +{ + // If this is a leaf, return score + if (node->mChildren.empty()) + { + return GetScore(node->mState); + } + + float maxValue = -std::numeric_limits::infinity(); + // Find the subtree with the maximum value + for (GTNode* child : node->mChildren) + { + maxValue = std::max(maxValue, AlphaBetaMin(child, alpha, beta)); + if (maxValue >= beta) + { + return maxValue; // Beta prune + } + alpha = std::max(maxValue, alpha); + } + return maxValue; +} + +float AlphaBetaMin(GTNode* node, float alpha, float beta) +{ + // If this is a leaf, return score + if (node->mChildren.empty()) + { + return GetScore(node->mState); + } + + float minValue = std::numeric_limits::infinity(); + // Find the subtree with the minimum value + for (GTNode* child : node->mChildren) + { + minValue = std::min(minValue, AlphaBetaMax(child, alpha, beta)); + if (minValue <= alpha) + { + return minValue; // Alpha prune + } + beta = std::min(minValue, beta); + } + return minValue; +} + +GTNode* AlphaBetaDecide(GTNode* root) +{ + // Find the subtree with the maximum value, and save the choice + GTNode* choice = nullptr; + float maxValue = -std::numeric_limits::infinity(); + float beta = std::numeric_limits::infinity(); + for (GTNode* child : root->mChildren) + { + float v = AlphaBetaMin(child, maxValue, beta); + if (v > maxValue) + { + maxValue = v; + choice = child; + } + } + return choice; +} + +void test2() +{ + GTNode* root = new GTNode; + root->mState.mBoard[0][0] = GameState::O; + root->mState.mBoard[0][1] = GameState::Empty; + root->mState.mBoard[0][2] = GameState::X; + root->mState.mBoard[1][0] = GameState::X; + root->mState.mBoard[1][1] = GameState::O; + root->mState.mBoard[1][2] = GameState::O; + root->mState.mBoard[2][0] = GameState::X; + root->mState.mBoard[2][1] = GameState::Empty; + root->mState.mBoard[2][2] = GameState::Empty; + + GenStates(root, true); + GTNode* choice = AlphaBetaDecide(root); + std::cout << choice->mChildren.size(); +} + +int main(int argc, char** argv) +{ + Game game; + bool success = game.Initialize(); + if (success) + { + game.RunLoop(); + } + game.Shutdown(); + return 0; +} diff --git a/Chapter04/Math.cpp b/Chapter04/Math.cpp new file mode 100644 index 00000000..9e1b7932 --- /dev/null +++ b/Chapter04/Math.cpp @@ -0,0 +1,240 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "Math.h" + +const Vector2 Vector2::Zero(0.0f, 0.0f); +const Vector2 Vector2::UnitX(1.0f, 0.0f); +const Vector2 Vector2::UnitY(0.0f, 1.0f); +const Vector2 Vector2::NegUnitX(-1.0f, 0.0f); +const Vector2 Vector2::NegUnitY(0.0f, -1.0f); + +const Vector3 Vector3::Zero(0.0f, 0.0f, 0.f); +const Vector3 Vector3::UnitX(1.0f, 0.0f, 0.0f); +const Vector3 Vector3::UnitY(0.0f, 1.0f, 0.0f); +const Vector3 Vector3::UnitZ(0.0f, 0.0f, 1.0f); +const Vector3 Vector3::NegUnitX(-1.0f, 0.0f, 0.0f); +const Vector3 Vector3::NegUnitY(0.0f, -1.0f, 0.0f); +const Vector3 Vector3::NegUnitZ(0.0f, 0.0f, -1.0f); +const Vector3 Vector3::Infinity(Math::Infinity, Math::Infinity, Math::Infinity); +const Vector3 Vector3::NegInfinity(Math::NegInfinity, Math::NegInfinity, Math::NegInfinity); + +static float m3Ident[3][3] = +{ + { 1.0f, 0.0f, 0.0f }, + { 0.0f, 1.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f } +}; +const Matrix3 Matrix3::Identity(m3Ident); + +static float m4Ident[4][4] = +{ + { 1.0f, 0.0f, 0.0f, 0.0f }, + { 0.0f, 1.0f, 0.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f, 0.0f }, + { 0.0f, 0.0f, 0.0f, 1.0f } +}; + +const Matrix4 Matrix4::Identity(m4Ident); + +const Quaternion Quaternion::Identity(0.0f, 0.0f, 0.0f, 1.0f); + +Vector2 Vector2::Transform(const Vector2& vec, const Matrix3& mat, float w /*= 1.0f*/) +{ + Vector2 retVal; + retVal.x = vec.x * mat.mat[0][0] + vec.y * mat.mat[1][0] + w * mat.mat[2][0]; + retVal.y = vec.x * mat.mat[0][1] + vec.y * mat.mat[1][1] + w * mat.mat[2][1]; + //ignore w since we aren't returning a new value for it... + return retVal; +} + +Vector3 Vector3::Transform(const Vector3& vec, const Matrix4& mat, float w /*= 1.0f*/) +{ + Vector3 retVal; + retVal.x = vec.x * mat.mat[0][0] + vec.y * mat.mat[1][0] + + vec.z * mat.mat[2][0] + w * mat.mat[3][0]; + retVal.y = vec.x * mat.mat[0][1] + vec.y * mat.mat[1][1] + + vec.z * mat.mat[2][1] + w * mat.mat[3][1]; + retVal.z = vec.x * mat.mat[0][2] + vec.y * mat.mat[1][2] + + vec.z * mat.mat[2][2] + w * mat.mat[3][2]; + //ignore w since we aren't returning a new value for it... + return retVal; +} + +// This will transform the vector and renormalize the w component +Vector3 Vector3::TransformWithPerspDiv(const Vector3& vec, const Matrix4& mat, float w /*= 1.0f*/) +{ + Vector3 retVal; + retVal.x = vec.x * mat.mat[0][0] + vec.y * mat.mat[1][0] + + vec.z * mat.mat[2][0] + w * mat.mat[3][0]; + retVal.y = vec.x * mat.mat[0][1] + vec.y * mat.mat[1][1] + + vec.z * mat.mat[2][1] + w * mat.mat[3][1]; + retVal.z = vec.x * mat.mat[0][2] + vec.y * mat.mat[1][2] + + vec.z * mat.mat[2][2] + w * mat.mat[3][2]; + float transformedW = vec.x * mat.mat[0][3] + vec.y * mat.mat[1][3] + + vec.z * mat.mat[2][3] + w * mat.mat[3][3]; + if (!Math::NearZero(Math::Abs(transformedW))) + { + transformedW = 1.0f / transformedW; + retVal *= transformedW; + } + return retVal; +} + +// Transform a Vector3 by a quaternion +Vector3 Vector3::Transform(const Vector3& v, const Quaternion& q) +{ + // v + 2.0*cross(q.xyz, cross(q.xyz,v) + q.w*v); + Vector3 qv(q.x, q.y, q.z); + Vector3 retVal = v; + retVal += 2.0f * Vector3::Cross(qv, Vector3::Cross(qv, v) + q.w * v); + return retVal; +} + +void Matrix4::Invert() +{ + // Thanks slow math + float tmp[12]; /* temp array for pairs */ + float src[16]; /* array of transpose source matrix */ + float dst[16]; /* storage */ + float det; /* determinant */ + /* transpose matrix */ + + // row 1 to col 1 + src[0] = mat[0][0]; + src[4] = mat[0][1]; + src[8] = mat[0][2]; + src[12] = mat[0][3]; + + // row 2 to col 2 + src[1] = mat[1][0]; + src[5] = mat[1][1]; + src[9] = mat[1][2]; + src[13] = mat[1][3]; + + // row 3 to col 3 + src[2] = mat[2][0]; + src[6] = mat[2][1]; + src[10] = mat[2][2]; + src[14] = mat[2][3]; + + // row 4 to col 4 + src[3] = mat[3][0]; + src[7] = mat[3][1]; + src[11] = mat[3][2]; + src[15] = mat[3][3]; + + // for (int i = 0; i < 4; i++) { + // src[i] = mat[i*4]; + // src[i + 4] = mat[i*4 + 1]; + // src[i + 8] = mat[i*4 + 2]; + // src[i + 12] = mat[i*4 + 3]; + // } + /* calculate pairs for first 8 elements (cofactors) */ + tmp[0] = src[10] * src[15]; + tmp[1] = src[11] * src[14]; + tmp[2] = src[9] * src[15]; + tmp[3] = src[11] * src[13]; + tmp[4] = src[9] * src[14]; + tmp[5] = src[10] * src[13]; + tmp[6] = src[8] * src[15]; + tmp[7] = src[11] * src[12]; + tmp[8] = src[8] * src[14]; + tmp[9] = src[10] * src[12]; + tmp[10] = src[8] * src[13]; + tmp[11] = src[9] * src[12]; + /* calculate first 8 elements (cofactors) */ + dst[0] = tmp[0] * src[5] + tmp[3] * src[6] + tmp[4] * src[7]; + dst[0] -= tmp[1] * src[5] + tmp[2] * src[6] + tmp[5] * src[7]; + dst[1] = tmp[1] * src[4] + tmp[6] * src[6] + tmp[9] * src[7]; + dst[1] -= tmp[0] * src[4] + tmp[7] * src[6] + tmp[8] * src[7]; + dst[2] = tmp[2] * src[4] + tmp[7] * src[5] + tmp[10] * src[7]; + dst[2] -= tmp[3] * src[4] + tmp[6] * src[5] + tmp[11] * src[7]; + dst[3] = tmp[5] * src[4] + tmp[8] * src[5] + tmp[11] * src[6]; + dst[3] -= tmp[4] * src[4] + tmp[9] * src[5] + tmp[10] * src[6]; + dst[4] = tmp[1] * src[1] + tmp[2] * src[2] + tmp[5] * src[3]; + dst[4] -= tmp[0] * src[1] + tmp[3] * src[2] + tmp[4] * src[3]; + dst[5] = tmp[0] * src[0] + tmp[7] * src[2] + tmp[8] * src[3]; + dst[5] -= tmp[1] * src[0] + tmp[6] * src[2] + tmp[9] * src[3]; + dst[6] = tmp[3] * src[0] + tmp[6] * src[1] + tmp[11] * src[3]; + dst[6] -= tmp[2] * src[0] + tmp[7] * src[1] + tmp[10] * src[3]; + dst[7] = tmp[4] * src[0] + tmp[9] * src[1] + tmp[10] * src[2]; + dst[7] -= tmp[5] * src[0] + tmp[8] * src[1] + tmp[11] * src[2]; + /* calculate pairs for second 8 elements (cofactors) */ + tmp[0] = src[2] * src[7]; + tmp[1] = src[3] * src[6]; + tmp[2] = src[1] * src[7]; + tmp[3] = src[3] * src[5]; + tmp[4] = src[1] * src[6]; + tmp[5] = src[2] * src[5]; + tmp[6] = src[0] * src[7]; + tmp[7] = src[3] * src[4]; + tmp[8] = src[0] * src[6]; + tmp[9] = src[2] * src[4]; + tmp[10] = src[0] * src[5]; + tmp[11] = src[1] * src[4]; + /* calculate second 8 elements (cofactors) */ + dst[8] = tmp[0] * src[13] + tmp[3] * src[14] + tmp[4] * src[15]; + dst[8] -= tmp[1] * src[13] + tmp[2] * src[14] + tmp[5] * src[15]; + dst[9] = tmp[1] * src[12] + tmp[6] * src[14] + tmp[9] * src[15]; + dst[9] -= tmp[0] * src[12] + tmp[7] * src[14] + tmp[8] * src[15]; + dst[10] = tmp[2] * src[12] + tmp[7] * src[13] + tmp[10] * src[15]; + dst[10] -= tmp[3] * src[12] + tmp[6] * src[13] + tmp[11] * src[15]; + dst[11] = tmp[5] * src[12] + tmp[8] * src[13] + tmp[11] * src[14]; + dst[11] -= tmp[4] * src[12] + tmp[9] * src[13] + tmp[10] * src[14]; + dst[12] = tmp[2] * src[10] + tmp[5] * src[11] + tmp[1] * src[9]; + dst[12] -= tmp[4] * src[11] + tmp[0] * src[9] + tmp[3] * src[10]; + dst[13] = tmp[8] * src[11] + tmp[0] * src[8] + tmp[7] * src[10]; + dst[13] -= tmp[6] * src[10] + tmp[9] * src[11] + tmp[1] * src[8]; + dst[14] = tmp[6] * src[9] + tmp[11] * src[11] + tmp[3] * src[8]; + dst[14] -= tmp[10] * src[11] + tmp[2] * src[8] + tmp[7] * src[9]; + dst[15] = tmp[10] * src[10] + tmp[4] * src[8] + tmp[9] * src[9]; + dst[15] -= tmp[8] * src[9] + tmp[11] * src[10] + tmp[5] * src[8]; + /* calculate determinant */ + det = src[0] * dst[0] + src[1] * dst[1] + src[2] * dst[2] + src[3] * dst[3]; + /* calculate matrix inverse */ + det = 1 / det; + for (int j = 0; j < 16; j++) + dst[j] *= det; + + // Set it back + for (int i = 0; i < 4; i++) + { + for (int j = 0; j < 4; j++) + { + mat[i][j] = dst[i * 4 + j]; + } + } +} + +Matrix4 Matrix4::CreateFromQuaternion(const class Quaternion& q) +{ + float mat[4][4]; + + mat[0][0] = 1.0f - 2.0f * q.y * q.y - 2.0f * q.z * q.z; + mat[0][1] = 2.0f * q.x * q.y + 2.0f * q.w * q.z; + mat[0][2] = 2.0f * q.x * q.z - 2.0f * q.w * q.y; + mat[0][3] = 0.0f; + + mat[1][0] = 2.0f * q.x * q.y - 2.0f * q.w * q.z; + mat[1][1] = 1.0f - 2.0f * q.x * q.x - 2.0f * q.z * q.z; + mat[1][2] = 2.0f * q.y * q.z + 2.0f * q.w * q.x; + mat[1][3] = 0.0f; + + mat[2][0] = 2.0f * q.x * q.z + 2.0f * q.w * q.y; + mat[2][1] = 2.0f * q.y * q.z - 2.0f * q.w * q.x; + mat[2][2] = 1.0f - 2.0f * q.x * q.x - 2.0f * q.y * q.y; + mat[2][3] = 0.0f; + + mat[3][0] = 0.0f; + mat[3][1] = 0.0f; + mat[3][2] = 0.0f; + mat[3][3] = 1.0f; + + return Matrix4(mat); +} diff --git a/Chapter04/Math.h b/Chapter04/Math.h new file mode 100644 index 00000000..51de3a26 --- /dev/null +++ b/Chapter04/Math.h @@ -0,0 +1,1033 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#pragma once + +#include +#include +#include + +namespace Math +{ + const float Pi = 3.1415926535f; + const float TwoPi = Pi * 2.0f; + const float PiOver2 = Pi / 2.0f; + const float Infinity = std::numeric_limits::infinity(); + const float NegInfinity = -std::numeric_limits::infinity(); + + inline float ToRadians(float degrees) + { + return degrees * Pi / 180.0f; + } + + inline float ToDegrees(float radians) + { + return radians * 180.0f / Pi; + } + + inline bool NearZero(float val, float epsilon = 0.001f) + { + if (fabs(val) <= epsilon) + { + return true; + } + else + { + return false; + } + } + + template + T Max(const T& a, const T& b) + { + return (a < b ? b : a); + } + + template + T Min(const T& a, const T& b) + { + return (a < b ? a : b); + } + + template + T Clamp(const T& value, const T& lower, const T& upper) + { + return Min(upper, Max(lower, value)); + } + + inline float Abs(float value) + { + return fabs(value); + } + + inline float Cos(float angle) + { + return cosf(angle); + } + + inline float Sin(float angle) + { + return sinf(angle); + } + + inline float Tan(float angle) + { + return tanf(angle); + } + + inline float Acos(float value) + { + return acosf(value); + } + + inline float Atan2(float y, float x) + { + return atan2f(y, x); + } + + inline float Cot(float angle) + { + return 1.0f / Tan(angle); + } + + inline float Lerp(float a, float b, float f) + { + return a + f * (b - a); + } + + inline float Sqrt(float value) + { + return sqrtf(value); + } + + inline float Fmod(float numer, float denom) + { + return fmod(numer, denom); + } +} + +// 2D Vector +class Vector2 +{ +public: + float x; + float y; + + Vector2() + :x(0.0f) + ,y(0.0f) + {} + + explicit Vector2(float inX, float inY) + :x(inX) + ,y(inY) + {} + + // Set both components in one line + void Set(float inX, float inY) + { + x = inX; + y = inY; + } + + // Vector addition (a + b) + friend Vector2 operator+(const Vector2& a, const Vector2& b) + { + return Vector2(a.x + b.x, a.y + b.y); + } + + // Vector subtraction (a - b) + friend Vector2 operator-(const Vector2& a, const Vector2& b) + { + return Vector2(a.x - b.x, a.y - b.y); + } + + // Component-wise multiplication + // (a.x * b.x, ...) + friend Vector2 operator*(const Vector2& a, const Vector2& b) + { + return Vector2(a.x * b.x, a.y * b.y); + } + + // Scalar multiplication + friend Vector2 operator*(const Vector2& vec, float scalar) + { + return Vector2(vec.x * scalar, vec.y * scalar); + } + + // Scalar multiplication + friend Vector2 operator*(float scalar, const Vector2& vec) + { + return Vector2(vec.x * scalar, vec.y * scalar); + } + + // Scalar *= + Vector2& operator*=(float scalar) + { + x *= scalar; + y *= scalar; + return *this; + } + + // Vector += + Vector2& operator+=(const Vector2& right) + { + x += right.x; + y += right.y; + return *this; + } + + // Vector -= + Vector2& operator-=(const Vector2& right) + { + x -= right.x; + y -= right.y; + return *this; + } + + // Length squared of vector + float LengthSq() const + { + return (x*x + y*y); + } + + // Length of vector + float Length() const + { + return (Math::Sqrt(LengthSq())); + } + + // Normalize this vector + void Normalize() + { + float length = Length(); + x /= length; + y /= length; + } + + // Normalize the provided vector + static Vector2 Normalize(const Vector2& vec) + { + Vector2 temp = vec; + temp.Normalize(); + return temp; + } + + // Dot product between two vectors (a dot b) + static float Dot(const Vector2& a, const Vector2& b) + { + return (a.x * b.x + a.y * b.y); + } + + // Lerp from A to B by f + static Vector2 Lerp(const Vector2& a, const Vector2& b, float f) + { + return Vector2(a + f * (b - a)); + } + + // Reflect V about (normalized) N + static Vector2 Reflect(const Vector2& v, const Vector2& n) + { + return v - 2.0f * Vector2::Dot(v, n) * n; + } + + // Transform vector by matrix + static Vector2 Transform(const Vector2& vec, const class Matrix3& mat, float w = 1.0f); + + static const Vector2 Zero; + static const Vector2 UnitX; + static const Vector2 UnitY; + static const Vector2 NegUnitX; + static const Vector2 NegUnitY; +}; + +// 3D Vector +class Vector3 +{ +public: + float x; + float y; + float z; + + Vector3() + :x(0.0f) + ,y(0.0f) + ,z(0.0f) + {} + + explicit Vector3(float inX, float inY, float inZ) + :x(inX) + ,y(inY) + ,z(inZ) + {} + + // Cast to a const float pointer + const float* GetAsFloatPtr() const + { + return reinterpret_cast(&x); + } + + // Set all three components in one line + void Set(float inX, float inY, float inZ) + { + x = inX; + y = inY; + z = inZ; + } + + // Vector addition (a + b) + friend Vector3 operator+(const Vector3& a, const Vector3& b) + { + return Vector3(a.x + b.x, a.y + b.y, a.z + b.z); + } + + // Vector subtraction (a - b) + friend Vector3 operator-(const Vector3& a, const Vector3& b) + { + return Vector3(a.x - b.x, a.y - b.y, a.z - b.z); + } + + // Component-wise multiplication + friend Vector3 operator*(const Vector3& left, const Vector3& right) + { + return Vector3(left.x * right.x, left.y * right.y, left.z * right.z); + } + + // Scalar multiplication + friend Vector3 operator*(const Vector3& vec, float scalar) + { + return Vector3(vec.x * scalar, vec.y * scalar, vec.z * scalar); + } + + // Scalar multiplication + friend Vector3 operator*(float scalar, const Vector3& vec) + { + return Vector3(vec.x * scalar, vec.y * scalar, vec.z * scalar); + } + + // Scalar *= + Vector3& operator*=(float scalar) + { + x *= scalar; + y *= scalar; + z *= scalar; + return *this; + } + + // Vector += + Vector3& operator+=(const Vector3& right) + { + x += right.x; + y += right.y; + z += right.z; + return *this; + } + + // Vector -= + Vector3& operator-=(const Vector3& right) + { + x -= right.x; + y -= right.y; + z -= right.z; + return *this; + } + + // Length squared of vector + float LengthSq() const + { + return (x*x + y*y + z*z); + } + + // Length of vector + float Length() const + { + return (Math::Sqrt(LengthSq())); + } + + // Normalize this vector + void Normalize() + { + float length = Length(); + x /= length; + y /= length; + z /= length; + } + + // Normalize the provided vector + static Vector3 Normalize(const Vector3& vec) + { + Vector3 temp = vec; + temp.Normalize(); + return temp; + } + + // Dot product between two vectors (a dot b) + static float Dot(const Vector3& a, const Vector3& b) + { + return (a.x * b.x + a.y * b.y + a.z * b.z); + } + + // Cross product between two vectors (a cross b) + static Vector3 Cross(const Vector3& a, const Vector3& b) + { + Vector3 temp; + temp.x = a.y * b.z - a.z * b.y; + temp.y = a.z * b.x - a.x * b.z; + temp.z = a.x * b.y - a.y * b.x; + return temp; + } + + // Lerp from A to B by f + static Vector3 Lerp(const Vector3& a, const Vector3& b, float f) + { + return Vector3(a + f * (b - a)); + } + + // Reflect V about (normalized) N + static Vector3 Reflect(const Vector3& v, const Vector3& n) + { + return v - 2.0f * Vector3::Dot(v, n) * n; + } + + static Vector3 Transform(const Vector3& vec, const class Matrix4& mat, float w = 1.0f); + // This will transform the vector and renormalize the w component + static Vector3 TransformWithPerspDiv(const Vector3& vec, const class Matrix4& mat, float w = 1.0f); + + // Transform a Vector3 by a quaternion + static Vector3 Transform(const Vector3& v, const class Quaternion& q); + + static const Vector3 Zero; + static const Vector3 UnitX; + static const Vector3 UnitY; + static const Vector3 UnitZ; + static const Vector3 NegUnitX; + static const Vector3 NegUnitY; + static const Vector3 NegUnitZ; + static const Vector3 Infinity; + static const Vector3 NegInfinity; +}; + +// 3x3 Matrix +class Matrix3 +{ +public: + float mat[3][3]; + + Matrix3() + { + *this = Matrix3::Identity; + } + + explicit Matrix3(float inMat[3][3]) + { + memcpy(mat, inMat, 9 * sizeof(float)); + } + + // Cast to a const float pointer + const float* GetAsFloatPtr() const + { + return reinterpret_cast(&mat[0][0]); + } + + // Matrix multiplication + friend Matrix3 operator*(const Matrix3& left, const Matrix3& right) + { + Matrix3 retVal; + // row 0 + retVal.mat[0][0] = + left.mat[0][0] * right.mat[0][0] + + left.mat[0][1] * right.mat[1][0] + + left.mat[0][2] * right.mat[2][0]; + + retVal.mat[0][1] = + left.mat[0][0] * right.mat[0][1] + + left.mat[0][1] * right.mat[1][1] + + left.mat[0][2] * right.mat[2][1]; + + retVal.mat[0][2] = + left.mat[0][0] * right.mat[0][2] + + left.mat[0][1] * right.mat[1][2] + + left.mat[0][2] * right.mat[2][2]; + + // row 1 + retVal.mat[1][0] = + left.mat[1][0] * right.mat[0][0] + + left.mat[1][1] * right.mat[1][0] + + left.mat[1][2] * right.mat[2][0]; + + retVal.mat[1][1] = + left.mat[1][0] * right.mat[0][1] + + left.mat[1][1] * right.mat[1][1] + + left.mat[1][2] * right.mat[2][1]; + + retVal.mat[1][2] = + left.mat[1][0] * right.mat[0][2] + + left.mat[1][1] * right.mat[1][2] + + left.mat[1][2] * right.mat[2][2]; + + // row 2 + retVal.mat[2][0] = + left.mat[2][0] * right.mat[0][0] + + left.mat[2][1] * right.mat[1][0] + + left.mat[2][2] * right.mat[2][0]; + + retVal.mat[2][1] = + left.mat[2][0] * right.mat[0][1] + + left.mat[2][1] * right.mat[1][1] + + left.mat[2][2] * right.mat[2][1]; + + retVal.mat[2][2] = + left.mat[2][0] * right.mat[0][2] + + left.mat[2][1] * right.mat[1][2] + + left.mat[2][2] * right.mat[2][2]; + + return retVal; + } + + Matrix3& operator*=(const Matrix3& right) + { + *this = *this * right; + return *this; + } + + // Create a scale matrix with x and y scales + static Matrix3 CreateScale(float xScale, float yScale) + { + float temp[3][3] = + { + { xScale, 0.0f, 0.0f }, + { 0.0f, yScale, 0.0f }, + { 0.0f, 0.0f, 1.0f }, + }; + return Matrix3(temp); + } + + static Matrix3 CreateScale(const Vector2& scaleVector) + { + return CreateScale(scaleVector.x, scaleVector.y); + } + + // Create a scale matrix with a uniform factor + static Matrix3 CreateScale(float scale) + { + return CreateScale(scale, scale); + } + + // Create a rotation matrix about the Z axis + // theta is in radians + static Matrix3 CreateRotation(float theta) + { + float temp[3][3] = + { + { Math::Cos(theta), Math::Sin(theta), 0.0f }, + { -Math::Sin(theta), Math::Cos(theta), 0.0f }, + { 0.0f, 0.0f, 1.0f }, + }; + return Matrix3(temp); + } + + // Create a translation matrix (on the xy-plane) + static Matrix3 CreateTranslation(const Vector2& trans) + { + float temp[3][3] = + { + { 1.0f, 0.0f, 0.0f }, + { 0.0f, 1.0f, 0.0f }, + { trans.x, trans.y, 1.0f }, + }; + return Matrix3(temp); + } + + static const Matrix3 Identity; +}; + +// 4x4 Matrix +class Matrix4 +{ +public: + float mat[4][4]; + + Matrix4() + { + *this = Matrix4::Identity; + } + + explicit Matrix4(float inMat[4][4]) + { + memcpy(mat, inMat, 16 * sizeof(float)); + } + + // Cast to a const float pointer + const float* GetAsFloatPtr() const + { + return reinterpret_cast(&mat[0][0]); + } + + // Matrix multiplication (a * b) + friend Matrix4 operator*(const Matrix4& a, const Matrix4& b) + { + Matrix4 retVal; + // row 0 + retVal.mat[0][0] = + a.mat[0][0] * b.mat[0][0] + + a.mat[0][1] * b.mat[1][0] + + a.mat[0][2] * b.mat[2][0] + + a.mat[0][3] * b.mat[3][0]; + + retVal.mat[0][1] = + a.mat[0][0] * b.mat[0][1] + + a.mat[0][1] * b.mat[1][1] + + a.mat[0][2] * b.mat[2][1] + + a.mat[0][3] * b.mat[3][1]; + + retVal.mat[0][2] = + a.mat[0][0] * b.mat[0][2] + + a.mat[0][1] * b.mat[1][2] + + a.mat[0][2] * b.mat[2][2] + + a.mat[0][3] * b.mat[3][2]; + + retVal.mat[0][3] = + a.mat[0][0] * b.mat[0][3] + + a.mat[0][1] * b.mat[1][3] + + a.mat[0][2] * b.mat[2][3] + + a.mat[0][3] * b.mat[3][3]; + + // row 1 + retVal.mat[1][0] = + a.mat[1][0] * b.mat[0][0] + + a.mat[1][1] * b.mat[1][0] + + a.mat[1][2] * b.mat[2][0] + + a.mat[1][3] * b.mat[3][0]; + + retVal.mat[1][1] = + a.mat[1][0] * b.mat[0][1] + + a.mat[1][1] * b.mat[1][1] + + a.mat[1][2] * b.mat[2][1] + + a.mat[1][3] * b.mat[3][1]; + + retVal.mat[1][2] = + a.mat[1][0] * b.mat[0][2] + + a.mat[1][1] * b.mat[1][2] + + a.mat[1][2] * b.mat[2][2] + + a.mat[1][3] * b.mat[3][2]; + + retVal.mat[1][3] = + a.mat[1][0] * b.mat[0][3] + + a.mat[1][1] * b.mat[1][3] + + a.mat[1][2] * b.mat[2][3] + + a.mat[1][3] * b.mat[3][3]; + + // row 2 + retVal.mat[2][0] = + a.mat[2][0] * b.mat[0][0] + + a.mat[2][1] * b.mat[1][0] + + a.mat[2][2] * b.mat[2][0] + + a.mat[2][3] * b.mat[3][0]; + + retVal.mat[2][1] = + a.mat[2][0] * b.mat[0][1] + + a.mat[2][1] * b.mat[1][1] + + a.mat[2][2] * b.mat[2][1] + + a.mat[2][3] * b.mat[3][1]; + + retVal.mat[2][2] = + a.mat[2][0] * b.mat[0][2] + + a.mat[2][1] * b.mat[1][2] + + a.mat[2][2] * b.mat[2][2] + + a.mat[2][3] * b.mat[3][2]; + + retVal.mat[2][3] = + a.mat[2][0] * b.mat[0][3] + + a.mat[2][1] * b.mat[1][3] + + a.mat[2][2] * b.mat[2][3] + + a.mat[2][3] * b.mat[3][3]; + + // row 3 + retVal.mat[3][0] = + a.mat[3][0] * b.mat[0][0] + + a.mat[3][1] * b.mat[1][0] + + a.mat[3][2] * b.mat[2][0] + + a.mat[3][3] * b.mat[3][0]; + + retVal.mat[3][1] = + a.mat[3][0] * b.mat[0][1] + + a.mat[3][1] * b.mat[1][1] + + a.mat[3][2] * b.mat[2][1] + + a.mat[3][3] * b.mat[3][1]; + + retVal.mat[3][2] = + a.mat[3][0] * b.mat[0][2] + + a.mat[3][1] * b.mat[1][2] + + a.mat[3][2] * b.mat[2][2] + + a.mat[3][3] * b.mat[3][2]; + + retVal.mat[3][3] = + a.mat[3][0] * b.mat[0][3] + + a.mat[3][1] * b.mat[1][3] + + a.mat[3][2] * b.mat[2][3] + + a.mat[3][3] * b.mat[3][3]; + + return retVal; + } + + Matrix4& operator*=(const Matrix4& right) + { + *this = *this * right; + return *this; + } + + // Invert the matrix - super slow + void Invert(); + + // Get the translation component of the matrix + Vector3 GetTranslation() const + { + return Vector3(mat[3][0], mat[3][1], mat[3][2]); + } + + // Get the X axis of the matrix (forward) + Vector3 GetXAxis() const + { + return Vector3::Normalize(Vector3(mat[0][0], mat[0][1], mat[0][2])); + } + + // Get the Y axis of the matrix (left) + Vector3 GetYAxis() const + { + return Vector3::Normalize(Vector3(mat[1][0], mat[1][1], mat[1][2])); + } + + // Get the Z axis of the matrix (up) + Vector3 GetZAxis() const + { + return Vector3::Normalize(Vector3(mat[2][0], mat[2][1], mat[2][2])); + } + + // Extract the scale component from the matrix + Vector3 GetScale() const + { + Vector3 retVal; + retVal.x = Vector3(mat[0][0], mat[0][1], mat[0][2]).Length(); + retVal.y = Vector3(mat[1][0], mat[1][1], mat[1][2]).Length(); + retVal.z = Vector3(mat[2][0], mat[2][1], mat[2][2]).Length(); + return retVal; + } + + // Create a scale matrix with x, y, and z scales + static Matrix4 CreateScale(float xScale, float yScale, float zScale) + { + float temp[4][4] = + { + { xScale, 0.0f, 0.0f, 0.0f }, + { 0.0f, yScale, 0.0f, 0.0f }, + { 0.0f, 0.0f, zScale, 0.0f }, + { 0.0f, 0.0f, 0.0f, 1.0f } + }; + return Matrix4(temp); + } + + static Matrix4 CreateScale(const Vector3& scaleVector) + { + return CreateScale(scaleVector.x, scaleVector.y, scaleVector.z); + } + + // Create a scale matrix with a uniform factor + static Matrix4 CreateScale(float scale) + { + return CreateScale(scale, scale, scale); + } + + // Rotation about x-axis + static Matrix4 CreateRotationX(float theta) + { + float temp[4][4] = + { + { 1.0f, 0.0f, 0.0f , 0.0f }, + { 0.0f, Math::Cos(theta), Math::Sin(theta), 0.0f }, + { 0.0f, -Math::Sin(theta), Math::Cos(theta), 0.0f }, + { 0.0f, 0.0f, 0.0f, 1.0f }, + }; + return Matrix4(temp); + } + + // Rotation about y-axis + static Matrix4 CreateRotationY(float theta) + { + float temp[4][4] = + { + { Math::Cos(theta), 0.0f, -Math::Sin(theta), 0.0f }, + { 0.0f, 1.0f, 0.0f, 0.0f }, + { Math::Sin(theta), 0.0f, Math::Cos(theta), 0.0f }, + { 0.0f, 0.0f, 0.0f, 1.0f }, + }; + return Matrix4(temp); + } + + // Rotation about z-axis + static Matrix4 CreateRotationZ(float theta) + { + float temp[4][4] = + { + { Math::Cos(theta), Math::Sin(theta), 0.0f, 0.0f }, + { -Math::Sin(theta), Math::Cos(theta), 0.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f, 0.0f }, + { 0.0f, 0.0f, 0.0f, 1.0f }, + }; + return Matrix4(temp); + } + + // Create a rotation matrix from a quaternion + static Matrix4 CreateFromQuaternion(const class Quaternion& q); + + static Matrix4 CreateTranslation(const Vector3& trans) + { + float temp[4][4] = + { + { 1.0f, 0.0f, 0.0f, 0.0f }, + { 0.0f, 1.0f, 0.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f, 0.0f }, + { trans.x, trans.y, trans.z, 1.0f } + }; + return Matrix4(temp); + } + + static Matrix4 CreateLookAt(const Vector3& eye, const Vector3& target, const Vector3& up) + { + Vector3 zaxis = Vector3::Normalize(target - eye); + Vector3 xaxis = Vector3::Normalize(Vector3::Cross(up, zaxis)); + Vector3 yaxis = Vector3::Normalize(Vector3::Cross(zaxis, xaxis)); + Vector3 trans; + trans.x = -Vector3::Dot(xaxis, eye); + trans.y = -Vector3::Dot(yaxis, eye); + trans.z = -Vector3::Dot(zaxis, eye); + + float temp[4][4] = + { + { xaxis.x, yaxis.x, zaxis.x, 0.0f }, + { xaxis.y, yaxis.y, zaxis.y, 0.0f }, + { xaxis.z, yaxis.z, zaxis.z, 0.0f }, + { trans.x, trans.y, trans.z, 1.0f } + }; + return Matrix4(temp); + } + + static Matrix4 CreateOrtho(float width, float height, float near, float far) + { + float temp[4][4] = + { + { 2.0f / width, 0.0f, 0.0f, 0.0f }, + { 0.0f, 2.0f / height, 0.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f / (far - near), 0.0f }, + { 0.0f, 0.0f, near / (near - far), 1.0f } + }; + return Matrix4(temp); + } + + static Matrix4 CreatePerspectiveFOV(float fovY, float width, float height, float near, float far) + { + float yScale = Math::Cot(fovY / 2.0f); + float xScale = yScale * height / width; + float temp[4][4] = + { + { xScale, 0.0f, 0.0f, 0.0f }, + { 0.0f, yScale, 0.0f, 0.0f }, + { 0.0f, 0.0f, far / (far - near), 1.0f }, + { 0.0f, 0.0f, -near * far / (far - near), 0.0f } + }; + return Matrix4(temp); + } + + // Create "Simple" View-Projection Matrix from Chapter 6 + static Matrix4 CreateSimpleViewProj(float width, float height) + { + float temp[4][4] = + { + { 2.0f/width, 0.0f, 0.0f, 0.0f }, + { 0.0f, 2.0f/height, 0.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f, 1.0f } + }; + return Matrix4(temp); + } + + static const Matrix4 Identity; +}; + +// (Unit) Quaternion +class Quaternion +{ +public: + float x; + float y; + float z; + float w; + + Quaternion() + { + *this = Quaternion::Identity; + } + + // This directly sets the quaternion components -- + // don't use for axis/angle + explicit Quaternion(float inX, float inY, float inZ, float inW) + { + Set(inX, inY, inZ, inW); + } + + // Construct the quaternion from an axis and angle + // It is assumed that axis is already normalized, + // and the angle is in radians + explicit Quaternion(const Vector3& axis, float angle) + { + float scalar = Math::Sin(angle / 2.0f); + x = axis.x * scalar; + y = axis.y * scalar; + z = axis.z * scalar; + w = Math::Cos(angle / 2.0f); + } + + // Directly set the internal components + void Set(float inX, float inY, float inZ, float inW) + { + x = inX; + y = inY; + z = inZ; + w = inW; + } + + void Conjugate() + { + x *= -1.0f; + y *= -1.0f; + z *= -1.0f; + } + + float LengthSq() const + { + return (x*x + y*y + z*z + w*w); + } + + float Length() const + { + return Math::Sqrt(LengthSq()); + } + + void Normalize() + { + float length = Length(); + x /= length; + y /= length; + z /= length; + w /= length; + } + + // Normalize the provided quaternion + static Quaternion Normalize(const Quaternion& q) + { + Quaternion retVal = q; + retVal.Normalize(); + return retVal; + } + + // Linear interpolation + static Quaternion Lerp(const Quaternion& a, const Quaternion& b, float f) + { + Quaternion retVal; + retVal.x = Math::Lerp(a.x, b.x, f); + retVal.y = Math::Lerp(a.y, b.y, f); + retVal.z = Math::Lerp(a.z, b.z, f); + retVal.w = Math::Lerp(a.w, b.w, f); + retVal.Normalize(); + return retVal; + } + + static float Dot(const Quaternion& a, const Quaternion& b) + { + return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w; + } + + // Spherical Linear Interpolation + static Quaternion Slerp(const Quaternion& a, const Quaternion& b, float f) + { + float rawCosm = Quaternion::Dot(a, b); + + float cosom = -rawCosm; + if (rawCosm >= 0.0f) + { + cosom = rawCosm; + } + + float scale0, scale1; + + if (cosom < 0.9999f) + { + const float omega = Math::Acos(cosom); + const float invSin = 1.f / Math::Sin(omega); + scale0 = Math::Sin((1.f - f) * omega) * invSin; + scale1 = Math::Sin(f * omega) * invSin; + } + else + { + // Use linear interpolation if the quaternions + // are collinear + scale0 = 1.0f - f; + scale1 = f; + } + + if (rawCosm < 0.0f) + { + scale1 = -scale1; + } + + Quaternion retVal; + retVal.x = scale0 * a.x + scale1 * b.x; + retVal.y = scale0 * a.y + scale1 * b.y; + retVal.z = scale0 * a.z + scale1 * b.z; + retVal.w = scale0 * a.w + scale1 * b.w; + retVal.Normalize(); + return retVal; + } + + // Concatenate + // Rotate by q FOLLOWED BY p + static Quaternion Concatenate(const Quaternion& q, const Quaternion& p) + { + Quaternion retVal; + + // Vector component is: + // ps * qv + qs * pv + pv x qv + Vector3 qv(q.x, q.y, q.z); + Vector3 pv(p.x, p.y, p.z); + Vector3 newVec = p.w * qv + q.w * pv + Vector3::Cross(pv, qv); + retVal.x = newVec.x; + retVal.y = newVec.y; + retVal.z = newVec.z; + + // Scalar component is: + // ps * qs - pv . qv + retVal.w = p.w * q.w - Vector3::Dot(pv, qv); + + return retVal; + } + + static const Quaternion Identity; +}; + +namespace Color +{ + static const Vector3 Black(0.0f, 0.0f, 0.0f); + static const Vector3 White(1.0f, 1.0f, 1.0f); + static const Vector3 Red(1.0f, 0.0f, 0.0f); + static const Vector3 Green(0.0f, 1.0f, 0.0f); + static const Vector3 Blue(0.0f, 0.0f, 1.0f); + static const Vector3 Yellow(1.0f, 1.0f, 0.0f); + static const Vector3 LightYellow(1.0f, 1.0f, 0.88f); + static const Vector3 LightBlue(0.68f, 0.85f, 0.9f); + static const Vector3 LightPink(1.0f, 0.71f, 0.76f); + static const Vector3 LightGreen(0.56f, 0.93f, 0.56f); +} diff --git a/Chapter04/MoveComponent.cpp b/Chapter04/MoveComponent.cpp new file mode 100644 index 00000000..3c9730bc --- /dev/null +++ b/Chapter04/MoveComponent.cpp @@ -0,0 +1,35 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "MoveComponent.h" +#include "Actor.h" + +MoveComponent::MoveComponent(class Actor* owner, int updateOrder) +:Component(owner, updateOrder) +,mAngularSpeed(0.0f) +,mForwardSpeed(0.0f) +{ + +} + +void MoveComponent::Update(float deltaTime) +{ + if (!Math::NearZero(mAngularSpeed)) + { + float rot = mOwner->GetRotation(); + rot += mAngularSpeed * deltaTime; + mOwner->SetRotation(rot); + } + + if (!Math::NearZero(mForwardSpeed)) + { + Vector2 pos = mOwner->GetPosition(); + pos += mOwner->GetForward() * mForwardSpeed * deltaTime; + mOwner->SetPosition(pos); + } +} diff --git a/Chapter04/MoveComponent.h b/Chapter04/MoveComponent.h new file mode 100644 index 00000000..11d18cb5 --- /dev/null +++ b/Chapter04/MoveComponent.h @@ -0,0 +1,26 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "Component.h" + +class MoveComponent : public Component +{ +public: + // Lower update order to update first + MoveComponent(class Actor* owner, int updateOrder = 10); + void Update(float deltaTime) override; + + float GetAngularSpeed() const { return mAngularSpeed; } + float GetForwardSpeed() const { return mForwardSpeed; } + void SetAngularSpeed(float speed) { mAngularSpeed = speed; } + void SetForwardSpeed(float speed) { mForwardSpeed = speed; } +private: + float mAngularSpeed; + float mForwardSpeed; +}; diff --git a/Chapter04/NavComponent.cpp b/Chapter04/NavComponent.cpp new file mode 100644 index 00000000..427b9dc5 --- /dev/null +++ b/Chapter04/NavComponent.cpp @@ -0,0 +1,49 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "NavComponent.h" +#include "Tile.h" + +NavComponent::NavComponent(class Actor* owner, int updateOrder) +:MoveComponent(owner, updateOrder) +,mNextNode(nullptr) +{ + +} + +void NavComponent::Update(float deltaTime) +{ + if (mNextNode) + { + // If we're at the next node, advance along path + Vector2 diff = mOwner->GetPosition() - mNextNode->GetPosition(); + if (Math::NearZero(diff.Length(), 2.0f)) + { + mNextNode = mNextNode->GetParent(); + TurnTo(mNextNode->GetPosition()); + } + } + + MoveComponent::Update(deltaTime); +} + +void NavComponent::StartPath(const Tile* start) +{ + mNextNode = start->GetParent(); + TurnTo(mNextNode->GetPosition()); +} + +void NavComponent::TurnTo(const Vector2& pos) +{ + // Vector from me to pos + Vector2 dir = pos - mOwner->GetPosition(); + // New angle is just atan2 of this dir vector + // (Negate y because +y is down on screen) + float angle = Math::Atan2(-dir.y, dir.x); + mOwner->SetRotation(angle); +} diff --git a/Chapter04/NavComponent.h b/Chapter04/NavComponent.h new file mode 100644 index 00000000..d085827e --- /dev/null +++ b/Chapter04/NavComponent.h @@ -0,0 +1,23 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "MoveComponent.h" +#include "Math.h" + +class NavComponent : public MoveComponent +{ +public: + // Lower update order to update first + NavComponent(class Actor* owner, int updateOrder = 10); + void Update(float deltaTime) override; + void StartPath(const class Tile* start); + void TurnTo(const Vector2& pos); +private: + const class Tile* mNextNode; +}; diff --git a/Chapter04/SpriteComponent.cpp b/Chapter04/SpriteComponent.cpp new file mode 100644 index 00000000..d22efb6c --- /dev/null +++ b/Chapter04/SpriteComponent.cpp @@ -0,0 +1,56 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "SpriteComponent.h" +#include "Actor.h" +#include "Game.h" + +SpriteComponent::SpriteComponent(Actor* owner, int drawOrder) + :Component(owner) + ,mTexture(nullptr) + ,mDrawOrder(drawOrder) + ,mTexWidth(0) + ,mTexHeight(0) +{ + mOwner->GetGame()->AddSprite(this); +} + +SpriteComponent::~SpriteComponent() +{ + mOwner->GetGame()->RemoveSprite(this); +} + +void SpriteComponent::Draw(SDL_Renderer* renderer) +{ + if (mTexture) + { + SDL_Rect r; + // Scale the width/height by owner's scale + r.w = static_cast(mTexWidth * mOwner->GetScale()); + r.h = static_cast(mTexHeight * mOwner->GetScale()); + // Center the rectangle around the position of the owner + r.x = static_cast(mOwner->GetPosition().x - r.w / 2); + r.y = static_cast(mOwner->GetPosition().y - r.h / 2); + + // Draw (have to convert angle from radians to degrees, and clockwise to counter) + SDL_RenderCopyEx(renderer, + mTexture, + nullptr, + &r, + -Math::ToDegrees(mOwner->GetRotation()), + nullptr, + SDL_FLIP_NONE); + } +} + +void SpriteComponent::SetTexture(SDL_Texture* texture) +{ + mTexture = texture; + // Set width/height + SDL_QueryTexture(texture, nullptr, nullptr, &mTexWidth, &mTexHeight); +} diff --git a/Chapter04/SpriteComponent.h b/Chapter04/SpriteComponent.h new file mode 100644 index 00000000..a6c37a64 --- /dev/null +++ b/Chapter04/SpriteComponent.h @@ -0,0 +1,30 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "Component.h" +#include "SDL/SDL.h" +class SpriteComponent : public Component +{ +public: + // (Lower draw order corresponds with further back) + SpriteComponent(class Actor* owner, int drawOrder = 100); + ~SpriteComponent(); + + virtual void Draw(SDL_Renderer* renderer); + virtual void SetTexture(SDL_Texture* texture); + + int GetDrawOrder() const { return mDrawOrder; } + int GetTexHeight() const { return mTexHeight; } + int GetTexWidth() const { return mTexWidth; } +protected: + SDL_Texture* mTexture; + int mDrawOrder; + int mTexWidth; + int mTexHeight; +}; diff --git a/Chapter04/Tile.cpp b/Chapter04/Tile.cpp new file mode 100644 index 00000000..1a5af3f8 --- /dev/null +++ b/Chapter04/Tile.cpp @@ -0,0 +1,66 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "Tile.h" +#include "SpriteComponent.h" +#include "Game.h" + +Tile::Tile(class Game* game) +:Actor(game) +,mParent(nullptr) +,f(0.0f) +,g(0.0f) +,h(0.0f) +,mBlocked(false) +,mSprite(nullptr) +,mTileState(EDefault) +,mSelected(false) +{ + mSprite = new SpriteComponent(this); + UpdateTexture(); +} + +void Tile::SetTileState(TileState state) +{ + mTileState = state; + UpdateTexture(); +} + +void Tile::ToggleSelect() +{ + mSelected = !mSelected; + UpdateTexture(); +} + +void Tile::UpdateTexture() +{ + std::string text; + switch (mTileState) + { + case EStart: + text = "Assets/TileTan.png"; + break; + case EBase: + text = "Assets/TileGreen.png"; + break; + case EPath: + if (mSelected) + text = "Assets/TileGreySelected.png"; + else + text = "Assets/TileGrey.png"; + break; + case EDefault: + default: + if (mSelected) + text = "Assets/TileBrownSelected.png"; + else + text = "Assets/TileBrown.png"; + break; + } + mSprite->SetTexture(GetGame()->GetTexture(text)); +} diff --git a/Chapter04/Tile.h b/Chapter04/Tile.h new file mode 100644 index 00000000..de554ac2 --- /dev/null +++ b/Chapter04/Tile.h @@ -0,0 +1,44 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "Actor.h" +#include + +class Tile : public Actor +{ +public: + friend class Grid; + enum TileState + { + EDefault, + EPath, + EStart, + EBase + }; + + Tile(class Game* game); + + void SetTileState(TileState state); + TileState GetTileState() const { return mTileState; } + void ToggleSelect(); + const Tile* GetParent() const { return mParent; } +private: + // For pathfinding + std::vector mAdjacent; + Tile* mParent; + float f; + float g; + float h; + bool mBlocked; + + void UpdateTexture(); + class SpriteComponent* mSprite; + TileState mTileState; + bool mSelected; +}; diff --git a/Chapter04/Tower.cpp b/Chapter04/Tower.cpp new file mode 100644 index 00000000..d4e77d5a --- /dev/null +++ b/Chapter04/Tower.cpp @@ -0,0 +1,53 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "Tower.h" +#include "SpriteComponent.h" +#include "MoveComponent.h" +#include "Game.h" +#include "Enemy.h" +#include "Bullet.h" + +Tower::Tower(class Game* game) +:Actor(game) +{ + SpriteComponent* sc = new SpriteComponent(this, 200); + sc->SetTexture(game->GetTexture("Assets/Tower.png")); + + mMove = new MoveComponent(this); + //mMove->SetAngularSpeed(Math::Pi); + + mNextAttack = AttackTime; +} + +void Tower::UpdateActor(float deltaTime) +{ + Actor::UpdateActor(deltaTime); + + mNextAttack -= deltaTime; + if (mNextAttack <= 0.0f) + { + Enemy* e = GetGame()->GetNearestEnemy(GetPosition()); + if (e != nullptr) + { + // Vector from me to enemy + Vector2 dir = e->GetPosition() - GetPosition(); + float dist = dir.Length(); + if (dist < AttackRange) + { + // Rotate to face enemy + SetRotation(Math::Atan2(-dir.y, dir.x)); + // Spawn bullet at tower position facing enemy + Bullet* b = new Bullet(GetGame()); + b->SetPosition(GetPosition()); + b->SetRotation(GetRotation()); + } + } + mNextAttack += AttackTime; + } +} diff --git a/Chapter04/Tower.h b/Chapter04/Tower.h new file mode 100644 index 00000000..000d925e --- /dev/null +++ b/Chapter04/Tower.h @@ -0,0 +1,22 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "Actor.h" + +class Tower : public Actor +{ +public: + Tower(class Game* game); + void UpdateActor(float deltaTime) override; +private: + class MoveComponent* mMove; + float mNextAttack; + const float AttackTime = 2.5f; + const float AttackRange = 100.0f; +}; From c5dad81c7b8d997c2651ad18fd33a005b1551701 Mon Sep 17 00:00:00 2001 From: Sanjay Madhav Date: Wed, 22 Nov 2017 00:56:36 -0800 Subject: [PATCH 13/40] Moved over game framework changes from earlier chapters --- Chapter04/Actor.cpp | 40 +++++++-- Chapter04/Actor.h | 11 ++- Chapter04/Bullet.cpp | 5 +- Chapter04/Bullet.h | 4 +- Chapter04/CircleComponent.cpp | 19 ++++- Chapter04/CircleComponent.h | 10 ++- Chapter04/CollisionComponent.cpp | 20 ----- Chapter04/CollisionComponent.h | 17 ---- Chapter04/Component.cpp | 2 +- Chapter04/Component.h | 6 +- Chapter04/Enemy.cpp | 4 +- Chapter04/Enemy.h | 4 +- Chapter04/Game.cpp | 141 +++++++++++++++++++------------ Chapter04/Game.h | 7 +- Chapter04/Game.vcxproj | 2 - Chapter04/Game.vcxproj.filters | 6 -- Chapter04/Grid.cpp | 4 +- Chapter04/Grid.h | 26 +++++- Chapter04/Main.cpp | 2 +- Chapter04/Math.cpp | 2 +- Chapter04/Math.h | 2 +- Chapter04/MoveComponent.cpp | 4 +- Chapter04/MoveComponent.h | 4 +- Chapter04/NavComponent.cpp | 4 +- Chapter04/NavComponent.h | 4 +- Chapter04/SpriteComponent.cpp | 2 +- Chapter04/SpriteComponent.h | 2 +- Chapter04/Tile.cpp | 4 +- Chapter04/Tile.h | 4 +- Chapter04/Tower.cpp | 4 +- Chapter04/Tower.h | 4 +- 31 files changed, 216 insertions(+), 154 deletions(-) delete mode 100644 Chapter04/CollisionComponent.cpp delete mode 100644 Chapter04/CollisionComponent.h diff --git a/Chapter04/Actor.cpp b/Chapter04/Actor.cpp index 28b8dbbf..4b8eea91 100644 --- a/Chapter04/Actor.cpp +++ b/Chapter04/Actor.cpp @@ -3,7 +3,7 @@ // Copyright (C) 2017 Sanjay Madhav. All rights reserved. // // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #include "Actor.h" @@ -53,12 +53,42 @@ void Actor::UpdateActor(float deltaTime) { } +void Actor::ProcessInput(const uint8_t* keyState) +{ + if (mState == EActive) + { + // First process input for components + for (auto comp : mComponents) + { + comp->ProcessInput(keyState); + } + + ActorInput(keyState); + } +} + +void Actor::ActorInput(const uint8_t* keyState) +{ +} + void Actor::AddComponent(Component* component) { - mComponents.emplace_back(component); - std::sort(mComponents.begin(), mComponents.end(), [](Component* a, Component* b) { - return a->GetUpdateOrder() < b->GetUpdateOrder(); - }); + // Find the insertion point in the sorted vector + // (The first element with a order higher than me) + int myOrder = component->GetUpdateOrder(); + auto iter = mComponents.begin(); + for (; + iter != mComponents.end(); + ++iter) + { + if (myOrder < (*iter)->GetUpdateOrder()) + { + break; + } + } + + // Inserts element before position of iterator + mComponents.insert(iter, component); } void Actor::RemoveComponent(Component* component) diff --git a/Chapter04/Actor.h b/Chapter04/Actor.h index 76fd53c6..767d3c1a 100644 --- a/Chapter04/Actor.h +++ b/Chapter04/Actor.h @@ -3,12 +3,14 @@ // Copyright (C) 2017 Sanjay Madhav. All rights reserved. // // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #pragma once #include #include "Math.h" +#include + class Actor { public: @@ -29,6 +31,11 @@ class Actor // Any actor-specific update code (overridable) virtual void UpdateActor(float deltaTime); + // ProcessInput function called from Game (not overridable) + void ProcessInput(const uint8_t* keyState); + // Any actor-specific input code (overridable) + virtual void ActorInput(const uint8_t* keyState); + // Getters/setters const Vector2& GetPosition() const { return mPosition; } void SetPosition(const Vector2& pos) { mPosition = pos; } @@ -36,7 +43,7 @@ class Actor void SetScale(float scale) { mScale = scale; } float GetRotation() const { return mRotation; } void SetRotation(float rotation) { mRotation = rotation; } - + Vector2 GetForward() const { return Vector2(Math::Cos(mRotation), -Math::Sin(mRotation)); } State GetState() const { return mState; } diff --git a/Chapter04/Bullet.cpp b/Chapter04/Bullet.cpp index 8febb479..fddb6949 100644 --- a/Chapter04/Bullet.cpp +++ b/Chapter04/Bullet.cpp @@ -35,10 +35,7 @@ void Bullet::UpdateActor(float deltaTime) // Check for collision vs enemies for (Enemy* e : GetGame()->GetEnemies()) { - Vector2 diff = e->GetCircle()->GetCenter() - mCircle->GetCenter(); - float rad = e->GetCircle()->GetRadius() + mCircle->GetRadius(); - rad *= rad; - if (diff.LengthSq() <= rad) + if (Intersect(*mCircle, *(e->GetCircle()))) { // We both die on collision e->SetState(EDead); diff --git a/Chapter04/Bullet.h b/Chapter04/Bullet.h index bccdfbc4..2c1690c4 100644 --- a/Chapter04/Bullet.h +++ b/Chapter04/Bullet.h @@ -1,9 +1,9 @@ // ---------------------------------------------------------------- // From Game Programming in C++ by Sanjay Madhav // Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// +// // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #pragma once diff --git a/Chapter04/CircleComponent.cpp b/Chapter04/CircleComponent.cpp index 996b3ecc..d41aab2c 100644 --- a/Chapter04/CircleComponent.cpp +++ b/Chapter04/CircleComponent.cpp @@ -1,16 +1,16 @@ // ---------------------------------------------------------------- // From Game Programming in C++ by Sanjay Madhav // Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// +// // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #include "CircleComponent.h" #include "Actor.h" CircleComponent::CircleComponent(class Actor* owner) -:CollisionComponent(owner) +:Component(owner) ,mRadius(0.0f) { @@ -25,3 +25,16 @@ float CircleComponent::GetRadius() const { return mOwner->GetScale() * mRadius; } + +bool Intersect(const CircleComponent& a, const CircleComponent& b) +{ + // Calculate distance squared + Vector2 diff = a.GetCenter() - b.GetCenter(); + float distSq = diff.LengthSq(); + + // Calculate sum of radii squared + float radiiSq = a.GetRadius() + b.GetRadius(); + radiiSq *= radiiSq; + + return distSq <= radiiSq; +} diff --git a/Chapter04/CircleComponent.h b/Chapter04/CircleComponent.h index ed4c99a7..4eecb2a4 100644 --- a/Chapter04/CircleComponent.h +++ b/Chapter04/CircleComponent.h @@ -1,16 +1,16 @@ // ---------------------------------------------------------------- // From Game Programming in C++ by Sanjay Madhav // Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// +// // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #pragma once -#include "CollisionComponent.h" +#include "Component.h" #include "Math.h" -class CircleComponent : public CollisionComponent +class CircleComponent : public Component { public: CircleComponent(class Actor* owner); @@ -22,3 +22,5 @@ class CircleComponent : public CollisionComponent private: float mRadius; }; + +bool Intersect(const CircleComponent& a, const CircleComponent& b); diff --git a/Chapter04/CollisionComponent.cpp b/Chapter04/CollisionComponent.cpp deleted file mode 100644 index 79c626fc..00000000 --- a/Chapter04/CollisionComponent.cpp +++ /dev/null @@ -1,20 +0,0 @@ -// ---------------------------------------------------------------- -// From Game Programming in C++ by Sanjay Madhav -// Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// -// Released under the BSD License -// See LICENSE.txt for full details. -// ---------------------------------------------------------------- - -#include "CollisionComponent.h" - -CollisionComponent::CollisionComponent(class Actor* owner,int updateOrder) -:Component(owner, updateOrder) -{ - -} - -CollisionComponent::~CollisionComponent() -{ - -} diff --git a/Chapter04/CollisionComponent.h b/Chapter04/CollisionComponent.h deleted file mode 100644 index 4074fa58..00000000 --- a/Chapter04/CollisionComponent.h +++ /dev/null @@ -1,17 +0,0 @@ -// ---------------------------------------------------------------- -// From Game Programming in C++ by Sanjay Madhav -// Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// -// Released under the BSD License -// See LICENSE.txt for full details. -// ---------------------------------------------------------------- - -#pragma once -#include "Component.h" -class CollisionComponent : public Component -{ -public: - CollisionComponent(class Actor* owner, int updateOrder = 100); - ~CollisionComponent(); -}; - diff --git a/Chapter04/Component.cpp b/Chapter04/Component.cpp index 9b345987..c4ed432d 100644 --- a/Chapter04/Component.cpp +++ b/Chapter04/Component.cpp @@ -3,7 +3,7 @@ // Copyright (C) 2017 Sanjay Madhav. All rights reserved. // // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #include "Component.h" diff --git a/Chapter04/Component.h b/Chapter04/Component.h index 26d6fb87..fb41dd75 100644 --- a/Chapter04/Component.h +++ b/Chapter04/Component.h @@ -3,10 +3,12 @@ // Copyright (C) 2017 Sanjay Madhav. All rights reserved. // // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #pragma once +#include + class Component { public: @@ -17,6 +19,8 @@ class Component virtual ~Component(); // Update this component by delta time virtual void Update(float deltaTime); + // Process input for this component + virtual void ProcessInput(const uint8_t* keyState) {} int GetUpdateOrder() const { return mUpdateOrder; } protected: diff --git a/Chapter04/Enemy.cpp b/Chapter04/Enemy.cpp index 72400715..ce3d5951 100644 --- a/Chapter04/Enemy.cpp +++ b/Chapter04/Enemy.cpp @@ -1,9 +1,9 @@ // ---------------------------------------------------------------- // From Game Programming in C++ by Sanjay Madhav // Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// +// // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #include "Enemy.h" diff --git a/Chapter04/Enemy.h b/Chapter04/Enemy.h index b8777550..72e33f08 100644 --- a/Chapter04/Enemy.h +++ b/Chapter04/Enemy.h @@ -1,9 +1,9 @@ // ---------------------------------------------------------------- // From Game Programming in C++ by Sanjay Madhav // Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// +// // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #pragma once diff --git a/Chapter04/Game.cpp b/Chapter04/Game.cpp index accc9a14..a2ae0363 100644 --- a/Chapter04/Game.cpp +++ b/Chapter04/Game.cpp @@ -3,7 +3,7 @@ // Copyright (C) 2017 Sanjay Madhav. All rights reserved. // // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #include "Game.h" @@ -18,6 +18,7 @@ Game::Game() :mWindow(nullptr) ,mRenderer(nullptr) ,mIsRunning(true) +,mUpdatingActors(false) { } @@ -30,7 +31,7 @@ bool Game::Initialize() return false; } - mWindow = SDL_CreateWindow("Game Programming in C++ (Chapter 5)", 100, 100, 1024, 768, 0); + mWindow = SDL_CreateWindow("Game Programming in C++ (Chapter 4)", 100, 100, 1024, 768, 0); if (!mWindow) { SDL_Log("Failed to create window: %s", SDL_GetError()); @@ -80,12 +81,13 @@ void Game::ProcessInput() } } - const Uint8* state = SDL_GetKeyboardState(NULL); - if (state[SDL_SCANCODE_ESCAPE]) + const Uint8* keyState = SDL_GetKeyboardState(NULL); + if (keyState[SDL_SCANCODE_ESCAPE]) { mIsRunning = false; } - if (state[SDL_SCANCODE_B]) + + if (keyState[SDL_SCANCODE_B]) { mGrid->BuildTower(); } @@ -97,6 +99,13 @@ void Game::ProcessInput() { mGrid->ProcessClick(x, y); } + + mUpdatingActors = true; + for (auto actor : mActors) + { + actor->ProcessInput(keyState); + } + mUpdatingActors = false; } void Game::UpdateGame() @@ -113,15 +122,20 @@ void Game::UpdateGame() } mTicksCount = SDL_GetTicks(); - // Make copy of actor vector - // (iterate over this in case new actors are created) - std::vector copy = mActors; - // Update all actors - for (auto actor : copy) + mUpdatingActors = true; + for (auto actor : mActors) { actor->Update(deltaTime); } + mUpdatingActors = false; + + // Move any pending actors to mActors + for (auto pending : mPendingActors) + { + mActors.emplace_back(pending); + } + mPendingActors.clear(); // Add any dead actors to a temp vector std::vector deadActors; @@ -133,8 +147,7 @@ void Game::UpdateGame() } } - // Delete any of the dead actors (which will - // remove them from mActors) + // Delete dead actors (which removes them from mActors) for (auto actor : deadActors) { delete actor; @@ -157,20 +170,6 @@ void Game::GenerateOutput() void Game::LoadData() { - // Load textures - LoadTexture("Assets/TileBrown.png"); - LoadTexture("Assets/TileGreen.png"); - LoadTexture("Assets/TileGrey.png"); - LoadTexture("Assets/TileTan.png"); - LoadTexture("Assets/TileBrownSelected.png"); - LoadTexture("Assets/TileGreenSelected.png"); - LoadTexture("Assets/TileGreySelected.png"); - LoadTexture("Assets/TileTanSelected.png"); - LoadTexture("Assets/Base.png"); - LoadTexture("Assets/Tower.png"); - LoadTexture("Assets/Airplane.png"); - LoadTexture("Assets/Projectile.png"); - mGrid = new Grid(this); } @@ -191,36 +190,36 @@ void Game::UnloadData() mTextures.clear(); } -void Game::LoadTexture(const char* fileName) -{ - // Load from file - SDL_Surface* surf = IMG_Load(fileName); - if (!surf) - { - SDL_Log("Failed to load texture file %s", fileName); - return; - } - - // Create texture from surface - SDL_Texture* text = SDL_CreateTextureFromSurface(mRenderer, surf); - SDL_FreeSurface(surf); - if (!text) - { - SDL_Log("Failed to convert surface to texture for %s", fileName); - return; - } - - mTextures.emplace(fileName, text); -} - -SDL_Texture * Game::GetTexture(const std::string& fileName) +SDL_Texture* Game::GetTexture(const std::string& fileName) { SDL_Texture* tex = nullptr; + // Is the texture already in the map? auto iter = mTextures.find(fileName); if (iter != mTextures.end()) { tex = iter->second; } + else + { + // Load from file + SDL_Surface* surf = IMG_Load(fileName.c_str()); + if (!surf) + { + SDL_Log("Failed to load texture file %s", fileName.c_str()); + return nullptr; + } + + // Create texture from surface + tex = SDL_CreateTextureFromSurface(mRenderer, surf); + SDL_FreeSurface(surf); + if (!tex) + { + SDL_Log("Failed to convert surface to texture for %s", fileName.c_str()); + return nullptr; + } + + mTextures.emplace(fileName.c_str(), tex); + } return tex; } @@ -235,12 +234,30 @@ void Game::Shutdown() void Game::AddActor(Actor* actor) { - mActors.emplace_back(actor); + // If we're updating actors, need to add to pending + if (mUpdatingActors) + { + mPendingActors.emplace_back(actor); + } + else + { + mActors.emplace_back(actor); + } } void Game::RemoveActor(Actor* actor) { - auto iter = std::find(mActors.begin(), mActors.end(), actor); + // Is it in pending actors? + auto iter = std::find(mPendingActors.begin(), mPendingActors.end(), actor); + if (iter != mPendingActors.end()) + { + // Swap to end of vector and pop off (avoid erase copies) + std::iter_swap(iter, mPendingActors.end() - 1); + mPendingActors.pop_back(); + } + + // Is it in actors? + iter = std::find(mActors.begin(), mActors.end(), actor); if (iter != mActors.end()) { // Swap to end of vector and pop off (avoid erase copies) @@ -251,15 +268,27 @@ void Game::RemoveActor(Actor* actor) void Game::AddSprite(SpriteComponent* sprite) { - mSprites.emplace_back(sprite); - // Resort sprites by draw order - std::sort(mSprites.begin(), mSprites.end(), [](SpriteComponent* a, SpriteComponent* b) { - return a->GetDrawOrder() < b->GetDrawOrder(); - }); + // Find the insertion point in the sorted vector + // (The first element with a higher draw order than me) + int myDrawOrder = sprite->GetDrawOrder(); + auto iter = mSprites.begin(); + for ( ; + iter != mSprites.end(); + ++iter) + { + if (myDrawOrder < (*iter)->GetDrawOrder()) + { + break; + } + } + + // Inserts element before position of iterator + mSprites.insert(iter, sprite); } void Game::RemoveSprite(SpriteComponent* sprite) { + // (We can't swap because it ruins ordering) auto iter = std::find(mSprites.begin(), mSprites.end(), sprite); mSprites.erase(iter); } diff --git a/Chapter04/Game.h b/Chapter04/Game.h index ae5a40d7..56a0ecb4 100644 --- a/Chapter04/Game.h +++ b/Chapter04/Game.h @@ -3,7 +3,7 @@ // Copyright (C) 2017 Sanjay Madhav. All rights reserved. // // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #pragma once @@ -27,7 +27,6 @@ class Game void AddSprite(class SpriteComponent* sprite); void RemoveSprite(class SpriteComponent* sprite); - void LoadTexture(const char* fileName); SDL_Texture* GetTexture(const std::string& fileName); class Grid* GetGrid() { return mGrid; } @@ -45,6 +44,8 @@ class Game // All the actors in the game std::vector mActors; + // Any pending actors + std::vector mPendingActors; // All the sprite components drawn std::vector mSprites; @@ -53,6 +54,8 @@ class Game SDL_Renderer* mRenderer; Uint32 mTicksCount; bool mIsRunning; + // Track if we're updating actors right now + bool mUpdatingActors; // Game-specific std::vector mEnemies; diff --git a/Chapter04/Game.vcxproj b/Chapter04/Game.vcxproj index 0b334498..1cc7a451 100644 --- a/Chapter04/Game.vcxproj +++ b/Chapter04/Game.vcxproj @@ -14,7 +14,6 @@ - @@ -31,7 +30,6 @@ - diff --git a/Chapter04/Game.vcxproj.filters b/Chapter04/Game.vcxproj.filters index bb5a9195..823bb927 100644 --- a/Chapter04/Game.vcxproj.filters +++ b/Chapter04/Game.vcxproj.filters @@ -31,9 +31,6 @@ Source Files - - Source Files - Source Files @@ -75,9 +72,6 @@ Source Files - - Source Files - Source Files diff --git a/Chapter04/Grid.cpp b/Chapter04/Grid.cpp index 95b62bbe..d698f3e7 100644 --- a/Chapter04/Grid.cpp +++ b/Chapter04/Grid.cpp @@ -1,9 +1,9 @@ // ---------------------------------------------------------------- // From Game Programming in C++ by Sanjay Madhav // Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// +// // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #include "Grid.h" diff --git a/Chapter04/Grid.h b/Chapter04/Grid.h index 159874ed..a69ac893 100644 --- a/Chapter04/Grid.h +++ b/Chapter04/Grid.h @@ -1,9 +1,9 @@ // ---------------------------------------------------------------- // From Game Programming in C++ by Sanjay Madhav // Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// +// // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #pragma once @@ -14,22 +14,44 @@ class Grid : public Actor { public: Grid(class Game* game); + + // Handle a mouse click at the x/y screen locations void ProcessClick(int x, int y); + + // Use A* to find a path bool FindPath(class Tile* start, class Tile* goal); + + // Try to build a tower void BuildTower(); + + // Get start/end tile class Tile* GetStartTile(); class Tile* GetEndTile(); + void UpdateActor(float deltaTime) override; private: + // Select a specific tile void SelectTile(size_t row, size_t col); + + // Update textures for tiles on path void UpdatePathTiles(class Tile* start); + + // Currently selected tile class Tile* mSelectedTile; + + // 2D vector of tiles in grid std::vector> mTiles; + + // Time until next enemy float mNextEnemy; + // Rows/columns in grid const size_t NumRows = 7; const size_t NumCols = 16; + // Start y position of top left corner const float StartY = 192.0f; + // Width/height of each tile const float TileSize = 64.0f; + // Time between enemies const float EnemyTime = 1.5f; }; diff --git a/Chapter04/Main.cpp b/Chapter04/Main.cpp index d140a430..52b5f67a 100644 --- a/Chapter04/Main.cpp +++ b/Chapter04/Main.cpp @@ -3,7 +3,7 @@ // Copyright (C) 2017 Sanjay Madhav. All rights reserved. // // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #include "Game.h" diff --git a/Chapter04/Math.cpp b/Chapter04/Math.cpp index 9e1b7932..fb40e095 100644 --- a/Chapter04/Math.cpp +++ b/Chapter04/Math.cpp @@ -3,7 +3,7 @@ // Copyright (C) 2017 Sanjay Madhav. All rights reserved. // // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #include "Math.h" diff --git a/Chapter04/Math.h b/Chapter04/Math.h index 51de3a26..752963f1 100644 --- a/Chapter04/Math.h +++ b/Chapter04/Math.h @@ -3,7 +3,7 @@ // Copyright (C) 2017 Sanjay Madhav. All rights reserved. // // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #pragma once diff --git a/Chapter04/MoveComponent.cpp b/Chapter04/MoveComponent.cpp index 3c9730bc..cdf1fdf9 100644 --- a/Chapter04/MoveComponent.cpp +++ b/Chapter04/MoveComponent.cpp @@ -1,9 +1,9 @@ // ---------------------------------------------------------------- // From Game Programming in C++ by Sanjay Madhav // Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// +// // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #include "MoveComponent.h" diff --git a/Chapter04/MoveComponent.h b/Chapter04/MoveComponent.h index 11d18cb5..def7d389 100644 --- a/Chapter04/MoveComponent.h +++ b/Chapter04/MoveComponent.h @@ -1,9 +1,9 @@ // ---------------------------------------------------------------- // From Game Programming in C++ by Sanjay Madhav // Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// +// // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #pragma once diff --git a/Chapter04/NavComponent.cpp b/Chapter04/NavComponent.cpp index 427b9dc5..a80d38ce 100644 --- a/Chapter04/NavComponent.cpp +++ b/Chapter04/NavComponent.cpp @@ -1,9 +1,9 @@ // ---------------------------------------------------------------- // From Game Programming in C++ by Sanjay Madhav // Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// +// // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #include "NavComponent.h" diff --git a/Chapter04/NavComponent.h b/Chapter04/NavComponent.h index d085827e..b79c721f 100644 --- a/Chapter04/NavComponent.h +++ b/Chapter04/NavComponent.h @@ -1,9 +1,9 @@ // ---------------------------------------------------------------- // From Game Programming in C++ by Sanjay Madhav // Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// +// // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #pragma once diff --git a/Chapter04/SpriteComponent.cpp b/Chapter04/SpriteComponent.cpp index d22efb6c..56884fbc 100644 --- a/Chapter04/SpriteComponent.cpp +++ b/Chapter04/SpriteComponent.cpp @@ -3,7 +3,7 @@ // Copyright (C) 2017 Sanjay Madhav. All rights reserved. // // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #include "SpriteComponent.h" diff --git a/Chapter04/SpriteComponent.h b/Chapter04/SpriteComponent.h index a6c37a64..c430e888 100644 --- a/Chapter04/SpriteComponent.h +++ b/Chapter04/SpriteComponent.h @@ -3,7 +3,7 @@ // Copyright (C) 2017 Sanjay Madhav. All rights reserved. // // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #pragma once diff --git a/Chapter04/Tile.cpp b/Chapter04/Tile.cpp index 1a5af3f8..90e5c781 100644 --- a/Chapter04/Tile.cpp +++ b/Chapter04/Tile.cpp @@ -1,9 +1,9 @@ // ---------------------------------------------------------------- // From Game Programming in C++ by Sanjay Madhav // Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// +// // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #include "Tile.h" diff --git a/Chapter04/Tile.h b/Chapter04/Tile.h index de554ac2..5e219b4b 100644 --- a/Chapter04/Tile.h +++ b/Chapter04/Tile.h @@ -1,9 +1,9 @@ // ---------------------------------------------------------------- // From Game Programming in C++ by Sanjay Madhav // Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// +// // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #pragma once diff --git a/Chapter04/Tower.cpp b/Chapter04/Tower.cpp index d4e77d5a..20d60dea 100644 --- a/Chapter04/Tower.cpp +++ b/Chapter04/Tower.cpp @@ -1,9 +1,9 @@ // ---------------------------------------------------------------- // From Game Programming in C++ by Sanjay Madhav // Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// +// // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #include "Tower.h" diff --git a/Chapter04/Tower.h b/Chapter04/Tower.h index 000d925e..bfbf12ff 100644 --- a/Chapter04/Tower.h +++ b/Chapter04/Tower.h @@ -1,9 +1,9 @@ // ---------------------------------------------------------------- // From Game Programming in C++ by Sanjay Madhav // Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// +// // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #pragma once From 10efcf8fa3338d8be4c9b31cfdcf6aa87a6eea15 Mon Sep 17 00:00:00 2001 From: Sanjay Madhav Date: Wed, 22 Nov 2017 18:12:45 -0800 Subject: [PATCH 14/40] Added AIComponent/AIState code --- Chapter04/AIComponent.cpp | 54 ++++++++++++++++++++++++++ Chapter04/AIComponent.h | 29 ++++++++++++++ Chapter04/AIState.cpp | 61 +++++++++++++++++++++++++++++ Chapter04/AIState.h | 71 ++++++++++++++++++++++++++++++++++ Chapter04/Game.cpp | 12 ++++++ Chapter04/Game.vcxproj | 4 ++ Chapter04/Game.vcxproj.filters | 12 ++++++ 7 files changed, 243 insertions(+) create mode 100644 Chapter04/AIComponent.cpp create mode 100644 Chapter04/AIComponent.h create mode 100644 Chapter04/AIState.cpp create mode 100644 Chapter04/AIState.h diff --git a/Chapter04/AIComponent.cpp b/Chapter04/AIComponent.cpp new file mode 100644 index 00000000..e88ac6ab --- /dev/null +++ b/Chapter04/AIComponent.cpp @@ -0,0 +1,54 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "AIComponent.h" +#include "Actor.h" +#include "AIState.h" +#include + +AIComponent::AIComponent(class Actor* owner) +:Component(owner) +,mCurrentState(nullptr) +{ +} + +void AIComponent::Update(float deltaTime) +{ + if (mCurrentState) + { + mCurrentState->Update(deltaTime); + } +} + +void AIComponent::ChangeState(const std::string& name) +{ + // First exit the current state + if (mCurrentState) + { + mCurrentState->OnExit(); + } + + // Try to find the new state from the map + auto iter = mStateMap.find(name); + if (iter != mStateMap.end()) + { + mCurrentState = iter->second; + // We're entering the new state + mCurrentState->OnEnter(); + } + else + { + SDL_Log("Could not find AIState %s in state map", name.c_str()); + mCurrentState = nullptr; + } +} + +void AIComponent::RegisterState(AIState* state) +{ + mStateMap.emplace(state->GetName(), state); +} diff --git a/Chapter04/AIComponent.h b/Chapter04/AIComponent.h new file mode 100644 index 00000000..932de9a1 --- /dev/null +++ b/Chapter04/AIComponent.h @@ -0,0 +1,29 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "Component.h" +#include +#include + +class AIComponent : public Component +{ +public: + AIComponent(class Actor* owner); + + void Update(float deltaTime) override; + void ChangeState(const std::string& name); + + // Add a new state to the map + void RegisterState(class AIState* state); +private: + // Maps name of state to AIState instance + std::unordered_map mStateMap; + // Current state we're in + class AIState* mCurrentState; +}; diff --git a/Chapter04/AIState.cpp b/Chapter04/AIState.cpp new file mode 100644 index 00000000..673e9b42 --- /dev/null +++ b/Chapter04/AIState.cpp @@ -0,0 +1,61 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "AIState.h" +#include "AIComponent.h" +#include + +void AIPatrol::Update(float deltaTime) +{ + SDL_Log("Updating %s state", GetName()); + bool dead = true; + if (dead) + { + mOwner->ChangeState("Death"); + } +} + +void AIPatrol::OnEnter() +{ + SDL_Log("Entering %s state", GetName()); +} + +void AIPatrol::OnExit() +{ + SDL_Log("Exiting %s state", GetName()); +} + +void AIDeath::Update(float deltaTime) +{ + SDL_Log("Updating %s state", GetName()); +} + +void AIDeath::OnEnter() +{ + SDL_Log("Entering %s state", GetName()); +} + +void AIDeath::OnExit() +{ + SDL_Log("Exiting %s state", GetName()); +} + +void AIAttack::Update(float deltaTime) +{ + SDL_Log("Updating %s state", GetName()); +} + +void AIAttack::OnEnter() +{ + SDL_Log("Entering %s state", GetName()); +} + +void AIAttack::OnExit() +{ + SDL_Log("Exiting %s state", GetName()); +} diff --git a/Chapter04/AIState.h b/Chapter04/AIState.h new file mode 100644 index 00000000..67ef2fd1 --- /dev/null +++ b/Chapter04/AIState.h @@ -0,0 +1,71 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once + +class AIState +{ +public: + AIState(class AIComponent* owner) + :mOwner(owner) + { } + // State-specific behavior + virtual void Update(float deltaTime) = 0; + virtual void OnEnter() = 0; + virtual void OnExit() = 0; + // Getter for string name of state + virtual const char* GetName() const = 0; +protected: + class AIComponent* mOwner; +}; + +class AIPatrol : public AIState +{ +public: + AIPatrol(class AIComponent* owner) + :AIState(owner) + { } + + // Override with behaviors for this state + void Update(float deltaTime) override; + void OnEnter() override; + void OnExit() override; + + const char* GetName() const override + { return "Patrol"; } +}; + +class AIDeath : public AIState +{ +public: + AIDeath(class AIComponent* owner) + :AIState(owner) + { } + + void Update(float deltaTime) override; + void OnEnter() override; + void OnExit() override; + + const char* GetName() const override + { return "Death"; } +}; + +class AIAttack : public AIState +{ +public: + AIAttack(class AIComponent* owner) + :AIState(owner) + { } + + void Update(float deltaTime) override; + void OnEnter() override; + void OnExit() override; + + const char* GetName() const override + { return "Attack"; } +}; diff --git a/Chapter04/Game.cpp b/Chapter04/Game.cpp index a2ae0363..c044257c 100644 --- a/Chapter04/Game.cpp +++ b/Chapter04/Game.cpp @@ -13,6 +13,8 @@ #include "SpriteComponent.h" #include "Grid.h" #include "Enemy.h" +#include "AIComponent.h" +#include "AIState.h" Game::Game() :mWindow(nullptr) @@ -171,6 +173,16 @@ void Game::GenerateOutput() void Game::LoadData() { mGrid = new Grid(this); + + // For testing AIComponent + //Actor* a = new Actor(this); + //AIComponent* aic = new AIComponent(a); + //// Register states with AIComponent + //aic->RegisterState(new AIPatrol(aic)); + //aic->RegisterState(new AIDeath(aic)); + //aic->RegisterState(new AIAttack(aic)); + //// Start in patrol state + //aic->ChangeState("Patrol"); } void Game::UnloadData() diff --git a/Chapter04/Game.vcxproj b/Chapter04/Game.vcxproj index 1cc7a451..51fe6f7b 100644 --- a/Chapter04/Game.vcxproj +++ b/Chapter04/Game.vcxproj @@ -12,6 +12,8 @@ + + @@ -28,6 +30,8 @@ + + diff --git a/Chapter04/Game.vcxproj.filters b/Chapter04/Game.vcxproj.filters index 823bb927..08b9b304 100644 --- a/Chapter04/Game.vcxproj.filters +++ b/Chapter04/Game.vcxproj.filters @@ -49,6 +49,12 @@ Source Files + + Source Files + + + Source Files + @@ -90,5 +96,11 @@ Source Files + + Source Files + + + Source Files + \ No newline at end of file From ec2086dc08a92fe7ee41d6b08723b7a3d49cd99d Mon Sep 17 00:00:00 2001 From: Sanjay Madhav Date: Wed, 22 Nov 2017 18:13:16 -0800 Subject: [PATCH 15/40] Added testBFS and changed BFS to use map for data --- Chapter04/Main.cpp | 75 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 56 insertions(+), 19 deletions(-) diff --git a/Chapter04/Main.cpp b/Chapter04/Main.cpp index 52b5f67a..e0964509 100644 --- a/Chapter04/Main.cpp +++ b/Chapter04/Main.cpp @@ -15,8 +15,6 @@ struct GraphNode { // Adjacency list std::vector mAdjacent; - // Previous node visited on path - GraphNode* mParent; }; struct Graph @@ -116,9 +114,9 @@ bool AStar(WeightedGraph& g, WeightedGraphNode* start, // Find lowest cost node in open set auto iter = std::min_element(openSet.begin(), openSet.end(), - [](WeightedGraphNode* a, WeightedGraphNode* b) { - return a->f < b->f; - }); + [](WeightedGraphNode* a, WeightedGraphNode* b) { + return a->f < b->f; + }); // Set to current and move from open to closed current = *iter; openSet.erase(iter); @@ -191,15 +189,12 @@ bool GBFS(WeightedGraph& g, WeightedGraphNode* start, return (current == goal) ? true : false; } -bool BFS(Graph& graph, GraphNode* start, GraphNode* goal) -{ - // Reset mParent for all nodes - for (GraphNode* node : graph.mNodes) - { - node->mParent = nullptr; - } - - // Whether or not we found a path +using NodeToParentMap = + std::unordered_map; + +bool BFS(Graph& graph, GraphNode* start, GraphNode* goal, NodeToParentMap& outMap) +{ + // Whether we found a path bool pathFound = false; // Nodes to consider std::queue q; @@ -217,15 +212,16 @@ bool BFS(Graph& graph, GraphNode* start, GraphNode* goal) break; } - // Enqueue adjacent nodes that aren't already queued + // Enqueue adjacent nodes that aren't already in the queue for (GraphNode* node : current->mAdjacent) { // If the parent is null, it hasn't been enqueued // (except for the start node) - if (node->mParent == nullptr && node != start) + GraphNode* parent = outMap[node]; + if (parent == nullptr && node != start) { // Enqueue this node, setting its parent - node->mParent = current; + outMap[node] = current; q.emplace(node); } } @@ -234,7 +230,48 @@ bool BFS(Graph& graph, GraphNode* start, GraphNode* goal) return pathFound; } -void test() +void testBFS() +{ + Graph g; + for (int i = 0; i < 5; i++) + { + for (int j = 0; j < 5; j++) + { + GraphNode* node = new GraphNode; + g.mNodes.emplace_back(node); + } + } + + for (int i = 0; i < 5; i++) + { + for (int j = 0; j < 5; j++) + { + GraphNode* node = g.mNodes[i * 5 + j]; + if (i > 0) + { + node->mAdjacent.emplace_back(g.mNodes[(i - 1) * 5 + j]); + } + if (i < 4) + { + node->mAdjacent.emplace_back(g.mNodes[(i + 1) * 5 + j]); + } + if (j > 0) + { + node->mAdjacent.emplace_back(g.mNodes[i * 5 + j - 1]); + } + if (j < 4) + { + node->mAdjacent.emplace_back(g.mNodes[i * 5 + j + 1]); + } + } + } + + NodeToParentMap map; + bool found = BFS(g, g.mNodes[0], g.mNodes[9], map); + std::cout << found << '\n'; +} + +void testAStar() { WeightedGraph g; for (int i = 0; i < 5; i++) @@ -512,7 +549,7 @@ GTNode* AlphaBetaDecide(GTNode* root) return choice; } -void test2() +void testTicTac() { GTNode* root = new GTNode; root->mState.mBoard[0][0] = GameState::O; From 0609f03727d8533fc1215c3f897590e9c5a2b993 Mon Sep 17 00:00:00 2001 From: Sanjay Madhav Date: Wed, 22 Nov 2017 19:03:28 -0800 Subject: [PATCH 16/40] Refactor pathfinding to use scratch space --- Chapter04/Grid.cpp | 22 +++---- Chapter04/Main.cpp | 150 +++++++++++++++++++++++++-------------------- Chapter04/Tile.h | 2 + 3 files changed, 96 insertions(+), 78 deletions(-) diff --git a/Chapter04/Grid.cpp b/Chapter04/Grid.cpp index d698f3e7..b81a7265 100644 --- a/Chapter04/Grid.cpp +++ b/Chapter04/Grid.cpp @@ -106,16 +106,16 @@ bool Grid::FindPath(Tile* start, Tile* goal) for (size_t j = 0; j < NumCols; j++) { mTiles[i][j]->g = 0.0f; + mTiles[i][j]->mInOpenSet = false; + mTiles[i][j]->mInClosedSet = false; } } - // Open/closed sets std::vector openSet; - std::vector closedSet; // Set current node to start, and add to closed set Tile* current = start; - closedSet.emplace_back(current); + current->mInClosedSet = true; do { @@ -128,27 +128,24 @@ bool Grid::FindPath(Tile* start, Tile* goal) } // Only check nodes that aren't in the closed set - auto iter = std::find(closedSet.begin(), closedSet.end(), - neighbor); - if (iter == closedSet.end()) + if (!neighbor->mInClosedSet) { - iter = std::find(openSet.begin(), openSet.end(), neighbor); - if (iter == openSet.end()) + if (!neighbor->mInOpenSet) { // Not in the open set, so set parent neighbor->mParent = current; - neighbor->h = Math::Abs(neighbor->GetPosition().x - goal->GetPosition().x) - + Math::Abs(neighbor->GetPosition().y - goal->GetPosition().y); + neighbor->h = (neighbor->GetPosition() - goal->GetPosition()).Length(); // g(x) is the parent's g plus cost of traversing edge neighbor->g = current->g + TileSize; neighbor->f = neighbor->g + neighbor->h; openSet.emplace_back(neighbor); + neighbor->mInOpenSet = true; } else { // Compute g(x) cost if current becomes the parent float newG = current->g + TileSize; - if (newG < current->g) + if (newG < neighbor->g) { // Adopt this node neighbor->mParent = current; @@ -174,7 +171,8 @@ bool Grid::FindPath(Tile* start, Tile* goal) // Set to current and move from open to closed current = *iter; openSet.erase(iter); - closedSet.emplace_back(current); + current->mInOpenSet = false; + current->mInClosedSet = true; } while (current != goal); diff --git a/Chapter04/Main.cpp b/Chapter04/Main.cpp index e0964509..88c40403 100644 --- a/Chapter04/Main.cpp +++ b/Chapter04/Main.cpp @@ -31,76 +31,85 @@ struct WeightedEdge // Weight of this edge float mWeight; }; + struct WeightedGraphNode { std::vector mEdges; - // Edge from parent to me - WeightedEdge* mParentEdge; - float f; - float g; - float h; }; + struct WeightedGraph { std::vector mNodes; }; +struct GBFSScratch +{ + WeightedEdge* mParentEdge = nullptr; + float mHeuristic = 0.0f; + bool mInOpenSet = false; + bool mInClosedSet = false; +}; + +using GBFSMap = + std::unordered_map; + +struct AStarScratch +{ + WeightedEdge* mParentEdge = nullptr; + float mHeuristic = 0.0f; + float mActualFromStart = 0.0f; + bool mInOpenSet = false; + bool mInClosedSet = false; +}; + +using AStarMap = + std::unordered_map; + float ComputeHeuristic(WeightedGraphNode* a, WeightedGraphNode* b) { return 0.0f; } bool AStar(WeightedGraph& g, WeightedGraphNode* start, - WeightedGraphNode* goal) + WeightedGraphNode* goal, AStarMap& outMap) { - // Reset mParentEdge for all nodes - for (WeightedGraphNode* node : g.mNodes) - { - node->mParentEdge = nullptr; - } - - // Open/closed sets std::vector openSet; - std::vector closedSet; - // Set current node to start, and add to closed set + // Set current node to start, and mark in closed set WeightedGraphNode* current = start; - closedSet.emplace_back(current); + outMap[current].mInClosedSet = true; do { // Add adjacent nodes to open set for (WeightedEdge* edge : current->mEdges) { + WeightedGraphNode* neighbor = edge->mTo; + // Get scratch data for this node + AStarScratch& data = outMap[neighbor]; // Only check nodes that aren't in the closed set - auto iter = std::find(closedSet.begin(), closedSet.end(), - edge->mTo); - if (iter == closedSet.end()) + if (!data.mInClosedSet) { - iter = std::find(openSet.begin(), openSet.end(), edge->mTo); - if (iter == openSet.end()) + if (!data.mInOpenSet) { - // Not in the open set, so set parent - WeightedGraphNode* neighbor = edge->mTo; - neighbor->mParentEdge = edge; - neighbor->h = ComputeHeuristic(neighbor, goal); - // g(x) is the parent's g plus cost of traversing edge - neighbor->g = current->g + edge->mWeight; - neighbor->f = neighbor->g + neighbor->h; + // Not in the open set, so parent must be current + data.mParentEdge = edge; + data.mHeuristic = ComputeHeuristic(neighbor, goal); + // Actual cost is the parent's plus cost of traversing edge + data.mActualFromStart = outMap[current].mActualFromStart + + edge->mWeight; + data.mInOpenSet = true; openSet.emplace_back(neighbor); } else { - WeightedGraphNode* neighbor = edge->mTo; - // Compute g(x) cost if current becomes the parent - float newG = current->g + edge->mWeight; - if (newG < current->g) + // Compute what new actual cost is if current becomes parent + float newG = outMap[current].mActualFromStart + edge->mWeight; + if (newG < data.mActualFromStart) { - // Adopt this node - neighbor->mParentEdge = edge; - neighbor->g = newG; - // f(x) changes because g(x) changes - neighbor->f = neighbor->g + neighbor->h; + // Current should adopt this node + data.mParentEdge = edge; + data.mActualFromStart = newG; } } } @@ -114,13 +123,17 @@ bool AStar(WeightedGraph& g, WeightedGraphNode* start, // Find lowest cost node in open set auto iter = std::min_element(openSet.begin(), openSet.end(), - [](WeightedGraphNode* a, WeightedGraphNode* b) { - return a->f < b->f; + [&outMap](WeightedGraphNode* a, WeightedGraphNode* b) { + // Calculate f(x) for nodes a/b + float fOfA = outMap[a].mHeuristic + outMap[a].mActualFromStart; + float fOfB = outMap[b].mHeuristic + outMap[b].mActualFromStart; + return fOfA < fOfB; }); // Set to current and move from open to closed current = *iter; openSet.erase(iter); - closedSet.emplace_back(current); + outMap[current].mInOpenSet = true; + outMap[current].mInClosedSet = true; } while (current != goal); @@ -129,39 +142,31 @@ bool AStar(WeightedGraph& g, WeightedGraphNode* start, } bool GBFS(WeightedGraph& g, WeightedGraphNode* start, - WeightedGraphNode* goal) + WeightedGraphNode* goal, GBFSMap& outMap) { - // Reset mParentEdge for all nodes - for (WeightedGraphNode* node : g.mNodes) - { - node->mParentEdge = nullptr; - } - - // Open/closed sets std::vector openSet; - std::vector closedSet; - // Set current node to start, and add to closed set + // Set current node to start, and mark in closed set WeightedGraphNode* current = start; - closedSet.emplace_back(current); + outMap[current].mInClosedSet = true; do { // Add adjacent nodes to open set for (WeightedEdge* edge : current->mEdges) { - // Only check nodes that aren't in the closed set - auto iter = std::find(closedSet.begin(), closedSet.end(), - edge->mTo); - if (iter == closedSet.end()) + // Get scratch data for this node + GBFSScratch& data = outMap[edge->mTo]; + // Add it only if it's not in the closed set + if (!data.mInClosedSet) { // Set the adjacent node's parent edge - edge->mTo->mParentEdge = edge; - iter = std::find(openSet.begin(), openSet.end(), edge->mTo); - if (iter == openSet.end()) + data.mParentEdge = edge; + if (!data.mInOpenSet) { // Compute the heuristic for this node, and add to open set - edge->mTo->h = ComputeHeuristic(edge->mTo, goal); + data.mHeuristic = ComputeHeuristic(edge->mTo, goal); + data.mInOpenSet = true; openSet.emplace_back(edge->mTo); } } @@ -175,15 +180,16 @@ bool GBFS(WeightedGraph& g, WeightedGraphNode* start, // Find lowest cost node in open set auto iter = std::min_element(openSet.begin(), openSet.end(), - [](WeightedGraphNode* a, WeightedGraphNode* b) { - return a->h < b->h; + [&outMap](WeightedGraphNode* a, WeightedGraphNode* b) { + return outMap[a].mHeuristic < outMap[b].mHeuristic; }); + // Set to current and move from open to closed current = *iter; openSet.erase(iter); - closedSet.emplace_back(current); - } - while (current != goal); + outMap[current].mInOpenSet = false; + outMap[current].mInClosedSet = true; + } while (current != goal); // Did we find a path? return (current == goal) ? true : false; @@ -271,7 +277,7 @@ void testBFS() std::cout << found << '\n'; } -void testAStar() +void testHeuristic(bool useAStar) { WeightedGraph g; for (int i = 0; i < 5; i++) @@ -322,7 +328,17 @@ void testAStar() } } } - bool found = AStar(g, g.mNodes[0], g.mNodes[9]); + bool found = false; + if (useAStar) + { + AStarMap map; + found = AStar(g, g.mNodes[0], g.mNodes[9], map); + } + else + { + GBFSMap map; + found = GBFS(g, g.mNodes[0], g.mNodes[9], map); + } std::cout << found << '\n'; } @@ -569,6 +585,8 @@ void testTicTac() int main(int argc, char** argv) { + testHeuristic(false); + testHeuristic(true); Game game; bool success = game.Initialize(); if (success) diff --git a/Chapter04/Tile.h b/Chapter04/Tile.h index 5e219b4b..f3e90d12 100644 --- a/Chapter04/Tile.h +++ b/Chapter04/Tile.h @@ -35,6 +35,8 @@ class Tile : public Actor float f; float g; float h; + bool mInOpenSet; + bool mInClosedSet; bool mBlocked; void UpdateTexture(); From 4399d460b5bdbc58ec8147921f0d4729c701761e Mon Sep 17 00:00:00 2001 From: Sanjay Madhav Date: Thu, 23 Nov 2017 02:01:08 -0800 Subject: [PATCH 17/40] Chapter 4 code done for windows at least --- Chapter04/Main.cpp | 577 ------------------------------------------- Chapter04/Search.cpp | 575 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 575 insertions(+), 577 deletions(-) create mode 100644 Chapter04/Search.cpp diff --git a/Chapter04/Main.cpp b/Chapter04/Main.cpp index 88c40403..22ea0c69 100644 --- a/Chapter04/Main.cpp +++ b/Chapter04/Main.cpp @@ -7,586 +7,9 @@ // ---------------------------------------------------------------- #include "Game.h" -#include -#include -#include - -struct GraphNode -{ - // Adjacency list - std::vector mAdjacent; -}; - -struct Graph -{ - // A graph contains nodes - std::vector mNodes; -}; - -struct WeightedEdge -{ - // Which nodes are connected by this edge? - struct WeightedGraphNode* mFrom; - struct WeightedGraphNode* mTo; - // Weight of this edge - float mWeight; -}; - -struct WeightedGraphNode -{ - std::vector mEdges; -}; - -struct WeightedGraph -{ - std::vector mNodes; -}; - -struct GBFSScratch -{ - WeightedEdge* mParentEdge = nullptr; - float mHeuristic = 0.0f; - bool mInOpenSet = false; - bool mInClosedSet = false; -}; - -using GBFSMap = - std::unordered_map; - -struct AStarScratch -{ - WeightedEdge* mParentEdge = nullptr; - float mHeuristic = 0.0f; - float mActualFromStart = 0.0f; - bool mInOpenSet = false; - bool mInClosedSet = false; -}; - -using AStarMap = - std::unordered_map; - -float ComputeHeuristic(WeightedGraphNode* a, WeightedGraphNode* b) -{ - return 0.0f; -} - -bool AStar(WeightedGraph& g, WeightedGraphNode* start, - WeightedGraphNode* goal, AStarMap& outMap) -{ - std::vector openSet; - - // Set current node to start, and mark in closed set - WeightedGraphNode* current = start; - outMap[current].mInClosedSet = true; - - do - { - // Add adjacent nodes to open set - for (WeightedEdge* edge : current->mEdges) - { - WeightedGraphNode* neighbor = edge->mTo; - // Get scratch data for this node - AStarScratch& data = outMap[neighbor]; - // Only check nodes that aren't in the closed set - if (!data.mInClosedSet) - { - if (!data.mInOpenSet) - { - // Not in the open set, so parent must be current - data.mParentEdge = edge; - data.mHeuristic = ComputeHeuristic(neighbor, goal); - // Actual cost is the parent's plus cost of traversing edge - data.mActualFromStart = outMap[current].mActualFromStart + - edge->mWeight; - data.mInOpenSet = true; - openSet.emplace_back(neighbor); - } - else - { - // Compute what new actual cost is if current becomes parent - float newG = outMap[current].mActualFromStart + edge->mWeight; - if (newG < data.mActualFromStart) - { - // Current should adopt this node - data.mParentEdge = edge; - data.mActualFromStart = newG; - } - } - } - } - - // If open set is empty, all possible paths are exhausted - if (openSet.empty()) - { - break; - } - - // Find lowest cost node in open set - auto iter = std::min_element(openSet.begin(), openSet.end(), - [&outMap](WeightedGraphNode* a, WeightedGraphNode* b) { - // Calculate f(x) for nodes a/b - float fOfA = outMap[a].mHeuristic + outMap[a].mActualFromStart; - float fOfB = outMap[b].mHeuristic + outMap[b].mActualFromStart; - return fOfA < fOfB; - }); - // Set to current and move from open to closed - current = *iter; - openSet.erase(iter); - outMap[current].mInOpenSet = true; - outMap[current].mInClosedSet = true; - } - while (current != goal); - - // Did we find a path? - return (current == goal) ? true : false; -} - -bool GBFS(WeightedGraph& g, WeightedGraphNode* start, - WeightedGraphNode* goal, GBFSMap& outMap) -{ - std::vector openSet; - - // Set current node to start, and mark in closed set - WeightedGraphNode* current = start; - outMap[current].mInClosedSet = true; - - do - { - // Add adjacent nodes to open set - for (WeightedEdge* edge : current->mEdges) - { - // Get scratch data for this node - GBFSScratch& data = outMap[edge->mTo]; - // Add it only if it's not in the closed set - if (!data.mInClosedSet) - { - // Set the adjacent node's parent edge - data.mParentEdge = edge; - if (!data.mInOpenSet) - { - // Compute the heuristic for this node, and add to open set - data.mHeuristic = ComputeHeuristic(edge->mTo, goal); - data.mInOpenSet = true; - openSet.emplace_back(edge->mTo); - } - } - } - - // If open set is empty, all possible paths are exhausted - if (openSet.empty()) - { - break; - } - - // Find lowest cost node in open set - auto iter = std::min_element(openSet.begin(), openSet.end(), - [&outMap](WeightedGraphNode* a, WeightedGraphNode* b) { - return outMap[a].mHeuristic < outMap[b].mHeuristic; - }); - - // Set to current and move from open to closed - current = *iter; - openSet.erase(iter); - outMap[current].mInOpenSet = false; - outMap[current].mInClosedSet = true; - } while (current != goal); - - // Did we find a path? - return (current == goal) ? true : false; -} - -using NodeToParentMap = - std::unordered_map; - -bool BFS(Graph& graph, GraphNode* start, GraphNode* goal, NodeToParentMap& outMap) -{ - // Whether we found a path - bool pathFound = false; - // Nodes to consider - std::queue q; - // Enqueue the first node - q.emplace(start); - - while (!q.empty()) - { - // Dequeue a node - GraphNode* current = q.front(); - q.pop(); - if (current == goal) - { - pathFound = true; - break; - } - - // Enqueue adjacent nodes that aren't already in the queue - for (GraphNode* node : current->mAdjacent) - { - // If the parent is null, it hasn't been enqueued - // (except for the start node) - GraphNode* parent = outMap[node]; - if (parent == nullptr && node != start) - { - // Enqueue this node, setting its parent - outMap[node] = current; - q.emplace(node); - } - } - } - - return pathFound; -} - -void testBFS() -{ - Graph g; - for (int i = 0; i < 5; i++) - { - for (int j = 0; j < 5; j++) - { - GraphNode* node = new GraphNode; - g.mNodes.emplace_back(node); - } - } - - for (int i = 0; i < 5; i++) - { - for (int j = 0; j < 5; j++) - { - GraphNode* node = g.mNodes[i * 5 + j]; - if (i > 0) - { - node->mAdjacent.emplace_back(g.mNodes[(i - 1) * 5 + j]); - } - if (i < 4) - { - node->mAdjacent.emplace_back(g.mNodes[(i + 1) * 5 + j]); - } - if (j > 0) - { - node->mAdjacent.emplace_back(g.mNodes[i * 5 + j - 1]); - } - if (j < 4) - { - node->mAdjacent.emplace_back(g.mNodes[i * 5 + j + 1]); - } - } - } - - NodeToParentMap map; - bool found = BFS(g, g.mNodes[0], g.mNodes[9], map); - std::cout << found << '\n'; -} - -void testHeuristic(bool useAStar) -{ - WeightedGraph g; - for (int i = 0; i < 5; i++) - { - for (int j = 0; j < 5; j++) - { - WeightedGraphNode* node = new WeightedGraphNode; - g.mNodes.emplace_back(node); - } - } - - for (int i = 0; i < 5; i++) - { - for (int j = 0; j < 5; j++) - { - WeightedGraphNode* node = g.mNodes[i*5 + j]; - if (i > 0) - { - WeightedEdge* e = new WeightedEdge; - e->mFrom = node; - e->mTo = g.mNodes[(i - 1) * 5 + j]; - e->mWeight = 1.0f; - node->mEdges.emplace_back(e); - } - if (i < 4) - { - WeightedEdge* e = new WeightedEdge; - e->mFrom = node; - e->mTo = g.mNodes[(i + 1) * 5 + j]; - e->mWeight = 1.0f; - node->mEdges.emplace_back(e); - } - if (j > 0) - { - WeightedEdge* e = new WeightedEdge; - e->mFrom = node; - e->mTo = g.mNodes[i*5 + j - 1]; - e->mWeight = 1.0f; - node->mEdges.emplace_back(e); - } - if (j < 4) - { - WeightedEdge* e = new WeightedEdge; - e->mFrom = node; - e->mTo = g.mNodes[i*5 + j + 1]; - e->mWeight = 1.0f; - node->mEdges.emplace_back(e); - } - } - } - bool found = false; - if (useAStar) - { - AStarMap map; - found = AStar(g, g.mNodes[0], g.mNodes[9], map); - } - else - { - GBFSMap map; - found = GBFS(g, g.mNodes[0], g.mNodes[9], map); - } - std::cout << found << '\n'; -} - -struct GameState -{ - // (For tic-tac-toe, array of board) - enum SquareState { Empty, X, O }; - SquareState mBoard[3][3]; -}; - -struct GTNode -{ - // Children nodes - std::vector mChildren; - // State of game - GameState mState; -}; - -void GenStates(GTNode* root, bool xPlayer) -{ - for (int i = 0; i < 3; i++) - { - for (int j = 0; j < 3; j++) - { - if (root->mState.mBoard[i][j] == GameState::Empty) - { - GTNode* node = new GTNode; - root->mChildren.emplace_back(node); - node->mState = root->mState; - node->mState.mBoard[i][j] = xPlayer ? GameState::X : GameState::O; - GenStates(node, !xPlayer); - } - } - } -} - -float GetScore(GameState& state) -{ - // Are any of the rows the same? - for (int i = 0; i < 3; i++) - { - bool same = true; - GameState::SquareState v = state.mBoard[i][0]; - for (int j = 1; j < 3; j++) - { - if (state.mBoard[i][j] != v) - { - same = false; - } - } - - if (same) - { - if (v == GameState::X) - { - return 1.0f; - } - else - { - return -1.0f; - } - } - } - - // Are any of the columns the same? - for (int j = 0; j < 3; j++) - { - bool same = true; - GameState::SquareState v = state.mBoard[0][j]; - for (int i = 1; i < 3; i++) - { - if (state.mBoard[i][j] != v) - { - same = false; - } - } - - if (same) - { - if (v == GameState::X) - { - return 1.0f; - } - else - { - return -1.0f; - } - } - } - - // What about diagonals? - if (((state.mBoard[0][0] == state.mBoard[1][1]) && - (state.mBoard[1][1] == state.mBoard[2][2])) || - ((state.mBoard[2][0] == state.mBoard[1][1]) && - (state.mBoard[1][1] == state.mBoard[0][2]))) - { - if (state.mBoard[1][1] == GameState::X) - { - return 1.0f; - } - else - { - return -1.0f; - } - } - // We tied - return 0.0f; -} - -float MinPlayer(GTNode* node); - -float MaxPlayer(GTNode* node) -{ - // If this is a leaf, return score - if (node->mChildren.empty()) - { - return GetScore(node->mState); - } - - float maxValue = -std::numeric_limits::infinity(); - // Find the subtree with the maximum value - for (GTNode* child : node->mChildren) - { - maxValue = std::max(maxValue, MinPlayer(child)); - } - return maxValue; -} - -float MinPlayer(GTNode* node) -{ - // If this is a leaf, return score - if (node->mChildren.empty()) - { - return GetScore(node->mState); - } - - float minValue = std::numeric_limits::infinity(); - // Find the subtree with the minimum value - for (GTNode* child : node->mChildren) - { - minValue = std::min(minValue, MaxPlayer(child)); - } - return minValue; -} - -GTNode* MinimaxDecide(GTNode* root) -{ - // Find the subtree with the maximum value, and save the choice - GTNode* choice = nullptr; - float maxValue = -std::numeric_limits::infinity(); - for (GTNode* child : root->mChildren) - { - float v = MinPlayer(child); - if (v > maxValue) - { - maxValue = v; - choice = child; - } - } - return choice; -} - -float AlphaBetaMin(GTNode* node, float alpha, float beta); - -float AlphaBetaMax(GTNode* node, float alpha, float beta) -{ - // If this is a leaf, return score - if (node->mChildren.empty()) - { - return GetScore(node->mState); - } - - float maxValue = -std::numeric_limits::infinity(); - // Find the subtree with the maximum value - for (GTNode* child : node->mChildren) - { - maxValue = std::max(maxValue, AlphaBetaMin(child, alpha, beta)); - if (maxValue >= beta) - { - return maxValue; // Beta prune - } - alpha = std::max(maxValue, alpha); - } - return maxValue; -} - -float AlphaBetaMin(GTNode* node, float alpha, float beta) -{ - // If this is a leaf, return score - if (node->mChildren.empty()) - { - return GetScore(node->mState); - } - - float minValue = std::numeric_limits::infinity(); - // Find the subtree with the minimum value - for (GTNode* child : node->mChildren) - { - minValue = std::min(minValue, AlphaBetaMax(child, alpha, beta)); - if (minValue <= alpha) - { - return minValue; // Alpha prune - } - beta = std::min(minValue, beta); - } - return minValue; -} - -GTNode* AlphaBetaDecide(GTNode* root) -{ - // Find the subtree with the maximum value, and save the choice - GTNode* choice = nullptr; - float maxValue = -std::numeric_limits::infinity(); - float beta = std::numeric_limits::infinity(); - for (GTNode* child : root->mChildren) - { - float v = AlphaBetaMin(child, maxValue, beta); - if (v > maxValue) - { - maxValue = v; - choice = child; - } - } - return choice; -} - -void testTicTac() -{ - GTNode* root = new GTNode; - root->mState.mBoard[0][0] = GameState::O; - root->mState.mBoard[0][1] = GameState::Empty; - root->mState.mBoard[0][2] = GameState::X; - root->mState.mBoard[1][0] = GameState::X; - root->mState.mBoard[1][1] = GameState::O; - root->mState.mBoard[1][2] = GameState::O; - root->mState.mBoard[2][0] = GameState::X; - root->mState.mBoard[2][1] = GameState::Empty; - root->mState.mBoard[2][2] = GameState::Empty; - - GenStates(root, true); - GTNode* choice = AlphaBetaDecide(root); - std::cout << choice->mChildren.size(); -} int main(int argc, char** argv) { - testHeuristic(false); - testHeuristic(true); Game game; bool success = game.Initialize(); if (success) diff --git a/Chapter04/Search.cpp b/Chapter04/Search.cpp new file mode 100644 index 00000000..56a83598 --- /dev/null +++ b/Chapter04/Search.cpp @@ -0,0 +1,575 @@ +#include +#include +#include +#include + +struct GraphNode +{ + // Adjacency list + std::vector mAdjacent; +}; + +struct Graph +{ + // A graph contains nodes + std::vector mNodes; +}; + +struct WeightedEdge +{ + // Which nodes are connected by this edge? + struct WeightedGraphNode* mFrom; + struct WeightedGraphNode* mTo; + // Weight of this edge + float mWeight; +}; + +struct WeightedGraphNode +{ + std::vector mEdges; +}; + +struct WeightedGraph +{ + std::vector mNodes; +}; + +struct GBFSScratch +{ + const WeightedEdge* mParentEdge = nullptr; + float mHeuristic = 0.0f; + bool mInOpenSet = false; + bool mInClosedSet = false; +}; + +using GBFSMap = +std::unordered_map; + +struct AStarScratch +{ + const WeightedEdge* mParentEdge = nullptr; + float mHeuristic = 0.0f; + float mActualFromStart = 0.0f; + bool mInOpenSet = false; + bool mInClosedSet = false; +}; + +using AStarMap = +std::unordered_map; + +float ComputeHeuristic(const WeightedGraphNode* a, const WeightedGraphNode* b) +{ + return 0.0f; +} + +bool AStar(const WeightedGraph& g, const WeightedGraphNode* start, + const WeightedGraphNode* goal, AStarMap& outMap) +{ + std::vector openSet; + + // Set current node to start, and mark in closed set + const WeightedGraphNode* current = start; + outMap[current].mInClosedSet = true; + + do + { + // Add adjacent nodes to open set + for (const WeightedEdge* edge : current->mEdges) + { + const WeightedGraphNode* neighbor = edge->mTo; + // Get scratch data for this node + AStarScratch& data = outMap[neighbor]; + // Only check nodes that aren't in the closed set + if (!data.mInClosedSet) + { + if (!data.mInOpenSet) + { + // Not in the open set, so parent must be current + data.mParentEdge = edge; + data.mHeuristic = ComputeHeuristic(neighbor, goal); + // Actual cost is the parent's plus cost of traversing edge + data.mActualFromStart = outMap[current].mActualFromStart + + edge->mWeight; + data.mInOpenSet = true; + openSet.emplace_back(neighbor); + } + else + { + // Compute what new actual cost is if current becomes parent + float newG = outMap[current].mActualFromStart + edge->mWeight; + if (newG < data.mActualFromStart) + { + // Current should adopt this node + data.mParentEdge = edge; + data.mActualFromStart = newG; + } + } + } + } + + // If open set is empty, all possible paths are exhausted + if (openSet.empty()) + { + break; + } + + // Find lowest cost node in open set + auto iter = std::min_element(openSet.begin(), openSet.end(), + [&outMap](const WeightedGraphNode* a, const WeightedGraphNode* b) { + // Calculate f(x) for nodes a/b + float fOfA = outMap[a].mHeuristic + outMap[a].mActualFromStart; + float fOfB = outMap[b].mHeuristic + outMap[b].mActualFromStart; + return fOfA < fOfB; + }); + // Set to current and move from open to closed + current = *iter; + openSet.erase(iter); + outMap[current].mInOpenSet = true; + outMap[current].mInClosedSet = true; + } while (current != goal); + + // Did we find a path? + return (current == goal) ? true : false; +} + +bool GBFS(const WeightedGraph& g, const WeightedGraphNode* start, + const WeightedGraphNode* goal, GBFSMap& outMap) +{ + std::vector openSet; + + // Set current node to start, and mark in closed set + const WeightedGraphNode* current = start; + outMap[current].mInClosedSet = true; + + do + { + // Add adjacent nodes to open set + for (const WeightedEdge* edge : current->mEdges) + { + // Get scratch data for this node + GBFSScratch& data = outMap[edge->mTo]; + // Add it only if it's not in the closed set + if (!data.mInClosedSet) + { + // Set the adjacent node's parent edge + data.mParentEdge = edge; + if (!data.mInOpenSet) + { + // Compute the heuristic for this node, and add to open set + data.mHeuristic = ComputeHeuristic(edge->mTo, goal); + data.mInOpenSet = true; + openSet.emplace_back(edge->mTo); + } + } + } + + // If open set is empty, all possible paths are exhausted + if (openSet.empty()) + { + break; + } + + // Find lowest cost node in open set + auto iter = std::min_element(openSet.begin(), openSet.end(), + [&outMap](const WeightedGraphNode* a, const WeightedGraphNode* b) { + return outMap[a].mHeuristic < outMap[b].mHeuristic; + }); + + // Set to current and move from open to closed + current = *iter; + openSet.erase(iter); + outMap[current].mInOpenSet = false; + outMap[current].mInClosedSet = true; + } while (current != goal); + + // Did we find a path? + return (current == goal) ? true : false; +} + +using NodeToParentMap = +std::unordered_map; + +bool BFS(const Graph& graph, const GraphNode* start, const GraphNode* goal, NodeToParentMap& outMap) +{ + // Whether we found a path + bool pathFound = false; + // Nodes to consider + std::queue q; + // Enqueue the first node + q.emplace(start); + + while (!q.empty()) + { + // Dequeue a node + const GraphNode* current = q.front(); + q.pop(); + if (current == goal) + { + pathFound = true; + break; + } + + // Enqueue adjacent nodes that aren't already in the queue + for (const GraphNode* node : current->mAdjacent) + { + // If the parent is null, it hasn't been enqueued + // (except for the start node) + const GraphNode* parent = outMap[node]; + if (parent == nullptr && node != start) + { + // Enqueue this node, setting its parent + outMap[node] = current; + q.emplace(node); + } + } + } + + return pathFound; +} + +void testBFS() +{ + Graph g; + for (int i = 0; i < 5; i++) + { + for (int j = 0; j < 5; j++) + { + GraphNode* node = new GraphNode; + g.mNodes.emplace_back(node); + } + } + + for (int i = 0; i < 5; i++) + { + for (int j = 0; j < 5; j++) + { + GraphNode* node = g.mNodes[i * 5 + j]; + if (i > 0) + { + node->mAdjacent.emplace_back(g.mNodes[(i - 1) * 5 + j]); + } + if (i < 4) + { + node->mAdjacent.emplace_back(g.mNodes[(i + 1) * 5 + j]); + } + if (j > 0) + { + node->mAdjacent.emplace_back(g.mNodes[i * 5 + j - 1]); + } + if (j < 4) + { + node->mAdjacent.emplace_back(g.mNodes[i * 5 + j + 1]); + } + } + } + + NodeToParentMap map; + bool found = BFS(g, g.mNodes[0], g.mNodes[9], map); + std::cout << found << '\n'; +} + +void testHeuristic(bool useAStar) +{ + WeightedGraph g; + for (int i = 0; i < 5; i++) + { + for (int j = 0; j < 5; j++) + { + WeightedGraphNode* node = new WeightedGraphNode; + g.mNodes.emplace_back(node); + } + } + + for (int i = 0; i < 5; i++) + { + for (int j = 0; j < 5; j++) + { + WeightedGraphNode* node = g.mNodes[i * 5 + j]; + if (i > 0) + { + WeightedEdge* e = new WeightedEdge; + e->mFrom = node; + e->mTo = g.mNodes[(i - 1) * 5 + j]; + e->mWeight = 1.0f; + node->mEdges.emplace_back(e); + } + if (i < 4) + { + WeightedEdge* e = new WeightedEdge; + e->mFrom = node; + e->mTo = g.mNodes[(i + 1) * 5 + j]; + e->mWeight = 1.0f; + node->mEdges.emplace_back(e); + } + if (j > 0) + { + WeightedEdge* e = new WeightedEdge; + e->mFrom = node; + e->mTo = g.mNodes[i * 5 + j - 1]; + e->mWeight = 1.0f; + node->mEdges.emplace_back(e); + } + if (j < 4) + { + WeightedEdge* e = new WeightedEdge; + e->mFrom = node; + e->mTo = g.mNodes[i * 5 + j + 1]; + e->mWeight = 1.0f; + node->mEdges.emplace_back(e); + } + } + } + bool found = false; + if (useAStar) + { + AStarMap map; + found = AStar(g, g.mNodes[0], g.mNodes[9], map); + } + else + { + GBFSMap map; + found = GBFS(g, g.mNodes[0], g.mNodes[9], map); + } + std::cout << found << '\n'; +} + +struct GameState +{ + // (For tic-tac-toe, array of board) + enum SquareState { Empty, X, O }; + SquareState mBoard[3][3]; +}; + +struct GTNode +{ + // Children nodes + std::vector mChildren; + // State of game + GameState mState; +}; + +void GenStates(GTNode* root, bool xPlayer) +{ + for (int i = 0; i < 3; i++) + { + for (int j = 0; j < 3; j++) + { + if (root->mState.mBoard[i][j] == GameState::Empty) + { + GTNode* node = new GTNode; + root->mChildren.emplace_back(node); + node->mState = root->mState; + node->mState.mBoard[i][j] = xPlayer ? GameState::X : GameState::O; + GenStates(node, !xPlayer); + } + } + } +} + +float GetScore(const GameState& state) +{ + // Are any of the rows the same? + for (int i = 0; i < 3; i++) + { + bool same = true; + GameState::SquareState v = state.mBoard[i][0]; + for (int j = 1; j < 3; j++) + { + if (state.mBoard[i][j] != v) + { + same = false; + } + } + + if (same) + { + if (v == GameState::X) + { + return 1.0f; + } + else + { + return -1.0f; + } + } + } + + // Are any of the columns the same? + for (int j = 0; j < 3; j++) + { + bool same = true; + GameState::SquareState v = state.mBoard[0][j]; + for (int i = 1; i < 3; i++) + { + if (state.mBoard[i][j] != v) + { + same = false; + } + } + + if (same) + { + if (v == GameState::X) + { + return 1.0f; + } + else + { + return -1.0f; + } + } + } + + // What about diagonals? + if (((state.mBoard[0][0] == state.mBoard[1][1]) && + (state.mBoard[1][1] == state.mBoard[2][2])) || + ((state.mBoard[2][0] == state.mBoard[1][1]) && + (state.mBoard[1][1] == state.mBoard[0][2]))) + { + if (state.mBoard[1][1] == GameState::X) + { + return 1.0f; + } + else + { + return -1.0f; + } + } + // We tied + return 0.0f; +} + +float MinPlayer(const GTNode* node); + +float MaxPlayer(const GTNode* node) +{ + // If this is a leaf, return score + if (node->mChildren.empty()) + { + return GetScore(node->mState); + } + + float maxValue = -std::numeric_limits::infinity(); + // Find the subtree with the maximum value + for (const GTNode* child : node->mChildren) + { + maxValue = std::max(maxValue, MinPlayer(child)); + } + return maxValue; +} + +float MinPlayer(const GTNode* node) +{ + // If this is a leaf, return score + if (node->mChildren.empty()) + { + return GetScore(node->mState); + } + + float minValue = std::numeric_limits::infinity(); + // Find the subtree with the minimum value + for (const GTNode* child : node->mChildren) + { + minValue = std::min(minValue, MaxPlayer(child)); + } + return minValue; +} + +const GTNode* MinimaxDecide(const GTNode* root) +{ + // Find the subtree with the maximum value, and save the choice + const GTNode* choice = nullptr; + float maxValue = -std::numeric_limits::infinity(); + for (const GTNode* child : root->mChildren) + { + float v = MinPlayer(child); + if (v > maxValue) + { + maxValue = v; + choice = child; + } + } + return choice; +} + +float AlphaBetaMin(const GTNode* node, float alpha, float beta); + +float AlphaBetaMax(const GTNode* node, float alpha, float beta) +{ + // If this is a leaf, return score + if (node->mChildren.empty()) + { + return GetScore(node->mState); + } + + float maxValue = -std::numeric_limits::infinity(); + // Find the subtree with the maximum value + for (const GTNode* child : node->mChildren) + { + maxValue = std::max(maxValue, AlphaBetaMin(child, alpha, beta)); + if (maxValue >= beta) + { + return maxValue; // Beta prune + } + alpha = std::max(maxValue, alpha); + } + return maxValue; +} + +float AlphaBetaMin(const GTNode* node, float alpha, float beta) +{ + // If this is a leaf, return score + if (node->mChildren.empty()) + { + return GetScore(node->mState); + } + + float minValue = std::numeric_limits::infinity(); + // Find the subtree with the minimum value + for (const GTNode* child : node->mChildren) + { + minValue = std::min(minValue, AlphaBetaMax(child, alpha, beta)); + if (minValue <= alpha) + { + return minValue; // Alpha prune + } + beta = std::min(minValue, beta); + } + return minValue; +} + +const GTNode* AlphaBetaDecide(const GTNode* root) +{ + // Find the subtree with the maximum value, and save the choice + const GTNode* choice = nullptr; + float maxValue = -std::numeric_limits::infinity(); + float beta = std::numeric_limits::infinity(); + for (const GTNode* child : root->mChildren) + { + float v = AlphaBetaMin(child, maxValue, beta); + if (v > maxValue) + { + maxValue = v; + choice = child; + } + } + return choice; +} + +void testTicTac() +{ + GTNode* root = new GTNode; + root->mState.mBoard[0][0] = GameState::O; + root->mState.mBoard[0][1] = GameState::Empty; + root->mState.mBoard[0][2] = GameState::X; + root->mState.mBoard[1][0] = GameState::X; + root->mState.mBoard[1][1] = GameState::O; + root->mState.mBoard[1][2] = GameState::O; + root->mState.mBoard[2][0] = GameState::X; + root->mState.mBoard[2][1] = GameState::Empty; + root->mState.mBoard[2][2] = GameState::Empty; + + GenStates(root, true); + const GTNode* choice = AlphaBetaDecide(root); + std::cout << choice->mChildren.size(); +} From 57c3130ae8054db50cc7933799b37fbd4fa83c71 Mon Sep 17 00:00:00 2001 From: Sanjay Madhav Date: Thu, 23 Nov 2017 03:14:38 -0800 Subject: [PATCH 18/40] Forgot to add search to vcxproj --- Chapter04/Game.vcxproj | 1 + Chapter04/Game.vcxproj.filters | 3 +++ 2 files changed, 4 insertions(+) diff --git a/Chapter04/Game.vcxproj b/Chapter04/Game.vcxproj index 51fe6f7b..385795ed 100644 --- a/Chapter04/Game.vcxproj +++ b/Chapter04/Game.vcxproj @@ -24,6 +24,7 @@ + diff --git a/Chapter04/Game.vcxproj.filters b/Chapter04/Game.vcxproj.filters index 08b9b304..964c2b83 100644 --- a/Chapter04/Game.vcxproj.filters +++ b/Chapter04/Game.vcxproj.filters @@ -55,6 +55,9 @@ Source Files + + Source Files + From 3a8b3a6bc15f9154af2fbb2c8be00e6110c75d86 Mon Sep 17 00:00:00 2001 From: Sanjay Madhav Date: Thu, 23 Nov 2017 17:35:09 -0800 Subject: [PATCH 19/40] First copy of Chapter 5 code --- Chapter05/Actor.cpp | 78 ++ Chapter05/Actor.h | 66 ++ Chapter05/Assets/Airplane.png | Bin 0 -> 1642 bytes Chapter05/Assets/Base.png | Bin 0 -> 2232 bytes Chapter05/Assets/LICENSE.txt | 3 + Chapter05/Assets/Missile.png | Bin 0 -> 869 bytes Chapter05/Assets/Projectile.png | Bin 0 -> 707 bytes Chapter05/Assets/TileBrown.png | Bin 0 -> 1491 bytes Chapter05/Assets/TileBrownSelected.png | Bin 0 -> 1338 bytes Chapter05/Assets/TileGreen.png | Bin 0 -> 1742 bytes Chapter05/Assets/TileGreenSelected.png | Bin 0 -> 1492 bytes Chapter05/Assets/TileGrey.png | Bin 0 -> 1290 bytes Chapter05/Assets/TileGreySelected.png | Bin 0 -> 1137 bytes Chapter05/Assets/TileTan.png | Bin 0 -> 1431 bytes Chapter05/Assets/TileTanSelected.png | Bin 0 -> 1173 bytes Chapter05/Assets/Tower.png | Bin 0 -> 775 bytes Chapter05/Bullet.cpp | 56 + Chapter05/Bullet.h | 20 + Chapter05/Chapter05-windows.sln | 25 + .../Chapter6-mac.xcodeproj/project.pbxproj | 402 +++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/xcschemes/Game-mac.xcscheme | 92 ++ Chapter05/CircleComponent.cpp | 27 + Chapter05/CircleComponent.h | 24 + Chapter05/CollisionComponent.cpp | 20 + Chapter05/CollisionComponent.h | 17 + Chapter05/Component.cpp | 27 + Chapter05/Component.h | 27 + Chapter05/Enemy.cpp | 56 + Chapter05/Enemy.h | 21 + .../Exercise3.3/Assets/MapLayer1.csv | 24 + .../Exercise3.3/Assets/MapLayer2.csv | 24 + .../Exercise3.3/Assets/MapLayer3.csv | 24 + .../Exercises/Exercise3.3/Assets/Tiles.png | Bin 0 -> 28383 bytes Chapter05/Game.cpp | 353 ++++++ Chapter05/Game.h | 68 ++ Chapter05/Game.vcxproj | 145 +++ Chapter05/Game.vcxproj.filters | 129 ++ Chapter05/Grid.cpp | 248 ++++ Chapter05/Grid.h | 36 + Chapter05/Main.cpp | 24 + Chapter05/Math.cpp | 240 ++++ Chapter05/Math.h | 1033 +++++++++++++++++ Chapter05/MoveComponent.cpp | 35 + Chapter05/MoveComponent.h | 26 + Chapter05/NavComponent.cpp | 49 + Chapter05/NavComponent.h | 23 + Chapter05/Shader.cpp | 148 +++ Chapter05/Shader.h | 42 + Chapter05/Shaders/Sprite.frag | 25 + Chapter05/Shaders/Sprite.vert | 33 + Chapter05/SpriteComponent.cpp | 60 + Chapter05/SpriteComponent.h | 30 + Chapter05/Texture.cpp | 69 ++ Chapter05/Texture.h | 28 + Chapter05/Tile.cpp | 66 ++ Chapter05/Tile.h | 44 + Chapter05/Tower.cpp | 53 + Chapter05/Tower.h | 22 + Chapter05/VertexArray.cpp | 52 + Chapter05/VertexArray.h | 24 + 61 files changed, 4145 insertions(+) create mode 100644 Chapter05/Actor.cpp create mode 100644 Chapter05/Actor.h create mode 100644 Chapter05/Assets/Airplane.png create mode 100644 Chapter05/Assets/Base.png create mode 100644 Chapter05/Assets/LICENSE.txt create mode 100644 Chapter05/Assets/Missile.png create mode 100644 Chapter05/Assets/Projectile.png create mode 100644 Chapter05/Assets/TileBrown.png create mode 100644 Chapter05/Assets/TileBrownSelected.png create mode 100644 Chapter05/Assets/TileGreen.png create mode 100644 Chapter05/Assets/TileGreenSelected.png create mode 100644 Chapter05/Assets/TileGrey.png create mode 100644 Chapter05/Assets/TileGreySelected.png create mode 100644 Chapter05/Assets/TileTan.png create mode 100644 Chapter05/Assets/TileTanSelected.png create mode 100644 Chapter05/Assets/Tower.png create mode 100644 Chapter05/Bullet.cpp create mode 100644 Chapter05/Bullet.h create mode 100644 Chapter05/Chapter05-windows.sln create mode 100644 Chapter05/Chapter6-mac.xcodeproj/project.pbxproj create mode 100644 Chapter05/Chapter6-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 Chapter05/Chapter6-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme create mode 100644 Chapter05/CircleComponent.cpp create mode 100644 Chapter05/CircleComponent.h create mode 100644 Chapter05/CollisionComponent.cpp create mode 100644 Chapter05/CollisionComponent.h create mode 100644 Chapter05/Component.cpp create mode 100644 Chapter05/Component.h create mode 100644 Chapter05/Enemy.cpp create mode 100644 Chapter05/Enemy.h create mode 100644 Chapter05/Exercises/Exercise3.3/Assets/MapLayer1.csv create mode 100644 Chapter05/Exercises/Exercise3.3/Assets/MapLayer2.csv create mode 100644 Chapter05/Exercises/Exercise3.3/Assets/MapLayer3.csv create mode 100644 Chapter05/Exercises/Exercise3.3/Assets/Tiles.png create mode 100644 Chapter05/Game.cpp create mode 100644 Chapter05/Game.h create mode 100644 Chapter05/Game.vcxproj create mode 100644 Chapter05/Game.vcxproj.filters create mode 100644 Chapter05/Grid.cpp create mode 100644 Chapter05/Grid.h create mode 100644 Chapter05/Main.cpp create mode 100644 Chapter05/Math.cpp create mode 100644 Chapter05/Math.h create mode 100644 Chapter05/MoveComponent.cpp create mode 100644 Chapter05/MoveComponent.h create mode 100644 Chapter05/NavComponent.cpp create mode 100644 Chapter05/NavComponent.h create mode 100644 Chapter05/Shader.cpp create mode 100644 Chapter05/Shader.h create mode 100644 Chapter05/Shaders/Sprite.frag create mode 100644 Chapter05/Shaders/Sprite.vert create mode 100644 Chapter05/SpriteComponent.cpp create mode 100644 Chapter05/SpriteComponent.h create mode 100644 Chapter05/Texture.cpp create mode 100644 Chapter05/Texture.h create mode 100644 Chapter05/Tile.cpp create mode 100644 Chapter05/Tile.h create mode 100644 Chapter05/Tower.cpp create mode 100644 Chapter05/Tower.h create mode 100644 Chapter05/VertexArray.cpp create mode 100644 Chapter05/VertexArray.h diff --git a/Chapter05/Actor.cpp b/Chapter05/Actor.cpp new file mode 100644 index 00000000..39f8e8d8 --- /dev/null +++ b/Chapter05/Actor.cpp @@ -0,0 +1,78 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "Actor.h" +#include "Game.h" +#include "Component.h" +#include + +Actor::Actor(Game* game) + :mState(EActive) + ,mPosition(Vector2::Zero) + ,mScale(1.0f) + ,mRotation(0.0f) + ,mGame(game) +{ + mGame->AddActor(this); +} + +Actor::~Actor() +{ + mGame->RemoveActor(this); + // Need to delete components + // Because ~Component calls RemoveComponent, need a different style loop + while (!mComponents.empty()) + { + delete mComponents.back(); + } +} + +void Actor::Update(float deltaTime) +{ + if (mState == EActive) + { + UpdateComponents(deltaTime); + UpdateActor(deltaTime); + } +} + +void Actor::UpdateComponents(float deltaTime) +{ + for (auto comp : mComponents) + { + comp->Update(deltaTime); + } +} + +void Actor::UpdateActor(float deltaTime) +{ +} + +void Actor::ComputeWorldTransform() +{ + mWorldTransform = Matrix4::CreateScale(mScale); + mWorldTransform *= Matrix4::CreateRotationZ(mRotation); + mWorldTransform *= Matrix4::CreateTranslation(Vector3(mPosition.x, mPosition.y, 0.0f)); +} + +void Actor::AddComponent(Component* component) +{ + mComponents.emplace_back(component); + std::sort(mComponents.begin(), mComponents.end(), [](Component* a, Component* b) { + return a->GetUpdateOrder() < b->GetUpdateOrder(); + }); +} + +void Actor::RemoveComponent(Component* component) +{ + auto iter = std::find(mComponents.begin(), mComponents.end(), component); + if (iter != mComponents.end()) + { + mComponents.erase(iter); + } +} diff --git a/Chapter05/Actor.h b/Chapter05/Actor.h new file mode 100644 index 00000000..60093311 --- /dev/null +++ b/Chapter05/Actor.h @@ -0,0 +1,66 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#pragma once +#include +#include "Math.h" +class Actor +{ +public: + enum State + { + EActive, + EPaused, + EDead + }; + + Actor(class Game* game); + virtual ~Actor(); + + // Update function called from Game (not overridable) + void Update(float deltaTime); + // Updates all the components attached to the actor (not overridable) + void UpdateComponents(float deltaTime); + // Any actor-specific update code (overridable) + virtual void UpdateActor(float deltaTime); + + // Getters/setters + const Vector2& GetPosition() const { return mPosition; } + void SetPosition(const Vector2& pos) { mPosition = pos; ComputeWorldTransform(); } + float GetScale() const { return mScale; } + void SetScale(float scale) { mScale = scale; ComputeWorldTransform(); } + float GetRotation() const { return mRotation; } + void SetRotation(float rotation) { mRotation = rotation; ComputeWorldTransform(); } + + void ComputeWorldTransform(); + const Matrix4& GetWorldTransform() const { return mWorldTransform; } + + Vector2 GetForward() const { return Vector2(Math::Cos(mRotation), Math::Sin(mRotation)); } + + State GetState() const { return mState; } + void SetState(State state) { mState = state; } + + class Game* GetGame() { return mGame; } + + + // Add/remove components + void AddComponent(class Component* component); + void RemoveComponent(class Component* component); +private: + // Actor's state + State mState; + + // Transform + Matrix4 mWorldTransform; + Vector2 mPosition; + float mScale; + float mRotation; + + std::vector mComponents; + class Game* mGame; +}; diff --git a/Chapter05/Assets/Airplane.png b/Chapter05/Assets/Airplane.png new file mode 100644 index 0000000000000000000000000000000000000000..df752ef1ee4edb82ba8bd5f3e9564f5ec1427adc GIT binary patch literal 1642 zcmV-w29^1VP)9th*T;CK@hximSv$-D#0|(^?JR&0pO2` zEP-)YG#Z5{isz0Qh5^$wK?q4t%m-Yutph+P6avR_WA{H3j{=m^1b`0e&s!Kw06-uR zm`?y$*y~>ZpM=mn0N@HBL?V&tR)SMvIYm)&t~$)+^ZAFfumsitARG?+6;3-d!2m)? z-v|(k#lZ9LhFL5Yz58Z?0SN#I27~kI1SzHK0FW*g@a5CLu=w_$`E-I`{JoE)ZQu~V zf1jo1hXE`TOxgx8fyocW09lrA0od%C$Sxt|!PeH+i;qnR`2s*ulwZ-R+;m&Uahwc* zAACIP1^}!WRqt3s7{4?0wFD@on*gw~veNP4c^-t2j4aE)_{{>_?KH78-3(yyx7ln0 z0IJn0YPH(A^L|1gTmKi?>FFs-rBXL|m8o!o$z-y9P`j$C-t(IUhMX3d=9Q?QSKpb6 zFc=I55s5^g>pJ=sHZQV;hCL_%IX?i8O$RJ3EkW0H<{$3)@BtY@2;wdPgIupDidQNh zRWkI!04yvlKoA5p8jXZ3%eV9SyjQusd-v`_y#Z=^XrNp!!*Lwgw%yAyZnQIFq>YhmHoHnGE%XAQ*=%Bee;@}gM$NTn%2SCd_MnBRn_rC0n;>b zcz8I_1j6AkL{aoW`XvZ<=-3ji0Yv}`uJ>Nw5@fK5V3`lT4d=jJJ5m4Evw!9x4GCWP!#N(;eYaL4by zfsq2hetkC?>RS+TizdG*ijo1~2_>OX@3#!o09c62sj501eSvoR`@D4z07{`N!<5lR z)))9705nbW)E^;aJDbg}`hA8SXpwNSe0-tsSzccDK10+UMh}1}iV#H+p->1bD=S`S zmr^=#p3btm6Mk|%0pC7=Qd%K|B%VEccG3AgzXPZWp@{;(`CWg#%2DpIoS&_19LE&^ zz~b8E^t3ld+&C+Z;>BBATQ3wv!P{`;<6*$4t(#4JpHMh+0I*Q_Qf#Ho@jhZ`;!EJN z?9ul>;%PKGk#|pef50w)jAdDfUI4&U_XS2}tkL4b?#u)OD5ZOZ5Y+1fIloKk3rv~; z6_)4EWf){)Xow{+8vwBV1gxYzcL02#Bb*HYSXOA7=6o|?ZkGTdWDkJX|C>iCTw#u| zmmX;A`Bi2WfE@t2YPH%^4=~>_>;{a!44m}e<^VuZl;8Wv+ig`<kuWB`1M0yAv?1M~Q`cji0aob#P;h9n~R zq{lJ=DAp^FiuKB)Wv-n>1Vohj!#C@dzXMbqOr`O1_t_sm832k;9^6x;njiuc04reO za{JH!{C?#D*nC{s5KV^!6!k_PdOZvO^(h2$LKelBUq3rd69APu_cOFdK#_78WNze; zy}b^V_duWm6z!)yom3f6s^7mu$g}~#yS)yT%fP#J9rmn`-oM|usK6ADcAvjmNd^#Q zssNzYJg8hI`nz7wA#?MZdk^&fN;1IheY6Qw@P2;-Dysni-mU8Z0NeA?`{}KFvz0;` zxgb>ru%@pN6Ud@aI@q~;^woDSE>;uPR91u{05D0b{ikRDN*#b= zz4AzbY8W(=iWH!M&HBS81I_mC(|-U!>0swBM5dyDJQtYbE<|`6zzer%R7p?;(Uuxe z1OSu}HXm2!E}L@$poj_(0E$40AXWg^T9*}2F4ZeFBC3Tmr5OOw>sgrNE(j=Z)+<{A zlohA|iXINq3SulE04v!B@O`QPF!P}zmqJuF6A2433^5iYRDd8-b!sL6a=&gJmqS2W zfwXelV<6mYVBL2!wNl>#M0^M+fF<@f0(lznG{i92*y#UB;%6+ovKc@VV8tywt4GwT z7!H$V`)C2xICm8|+I{{?L=FK!m`4H1DCmLaS8Lwvky&4hdWIyaE|v!Z3(cjKL4u=R z7>&gDXf;#x;{cKx-=l;8Fu1ie0EA2}KA8#oWp)6(@l%V_e^D1{ApnkcpT81F3j(*_ zCq#300LHT>d=?QJOILydY5;%)HXR$wa+Fv_%)$W7T?IBDS2kG5wjvZEj*o0CR7Q{8 zub0wR4}cb+O_Zq?zpb=XfWvu(&`gGi>*_L9VJQ>QRwAN>ysOv4s%fka2n~^oBY58d zcZ1=@_YLe>e+(0)B|wv4o6}lqQ@O&Mk1HF<&|cD_^?DX6??JEUKw0f{{Fq@*dys&q z24Er!d;{?<>{;KvdI4Z%1Po=-n8b{U0F>(Y?~r8nKp1jo^u`*zo7bT7UZeo0LfcrF z)ALBfF9JZ)7UN!k;J6EO+8Y7`f|`)2C9xtAfTV@1ya(_0b!S-U`SYe23)}IBm~a^Y zB(W_x?!um)$DiI1*!?&VBLEcZl}7~Z6Q~eIJNx;KiPWAqk%d)5U(4dEhFC`b^(oA8 zH{2R0L{x*3+RLw>oelvIKdaO0S!6%|Y@&bnTN<|K!+-Nj#0U{NB*ylC{_^xxg^>rS zN?DDy(oN*QxV37I~aVu=BwpcskH52dc#R|-aeqy%1yxAy_8a*80zJcuq zfaNP>Lg0LhaLthtG*T0hLs*7+-$C%MGqJ&0Y!(a&81|Pz`HG9BD_T7J7Qwp?%=?ae zKI9}+kwZyv^WfoM<0gh)&$$|(xgzgWQFIo-=K<`Qf9VUiXMJ$jAF2kh*c(ZLL&8U+ z7F}K-ip0)5ZSBWKSO$d!=I8E+PMDYK+zT!&98DqGkDII$g;4R^%9n~!{q+`y>(JD- zEcEs4#9nurfvcG0*hQzW<#QtcDZ99E% zFg9T}S-3Iod}1L05?f)YZGmiuO_Eyk5}81rhQ5)TsT=ISJ_UFDL^C7=Mj$OBYR!8% zaw&I&HlIBF8wh)()z~Pjyf^k(Y*IUH-gn0;I|vrOSam7)1B9gdF$?RmNBAs7s=8E5 ztoY=?JpvV=X(|VICSWI6Y%$lVy!p7Yu`~d}2z;zXo)3V@p9!BCYWk%BAdqbUAeH6?7Zz|}VSBz4CYB*UTOcQ4w>L}welZ_#F97$AD}!O>B7i`J z(!tK%)B#YyRz&k&06q^~;u2S%8K@rZJ}r^Ba|8D6%+Yr?mMMa;FF;!?LwpB@?FA9B zgt(CU77$W32$xBy0LZ|nM?=Ik;=UV$TMBAV`Ubc$oyih*g$!!7-FJNh;G5FH&Rv3( zg{4ek0I=8%k%fd%seb>CC|xAB?Qveb>n`a8S|Rs`&!!SWogd#oe0$~BW>dQ@UV2jb zfrz%^H$=w)z`jBE$N#x=|J|phtDIMAH$_QNGc-LuHq5}dT=d*O6&*0WUT^@|&c_{} z;O&|FjB?3yB>*`3>bn=A=Qybx+Me(BzR2Ol>v6wn09@5@XZe#@5WMXSZJCt zcl|`iSuDG|ficH+r2udajWj~r>*Da=d~neRnrZ!FBvk-hGPL_40C5(GWdzaroqNwp z0^lO+SYSS!57}StNLw0dMn81`;t}SqAKmycON#zd0En|7IPT*7zdwh_)Y6XrQUGuT zAA15h!JxYn$O%~Xmob&4{dPFKaOE_)X)Gi9Q8V-@kN*SWs?=ocuSNg>0`f^j zK~#9!?bktX8&wd%@&9vnW5>=q?V)j!g0X_&fJm|Ep>S#>#0iO%RN}yi10SH@fVARH z8bzGTwUwIXLOD7dD9`|=R#XYK5KsjOqf*@1^?KjF=^@4>G^kLgatrf2`i-Bpvwk!4 zKq;k^Qc5YMlu}A5rIb=i{Xdw!+Gyp)nRkIV0T8JI6)~n_JI(6rUwr%fe>wpxFFgA; z#w`4OgoGjz&VRc8KESD^_m1{fjFf?WTX~~|ky7FE8WXiOFx*6_3bKKtI{*3l*AGdPV%O*6Fghp&>C9W5L^`%#77N+jGZ=u#rz+HJ{14HPH zT|EBDmG1|dfRm?}=Okr9fTuq^$5YWJk7YA=#aSo()`_V{9lkvJ3hjeMMn{9*dM*g? zJRbnh^T-7O?i*cv9(C_i`?)#f5QwB(9GMG2sB7Ng0 z>fNOzlchaX?1i?ciZGJp`G2_eST0B2_rTxzc_X&eqYm{b1~}mlXJ^kIo}TR|30}W{ zp~B=r#;2d`J^X`|_dW8y$APrv+GdN$QTB(kXMor4`#nC2tt;<)Ok~o3oZ{KR9DxC` zPPl%%&Cl)5R$X-6);p*K{P5j1S{GJ$`NyjaJzmE zxfNR)Hrcfe=0*cN&)e1o^4$KVPSk1>IY*Q@8aDZBJ3Ql3cH#KN{##++gV5Q-(_{W{ zZUfkNAnjwF5IMJ_|8JWED$T;=J6PMQzF;&EEJctQ!&+h`~kIc*&!!bmvk}}o# vi?vm~YAL0ZQc5YMlu}A5rIb=iJw)yRZRk7J$*k1Bp5;lodtUM~_-QnWs)^PkXuiJ$S zWlvWes1|a1@IKSVzV~cIM{!^BI&+yy%?2h7Jm`R7=+ZZgE-9~z*I)n5P}1;V`wM{` zugiAdH`}lCyPjLKwn5Zk{q<_@8o`OH_dlIm{Qbc5yzRd~ConA1uqr-h+u@PWbMSku zRPV8{cRzp5RPo$!?a>_Rt`n&eZT_kAF4jCx&3yCmVSG#iPVpM=MxMP zHb$@<(EYISi}#kChjsh^-?J>w?^$>?>tUtbF^N}Se_2g_ZkahNX|1Yn@FR<3QQaLe zckkS(x&J!8(dPVm#+v)bKijypq-{P41iwPphGm+~?%q<#p|ROGBZ@L%sBs?L1+4Dd$#Um*KIHE zmN!&4e5~L(P-3Ne{&TFk_p-~Hvw>RIGtMdA&fqy|LaOAoD7DEauX#o2P4`g~Ub8hN z(ruDT^xpOj!haZJu4S1vDIEB`XYNfCUrE09Gik;R?FKyer`Fc3FA_F6R?=|%W{#W8 z@g6tjO*+x?=Qs6S%y5x8e)NfaxUI|)E{2XpFLJi-{d@h$yN1^WJoEWpWo}rZ(Pg(* wz{*;!PQ2~m_2w#>YqfZy5+Ze=K6pPv=#r0DUat{83`}kep00i_>zopr0K>X7Jpcdz literal 0 HcmV?d00001 diff --git a/Chapter05/Assets/TileBrown.png b/Chapter05/Assets/TileBrown.png new file mode 100644 index 0000000000000000000000000000000000000000..285f393f997eb1eca76daa45afc2eeb374f5cd99 GIT binary patch literal 1491 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 literal 0 HcmV?d00001 diff --git a/Chapter05/Assets/TileGreen.png b/Chapter05/Assets/TileGreen.png new file mode 100644 index 0000000000000000000000000000000000000000..b890b603898434a59647f53371a941fac3cfe923 GIT binary patch literal 1742 zcmV;<1~K`GP)00006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru;Rg#B3JUjW^c34Sy0CY)qL2o!3KWkLTL8e_3*b~p2Ft!weM&*O8pwjS);mRCL;Ax7Q5Od9NJ?ae zs>ga}mr(VnEiKE0!5vS32Yb&9aRGC2&EUmh^PgVdo3g`6+8h|I3P42QONbQ*O#l#x zP#BEwU{j#+8iS(KfA+{pjs+l*oTL4kZH~*0CjhEv4V~4$oR43{$AEHD{Bpcmxn^j$!2pTh}0Ce_`~2jBl63f zOG(3E)fxn&U(~9#ydhZssHGaHV)VaP`qc=`wC1o$Uj@+VuRVU>D?Lf0pqxxICmejL zQ(qTOWq3@!p76lnL>x&m(oBqNQElco-#%3S_YVMZtK~^bG#W|Pgz+?f?FoyXXcSUZ zJ9E)JFuqmxY!04NkeBaN_9`*C+qZ)q(2P^8O4)t;Icy|SMTApm(*c^TkwjrIiAU)L zt$>Es8A_$de8SpV2#lW?pl}Mvxf{KiqjNsY? z5#HgIXa~)7k^z8-1AL~WwYa!KBL)DYUw@nfV2FF^$&Il08z+8#Abc2|v@_GkP|HuN zy<)4y0c7xuu>jBO#)N5>nh4%;3b?8mP?hn@e-u#o%l4v?q@jTN8XHHAK8>y?@we`E zx+&!`E_tKA>XVmhiyn3~yMO$ntx7$Gi&}Vj^ayK7F>8N}sDM1%Kl>fb^r#Y5Iu8Wct8i!||m3~bzMbUL=0 zk5t^xH?~ct0N|A{*}TA~1${gpriUrsMeW6iRY~3s-w*)!~l(ACaUMI z3SPx&Pvt+VKRN0!WQHnUdQNKqWb~YpzNe#Rd;2widQ&|PbnkSl?Oai&iN#EX!uevZJ z-=PuZjArkdQ!J880L}e?LPp0aW|Z&@7=pq7WLvXvzSI=!W+35LwZiH<<}*!7Sc`!# zl4I(D0HyWp;YLT+;1rLnC~JHX-igygE@=UvkuhFBBEfOdd9yaN-+BP>8W>{Z8GzrV zUwG_rDL>j>Jp*9l?!RwJN7AOCziHmI5ux^ki)O7VR@WxY_zqHdt@4EYG}{eZF#^qO3Y@AL zhGwnxDc6$f#i>{_PJ>+(Wjp@)&>)X|gO zNgQ)S^@ceJl1&Dw~sFmD|^?4d!dOm;~a(MO=R9nSflaq z$8?+QfcXx@r^ViAR_#^K&CYI}4wWK!SARNYtvvP8R_!P~>x0wsvqO9{iGg=#_b4PT zV=Y-}ud^o4`pV1thsx7g{pT@jFB^qo)%uBb!aG{I=X|Pw2omDB{6U^Oyk@$nKkM7) zn7rya?^1*D-kWNF)y)9yMfVis##3U7*_yjLo?!kIfLuN6gMRE#0gz5%51xIwdU*yw kM>cG4-s`W)A9A_>0M&IHpH4*ZD*ylh07*qoM6N<$f}Al{EdT%j literal 0 HcmV?d00001 diff --git a/Chapter05/Assets/TileGreenSelected.png b/Chapter05/Assets/TileGreenSelected.png new file mode 100644 index 0000000000000000000000000000000000000000..56156bd609219869e223dcdf740c1978697c8889 GIT binary patch literal 1492 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 literal 0 HcmV?d00001 diff --git a/Chapter05/Assets/Tower.png b/Chapter05/Assets/Tower.png new file mode 100644 index 0000000000000000000000000000000000000000..c7c1d179d974e3903ded4e4a0fc22af0740e0476 GIT binary patch literal 775 zcmV+i1Ni)jP)zc)4z)PGc2w3|wB0HhqE2WU9~-Bc_o7f4S4S<+Ry>Mm)nkQ*SO zF1mtU(?!)bQi8yEUKgM$1jn&quqXEW?Lgq+`}pR)X9hqJ1VIo4K@f5Y#eGBdQ{xbf zCV{HkF3!LJO1H=Fzn-UMfE!DEzi~`VO@r@FXTdZ6Fxyq^eG<&00qps?Fu)Bpz`(CRahOi07IgszwC5+<3DPhi zvS{E3%PCr!pjS7L9 zvy02ciJIooEdhw@%+Ncr6L+`C#5%3c~vJt_bb7fyd)}u95o# zJ@Ih$?Z+YstrN1T281TTL`%H=R~f6@;F<})uebW}Hi?fs2i!Kn`*oEG@%Pq%u$o}3 z@BwGz*2!DDC&8OZApXeUu_5sTD18J$5ClOG1VIpz<{u{d22?j{jbZ=*002ovPDHLk FV1ixgS~LIv literal 0 HcmV?d00001 diff --git a/Chapter05/Bullet.cpp b/Chapter05/Bullet.cpp new file mode 100644 index 00000000..8febb479 --- /dev/null +++ b/Chapter05/Bullet.cpp @@ -0,0 +1,56 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "Bullet.h" +#include "SpriteComponent.h" +#include "MoveComponent.h" +#include "CircleComponent.h" +#include "Game.h" +#include "Enemy.h" + +Bullet::Bullet(class Game* game) +:Actor(game) +{ + SpriteComponent* sc = new SpriteComponent(this); + sc->SetTexture(game->GetTexture("Assets/Projectile.png")); + + MoveComponent* mc = new MoveComponent(this); + mc->SetForwardSpeed(400.0f); + + mCircle = new CircleComponent(this); + mCircle->SetRadius(5.0f); + + mLiveTime = 1.0f; +} + +void Bullet::UpdateActor(float deltaTime) +{ + Actor::UpdateActor(deltaTime); + + // Check for collision vs enemies + for (Enemy* e : GetGame()->GetEnemies()) + { + Vector2 diff = e->GetCircle()->GetCenter() - mCircle->GetCenter(); + float rad = e->GetCircle()->GetRadius() + mCircle->GetRadius(); + rad *= rad; + if (diff.LengthSq() <= rad) + { + // We both die on collision + e->SetState(EDead); + SetState(EDead); + break; + } + } + + mLiveTime -= deltaTime; + if (mLiveTime <= 0.0f) + { + // Time limit hit, die + SetState(EDead); + } +} diff --git a/Chapter05/Bullet.h b/Chapter05/Bullet.h new file mode 100644 index 00000000..bccdfbc4 --- /dev/null +++ b/Chapter05/Bullet.h @@ -0,0 +1,20 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "Actor.h" + +class Bullet : public Actor +{ +public: + Bullet(class Game* game); + void UpdateActor(float deltaTime) override; +private: + class CircleComponent* mCircle; + float mLiveTime; +}; diff --git a/Chapter05/Chapter05-windows.sln b/Chapter05/Chapter05-windows.sln new file mode 100644 index 00000000..f3e55a49 --- /dev/null +++ b/Chapter05/Chapter05-windows.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.27004.2008 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Game", "Game.vcxproj", "{BC508D87-495F-4554-932D-DD68388B63CC}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {BC508D87-495F-4554-932D-DD68388B63CC}.Debug|Win32.ActiveCfg = Debug|Win32 + {BC508D87-495F-4554-932D-DD68388B63CC}.Debug|Win32.Build.0 = Debug|Win32 + {BC508D87-495F-4554-932D-DD68388B63CC}.Release|Win32.ActiveCfg = Release|Win32 + {BC508D87-495F-4554-932D-DD68388B63CC}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {84365DE3-728A-494A-A8A1-96281CA6772F} + EndGlobalSection +EndGlobal diff --git a/Chapter05/Chapter6-mac.xcodeproj/project.pbxproj b/Chapter05/Chapter6-mac.xcodeproj/project.pbxproj new file mode 100644 index 00000000..abc3a372 --- /dev/null +++ b/Chapter05/Chapter6-mac.xcodeproj/project.pbxproj @@ -0,0 +1,402 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 9203E9F01F0DD69900F9FFC2 /* Tower.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9203E9EE1F0DD69900F9FFC2 /* Tower.cpp */; }; + 9203E9F31F0DE24000F9FFC2 /* Enemy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9203E9F11F0DE24000F9FFC2 /* Enemy.cpp */; }; + 9203E9F61F0DF13600F9FFC2 /* NavComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9203E9F41F0DF13600F9FFC2 /* NavComponent.cpp */; }; + 9203E9F91F0F12FE00F9FFC2 /* Bullet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9203E9F71F0F12FE00F9FFC2 /* Bullet.cpp */; }; + 9206FDC61F140707005078A2 /* Texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9206FDC41F140707005078A2 /* Texture.cpp */; }; + 9206FDC91F140D40005078A2 /* Shader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9206FDC71F140D40005078A2 /* Shader.cpp */; }; + 9223C4781F009428009A94D7 /* Game.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4671F009428009A94D7 /* Game.cpp */; }; + 9223C4791F009428009A94D7 /* Actor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4681F009428009A94D7 /* Actor.cpp */; }; + 9223C47C1F009428009A94D7 /* Component.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C46E1F009428009A94D7 /* Component.cpp */; }; + 9223C47D1F009428009A94D7 /* Main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4711F009428009A94D7 /* Main.cpp */; }; + 9223C47E1F009428009A94D7 /* Math.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4721F009428009A94D7 /* Math.cpp */; }; + 9223C4801F009428009A94D7 /* SpriteComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4761F009428009A94D7 /* SpriteComponent.cpp */; }; + 9223C48B1F0CA3CE009A94D7 /* MoveComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C48A1F0CA3CE009A94D7 /* MoveComponent.cpp */; }; + 9223C48F1F0CA67A009A94D7 /* Tile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C48D1F0CA67A009A94D7 /* Tile.cpp */; }; + 9223C4941F0CA766009A94D7 /* CollisionComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4901F0CA766009A94D7 /* CollisionComponent.cpp */; }; + 9223C4951F0CA766009A94D7 /* CircleComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4911F0CA766009A94D7 /* CircleComponent.cpp */; }; + 9223C4981F0DBD69009A94D7 /* Grid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4961F0DBD69009A94D7 /* Grid.cpp */; }; + 92CF0D791F3BBF140086A0F3 /* VertexArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 92CF0D771F3BBF140086A0F3 /* VertexArray.cpp */; }; + 92D324FB1B697389005A86C7 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 92D324FA1B697389005A86C7 /* CoreFoundation.framework */; }; + 92E46E941B6353E50035CD21 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 92E46E931B6353E50035CD21 /* OpenGL.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 9203E9EE1F0DD69900F9FFC2 /* Tower.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Tower.cpp; sourceTree = ""; }; + 9203E9EF1F0DD69900F9FFC2 /* Tower.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Tower.h; sourceTree = ""; }; + 9203E9F11F0DE24000F9FFC2 /* Enemy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Enemy.cpp; sourceTree = ""; }; + 9203E9F21F0DE24000F9FFC2 /* Enemy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Enemy.h; sourceTree = ""; }; + 9203E9F41F0DF13600F9FFC2 /* NavComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NavComponent.cpp; sourceTree = ""; }; + 9203E9F51F0DF13600F9FFC2 /* NavComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NavComponent.h; sourceTree = ""; }; + 9203E9F71F0F12FE00F9FFC2 /* Bullet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Bullet.cpp; sourceTree = ""; }; + 9203E9F81F0F12FE00F9FFC2 /* Bullet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Bullet.h; sourceTree = ""; }; + 9206FDC31F13F7E8005078A2 /* Shaders */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Shaders; sourceTree = ""; }; + 9206FDC41F140707005078A2 /* Texture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Texture.cpp; sourceTree = ""; }; + 9206FDC51F140707005078A2 /* Texture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Texture.h; sourceTree = ""; }; + 9206FDC71F140D40005078A2 /* Shader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Shader.cpp; sourceTree = ""; }; + 9206FDC81F140D40005078A2 /* Shader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Shader.h; sourceTree = ""; }; + 9223C4671F009428009A94D7 /* Game.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Game.cpp; sourceTree = ""; }; + 9223C4681F009428009A94D7 /* Actor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Actor.cpp; sourceTree = ""; }; + 9223C4691F009428009A94D7 /* Actor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Actor.h; sourceTree = ""; }; + 9223C46E1F009428009A94D7 /* Component.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Component.cpp; sourceTree = ""; }; + 9223C46F1F009428009A94D7 /* Component.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Component.h; sourceTree = ""; }; + 9223C4701F009428009A94D7 /* Game.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Game.h; sourceTree = ""; }; + 9223C4711F009428009A94D7 /* Main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Main.cpp; sourceTree = ""; }; + 9223C4721F009428009A94D7 /* Math.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Math.cpp; sourceTree = ""; }; + 9223C4731F009428009A94D7 /* Math.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Math.h; sourceTree = ""; }; + 9223C4761F009428009A94D7 /* SpriteComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpriteComponent.cpp; sourceTree = ""; }; + 9223C4771F009428009A94D7 /* SpriteComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpriteComponent.h; sourceTree = ""; }; + 9223C48A1F0CA3CE009A94D7 /* MoveComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MoveComponent.cpp; sourceTree = ""; }; + 9223C48C1F0CA3D4009A94D7 /* MoveComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MoveComponent.h; sourceTree = ""; }; + 9223C48D1F0CA67A009A94D7 /* Tile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Tile.cpp; sourceTree = ""; }; + 9223C48E1F0CA67A009A94D7 /* Tile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Tile.h; sourceTree = ""; }; + 9223C4901F0CA766009A94D7 /* CollisionComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CollisionComponent.cpp; sourceTree = ""; }; + 9223C4911F0CA766009A94D7 /* CircleComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CircleComponent.cpp; sourceTree = ""; }; + 9223C4921F0CA766009A94D7 /* CollisionComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CollisionComponent.h; sourceTree = ""; }; + 9223C4931F0CA766009A94D7 /* CircleComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CircleComponent.h; sourceTree = ""; }; + 9223C4961F0DBD69009A94D7 /* Grid.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Grid.cpp; sourceTree = ""; }; + 9223C4971F0DBD69009A94D7 /* Grid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Grid.h; sourceTree = ""; }; + 92CF0D771F3BBF140086A0F3 /* VertexArray.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VertexArray.cpp; sourceTree = ""; }; + 92CF0D781F3BBF140086A0F3 /* VertexArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VertexArray.h; sourceTree = ""; }; + 92D324FA1B697389005A86C7 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; + 92E46DF71B634EA30035CD21 /* Game-mac */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "Game-mac"; sourceTree = BUILT_PRODUCTS_DIR; }; + 92E46E931B6353E50035CD21 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 92E46DF41B634EA30035CD21 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 92D324FB1B697389005A86C7 /* CoreFoundation.framework in Frameworks */, + 92E46E941B6353E50035CD21 /* OpenGL.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 92E46DEE1B634EA30035CD21 = { + isa = PBXGroup; + children = ( + 92CF0D771F3BBF140086A0F3 /* VertexArray.cpp */, + 92CF0D781F3BBF140086A0F3 /* VertexArray.h */, + 9223C4681F009428009A94D7 /* Actor.cpp */, + 9223C4691F009428009A94D7 /* Actor.h */, + 9203E9F71F0F12FE00F9FFC2 /* Bullet.cpp */, + 9203E9F81F0F12FE00F9FFC2 /* Bullet.h */, + 9223C46E1F009428009A94D7 /* Component.cpp */, + 9223C46F1F009428009A94D7 /* Component.h */, + 9223C4911F0CA766009A94D7 /* CircleComponent.cpp */, + 9223C4931F0CA766009A94D7 /* CircleComponent.h */, + 9223C4901F0CA766009A94D7 /* CollisionComponent.cpp */, + 9223C4921F0CA766009A94D7 /* CollisionComponent.h */, + 9203E9F11F0DE24000F9FFC2 /* Enemy.cpp */, + 9203E9F21F0DE24000F9FFC2 /* Enemy.h */, + 9223C4671F009428009A94D7 /* Game.cpp */, + 9223C4701F009428009A94D7 /* Game.h */, + 9223C4961F0DBD69009A94D7 /* Grid.cpp */, + 9223C4971F0DBD69009A94D7 /* Grid.h */, + 9223C4711F009428009A94D7 /* Main.cpp */, + 9223C4721F009428009A94D7 /* Math.cpp */, + 9223C4731F009428009A94D7 /* Math.h */, + 9223C48A1F0CA3CE009A94D7 /* MoveComponent.cpp */, + 9223C48C1F0CA3D4009A94D7 /* MoveComponent.h */, + 9203E9F41F0DF13600F9FFC2 /* NavComponent.cpp */, + 9203E9F51F0DF13600F9FFC2 /* NavComponent.h */, + 9206FDC71F140D40005078A2 /* Shader.cpp */, + 9206FDC81F140D40005078A2 /* Shader.h */, + 9223C4761F009428009A94D7 /* SpriteComponent.cpp */, + 9223C4771F009428009A94D7 /* SpriteComponent.h */, + 9206FDC41F140707005078A2 /* Texture.cpp */, + 9206FDC51F140707005078A2 /* Texture.h */, + 9223C48D1F0CA67A009A94D7 /* Tile.cpp */, + 9223C48E1F0CA67A009A94D7 /* Tile.h */, + 9203E9EE1F0DD69900F9FFC2 /* Tower.cpp */, + 9203E9EF1F0DD69900F9FFC2 /* Tower.h */, + 9206FDC31F13F7E8005078A2 /* Shaders */, + 92E46DF81B634EA30035CD21 /* Products */, + 92D324FA1B697389005A86C7 /* CoreFoundation.framework */, + 92E46E931B6353E50035CD21 /* OpenGL.framework */, + ); + sourceTree = ""; + }; + 92E46DF81B634EA30035CD21 /* Products */ = { + isa = PBXGroup; + children = ( + 92E46DF71B634EA30035CD21 /* Game-mac */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 92E46DF61B634EA30035CD21 /* Game-mac */ = { + isa = PBXNativeTarget; + buildConfigurationList = 92E46DFE1B634EA40035CD21 /* Build configuration list for PBXNativeTarget "Game-mac" */; + buildPhases = ( + 92E46DF31B634EA30035CD21 /* Sources */, + 92E46DF41B634EA30035CD21 /* Frameworks */, + 92E46EA11B63615B0035CD21 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Game-mac"; + productName = "Game-mac"; + productReference = 92E46DF71B634EA30035CD21 /* Game-mac */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 92E46DEF1B634EA30035CD21 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0830; + ORGANIZATIONNAME = "Sanjay Madhav"; + TargetAttributes = { + 92E46DF61B634EA30035CD21 = { + CreatedOnToolsVersion = 6.4; + }; + }; + }; + buildConfigurationList = 92E46DF21B634EA30035CD21 /* Build configuration list for PBXProject "Chapter6-mac" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 92E46DEE1B634EA30035CD21; + productRefGroup = 92E46DF81B634EA30035CD21 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 92E46DF61B634EA30035CD21 /* Game-mac */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXShellScriptBuildPhase section */ + 92E46EA11B63615B0035CD21 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if [ -d \"$BUILD_DIR/Debug\" ]; then\n cp \"$SRCROOT\"/../external/GLEW/lib/mac/*.dylib $BUILD_DIR/Debug\n cp \"$SRCROOT\"/../external/SDL/lib/mac/*.dylib $BUILD_DIR/Debug\nfi\n\nif [ -d \"$BUILD_DIR/Release\" ]; then\n cp \"$SRCROOT\"/../external/GLEW/lib/mac/*.dylib $BUILD_DIR/Release\n cp \"$SRCROOT\"/../external/SDL/lib/mac/*.dylib $BUILD_DIR/Release\nfi"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 92E46DF31B634EA30035CD21 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9223C4941F0CA766009A94D7 /* CollisionComponent.cpp in Sources */, + 9223C47D1F009428009A94D7 /* Main.cpp in Sources */, + 9223C47E1F009428009A94D7 /* Math.cpp in Sources */, + 9203E9F01F0DD69900F9FFC2 /* Tower.cpp in Sources */, + 9223C4781F009428009A94D7 /* Game.cpp in Sources */, + 9203E9F61F0DF13600F9FFC2 /* NavComponent.cpp in Sources */, + 9223C4801F009428009A94D7 /* SpriteComponent.cpp in Sources */, + 92CF0D791F3BBF140086A0F3 /* VertexArray.cpp in Sources */, + 9223C48B1F0CA3CE009A94D7 /* MoveComponent.cpp in Sources */, + 9203E9F31F0DE24000F9FFC2 /* Enemy.cpp in Sources */, + 9206FDC91F140D40005078A2 /* Shader.cpp in Sources */, + 9223C4791F009428009A94D7 /* Actor.cpp in Sources */, + 9203E9F91F0F12FE00F9FFC2 /* Bullet.cpp in Sources */, + 9223C4951F0CA766009A94D7 /* CircleComponent.cpp in Sources */, + 9223C47C1F009428009A94D7 /* Component.cpp in Sources */, + 9206FDC61F140707005078A2 /* Texture.cpp in Sources */, + 9223C48F1F0CA67A009A94D7 /* Tile.cpp in Sources */, + 9223C4981F0DBD69009A94D7 /* Grid.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 92E46DFC1B634EA40035CD21 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + 92E46DFD1B634EA40035CD21 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + }; + name = Release; + }; + 92E46DFF1B634EA40035CD21 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "c++14"; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_ENABLE_CPP_RTTI = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, + "$(SRCROOT)/../external/SDL/include", + "$(SRCROOT)/../external/GLEW/include", + "$(SRCROOT)/../external/SOIL/include", + ); + LIBRARY_SEARCH_PATHS = ( + "$(SRCROOT)/../external/GLEW/lib/mac", + "$(SRCROOT)/../external/SDL/lib/mac", + "$(SRCROOT)/../external/SOIL/lib/mac", + ); + OTHER_LDFLAGS = ( + "-lGLEW.2.1.0", + "-lSDL2-2.0.0", + "-lSDL2_mixer-2.0.0", + "-lSDL2_ttf-2.0.0", + "-lSOIL", + "-lSDL2_image-2.0.0", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 92E46E001B634EA40035CD21 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "c++14"; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_ENABLE_CPP_RTTI = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, + "$(SRCROOT)/../external/SDL/include", + "$(SRCROOT)/../external/GLEW/include", + "$(SRCROOT)/../external/SOIL/include", + ); + LIBRARY_SEARCH_PATHS = ( + "$(SRCROOT)/../external/GLEW/lib/mac", + "$(SRCROOT)/../external/SDL/lib/mac", + "$(SRCROOT)/../external/SOIL/lib/mac", + ); + OTHER_LDFLAGS = ( + "-lGLEW.2.1.0", + "-lSDL2-2.0.0", + "-lSDL2_mixer-2.0.0", + "-lSDL2_ttf-2.0.0", + "-lSOIL", + "-lSDL2_image-2.0.0", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 92E46DF21B634EA30035CD21 /* Build configuration list for PBXProject "Chapter6-mac" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 92E46DFC1B634EA40035CD21 /* Debug */, + 92E46DFD1B634EA40035CD21 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 92E46DFE1B634EA40035CD21 /* Build configuration list for PBXNativeTarget "Game-mac" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 92E46DFF1B634EA40035CD21 /* Debug */, + 92E46E001B634EA40035CD21 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 92E46DEF1B634EA30035CD21 /* Project object */; +} diff --git a/Chapter05/Chapter6-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Chapter05/Chapter6-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..57070e17 --- /dev/null +++ b/Chapter05/Chapter6-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Chapter05/Chapter6-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme b/Chapter05/Chapter6-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme new file mode 100644 index 00000000..2f114aa1 --- /dev/null +++ b/Chapter05/Chapter6-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter05/CircleComponent.cpp b/Chapter05/CircleComponent.cpp new file mode 100644 index 00000000..996b3ecc --- /dev/null +++ b/Chapter05/CircleComponent.cpp @@ -0,0 +1,27 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "CircleComponent.h" +#include "Actor.h" + +CircleComponent::CircleComponent(class Actor* owner) +:CollisionComponent(owner) +,mRadius(0.0f) +{ + +} + +const Vector2& CircleComponent::GetCenter() const +{ + return mOwner->GetPosition(); +} + +float CircleComponent::GetRadius() const +{ + return mOwner->GetScale() * mRadius; +} diff --git a/Chapter05/CircleComponent.h b/Chapter05/CircleComponent.h new file mode 100644 index 00000000..ed4c99a7 --- /dev/null +++ b/Chapter05/CircleComponent.h @@ -0,0 +1,24 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "CollisionComponent.h" +#include "Math.h" + +class CircleComponent : public CollisionComponent +{ +public: + CircleComponent(class Actor* owner); + + void SetRadius(float radius) { mRadius = radius; } + float GetRadius() const; + + const Vector2& GetCenter() const; +private: + float mRadius; +}; diff --git a/Chapter05/CollisionComponent.cpp b/Chapter05/CollisionComponent.cpp new file mode 100644 index 00000000..79c626fc --- /dev/null +++ b/Chapter05/CollisionComponent.cpp @@ -0,0 +1,20 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "CollisionComponent.h" + +CollisionComponent::CollisionComponent(class Actor* owner,int updateOrder) +:Component(owner, updateOrder) +{ + +} + +CollisionComponent::~CollisionComponent() +{ + +} diff --git a/Chapter05/CollisionComponent.h b/Chapter05/CollisionComponent.h new file mode 100644 index 00000000..4074fa58 --- /dev/null +++ b/Chapter05/CollisionComponent.h @@ -0,0 +1,17 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "Component.h" +class CollisionComponent : public Component +{ +public: + CollisionComponent(class Actor* owner, int updateOrder = 100); + ~CollisionComponent(); +}; + diff --git a/Chapter05/Component.cpp b/Chapter05/Component.cpp new file mode 100644 index 00000000..9b345987 --- /dev/null +++ b/Chapter05/Component.cpp @@ -0,0 +1,27 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "Component.h" +#include "Actor.h" + +Component::Component(Actor* owner, int updateOrder) + :mOwner(owner) + ,mUpdateOrder(updateOrder) +{ + // Add to actor's vector of components + mOwner->AddComponent(this); +} + +Component::~Component() +{ + mOwner->RemoveComponent(this); +} + +void Component::Update(float deltaTime) +{ +} diff --git a/Chapter05/Component.h b/Chapter05/Component.h new file mode 100644 index 00000000..26d6fb87 --- /dev/null +++ b/Chapter05/Component.h @@ -0,0 +1,27 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#pragma once +class Component +{ +public: + // Constructor + // (the lower the update order, the earlier the component updates) + Component(class Actor* owner, int updateOrder = 100); + // Destructor + virtual ~Component(); + // Update this component by delta time + virtual void Update(float deltaTime); + + int GetUpdateOrder() const { return mUpdateOrder; } +protected: + // Owning actor + class Actor* mOwner; + // Update order of component + int mUpdateOrder; +}; diff --git a/Chapter05/Enemy.cpp b/Chapter05/Enemy.cpp new file mode 100644 index 00000000..72400715 --- /dev/null +++ b/Chapter05/Enemy.cpp @@ -0,0 +1,56 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "Enemy.h" +#include "Game.h" +#include "SpriteComponent.h" +#include "NavComponent.h" +#include "Grid.h" +#include "Tile.h" +#include "CircleComponent.h" +#include + +Enemy::Enemy(class Game* game) +:Actor(game) +{ + // Add to enemy vector + game->GetEnemies().emplace_back(this); + + SpriteComponent* sc = new SpriteComponent(this); + sc->SetTexture(game->GetTexture("Assets/Airplane.png")); + // Set position at start tile + SetPosition(GetGame()->GetGrid()->GetStartTile()->GetPosition()); + // Setup a nav component at the start tile + NavComponent* nc = new NavComponent(this); + nc->SetForwardSpeed(150.0f); + nc->StartPath(GetGame()->GetGrid()->GetStartTile()); + // Setup a circle for collision + mCircle = new CircleComponent(this); + mCircle->SetRadius(25.0f); +} + +Enemy::~Enemy() +{ + // Remove from enemy vector + auto iter = std::find(GetGame()->GetEnemies().begin(), + GetGame()->GetEnemies().end(), + this); + GetGame()->GetEnemies().erase(iter); +} + +void Enemy::UpdateActor(float deltaTime) +{ + Actor::UpdateActor(deltaTime); + + // Am I near the end tile? + Vector2 diff = GetPosition() - GetGame()->GetGrid()->GetEndTile()->GetPosition(); + if (Math::NearZero(diff.Length(), 10.0f)) + { + SetState(EDead); + } +} diff --git a/Chapter05/Enemy.h b/Chapter05/Enemy.h new file mode 100644 index 00000000..b8777550 --- /dev/null +++ b/Chapter05/Enemy.h @@ -0,0 +1,21 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "Actor.h" + +class Enemy : public Actor +{ +public: + Enemy(class Game* game); + ~Enemy(); + void UpdateActor(float deltaTime) override; + class CircleComponent* GetCircle() { return mCircle; } +private: + class CircleComponent* mCircle; +}; diff --git a/Chapter05/Exercises/Exercise3.3/Assets/MapLayer1.csv b/Chapter05/Exercises/Exercise3.3/Assets/MapLayer1.csv new file mode 100644 index 00000000..619c90f2 --- /dev/null +++ b/Chapter05/Exercises/Exercise3.3/Assets/MapLayer1.csv @@ -0,0 +1,24 @@ +27,42,43,44,42,43,44,42,43,44,42,43,44,42,43,44,42,43,44,42,43,44,42,43,44,42,43,44,42,43,44,42 +21,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 +29,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 +37,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 +21,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 +29,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,52,53,54,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 +27,11,12,13,14,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 +27,43,44,45,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 +29,-1,-1,-1,-1,-1,48,49,52,53,54,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 +37,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,52,53,54,-1,-1,-1,48,49,50,51,52,50 +21,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 +27,10,11,12,11,12,10,11,12,10,11,12,10,11,12,13,14,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 +27,43,44,42,43,44,42,43,44,42,43,44,42,43,44,45,-1,-1,-1,-1,-1,-1,48,49,53,54,-1,-1,-1,-1,-1,-1 +21,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 +29,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,56,57,58,59,57 +37,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,9,10,11,12,10,11,12,11,13,65,66,67,65 +21,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,41,42,42,43,44,42,43,44,45,-1,-1,-1,-1 +27,10,11,12,13,14,-1,-1,-1,-1,-1,-1,-1,48,49,53,54,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 +20,26,27,28,18,11,12,13,14,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 +28,34,35,36,34,35,36,27,11,12,13,14,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 +36,42,43,44,44,42,43,44,42,43,44,52,50,51,52,50,51,52,50,51,52,53,54,-1,-1,-1,-1,-1,-1,-1,-1,-1 +37,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 +21,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,52,53,54,-1,8,9,10 +29,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,25,26 diff --git a/Chapter05/Exercises/Exercise3.3/Assets/MapLayer2.csv b/Chapter05/Exercises/Exercise3.3/Assets/MapLayer2.csv new file mode 100644 index 00000000..49139b94 --- /dev/null +++ b/Chapter05/Exercises/Exercise3.3/Assets/MapLayer2.csv @@ -0,0 +1,24 @@ +70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70 +70,70,70,70,70,70,70,70,70,70,70,61,62,63,70,70,70,70,70,70,70,70,70,61,63,61,62,62,63,70,61,62 +70,70,70,70,70,70,70,70,70,70,70,69,0,71,70,70,70,70,70,70,61,62,63,69,71,69,0,0,71,70,69,0 +70,70,70,70,70,70,70,70,70,70,70,69,0,75,62,63,70,70,70,70,69,0,71,69,71,69,0,0,71,70,69,0 +70,70,70,70,70,61,62,62,62,62,62,76,0,0,0,71,70,70,70,61,76,0,71,69,75,76,0,0,71,70,69,0 +70,70,70,70,70,69,0,0,0,0,0,0,0,0,0,71,70,70,70,69,0,0,71,69,0,0,0,0,71,70,69,0 +70,70,70,70,70,69,0,0,0,0,0,0,0,0,0,75,63,61,63,69,0,0,71,69,0,0,0,0,71,70,69,0 +70,70,70,70,70,69,0,0,0,0,0,0,0,0,0,0,75,76,71,69,0,0,71,69,0,0,0,0,71,70,69,0 +70,70,70,61,62,76,0,0,0,0,0,0,0,0,0,0,0,0,71,69,0,0,71,69,0,0,0,0,71,70,69,0 +70,70,61,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,71,69,0,0,71,69,0,0,0,0,71,70,69,0 +70,70,69,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,71,69,0,0,71,69,0,0,0,0,71,70,69,0 +70,70,69,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,71,69,0,0,71,69,0,0,0,0,71,70,69,0 +70,70,69,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,71,69,0,0,71,69,0,0,0,0,71,70,69,0 +70,70,69,0,0,0,0,0,0,0,0,0,0,0,0,0,0,73,79,69,0,0,71,69,0,0,0,0,71,70,69,0 +70,70,77,78,78,74,0,0,0,0,0,0,0,0,0,0,0,71,70,77,78,78,79,69,0,0,0,0,71,70,77,78 +70,70,70,70,70,77,78,78,78,74,0,0,0,0,73,78,78,79,70,70,70,70,70,69,0,0,0,0,71,70,70,70 +70,70,70,70,70,70,70,70,70,69,73,78,74,0,71,70,70,70,70,70,70,70,70,77,78,78,78,78,79,70,70,70 +70,70,70,70,70,70,70,70,70,77,79,70,77,78,79,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70 +70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70 +70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70 +70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70 +70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70 +70,70,70,70,70,70,70,70,70,70,70,70,70,70,61,63,61,62,62,63,61,63,70,70,70,70,70,70,70,70,70,70 +70,70,70,70,70,70,70,70,70,70,70,70,70,61,76,71,69,0,0,75,76,71,70,70,70,70,70,70,70,70,70,70 diff --git a/Chapter05/Exercises/Exercise3.3/Assets/MapLayer3.csv b/Chapter05/Exercises/Exercise3.3/Assets/MapLayer3.csv new file mode 100644 index 00000000..ed9cb2cf --- /dev/null +++ b/Chapter05/Exercises/Exercise3.3/Assets/MapLayer3.csv @@ -0,0 +1,24 @@ +96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97 +104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105 +112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113 +96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97 +104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105 +112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113 +96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97 +104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105 +112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113 +96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97 +104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105 +112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113 +96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97 +104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105 +112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113 +96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97 +104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105 +112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113 +96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97 +104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105 +112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113 +96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97 +104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105 +112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113 diff --git a/Chapter05/Exercises/Exercise3.3/Assets/Tiles.png b/Chapter05/Exercises/Exercise3.3/Assets/Tiles.png new file mode 100644 index 0000000000000000000000000000000000000000..58409387e3e117a265371caeae590692e7ec0eb6 GIT binary patch literal 28383 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 literal 0 HcmV?d00001 diff --git a/Chapter05/Game.cpp b/Chapter05/Game.cpp new file mode 100644 index 00000000..3cf22dd7 --- /dev/null +++ b/Chapter05/Game.cpp @@ -0,0 +1,353 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "Game.h" +#include +#include "Texture.h" +#include "VertexArray.h" +#include "Shader.h" +#include +#include "Actor.h" +#include "SpriteComponent.h" +#include "Grid.h" +#include "Enemy.h" + +Game::Game() +:mWindow(nullptr) +,mSpriteShader(nullptr) +,mIsRunning(true) +{ + +} + +bool Game::Initialize() +{ + if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO) != 0) + { + SDL_Log("Unable to initialize SDL: %s", SDL_GetError()); + return false; + } + + // Set OpenGL attributes + // Use the core OpenGL profile + SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); + // Specify version 3.3 + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3); + // Request a color buffer with 8-bits per RGBA channel + SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8); + // Enable double buffering + SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); + // Force OpenGL to use hardware acceleration + SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1); + + mWindow = SDL_CreateWindow("Game Programming in C++ (Chapter 6)", 100, 100, + 1024, 768, SDL_WINDOW_OPENGL); + if (!mWindow) + { + SDL_Log("Failed to create window: %s", SDL_GetError()); + return false; + } + + // Create an OpenGL context + mContext = SDL_GL_CreateContext(mWindow); + + // Initialize GLEW + glewExperimental = GL_TRUE; + if (glewInit() != GLEW_OK) + { + SDL_Log("Failed to initialize GLEW."); + return false; + } + + // On some platforms, GLEW will emit a benign error code, + // so clear it + glGetError(); + + // Make sure we can create/compile shaders + if (!LoadShaders()) + { + SDL_Log("Failed to load shaders."); + return false; + } + + // Create quad for drawing sprites + CreateSpriteVerts(); + + LoadData(); + + mTicksCount = SDL_GetTicks(); + + return true; +} + +void Game::RunLoop() +{ + while (mIsRunning) + { + ProcessInput(); + UpdateGame(); + GenerateOutput(); + } +} + +void Game::ProcessInput() +{ + SDL_Event event; + while (SDL_PollEvent(&event)) + { + switch (event.type) + { + case SDL_QUIT: + mIsRunning = false; + break; + } + } + + const Uint8* state = SDL_GetKeyboardState(NULL); + if (state[SDL_SCANCODE_ESCAPE]) + { + mIsRunning = false; + } + if (state[SDL_SCANCODE_B]) + { + mGrid->BuildTower(); + } + + // Process mouse + int x, y; + Uint32 buttons = SDL_GetMouseState(&x, &y); + if (SDL_BUTTON(buttons) & SDL_BUTTON_LEFT) + { + mGrid->ProcessClick(x, y); + } +} + +void Game::UpdateGame() +{ + // Compute delta time + // Wait until 16ms has elapsed since last frame + while (!SDL_TICKS_PASSED(SDL_GetTicks(), mTicksCount + 16)) + ; + + float deltaTime = (SDL_GetTicks() - mTicksCount) / 1000.0f; + if (deltaTime > 0.05f) + { + deltaTime = 0.05f; + } + mTicksCount = SDL_GetTicks(); + + // Make copy of actor vector + // (iterate over this in case new actors are created) + std::vector copy = mActors; + + // Update all actors + for (auto actor : copy) + { + actor->Update(deltaTime); + } + + // Add any dead actors to a temp vector + std::vector deadActors; + for (auto actor : mActors) + { + if (actor->GetState() == Actor::EDead) + { + deadActors.emplace_back(actor); + } + } + + // Delete any of the dead actors (which will + // remove them from mActors) + for (auto actor : deadActors) + { + delete actor; + } +} + +void Game::GenerateOutput() +{ + // Set the clear color to dark green + glClearColor(0.13f, 0.54f, 0.13f, 1.0f); + // Clear the color buffer + glClear(GL_COLOR_BUFFER_BIT); + + // Draw all sprite components + // Enable alpha blending on the color buffer + glEnable(GL_BLEND); + glBlendEquationSeparate(GL_FUNC_ADD, GL_FUNC_ADD); + glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); + + // Set shader/vao as active + mSpriteShader->SetActive(); + mSpriteVerts->SetActive(); + for (auto sprite : mSprites) + { + sprite->Draw(mSpriteShader); + } + + // Swap the buffers + SDL_GL_SwapWindow(mWindow); +} + +bool Game::LoadShaders() +{ + mSpriteShader = new Shader(); + if (!mSpriteShader->Load("Shaders/Sprite")) + { + return false; + } + + mSpriteShader->SetActive(); + // Set the view-projection matrix + Matrix4 viewProj = Matrix4::CreateSimpleViewProj(1024.f, 768.f); + mSpriteShader->SetMatrixUniform("uViewProj", viewProj); + return true; +} + +void Game::CreateSpriteVerts() +{ + float vertices[] = { + -0.5f, 0.5f, 0.f, 0.f, 0.f, // top left + 0.5f, 0.5f, 0.f, 1.f, 0.f, // top right + 0.5f, -0.5f, 0.f, 1.f, 1.f, // bottom right + -0.5f, -0.5f, 0.f, 0.f, 1.f // bottom left + }; + + unsigned int indices[] = { + 0, 1, 2, + 2, 3, 0 + }; + + mSpriteVerts = new VertexArray(vertices, 4, indices, 6); +} + +void Game::LoadData() +{ + // Load textures + LoadTexture("Assets/TileBrown.png"); + LoadTexture("Assets/TileGreen.png"); + LoadTexture("Assets/TileGrey.png"); + LoadTexture("Assets/TileTan.png"); + LoadTexture("Assets/TileBrownSelected.png"); + LoadTexture("Assets/TileGreenSelected.png"); + LoadTexture("Assets/TileGreySelected.png"); + LoadTexture("Assets/TileTanSelected.png"); + LoadTexture("Assets/Base.png"); + LoadTexture("Assets/Tower.png"); + LoadTexture("Assets/Airplane.png"); + LoadTexture("Assets/Projectile.png"); + + mGrid = new Grid(this); +} + +void Game::UnloadData() +{ + // Delete actors + // Because ~Actor calls RemoveActor, have to use a different style loop + while (!mActors.empty()) + { + delete mActors.back(); + } + + // Destroy textures + for (auto i : mTextures) + { + i.second->Unload(); + delete i.second; + } + mTextures.clear(); +} + +void Game::LoadTexture(const char* fileName) +{ + Texture* tex = new Texture(); + if (tex->Load(fileName)) + { + mTextures.emplace(fileName, tex); + } +} + +Texture* Game::GetTexture(const std::string& fileName) +{ + Texture* tex = nullptr; + auto iter = mTextures.find(fileName); + if (iter != mTextures.end()) + { + tex = iter->second; + } + return tex; +} + +void Game::Shutdown() +{ + UnloadData(); + delete mSpriteVerts; + mSpriteShader->Unload(); + delete mSpriteShader; + SDL_GL_DeleteContext(mContext); + SDL_DestroyWindow(mWindow); + SDL_Quit(); +} + +void Game::AddActor(Actor* actor) +{ + mActors.emplace_back(actor); +} + +void Game::RemoveActor(Actor* actor) +{ + auto iter = std::find(mActors.begin(), mActors.end(), actor); + if (iter != mActors.end()) + { + // Swap to end of vector and pop off (avoid erase copies) + std::iter_swap(iter, mActors.end() - 1); + mActors.pop_back(); + } +} + +void Game::AddSprite(SpriteComponent* sprite) +{ + mSprites.emplace_back(sprite); + // Resort sprites by draw order + std::sort(mSprites.begin(), mSprites.end(), [](SpriteComponent* a, SpriteComponent* b) { + return a->GetDrawOrder() < b->GetDrawOrder(); + }); +} + +void Game::RemoveSprite(SpriteComponent* sprite) +{ + auto iter = std::find(mSprites.begin(), mSprites.end(), sprite); + mSprites.erase(iter); +} + +Enemy* Game::GetNearestEnemy(const Vector2& pos) +{ + Enemy* best = nullptr; + + if (mEnemies.size() > 0) + { + best = mEnemies[0]; + // Save the distance squared of first enemy, and test if others are closer + float bestDistSq = (pos - mEnemies[0]->GetPosition()).LengthSq(); + for (size_t i = 1; i < mEnemies.size(); i++) + { + float newDistSq = (pos - mEnemies[i]->GetPosition()).LengthSq(); + if (newDistSq < bestDistSq) + { + bestDistSq = newDistSq; + best = mEnemies[i]; + } + } + } + + return best; +} diff --git a/Chapter05/Game.h b/Chapter05/Game.h new file mode 100644 index 00000000..8c5a5d12 --- /dev/null +++ b/Chapter05/Game.h @@ -0,0 +1,68 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "SDL/SDL.h" +#include +#include +#include +#include "Math.h" + +class Game +{ +public: + Game(); + bool Initialize(); + void RunLoop(); + void Shutdown(); + + void AddActor(class Actor* actor); + void RemoveActor(class Actor* actor); + + void AddSprite(class SpriteComponent* sprite); + void RemoveSprite(class SpriteComponent* sprite); + + void LoadTexture(const char* fileName); + class Texture* GetTexture(const std::string& fileName); + + class Grid* GetGrid() { return mGrid; } + std::vector& GetEnemies() { return mEnemies; } + class Enemy* GetNearestEnemy(const Vector2& pos); +private: + void ProcessInput(); + void UpdateGame(); + void GenerateOutput(); + bool LoadShaders(); + void CreateSpriteVerts(); + void LoadData(); + void UnloadData(); + + // Map of textures loaded + std::unordered_map mTextures; + + // All the actors in the game + std::vector mActors; + + // All the sprite components drawn + std::vector mSprites; + + // Sprite shader + class Shader* mSpriteShader; + // Sprite vertex array + class VertexArray* mSpriteVerts; + + SDL_Window* mWindow; + SDL_GLContext mContext; + Uint32 mTicksCount; + bool mIsRunning; + + // Game-specific + std::vector mEnemies; + class Grid* mGrid; + float mNextEnemy; +}; diff --git a/Chapter05/Game.vcxproj b/Chapter05/Game.vcxproj new file mode 100644 index 00000000..16f2def0 --- /dev/null +++ b/Chapter05/Game.vcxproj @@ -0,0 +1,145 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {BC508D87-495F-4554-932D-DD68388B63CC} + Win32Proj + Game + + + + Application + true + v141 + Unicode + + + Application + false + v141 + true + Unicode + + + + + + + + + + + + + true + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) + true + ..\external\SDL\include;..\external\GLEW\include;..\external\SOIL\include;%(AdditionalIncludeDirectories) + false + Sync + + + Console + true + ..\external\SDL\lib\win\x86;..\external\GLEW\lib\win\x86;..\external\SOIL\lib\win\x86;%(AdditionalLibraryDirectories) + opengl32.lib;SDL2.lib;SDL2main.lib;SDL2_ttf.lib;SDL2_mixer.lib;SDL2_image.lib;glew32.lib;SOIL.lib;%(AdditionalDependencies) + /NODEFAULTLIB:msvcrt.lib %(AdditionalOptions) + + + xcopy "$(ProjectDir)\..\external\SDL\lib\win\x86\*.dll" "$(OutDir)" /i /s /y +xcopy "$(ProjectDir)\..\external\GLEW\lib\win\x86\*.dll" "$(OutDir)" /i /s /y + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) + true + ..\external\SDL\include;..\external\GLEW\include;..\external\SOIL\include;%(AdditionalIncludeDirectories) + false + Sync + + + Console + true + true + true + ..\external\SDL\lib\win\x86;..\external\GLEW\lib\win\x86;..\external\SOIL\lib\win\x86;%(AdditionalLibraryDirectories) + opengl32.lib;SDL2.lib;SDL2main.lib;SDL2_ttf.lib;SDL2_mixer.lib;SDL2_image.lib;glew32.lib;SOIL.lib;%(AdditionalDependencies) + + + xcopy "$(ProjectDir)\..\external\SDL\lib\win\x86\*.dll" "$(OutDir)" /i /s /y +xcopy "$(ProjectDir)\..\external\GLEW\lib\win\x86\*.dll" "$(OutDir)" /i /s /y + + + + + + \ No newline at end of file diff --git a/Chapter05/Game.vcxproj.filters b/Chapter05/Game.vcxproj.filters new file mode 100644 index 00000000..1059f5e9 --- /dev/null +++ b/Chapter05/Game.vcxproj.filters @@ -0,0 +1,129 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {12a47348-9a6e-404a-8d7e-2ffa91eb59f6} + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Shaders + + + Shaders + + + \ No newline at end of file diff --git a/Chapter05/Grid.cpp b/Chapter05/Grid.cpp new file mode 100644 index 00000000..9715d030 --- /dev/null +++ b/Chapter05/Grid.cpp @@ -0,0 +1,248 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "Grid.h" +#include "Tile.h" +#include "Tower.h" +#include "Enemy.h" +#include + +Grid::Grid(class Game* game) +:Actor(game) +,mSelectedTile(nullptr) +{ + // 7 rows, 16 columns + mTiles.resize(NumRows); + for (size_t i = 0; i < mTiles.size(); i++) + { + mTiles[i].resize(NumCols); + } + + // Create tiles + for (size_t i = 0; i < NumRows; i++) + { + for (size_t j = 0; j < NumCols; j++) + { + mTiles[i][j] = new Tile(GetGame()); + mTiles[i][j]->SetPosition(Vector2(StartX + TileSize/2.0f + j * TileSize, StartY - i * TileSize)); + } + } + + // Set start/end tiles + GetStartTile()->SetTileState(Tile::EStart); + GetEndTile()->SetTileState(Tile::EBase); + + // Set up adjacency lists + for (size_t i = 0; i < NumRows; i++) + { + for (size_t j = 0; j < NumCols; j++) + { + if (i > 0) + { + mTiles[i][j]->mAdjacent.push_back(mTiles[i-1][j]); + } + if (i < NumRows - 1) + { + mTiles[i][j]->mAdjacent.push_back(mTiles[i+1][j]); + } + if (j > 0) + { + mTiles[i][j]->mAdjacent.push_back(mTiles[i][j-1]); + } + if (j < NumCols - 1) + { + mTiles[i][j]->mAdjacent.push_back(mTiles[i][j+1]); + } + } + } + + // Find path (in reverse) + FindPath(GetEndTile(), GetStartTile()); + UpdatePathTiles(GetStartTile()); + + mNextEnemy = EnemyTime; +} + +void Grid::SelectTile(size_t row, size_t col) +{ + // Make sure it's a valid selection + Tile::TileState tstate = mTiles[row][col]->GetTileState(); + if (tstate != Tile::EStart && tstate != Tile::EBase) + { + // Deselect previous one + if (mSelectedTile) + { + mSelectedTile->ToggleSelect(); + } + mSelectedTile = mTiles[row][col]; + mSelectedTile->ToggleSelect(); + } +} + +void Grid::ProcessClick(int x, int y) +{ + y -= static_cast(StartY - TileSize / 2); + if (y >= 0) + { + x /= static_cast(TileSize); + y /= static_cast(TileSize); + if (x >= 0 && x < static_cast(NumCols) && y >= 0 && y < static_cast(NumRows)) + { + SelectTile(y, x); + } + } +} + +// Implements A* pathfinding +bool Grid::FindPath(Tile* start, Tile* goal) +{ + for (size_t i = 0; i < NumRows; i++) + { + for (size_t j = 0; j < NumCols; j++) + { + mTiles[i][j]->g = 0.0f; + } + } + + // Open/closed sets + std::vector openSet; + std::vector closedSet; + + // Set current node to start, and add to closed set + Tile* current = start; + closedSet.emplace_back(current); + + do + { + // Add adjacent nodes to open set + for (Tile* neighbor : current->mAdjacent) + { + if (neighbor->mBlocked) + { + continue; + } + + // Only check nodes that aren't in the closed set + auto iter = std::find(closedSet.begin(), closedSet.end(), + neighbor); + if (iter == closedSet.end()) + { + iter = std::find(openSet.begin(), openSet.end(), neighbor); + if (iter == openSet.end()) + { + // Not in the open set, so set parent + neighbor->mParent = current; + neighbor->h = Math::Abs(neighbor->GetPosition().x - goal->GetPosition().x) + + Math::Abs(neighbor->GetPosition().y - goal->GetPosition().y); + // g(x) is the parent's g plus cost of traversing edge + neighbor->g = current->g + TileSize; + neighbor->f = neighbor->g + neighbor->h; + openSet.emplace_back(neighbor); + } + else + { + // Compute g(x) cost if current becomes the parent + float newG = current->g + TileSize; + if (newG < current->g) + { + // Adopt this node + neighbor->mParent = current; + neighbor->g = newG; + // f(x) changes because g(x) changes + neighbor->f = neighbor->g + neighbor->h; + } + } + } + } + + // If open set is empty, all possible paths are exhausted + if (openSet.empty()) + { + break; + } + + // Find lowest cost node in open set + auto iter = std::min_element(openSet.begin(), openSet.end(), + [](Tile* a, Tile* b) { + return a->f < b->f; + }); + // Set to current and move from open to closed + current = *iter; + openSet.erase(iter); + closedSet.emplace_back(current); + } + while (current != goal); + + // Did we find a path? + return (current == goal) ? true : false; +} + +void Grid::UpdatePathTiles(class Tile* start) +{ + // Reset all tiles to normal (except for start/end) + for (size_t i = 0; i < NumRows; i++) + { + for (size_t j = 0; j < NumCols; j++) + { + if (!(i == 3 && j == 0) && !(i == 3 && j == 15)) + { + mTiles[i][j]->SetTileState(Tile::EDefault); + } + } + } + + Tile* t = start->mParent; + while (t != GetEndTile()) + { + t->SetTileState(Tile::EPath); + t = t->mParent; + } +} + +void Grid::BuildTower() +{ + if (mSelectedTile && !mSelectedTile->mBlocked) + { + mSelectedTile->mBlocked = true; + if (FindPath(GetEndTile(), GetStartTile())) + { + Tower* t = new Tower(GetGame()); + t->SetPosition(mSelectedTile->GetPosition()); + } + else + { + // This tower would block the path, so don't allow build + mSelectedTile->mBlocked = false; + FindPath(GetEndTile(), GetStartTile()); + } + UpdatePathTiles(GetStartTile()); + } +} + +Tile* Grid::GetStartTile() +{ + return mTiles[3][0]; +} + +Tile* Grid::GetEndTile() +{ + return mTiles[3][15]; +} + +void Grid::UpdateActor(float deltaTime) +{ + Actor::UpdateActor(deltaTime); + + // Is it time to spawn a new enemy? + mNextEnemy -= deltaTime; + if (mNextEnemy <= 0.0f) + { + new Enemy(GetGame()); + mNextEnemy += EnemyTime; + } +} diff --git a/Chapter05/Grid.h b/Chapter05/Grid.h new file mode 100644 index 00000000..c11f03db --- /dev/null +++ b/Chapter05/Grid.h @@ -0,0 +1,36 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "Actor.h" +#include + +class Grid : public Actor +{ +public: + Grid(class Game* game); + void ProcessClick(int x, int y); + bool FindPath(class Tile* start, class Tile* goal); + void BuildTower(); + class Tile* GetStartTile(); + class Tile* GetEndTile(); + void UpdateActor(float deltaTime) override; +private: + void SelectTile(size_t row, size_t col); + void UpdatePathTiles(class Tile* start); + class Tile* mSelectedTile; + std::vector> mTiles; + float mNextEnemy; + + const size_t NumRows = 7; + const size_t NumCols = 16; + const float StartY = 192.0f; + const float StartX = -512.0f; + const float TileSize = 64.0f; + const float EnemyTime = 1.5f; +}; diff --git a/Chapter05/Main.cpp b/Chapter05/Main.cpp new file mode 100644 index 00000000..36c41e1c --- /dev/null +++ b/Chapter05/Main.cpp @@ -0,0 +1,24 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "Game.h" +#include +#include +#include + +int main(int argc, char** argv) +{ + Game game; + bool success = game.Initialize(); + if (success) + { + game.RunLoop(); + } + game.Shutdown(); + return 0; +} diff --git a/Chapter05/Math.cpp b/Chapter05/Math.cpp new file mode 100644 index 00000000..9e1b7932 --- /dev/null +++ b/Chapter05/Math.cpp @@ -0,0 +1,240 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "Math.h" + +const Vector2 Vector2::Zero(0.0f, 0.0f); +const Vector2 Vector2::UnitX(1.0f, 0.0f); +const Vector2 Vector2::UnitY(0.0f, 1.0f); +const Vector2 Vector2::NegUnitX(-1.0f, 0.0f); +const Vector2 Vector2::NegUnitY(0.0f, -1.0f); + +const Vector3 Vector3::Zero(0.0f, 0.0f, 0.f); +const Vector3 Vector3::UnitX(1.0f, 0.0f, 0.0f); +const Vector3 Vector3::UnitY(0.0f, 1.0f, 0.0f); +const Vector3 Vector3::UnitZ(0.0f, 0.0f, 1.0f); +const Vector3 Vector3::NegUnitX(-1.0f, 0.0f, 0.0f); +const Vector3 Vector3::NegUnitY(0.0f, -1.0f, 0.0f); +const Vector3 Vector3::NegUnitZ(0.0f, 0.0f, -1.0f); +const Vector3 Vector3::Infinity(Math::Infinity, Math::Infinity, Math::Infinity); +const Vector3 Vector3::NegInfinity(Math::NegInfinity, Math::NegInfinity, Math::NegInfinity); + +static float m3Ident[3][3] = +{ + { 1.0f, 0.0f, 0.0f }, + { 0.0f, 1.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f } +}; +const Matrix3 Matrix3::Identity(m3Ident); + +static float m4Ident[4][4] = +{ + { 1.0f, 0.0f, 0.0f, 0.0f }, + { 0.0f, 1.0f, 0.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f, 0.0f }, + { 0.0f, 0.0f, 0.0f, 1.0f } +}; + +const Matrix4 Matrix4::Identity(m4Ident); + +const Quaternion Quaternion::Identity(0.0f, 0.0f, 0.0f, 1.0f); + +Vector2 Vector2::Transform(const Vector2& vec, const Matrix3& mat, float w /*= 1.0f*/) +{ + Vector2 retVal; + retVal.x = vec.x * mat.mat[0][0] + vec.y * mat.mat[1][0] + w * mat.mat[2][0]; + retVal.y = vec.x * mat.mat[0][1] + vec.y * mat.mat[1][1] + w * mat.mat[2][1]; + //ignore w since we aren't returning a new value for it... + return retVal; +} + +Vector3 Vector3::Transform(const Vector3& vec, const Matrix4& mat, float w /*= 1.0f*/) +{ + Vector3 retVal; + retVal.x = vec.x * mat.mat[0][0] + vec.y * mat.mat[1][0] + + vec.z * mat.mat[2][0] + w * mat.mat[3][0]; + retVal.y = vec.x * mat.mat[0][1] + vec.y * mat.mat[1][1] + + vec.z * mat.mat[2][1] + w * mat.mat[3][1]; + retVal.z = vec.x * mat.mat[0][2] + vec.y * mat.mat[1][2] + + vec.z * mat.mat[2][2] + w * mat.mat[3][2]; + //ignore w since we aren't returning a new value for it... + return retVal; +} + +// This will transform the vector and renormalize the w component +Vector3 Vector3::TransformWithPerspDiv(const Vector3& vec, const Matrix4& mat, float w /*= 1.0f*/) +{ + Vector3 retVal; + retVal.x = vec.x * mat.mat[0][0] + vec.y * mat.mat[1][0] + + vec.z * mat.mat[2][0] + w * mat.mat[3][0]; + retVal.y = vec.x * mat.mat[0][1] + vec.y * mat.mat[1][1] + + vec.z * mat.mat[2][1] + w * mat.mat[3][1]; + retVal.z = vec.x * mat.mat[0][2] + vec.y * mat.mat[1][2] + + vec.z * mat.mat[2][2] + w * mat.mat[3][2]; + float transformedW = vec.x * mat.mat[0][3] + vec.y * mat.mat[1][3] + + vec.z * mat.mat[2][3] + w * mat.mat[3][3]; + if (!Math::NearZero(Math::Abs(transformedW))) + { + transformedW = 1.0f / transformedW; + retVal *= transformedW; + } + return retVal; +} + +// Transform a Vector3 by a quaternion +Vector3 Vector3::Transform(const Vector3& v, const Quaternion& q) +{ + // v + 2.0*cross(q.xyz, cross(q.xyz,v) + q.w*v); + Vector3 qv(q.x, q.y, q.z); + Vector3 retVal = v; + retVal += 2.0f * Vector3::Cross(qv, Vector3::Cross(qv, v) + q.w * v); + return retVal; +} + +void Matrix4::Invert() +{ + // Thanks slow math + float tmp[12]; /* temp array for pairs */ + float src[16]; /* array of transpose source matrix */ + float dst[16]; /* storage */ + float det; /* determinant */ + /* transpose matrix */ + + // row 1 to col 1 + src[0] = mat[0][0]; + src[4] = mat[0][1]; + src[8] = mat[0][2]; + src[12] = mat[0][3]; + + // row 2 to col 2 + src[1] = mat[1][0]; + src[5] = mat[1][1]; + src[9] = mat[1][2]; + src[13] = mat[1][3]; + + // row 3 to col 3 + src[2] = mat[2][0]; + src[6] = mat[2][1]; + src[10] = mat[2][2]; + src[14] = mat[2][3]; + + // row 4 to col 4 + src[3] = mat[3][0]; + src[7] = mat[3][1]; + src[11] = mat[3][2]; + src[15] = mat[3][3]; + + // for (int i = 0; i < 4; i++) { + // src[i] = mat[i*4]; + // src[i + 4] = mat[i*4 + 1]; + // src[i + 8] = mat[i*4 + 2]; + // src[i + 12] = mat[i*4 + 3]; + // } + /* calculate pairs for first 8 elements (cofactors) */ + tmp[0] = src[10] * src[15]; + tmp[1] = src[11] * src[14]; + tmp[2] = src[9] * src[15]; + tmp[3] = src[11] * src[13]; + tmp[4] = src[9] * src[14]; + tmp[5] = src[10] * src[13]; + tmp[6] = src[8] * src[15]; + tmp[7] = src[11] * src[12]; + tmp[8] = src[8] * src[14]; + tmp[9] = src[10] * src[12]; + tmp[10] = src[8] * src[13]; + tmp[11] = src[9] * src[12]; + /* calculate first 8 elements (cofactors) */ + dst[0] = tmp[0] * src[5] + tmp[3] * src[6] + tmp[4] * src[7]; + dst[0] -= tmp[1] * src[5] + tmp[2] * src[6] + tmp[5] * src[7]; + dst[1] = tmp[1] * src[4] + tmp[6] * src[6] + tmp[9] * src[7]; + dst[1] -= tmp[0] * src[4] + tmp[7] * src[6] + tmp[8] * src[7]; + dst[2] = tmp[2] * src[4] + tmp[7] * src[5] + tmp[10] * src[7]; + dst[2] -= tmp[3] * src[4] + tmp[6] * src[5] + tmp[11] * src[7]; + dst[3] = tmp[5] * src[4] + tmp[8] * src[5] + tmp[11] * src[6]; + dst[3] -= tmp[4] * src[4] + tmp[9] * src[5] + tmp[10] * src[6]; + dst[4] = tmp[1] * src[1] + tmp[2] * src[2] + tmp[5] * src[3]; + dst[4] -= tmp[0] * src[1] + tmp[3] * src[2] + tmp[4] * src[3]; + dst[5] = tmp[0] * src[0] + tmp[7] * src[2] + tmp[8] * src[3]; + dst[5] -= tmp[1] * src[0] + tmp[6] * src[2] + tmp[9] * src[3]; + dst[6] = tmp[3] * src[0] + tmp[6] * src[1] + tmp[11] * src[3]; + dst[6] -= tmp[2] * src[0] + tmp[7] * src[1] + tmp[10] * src[3]; + dst[7] = tmp[4] * src[0] + tmp[9] * src[1] + tmp[10] * src[2]; + dst[7] -= tmp[5] * src[0] + tmp[8] * src[1] + tmp[11] * src[2]; + /* calculate pairs for second 8 elements (cofactors) */ + tmp[0] = src[2] * src[7]; + tmp[1] = src[3] * src[6]; + tmp[2] = src[1] * src[7]; + tmp[3] = src[3] * src[5]; + tmp[4] = src[1] * src[6]; + tmp[5] = src[2] * src[5]; + tmp[6] = src[0] * src[7]; + tmp[7] = src[3] * src[4]; + tmp[8] = src[0] * src[6]; + tmp[9] = src[2] * src[4]; + tmp[10] = src[0] * src[5]; + tmp[11] = src[1] * src[4]; + /* calculate second 8 elements (cofactors) */ + dst[8] = tmp[0] * src[13] + tmp[3] * src[14] + tmp[4] * src[15]; + dst[8] -= tmp[1] * src[13] + tmp[2] * src[14] + tmp[5] * src[15]; + dst[9] = tmp[1] * src[12] + tmp[6] * src[14] + tmp[9] * src[15]; + dst[9] -= tmp[0] * src[12] + tmp[7] * src[14] + tmp[8] * src[15]; + dst[10] = tmp[2] * src[12] + tmp[7] * src[13] + tmp[10] * src[15]; + dst[10] -= tmp[3] * src[12] + tmp[6] * src[13] + tmp[11] * src[15]; + dst[11] = tmp[5] * src[12] + tmp[8] * src[13] + tmp[11] * src[14]; + dst[11] -= tmp[4] * src[12] + tmp[9] * src[13] + tmp[10] * src[14]; + dst[12] = tmp[2] * src[10] + tmp[5] * src[11] + tmp[1] * src[9]; + dst[12] -= tmp[4] * src[11] + tmp[0] * src[9] + tmp[3] * src[10]; + dst[13] = tmp[8] * src[11] + tmp[0] * src[8] + tmp[7] * src[10]; + dst[13] -= tmp[6] * src[10] + tmp[9] * src[11] + tmp[1] * src[8]; + dst[14] = tmp[6] * src[9] + tmp[11] * src[11] + tmp[3] * src[8]; + dst[14] -= tmp[10] * src[11] + tmp[2] * src[8] + tmp[7] * src[9]; + dst[15] = tmp[10] * src[10] + tmp[4] * src[8] + tmp[9] * src[9]; + dst[15] -= tmp[8] * src[9] + tmp[11] * src[10] + tmp[5] * src[8]; + /* calculate determinant */ + det = src[0] * dst[0] + src[1] * dst[1] + src[2] * dst[2] + src[3] * dst[3]; + /* calculate matrix inverse */ + det = 1 / det; + for (int j = 0; j < 16; j++) + dst[j] *= det; + + // Set it back + for (int i = 0; i < 4; i++) + { + for (int j = 0; j < 4; j++) + { + mat[i][j] = dst[i * 4 + j]; + } + } +} + +Matrix4 Matrix4::CreateFromQuaternion(const class Quaternion& q) +{ + float mat[4][4]; + + mat[0][0] = 1.0f - 2.0f * q.y * q.y - 2.0f * q.z * q.z; + mat[0][1] = 2.0f * q.x * q.y + 2.0f * q.w * q.z; + mat[0][2] = 2.0f * q.x * q.z - 2.0f * q.w * q.y; + mat[0][3] = 0.0f; + + mat[1][0] = 2.0f * q.x * q.y - 2.0f * q.w * q.z; + mat[1][1] = 1.0f - 2.0f * q.x * q.x - 2.0f * q.z * q.z; + mat[1][2] = 2.0f * q.y * q.z + 2.0f * q.w * q.x; + mat[1][3] = 0.0f; + + mat[2][0] = 2.0f * q.x * q.z + 2.0f * q.w * q.y; + mat[2][1] = 2.0f * q.y * q.z - 2.0f * q.w * q.x; + mat[2][2] = 1.0f - 2.0f * q.x * q.x - 2.0f * q.y * q.y; + mat[2][3] = 0.0f; + + mat[3][0] = 0.0f; + mat[3][1] = 0.0f; + mat[3][2] = 0.0f; + mat[3][3] = 1.0f; + + return Matrix4(mat); +} diff --git a/Chapter05/Math.h b/Chapter05/Math.h new file mode 100644 index 00000000..51de3a26 --- /dev/null +++ b/Chapter05/Math.h @@ -0,0 +1,1033 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#pragma once + +#include +#include +#include + +namespace Math +{ + const float Pi = 3.1415926535f; + const float TwoPi = Pi * 2.0f; + const float PiOver2 = Pi / 2.0f; + const float Infinity = std::numeric_limits::infinity(); + const float NegInfinity = -std::numeric_limits::infinity(); + + inline float ToRadians(float degrees) + { + return degrees * Pi / 180.0f; + } + + inline float ToDegrees(float radians) + { + return radians * 180.0f / Pi; + } + + inline bool NearZero(float val, float epsilon = 0.001f) + { + if (fabs(val) <= epsilon) + { + return true; + } + else + { + return false; + } + } + + template + T Max(const T& a, const T& b) + { + return (a < b ? b : a); + } + + template + T Min(const T& a, const T& b) + { + return (a < b ? a : b); + } + + template + T Clamp(const T& value, const T& lower, const T& upper) + { + return Min(upper, Max(lower, value)); + } + + inline float Abs(float value) + { + return fabs(value); + } + + inline float Cos(float angle) + { + return cosf(angle); + } + + inline float Sin(float angle) + { + return sinf(angle); + } + + inline float Tan(float angle) + { + return tanf(angle); + } + + inline float Acos(float value) + { + return acosf(value); + } + + inline float Atan2(float y, float x) + { + return atan2f(y, x); + } + + inline float Cot(float angle) + { + return 1.0f / Tan(angle); + } + + inline float Lerp(float a, float b, float f) + { + return a + f * (b - a); + } + + inline float Sqrt(float value) + { + return sqrtf(value); + } + + inline float Fmod(float numer, float denom) + { + return fmod(numer, denom); + } +} + +// 2D Vector +class Vector2 +{ +public: + float x; + float y; + + Vector2() + :x(0.0f) + ,y(0.0f) + {} + + explicit Vector2(float inX, float inY) + :x(inX) + ,y(inY) + {} + + // Set both components in one line + void Set(float inX, float inY) + { + x = inX; + y = inY; + } + + // Vector addition (a + b) + friend Vector2 operator+(const Vector2& a, const Vector2& b) + { + return Vector2(a.x + b.x, a.y + b.y); + } + + // Vector subtraction (a - b) + friend Vector2 operator-(const Vector2& a, const Vector2& b) + { + return Vector2(a.x - b.x, a.y - b.y); + } + + // Component-wise multiplication + // (a.x * b.x, ...) + friend Vector2 operator*(const Vector2& a, const Vector2& b) + { + return Vector2(a.x * b.x, a.y * b.y); + } + + // Scalar multiplication + friend Vector2 operator*(const Vector2& vec, float scalar) + { + return Vector2(vec.x * scalar, vec.y * scalar); + } + + // Scalar multiplication + friend Vector2 operator*(float scalar, const Vector2& vec) + { + return Vector2(vec.x * scalar, vec.y * scalar); + } + + // Scalar *= + Vector2& operator*=(float scalar) + { + x *= scalar; + y *= scalar; + return *this; + } + + // Vector += + Vector2& operator+=(const Vector2& right) + { + x += right.x; + y += right.y; + return *this; + } + + // Vector -= + Vector2& operator-=(const Vector2& right) + { + x -= right.x; + y -= right.y; + return *this; + } + + // Length squared of vector + float LengthSq() const + { + return (x*x + y*y); + } + + // Length of vector + float Length() const + { + return (Math::Sqrt(LengthSq())); + } + + // Normalize this vector + void Normalize() + { + float length = Length(); + x /= length; + y /= length; + } + + // Normalize the provided vector + static Vector2 Normalize(const Vector2& vec) + { + Vector2 temp = vec; + temp.Normalize(); + return temp; + } + + // Dot product between two vectors (a dot b) + static float Dot(const Vector2& a, const Vector2& b) + { + return (a.x * b.x + a.y * b.y); + } + + // Lerp from A to B by f + static Vector2 Lerp(const Vector2& a, const Vector2& b, float f) + { + return Vector2(a + f * (b - a)); + } + + // Reflect V about (normalized) N + static Vector2 Reflect(const Vector2& v, const Vector2& n) + { + return v - 2.0f * Vector2::Dot(v, n) * n; + } + + // Transform vector by matrix + static Vector2 Transform(const Vector2& vec, const class Matrix3& mat, float w = 1.0f); + + static const Vector2 Zero; + static const Vector2 UnitX; + static const Vector2 UnitY; + static const Vector2 NegUnitX; + static const Vector2 NegUnitY; +}; + +// 3D Vector +class Vector3 +{ +public: + float x; + float y; + float z; + + Vector3() + :x(0.0f) + ,y(0.0f) + ,z(0.0f) + {} + + explicit Vector3(float inX, float inY, float inZ) + :x(inX) + ,y(inY) + ,z(inZ) + {} + + // Cast to a const float pointer + const float* GetAsFloatPtr() const + { + return reinterpret_cast(&x); + } + + // Set all three components in one line + void Set(float inX, float inY, float inZ) + { + x = inX; + y = inY; + z = inZ; + } + + // Vector addition (a + b) + friend Vector3 operator+(const Vector3& a, const Vector3& b) + { + return Vector3(a.x + b.x, a.y + b.y, a.z + b.z); + } + + // Vector subtraction (a - b) + friend Vector3 operator-(const Vector3& a, const Vector3& b) + { + return Vector3(a.x - b.x, a.y - b.y, a.z - b.z); + } + + // Component-wise multiplication + friend Vector3 operator*(const Vector3& left, const Vector3& right) + { + return Vector3(left.x * right.x, left.y * right.y, left.z * right.z); + } + + // Scalar multiplication + friend Vector3 operator*(const Vector3& vec, float scalar) + { + return Vector3(vec.x * scalar, vec.y * scalar, vec.z * scalar); + } + + // Scalar multiplication + friend Vector3 operator*(float scalar, const Vector3& vec) + { + return Vector3(vec.x * scalar, vec.y * scalar, vec.z * scalar); + } + + // Scalar *= + Vector3& operator*=(float scalar) + { + x *= scalar; + y *= scalar; + z *= scalar; + return *this; + } + + // Vector += + Vector3& operator+=(const Vector3& right) + { + x += right.x; + y += right.y; + z += right.z; + return *this; + } + + // Vector -= + Vector3& operator-=(const Vector3& right) + { + x -= right.x; + y -= right.y; + z -= right.z; + return *this; + } + + // Length squared of vector + float LengthSq() const + { + return (x*x + y*y + z*z); + } + + // Length of vector + float Length() const + { + return (Math::Sqrt(LengthSq())); + } + + // Normalize this vector + void Normalize() + { + float length = Length(); + x /= length; + y /= length; + z /= length; + } + + // Normalize the provided vector + static Vector3 Normalize(const Vector3& vec) + { + Vector3 temp = vec; + temp.Normalize(); + return temp; + } + + // Dot product between two vectors (a dot b) + static float Dot(const Vector3& a, const Vector3& b) + { + return (a.x * b.x + a.y * b.y + a.z * b.z); + } + + // Cross product between two vectors (a cross b) + static Vector3 Cross(const Vector3& a, const Vector3& b) + { + Vector3 temp; + temp.x = a.y * b.z - a.z * b.y; + temp.y = a.z * b.x - a.x * b.z; + temp.z = a.x * b.y - a.y * b.x; + return temp; + } + + // Lerp from A to B by f + static Vector3 Lerp(const Vector3& a, const Vector3& b, float f) + { + return Vector3(a + f * (b - a)); + } + + // Reflect V about (normalized) N + static Vector3 Reflect(const Vector3& v, const Vector3& n) + { + return v - 2.0f * Vector3::Dot(v, n) * n; + } + + static Vector3 Transform(const Vector3& vec, const class Matrix4& mat, float w = 1.0f); + // This will transform the vector and renormalize the w component + static Vector3 TransformWithPerspDiv(const Vector3& vec, const class Matrix4& mat, float w = 1.0f); + + // Transform a Vector3 by a quaternion + static Vector3 Transform(const Vector3& v, const class Quaternion& q); + + static const Vector3 Zero; + static const Vector3 UnitX; + static const Vector3 UnitY; + static const Vector3 UnitZ; + static const Vector3 NegUnitX; + static const Vector3 NegUnitY; + static const Vector3 NegUnitZ; + static const Vector3 Infinity; + static const Vector3 NegInfinity; +}; + +// 3x3 Matrix +class Matrix3 +{ +public: + float mat[3][3]; + + Matrix3() + { + *this = Matrix3::Identity; + } + + explicit Matrix3(float inMat[3][3]) + { + memcpy(mat, inMat, 9 * sizeof(float)); + } + + // Cast to a const float pointer + const float* GetAsFloatPtr() const + { + return reinterpret_cast(&mat[0][0]); + } + + // Matrix multiplication + friend Matrix3 operator*(const Matrix3& left, const Matrix3& right) + { + Matrix3 retVal; + // row 0 + retVal.mat[0][0] = + left.mat[0][0] * right.mat[0][0] + + left.mat[0][1] * right.mat[1][0] + + left.mat[0][2] * right.mat[2][0]; + + retVal.mat[0][1] = + left.mat[0][0] * right.mat[0][1] + + left.mat[0][1] * right.mat[1][1] + + left.mat[0][2] * right.mat[2][1]; + + retVal.mat[0][2] = + left.mat[0][0] * right.mat[0][2] + + left.mat[0][1] * right.mat[1][2] + + left.mat[0][2] * right.mat[2][2]; + + // row 1 + retVal.mat[1][0] = + left.mat[1][0] * right.mat[0][0] + + left.mat[1][1] * right.mat[1][0] + + left.mat[1][2] * right.mat[2][0]; + + retVal.mat[1][1] = + left.mat[1][0] * right.mat[0][1] + + left.mat[1][1] * right.mat[1][1] + + left.mat[1][2] * right.mat[2][1]; + + retVal.mat[1][2] = + left.mat[1][0] * right.mat[0][2] + + left.mat[1][1] * right.mat[1][2] + + left.mat[1][2] * right.mat[2][2]; + + // row 2 + retVal.mat[2][0] = + left.mat[2][0] * right.mat[0][0] + + left.mat[2][1] * right.mat[1][0] + + left.mat[2][2] * right.mat[2][0]; + + retVal.mat[2][1] = + left.mat[2][0] * right.mat[0][1] + + left.mat[2][1] * right.mat[1][1] + + left.mat[2][2] * right.mat[2][1]; + + retVal.mat[2][2] = + left.mat[2][0] * right.mat[0][2] + + left.mat[2][1] * right.mat[1][2] + + left.mat[2][2] * right.mat[2][2]; + + return retVal; + } + + Matrix3& operator*=(const Matrix3& right) + { + *this = *this * right; + return *this; + } + + // Create a scale matrix with x and y scales + static Matrix3 CreateScale(float xScale, float yScale) + { + float temp[3][3] = + { + { xScale, 0.0f, 0.0f }, + { 0.0f, yScale, 0.0f }, + { 0.0f, 0.0f, 1.0f }, + }; + return Matrix3(temp); + } + + static Matrix3 CreateScale(const Vector2& scaleVector) + { + return CreateScale(scaleVector.x, scaleVector.y); + } + + // Create a scale matrix with a uniform factor + static Matrix3 CreateScale(float scale) + { + return CreateScale(scale, scale); + } + + // Create a rotation matrix about the Z axis + // theta is in radians + static Matrix3 CreateRotation(float theta) + { + float temp[3][3] = + { + { Math::Cos(theta), Math::Sin(theta), 0.0f }, + { -Math::Sin(theta), Math::Cos(theta), 0.0f }, + { 0.0f, 0.0f, 1.0f }, + }; + return Matrix3(temp); + } + + // Create a translation matrix (on the xy-plane) + static Matrix3 CreateTranslation(const Vector2& trans) + { + float temp[3][3] = + { + { 1.0f, 0.0f, 0.0f }, + { 0.0f, 1.0f, 0.0f }, + { trans.x, trans.y, 1.0f }, + }; + return Matrix3(temp); + } + + static const Matrix3 Identity; +}; + +// 4x4 Matrix +class Matrix4 +{ +public: + float mat[4][4]; + + Matrix4() + { + *this = Matrix4::Identity; + } + + explicit Matrix4(float inMat[4][4]) + { + memcpy(mat, inMat, 16 * sizeof(float)); + } + + // Cast to a const float pointer + const float* GetAsFloatPtr() const + { + return reinterpret_cast(&mat[0][0]); + } + + // Matrix multiplication (a * b) + friend Matrix4 operator*(const Matrix4& a, const Matrix4& b) + { + Matrix4 retVal; + // row 0 + retVal.mat[0][0] = + a.mat[0][0] * b.mat[0][0] + + a.mat[0][1] * b.mat[1][0] + + a.mat[0][2] * b.mat[2][0] + + a.mat[0][3] * b.mat[3][0]; + + retVal.mat[0][1] = + a.mat[0][0] * b.mat[0][1] + + a.mat[0][1] * b.mat[1][1] + + a.mat[0][2] * b.mat[2][1] + + a.mat[0][3] * b.mat[3][1]; + + retVal.mat[0][2] = + a.mat[0][0] * b.mat[0][2] + + a.mat[0][1] * b.mat[1][2] + + a.mat[0][2] * b.mat[2][2] + + a.mat[0][3] * b.mat[3][2]; + + retVal.mat[0][3] = + a.mat[0][0] * b.mat[0][3] + + a.mat[0][1] * b.mat[1][3] + + a.mat[0][2] * b.mat[2][3] + + a.mat[0][3] * b.mat[3][3]; + + // row 1 + retVal.mat[1][0] = + a.mat[1][0] * b.mat[0][0] + + a.mat[1][1] * b.mat[1][0] + + a.mat[1][2] * b.mat[2][0] + + a.mat[1][3] * b.mat[3][0]; + + retVal.mat[1][1] = + a.mat[1][0] * b.mat[0][1] + + a.mat[1][1] * b.mat[1][1] + + a.mat[1][2] * b.mat[2][1] + + a.mat[1][3] * b.mat[3][1]; + + retVal.mat[1][2] = + a.mat[1][0] * b.mat[0][2] + + a.mat[1][1] * b.mat[1][2] + + a.mat[1][2] * b.mat[2][2] + + a.mat[1][3] * b.mat[3][2]; + + retVal.mat[1][3] = + a.mat[1][0] * b.mat[0][3] + + a.mat[1][1] * b.mat[1][3] + + a.mat[1][2] * b.mat[2][3] + + a.mat[1][3] * b.mat[3][3]; + + // row 2 + retVal.mat[2][0] = + a.mat[2][0] * b.mat[0][0] + + a.mat[2][1] * b.mat[1][0] + + a.mat[2][2] * b.mat[2][0] + + a.mat[2][3] * b.mat[3][0]; + + retVal.mat[2][1] = + a.mat[2][0] * b.mat[0][1] + + a.mat[2][1] * b.mat[1][1] + + a.mat[2][2] * b.mat[2][1] + + a.mat[2][3] * b.mat[3][1]; + + retVal.mat[2][2] = + a.mat[2][0] * b.mat[0][2] + + a.mat[2][1] * b.mat[1][2] + + a.mat[2][2] * b.mat[2][2] + + a.mat[2][3] * b.mat[3][2]; + + retVal.mat[2][3] = + a.mat[2][0] * b.mat[0][3] + + a.mat[2][1] * b.mat[1][3] + + a.mat[2][2] * b.mat[2][3] + + a.mat[2][3] * b.mat[3][3]; + + // row 3 + retVal.mat[3][0] = + a.mat[3][0] * b.mat[0][0] + + a.mat[3][1] * b.mat[1][0] + + a.mat[3][2] * b.mat[2][0] + + a.mat[3][3] * b.mat[3][0]; + + retVal.mat[3][1] = + a.mat[3][0] * b.mat[0][1] + + a.mat[3][1] * b.mat[1][1] + + a.mat[3][2] * b.mat[2][1] + + a.mat[3][3] * b.mat[3][1]; + + retVal.mat[3][2] = + a.mat[3][0] * b.mat[0][2] + + a.mat[3][1] * b.mat[1][2] + + a.mat[3][2] * b.mat[2][2] + + a.mat[3][3] * b.mat[3][2]; + + retVal.mat[3][3] = + a.mat[3][0] * b.mat[0][3] + + a.mat[3][1] * b.mat[1][3] + + a.mat[3][2] * b.mat[2][3] + + a.mat[3][3] * b.mat[3][3]; + + return retVal; + } + + Matrix4& operator*=(const Matrix4& right) + { + *this = *this * right; + return *this; + } + + // Invert the matrix - super slow + void Invert(); + + // Get the translation component of the matrix + Vector3 GetTranslation() const + { + return Vector3(mat[3][0], mat[3][1], mat[3][2]); + } + + // Get the X axis of the matrix (forward) + Vector3 GetXAxis() const + { + return Vector3::Normalize(Vector3(mat[0][0], mat[0][1], mat[0][2])); + } + + // Get the Y axis of the matrix (left) + Vector3 GetYAxis() const + { + return Vector3::Normalize(Vector3(mat[1][0], mat[1][1], mat[1][2])); + } + + // Get the Z axis of the matrix (up) + Vector3 GetZAxis() const + { + return Vector3::Normalize(Vector3(mat[2][0], mat[2][1], mat[2][2])); + } + + // Extract the scale component from the matrix + Vector3 GetScale() const + { + Vector3 retVal; + retVal.x = Vector3(mat[0][0], mat[0][1], mat[0][2]).Length(); + retVal.y = Vector3(mat[1][0], mat[1][1], mat[1][2]).Length(); + retVal.z = Vector3(mat[2][0], mat[2][1], mat[2][2]).Length(); + return retVal; + } + + // Create a scale matrix with x, y, and z scales + static Matrix4 CreateScale(float xScale, float yScale, float zScale) + { + float temp[4][4] = + { + { xScale, 0.0f, 0.0f, 0.0f }, + { 0.0f, yScale, 0.0f, 0.0f }, + { 0.0f, 0.0f, zScale, 0.0f }, + { 0.0f, 0.0f, 0.0f, 1.0f } + }; + return Matrix4(temp); + } + + static Matrix4 CreateScale(const Vector3& scaleVector) + { + return CreateScale(scaleVector.x, scaleVector.y, scaleVector.z); + } + + // Create a scale matrix with a uniform factor + static Matrix4 CreateScale(float scale) + { + return CreateScale(scale, scale, scale); + } + + // Rotation about x-axis + static Matrix4 CreateRotationX(float theta) + { + float temp[4][4] = + { + { 1.0f, 0.0f, 0.0f , 0.0f }, + { 0.0f, Math::Cos(theta), Math::Sin(theta), 0.0f }, + { 0.0f, -Math::Sin(theta), Math::Cos(theta), 0.0f }, + { 0.0f, 0.0f, 0.0f, 1.0f }, + }; + return Matrix4(temp); + } + + // Rotation about y-axis + static Matrix4 CreateRotationY(float theta) + { + float temp[4][4] = + { + { Math::Cos(theta), 0.0f, -Math::Sin(theta), 0.0f }, + { 0.0f, 1.0f, 0.0f, 0.0f }, + { Math::Sin(theta), 0.0f, Math::Cos(theta), 0.0f }, + { 0.0f, 0.0f, 0.0f, 1.0f }, + }; + return Matrix4(temp); + } + + // Rotation about z-axis + static Matrix4 CreateRotationZ(float theta) + { + float temp[4][4] = + { + { Math::Cos(theta), Math::Sin(theta), 0.0f, 0.0f }, + { -Math::Sin(theta), Math::Cos(theta), 0.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f, 0.0f }, + { 0.0f, 0.0f, 0.0f, 1.0f }, + }; + return Matrix4(temp); + } + + // Create a rotation matrix from a quaternion + static Matrix4 CreateFromQuaternion(const class Quaternion& q); + + static Matrix4 CreateTranslation(const Vector3& trans) + { + float temp[4][4] = + { + { 1.0f, 0.0f, 0.0f, 0.0f }, + { 0.0f, 1.0f, 0.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f, 0.0f }, + { trans.x, trans.y, trans.z, 1.0f } + }; + return Matrix4(temp); + } + + static Matrix4 CreateLookAt(const Vector3& eye, const Vector3& target, const Vector3& up) + { + Vector3 zaxis = Vector3::Normalize(target - eye); + Vector3 xaxis = Vector3::Normalize(Vector3::Cross(up, zaxis)); + Vector3 yaxis = Vector3::Normalize(Vector3::Cross(zaxis, xaxis)); + Vector3 trans; + trans.x = -Vector3::Dot(xaxis, eye); + trans.y = -Vector3::Dot(yaxis, eye); + trans.z = -Vector3::Dot(zaxis, eye); + + float temp[4][4] = + { + { xaxis.x, yaxis.x, zaxis.x, 0.0f }, + { xaxis.y, yaxis.y, zaxis.y, 0.0f }, + { xaxis.z, yaxis.z, zaxis.z, 0.0f }, + { trans.x, trans.y, trans.z, 1.0f } + }; + return Matrix4(temp); + } + + static Matrix4 CreateOrtho(float width, float height, float near, float far) + { + float temp[4][4] = + { + { 2.0f / width, 0.0f, 0.0f, 0.0f }, + { 0.0f, 2.0f / height, 0.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f / (far - near), 0.0f }, + { 0.0f, 0.0f, near / (near - far), 1.0f } + }; + return Matrix4(temp); + } + + static Matrix4 CreatePerspectiveFOV(float fovY, float width, float height, float near, float far) + { + float yScale = Math::Cot(fovY / 2.0f); + float xScale = yScale * height / width; + float temp[4][4] = + { + { xScale, 0.0f, 0.0f, 0.0f }, + { 0.0f, yScale, 0.0f, 0.0f }, + { 0.0f, 0.0f, far / (far - near), 1.0f }, + { 0.0f, 0.0f, -near * far / (far - near), 0.0f } + }; + return Matrix4(temp); + } + + // Create "Simple" View-Projection Matrix from Chapter 6 + static Matrix4 CreateSimpleViewProj(float width, float height) + { + float temp[4][4] = + { + { 2.0f/width, 0.0f, 0.0f, 0.0f }, + { 0.0f, 2.0f/height, 0.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f, 1.0f } + }; + return Matrix4(temp); + } + + static const Matrix4 Identity; +}; + +// (Unit) Quaternion +class Quaternion +{ +public: + float x; + float y; + float z; + float w; + + Quaternion() + { + *this = Quaternion::Identity; + } + + // This directly sets the quaternion components -- + // don't use for axis/angle + explicit Quaternion(float inX, float inY, float inZ, float inW) + { + Set(inX, inY, inZ, inW); + } + + // Construct the quaternion from an axis and angle + // It is assumed that axis is already normalized, + // and the angle is in radians + explicit Quaternion(const Vector3& axis, float angle) + { + float scalar = Math::Sin(angle / 2.0f); + x = axis.x * scalar; + y = axis.y * scalar; + z = axis.z * scalar; + w = Math::Cos(angle / 2.0f); + } + + // Directly set the internal components + void Set(float inX, float inY, float inZ, float inW) + { + x = inX; + y = inY; + z = inZ; + w = inW; + } + + void Conjugate() + { + x *= -1.0f; + y *= -1.0f; + z *= -1.0f; + } + + float LengthSq() const + { + return (x*x + y*y + z*z + w*w); + } + + float Length() const + { + return Math::Sqrt(LengthSq()); + } + + void Normalize() + { + float length = Length(); + x /= length; + y /= length; + z /= length; + w /= length; + } + + // Normalize the provided quaternion + static Quaternion Normalize(const Quaternion& q) + { + Quaternion retVal = q; + retVal.Normalize(); + return retVal; + } + + // Linear interpolation + static Quaternion Lerp(const Quaternion& a, const Quaternion& b, float f) + { + Quaternion retVal; + retVal.x = Math::Lerp(a.x, b.x, f); + retVal.y = Math::Lerp(a.y, b.y, f); + retVal.z = Math::Lerp(a.z, b.z, f); + retVal.w = Math::Lerp(a.w, b.w, f); + retVal.Normalize(); + return retVal; + } + + static float Dot(const Quaternion& a, const Quaternion& b) + { + return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w; + } + + // Spherical Linear Interpolation + static Quaternion Slerp(const Quaternion& a, const Quaternion& b, float f) + { + float rawCosm = Quaternion::Dot(a, b); + + float cosom = -rawCosm; + if (rawCosm >= 0.0f) + { + cosom = rawCosm; + } + + float scale0, scale1; + + if (cosom < 0.9999f) + { + const float omega = Math::Acos(cosom); + const float invSin = 1.f / Math::Sin(omega); + scale0 = Math::Sin((1.f - f) * omega) * invSin; + scale1 = Math::Sin(f * omega) * invSin; + } + else + { + // Use linear interpolation if the quaternions + // are collinear + scale0 = 1.0f - f; + scale1 = f; + } + + if (rawCosm < 0.0f) + { + scale1 = -scale1; + } + + Quaternion retVal; + retVal.x = scale0 * a.x + scale1 * b.x; + retVal.y = scale0 * a.y + scale1 * b.y; + retVal.z = scale0 * a.z + scale1 * b.z; + retVal.w = scale0 * a.w + scale1 * b.w; + retVal.Normalize(); + return retVal; + } + + // Concatenate + // Rotate by q FOLLOWED BY p + static Quaternion Concatenate(const Quaternion& q, const Quaternion& p) + { + Quaternion retVal; + + // Vector component is: + // ps * qv + qs * pv + pv x qv + Vector3 qv(q.x, q.y, q.z); + Vector3 pv(p.x, p.y, p.z); + Vector3 newVec = p.w * qv + q.w * pv + Vector3::Cross(pv, qv); + retVal.x = newVec.x; + retVal.y = newVec.y; + retVal.z = newVec.z; + + // Scalar component is: + // ps * qs - pv . qv + retVal.w = p.w * q.w - Vector3::Dot(pv, qv); + + return retVal; + } + + static const Quaternion Identity; +}; + +namespace Color +{ + static const Vector3 Black(0.0f, 0.0f, 0.0f); + static const Vector3 White(1.0f, 1.0f, 1.0f); + static const Vector3 Red(1.0f, 0.0f, 0.0f); + static const Vector3 Green(0.0f, 1.0f, 0.0f); + static const Vector3 Blue(0.0f, 0.0f, 1.0f); + static const Vector3 Yellow(1.0f, 1.0f, 0.0f); + static const Vector3 LightYellow(1.0f, 1.0f, 0.88f); + static const Vector3 LightBlue(0.68f, 0.85f, 0.9f); + static const Vector3 LightPink(1.0f, 0.71f, 0.76f); + static const Vector3 LightGreen(0.56f, 0.93f, 0.56f); +} diff --git a/Chapter05/MoveComponent.cpp b/Chapter05/MoveComponent.cpp new file mode 100644 index 00000000..3c9730bc --- /dev/null +++ b/Chapter05/MoveComponent.cpp @@ -0,0 +1,35 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "MoveComponent.h" +#include "Actor.h" + +MoveComponent::MoveComponent(class Actor* owner, int updateOrder) +:Component(owner, updateOrder) +,mAngularSpeed(0.0f) +,mForwardSpeed(0.0f) +{ + +} + +void MoveComponent::Update(float deltaTime) +{ + if (!Math::NearZero(mAngularSpeed)) + { + float rot = mOwner->GetRotation(); + rot += mAngularSpeed * deltaTime; + mOwner->SetRotation(rot); + } + + if (!Math::NearZero(mForwardSpeed)) + { + Vector2 pos = mOwner->GetPosition(); + pos += mOwner->GetForward() * mForwardSpeed * deltaTime; + mOwner->SetPosition(pos); + } +} diff --git a/Chapter05/MoveComponent.h b/Chapter05/MoveComponent.h new file mode 100644 index 00000000..11d18cb5 --- /dev/null +++ b/Chapter05/MoveComponent.h @@ -0,0 +1,26 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "Component.h" + +class MoveComponent : public Component +{ +public: + // Lower update order to update first + MoveComponent(class Actor* owner, int updateOrder = 10); + void Update(float deltaTime) override; + + float GetAngularSpeed() const { return mAngularSpeed; } + float GetForwardSpeed() const { return mForwardSpeed; } + void SetAngularSpeed(float speed) { mAngularSpeed = speed; } + void SetForwardSpeed(float speed) { mForwardSpeed = speed; } +private: + float mAngularSpeed; + float mForwardSpeed; +}; diff --git a/Chapter05/NavComponent.cpp b/Chapter05/NavComponent.cpp new file mode 100644 index 00000000..e640e222 --- /dev/null +++ b/Chapter05/NavComponent.cpp @@ -0,0 +1,49 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "NavComponent.h" +#include "Tile.h" + +NavComponent::NavComponent(class Actor* owner, int updateOrder) +:MoveComponent(owner, updateOrder) +,mNextNode(nullptr) +{ + +} + +void NavComponent::Update(float deltaTime) +{ + if (mNextNode) + { + // If we're at the next node, advance along path + Vector2 diff = mOwner->GetPosition() - mNextNode->GetPosition(); + if (Math::NearZero(diff.Length(), 2.0f)) + { + mNextNode = mNextNode->GetParent(); + TurnTo(mNextNode->GetPosition()); + } + } + + MoveComponent::Update(deltaTime); +} + +void NavComponent::StartPath(const Tile* start) +{ + mNextNode = start->GetParent(); + TurnTo(mNextNode->GetPosition()); +} + +void NavComponent::TurnTo(const Vector2& pos) +{ + // Vector from me to pos + Vector2 dir = pos - mOwner->GetPosition(); + // New angle is just atan2 of this dir vector + // (Negate y because +y is down on screen) + float angle = Math::Atan2(dir.y, dir.x); + mOwner->SetRotation(angle); +} diff --git a/Chapter05/NavComponent.h b/Chapter05/NavComponent.h new file mode 100644 index 00000000..d085827e --- /dev/null +++ b/Chapter05/NavComponent.h @@ -0,0 +1,23 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "MoveComponent.h" +#include "Math.h" + +class NavComponent : public MoveComponent +{ +public: + // Lower update order to update first + NavComponent(class Actor* owner, int updateOrder = 10); + void Update(float deltaTime) override; + void StartPath(const class Tile* start); + void TurnTo(const Vector2& pos); +private: + const class Tile* mNextNode; +}; diff --git a/Chapter05/Shader.cpp b/Chapter05/Shader.cpp new file mode 100644 index 00000000..261f68bb --- /dev/null +++ b/Chapter05/Shader.cpp @@ -0,0 +1,148 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "Shader.h" +#include "Texture.h" +#include +#include +#include + +Shader::Shader() + : mShaderProgram(0) + , mVertexShader(0) + , mFragShader(0) +{ + +} + +Shader::~Shader() +{ + +} + +bool Shader::Load(const std::string& name) +{ + // Compile vertex and pixel shaders + if (!CompileShader(name + ".vert", + GL_VERTEX_SHADER, + mVertexShader) || + !CompileShader(name + ".frag", + GL_FRAGMENT_SHADER, + mFragShader)) + { + return false; + } + + // Now create a shader program that + // links together the vertex/frag shaders + mShaderProgram = glCreateProgram(); + glAttachShader(mShaderProgram, mVertexShader); + glAttachShader(mShaderProgram, mFragShader); + glLinkProgram(mShaderProgram); + + // Verify that the program linked successfully + if (!IsValidProgram()) + { + return false; + } + + return true; +} + +void Shader::Unload() +{ + // Delete the program/shaders + glDeleteProgram(mShaderProgram); + glDeleteShader(mVertexShader); + glDeleteShader(mFragShader); +} + +void Shader::SetActive() +{ + // Set this program as the active one + glUseProgram(mShaderProgram); +} + +void Shader::SetMatrixUniform(const char* name, const Matrix4& matrix) +{ + // Find the uniform by this name + GLuint loc = glGetUniformLocation(mShaderProgram, name); + // Send the matrix data to the uniform + glUniformMatrix4fv(loc, 1, GL_TRUE, matrix.GetAsFloatPtr()); +} + +bool Shader::CompileShader(const std::string& fileName, + GLenum shaderType, + GLuint& outShader) +{ + // Open file + std::ifstream shaderFile(fileName); + if (shaderFile.is_open()) + { + // Read all of the text into a string + std::stringstream sstream; + sstream << shaderFile.rdbuf(); + std::string contents = sstream.str(); + const char* contentsChar = contents.c_str(); + + // Create a shader of the specified type + outShader = glCreateShader(shaderType); + // Set the source characters and try to compile + glShaderSource(outShader, 1, &(contentsChar), nullptr); + glCompileShader(outShader); + + if (!IsCompiled(outShader)) + { + SDL_Log("Failed to compile shader %s", fileName.c_str()); + return false; + } + } + else + { + SDL_Log("Shader file not found: %s", fileName.c_str()); + return false; + } + + return true; +} + +bool Shader::IsCompiled(GLuint shader) +{ + GLint status; + // Query the compile status + glGetShaderiv(shader, GL_COMPILE_STATUS, &status); + + if (status != GL_TRUE) + { + char buffer[512]; + memset(buffer, 0, 512); + glGetShaderInfoLog(shader, 511, nullptr, buffer); + SDL_Log("GLSL Compile Failed:\n%s", buffer); + return false; + } + + return true; +} + +bool Shader::IsValidProgram() +{ + + GLint status; + // Query the link status + glGetProgramiv(mShaderProgram, GL_LINK_STATUS, &status); + if (status != GL_TRUE) + { + char buffer[512]; + memset(buffer, 0, 512); + glGetProgramInfoLog(mShaderProgram, 511, nullptr, buffer); + SDL_Log("GLSL Link Status:\n%s", buffer); + return false; + } + + return true; +} diff --git a/Chapter05/Shader.h b/Chapter05/Shader.h new file mode 100644 index 00000000..81a8952a --- /dev/null +++ b/Chapter05/Shader.h @@ -0,0 +1,42 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#pragma once +#include +#include +#include "Math.h" + +class Shader +{ +public: + Shader(); + ~Shader(); + // Load shader of the specified name, excluding + // the .frag/.vert extension + bool Load(const std::string& name); + void Unload(); + // Set this as the active shader program + void SetActive(); + // Sets a Matrix uniform + void SetMatrixUniform(const char* name, const Matrix4& matrix); +private: + // Tries to compile the specified shader + bool CompileShader(const std::string& fileName, + GLenum shaderType, + GLuint& outShader); + + // Tests whether shader compiled successfully + bool IsCompiled(GLuint shader); + // Tests whether vertex/fragment programs link + bool IsValidProgram(); +private: + // Store the shader object IDs + GLuint mVertexShader; + GLuint mFragShader; + GLuint mShaderProgram; +}; diff --git a/Chapter05/Shaders/Sprite.frag b/Chapter05/Shaders/Sprite.frag new file mode 100644 index 00000000..b1bd6105 --- /dev/null +++ b/Chapter05/Shaders/Sprite.frag @@ -0,0 +1,25 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +// Request GLSL 3.3 +#version 330 + +// Tex coord input from vertex shader +in vec2 fragTexCoord; + +// This corresponds to the output color to the color buffer +out vec4 outColor; + +// This is used for the texture sampling +uniform sampler2D uTexture; + +void main() +{ + // Sample color from texture + outColor = texture(uTexture, fragTexCoord); +} diff --git a/Chapter05/Shaders/Sprite.vert b/Chapter05/Shaders/Sprite.vert new file mode 100644 index 00000000..e4fe75b0 --- /dev/null +++ b/Chapter05/Shaders/Sprite.vert @@ -0,0 +1,33 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +// Request GLSL 3.3 +#version 330 + +// Uniforms for world transform and view-proj +uniform mat4 uWorldTransform; +uniform mat4 uViewProj; + +// Attribute 0 is position, 1 is tex coords. +layout(location = 0) in vec3 inPosition; +layout(location = 1) in vec2 inTexCoord; + +// Any vertex outputs (other than position) +out vec2 fragTexCoord; + +void main() +{ + // Convert position to homogeneous coordinates + vec4 pos = vec4(inPosition, 1.0); + // Transform to position world space, then clip space + gl_Position = pos * uWorldTransform * uViewProj; + + // Transform + // Pass along the texture coordinate to frag shader + fragTexCoord = inTexCoord; +} diff --git a/Chapter05/SpriteComponent.cpp b/Chapter05/SpriteComponent.cpp new file mode 100644 index 00000000..edce7438 --- /dev/null +++ b/Chapter05/SpriteComponent.cpp @@ -0,0 +1,60 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "SpriteComponent.h" +#include "Texture.h" +#include "Shader.h" +#include "Actor.h" +#include "Game.h" + +SpriteComponent::SpriteComponent(Actor* owner, int drawOrder) + :Component(owner) + ,mTexture(nullptr) + ,mDrawOrder(drawOrder) + ,mTexWidth(0) + ,mTexHeight(0) +{ + mOwner->GetGame()->AddSprite(this); +} + +SpriteComponent::~SpriteComponent() +{ + mOwner->GetGame()->RemoveSprite(this); +} + +void SpriteComponent::Draw(Shader* shader) +{ + if (mTexture) + { + // Scale the quad by the width/height of texture + Matrix4 scaleMat = Matrix4::CreateScale( + static_cast(mTexWidth), + static_cast(mTexHeight), + 1.0f); + + Matrix4 world = scaleMat * mOwner->GetWorldTransform(); + + // Since all sprites use the same shader/vertices, + // the game first sets them active before any sprite draws + + // Set world transform + shader->SetMatrixUniform("uWorldTransform", world); + // Set current texture + mTexture->SetActive(); + // Draw quad + glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, nullptr); + } +} + +void SpriteComponent::SetTexture(Texture* texture) +{ + mTexture = texture; + // Set width/height + mTexWidth = texture->GetWidth(); + mTexHeight = texture->GetHeight(); +} diff --git a/Chapter05/SpriteComponent.h b/Chapter05/SpriteComponent.h new file mode 100644 index 00000000..4298e0fb --- /dev/null +++ b/Chapter05/SpriteComponent.h @@ -0,0 +1,30 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "Component.h" +#include "SDL/SDL.h" +class SpriteComponent : public Component +{ +public: + // (Lower draw order corresponds with further back) + SpriteComponent(class Actor* owner, int drawOrder = 100); + ~SpriteComponent(); + + virtual void Draw(class Shader* shader); + virtual void SetTexture(class Texture* texture); + + int GetDrawOrder() const { return mDrawOrder; } + int GetTexHeight() const { return mTexHeight; } + int GetTexWidth() const { return mTexWidth; } +protected: + class Texture* mTexture; + int mDrawOrder; + int mTexWidth; + int mTexHeight; +}; diff --git a/Chapter05/Texture.cpp b/Chapter05/Texture.cpp new file mode 100644 index 00000000..9c2d2070 --- /dev/null +++ b/Chapter05/Texture.cpp @@ -0,0 +1,69 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "Texture.h" +#include +#include +#include + +Texture::Texture() +:mTextureID(0) +,mWidth(0) +,mHeight(0) +{ + +} + +Texture::~Texture() +{ + +} + +bool Texture::Load(const std::string& fileName) +{ + int channels = 0; + + unsigned char* image = SOIL_load_image(fileName.c_str(), + &mWidth, &mHeight, &channels, SOIL_LOAD_AUTO); + + if (image == nullptr) + { + SDL_Log("SOIL failed to load image %s: %s", fileName.c_str(), SOIL_last_result()); + return false; + } + + int format = GL_RGB; + if (channels == 4) + { + format = GL_RGBA; + } + + glGenTextures(1, &mTextureID); + glBindTexture(GL_TEXTURE_2D, mTextureID); + + glTexImage2D(GL_TEXTURE_2D, 0, format, mWidth, mHeight, 0, format, + GL_UNSIGNED_BYTE, image); + + SOIL_free_image_data(image); + + // Enable linear filtering + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + + return true; +} + +void Texture::Unload() +{ + glDeleteTextures(1, &mTextureID); +} + +void Texture::SetActive() +{ + glBindTexture(GL_TEXTURE_2D, mTextureID); +} diff --git a/Chapter05/Texture.h b/Chapter05/Texture.h new file mode 100644 index 00000000..07721267 --- /dev/null +++ b/Chapter05/Texture.h @@ -0,0 +1,28 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include + +class Texture +{ +public: + Texture(); + ~Texture(); + + bool Load(const std::string& fileName); + void Unload(); + + void SetActive(); + + int GetWidth() const { return mWidth; } + int GetHeight() const { return mHeight; } +private: + unsigned int mTextureID; + int mWidth; + int mHeight; +}; diff --git a/Chapter05/Tile.cpp b/Chapter05/Tile.cpp new file mode 100644 index 00000000..1a5af3f8 --- /dev/null +++ b/Chapter05/Tile.cpp @@ -0,0 +1,66 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "Tile.h" +#include "SpriteComponent.h" +#include "Game.h" + +Tile::Tile(class Game* game) +:Actor(game) +,mParent(nullptr) +,f(0.0f) +,g(0.0f) +,h(0.0f) +,mBlocked(false) +,mSprite(nullptr) +,mTileState(EDefault) +,mSelected(false) +{ + mSprite = new SpriteComponent(this); + UpdateTexture(); +} + +void Tile::SetTileState(TileState state) +{ + mTileState = state; + UpdateTexture(); +} + +void Tile::ToggleSelect() +{ + mSelected = !mSelected; + UpdateTexture(); +} + +void Tile::UpdateTexture() +{ + std::string text; + switch (mTileState) + { + case EStart: + text = "Assets/TileTan.png"; + break; + case EBase: + text = "Assets/TileGreen.png"; + break; + case EPath: + if (mSelected) + text = "Assets/TileGreySelected.png"; + else + text = "Assets/TileGrey.png"; + break; + case EDefault: + default: + if (mSelected) + text = "Assets/TileBrownSelected.png"; + else + text = "Assets/TileBrown.png"; + break; + } + mSprite->SetTexture(GetGame()->GetTexture(text)); +} diff --git a/Chapter05/Tile.h b/Chapter05/Tile.h new file mode 100644 index 00000000..de554ac2 --- /dev/null +++ b/Chapter05/Tile.h @@ -0,0 +1,44 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "Actor.h" +#include + +class Tile : public Actor +{ +public: + friend class Grid; + enum TileState + { + EDefault, + EPath, + EStart, + EBase + }; + + Tile(class Game* game); + + void SetTileState(TileState state); + TileState GetTileState() const { return mTileState; } + void ToggleSelect(); + const Tile* GetParent() const { return mParent; } +private: + // For pathfinding + std::vector mAdjacent; + Tile* mParent; + float f; + float g; + float h; + bool mBlocked; + + void UpdateTexture(); + class SpriteComponent* mSprite; + TileState mTileState; + bool mSelected; +}; diff --git a/Chapter05/Tower.cpp b/Chapter05/Tower.cpp new file mode 100644 index 00000000..b6d2ec20 --- /dev/null +++ b/Chapter05/Tower.cpp @@ -0,0 +1,53 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "Tower.h" +#include "SpriteComponent.h" +#include "MoveComponent.h" +#include "Game.h" +#include "Enemy.h" +#include "Bullet.h" + +Tower::Tower(class Game* game) +:Actor(game) +{ + SpriteComponent* sc = new SpriteComponent(this, 200); + sc->SetTexture(game->GetTexture("Assets/Tower.png")); + + mMove = new MoveComponent(this); + //mMove->SetAngularSpeed(Math::Pi); + + mNextAttack = AttackTime; +} + +void Tower::UpdateActor(float deltaTime) +{ + Actor::UpdateActor(deltaTime); + + mNextAttack -= deltaTime; + if (mNextAttack <= 0.0f) + { + Enemy* e = GetGame()->GetNearestEnemy(GetPosition()); + if (e != nullptr) + { + // Vector from me to enemy + Vector2 dir = e->GetPosition() - GetPosition(); + float dist = dir.Length(); + if (dist < AttackRange) + { + // Rotate to face enemy + SetRotation(Math::Atan2(dir.y, dir.x)); + // Spawn bullet at tower position facing enemy + Bullet* b = new Bullet(GetGame()); + b->SetPosition(GetPosition()); + b->SetRotation(GetRotation()); + } + } + mNextAttack += AttackTime; + } +} diff --git a/Chapter05/Tower.h b/Chapter05/Tower.h new file mode 100644 index 00000000..000d925e --- /dev/null +++ b/Chapter05/Tower.h @@ -0,0 +1,22 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "Actor.h" + +class Tower : public Actor +{ +public: + Tower(class Game* game); + void UpdateActor(float deltaTime) override; +private: + class MoveComponent* mMove; + float mNextAttack; + const float AttackTime = 2.5f; + const float AttackRange = 100.0f; +}; diff --git a/Chapter05/VertexArray.cpp b/Chapter05/VertexArray.cpp new file mode 100644 index 00000000..9a963b99 --- /dev/null +++ b/Chapter05/VertexArray.cpp @@ -0,0 +1,52 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#include "VertexArray.h" +#include + +VertexArray::VertexArray(const float* verts, unsigned int numVerts, + const unsigned int* indices, unsigned int numIndices) + :mNumVerts(numVerts) + ,mNumIndices(numIndices) +{ + // Create vertex array + glGenVertexArrays(1, &mVertexArray); + glBindVertexArray(mVertexArray); + + // Create vertex buffer + glGenBuffers(1, &mVertexBuffer); + glBindBuffer(GL_ARRAY_BUFFER, mVertexBuffer); + glBufferData(GL_ARRAY_BUFFER, numVerts * 5 * sizeof(float), verts, GL_STATIC_DRAW); + + // Create index buffer + glGenBuffers(1, &mIndexBuffer); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mIndexBuffer); + glBufferData(GL_ELEMENT_ARRAY_BUFFER, numIndices * sizeof(GLuint), indices, GL_STATIC_DRAW); + + // Specify the vertex attributes + // (For now, assume one vertex format) + // Position is 3 floats starting at offset 0 + glEnableVertexAttribArray(0); + glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 5, 0); + glEnableVertexAttribArray(1); + glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 5, + reinterpret_cast(sizeof(float) * 3)); +} + +VertexArray::~VertexArray() +{ + glDeleteBuffers(1, &mVertexBuffer); + glDeleteBuffers(1, &mIndexBuffer); + glDeleteVertexArrays(1, &mVertexArray); +} + +void VertexArray::SetActive() +{ + glBindVertexArray(mVertexArray); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mIndexBuffer); +} diff --git a/Chapter05/VertexArray.h b/Chapter05/VertexArray.h new file mode 100644 index 00000000..8e162351 --- /dev/null +++ b/Chapter05/VertexArray.h @@ -0,0 +1,24 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE.txt for full details. +// ---------------------------------------------------------------- + +#pragma once +class VertexArray +{ +public: + VertexArray(const float* verts, unsigned int numVerts, + const unsigned int* indices, unsigned int numIndices); + ~VertexArray(); + + void SetActive(); +private: + unsigned int mNumVerts; + unsigned int mNumIndices; + unsigned int mVertexBuffer; + unsigned int mIndexBuffer; + unsigned int mVertexArray; +}; \ No newline at end of file From 999716a5085ce5a2f0caee737b8de10ecccab47a Mon Sep 17 00:00:00 2001 From: Sanjay Madhav Date: Thu, 23 Nov 2017 17:36:44 -0800 Subject: [PATCH 20/40] Updated tile/grid --- Chapter05/Grid.cpp | 26 ++++++++++++-------------- Chapter05/Grid.h | 26 ++++++++++++++++++++++++-- Chapter05/Tile.cpp | 4 ++-- Chapter05/Tile.h | 6 ++++-- 4 files changed, 42 insertions(+), 20 deletions(-) diff --git a/Chapter05/Grid.cpp b/Chapter05/Grid.cpp index 9715d030..569a2119 100644 --- a/Chapter05/Grid.cpp +++ b/Chapter05/Grid.cpp @@ -1,9 +1,9 @@ // ---------------------------------------------------------------- // From Game Programming in C++ by Sanjay Madhav // Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// +// // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #include "Grid.h" @@ -106,16 +106,16 @@ bool Grid::FindPath(Tile* start, Tile* goal) for (size_t j = 0; j < NumCols; j++) { mTiles[i][j]->g = 0.0f; + mTiles[i][j]->mInOpenSet = false; + mTiles[i][j]->mInClosedSet = false; } } - // Open/closed sets std::vector openSet; - std::vector closedSet; // Set current node to start, and add to closed set Tile* current = start; - closedSet.emplace_back(current); + current->mInClosedSet = true; do { @@ -128,27 +128,24 @@ bool Grid::FindPath(Tile* start, Tile* goal) } // Only check nodes that aren't in the closed set - auto iter = std::find(closedSet.begin(), closedSet.end(), - neighbor); - if (iter == closedSet.end()) + if (!neighbor->mInClosedSet) { - iter = std::find(openSet.begin(), openSet.end(), neighbor); - if (iter == openSet.end()) + if (!neighbor->mInOpenSet) { // Not in the open set, so set parent neighbor->mParent = current; - neighbor->h = Math::Abs(neighbor->GetPosition().x - goal->GetPosition().x) - + Math::Abs(neighbor->GetPosition().y - goal->GetPosition().y); + neighbor->h = (neighbor->GetPosition() - goal->GetPosition()).Length(); // g(x) is the parent's g plus cost of traversing edge neighbor->g = current->g + TileSize; neighbor->f = neighbor->g + neighbor->h; openSet.emplace_back(neighbor); + neighbor->mInOpenSet = true; } else { // Compute g(x) cost if current becomes the parent float newG = current->g + TileSize; - if (newG < current->g) + if (newG < neighbor->g) { // Adopt this node neighbor->mParent = current; @@ -174,7 +171,8 @@ bool Grid::FindPath(Tile* start, Tile* goal) // Set to current and move from open to closed current = *iter; openSet.erase(iter); - closedSet.emplace_back(current); + current->mInOpenSet = false; + current->mInClosedSet = true; } while (current != goal); diff --git a/Chapter05/Grid.h b/Chapter05/Grid.h index c11f03db..a31eef6d 100644 --- a/Chapter05/Grid.h +++ b/Chapter05/Grid.h @@ -1,9 +1,9 @@ // ---------------------------------------------------------------- // From Game Programming in C++ by Sanjay Madhav // Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// +// // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #pragma once @@ -14,23 +14,45 @@ class Grid : public Actor { public: Grid(class Game* game); + + // Handle a mouse click at the x/y screen locations void ProcessClick(int x, int y); + + // Use A* to find a path bool FindPath(class Tile* start, class Tile* goal); + + // Try to build a tower void BuildTower(); + + // Get start/end tile class Tile* GetStartTile(); class Tile* GetEndTile(); + void UpdateActor(float deltaTime) override; private: + // Select a specific tile void SelectTile(size_t row, size_t col); + + // Update textures for tiles on path void UpdatePathTiles(class Tile* start); + + // Currently selected tile class Tile* mSelectedTile; + + // 2D vector of tiles in grid std::vector> mTiles; + + // Time until next enemy float mNextEnemy; + // Rows/columns in grid const size_t NumRows = 7; const size_t NumCols = 16; + // Start y position of top left corner const float StartY = 192.0f; const float StartX = -512.0f; + // Width/height of each tile const float TileSize = 64.0f; + // Time between enemies const float EnemyTime = 1.5f; }; diff --git a/Chapter05/Tile.cpp b/Chapter05/Tile.cpp index 1a5af3f8..90e5c781 100644 --- a/Chapter05/Tile.cpp +++ b/Chapter05/Tile.cpp @@ -1,9 +1,9 @@ // ---------------------------------------------------------------- // From Game Programming in C++ by Sanjay Madhav // Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// +// // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #include "Tile.h" diff --git a/Chapter05/Tile.h b/Chapter05/Tile.h index de554ac2..f3e90d12 100644 --- a/Chapter05/Tile.h +++ b/Chapter05/Tile.h @@ -1,9 +1,9 @@ // ---------------------------------------------------------------- // From Game Programming in C++ by Sanjay Madhav // Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// +// // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #pragma once @@ -35,6 +35,8 @@ class Tile : public Actor float f; float g; float h; + bool mInOpenSet; + bool mInClosedSet; bool mBlocked; void UpdateTexture(); From bc6f99717413ff3eb2c7db6fb1a853b2f4e101c5 Mon Sep 17 00:00:00 2001 From: Sanjay Madhav Date: Thu, 23 Nov 2017 17:45:13 -0800 Subject: [PATCH 21/40] Code updated to include chapter 4 changes --- Chapter05/Actor.cpp | 40 ++++++++++++-- Chapter05/Actor.h | 9 +++- Chapter05/Component.cpp | 2 +- Chapter05/Component.h | 6 ++- Chapter05/Game.cpp | 112 ++++++++++++++++++++++++++-------------- Chapter05/Game.h | 5 +- 6 files changed, 125 insertions(+), 49 deletions(-) diff --git a/Chapter05/Actor.cpp b/Chapter05/Actor.cpp index 39f8e8d8..acd438cd 100644 --- a/Chapter05/Actor.cpp +++ b/Chapter05/Actor.cpp @@ -3,7 +3,7 @@ // Copyright (C) 2017 Sanjay Madhav. All rights reserved. // // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #include "Actor.h" @@ -53,6 +53,24 @@ void Actor::UpdateActor(float deltaTime) { } +void Actor::ProcessInput(const uint8_t* keyState) +{ + if (mState == EActive) + { + // First process input for components + for (auto comp : mComponents) + { + comp->ProcessInput(keyState); + } + + ActorInput(keyState); + } +} + +void Actor::ActorInput(const uint8_t* keyState) +{ +} + void Actor::ComputeWorldTransform() { mWorldTransform = Matrix4::CreateScale(mScale); @@ -62,10 +80,22 @@ void Actor::ComputeWorldTransform() void Actor::AddComponent(Component* component) { - mComponents.emplace_back(component); - std::sort(mComponents.begin(), mComponents.end(), [](Component* a, Component* b) { - return a->GetUpdateOrder() < b->GetUpdateOrder(); - }); + // Find the insertion point in the sorted vector + // (The first element with a order higher than me) + int myOrder = component->GetUpdateOrder(); + auto iter = mComponents.begin(); + for (; + iter != mComponents.end(); + ++iter) + { + if (myOrder < (*iter)->GetUpdateOrder()) + { + break; + } + } + + // Inserts element before position of iterator + mComponents.insert(iter, component); } void Actor::RemoveComponent(Component* component) diff --git a/Chapter05/Actor.h b/Chapter05/Actor.h index 60093311..60280a3b 100644 --- a/Chapter05/Actor.h +++ b/Chapter05/Actor.h @@ -3,12 +3,14 @@ // Copyright (C) 2017 Sanjay Madhav. All rights reserved. // // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #pragma once #include #include "Math.h" +#include + class Actor { public: @@ -29,6 +31,11 @@ class Actor // Any actor-specific update code (overridable) virtual void UpdateActor(float deltaTime); + // ProcessInput function called from Game (not overridable) + void ProcessInput(const uint8_t* keyState); + // Any actor-specific input code (overridable) + virtual void ActorInput(const uint8_t* keyState); + // Getters/setters const Vector2& GetPosition() const { return mPosition; } void SetPosition(const Vector2& pos) { mPosition = pos; ComputeWorldTransform(); } diff --git a/Chapter05/Component.cpp b/Chapter05/Component.cpp index 9b345987..c4ed432d 100644 --- a/Chapter05/Component.cpp +++ b/Chapter05/Component.cpp @@ -3,7 +3,7 @@ // Copyright (C) 2017 Sanjay Madhav. All rights reserved. // // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #include "Component.h" diff --git a/Chapter05/Component.h b/Chapter05/Component.h index 26d6fb87..fb41dd75 100644 --- a/Chapter05/Component.h +++ b/Chapter05/Component.h @@ -3,10 +3,12 @@ // Copyright (C) 2017 Sanjay Madhav. All rights reserved. // // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #pragma once +#include + class Component { public: @@ -17,6 +19,8 @@ class Component virtual ~Component(); // Update this component by delta time virtual void Update(float deltaTime); + // Process input for this component + virtual void ProcessInput(const uint8_t* keyState) {} int GetUpdateOrder() const { return mUpdateOrder; } protected: diff --git a/Chapter05/Game.cpp b/Chapter05/Game.cpp index 3cf22dd7..b41c71e6 100644 --- a/Chapter05/Game.cpp +++ b/Chapter05/Game.cpp @@ -16,11 +16,13 @@ #include "SpriteComponent.h" #include "Grid.h" #include "Enemy.h" +#include "Actor.h" Game::Game() :mWindow(nullptr) ,mSpriteShader(nullptr) ,mIsRunning(true) +,mUpdatingActors(false) { } @@ -112,12 +114,12 @@ void Game::ProcessInput() } } - const Uint8* state = SDL_GetKeyboardState(NULL); - if (state[SDL_SCANCODE_ESCAPE]) + const Uint8* keyState = SDL_GetKeyboardState(NULL); + if (keyState[SDL_SCANCODE_ESCAPE]) { mIsRunning = false; } - if (state[SDL_SCANCODE_B]) + if (keyState[SDL_SCANCODE_B]) { mGrid->BuildTower(); } @@ -129,6 +131,13 @@ void Game::ProcessInput() { mGrid->ProcessClick(x, y); } + + mUpdatingActors = true; + for (auto actor : mActors) + { + actor->ProcessInput(keyState); + } + mUpdatingActors = false; } void Game::UpdateGame() @@ -145,15 +154,20 @@ void Game::UpdateGame() } mTicksCount = SDL_GetTicks(); - // Make copy of actor vector - // (iterate over this in case new actors are created) - std::vector copy = mActors; - // Update all actors - for (auto actor : copy) + mUpdatingActors = true; + for (auto actor : mActors) { actor->Update(deltaTime); } + mUpdatingActors = false; + + // Move any pending actors to mActors + for (auto pending : mPendingActors) + { + mActors.emplace_back(pending); + } + mPendingActors.clear(); // Add any dead actors to a temp vector std::vector deadActors; @@ -165,8 +179,7 @@ void Game::UpdateGame() } } - // Delete any of the dead actors (which will - // remove them from mActors) + // Delete dead actors (which removes them from mActors) for (auto actor : deadActors) { delete actor; @@ -232,20 +245,6 @@ void Game::CreateSpriteVerts() void Game::LoadData() { - // Load textures - LoadTexture("Assets/TileBrown.png"); - LoadTexture("Assets/TileGreen.png"); - LoadTexture("Assets/TileGrey.png"); - LoadTexture("Assets/TileTan.png"); - LoadTexture("Assets/TileBrownSelected.png"); - LoadTexture("Assets/TileGreenSelected.png"); - LoadTexture("Assets/TileGreySelected.png"); - LoadTexture("Assets/TileTanSelected.png"); - LoadTexture("Assets/Base.png"); - LoadTexture("Assets/Tower.png"); - LoadTexture("Assets/Airplane.png"); - LoadTexture("Assets/Projectile.png"); - mGrid = new Grid(this); } @@ -267,15 +266,6 @@ void Game::UnloadData() mTextures.clear(); } -void Game::LoadTexture(const char* fileName) -{ - Texture* tex = new Texture(); - if (tex->Load(fileName)) - { - mTextures.emplace(fileName, tex); - } -} - Texture* Game::GetTexture(const std::string& fileName) { Texture* tex = nullptr; @@ -284,6 +274,19 @@ Texture* Game::GetTexture(const std::string& fileName) { tex = iter->second; } + else + { + tex = new Texture(); + if (tex->Load(fileName)) + { + mTextures.emplace(fileName, tex); + } + else + { + delete tex; + tex = nullptr; + } + } return tex; } @@ -300,12 +303,30 @@ void Game::Shutdown() void Game::AddActor(Actor* actor) { - mActors.emplace_back(actor); + // If we're updating actors, need to add to pending + if (mUpdatingActors) + { + mPendingActors.emplace_back(actor); + } + else + { + mActors.emplace_back(actor); + } } void Game::RemoveActor(Actor* actor) { - auto iter = std::find(mActors.begin(), mActors.end(), actor); + // Is it in pending actors? + auto iter = std::find(mPendingActors.begin(), mPendingActors.end(), actor); + if (iter != mPendingActors.end()) + { + // Swap to end of vector and pop off (avoid erase copies) + std::iter_swap(iter, mPendingActors.end() - 1); + mPendingActors.pop_back(); + } + + // Is it in actors? + iter = std::find(mActors.begin(), mActors.end(), actor); if (iter != mActors.end()) { // Swap to end of vector and pop off (avoid erase copies) @@ -316,11 +337,22 @@ void Game::RemoveActor(Actor* actor) void Game::AddSprite(SpriteComponent* sprite) { - mSprites.emplace_back(sprite); - // Resort sprites by draw order - std::sort(mSprites.begin(), mSprites.end(), [](SpriteComponent* a, SpriteComponent* b) { - return a->GetDrawOrder() < b->GetDrawOrder(); - }); + // Find the insertion point in the sorted vector + // (The first element with a higher draw order than me) + int myDrawOrder = sprite->GetDrawOrder(); + auto iter = mSprites.begin(); + for (; + iter != mSprites.end(); + ++iter) + { + if (myDrawOrder < (*iter)->GetDrawOrder()) + { + break; + } + } + + // Inserts element before position of iterator + mSprites.insert(iter, sprite); } void Game::RemoveSprite(SpriteComponent* sprite) diff --git a/Chapter05/Game.h b/Chapter05/Game.h index 8c5a5d12..4b690143 100644 --- a/Chapter05/Game.h +++ b/Chapter05/Game.h @@ -27,7 +27,6 @@ class Game void AddSprite(class SpriteComponent* sprite); void RemoveSprite(class SpriteComponent* sprite); - void LoadTexture(const char* fileName); class Texture* GetTexture(const std::string& fileName); class Grid* GetGrid() { return mGrid; } @@ -47,6 +46,8 @@ class Game // All the actors in the game std::vector mActors; + // Any pending actors + std::vector mPendingActors; // All the sprite components drawn std::vector mSprites; @@ -60,6 +61,8 @@ class Game SDL_GLContext mContext; Uint32 mTicksCount; bool mIsRunning; + // Track if we're updating actors right now + bool mUpdatingActors; // Game-specific std::vector mEnemies; From ac36b4904497d72e2896e03c962b4699f0b4c3d8 Mon Sep 17 00:00:00 2001 From: Sanjay Madhav Date: Thu, 23 Nov 2017 17:48:52 -0800 Subject: [PATCH 22/40] Fixed license comments --- Chapter05/Bullet.cpp | 9 +++------ Chapter05/Bullet.h | 4 ++-- Chapter05/CircleComponent.cpp | 19 ++++++++++++++++--- Chapter05/CircleComponent.h | 10 ++++++---- Chapter05/CollisionComponent.cpp | 20 -------------------- Chapter05/CollisionComponent.h | 17 ----------------- Chapter05/Enemy.cpp | 4 ++-- Chapter05/Enemy.h | 4 ++-- Chapter05/Game.cpp | 2 +- Chapter05/Game.h | 2 +- Chapter05/Game.vcxproj | 2 -- Chapter05/Game.vcxproj.filters | 6 ------ Chapter05/Main.cpp | 5 +---- Chapter05/Math.cpp | 2 +- Chapter05/Math.h | 2 +- Chapter05/MoveComponent.cpp | 4 ++-- Chapter05/MoveComponent.h | 4 ++-- Chapter05/NavComponent.cpp | 4 ++-- Chapter05/NavComponent.h | 4 ++-- Chapter05/Shader.cpp | 4 ++-- Chapter05/Shader.h | 4 ++-- Chapter05/SpriteComponent.cpp | 2 +- Chapter05/SpriteComponent.h | 2 +- Chapter05/Texture.cpp | 4 ++-- Chapter05/Texture.h | 4 ++-- Chapter05/Tower.cpp | 4 ++-- Chapter05/Tower.h | 4 ++-- Chapter05/VertexArray.cpp | 4 ++-- Chapter05/VertexArray.h | 4 ++-- 29 files changed, 62 insertions(+), 98 deletions(-) delete mode 100644 Chapter05/CollisionComponent.cpp delete mode 100644 Chapter05/CollisionComponent.h diff --git a/Chapter05/Bullet.cpp b/Chapter05/Bullet.cpp index 8febb479..f5de2b49 100644 --- a/Chapter05/Bullet.cpp +++ b/Chapter05/Bullet.cpp @@ -1,9 +1,9 @@ // ---------------------------------------------------------------- // From Game Programming in C++ by Sanjay Madhav // Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// +// // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #include "Bullet.h" @@ -35,10 +35,7 @@ void Bullet::UpdateActor(float deltaTime) // Check for collision vs enemies for (Enemy* e : GetGame()->GetEnemies()) { - Vector2 diff = e->GetCircle()->GetCenter() - mCircle->GetCenter(); - float rad = e->GetCircle()->GetRadius() + mCircle->GetRadius(); - rad *= rad; - if (diff.LengthSq() <= rad) + if (Intersect(*mCircle, *(e->GetCircle()))) { // We both die on collision e->SetState(EDead); diff --git a/Chapter05/Bullet.h b/Chapter05/Bullet.h index bccdfbc4..2c1690c4 100644 --- a/Chapter05/Bullet.h +++ b/Chapter05/Bullet.h @@ -1,9 +1,9 @@ // ---------------------------------------------------------------- // From Game Programming in C++ by Sanjay Madhav // Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// +// // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #pragma once diff --git a/Chapter05/CircleComponent.cpp b/Chapter05/CircleComponent.cpp index 996b3ecc..d41aab2c 100644 --- a/Chapter05/CircleComponent.cpp +++ b/Chapter05/CircleComponent.cpp @@ -1,16 +1,16 @@ // ---------------------------------------------------------------- // From Game Programming in C++ by Sanjay Madhav // Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// +// // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #include "CircleComponent.h" #include "Actor.h" CircleComponent::CircleComponent(class Actor* owner) -:CollisionComponent(owner) +:Component(owner) ,mRadius(0.0f) { @@ -25,3 +25,16 @@ float CircleComponent::GetRadius() const { return mOwner->GetScale() * mRadius; } + +bool Intersect(const CircleComponent& a, const CircleComponent& b) +{ + // Calculate distance squared + Vector2 diff = a.GetCenter() - b.GetCenter(); + float distSq = diff.LengthSq(); + + // Calculate sum of radii squared + float radiiSq = a.GetRadius() + b.GetRadius(); + radiiSq *= radiiSq; + + return distSq <= radiiSq; +} diff --git a/Chapter05/CircleComponent.h b/Chapter05/CircleComponent.h index ed4c99a7..4eecb2a4 100644 --- a/Chapter05/CircleComponent.h +++ b/Chapter05/CircleComponent.h @@ -1,16 +1,16 @@ // ---------------------------------------------------------------- // From Game Programming in C++ by Sanjay Madhav // Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// +// // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #pragma once -#include "CollisionComponent.h" +#include "Component.h" #include "Math.h" -class CircleComponent : public CollisionComponent +class CircleComponent : public Component { public: CircleComponent(class Actor* owner); @@ -22,3 +22,5 @@ class CircleComponent : public CollisionComponent private: float mRadius; }; + +bool Intersect(const CircleComponent& a, const CircleComponent& b); diff --git a/Chapter05/CollisionComponent.cpp b/Chapter05/CollisionComponent.cpp deleted file mode 100644 index 79c626fc..00000000 --- a/Chapter05/CollisionComponent.cpp +++ /dev/null @@ -1,20 +0,0 @@ -// ---------------------------------------------------------------- -// From Game Programming in C++ by Sanjay Madhav -// Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// -// Released under the BSD License -// See LICENSE.txt for full details. -// ---------------------------------------------------------------- - -#include "CollisionComponent.h" - -CollisionComponent::CollisionComponent(class Actor* owner,int updateOrder) -:Component(owner, updateOrder) -{ - -} - -CollisionComponent::~CollisionComponent() -{ - -} diff --git a/Chapter05/CollisionComponent.h b/Chapter05/CollisionComponent.h deleted file mode 100644 index 4074fa58..00000000 --- a/Chapter05/CollisionComponent.h +++ /dev/null @@ -1,17 +0,0 @@ -// ---------------------------------------------------------------- -// From Game Programming in C++ by Sanjay Madhav -// Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// -// Released under the BSD License -// See LICENSE.txt for full details. -// ---------------------------------------------------------------- - -#pragma once -#include "Component.h" -class CollisionComponent : public Component -{ -public: - CollisionComponent(class Actor* owner, int updateOrder = 100); - ~CollisionComponent(); -}; - diff --git a/Chapter05/Enemy.cpp b/Chapter05/Enemy.cpp index 72400715..ce3d5951 100644 --- a/Chapter05/Enemy.cpp +++ b/Chapter05/Enemy.cpp @@ -1,9 +1,9 @@ // ---------------------------------------------------------------- // From Game Programming in C++ by Sanjay Madhav // Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// +// // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #include "Enemy.h" diff --git a/Chapter05/Enemy.h b/Chapter05/Enemy.h index b8777550..72e33f08 100644 --- a/Chapter05/Enemy.h +++ b/Chapter05/Enemy.h @@ -1,9 +1,9 @@ // ---------------------------------------------------------------- // From Game Programming in C++ by Sanjay Madhav // Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// +// // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #pragma once diff --git a/Chapter05/Game.cpp b/Chapter05/Game.cpp index b41c71e6..71084f6e 100644 --- a/Chapter05/Game.cpp +++ b/Chapter05/Game.cpp @@ -3,7 +3,7 @@ // Copyright (C) 2017 Sanjay Madhav. All rights reserved. // // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #include "Game.h" diff --git a/Chapter05/Game.h b/Chapter05/Game.h index 4b690143..2c7f8950 100644 --- a/Chapter05/Game.h +++ b/Chapter05/Game.h @@ -3,7 +3,7 @@ // Copyright (C) 2017 Sanjay Madhav. All rights reserved. // // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #pragma once diff --git a/Chapter05/Game.vcxproj b/Chapter05/Game.vcxproj index 16f2def0..8eb6aebf 100644 --- a/Chapter05/Game.vcxproj +++ b/Chapter05/Game.vcxproj @@ -14,7 +14,6 @@ - @@ -34,7 +33,6 @@ - diff --git a/Chapter05/Game.vcxproj.filters b/Chapter05/Game.vcxproj.filters index 1059f5e9..5225cc26 100644 --- a/Chapter05/Game.vcxproj.filters +++ b/Chapter05/Game.vcxproj.filters @@ -34,9 +34,6 @@ Source Files - - Source Files - Source Files @@ -87,9 +84,6 @@ Source Files - - Source Files - Source Files diff --git a/Chapter05/Main.cpp b/Chapter05/Main.cpp index 36c41e1c..22ea0c69 100644 --- a/Chapter05/Main.cpp +++ b/Chapter05/Main.cpp @@ -3,13 +3,10 @@ // Copyright (C) 2017 Sanjay Madhav. All rights reserved. // // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #include "Game.h" -#include -#include -#include int main(int argc, char** argv) { diff --git a/Chapter05/Math.cpp b/Chapter05/Math.cpp index 9e1b7932..fb40e095 100644 --- a/Chapter05/Math.cpp +++ b/Chapter05/Math.cpp @@ -3,7 +3,7 @@ // Copyright (C) 2017 Sanjay Madhav. All rights reserved. // // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #include "Math.h" diff --git a/Chapter05/Math.h b/Chapter05/Math.h index 51de3a26..752963f1 100644 --- a/Chapter05/Math.h +++ b/Chapter05/Math.h @@ -3,7 +3,7 @@ // Copyright (C) 2017 Sanjay Madhav. All rights reserved. // // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #pragma once diff --git a/Chapter05/MoveComponent.cpp b/Chapter05/MoveComponent.cpp index 3c9730bc..cdf1fdf9 100644 --- a/Chapter05/MoveComponent.cpp +++ b/Chapter05/MoveComponent.cpp @@ -1,9 +1,9 @@ // ---------------------------------------------------------------- // From Game Programming in C++ by Sanjay Madhav // Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// +// // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #include "MoveComponent.h" diff --git a/Chapter05/MoveComponent.h b/Chapter05/MoveComponent.h index 11d18cb5..def7d389 100644 --- a/Chapter05/MoveComponent.h +++ b/Chapter05/MoveComponent.h @@ -1,9 +1,9 @@ // ---------------------------------------------------------------- // From Game Programming in C++ by Sanjay Madhav // Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// +// // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #pragma once diff --git a/Chapter05/NavComponent.cpp b/Chapter05/NavComponent.cpp index e640e222..be1c8211 100644 --- a/Chapter05/NavComponent.cpp +++ b/Chapter05/NavComponent.cpp @@ -1,9 +1,9 @@ // ---------------------------------------------------------------- // From Game Programming in C++ by Sanjay Madhav // Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// +// // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #include "NavComponent.h" diff --git a/Chapter05/NavComponent.h b/Chapter05/NavComponent.h index d085827e..b79c721f 100644 --- a/Chapter05/NavComponent.h +++ b/Chapter05/NavComponent.h @@ -1,9 +1,9 @@ // ---------------------------------------------------------------- // From Game Programming in C++ by Sanjay Madhav // Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// +// // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #pragma once diff --git a/Chapter05/Shader.cpp b/Chapter05/Shader.cpp index 261f68bb..ab2547d1 100644 --- a/Chapter05/Shader.cpp +++ b/Chapter05/Shader.cpp @@ -1,9 +1,9 @@ // ---------------------------------------------------------------- // From Game Programming in C++ by Sanjay Madhav // Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// +// // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #include "Shader.h" diff --git a/Chapter05/Shader.h b/Chapter05/Shader.h index 81a8952a..54a53bfd 100644 --- a/Chapter05/Shader.h +++ b/Chapter05/Shader.h @@ -1,9 +1,9 @@ // ---------------------------------------------------------------- // From Game Programming in C++ by Sanjay Madhav // Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// +// // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #pragma once diff --git a/Chapter05/SpriteComponent.cpp b/Chapter05/SpriteComponent.cpp index edce7438..d62b9840 100644 --- a/Chapter05/SpriteComponent.cpp +++ b/Chapter05/SpriteComponent.cpp @@ -3,7 +3,7 @@ // Copyright (C) 2017 Sanjay Madhav. All rights reserved. // // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #include "SpriteComponent.h" diff --git a/Chapter05/SpriteComponent.h b/Chapter05/SpriteComponent.h index 4298e0fb..6c5642f2 100644 --- a/Chapter05/SpriteComponent.h +++ b/Chapter05/SpriteComponent.h @@ -3,7 +3,7 @@ // Copyright (C) 2017 Sanjay Madhav. All rights reserved. // // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #pragma once diff --git a/Chapter05/Texture.cpp b/Chapter05/Texture.cpp index 9c2d2070..ddde35f0 100644 --- a/Chapter05/Texture.cpp +++ b/Chapter05/Texture.cpp @@ -1,9 +1,9 @@ // ---------------------------------------------------------------- // From Game Programming in C++ by Sanjay Madhav // Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// +// // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #include "Texture.h" diff --git a/Chapter05/Texture.h b/Chapter05/Texture.h index 07721267..6c8892fd 100644 --- a/Chapter05/Texture.h +++ b/Chapter05/Texture.h @@ -1,9 +1,9 @@ // ---------------------------------------------------------------- // From Game Programming in C++ by Sanjay Madhav // Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// +// // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #include diff --git a/Chapter05/Tower.cpp b/Chapter05/Tower.cpp index b6d2ec20..cb8368b9 100644 --- a/Chapter05/Tower.cpp +++ b/Chapter05/Tower.cpp @@ -1,9 +1,9 @@ // ---------------------------------------------------------------- // From Game Programming in C++ by Sanjay Madhav // Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// +// // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #include "Tower.h" diff --git a/Chapter05/Tower.h b/Chapter05/Tower.h index 000d925e..bfbf12ff 100644 --- a/Chapter05/Tower.h +++ b/Chapter05/Tower.h @@ -1,9 +1,9 @@ // ---------------------------------------------------------------- // From Game Programming in C++ by Sanjay Madhav // Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// +// // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #pragma once diff --git a/Chapter05/VertexArray.cpp b/Chapter05/VertexArray.cpp index 9a963b99..36f30a35 100644 --- a/Chapter05/VertexArray.cpp +++ b/Chapter05/VertexArray.cpp @@ -1,9 +1,9 @@ // ---------------------------------------------------------------- // From Game Programming in C++ by Sanjay Madhav // Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// +// // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #include "VertexArray.h" diff --git a/Chapter05/VertexArray.h b/Chapter05/VertexArray.h index 8e162351..c1f85363 100644 --- a/Chapter05/VertexArray.h +++ b/Chapter05/VertexArray.h @@ -1,9 +1,9 @@ // ---------------------------------------------------------------- // From Game Programming in C++ by Sanjay Madhav // Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// +// // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- #pragma once From c2b313d32f362a94e6a097bc31651fd3aa5b6cfc Mon Sep 17 00:00:00 2001 From: Sanjay Madhav Date: Thu, 23 Nov 2017 17:56:29 -0800 Subject: [PATCH 23/40] Fixed transform updating --- Chapter05/Actor.cpp | 22 +++++++++++++++++++--- Chapter05/Actor.h | 7 ++++--- Chapter05/Component.h | 2 ++ 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/Chapter05/Actor.cpp b/Chapter05/Actor.cpp index acd438cd..6310b417 100644 --- a/Chapter05/Actor.cpp +++ b/Chapter05/Actor.cpp @@ -17,6 +17,7 @@ Actor::Actor(Game* game) ,mScale(1.0f) ,mRotation(0.0f) ,mGame(game) + ,mRecomputeWorldTransform(false) { mGame->AddActor(this); } @@ -36,8 +37,12 @@ void Actor::Update(float deltaTime) { if (mState == EActive) { + ComputeWorldTransform(); + UpdateComponents(deltaTime); UpdateActor(deltaTime); + + ComputeWorldTransform(); } } @@ -73,9 +78,20 @@ void Actor::ActorInput(const uint8_t* keyState) void Actor::ComputeWorldTransform() { - mWorldTransform = Matrix4::CreateScale(mScale); - mWorldTransform *= Matrix4::CreateRotationZ(mRotation); - mWorldTransform *= Matrix4::CreateTranslation(Vector3(mPosition.x, mPosition.y, 0.0f)); + if (mRecomputeWorldTransform) + { + mRecomputeWorldTransform = false; + // Scale, then rotate, then translate + mWorldTransform = Matrix4::CreateScale(mScale); + mWorldTransform *= Matrix4::CreateRotationZ(mRotation); + mWorldTransform *= Matrix4::CreateTranslation(Vector3(mPosition.x, mPosition.y, 0.0f)); + + // Inform components world transform updated + for (auto comp : mComponents) + { + comp->OnUpdateWorldTransform(); + } + } } void Actor::AddComponent(Component* component) diff --git a/Chapter05/Actor.h b/Chapter05/Actor.h index 60280a3b..7a41bd47 100644 --- a/Chapter05/Actor.h +++ b/Chapter05/Actor.h @@ -38,11 +38,11 @@ class Actor // Getters/setters const Vector2& GetPosition() const { return mPosition; } - void SetPosition(const Vector2& pos) { mPosition = pos; ComputeWorldTransform(); } + void SetPosition(const Vector2& pos) { mPosition = pos; mRecomputeWorldTransform = true; } float GetScale() const { return mScale; } - void SetScale(float scale) { mScale = scale; ComputeWorldTransform(); } + void SetScale(float scale) { mScale = scale; mRecomputeWorldTransform = true; } float GetRotation() const { return mRotation; } - void SetRotation(float rotation) { mRotation = rotation; ComputeWorldTransform(); } + void SetRotation(float rotation) { mRotation = rotation; mRecomputeWorldTransform = true; } void ComputeWorldTransform(); const Matrix4& GetWorldTransform() const { return mWorldTransform; } @@ -67,6 +67,7 @@ class Actor Vector2 mPosition; float mScale; float mRotation; + bool mRecomputeWorldTransform; std::vector mComponents; class Game* mGame; diff --git a/Chapter05/Component.h b/Chapter05/Component.h index fb41dd75..e2be424b 100644 --- a/Chapter05/Component.h +++ b/Chapter05/Component.h @@ -21,6 +21,8 @@ class Component virtual void Update(float deltaTime); // Process input for this component virtual void ProcessInput(const uint8_t* keyState) {} + // Called when world transform changes + virtual void OnUpdateWorldTransform() { } int GetUpdateOrder() const { return mUpdateOrder; } protected: From 29fac34f2a6e513a1ff54cc95a2ddee47c46e891 Mon Sep 17 00:00:00 2001 From: Sanjay Madhav Date: Fri, 24 Nov 2017 00:21:52 -0800 Subject: [PATCH 24/40] Chapter 5 updates --- Chapter05/Actor.cpp | 2 +- Chapter05/Game.cpp | 5 +++-- Chapter05/Shader.cpp | 14 +++++++------- Chapter05/Shader.h | 2 +- Chapter05/VertexArray.cpp | 3 +-- Chapter05/VertexArray.h | 6 ++++++ 6 files changed, 19 insertions(+), 13 deletions(-) diff --git a/Chapter05/Actor.cpp b/Chapter05/Actor.cpp index 6310b417..738d508f 100644 --- a/Chapter05/Actor.cpp +++ b/Chapter05/Actor.cpp @@ -17,7 +17,7 @@ Actor::Actor(Game* game) ,mScale(1.0f) ,mRotation(0.0f) ,mGame(game) - ,mRecomputeWorldTransform(false) + ,mRecomputeWorldTransform(true) { mGame->AddActor(this); } diff --git a/Chapter05/Game.cpp b/Chapter05/Game.cpp index 71084f6e..a30ae933 100644 --- a/Chapter05/Game.cpp +++ b/Chapter05/Game.cpp @@ -51,7 +51,7 @@ bool Game::Initialize() // Force OpenGL to use hardware acceleration SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1); - mWindow = SDL_CreateWindow("Game Programming in C++ (Chapter 6)", 100, 100, + mWindow = SDL_CreateWindow("Game Programming in C++ (Chapter 5)", 100, 100, 1024, 768, SDL_WINDOW_OPENGL); if (!mWindow) { @@ -165,6 +165,7 @@ void Game::UpdateGame() // Move any pending actors to mActors for (auto pending : mPendingActors) { + pending->ComputeWorldTransform(); mActors.emplace_back(pending); } mPendingActors.clear(); @@ -214,7 +215,7 @@ void Game::GenerateOutput() bool Game::LoadShaders() { mSpriteShader = new Shader(); - if (!mSpriteShader->Load("Shaders/Sprite")) + if (!mSpriteShader->Load("Shaders/Sprite.vert", "Shaders/Sprite.frag")) { return false; } diff --git a/Chapter05/Shader.cpp b/Chapter05/Shader.cpp index ab2547d1..04473884 100644 --- a/Chapter05/Shader.cpp +++ b/Chapter05/Shader.cpp @@ -25,15 +25,15 @@ Shader::~Shader() } -bool Shader::Load(const std::string& name) +bool Shader::Load(const std::string& vertName, const std::string& fragName) { // Compile vertex and pixel shaders - if (!CompileShader(name + ".vert", - GL_VERTEX_SHADER, - mVertexShader) || - !CompileShader(name + ".frag", - GL_FRAGMENT_SHADER, - mFragShader)) + if (!CompileShader(vertName, + GL_VERTEX_SHADER, + mVertexShader) || + !CompileShader(fragName, + GL_FRAGMENT_SHADER, + mFragShader)) { return false; } diff --git a/Chapter05/Shader.h b/Chapter05/Shader.h index 54a53bfd..aefe994f 100644 --- a/Chapter05/Shader.h +++ b/Chapter05/Shader.h @@ -18,7 +18,7 @@ class Shader ~Shader(); // Load shader of the specified name, excluding // the .frag/.vert extension - bool Load(const std::string& name); + bool Load(const std::string& vertName, const std::string& fragName); void Unload(); // Set this as the active shader program void SetActive(); diff --git a/Chapter05/VertexArray.cpp b/Chapter05/VertexArray.cpp index 36f30a35..c7bff446 100644 --- a/Chapter05/VertexArray.cpp +++ b/Chapter05/VertexArray.cpp @@ -26,7 +26,7 @@ VertexArray::VertexArray(const float* verts, unsigned int numVerts, // Create index buffer glGenBuffers(1, &mIndexBuffer); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mIndexBuffer); - glBufferData(GL_ELEMENT_ARRAY_BUFFER, numIndices * sizeof(GLuint), indices, GL_STATIC_DRAW); + glBufferData(GL_ELEMENT_ARRAY_BUFFER, numIndices * sizeof(unsigned int), indices, GL_STATIC_DRAW); // Specify the vertex attributes // (For now, assume one vertex format) @@ -48,5 +48,4 @@ VertexArray::~VertexArray() void VertexArray::SetActive() { glBindVertexArray(mVertexArray); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mIndexBuffer); } diff --git a/Chapter05/VertexArray.h b/Chapter05/VertexArray.h index c1f85363..8f3e6478 100644 --- a/Chapter05/VertexArray.h +++ b/Chapter05/VertexArray.h @@ -14,11 +14,17 @@ class VertexArray const unsigned int* indices, unsigned int numIndices); ~VertexArray(); + // Activate this vertex array (so we can draw it) void SetActive(); private: + // How many vertices in the vertex buffer? unsigned int mNumVerts; + // How many indices in the index buffer unsigned int mNumIndices; + // OpenGL ID of the vertex buffer unsigned int mVertexBuffer; + // OpenGL ID of the index buffer unsigned int mIndexBuffer; + // OpenGL ID of the vertex array object unsigned int mVertexArray; }; \ No newline at end of file From 78a262b83a62bab455bbfbf23a467370afdfaf71 Mon Sep 17 00:00:00 2001 From: Sanjay Madhav Date: Fri, 24 Nov 2017 17:11:59 -0800 Subject: [PATCH 25/40] Changed chapter 5 to use asteroids instead of tower def --- Chapter05/Assets/Airplane.png | Bin 1642 -> 0 bytes Chapter05/Assets/Asteroid.png | Bin 0 -> 5577 bytes Chapter05/Assets/Base.png | Bin 2232 -> 0 bytes Chapter05/Assets/LICENSE.txt | 3 - Chapter05/Assets/Laser.png | Bin 0 -> 3345 bytes Chapter05/Assets/Missile.png | Bin 869 -> 0 bytes Chapter05/Assets/Projectile.png | Bin 707 -> 0 bytes Chapter05/Assets/Ship.png | Bin 0 -> 8692 bytes Chapter05/Assets/ShipWithThrust.png | Bin 0 -> 8953 bytes Chapter05/Assets/TileBrown.png | Bin 1491 -> 0 bytes Chapter05/Assets/TileBrownSelected.png | Bin 1338 -> 0 bytes Chapter05/Assets/TileGreen.png | Bin 1742 -> 0 bytes Chapter05/Assets/TileGreenSelected.png | Bin 1492 -> 0 bytes Chapter05/Assets/TileGrey.png | Bin 1290 -> 0 bytes Chapter05/Assets/TileGreySelected.png | Bin 1137 -> 0 bytes Chapter05/Assets/TileTan.png | Bin 1431 -> 0 bytes Chapter05/Assets/TileTanSelected.png | Bin 1173 -> 0 bytes Chapter05/Assets/Tower.png | Bin 775 -> 0 bytes Chapter05/Asteroid.cpp | 46 +++++ Chapter05/{Enemy.h => Asteroid.h} | 9 +- Chapter05/Bullet.cpp | 53 ------ Chapter05/Enemy.cpp | 56 ------ Chapter05/Game.cpp | 68 +++---- Chapter05/Game.h | 12 +- Chapter05/Game.vcxproj | 24 +-- Chapter05/Game.vcxproj.filters | 48 ++--- Chapter05/Grid.cpp | 246 ------------------------- Chapter05/Grid.h | 58 ------ Chapter05/InputComponent.cpp | 47 +++++ Chapter05/InputComponent.h | 45 +++++ Chapter05/Laser.cpp | 56 ++++++ Chapter05/{Bullet.h => Laser.h} | 8 +- Chapter05/MoveComponent.cpp | 8 +- Chapter05/NavComponent.cpp | 49 ----- Chapter05/NavComponent.h | 23 --- Chapter05/Random.cpp | 51 +++++ Chapter05/Random.h | 36 ++++ Chapter05/Shader.cpp | 6 +- Chapter05/Shader.h | 3 +- Chapter05/Shaders/Basic.frag | 20 ++ Chapter05/Shaders/Basic.vert | 23 +++ Chapter05/Shaders/Sprite.frag | 4 +- Chapter05/Shaders/Sprite.vert | 4 +- Chapter05/Ship.cpp | 50 +++++ Chapter05/{Tower.h => Ship.h} | 14 +- Chapter05/Tile.cpp | 66 ------- Chapter05/Tile.h | 46 ----- Chapter05/Tower.cpp | 53 ------ Chapter05/VertexArray.h | 3 + 49 files changed, 477 insertions(+), 761 deletions(-) delete mode 100644 Chapter05/Assets/Airplane.png create mode 100644 Chapter05/Assets/Asteroid.png delete mode 100644 Chapter05/Assets/Base.png delete mode 100644 Chapter05/Assets/LICENSE.txt create mode 100644 Chapter05/Assets/Laser.png delete mode 100644 Chapter05/Assets/Missile.png delete mode 100644 Chapter05/Assets/Projectile.png create mode 100644 Chapter05/Assets/Ship.png create mode 100644 Chapter05/Assets/ShipWithThrust.png delete mode 100644 Chapter05/Assets/TileBrown.png delete mode 100644 Chapter05/Assets/TileBrownSelected.png delete mode 100644 Chapter05/Assets/TileGreen.png delete mode 100644 Chapter05/Assets/TileGreenSelected.png delete mode 100644 Chapter05/Assets/TileGrey.png delete mode 100644 Chapter05/Assets/TileGreySelected.png delete mode 100644 Chapter05/Assets/TileTan.png delete mode 100644 Chapter05/Assets/TileTanSelected.png delete mode 100644 Chapter05/Assets/Tower.png create mode 100644 Chapter05/Asteroid.cpp rename Chapter05/{Enemy.h => Asteroid.h} (81%) delete mode 100644 Chapter05/Bullet.cpp delete mode 100644 Chapter05/Enemy.cpp delete mode 100644 Chapter05/Grid.cpp delete mode 100644 Chapter05/Grid.h create mode 100644 Chapter05/InputComponent.cpp create mode 100644 Chapter05/InputComponent.h create mode 100644 Chapter05/Laser.cpp rename Chapter05/{Bullet.h => Laser.h} (86%) delete mode 100644 Chapter05/NavComponent.cpp delete mode 100644 Chapter05/NavComponent.h create mode 100644 Chapter05/Random.cpp create mode 100644 Chapter05/Random.h create mode 100644 Chapter05/Shaders/Basic.frag create mode 100644 Chapter05/Shaders/Basic.vert create mode 100644 Chapter05/Ship.cpp rename Chapter05/{Tower.h => Ship.h} (71%) delete mode 100644 Chapter05/Tile.cpp delete mode 100644 Chapter05/Tile.h delete mode 100644 Chapter05/Tower.cpp diff --git a/Chapter05/Assets/Airplane.png b/Chapter05/Assets/Airplane.png deleted file mode 100644 index df752ef1ee4edb82ba8bd5f3e9564f5ec1427adc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1642 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 b&;$4dQ+D450G(2M00000NkvXXu0mjf8PZhG literal 0 HcmV?d00001 diff --git a/Chapter05/Assets/Missile.png b/Chapter05/Assets/Missile.png deleted file mode 100644 index 87bfed1a21a69315854912a0d47edcef03a36bdc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 869 zcmV-r1DgDaP)cuSNg>0`f^j zK~#9!?bktX8&wd%@&9vnW5>=q?V)j!g0X_&fJm|Ep>S#>#0iO%RN}yi10SH@fVARH z8bzGTwUwIXLOD7dD9`|=R#XYK5KsjOqf*@1^?KjF=^@4>G^kLgatrf2`i-Bpvwk!4 zKq;k^Qc5YMlu}A5rIb=i{Xdw!+Gyp)nRkIV0T8JI6)~n_JI(6rUwr%fe>wpxFFgA; z#w`4OgoGjz&VRc8KESD^_m1{fjFf?WTX~~|ky7FE8WXiOFx*6_3bKKtI{*3l*AGdPV%O*6Fghp&>C9W5L^`%#77N+jGZ=u#rz+HJ{14HPH zT|EBDmG1|dfRm?}=Okr9fTuq^$5YWJk7YA=#aSo()`_V{9lkvJ3hjeMMn{9*dM*g? zJRbnh^T-7O?i*cv9(C_i`?)#f5QwB(9GMG2sB7Ng0 z>fNOzlchaX?1i?ciZGJp`G2_eST0B2_rTxzc_X&eqYm{b1~}mlXJ^kIo}TR|30}W{ zp~B=r#;2d`J^X`|_dW8y$APrv+GdN$QTB(kXMor4`#nC2tt;<)Ok~o3oZ{KR9DxC` zPPl%%&Cl)5R$X-6);p*K{P5j1S{GJ$`NyjaJzmE zxfNR)Hrcfe=0*cN&)e1o^4$KVPSk1>IY*Q@8aDZBJ3Ql3cH#KN{##++gV5Q-(_{W{ zZUfkNAnjwF5IMJ_|8JWED$T;=J6PMQzF;&EEJctQ!&+h`~kIc*&!!bmvk}}o# vi?vm~YAL0ZQc5YMlu}A5rIb=iJw)yRZRk7J$*k1Bp5;lodtUM~_-QnWs)^PkXuiJ$S zWlvWes1|a1@IKSVzV~cIM{!^BI&+yy%?2h7Jm`R7=+ZZgE-9~z*I)n5P}1;V`wM{` zugiAdH`}lCyPjLKwn5Zk{q<_@8o`OH_dlIm{Qbc5yzRd~ConA1uqr-h+u@PWbMSku zRPV8{cRzp5RPo$!?a>_Rt`n&eZT_kAF4jCx&3yCmVSG#iPVpM=MxMP zHb$@<(EYISi}#kChjsh^-?J>w?^$>?>tUtbF^N}Se_2g_ZkahNX|1Yn@FR<3QQaLe zckkS(x&J!8(dPVm#+v)bKijypq-{P41iwPphGm+~?%q<#p|ROGBZ@L%sBs?L1+4Dd$#Um*KIHE zmN!&4e5~L(P-3Ne{&TFk_p-~Hvw>RIGtMdA&fqy|LaOAoD7DEauX#o2P4`g~Ub8hN z(ruDT^xpOj!haZJu4S1vDIEB`XYNfCUrE09Gik;R?FKyer`Fc3FA_F6R?=|%W{#W8 z@g6tjO*+x?=Qs6S%y5x8e)NfaxUI|)E{2XpFLJi-{d@h$yN1^WJoEWpWo}rZ(Pg(* wz{*;!PQ2~m_2w#>YqfZy5+Ze=K6pPv=#r0DUat{83`}kep00i_>zopr0K>X7Jpcdz diff --git a/Chapter05/Assets/Ship.png b/Chapter05/Assets/Ship.png new file mode 100644 index 0000000000000000000000000000000000000000..965144366ea2820ea4c0827a765f02fc760483a1 GIT binary patch literal 8692 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 diff --git a/Chapter05/Assets/TileGreen.png b/Chapter05/Assets/TileGreen.png deleted file mode 100644 index b890b603898434a59647f53371a941fac3cfe923..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1742 zcmV;<1~K`GP)00006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru;Rg#B3JUjW^c34Sy0CY)qL2o!3KWkLTL8e_3*b~p2Ft!weM&*O8pwjS);mRCL;Ax7Q5Od9NJ?ae zs>ga}mr(VnEiKE0!5vS32Yb&9aRGC2&EUmh^PgVdo3g`6+8h|I3P42QONbQ*O#l#x zP#BEwU{j#+8iS(KfA+{pjs+l*oTL4kZH~*0CjhEv4V~4$oR43{$AEHD{Bpcmxn^j$!2pTh}0Ce_`~2jBl63f zOG(3E)fxn&U(~9#ydhZssHGaHV)VaP`qc=`wC1o$Uj@+VuRVU>D?Lf0pqxxICmejL zQ(qTOWq3@!p76lnL>x&m(oBqNQElco-#%3S_YVMZtK~^bG#W|Pgz+?f?FoyXXcSUZ zJ9E)JFuqmxY!04NkeBaN_9`*C+qZ)q(2P^8O4)t;Icy|SMTApm(*c^TkwjrIiAU)L zt$>Es8A_$de8SpV2#lW?pl}Mvxf{KiqjNsY? z5#HgIXa~)7k^z8-1AL~WwYa!KBL)DYUw@nfV2FF^$&Il08z+8#Abc2|v@_GkP|HuN zy<)4y0c7xuu>jBO#)N5>nh4%;3b?8mP?hn@e-u#o%l4v?q@jTN8XHHAK8>y?@we`E zx+&!`E_tKA>XVmhiyn3~yMO$ntx7$Gi&}Vj^ayK7F>8N}sDM1%Kl>fb^r#Y5Iu8Wct8i!||m3~bzMbUL=0 zk5t^xH?~ct0N|A{*}TA~1${gpriUrsMeW6iRY~3s-w*)!~l(ACaUMI z3SPx&Pvt+VKRN0!WQHnUdQNKqWb~YpzNe#Rd;2widQ&|PbnkSl?Oai&iN#EX!uevZJ z-=PuZjArkdQ!J880L}e?LPp0aW|Z&@7=pq7WLvXvzSI=!W+35LwZiH<<}*!7Sc`!# zl4I(D0HyWp;YLT+;1rLnC~JHX-igygE@=UvkuhFBBEfOdd9yaN-+BP>8W>{Z8GzrV zUwG_rDL>j>Jp*9l?!RwJN7AOCziHmI5ux^ki)O7VR@WxY_zqHdt@4EYG}{eZF#^qO3Y@AL zhGwnxDc6$f#i>{_PJ>+(Wjp@)&>)X|gO zNgQ)S^@ceJl1&Dw~sFmD|^?4d!dOm;~a(MO=R9nSflaq z$8?+QfcXx@r^ViAR_#^K&CYI}4wWK!SARNYtvvP8R_!P~>x0wsvqO9{iGg=#_b4PT zV=Y-}ud^o4`pV1thsx7g{pT@jFB^qo)%uBb!aG{I=X|Pw2omDB{6U^Oyk@$nKkM7) zn7rya?^1*D-kWNF)y)9yMfVis##3U7*_yjLo?!kIfLuN6gMRE#0gz5%51xIwdU*yw kM>cG4-s`W)A9A_>0M&IHpH4*ZD*ylh07*qoM6N<$f}Al{EdT%j diff --git a/Chapter05/Assets/TileGreenSelected.png b/Chapter05/Assets/TileGreenSelected.png deleted file mode 100644 index 56156bd609219869e223dcdf740c1978697c8889..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1492 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 diff --git a/Chapter05/Assets/Tower.png b/Chapter05/Assets/Tower.png deleted file mode 100644 index c7c1d179d974e3903ded4e4a0fc22af0740e0476..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 775 zcmV+i1Ni)jP)zc)4z)PGc2w3|wB0HhqE2WU9~-Bc_o7f4S4S<+Ry>Mm)nkQ*SO zF1mtU(?!)bQi8yEUKgM$1jn&quqXEW?Lgq+`}pR)X9hqJ1VIo4K@f5Y#eGBdQ{xbf zCV{HkF3!LJO1H=Fzn-UMfE!DEzi~`VO@r@FXTdZ6Fxyq^eG<&00qps?Fu)Bpz`(CRahOi07IgszwC5+<3DPhi zvS{E3%PCr!pjS7L9 zvy02ciJIooEdhw@%+Ncr6L+`C#5%3c~vJt_bb7fyd)}u95o# zJ@Ih$?Z+YstrN1T281TTL`%H=R~f6@;F<})uebW}Hi?fs2i!Kn`*oEG@%Pq%u$o}3 z@BwGz*2!DDC&8OZApXeUu_5sTD18J$5ClOG1VIpz<{u{d22?j{jbZ=*002ovPDHLk FV1ixgS~LIv diff --git a/Chapter05/Asteroid.cpp b/Chapter05/Asteroid.cpp new file mode 100644 index 00000000..9bcaa1e1 --- /dev/null +++ b/Chapter05/Asteroid.cpp @@ -0,0 +1,46 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "Asteroid.h" +#include "SpriteComponent.h" +#include "MoveComponent.h" +#include "Game.h" +#include "Random.h" +#include "CircleComponent.h" + +Asteroid::Asteroid(Game* game) + :Actor(game) + ,mCircle(nullptr) +{ + // Initialize to random position/orientation + Vector2 randPos = Random::GetVector(Vector2(-512.0f, -384.0f), + Vector2(512.0f, 384.0f)); + SetPosition(randPos); + + SetRotation(Random::GetFloatRange(0.0f, Math::TwoPi)); + + // Create a sprite component + SpriteComponent* sc = new SpriteComponent(this); + sc->SetTexture(game->GetTexture("Assets/Asteroid.png")); + + // Create a move component, and set a forward speed + MoveComponent* mc = new MoveComponent(this); + mc->SetForwardSpeed(150.0f); + + // Create a circle component (for collision) + mCircle = new CircleComponent(this); + mCircle->SetRadius(40.0f); + + // Add to mAsteroids in game + game->AddAsteroid(this); +} + +Asteroid::~Asteroid() +{ + GetGame()->RemoveAsteroid(this); +} diff --git a/Chapter05/Enemy.h b/Chapter05/Asteroid.h similarity index 81% rename from Chapter05/Enemy.h rename to Chapter05/Asteroid.h index 72e33f08..45305770 100644 --- a/Chapter05/Enemy.h +++ b/Chapter05/Asteroid.h @@ -8,13 +8,12 @@ #pragma once #include "Actor.h" - -class Enemy : public Actor +class Asteroid : public Actor { public: - Enemy(class Game* game); - ~Enemy(); - void UpdateActor(float deltaTime) override; + Asteroid(class Game* game); + ~Asteroid(); + class CircleComponent* GetCircle() { return mCircle; } private: class CircleComponent* mCircle; diff --git a/Chapter05/Bullet.cpp b/Chapter05/Bullet.cpp deleted file mode 100644 index f5de2b49..00000000 --- a/Chapter05/Bullet.cpp +++ /dev/null @@ -1,53 +0,0 @@ -// ---------------------------------------------------------------- -// From Game Programming in C++ by Sanjay Madhav -// Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// -// Released under the BSD License -// See LICENSE in root directory for full details. -// ---------------------------------------------------------------- - -#include "Bullet.h" -#include "SpriteComponent.h" -#include "MoveComponent.h" -#include "CircleComponent.h" -#include "Game.h" -#include "Enemy.h" - -Bullet::Bullet(class Game* game) -:Actor(game) -{ - SpriteComponent* sc = new SpriteComponent(this); - sc->SetTexture(game->GetTexture("Assets/Projectile.png")); - - MoveComponent* mc = new MoveComponent(this); - mc->SetForwardSpeed(400.0f); - - mCircle = new CircleComponent(this); - mCircle->SetRadius(5.0f); - - mLiveTime = 1.0f; -} - -void Bullet::UpdateActor(float deltaTime) -{ - Actor::UpdateActor(deltaTime); - - // Check for collision vs enemies - for (Enemy* e : GetGame()->GetEnemies()) - { - if (Intersect(*mCircle, *(e->GetCircle()))) - { - // We both die on collision - e->SetState(EDead); - SetState(EDead); - break; - } - } - - mLiveTime -= deltaTime; - if (mLiveTime <= 0.0f) - { - // Time limit hit, die - SetState(EDead); - } -} diff --git a/Chapter05/Enemy.cpp b/Chapter05/Enemy.cpp deleted file mode 100644 index ce3d5951..00000000 --- a/Chapter05/Enemy.cpp +++ /dev/null @@ -1,56 +0,0 @@ -// ---------------------------------------------------------------- -// From Game Programming in C++ by Sanjay Madhav -// Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// -// Released under the BSD License -// See LICENSE in root directory for full details. -// ---------------------------------------------------------------- - -#include "Enemy.h" -#include "Game.h" -#include "SpriteComponent.h" -#include "NavComponent.h" -#include "Grid.h" -#include "Tile.h" -#include "CircleComponent.h" -#include - -Enemy::Enemy(class Game* game) -:Actor(game) -{ - // Add to enemy vector - game->GetEnemies().emplace_back(this); - - SpriteComponent* sc = new SpriteComponent(this); - sc->SetTexture(game->GetTexture("Assets/Airplane.png")); - // Set position at start tile - SetPosition(GetGame()->GetGrid()->GetStartTile()->GetPosition()); - // Setup a nav component at the start tile - NavComponent* nc = new NavComponent(this); - nc->SetForwardSpeed(150.0f); - nc->StartPath(GetGame()->GetGrid()->GetStartTile()); - // Setup a circle for collision - mCircle = new CircleComponent(this); - mCircle->SetRadius(25.0f); -} - -Enemy::~Enemy() -{ - // Remove from enemy vector - auto iter = std::find(GetGame()->GetEnemies().begin(), - GetGame()->GetEnemies().end(), - this); - GetGame()->GetEnemies().erase(iter); -} - -void Enemy::UpdateActor(float deltaTime) -{ - Actor::UpdateActor(deltaTime); - - // Am I near the end tile? - Vector2 diff = GetPosition() - GetGame()->GetGrid()->GetEndTile()->GetPosition(); - if (Math::NearZero(diff.Length(), 10.0f)) - { - SetState(EDead); - } -} diff --git a/Chapter05/Game.cpp b/Chapter05/Game.cpp index a30ae933..d22c41c0 100644 --- a/Chapter05/Game.cpp +++ b/Chapter05/Game.cpp @@ -14,9 +14,10 @@ #include #include "Actor.h" #include "SpriteComponent.h" -#include "Grid.h" -#include "Enemy.h" #include "Actor.h" +#include "Ship.h" +#include "Asteroid.h" +#include "Random.h" Game::Game() :mWindow(nullptr) @@ -119,18 +120,6 @@ void Game::ProcessInput() { mIsRunning = false; } - if (keyState[SDL_SCANCODE_B]) - { - mGrid->BuildTower(); - } - - // Process mouse - int x, y; - Uint32 buttons = SDL_GetMouseState(&x, &y); - if (SDL_BUTTON(buttons) & SDL_BUTTON_LEFT) - { - mGrid->ProcessClick(x, y); - } mUpdatingActors = true; for (auto actor : mActors) @@ -190,7 +179,7 @@ void Game::UpdateGame() void Game::GenerateOutput() { // Set the clear color to dark green - glClearColor(0.13f, 0.54f, 0.13f, 1.0f); + glClearColor(0.86f, 0.86f, 0.86f, 1.0f); // Clear the color buffer glClear(GL_COLOR_BUFFER_BIT); @@ -246,7 +235,16 @@ void Game::CreateSpriteVerts() void Game::LoadData() { - mGrid = new Grid(this); + // Create player's ship + mShip = new Ship(this); + mShip->SetRotation(Math::PiOver2); + + // Create asteroids + const int numAsteroids = 20; + for (int i = 0; i < numAsteroids; i++) + { + new Asteroid(this); + } } void Game::UnloadData() @@ -291,6 +289,21 @@ Texture* Game::GetTexture(const std::string& fileName) return tex; } +void Game::AddAsteroid(Asteroid* ast) +{ + mAsteroids.emplace_back(ast); +} + +void Game::RemoveAsteroid(Asteroid* ast) +{ + auto iter = std::find(mAsteroids.begin(), + mAsteroids.end(), ast); + if (iter != mAsteroids.end()) + { + mAsteroids.erase(iter); + } +} + void Game::Shutdown() { UnloadData(); @@ -361,26 +374,3 @@ void Game::RemoveSprite(SpriteComponent* sprite) auto iter = std::find(mSprites.begin(), mSprites.end(), sprite); mSprites.erase(iter); } - -Enemy* Game::GetNearestEnemy(const Vector2& pos) -{ - Enemy* best = nullptr; - - if (mEnemies.size() > 0) - { - best = mEnemies[0]; - // Save the distance squared of first enemy, and test if others are closer - float bestDistSq = (pos - mEnemies[0]->GetPosition()).LengthSq(); - for (size_t i = 1; i < mEnemies.size(); i++) - { - float newDistSq = (pos - mEnemies[i]->GetPosition()).LengthSq(); - if (newDistSq < bestDistSq) - { - bestDistSq = newDistSq; - best = mEnemies[i]; - } - } - } - - return best; -} diff --git a/Chapter05/Game.h b/Chapter05/Game.h index 2c7f8950..d5c22637 100644 --- a/Chapter05/Game.h +++ b/Chapter05/Game.h @@ -29,9 +29,10 @@ class Game class Texture* GetTexture(const std::string& fileName); - class Grid* GetGrid() { return mGrid; } - std::vector& GetEnemies() { return mEnemies; } - class Enemy* GetNearestEnemy(const Vector2& pos); + // Game-specific (add/remove asteroid) + void AddAsteroid(class Asteroid* ast); + void RemoveAsteroid(class Asteroid* ast); + std::vector& GetAsteroids() { return mAsteroids; } private: void ProcessInput(); void UpdateGame(); @@ -65,7 +66,6 @@ class Game bool mUpdatingActors; // Game-specific - std::vector mEnemies; - class Grid* mGrid; - float mNextEnemy; + class Ship* mShip; + std::vector mAsteroids; }; diff --git a/Chapter05/Game.vcxproj b/Chapter05/Game.vcxproj index 8eb6aebf..b6cb5fee 100644 --- a/Chapter05/Game.vcxproj +++ b/Chapter05/Game.vcxproj @@ -12,42 +12,42 @@ - + - - + + - + + - - - + - - + + - + + - - + + diff --git a/Chapter05/Game.vcxproj.filters b/Chapter05/Game.vcxproj.filters index 5225cc26..9e92f055 100644 --- a/Chapter05/Game.vcxproj.filters +++ b/Chapter05/Game.vcxproj.filters @@ -28,37 +28,34 @@ Source Files - - Source Files - Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files @@ -78,37 +75,34 @@ Source Files - - Source Files - Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files @@ -119,5 +113,11 @@ Shaders + + Shaders + + + Shaders + \ No newline at end of file diff --git a/Chapter05/Grid.cpp b/Chapter05/Grid.cpp deleted file mode 100644 index 569a2119..00000000 --- a/Chapter05/Grid.cpp +++ /dev/null @@ -1,246 +0,0 @@ -// ---------------------------------------------------------------- -// From Game Programming in C++ by Sanjay Madhav -// Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// -// Released under the BSD License -// See LICENSE in root directory for full details. -// ---------------------------------------------------------------- - -#include "Grid.h" -#include "Tile.h" -#include "Tower.h" -#include "Enemy.h" -#include - -Grid::Grid(class Game* game) -:Actor(game) -,mSelectedTile(nullptr) -{ - // 7 rows, 16 columns - mTiles.resize(NumRows); - for (size_t i = 0; i < mTiles.size(); i++) - { - mTiles[i].resize(NumCols); - } - - // Create tiles - for (size_t i = 0; i < NumRows; i++) - { - for (size_t j = 0; j < NumCols; j++) - { - mTiles[i][j] = new Tile(GetGame()); - mTiles[i][j]->SetPosition(Vector2(StartX + TileSize/2.0f + j * TileSize, StartY - i * TileSize)); - } - } - - // Set start/end tiles - GetStartTile()->SetTileState(Tile::EStart); - GetEndTile()->SetTileState(Tile::EBase); - - // Set up adjacency lists - for (size_t i = 0; i < NumRows; i++) - { - for (size_t j = 0; j < NumCols; j++) - { - if (i > 0) - { - mTiles[i][j]->mAdjacent.push_back(mTiles[i-1][j]); - } - if (i < NumRows - 1) - { - mTiles[i][j]->mAdjacent.push_back(mTiles[i+1][j]); - } - if (j > 0) - { - mTiles[i][j]->mAdjacent.push_back(mTiles[i][j-1]); - } - if (j < NumCols - 1) - { - mTiles[i][j]->mAdjacent.push_back(mTiles[i][j+1]); - } - } - } - - // Find path (in reverse) - FindPath(GetEndTile(), GetStartTile()); - UpdatePathTiles(GetStartTile()); - - mNextEnemy = EnemyTime; -} - -void Grid::SelectTile(size_t row, size_t col) -{ - // Make sure it's a valid selection - Tile::TileState tstate = mTiles[row][col]->GetTileState(); - if (tstate != Tile::EStart && tstate != Tile::EBase) - { - // Deselect previous one - if (mSelectedTile) - { - mSelectedTile->ToggleSelect(); - } - mSelectedTile = mTiles[row][col]; - mSelectedTile->ToggleSelect(); - } -} - -void Grid::ProcessClick(int x, int y) -{ - y -= static_cast(StartY - TileSize / 2); - if (y >= 0) - { - x /= static_cast(TileSize); - y /= static_cast(TileSize); - if (x >= 0 && x < static_cast(NumCols) && y >= 0 && y < static_cast(NumRows)) - { - SelectTile(y, x); - } - } -} - -// Implements A* pathfinding -bool Grid::FindPath(Tile* start, Tile* goal) -{ - for (size_t i = 0; i < NumRows; i++) - { - for (size_t j = 0; j < NumCols; j++) - { - mTiles[i][j]->g = 0.0f; - mTiles[i][j]->mInOpenSet = false; - mTiles[i][j]->mInClosedSet = false; - } - } - - std::vector openSet; - - // Set current node to start, and add to closed set - Tile* current = start; - current->mInClosedSet = true; - - do - { - // Add adjacent nodes to open set - for (Tile* neighbor : current->mAdjacent) - { - if (neighbor->mBlocked) - { - continue; - } - - // Only check nodes that aren't in the closed set - if (!neighbor->mInClosedSet) - { - if (!neighbor->mInOpenSet) - { - // Not in the open set, so set parent - neighbor->mParent = current; - neighbor->h = (neighbor->GetPosition() - goal->GetPosition()).Length(); - // g(x) is the parent's g plus cost of traversing edge - neighbor->g = current->g + TileSize; - neighbor->f = neighbor->g + neighbor->h; - openSet.emplace_back(neighbor); - neighbor->mInOpenSet = true; - } - else - { - // Compute g(x) cost if current becomes the parent - float newG = current->g + TileSize; - if (newG < neighbor->g) - { - // Adopt this node - neighbor->mParent = current; - neighbor->g = newG; - // f(x) changes because g(x) changes - neighbor->f = neighbor->g + neighbor->h; - } - } - } - } - - // If open set is empty, all possible paths are exhausted - if (openSet.empty()) - { - break; - } - - // Find lowest cost node in open set - auto iter = std::min_element(openSet.begin(), openSet.end(), - [](Tile* a, Tile* b) { - return a->f < b->f; - }); - // Set to current and move from open to closed - current = *iter; - openSet.erase(iter); - current->mInOpenSet = false; - current->mInClosedSet = true; - } - while (current != goal); - - // Did we find a path? - return (current == goal) ? true : false; -} - -void Grid::UpdatePathTiles(class Tile* start) -{ - // Reset all tiles to normal (except for start/end) - for (size_t i = 0; i < NumRows; i++) - { - for (size_t j = 0; j < NumCols; j++) - { - if (!(i == 3 && j == 0) && !(i == 3 && j == 15)) - { - mTiles[i][j]->SetTileState(Tile::EDefault); - } - } - } - - Tile* t = start->mParent; - while (t != GetEndTile()) - { - t->SetTileState(Tile::EPath); - t = t->mParent; - } -} - -void Grid::BuildTower() -{ - if (mSelectedTile && !mSelectedTile->mBlocked) - { - mSelectedTile->mBlocked = true; - if (FindPath(GetEndTile(), GetStartTile())) - { - Tower* t = new Tower(GetGame()); - t->SetPosition(mSelectedTile->GetPosition()); - } - else - { - // This tower would block the path, so don't allow build - mSelectedTile->mBlocked = false; - FindPath(GetEndTile(), GetStartTile()); - } - UpdatePathTiles(GetStartTile()); - } -} - -Tile* Grid::GetStartTile() -{ - return mTiles[3][0]; -} - -Tile* Grid::GetEndTile() -{ - return mTiles[3][15]; -} - -void Grid::UpdateActor(float deltaTime) -{ - Actor::UpdateActor(deltaTime); - - // Is it time to spawn a new enemy? - mNextEnemy -= deltaTime; - if (mNextEnemy <= 0.0f) - { - new Enemy(GetGame()); - mNextEnemy += EnemyTime; - } -} diff --git a/Chapter05/Grid.h b/Chapter05/Grid.h deleted file mode 100644 index a31eef6d..00000000 --- a/Chapter05/Grid.h +++ /dev/null @@ -1,58 +0,0 @@ -// ---------------------------------------------------------------- -// From Game Programming in C++ by Sanjay Madhav -// Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// -// Released under the BSD License -// See LICENSE in root directory for full details. -// ---------------------------------------------------------------- - -#pragma once -#include "Actor.h" -#include - -class Grid : public Actor -{ -public: - Grid(class Game* game); - - // Handle a mouse click at the x/y screen locations - void ProcessClick(int x, int y); - - // Use A* to find a path - bool FindPath(class Tile* start, class Tile* goal); - - // Try to build a tower - void BuildTower(); - - // Get start/end tile - class Tile* GetStartTile(); - class Tile* GetEndTile(); - - void UpdateActor(float deltaTime) override; -private: - // Select a specific tile - void SelectTile(size_t row, size_t col); - - // Update textures for tiles on path - void UpdatePathTiles(class Tile* start); - - // Currently selected tile - class Tile* mSelectedTile; - - // 2D vector of tiles in grid - std::vector> mTiles; - - // Time until next enemy - float mNextEnemy; - - // Rows/columns in grid - const size_t NumRows = 7; - const size_t NumCols = 16; - // Start y position of top left corner - const float StartY = 192.0f; - const float StartX = -512.0f; - // Width/height of each tile - const float TileSize = 64.0f; - // Time between enemies - const float EnemyTime = 1.5f; -}; diff --git a/Chapter05/InputComponent.cpp b/Chapter05/InputComponent.cpp new file mode 100644 index 00000000..148ffc95 --- /dev/null +++ b/Chapter05/InputComponent.cpp @@ -0,0 +1,47 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "InputComponent.h" +#include "Actor.h" + +InputComponent::InputComponent(class Actor* owner) +:MoveComponent(owner) +,mForwardKey(0) +,mBackKey(0) +,mClockwiseKey(0) +,mCounterClockwiseKey(0) +{ + +} + +void InputComponent::ProcessInput(const uint8_t* keyState) +{ + // Calculate forward speed for MoveComponent + float forwardSpeed = 0.0f; + if (keyState[mForwardKey]) + { + forwardSpeed += mMaxForwardSpeed; + } + if (keyState[mBackKey]) + { + forwardSpeed -= mMaxForwardSpeed; + } + SetForwardSpeed(forwardSpeed); + + // Calculate angular speed for MoveComponent + float angularSpeed = 0.0f; + if (keyState[mClockwiseKey]) + { + angularSpeed += mMaxAngularSpeed; + } + if (keyState[mCounterClockwiseKey]) + { + angularSpeed -= mMaxAngularSpeed; + } + SetAngularSpeed(angularSpeed); +} diff --git a/Chapter05/InputComponent.h b/Chapter05/InputComponent.h new file mode 100644 index 00000000..57b32ccb --- /dev/null +++ b/Chapter05/InputComponent.h @@ -0,0 +1,45 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "MoveComponent.h" +#include + +class InputComponent : public MoveComponent +{ +public: + // Lower update order to update first + InputComponent(class Actor* owner); + + void ProcessInput(const uint8_t* keyState) override; + + // Getters/setters for private variables + float GetMaxForward() const { return mMaxForwardSpeed; } + float GetMaxAngular() const { return mMaxAngularSpeed; } + int GetForwardKey() const { return mForwardKey; } + int GetBackKey() const { return mBackKey; } + int GetClockwiseKey() const { return mClockwiseKey; } + int GetCounterClockwiseKey() const { return mCounterClockwiseKey; } + + void SetMaxForwardSpeed(float speed) { mMaxForwardSpeed = speed; } + void SetMaxAngularSpeed(float speed) { mMaxAngularSpeed = speed; } + void SetForwardKey(int key) { mForwardKey = key; } + void SetBackKey(int key) { mBackKey = key; } + void SetClockwiseKey(int key) { mClockwiseKey = key; } + void SetCounterClockwiseKey(int key) { mCounterClockwiseKey = key; } +private: + // The maximum forward/angular speeds + float mMaxForwardSpeed; + float mMaxAngularSpeed; + // Keys for forward/back movement + int mForwardKey; + int mBackKey; + // Keys for angular movement + int mClockwiseKey; + int mCounterClockwiseKey; +}; diff --git a/Chapter05/Laser.cpp b/Chapter05/Laser.cpp new file mode 100644 index 00000000..a03c1981 --- /dev/null +++ b/Chapter05/Laser.cpp @@ -0,0 +1,56 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "Laser.h" +#include "SpriteComponent.h" +#include "MoveComponent.h" +#include "Game.h" +#include "CircleComponent.h" +#include "Asteroid.h" + +Laser::Laser(Game* game) + :Actor(game) + ,mDeathTimer(1.0f) +{ + // Create a sprite component + SpriteComponent* sc = new SpriteComponent(this); + sc->SetTexture(game->GetTexture("Assets/Laser.png")); + + // Create a move component, and set a forward speed + MoveComponent* mc = new MoveComponent(this); + mc->SetForwardSpeed(800.0f); + + // Create a circle component (for collision) + mCircle = new CircleComponent(this); + mCircle->SetRadius(11.0f); +} + +void Laser::UpdateActor(float deltaTime) +{ + // If we run out of time, laser is dead + mDeathTimer -= deltaTime; + if (mDeathTimer <= 0.0f) + { + SetState(EDead); + } + else + { + // Do we intersect with an asteroid? + for (auto ast : GetGame()->GetAsteroids()) + { + if (Intersect(*mCircle, *(ast->GetCircle()))) + { + // The first asteroid we intersect with, + // set ourselves and the asteroid to dead + SetState(EDead); + ast->SetState(EDead); + break; + } + } + } +} diff --git a/Chapter05/Bullet.h b/Chapter05/Laser.h similarity index 86% rename from Chapter05/Bullet.h rename to Chapter05/Laser.h index 2c1690c4..f1afd638 100644 --- a/Chapter05/Bullet.h +++ b/Chapter05/Laser.h @@ -8,13 +8,13 @@ #pragma once #include "Actor.h" - -class Bullet : public Actor +class Laser : public Actor { public: - Bullet(class Game* game); + Laser(class Game* game); + void UpdateActor(float deltaTime) override; private: class CircleComponent* mCircle; - float mLiveTime; + float mDeathTimer; }; diff --git a/Chapter05/MoveComponent.cpp b/Chapter05/MoveComponent.cpp index cdf1fdf9..c1a5d5b2 100644 --- a/Chapter05/MoveComponent.cpp +++ b/Chapter05/MoveComponent.cpp @@ -29,7 +29,13 @@ void MoveComponent::Update(float deltaTime) if (!Math::NearZero(mForwardSpeed)) { Vector2 pos = mOwner->GetPosition(); - pos += mOwner->GetForward() * mForwardSpeed * deltaTime; + pos += mOwner->GetForward() * mForwardSpeed * deltaTime; + + // Screen wrapping (for asteroids) + if (pos.x < -512.0f) { pos.x = 510.0f; } + else if (pos.x > 512.0f) { pos.x = -510.0f; } + if (pos.y < -384.0f) { pos.y = 382.0f; } + else if (pos.y > 384.0f) { pos.y = -382.0f; } mOwner->SetPosition(pos); } } diff --git a/Chapter05/NavComponent.cpp b/Chapter05/NavComponent.cpp deleted file mode 100644 index be1c8211..00000000 --- a/Chapter05/NavComponent.cpp +++ /dev/null @@ -1,49 +0,0 @@ -// ---------------------------------------------------------------- -// From Game Programming in C++ by Sanjay Madhav -// Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// -// Released under the BSD License -// See LICENSE in root directory for full details. -// ---------------------------------------------------------------- - -#include "NavComponent.h" -#include "Tile.h" - -NavComponent::NavComponent(class Actor* owner, int updateOrder) -:MoveComponent(owner, updateOrder) -,mNextNode(nullptr) -{ - -} - -void NavComponent::Update(float deltaTime) -{ - if (mNextNode) - { - // If we're at the next node, advance along path - Vector2 diff = mOwner->GetPosition() - mNextNode->GetPosition(); - if (Math::NearZero(diff.Length(), 2.0f)) - { - mNextNode = mNextNode->GetParent(); - TurnTo(mNextNode->GetPosition()); - } - } - - MoveComponent::Update(deltaTime); -} - -void NavComponent::StartPath(const Tile* start) -{ - mNextNode = start->GetParent(); - TurnTo(mNextNode->GetPosition()); -} - -void NavComponent::TurnTo(const Vector2& pos) -{ - // Vector from me to pos - Vector2 dir = pos - mOwner->GetPosition(); - // New angle is just atan2 of this dir vector - // (Negate y because +y is down on screen) - float angle = Math::Atan2(dir.y, dir.x); - mOwner->SetRotation(angle); -} diff --git a/Chapter05/NavComponent.h b/Chapter05/NavComponent.h deleted file mode 100644 index b79c721f..00000000 --- a/Chapter05/NavComponent.h +++ /dev/null @@ -1,23 +0,0 @@ -// ---------------------------------------------------------------- -// From Game Programming in C++ by Sanjay Madhav -// Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// -// Released under the BSD License -// See LICENSE in root directory for full details. -// ---------------------------------------------------------------- - -#pragma once -#include "MoveComponent.h" -#include "Math.h" - -class NavComponent : public MoveComponent -{ -public: - // Lower update order to update first - NavComponent(class Actor* owner, int updateOrder = 10); - void Update(float deltaTime) override; - void StartPath(const class Tile* start); - void TurnTo(const Vector2& pos); -private: - const class Tile* mNextNode; -}; diff --git a/Chapter05/Random.cpp b/Chapter05/Random.cpp new file mode 100644 index 00000000..05a3a32a --- /dev/null +++ b/Chapter05/Random.cpp @@ -0,0 +1,51 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "Random.h" + +void Random::Init() +{ + std::random_device rd; + Random::Seed(rd()); +} + +void Random::Seed(unsigned int seed) +{ + sGenerator.seed(seed); +} + +float Random::GetFloat() +{ + return GetFloatRange(0.0f, 1.0f); +} + +float Random::GetFloatRange(float min, float max) +{ + std::uniform_real_distribution dist(min, max); + return dist(sGenerator); +} + +int Random::GetIntRange(int min, int max) +{ + std::uniform_int_distribution dist(min, max); + return dist(sGenerator); +} + +Vector2 Random::GetVector(const Vector2& min, const Vector2& max) +{ + Vector2 r = Vector2(GetFloat(), GetFloat()); + return min + (max - min) * r; +} + +Vector3 Random::GetVector(const Vector3& min, const Vector3& max) +{ + Vector3 r = Vector3(GetFloat(), GetFloat(), GetFloat()); + return min + (max - min) * r; +} + +std::mt19937 Random::sGenerator; diff --git a/Chapter05/Random.h b/Chapter05/Random.h new file mode 100644 index 00000000..3ae92fe5 --- /dev/null +++ b/Chapter05/Random.h @@ -0,0 +1,36 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once +#include +#include "Math.h" + +class Random +{ +public: + static void Init(); + + // Seed the generator with the specified int + // NOTE: You should generally not need to manually use this + static void Seed(unsigned int seed); + + // Get a float between 0.0f and 1.0f + static float GetFloat(); + + // Get a float from the specified range + static float GetFloatRange(float min, float max); + + // Get an int from the specified range + static int GetIntRange(int min, int max); + + // Get a random vector given the min/max bounds + static Vector2 GetVector(const Vector2& min, const Vector2& max); + static Vector3 GetVector(const Vector3& min, const Vector3& max); +private: + static std::mt19937 sGenerator; +}; diff --git a/Chapter05/Shader.cpp b/Chapter05/Shader.cpp index 04473884..e32c07a2 100644 --- a/Chapter05/Shader.cpp +++ b/Chapter05/Shader.cpp @@ -77,14 +77,14 @@ void Shader::SetMatrixUniform(const char* name, const Matrix4& matrix) } bool Shader::CompileShader(const std::string& fileName, - GLenum shaderType, - GLuint& outShader) + GLenum shaderType, + GLuint& outShader) { // Open file std::ifstream shaderFile(fileName); if (shaderFile.is_open()) { - // Read all of the text into a string + // Read all the text into a string std::stringstream sstream; sstream << shaderFile.rdbuf(); std::string contents = sstream.str(); diff --git a/Chapter05/Shader.h b/Chapter05/Shader.h index aefe994f..2b0161c0 100644 --- a/Chapter05/Shader.h +++ b/Chapter05/Shader.h @@ -16,8 +16,7 @@ class Shader public: Shader(); ~Shader(); - // Load shader of the specified name, excluding - // the .frag/.vert extension + // Load the vertex/fragment shaders with the given names bool Load(const std::string& vertName, const std::string& fragName); void Unload(); // Set this as the active shader program diff --git a/Chapter05/Shaders/Basic.frag b/Chapter05/Shaders/Basic.frag new file mode 100644 index 00000000..af9a33e5 --- /dev/null +++ b/Chapter05/Shaders/Basic.frag @@ -0,0 +1,20 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +// Request GLSL 3.3 +#version 330 + +// This corresponds to the output color +// to the color buffer +out vec4 outColor; + +void main() +{ + // RGBA of 100% blue, 100% opaque + outColor = vec4(0.0, 0.0, 1.0, 1.0); +} diff --git a/Chapter05/Shaders/Basic.vert b/Chapter05/Shaders/Basic.vert new file mode 100644 index 00000000..345b3c05 --- /dev/null +++ b/Chapter05/Shaders/Basic.vert @@ -0,0 +1,23 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +// Request GLSL 3.3 +#version 330 + +// This should correspond to the data stored +// for each vertex in the vertex buffer. +// For now, just a position. +in vec3 inPosition; + +void main() +{ + // The vertex shader needs to output a 4D + // coordinate. + // For now set the 4th coordinate to 1.0 + gl_Position = vec4(inPosition, 1.0); +} diff --git a/Chapter05/Shaders/Sprite.frag b/Chapter05/Shaders/Sprite.frag index b1bd6105..481a669a 100644 --- a/Chapter05/Shaders/Sprite.frag +++ b/Chapter05/Shaders/Sprite.frag @@ -1,9 +1,9 @@ // ---------------------------------------------------------------- // From Game Programming in C++ by Sanjay Madhav // Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// +// // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- // Request GLSL 3.3 diff --git a/Chapter05/Shaders/Sprite.vert b/Chapter05/Shaders/Sprite.vert index e4fe75b0..96f512d7 100644 --- a/Chapter05/Shaders/Sprite.vert +++ b/Chapter05/Shaders/Sprite.vert @@ -1,9 +1,9 @@ // ---------------------------------------------------------------- // From Game Programming in C++ by Sanjay Madhav // Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// +// // Released under the BSD License -// See LICENSE.txt for full details. +// See LICENSE in root directory for full details. // ---------------------------------------------------------------- // Request GLSL 3.3 diff --git a/Chapter05/Ship.cpp b/Chapter05/Ship.cpp new file mode 100644 index 00000000..e5b236db --- /dev/null +++ b/Chapter05/Ship.cpp @@ -0,0 +1,50 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "Ship.h" +#include "SpriteComponent.h" +#include "InputComponent.h" +#include "Game.h" +#include "Laser.h" + +Ship::Ship(Game* game) + :Actor(game) + ,mLaserCooldown(0.0f) +{ + // Create a sprite component + SpriteComponent* sc = new SpriteComponent(this, 150); + sc->SetTexture(game->GetTexture("Assets/Ship.png")); + + // Create an input component and set keys/speed + InputComponent* ic = new InputComponent(this); + ic->SetForwardKey(SDL_SCANCODE_W); + ic->SetBackKey(SDL_SCANCODE_S); + ic->SetClockwiseKey(SDL_SCANCODE_A); + ic->SetCounterClockwiseKey(SDL_SCANCODE_D); + ic->SetMaxForwardSpeed(300.0f); + ic->SetMaxAngularSpeed(Math::TwoPi); +} + +void Ship::UpdateActor(float deltaTime) +{ + mLaserCooldown -= deltaTime; +} + +void Ship::ActorInput(const uint8_t* keyState) +{ + if (keyState[SDL_SCANCODE_SPACE] && mLaserCooldown <= 0.0f) + { + // Create a laser and set its position/rotation to mine + Laser* laser = new Laser(GetGame()); + laser->SetPosition(GetPosition()); + laser->SetRotation(GetRotation()); + + // Reset laser cooldown (half second) + mLaserCooldown = 0.5f; + } +} diff --git a/Chapter05/Tower.h b/Chapter05/Ship.h similarity index 71% rename from Chapter05/Tower.h rename to Chapter05/Ship.h index bfbf12ff..808639ff 100644 --- a/Chapter05/Tower.h +++ b/Chapter05/Ship.h @@ -8,15 +8,13 @@ #pragma once #include "Actor.h" - -class Tower : public Actor +class Ship : public Actor { public: - Tower(class Game* game); + Ship(class Game* game); + void UpdateActor(float deltaTime) override; + void ActorInput(const uint8_t* keyState) override; private: - class MoveComponent* mMove; - float mNextAttack; - const float AttackTime = 2.5f; - const float AttackRange = 100.0f; -}; + float mLaserCooldown; +}; \ No newline at end of file diff --git a/Chapter05/Tile.cpp b/Chapter05/Tile.cpp deleted file mode 100644 index 90e5c781..00000000 --- a/Chapter05/Tile.cpp +++ /dev/null @@ -1,66 +0,0 @@ -// ---------------------------------------------------------------- -// From Game Programming in C++ by Sanjay Madhav -// Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// -// Released under the BSD License -// See LICENSE in root directory for full details. -// ---------------------------------------------------------------- - -#include "Tile.h" -#include "SpriteComponent.h" -#include "Game.h" - -Tile::Tile(class Game* game) -:Actor(game) -,mParent(nullptr) -,f(0.0f) -,g(0.0f) -,h(0.0f) -,mBlocked(false) -,mSprite(nullptr) -,mTileState(EDefault) -,mSelected(false) -{ - mSprite = new SpriteComponent(this); - UpdateTexture(); -} - -void Tile::SetTileState(TileState state) -{ - mTileState = state; - UpdateTexture(); -} - -void Tile::ToggleSelect() -{ - mSelected = !mSelected; - UpdateTexture(); -} - -void Tile::UpdateTexture() -{ - std::string text; - switch (mTileState) - { - case EStart: - text = "Assets/TileTan.png"; - break; - case EBase: - text = "Assets/TileGreen.png"; - break; - case EPath: - if (mSelected) - text = "Assets/TileGreySelected.png"; - else - text = "Assets/TileGrey.png"; - break; - case EDefault: - default: - if (mSelected) - text = "Assets/TileBrownSelected.png"; - else - text = "Assets/TileBrown.png"; - break; - } - mSprite->SetTexture(GetGame()->GetTexture(text)); -} diff --git a/Chapter05/Tile.h b/Chapter05/Tile.h deleted file mode 100644 index f3e90d12..00000000 --- a/Chapter05/Tile.h +++ /dev/null @@ -1,46 +0,0 @@ -// ---------------------------------------------------------------- -// From Game Programming in C++ by Sanjay Madhav -// Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// -// Released under the BSD License -// See LICENSE in root directory for full details. -// ---------------------------------------------------------------- - -#pragma once -#include "Actor.h" -#include - -class Tile : public Actor -{ -public: - friend class Grid; - enum TileState - { - EDefault, - EPath, - EStart, - EBase - }; - - Tile(class Game* game); - - void SetTileState(TileState state); - TileState GetTileState() const { return mTileState; } - void ToggleSelect(); - const Tile* GetParent() const { return mParent; } -private: - // For pathfinding - std::vector mAdjacent; - Tile* mParent; - float f; - float g; - float h; - bool mInOpenSet; - bool mInClosedSet; - bool mBlocked; - - void UpdateTexture(); - class SpriteComponent* mSprite; - TileState mTileState; - bool mSelected; -}; diff --git a/Chapter05/Tower.cpp b/Chapter05/Tower.cpp deleted file mode 100644 index cb8368b9..00000000 --- a/Chapter05/Tower.cpp +++ /dev/null @@ -1,53 +0,0 @@ -// ---------------------------------------------------------------- -// From Game Programming in C++ by Sanjay Madhav -// Copyright (C) 2017 Sanjay Madhav. All rights reserved. -// -// Released under the BSD License -// See LICENSE in root directory for full details. -// ---------------------------------------------------------------- - -#include "Tower.h" -#include "SpriteComponent.h" -#include "MoveComponent.h" -#include "Game.h" -#include "Enemy.h" -#include "Bullet.h" - -Tower::Tower(class Game* game) -:Actor(game) -{ - SpriteComponent* sc = new SpriteComponent(this, 200); - sc->SetTexture(game->GetTexture("Assets/Tower.png")); - - mMove = new MoveComponent(this); - //mMove->SetAngularSpeed(Math::Pi); - - mNextAttack = AttackTime; -} - -void Tower::UpdateActor(float deltaTime) -{ - Actor::UpdateActor(deltaTime); - - mNextAttack -= deltaTime; - if (mNextAttack <= 0.0f) - { - Enemy* e = GetGame()->GetNearestEnemy(GetPosition()); - if (e != nullptr) - { - // Vector from me to enemy - Vector2 dir = e->GetPosition() - GetPosition(); - float dist = dir.Length(); - if (dist < AttackRange) - { - // Rotate to face enemy - SetRotation(Math::Atan2(dir.y, dir.x)); - // Spawn bullet at tower position facing enemy - Bullet* b = new Bullet(GetGame()); - b->SetPosition(GetPosition()); - b->SetRotation(GetRotation()); - } - } - mNextAttack += AttackTime; - } -} diff --git a/Chapter05/VertexArray.h b/Chapter05/VertexArray.h index 8f3e6478..9f2c3e9b 100644 --- a/Chapter05/VertexArray.h +++ b/Chapter05/VertexArray.h @@ -16,6 +16,9 @@ class VertexArray // Activate this vertex array (so we can draw it) void SetActive(); + + unsigned int GetNumIndices() const { return mNumIndices; } + unsigned int GetNumVerts() const { return mNumVerts; } private: // How many vertices in the vertex buffer? unsigned int mNumVerts; From ecafeb593bbe652f7206411f2b05bf878ea278df Mon Sep 17 00:00:00 2001 From: Sanjay Madhav Date: Fri, 24 Nov 2017 23:39:26 -0800 Subject: [PATCH 26/40] Chapter 5 revisions complete? --- Chapter05/Game.cpp | 5 ++--- Chapter05/Game.vcxproj | 1 + Chapter05/Game.vcxproj.filters | 3 +++ Chapter05/Shaders/Sprite.frag | 2 +- Chapter05/Shaders/Sprite.vert | 4 ++-- Chapter05/Shaders/Transform.vert | 23 +++++++++++++++++++++++ Chapter05/Texture.cpp | 2 +- Chapter05/Texture.h | 2 ++ 8 files changed, 35 insertions(+), 7 deletions(-) create mode 100644 Chapter05/Shaders/Transform.vert diff --git a/Chapter05/Game.cpp b/Chapter05/Game.cpp index d22c41c0..e18e90a3 100644 --- a/Chapter05/Game.cpp +++ b/Chapter05/Game.cpp @@ -178,7 +178,7 @@ void Game::UpdateGame() void Game::GenerateOutput() { - // Set the clear color to dark green + // Set the clear color to grey glClearColor(0.86f, 0.86f, 0.86f, 1.0f); // Clear the color buffer glClear(GL_COLOR_BUFFER_BIT); @@ -186,8 +186,7 @@ void Game::GenerateOutput() // Draw all sprite components // Enable alpha blending on the color buffer glEnable(GL_BLEND); - glBlendEquationSeparate(GL_FUNC_ADD, GL_FUNC_ADD); - glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // Set shader/vao as active mSpriteShader->SetActive(); diff --git a/Chapter05/Game.vcxproj b/Chapter05/Game.vcxproj index b6cb5fee..de734c91 100644 --- a/Chapter05/Game.vcxproj +++ b/Chapter05/Game.vcxproj @@ -50,6 +50,7 @@ + {BC508D87-495F-4554-932D-DD68388B63CC} diff --git a/Chapter05/Game.vcxproj.filters b/Chapter05/Game.vcxproj.filters index 9e92f055..aca6a6bb 100644 --- a/Chapter05/Game.vcxproj.filters +++ b/Chapter05/Game.vcxproj.filters @@ -119,5 +119,8 @@ Shaders + + Shaders + \ No newline at end of file diff --git a/Chapter05/Shaders/Sprite.frag b/Chapter05/Shaders/Sprite.frag index 481a669a..f48caf3d 100644 --- a/Chapter05/Shaders/Sprite.frag +++ b/Chapter05/Shaders/Sprite.frag @@ -21,5 +21,5 @@ uniform sampler2D uTexture; void main() { // Sample color from texture - outColor = texture(uTexture, fragTexCoord); + outColor = texture(uTexture, fragTexCoord); } diff --git a/Chapter05/Shaders/Sprite.vert b/Chapter05/Shaders/Sprite.vert index 96f512d7..ea0f396f 100644 --- a/Chapter05/Shaders/Sprite.vert +++ b/Chapter05/Shaders/Sprite.vert @@ -17,14 +17,14 @@ uniform mat4 uViewProj; layout(location = 0) in vec3 inPosition; layout(location = 1) in vec2 inTexCoord; -// Any vertex outputs (other than position) +// Add texture coordinate as output out vec2 fragTexCoord; void main() { // Convert position to homogeneous coordinates vec4 pos = vec4(inPosition, 1.0); - // Transform to position world space, then clip space + // Transform position to world space, then clip space gl_Position = pos * uWorldTransform * uViewProj; // Transform diff --git a/Chapter05/Shaders/Transform.vert b/Chapter05/Shaders/Transform.vert new file mode 100644 index 00000000..fc59d32e --- /dev/null +++ b/Chapter05/Shaders/Transform.vert @@ -0,0 +1,23 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +// Request GLSL 3.3 +#version 330 + +// Uniforms for world transform and view-proj +uniform mat4 uWorldTransform; +uniform mat4 uViewProj; + +// Vertex attributes +in vec3 inPosition; + +void main() +{ + vec4 pos = vec4(inPosition, 1.0); + gl_Position = pos * uWorldTransform * uViewProj; +} diff --git a/Chapter05/Texture.cpp b/Chapter05/Texture.cpp index ddde35f0..7d0dbd3e 100644 --- a/Chapter05/Texture.cpp +++ b/Chapter05/Texture.cpp @@ -51,7 +51,7 @@ bool Texture::Load(const std::string& fileName) SOIL_free_image_data(image); - // Enable linear filtering + // Enable bilinear filtering glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); diff --git a/Chapter05/Texture.h b/Chapter05/Texture.h index 6c8892fd..ed12b0dc 100644 --- a/Chapter05/Texture.h +++ b/Chapter05/Texture.h @@ -22,7 +22,9 @@ class Texture int GetWidth() const { return mWidth; } int GetHeight() const { return mHeight; } private: + // OpenGL ID of this texture unsigned int mTextureID; + // Width/height of the texture int mWidth; int mHeight; }; From 0b50a0802ac67abfe2220a0004dfb6707b109292 Mon Sep 17 00:00:00 2001 From: Sanjay Madhav Date: Tue, 28 Nov 2017 21:46:14 -0800 Subject: [PATCH 27/40] Chapter 8 initial add --- .../Exercise3.3/Assets/MapLayer1.csv | 24 - .../Exercise3.3/Assets/MapLayer2.csv | 24 - .../Exercise3.3/Assets/MapLayer3.csv | 24 - .../Exercises/Exercise3.3/Assets/Tiles.png | Bin 28383 -> 0 bytes Chapter08/Actor.cpp | 124 ++ Chapter08/Actor.h | 74 ++ Chapter08/Assets/Asteroid.png | Bin 0 -> 5577 bytes Chapter08/Assets/Laser.png | Bin 0 -> 3345 bytes Chapter08/Assets/Ship.png | Bin 0 -> 8692 bytes Chapter08/Assets/ShipWithThrust.png | Bin 0 -> 8953 bytes Chapter08/Asteroid.cpp | 46 + Chapter08/Asteroid.h | 20 + Chapter08/Chapter08-windows.sln | 25 + .../Chapter6-mac.xcodeproj/project.pbxproj | 402 +++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/xcschemes/Game-mac.xcscheme | 92 ++ Chapter08/CircleComponent.cpp | 40 + Chapter08/CircleComponent.h | 26 + Chapter08/Component.cpp | 27 + Chapter08/Component.h | 33 + Chapter08/Game.cpp | 375 ++++++ Chapter08/Game.h | 71 ++ Chapter08/Game.vcxproj | 146 +++ Chapter08/Game.vcxproj.filters | 132 +++ Chapter08/InputComponent.cpp | 47 + Chapter08/InputComponent.h | 45 + Chapter08/InputSystem.cpp | 61 + Chapter08/InputSystem.h | 54 + Chapter08/Laser.cpp | 56 + Chapter08/Laser.h | 20 + Chapter08/Main.cpp | 21 + Chapter08/Math.cpp | 240 ++++ Chapter08/Math.h | 1033 +++++++++++++++++ Chapter08/MoveComponent.cpp | 41 + Chapter08/MoveComponent.h | 26 + Chapter08/Random.cpp | 51 + Chapter08/Random.h | 36 + Chapter08/Shader.cpp | 148 +++ Chapter08/Shader.h | 41 + Chapter08/Shaders/Basic.frag | 20 + Chapter08/Shaders/Basic.vert | 23 + Chapter08/Shaders/Sprite.frag | 25 + Chapter08/Shaders/Sprite.vert | 33 + Chapter08/Shaders/Transform.vert | 23 + Chapter08/Ship.cpp | 50 + Chapter08/Ship.h | 20 + Chapter08/SpriteComponent.cpp | 60 + Chapter08/SpriteComponent.h | 30 + Chapter08/Texture.cpp | 69 ++ Chapter08/Texture.h | 30 + Chapter08/VertexArray.cpp | 51 + Chapter08/VertexArray.h | 33 + 52 files changed, 4027 insertions(+), 72 deletions(-) delete mode 100644 Chapter05/Exercises/Exercise3.3/Assets/MapLayer1.csv delete mode 100644 Chapter05/Exercises/Exercise3.3/Assets/MapLayer2.csv delete mode 100644 Chapter05/Exercises/Exercise3.3/Assets/MapLayer3.csv delete mode 100644 Chapter05/Exercises/Exercise3.3/Assets/Tiles.png create mode 100644 Chapter08/Actor.cpp create mode 100644 Chapter08/Actor.h create mode 100644 Chapter08/Assets/Asteroid.png create mode 100644 Chapter08/Assets/Laser.png create mode 100644 Chapter08/Assets/Ship.png create mode 100644 Chapter08/Assets/ShipWithThrust.png create mode 100644 Chapter08/Asteroid.cpp create mode 100644 Chapter08/Asteroid.h create mode 100644 Chapter08/Chapter08-windows.sln create mode 100644 Chapter08/Chapter6-mac.xcodeproj/project.pbxproj create mode 100644 Chapter08/Chapter6-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 Chapter08/Chapter6-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme create mode 100644 Chapter08/CircleComponent.cpp create mode 100644 Chapter08/CircleComponent.h create mode 100644 Chapter08/Component.cpp create mode 100644 Chapter08/Component.h create mode 100644 Chapter08/Game.cpp create mode 100644 Chapter08/Game.h create mode 100644 Chapter08/Game.vcxproj create mode 100644 Chapter08/Game.vcxproj.filters create mode 100644 Chapter08/InputComponent.cpp create mode 100644 Chapter08/InputComponent.h create mode 100644 Chapter08/InputSystem.cpp create mode 100644 Chapter08/InputSystem.h create mode 100644 Chapter08/Laser.cpp create mode 100644 Chapter08/Laser.h create mode 100644 Chapter08/Main.cpp create mode 100644 Chapter08/Math.cpp create mode 100644 Chapter08/Math.h create mode 100644 Chapter08/MoveComponent.cpp create mode 100644 Chapter08/MoveComponent.h create mode 100644 Chapter08/Random.cpp create mode 100644 Chapter08/Random.h create mode 100644 Chapter08/Shader.cpp create mode 100644 Chapter08/Shader.h create mode 100644 Chapter08/Shaders/Basic.frag create mode 100644 Chapter08/Shaders/Basic.vert create mode 100644 Chapter08/Shaders/Sprite.frag create mode 100644 Chapter08/Shaders/Sprite.vert create mode 100644 Chapter08/Shaders/Transform.vert create mode 100644 Chapter08/Ship.cpp create mode 100644 Chapter08/Ship.h create mode 100644 Chapter08/SpriteComponent.cpp create mode 100644 Chapter08/SpriteComponent.h create mode 100644 Chapter08/Texture.cpp create mode 100644 Chapter08/Texture.h create mode 100644 Chapter08/VertexArray.cpp create mode 100644 Chapter08/VertexArray.h diff --git a/Chapter05/Exercises/Exercise3.3/Assets/MapLayer1.csv b/Chapter05/Exercises/Exercise3.3/Assets/MapLayer1.csv deleted file mode 100644 index 619c90f2..00000000 --- a/Chapter05/Exercises/Exercise3.3/Assets/MapLayer1.csv +++ /dev/null @@ -1,24 +0,0 @@ -27,42,43,44,42,43,44,42,43,44,42,43,44,42,43,44,42,43,44,42,43,44,42,43,44,42,43,44,42,43,44,42 -21,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -29,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -37,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -21,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -29,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,52,53,54,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -27,11,12,13,14,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -27,43,44,45,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -29,-1,-1,-1,-1,-1,48,49,52,53,54,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -37,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,52,53,54,-1,-1,-1,48,49,50,51,52,50 -21,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -27,10,11,12,11,12,10,11,12,10,11,12,10,11,12,13,14,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -27,43,44,42,43,44,42,43,44,42,43,44,42,43,44,45,-1,-1,-1,-1,-1,-1,48,49,53,54,-1,-1,-1,-1,-1,-1 -21,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -29,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,56,57,58,59,57 -37,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,9,10,11,12,10,11,12,11,13,65,66,67,65 -21,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,41,42,42,43,44,42,43,44,45,-1,-1,-1,-1 -27,10,11,12,13,14,-1,-1,-1,-1,-1,-1,-1,48,49,53,54,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -20,26,27,28,18,11,12,13,14,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -28,34,35,36,34,35,36,27,11,12,13,14,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -36,42,43,44,44,42,43,44,42,43,44,52,50,51,52,50,51,52,50,51,52,53,54,-1,-1,-1,-1,-1,-1,-1,-1,-1 -37,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -21,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,52,53,54,-1,8,9,10 -29,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,25,26 diff --git a/Chapter05/Exercises/Exercise3.3/Assets/MapLayer2.csv b/Chapter05/Exercises/Exercise3.3/Assets/MapLayer2.csv deleted file mode 100644 index 49139b94..00000000 --- a/Chapter05/Exercises/Exercise3.3/Assets/MapLayer2.csv +++ /dev/null @@ -1,24 +0,0 @@ -70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70 -70,70,70,70,70,70,70,70,70,70,70,61,62,63,70,70,70,70,70,70,70,70,70,61,63,61,62,62,63,70,61,62 -70,70,70,70,70,70,70,70,70,70,70,69,0,71,70,70,70,70,70,70,61,62,63,69,71,69,0,0,71,70,69,0 -70,70,70,70,70,70,70,70,70,70,70,69,0,75,62,63,70,70,70,70,69,0,71,69,71,69,0,0,71,70,69,0 -70,70,70,70,70,61,62,62,62,62,62,76,0,0,0,71,70,70,70,61,76,0,71,69,75,76,0,0,71,70,69,0 -70,70,70,70,70,69,0,0,0,0,0,0,0,0,0,71,70,70,70,69,0,0,71,69,0,0,0,0,71,70,69,0 -70,70,70,70,70,69,0,0,0,0,0,0,0,0,0,75,63,61,63,69,0,0,71,69,0,0,0,0,71,70,69,0 -70,70,70,70,70,69,0,0,0,0,0,0,0,0,0,0,75,76,71,69,0,0,71,69,0,0,0,0,71,70,69,0 -70,70,70,61,62,76,0,0,0,0,0,0,0,0,0,0,0,0,71,69,0,0,71,69,0,0,0,0,71,70,69,0 -70,70,61,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,71,69,0,0,71,69,0,0,0,0,71,70,69,0 -70,70,69,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,71,69,0,0,71,69,0,0,0,0,71,70,69,0 -70,70,69,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,71,69,0,0,71,69,0,0,0,0,71,70,69,0 -70,70,69,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,71,69,0,0,71,69,0,0,0,0,71,70,69,0 -70,70,69,0,0,0,0,0,0,0,0,0,0,0,0,0,0,73,79,69,0,0,71,69,0,0,0,0,71,70,69,0 -70,70,77,78,78,74,0,0,0,0,0,0,0,0,0,0,0,71,70,77,78,78,79,69,0,0,0,0,71,70,77,78 -70,70,70,70,70,77,78,78,78,74,0,0,0,0,73,78,78,79,70,70,70,70,70,69,0,0,0,0,71,70,70,70 -70,70,70,70,70,70,70,70,70,69,73,78,74,0,71,70,70,70,70,70,70,70,70,77,78,78,78,78,79,70,70,70 -70,70,70,70,70,70,70,70,70,77,79,70,77,78,79,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70 -70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70 -70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70 -70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70 -70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70 -70,70,70,70,70,70,70,70,70,70,70,70,70,70,61,63,61,62,62,63,61,63,70,70,70,70,70,70,70,70,70,70 -70,70,70,70,70,70,70,70,70,70,70,70,70,61,76,71,69,0,0,75,76,71,70,70,70,70,70,70,70,70,70,70 diff --git a/Chapter05/Exercises/Exercise3.3/Assets/MapLayer3.csv b/Chapter05/Exercises/Exercise3.3/Assets/MapLayer3.csv deleted file mode 100644 index ed9cb2cf..00000000 --- a/Chapter05/Exercises/Exercise3.3/Assets/MapLayer3.csv +++ /dev/null @@ -1,24 +0,0 @@ -96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97 -104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105 -112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113 -96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97 -104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105 -112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113 -96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97 -104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105 -112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113 -96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97 -104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105 -112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113 -96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97 -104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105 -112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113 -96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97 -104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105 -112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113 -96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97 -104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105 -112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113 -96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97,98,96,97 -104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105,106,104,105 -112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113,114,112,113 diff --git a/Chapter05/Exercises/Exercise3.3/Assets/Tiles.png b/Chapter05/Exercises/Exercise3.3/Assets/Tiles.png deleted file mode 100644 index 58409387e3e117a265371caeae590692e7ec0eb6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28383 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 diff --git a/Chapter08/Actor.cpp b/Chapter08/Actor.cpp new file mode 100644 index 00000000..738d508f --- /dev/null +++ b/Chapter08/Actor.cpp @@ -0,0 +1,124 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "Actor.h" +#include "Game.h" +#include "Component.h" +#include + +Actor::Actor(Game* game) + :mState(EActive) + ,mPosition(Vector2::Zero) + ,mScale(1.0f) + ,mRotation(0.0f) + ,mGame(game) + ,mRecomputeWorldTransform(true) +{ + mGame->AddActor(this); +} + +Actor::~Actor() +{ + mGame->RemoveActor(this); + // Need to delete components + // Because ~Component calls RemoveComponent, need a different style loop + while (!mComponents.empty()) + { + delete mComponents.back(); + } +} + +void Actor::Update(float deltaTime) +{ + if (mState == EActive) + { + ComputeWorldTransform(); + + UpdateComponents(deltaTime); + UpdateActor(deltaTime); + + ComputeWorldTransform(); + } +} + +void Actor::UpdateComponents(float deltaTime) +{ + for (auto comp : mComponents) + { + comp->Update(deltaTime); + } +} + +void Actor::UpdateActor(float deltaTime) +{ +} + +void Actor::ProcessInput(const uint8_t* keyState) +{ + if (mState == EActive) + { + // First process input for components + for (auto comp : mComponents) + { + comp->ProcessInput(keyState); + } + + ActorInput(keyState); + } +} + +void Actor::ActorInput(const uint8_t* keyState) +{ +} + +void Actor::ComputeWorldTransform() +{ + if (mRecomputeWorldTransform) + { + mRecomputeWorldTransform = false; + // Scale, then rotate, then translate + mWorldTransform = Matrix4::CreateScale(mScale); + mWorldTransform *= Matrix4::CreateRotationZ(mRotation); + mWorldTransform *= Matrix4::CreateTranslation(Vector3(mPosition.x, mPosition.y, 0.0f)); + + // Inform components world transform updated + for (auto comp : mComponents) + { + comp->OnUpdateWorldTransform(); + } + } +} + +void Actor::AddComponent(Component* component) +{ + // Find the insertion point in the sorted vector + // (The first element with a order higher than me) + int myOrder = component->GetUpdateOrder(); + auto iter = mComponents.begin(); + for (; + iter != mComponents.end(); + ++iter) + { + if (myOrder < (*iter)->GetUpdateOrder()) + { + break; + } + } + + // Inserts element before position of iterator + mComponents.insert(iter, component); +} + +void Actor::RemoveComponent(Component* component) +{ + auto iter = std::find(mComponents.begin(), mComponents.end(), component); + if (iter != mComponents.end()) + { + mComponents.erase(iter); + } +} diff --git a/Chapter08/Actor.h b/Chapter08/Actor.h new file mode 100644 index 00000000..7a41bd47 --- /dev/null +++ b/Chapter08/Actor.h @@ -0,0 +1,74 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once +#include +#include "Math.h" +#include + +class Actor +{ +public: + enum State + { + EActive, + EPaused, + EDead + }; + + Actor(class Game* game); + virtual ~Actor(); + + // Update function called from Game (not overridable) + void Update(float deltaTime); + // Updates all the components attached to the actor (not overridable) + void UpdateComponents(float deltaTime); + // Any actor-specific update code (overridable) + virtual void UpdateActor(float deltaTime); + + // ProcessInput function called from Game (not overridable) + void ProcessInput(const uint8_t* keyState); + // Any actor-specific input code (overridable) + virtual void ActorInput(const uint8_t* keyState); + + // Getters/setters + const Vector2& GetPosition() const { return mPosition; } + void SetPosition(const Vector2& pos) { mPosition = pos; mRecomputeWorldTransform = true; } + float GetScale() const { return mScale; } + void SetScale(float scale) { mScale = scale; mRecomputeWorldTransform = true; } + float GetRotation() const { return mRotation; } + void SetRotation(float rotation) { mRotation = rotation; mRecomputeWorldTransform = true; } + + void ComputeWorldTransform(); + const Matrix4& GetWorldTransform() const { return mWorldTransform; } + + Vector2 GetForward() const { return Vector2(Math::Cos(mRotation), Math::Sin(mRotation)); } + + State GetState() const { return mState; } + void SetState(State state) { mState = state; } + + class Game* GetGame() { return mGame; } + + + // Add/remove components + void AddComponent(class Component* component); + void RemoveComponent(class Component* component); +private: + // Actor's state + State mState; + + // Transform + Matrix4 mWorldTransform; + Vector2 mPosition; + float mScale; + float mRotation; + bool mRecomputeWorldTransform; + + std::vector mComponents; + class Game* mGame; +}; diff --git a/Chapter08/Assets/Asteroid.png b/Chapter08/Assets/Asteroid.png new file mode 100644 index 0000000000000000000000000000000000000000..98e831e9b4a3d85367d3976b134d448a903db4cf GIT binary patch literal 5577 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 b&;$4dQ+D450G(2M00000NkvXXu0mjf8PZhG literal 0 HcmV?d00001 diff --git a/Chapter08/Assets/Ship.png b/Chapter08/Assets/Ship.png new file mode 100644 index 0000000000000000000000000000000000000000..965144366ea2820ea4c0827a765f02fc760483a1 GIT binary patch literal 8692 zcmVuJ@VVD_UC<6{NG_fI~0ue<-1QkJoA_k0xBC#Thg@9ne9*`iQ#9$Or zQF$}6R&?d%y_c8YA7_1QpS|}zXYYO1x&V;8{kgn!SPFnNo`4_X6{c}T{8k*B#$jdxfFg<9uYy1K45IaYvHg`_dOZM)Sy63ve6hvv z1)yUy0P^?0*fb9UASvow`@mQCp^4`uNg&9uGcn1|&Nk+9SjOUl{-OWr@Hh0;_l(8q z{wNRKos+;6rV8ldy0Owz(}jF`W(JeRp&R{qi2rfmU!TJ;gp(Kmm5I1s5m_f-n#TRsj}B0%?E`vOzxB2#P=n*a3EfYETOrKoe*ICqM@{4K9Go;5xVgZi5G4 z1dM~{UdP6d+Yd3o?MrAqM0Kc|iV92owdyL5UC#5<>aVCa44|hpM4E zs0sQWIt5*Tu0n&*J!lk~f_{hI!w5`*sjxDv4V%CW*ah~3!{C*0BD@;TgA3v9a1~q+ zAA{TB3-ERLHar49hi4Ih5D^-ph8Q6X#0?2VqLBoIkE}zAkxHZUgRb+f=nat zP#6>iMMoK->`~sRLq)(kHo*Vn{;LcG6+edD1=7D>9j^O?D{Qg|tCDK{ym)H7&wDr6*;uGTJg8GHjVbnL{!cWyUB7MT6o-VNo_w8Yq`2<5Ub)hw4L3rj}5@qxMs0 zWMyP6Wy582WNT#4$d1qunl{acmP#w5ouJ*Jy_Zv#bCKi7ZIf$}8d zZdVy&)LYdbX%I9R8VMQ|8r>Q*nyQ)sn)#Z|n)kKvS`4iu ztvy=3T65Yu+7a4Yv^%sXb>ww?bn(=Yu(!=O6^iuTp>)p_Y^{w=i z^lS773}6Fm1Fpe-gF!>Ip{*g$u-szvGhed;vo5pW&GpS$<~8QGEXWp~7V9lKEnZq0SaK{6Sl+dwSOr*Z zvFf(^Xl-N7w{EeXveC4Ov)N}e%%C!Y7^RFWwrE>d+x51mZQt2h+X?JW*!^a2WS?Sx z)P8cQ&Qi|OhNWW;>JChYI)@QQx?`Nj^#uJBl~d&PK+RZLOLos~K(b5>qmrMN0})tOkySZ3_W zICNY@+|jrX%s^&6b2i>5eqa0y%Z;^%^_=a@u3%4b9605ii3Ep)@`TAmhs0fpQ%O!q zl}XcFH*PieWwLj2ZSq`7V9Mc?h17`D)-+sNT-qs~3@?S(ldh7UlRlVXkWrK|vf6I- z?$tAVKYn8-l({mqQ$Q8{O!WzMg`0(=S&msXS#Pt$vrpzo=kRj+a`kh!z=6$;c zwT88(J6|n-WB%w`m$h~4pmp)YIh_ z3ETV2tjiAU!0h1dxU-n=E9e!)6|Z;4?!H=SSy{V>ut&IOq{_dl zbFb#!9eY1iCsp6Bajj|Hr?hX|zPbJE{X++w546-O*Ot`2Kgd0Jx6Z4syT zu9enWavU5N9)I?I-1m1*_?_rJ$vD~agVqoG+9++s?NEDe`%Fht$4F;X=in*dQ{7$m zU2Q)a|9JSc+Uc4zvS-T963!N$T{xF_ZuWe}`RNOZ7sk3{yB}PPym+f8xTpV;-=!;; zJuhGEb?H5K#o@~7t9DmUU1MD9xNd#Dz0azz?I)|B+WM{g+Xrk0I&awC=o(x)cy`EX z=)z6+o0o6-+`4{y+3mqQ%kSJBju{@g%f35#FZJHb`&swrA8dGtepviS>QUumrN{L@ z>;2q1Vm)$Z)P1z?N$8UYW2~{~zhwUMVZ87u`Dx{Z>O|9|`Q+&->FRy-Sjp7DHs zy69KwU-!MxeeuI@&cF4|M9z%AfP?@5 z`Tzg`fam}Kbua(`>RI+y?e7jT@qQ9J+u00v@9M??Vs0RI60puMM)00009a7bBm z001r{001r{0eGc9b^rhX2XskIMF-&v6bBMJb=Mp$000*MNkl>DGP(CD~aK#_;!Lgxi5<8WUsw5RBv6FHt zmAEJub_G*T*+6VAAr2`6!a@RU6G2!jNbG8N&vo})=HAoOm-o$w?w*~qdsb*Kh^d-7 zGkvDt?&tFUpXd2MPYXZf*Qt{yKLacSMW7E{0L}x?h_!$6{KbnsfRpR%T)24gwqIX< zn8Kf2Uw?~;d?gG+j4`;5gX1_@0Bh5~@Lk~d5c&9p3m3L-_dTfFAOrv}TVF4pT3>Ii zXWw7s>t_JsD5Btb#7V-?_wjw7Q4kPC5hC((to=6_v$?*u_T}}pwRZxnw^~131)RJh z=zS;G*Z(kvk%j+u@kZR#+8@PQPzte@IF2cn$`p%5ip3%T{eB-m2#Ave1rGwBUT?K} z7XB{4TB{{5sRGv5*7BQw;N;rcvjR^>QS?|a8UeidM%J>{z9oud9F^Y2(D&Kd+2P>u z5Nj=3Ybxb3rDBmF2KJPu1!%3VzC<3NRBe52?FkEy2Vr=+KNx@r zh>#=+>#f%NS}(#q*IKQAYJngKa9kH-E%jQBa;ZeUTE$wM;()bux;<+3CQ5{&=P@3S z8TvlP+Jc2YYOStrV(ps%R##Sja3HweYQ0C`lcVw28e^nXDj_0RKneJxfTHIOHa0hF z*IT2tx+)f$3Jw9rVMw7+Kp+RbX&1p-OS{t{juV>A1_jqmZ(M|4zmMy>6g@BfIXsRr z@7UVi^>3R8tY@yZ)@pq$G3Jwf-=|P2OL=A%sW)L}9;r7mu7^$Cy4qS@{bhhwW{tIJ zt62L+v34_edCzqxf=>U%X6g{3*=R63H;e1K={0~(x6AU%3dLfPQ4lZ=L$LM%D>7VJ zUj87!%F@!Uc|dDrh0X14)>c=ajH2ki1Sr-UP;a8@O`OaFqA0?Sd^p&{-@i<;PylOx z+rlLv0W{D8-T|y2g75p3JdY$vNQ}YrJd!vD5wtqqE)x$Cq2KE<4kH{#Gt+30Bnd$n zQt~`R1mK*72X=OMw{A)St1ByPZEw?BS^29tj^AJbw^~C^EKyllWNxO(s9a~DG==eq zWbYD#UYBU&JYlDU7O=)(MG!zMg#nT{MzXy;8jtZ@mne=ArBEViBq$cK#=M~AjI~5z zh~v5_rNCN5gfIv&A`}aSTw(uw=hCHrv9z$j?&ZtZtfQ}YfquWw>dMNeO_IDdF$UN3 zkj4z9l@`s_HNO42hp9OZ`NN_z1;ekMZFFN^1n(R;^SX6OoS%hQshh zD_~`L`2zyK6pY6y$hZY$VTrlbH43E)?$-0{e&cb>bKfG~+vDXkHOAT@9Ql}$598pP z8xyI=3SD}|yQ5VhSXx@5Uah_gk4b7GOT*(QgxE$qg3 zX@nzAIGXX?9HCRD>^bxg_8Im2MBPKQs3ZF~e+v*s5lNEZIu213p+t~u3%IU}%Dlj4 zu5G6yLly;cJjhdL1$bK*u$?wRbB^%UZ=ev3i7)M-9alu;u}ZnTc6opQGbiTe@JFL- zqrmR&F4o#VjiLxQi_g|t5J73pPPsum=y52TQyN}5KSLab=y=R#V+q%FC>9EMUXeIS zuva7d^!MD=GsWavWpWPC9}MtEBf{~R!%hb)La)~&7>|jfh)$<-Wlb!qP@vq|r~dWF zQQ!GLbWgp4@PS8&;+Qas0RH}oxw*5z?1{O#YZb7xxcEzmw30YJ;)2%1gkgv~4j45T zsB{kbGDSYO-y<0Z4BQecon68>!HffJCVXx&J0)12<>e8?b(|x|oteib@VbB2X&Ra2-s&fj@r-mEInX-^VQ9#X`MAvbRhB@BnkLhYdrl zF{!IgSzJVj;ux(pj@D?U($9{Ah@iD5F@}QcrtY6zU$XERXXl#ie_HD!Nz=6VD6Mf! zg15Vg8V8dQ8%7aYYZv(0i2{bcPq|$FM~FO}WEZ(AZ%2$_;CigYKKrdZsjuFFdG&pG zWshiYoBs9&$>9OE+XiDW#!LWhg4QCK%yO>lPTmFA#c>==lBC-~>xlwn>RfB>WZNip z{XA~kC*-P#GIicZkK_Rh^Yb=}-S!=Gq(yN@{l^Ru%>Ywi6eNw8D< z${0hOBzXlk0KNcxTSFkm)NPWy!-V1MRUY1_&W-ZukuG$N_4V8$&ag`{=yTZZQFz7c zF&pQw434<$Y@_jOhu!Y4-=Ypa+wOKhJ5#F_5&4LP_W@r5khz%|fcF|}|7aR;qByo% zDN#y&3iu}n?e?<(^NWk@U%E6|d2VKA5o>oi!t*?Hk)Z0`XYn}ILutrS{q)S zJ76tJYe*8t_q-M}djj1#z~8@2;n{DKl*)*9AQ~e{oYn+c25OCgJdc2vHLBG^3-@Nd zgWID3Ywc@DYxbW$>~=p#io7?qn6-9Qjz3PkekakX)7V;rc)3O3xS$lOdx+|G(ETn> zdmrWd5JlK5;;1VjS+I5nk@NLRWBACsQG2`CMiUAiB+0dPzS0=a!+G`$m9ITc1Za`tvpj1J@Lz!6?)&~< zSIcDvH=zjC>GeK_wKpaF!YBUl%9r;%wrs7L09bB$T`b~1{7%Fq&^bglFCx$VKV)|s z+1o|-FQ<8ecEB3+`R`%wIL+w(hfq^EG6BT=bIND_0&u2UE`NP+lU{JkNk;k6_x`8o z%$c|AV(DdtXU;$tzHFM?GWuJOVM}G?+_TtPBenb#w}%MQZG+elG%BrbBHZ?$5LBZ3tkai zH&srfnTAPYh}Z7GyYM~Cczlhej-=Qk6db1(#qk$j^4_58_fd|EO%lv>(P1s36lP%= zy6qc5(y1iFFna4F=&TC7y4;=S8Gv6d7mGg!P|o@UFUo+ossK|g5w<&!#K@Foaxo+f z5v3uH)1$e78M@2#_c%rlQcMt=tzsd0#jD}Ww_cDB%>MVgWzYLr;GY5CdPx+Z;uzO; zuu75S`#VE!J?P^-^E4dnr*5vY?UC($5N!Tg1W6LCq}XxgxI&^RZJ@rmTPgrMWzWMO zkALtAh!7Q|>L23SX&W7nV@t5nN4SDFr5hC_;w))YT{P z$)Wg-uV9CRBWud^JF8v====VMZn`~QEtRO2%Qr6jn;(?;FTOq>!hBGxeL!WF%HJkQ zD1ZJ_DOj%EfeiX7Th#9&BOgf;q*_N77O^jT1?G;sk?jpo3iskU^x5xT5i)yo{QEC& zIu)*#%Rgt~e+_+q`&ONyR;k!Y2Pezg5JAt(F?i(NsLMN0t7E-ldgIecQRWd=Db&XE zRG<7Ju}KNcW8FW+f`1GAPIoXkd$U!d)XL>I0bfJpJ^kVEzt<}jdc)yODWG1d>>)Cr zH!t&QP%A}p>NLSUuYp=4+qVj<1c@W`?iPCgGET3JbUP@2h{@`StC`=dJpNa}hr9j0 zy;Y-0tx_ogex}zy=naQ|r&+Dixe0C7tJSB0*G+eKCah4B5WebOY_*DRAL0!9xM6^k zB;dH%Btj)I{$P+6e#T7p{M4+#9@gI1>G#jxu5wti8&BdSQCaihP~fM!gTdDtwHn=i z|NB!+^*R}2b5=51IwwSqTqtXB;1;MXEF+7nB!_$G<{WenvE2juhX)gvcQRr$JO4Wg z+^ZnIUDVhF1O+~>G6vULJDV8uRHIh=l!f_R!0R%unefee{Z9n$JPxrZj8HZspj;O{ zzeJ;RnN~sIxo;yg^GKmM=@8|Av-deG@;WVY+k~Ib=rz@-Rzc)*Dl1~NQfY_An0I6C zUb9~RJ>b3<$lX_G8jZgMeuk;gls7>fttYK7SL=*n7K~e9xnAbP{5*5>^TfjeqBFpo zLVQUXqBkip?QZwhgr1$v|GpeIrMjK&U_iam_>8tT@1>{vHdO+NG4FSjdjCwLF$6xI z(NRMYnX%U15By}_keo(ond$^x17g-7{(#GlLo10Hg)z=t72DpM#P!L!*8b{2yS;xq ztZuEHnV+5gFz^8p`3Jy9WU6`aL}JX3>#4AlH%H?vTuu7)N~Hvbc5t1vn@bWOVR=ke z4QAVFD$x@nOWGJ&YB7!?ymEzPcLN4JLVq}!5wO;B&~D#woqu9(j=h6}>F@6%9jtuM z)XzS-cX04tClell-*UA6@#%hEe&wuBmo_U49#X4AW0puMtky^v;`jq>zYAdi#!gz_ zS2r;Qut|*Z`@|Q|q8*pmB-kiKtT__%MdS-Nj%rFow3jzChgw*sQL9p^HyA60>2~N0hM3MFc7GRw;02qbVHn~aQ?skA zq737h!jmf?+SONCn>ITy=9FDmcz>M41a7 zAt|&*YBluI3MZGBId|%nDD4nd8kp`rCoW&0eO`!?7_+yV=J!fnivc2N$DvdzUDG%< z#-zp7l~(v8<1l;#Ybg{869s9lFcw~330 zAcX>QVwsiIRf5)CM71UC(@$W(^%SF%ucaX|buILQF)|!L98cy0rjcDlh@*%&j){{b z?HolBaTF0o5l$wY&XkvAo#y)%8=fm+qqU=YPzea-m#C?VM%2d^a^^81;MUl-S6> zVjYnyWoH)SjkSz|fRg8>Gk?HdZs86*$3Yc}h^Ql0zxs1NB_>MYk4D6CoQ}^$Q924U6?t-t4~9du)(o?;I;}N> z;c#O8BUPg@bY6Kchd=fpGU#KsH%O9%a=8p5XECM-Jbgp~dj|(B%+CY-gzGrzRA;`p zwU{Jf+3%tY9@Qk`LJ)Fhdxv_dK;(Gb)!rhC6QU#{j8k`(<7)V6MkyC`Y7T*^@i@nE z&{|XUJerLLh|s9jD0&{Q>oS)mHxsLy1b<ma^**4F_B_mO;6OzrDlV zcb~@ZwedS`q|?TU!|M|nQyx$*mD0(rY1Gw&H=>nWcV>ppr&s=P7;cqhqaa{iqcfsaVCS)`NY`O zM96iO0YnCZ<~%cJ&!8`yrQmt_aK{;}J&nkj{#8}(b)!Z;T)e!v_{}&;?zMnhsUi!@ z)EAd%&dfk#j;`aP`yJxFOAI<4qRsQf-7az!i7itToyHinp z^13;LDwfiriXRA{DXZ;u7ibt4RnB!q*V11@V60J7hpIV;khn}F&Jxcv)bc` z<)?(ZN}B{hz+mX3lrT3lLt-uCAi(pye3t1M;BRhjZEfUZ|2NeeTv=LTdv}+W<>lY8 z#{B#^iYS&VNWn!4c}pvXAYjz%Q7pJ%?LXey+4*3mzS5>+1X)rdHL^& zQXdPlQTKx9p_E`v`p8U>TA;VNz1_I3LRVH$N-bdR7T|>0BQwWUj(HY3^nJo8rdF*? z>XJA~*x%o$-e^!Rm2w4s-oX1dH#ZM%D=ogWvjf1^&d%>+?QF4F{8F)4Bpi~si%fSG0!V=d)!Ij7hUKrjg5~0HzoXS8IV|SwYa#snSNedTf&&#i(4=55#N*R>%So)zcL&S zDHe-FQACg@UN9Mzp909g0RH9qix)q8TUp^B#_Lr2=Cfgt%ken)&F907$ zuJ@VVD_UC<6{NG_fI~0ue<-1QkJoA_k0xBC#Thg@9ne9*`iQ#9$Or zQF$}6R&?d%y_c8YA7_1QpS|}zXYYO1x&V;8{kgn!SPFnNo`4_X6{c}T{8k*B#$jdxfFg<9uYy1K45IaYvHg`_dOZM)Sy63ve6hvv z1)yUy0P^?0*fb9UASvow`@mQCp^4`uNg&9uGcn1|&Nk+9SjOUl{-OWr@Hh0;_l(8q z{wNRKos+;6rV8ldy0Owz(}jF`W(JeRp&R{qi2rfmU!TJ;gp(Kmm5I1s5m_f-n#TRsj}B0%?E`vOzxB2#P=n*a3EfYETOrKoe*ICqM@{4K9Go;5xVgZi5G4 z1dM~{UdP6d+Yd3o?MrAqM0Kc|iV92owdyL5UC#5<>aVCa44|hpM4E zs0sQWIt5*Tu0n&*J!lk~f_{hI!w5`*sjxDv4V%CW*ah~3!{C*0BD@;TgA3v9a1~q+ zAA{TB3-ERLHar49hi4Ih5D^-ph8Q6X#0?2VqLBoIkE}zAkxHZUgRb+f=nat zP#6>iMMoK->`~sRLq)(kHo*Vn{;LcG6+edD1=7D>9j^O?D{Qg|tCDK{ym)H7&wDr6*;uGTJg8GHjVbnL{!cWyUB7MT6o-VNo_w8Yq`2<5Ub)hw4L3rj}5@qxMs0 zWMyP6Wy582WNT#4$d1qunl{acmP#w5ouJ*Jy_Zv#bCKi7ZIf$}8d zZdVy&)LYdbX%I9R8VMQ|8r>Q*nyQ)sn)#Z|n)kKvS`4iu ztvy=3T65Yu+7a4Yv^%sXb>ww?bn(=Yu(!=O6^iuTp>)p_Y^{w=i z^lS773}6Fm1Fpe-gF!>Ip{*g$u-szvGhed;vo5pW&GpS$<~8QGEXWp~7V9lKEnZq0SaK{6Sl+dwSOr*Z zvFf(^Xl-N7w{EeXveC4Ov)N}e%%C!Y7^RFWwrE>d+x51mZQt2h+X?JW*!^a2WS?Sx z)P8cQ&Qi|OhNWW;>JChYI)@QQx?`Nj^#uJBl~d&PK+RZLOLos~K(b5>qmrMN0})tOkySZ3_W zICNY@+|jrX%s^&6b2i>5eqa0y%Z;^%^_=a@u3%4b9605ii3Ep)@`TAmhs0fpQ%O!q zl}XcFH*PieWwLj2ZSq`7V9Mc?h17`D)-+sNT-qs~3@?S(ldh7UlRlVXkWrK|vf6I- z?$tAVKYn8-l({mqQ$Q8{O!WzMg`0(=S&msXS#Pt$vrpzo=kRj+a`kh!z=6$;c zwT88(J6|n-WB%w`m$h~4pmp)YIh_ z3ETV2tjiAU!0h1dxU-n=E9e!)6|Z;4?!H=SSy{V>ut&IOq{_dl zbFb#!9eY1iCsp6Bajj|Hr?hX|zPbJE{X++w546-O*Ot`2Kgd0Jx6Z4syT zu9enWavU5N9)I?I-1m1*_?_rJ$vD~agVqoG+9++s?NEDe`%Fht$4F;X=in*dQ{7$m zU2Q)a|9JSc+Uc4zvS-T963!N$T{xF_ZuWe}`RNOZ7sk3{yB}PPym+f8xTpV;-=!;; zJuhGEb?H5K#o@~7t9DmUU1MD9xNd#Dz0azz?I)|B+WM{g+Xrk0I&awC=o(x)cy`EX z=)z6+o0o6-+`4{y+3mqQ%kSJBju{@g%f35#FZJHb`&swrA8dGtepviS>QUumrN{L@ z>;2q1Vm)$Z)P1z?N$8UYW2~{~zhwUMVZ87u`Dx{Z>O|9|`Q+&->FRy-Sjp7DHs zy69KwU-!MxeeuI@&cF4|M9z%AfP?@5 z`Tzg`fam}Kbua(`>RI+y?e7jT@qQ9J+u00v@9M??Vs0RI60puMM)00009a7bBm z001r{001r{0eGc9b^rhX2XskIMF-&v6bBM67z+5u000;SNklDyI z-dt+0dP~3ky>4Kd8FmJPhCwh42uUL(1j8~8TQY&e`rr??1R<~`hm9j_hhVG-Z~F^n11O~3thzoqu9tX%H(hs>(3_xknF-O~~okx`Xd zm3KM&`Ja=*kN7xu_UvbXMW6t5fpy>#@T6G#2S3=@=m4BuTVs7=l{>dynLt*rcL32^r6M(;hlw)Wo> z7+Cmk8#g1S*8UjQf>MaJBuPS{SfWrUP$(1t=ytmVVMvmuD0nUK>9v)Wj)h+YSY26> zzg7aQt*(w1f8W{F)u#j=i{tpAa4-OP_05cBt$j_LBseNtMn4GH-QDHz=m={qT5HOs z62(G+FbwJDl3}c^3jFTs^70UC-wv>{y!_WB0ZLWZR#zXj@JJX%=exZgh=2%bnzFXC z^3IhT5YN?>m49l1Fbr{A7h^58YL!y4NUc)ATASGcYiYGRRBH{C2nF9~I2_Us0*tku zh2L9QUf#mmdjOV~mj3FD;M&T{+XOy27!Iv5MvBEEB7y~!Krjd?_{D5x_8t@H`KJk0#rO~M4xo);_5jx#2uIp0p{p|1X2*$i|dv7ne zZ4$7Si`MGO%EwY;KG_Wdykbd8Q`1PT0aLR`t$}fUY$n!~mF4AM1z5?su{y~WYhNzb zZjD6Vcir(uCqJ<{IYemG>rBr~PxD2F# z23CMK0!xSx1OY|gCrwjQWAJ^SG)X`Ntxo65SVBbTb~+5B7{}2})$62bN*F~HeIF44 zxM<n(h}P{JFF}%eIrSdms!BARFN|al;`G|nQAa7)#xdWHyn`eU#8b- z6K`H3YPHY;))=e^0%)Z$K$;{-uFHer5Z`r)lLS!;C6al9LIG>c({j#OOB_Wwu8UF% ztVKkK!Vn`u!ShB0`{%otFaL{$xjFW(T)Ac(eZ2{~-7d>ZOP@ArdVgvRuJ0rDDT+%g zG?rKS_DkMC)o~ckt}&?3VtkLj{uQ&=)Lv<3jGelqeGO|2)wRREsx0 z0>2UthnbOaJ!EcyndMcyVi|Y)2kd?A5zP0$MY6xool{kY+94VQm_Y!;@R|inP6!J` zQA8Mq__>R-*5Yc-APmPG)k%9_ z;miz?Q=;TMbPo?0bi2guBebYv`a3!Wh~k(uO>rHEIF3;wNUj2|>!NZgu(@d4Nzagb zfss8Jh0Y4_x7V?)CShZS=!GxCi-#nachQb3BJxnVR9d}qaPXNkGcyE(!L?psZ*LE4 z?dRe+#?Ae+wH8EBTC-cKlk_?qiRPS!=g&@&L=id}vQ=NebsY+xhwm3i(iD5rvQJ)* zL_H_WNL9wq0Nq}XU@#yW4moPIup)Fi9m3&|IF4zxT35%!qCAgM>wwxXJYweb`_9bH#m_KuddZnT* zJQfXyxVaUTkr5JsVu`xzU}|-O*=JGi?BfJo%;Fu))rzG1dvuQuF^BuuD8d?(iRuK$ zMT9s>&|2eYjaDlA?l_1DT5D2c@LV?&|9pPQ-D8qJYx3W;*2jXTN$F8q#oQT^IW9Yd)OG&`N%Co60KMV81d+|#?@%|3o zolVlCLu|VV#$b#Y8?>>t7Qy74b6t0QdajG(IG8le)IsYp0c7G?YwcKVl)8Q#Hz^Zx z!lO()_mN|9z})Ptjgw?d{c8@_MW$v^XXdGv%M@!hLhV4SNhb&}?I!lh9yT06p4~Z) zbKDz=YU@ZqCB7ypa|4~Ip8cXhqa3q&H;A-&z=mWPb0{L zS9z-gaAsx(5qY~z8lVZTjjXI0M#$klHjZdFrr19?z|opy7~=GM*lr7=2y)RM>HTTk z5y#0~t9HQ{Y&-;Oj)%k`ht1~qZ#G|>ZZw_;JOsQRxbJ%ZJ8ZRne=GrKW@f&Wr0J_1 zeQjuvThGiW0;vV%I-oVKBndW6t{OdK5T$TO!ODdDijAc>J&QB9j1fU;hjf1% z`W=S79!Z+wYK;YsTCHb{T20mKZvx%}yl&$5Cz|c{Lk_^~^mM^m`zn*B*a^Kd#*n1x zC-lV~alf-JJL@D(t z;GY~en@<7E&d+mj`SN(=nW?FHtbN$R%a286xiLE_Q39l{Px<*T<$Tn}E0x*Y+M-#W zM)#WZFYjW~^q3JAV`h!WVXM=*EihQ4TD=o%FSdHUSRFQ-06%ZibexRDNrJ2O|58fL z95$P82c8-|Jh}NiDY<;uYP|yZ#MtnR)WBMzI3~`=jFW^Y$<##Rh){btjz(F7E>*Cp zxeA6(xHKd3%~q#Fy;{931ZZ`;-)r@H@i-ftZZy(i9IM~A`1w;v|6ytg!%wRTxfzfZFEY~pk0vDG@s;tHYTf>NmV5vtunciTA415^+| z9Ak5jqprGS!P+TAF4fBA|J3RC{{cX?RH7RMw@d(O)N1bpz6fkQQzKKaR5JAy$-t0Y zl-1M>{RiHP+TX+08{qknrq|~AN@IK<=cy+sf8`NkK#QCnA zuxI8$X)r0Ww~bw1!&$$G_vrrtt*;x=$<=#b>jl9*x4ksBmKrwnRo}j9txmW08unm+ zhIVrqlRT&OTmSK{eTF*8=f$brJw430# zh=4hF2c#+1aVb6aC$N6;dir+kvNssqQo!Uq-H#huu@C&T^RT&lvsY_+*u@nH2T1D(TdEx2{G`jQ*0bwjcr|NGVg|3gpYq{8 zX}5C?r;df#B9se-5A?(Ey|;}3tDV8DT|anD@}=+oZ3e;pR+0*ycv7n>+y>%mE43=B z-4+~|WH7*-*qkVZnOj8t#W$cabEB4YBFHcd?tg&d!=E5M1tgtBi3EPNR46GMYUIuK@8{I}mJ`Tm2z zKLfsXLj+LZT9^iwZI({ng|&Cu)YLFm=Xol44&r-I^ucjJDM4#gl;FA!Rw>evi077D z_qzB`J`RTm;1@vU_+761AlT7&5hP8qlFfJZzCz+SE1=$(40*urjY@&D?m0tXCqMsu zDoUhMEtJ$^W6dP#PurvRgQgSQO*E*gz6S*#JO`^4l#0Z?E~-#K(hTos!fn}dh496% zK>fuxu~XAOv=S%75W9Nrm>S41r0}IbA)Oq1B2_=(4SuN?1Rtpsi#M(UCvP-8$2Or4 zJPACx*6e>cy|DQz(`voj>^EP7jms9RAVql&CSR=13xqO(A=o5AUEYD|*;BFoQ+?71 zLd)ZV(&zst<|Owg5aBT~to=YQ2tJZ~gxli<05+z|ec+GJTKk3MyMOs++d5jX{oV?3 zavqUBo`1i#b}g&%bBr_U@($c{AJ#9RHZEd{TN*sPXLudv?zH)c$+_=~k~e*J@X0_L{XqWuE>2Y(?m zc$Y3<3q_>g1;>R#5y}ra6D1}uDwfO@okA0rRWB}%= z;-A@qe+zuL-RoVr)htn}rP4jXR}gtyx8MICwQ`wGzkf>vsFln6h|G?Pm!oV@D@A(l zJmK?R1l4-3w+gESNn-TgHu~TSPN#{qTd1Iq$@7Vm$ZxJD{|b12yW6$Tlxb2emy1A< z)Ahf0`u$&MR4TM?fts~S<#FI8lhvIuDwL)~FSr|9si2!jIK3`z6yl^QI4(AgQE5WZ z>t%_bF_~+eG>RhoSbJ})+r4nR(qYLLo+fFk^5Vmhz|XdOy|2`(RoXX@BsFR^a>V9> zD93Dw2!duL%K(YW07}qU^IXJJ1N|)Ah})8*tkPP z;NvPsaILk|sWD%!SF4}0Fgx1dbrIKm^Nm{V4+NggWMGq@V?-$L5m2s+o?W2cy26Sl z@cnNiQ?rOy7*~i!pZR&wio8UN+_ufn=J1-TS1KU#u*z|KtyET_G3KpUyWgnQJ__9X zG_m{gRK5On;LSO(a;%c$Xgw}{xmxE4vtV40#af9ov$M?1&XV+dh|Ue(Nc2YpQ0g89 zrrB;kvrSJ=k3R3j&7f|l-Rn`S*FU4J9o5n^z0HU~YRtPFrQS7FulIqE=WtYCM5e5@ zuL6E*RFIss(lSvAy2glEg9JUUI1Vdm!XQd;W-8d`ezxJsXRZCU!)Ei~c5vNVJ2g8! z{eIxxBJ%fv56MLF;L+5WAJ-FZXH*}-zSTh0@yUc z1YMGi3uwnBF)22V5NnS4d=dGhTj*mH5qa6%?Cd?jPg-l=G9gXlo+aSz*F=`njfNeS zrLGA&Agkp~&7kHMsaGqMYjuW7VcIQPy*{ROggw}UFnrqLXcR^Gd2ipz;%J(tL`i~o zwK)17z=(*+*XxjVmek>7t>w>Qd21>WMESls(O$N9}T7r|p7h1N*5 zie6aa?BXI9&pjWd9inm_(>~zLm35kzgg8ww`+E?_h*Hp~P%IX&DV!Q(NYiwz zD%RQuhEenY*5Y~Im_S-nQ-L};_3qS@kg=W`Z9yFFQzUDH7#_)A=2+bl8pNUCM~;&ki;=bl8~fnRym4e zk~k)cW1M_*IwxM5SDHuHCXXd@1C3HDn`1=mNl!GI(^^Dboj;5sT*pCR=@LD14-6Jan&Uiia7I&RMyVXT)2bcpZz}j%7s!1wR?f#;&Z7g!=T&Ay2J*-Rqlvf z?ZwG`ys?%+7*h28tmiLDvfjZk%o-;>Z|o7q0a4yUGwMH_Y?qUfk(~fsl(i(K3awYa z0XOI)L66~ZNU>0`IWbRVJ1A!h~vF}AFVb0ysb`aO|Rb{ zbAR&07+TN2o1<607U^}dJDa3wN~u%=kqa1803JU^fc?Wm=4NLBe!_K}tgCZ0xV4xx zWie=@J)cS%vmQn~v9n99=n*?UcQm(&lax4(iIPm5PcBSOSl;nQC;AYWXpeIo2dy;) z-=|Tpg9!C%m4ff%x-K($a5Lt*NeSkbIJo!qMANg>AO9MqNB zN4u9V+iSWZ`awWH2o5Xd^3ZkNHw=fv%nd4qEmzP})0A9?xZh*LSbC)@!OkwveeQXJ zPLrV3L|RRpB;vHNcyx{=pj0eoom+YPY!pSfqv&x$1&$H!m`1Hj&mLB+0n>aTGvJEl)P*O|>lg5Rf7IOZ1lFEMVPSom_9B(F@Z9k+hb{Q@x#`b zUmC_Sg;E*uT*NDY>t=aC7&7Q|D0nVd`;WJGcmLgK<1H^Oy%zYC5}D}*0hLl|EE!w} z`jV3!X24;y$u_6Js$m)Y9hzV+hhSP~W&+1=e`d2#XY zh*BR5^Hz7y_fbl)CM)!Y83#IBJ3IC35_D+^rPLhOZUat~zcO=L<~WK%`$0eyCsZrt zabA+7DF+7!)arFg#o~y7e`w&HTU%R)HwB3Nuw!?37l7^E-QUI9=|Z9Kg+ie~G#nBR zLXtFL7{|Dt2O|G)WohZUgx%TMVQXvaiop9Nf6+?iFH2w{Ns?m`XjUF@n4g==UaSxy z91e-1i23>XZ1Zplk^45bwtiN@;mzbuH=SxuyhihS;I~BNg>jk^M-ioBk&Ugb8y<6Q zWyPj>BZcEQbh=$Soi4R%m3qB4Zk0W1wFtwIsYU~1Eu~Uv1hKV%Ut8bY{LtF!DjS=d zw+4yb%rRk1KEJuW{UQsma<%@$oD+}U93m-y>Nrjo5$4ix{`?&j3V!C+;+R2h*cKNS zD3wZ-v&~-tetCU!b83Ba^FzQbZT^-d;1n*hv9*C&bCxwSPe-Nv`bf241Z1Drd1_RGLB-~t2S2f*XNmw``TT3?USetTexture(game->GetTexture("Assets/Asteroid.png")); + + // Create a move component, and set a forward speed + MoveComponent* mc = new MoveComponent(this); + mc->SetForwardSpeed(150.0f); + + // Create a circle component (for collision) + mCircle = new CircleComponent(this); + mCircle->SetRadius(40.0f); + + // Add to mAsteroids in game + game->AddAsteroid(this); +} + +Asteroid::~Asteroid() +{ + GetGame()->RemoveAsteroid(this); +} diff --git a/Chapter08/Asteroid.h b/Chapter08/Asteroid.h new file mode 100644 index 00000000..45305770 --- /dev/null +++ b/Chapter08/Asteroid.h @@ -0,0 +1,20 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "Actor.h" +class Asteroid : public Actor +{ +public: + Asteroid(class Game* game); + ~Asteroid(); + + class CircleComponent* GetCircle() { return mCircle; } +private: + class CircleComponent* mCircle; +}; diff --git a/Chapter08/Chapter08-windows.sln b/Chapter08/Chapter08-windows.sln new file mode 100644 index 00000000..f3e55a49 --- /dev/null +++ b/Chapter08/Chapter08-windows.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.27004.2008 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Game", "Game.vcxproj", "{BC508D87-495F-4554-932D-DD68388B63CC}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {BC508D87-495F-4554-932D-DD68388B63CC}.Debug|Win32.ActiveCfg = Debug|Win32 + {BC508D87-495F-4554-932D-DD68388B63CC}.Debug|Win32.Build.0 = Debug|Win32 + {BC508D87-495F-4554-932D-DD68388B63CC}.Release|Win32.ActiveCfg = Release|Win32 + {BC508D87-495F-4554-932D-DD68388B63CC}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {84365DE3-728A-494A-A8A1-96281CA6772F} + EndGlobalSection +EndGlobal diff --git a/Chapter08/Chapter6-mac.xcodeproj/project.pbxproj b/Chapter08/Chapter6-mac.xcodeproj/project.pbxproj new file mode 100644 index 00000000..abc3a372 --- /dev/null +++ b/Chapter08/Chapter6-mac.xcodeproj/project.pbxproj @@ -0,0 +1,402 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 9203E9F01F0DD69900F9FFC2 /* Tower.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9203E9EE1F0DD69900F9FFC2 /* Tower.cpp */; }; + 9203E9F31F0DE24000F9FFC2 /* Enemy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9203E9F11F0DE24000F9FFC2 /* Enemy.cpp */; }; + 9203E9F61F0DF13600F9FFC2 /* NavComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9203E9F41F0DF13600F9FFC2 /* NavComponent.cpp */; }; + 9203E9F91F0F12FE00F9FFC2 /* Bullet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9203E9F71F0F12FE00F9FFC2 /* Bullet.cpp */; }; + 9206FDC61F140707005078A2 /* Texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9206FDC41F140707005078A2 /* Texture.cpp */; }; + 9206FDC91F140D40005078A2 /* Shader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9206FDC71F140D40005078A2 /* Shader.cpp */; }; + 9223C4781F009428009A94D7 /* Game.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4671F009428009A94D7 /* Game.cpp */; }; + 9223C4791F009428009A94D7 /* Actor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4681F009428009A94D7 /* Actor.cpp */; }; + 9223C47C1F009428009A94D7 /* Component.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C46E1F009428009A94D7 /* Component.cpp */; }; + 9223C47D1F009428009A94D7 /* Main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4711F009428009A94D7 /* Main.cpp */; }; + 9223C47E1F009428009A94D7 /* Math.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4721F009428009A94D7 /* Math.cpp */; }; + 9223C4801F009428009A94D7 /* SpriteComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4761F009428009A94D7 /* SpriteComponent.cpp */; }; + 9223C48B1F0CA3CE009A94D7 /* MoveComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C48A1F0CA3CE009A94D7 /* MoveComponent.cpp */; }; + 9223C48F1F0CA67A009A94D7 /* Tile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C48D1F0CA67A009A94D7 /* Tile.cpp */; }; + 9223C4941F0CA766009A94D7 /* CollisionComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4901F0CA766009A94D7 /* CollisionComponent.cpp */; }; + 9223C4951F0CA766009A94D7 /* CircleComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4911F0CA766009A94D7 /* CircleComponent.cpp */; }; + 9223C4981F0DBD69009A94D7 /* Grid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4961F0DBD69009A94D7 /* Grid.cpp */; }; + 92CF0D791F3BBF140086A0F3 /* VertexArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 92CF0D771F3BBF140086A0F3 /* VertexArray.cpp */; }; + 92D324FB1B697389005A86C7 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 92D324FA1B697389005A86C7 /* CoreFoundation.framework */; }; + 92E46E941B6353E50035CD21 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 92E46E931B6353E50035CD21 /* OpenGL.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 9203E9EE1F0DD69900F9FFC2 /* Tower.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Tower.cpp; sourceTree = ""; }; + 9203E9EF1F0DD69900F9FFC2 /* Tower.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Tower.h; sourceTree = ""; }; + 9203E9F11F0DE24000F9FFC2 /* Enemy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Enemy.cpp; sourceTree = ""; }; + 9203E9F21F0DE24000F9FFC2 /* Enemy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Enemy.h; sourceTree = ""; }; + 9203E9F41F0DF13600F9FFC2 /* NavComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NavComponent.cpp; sourceTree = ""; }; + 9203E9F51F0DF13600F9FFC2 /* NavComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NavComponent.h; sourceTree = ""; }; + 9203E9F71F0F12FE00F9FFC2 /* Bullet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Bullet.cpp; sourceTree = ""; }; + 9203E9F81F0F12FE00F9FFC2 /* Bullet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Bullet.h; sourceTree = ""; }; + 9206FDC31F13F7E8005078A2 /* Shaders */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Shaders; sourceTree = ""; }; + 9206FDC41F140707005078A2 /* Texture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Texture.cpp; sourceTree = ""; }; + 9206FDC51F140707005078A2 /* Texture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Texture.h; sourceTree = ""; }; + 9206FDC71F140D40005078A2 /* Shader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Shader.cpp; sourceTree = ""; }; + 9206FDC81F140D40005078A2 /* Shader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Shader.h; sourceTree = ""; }; + 9223C4671F009428009A94D7 /* Game.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Game.cpp; sourceTree = ""; }; + 9223C4681F009428009A94D7 /* Actor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Actor.cpp; sourceTree = ""; }; + 9223C4691F009428009A94D7 /* Actor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Actor.h; sourceTree = ""; }; + 9223C46E1F009428009A94D7 /* Component.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Component.cpp; sourceTree = ""; }; + 9223C46F1F009428009A94D7 /* Component.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Component.h; sourceTree = ""; }; + 9223C4701F009428009A94D7 /* Game.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Game.h; sourceTree = ""; }; + 9223C4711F009428009A94D7 /* Main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Main.cpp; sourceTree = ""; }; + 9223C4721F009428009A94D7 /* Math.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Math.cpp; sourceTree = ""; }; + 9223C4731F009428009A94D7 /* Math.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Math.h; sourceTree = ""; }; + 9223C4761F009428009A94D7 /* SpriteComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpriteComponent.cpp; sourceTree = ""; }; + 9223C4771F009428009A94D7 /* SpriteComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpriteComponent.h; sourceTree = ""; }; + 9223C48A1F0CA3CE009A94D7 /* MoveComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MoveComponent.cpp; sourceTree = ""; }; + 9223C48C1F0CA3D4009A94D7 /* MoveComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MoveComponent.h; sourceTree = ""; }; + 9223C48D1F0CA67A009A94D7 /* Tile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Tile.cpp; sourceTree = ""; }; + 9223C48E1F0CA67A009A94D7 /* Tile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Tile.h; sourceTree = ""; }; + 9223C4901F0CA766009A94D7 /* CollisionComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CollisionComponent.cpp; sourceTree = ""; }; + 9223C4911F0CA766009A94D7 /* CircleComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CircleComponent.cpp; sourceTree = ""; }; + 9223C4921F0CA766009A94D7 /* CollisionComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CollisionComponent.h; sourceTree = ""; }; + 9223C4931F0CA766009A94D7 /* CircleComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CircleComponent.h; sourceTree = ""; }; + 9223C4961F0DBD69009A94D7 /* Grid.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Grid.cpp; sourceTree = ""; }; + 9223C4971F0DBD69009A94D7 /* Grid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Grid.h; sourceTree = ""; }; + 92CF0D771F3BBF140086A0F3 /* VertexArray.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VertexArray.cpp; sourceTree = ""; }; + 92CF0D781F3BBF140086A0F3 /* VertexArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VertexArray.h; sourceTree = ""; }; + 92D324FA1B697389005A86C7 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; + 92E46DF71B634EA30035CD21 /* Game-mac */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "Game-mac"; sourceTree = BUILT_PRODUCTS_DIR; }; + 92E46E931B6353E50035CD21 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 92E46DF41B634EA30035CD21 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 92D324FB1B697389005A86C7 /* CoreFoundation.framework in Frameworks */, + 92E46E941B6353E50035CD21 /* OpenGL.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 92E46DEE1B634EA30035CD21 = { + isa = PBXGroup; + children = ( + 92CF0D771F3BBF140086A0F3 /* VertexArray.cpp */, + 92CF0D781F3BBF140086A0F3 /* VertexArray.h */, + 9223C4681F009428009A94D7 /* Actor.cpp */, + 9223C4691F009428009A94D7 /* Actor.h */, + 9203E9F71F0F12FE00F9FFC2 /* Bullet.cpp */, + 9203E9F81F0F12FE00F9FFC2 /* Bullet.h */, + 9223C46E1F009428009A94D7 /* Component.cpp */, + 9223C46F1F009428009A94D7 /* Component.h */, + 9223C4911F0CA766009A94D7 /* CircleComponent.cpp */, + 9223C4931F0CA766009A94D7 /* CircleComponent.h */, + 9223C4901F0CA766009A94D7 /* CollisionComponent.cpp */, + 9223C4921F0CA766009A94D7 /* CollisionComponent.h */, + 9203E9F11F0DE24000F9FFC2 /* Enemy.cpp */, + 9203E9F21F0DE24000F9FFC2 /* Enemy.h */, + 9223C4671F009428009A94D7 /* Game.cpp */, + 9223C4701F009428009A94D7 /* Game.h */, + 9223C4961F0DBD69009A94D7 /* Grid.cpp */, + 9223C4971F0DBD69009A94D7 /* Grid.h */, + 9223C4711F009428009A94D7 /* Main.cpp */, + 9223C4721F009428009A94D7 /* Math.cpp */, + 9223C4731F009428009A94D7 /* Math.h */, + 9223C48A1F0CA3CE009A94D7 /* MoveComponent.cpp */, + 9223C48C1F0CA3D4009A94D7 /* MoveComponent.h */, + 9203E9F41F0DF13600F9FFC2 /* NavComponent.cpp */, + 9203E9F51F0DF13600F9FFC2 /* NavComponent.h */, + 9206FDC71F140D40005078A2 /* Shader.cpp */, + 9206FDC81F140D40005078A2 /* Shader.h */, + 9223C4761F009428009A94D7 /* SpriteComponent.cpp */, + 9223C4771F009428009A94D7 /* SpriteComponent.h */, + 9206FDC41F140707005078A2 /* Texture.cpp */, + 9206FDC51F140707005078A2 /* Texture.h */, + 9223C48D1F0CA67A009A94D7 /* Tile.cpp */, + 9223C48E1F0CA67A009A94D7 /* Tile.h */, + 9203E9EE1F0DD69900F9FFC2 /* Tower.cpp */, + 9203E9EF1F0DD69900F9FFC2 /* Tower.h */, + 9206FDC31F13F7E8005078A2 /* Shaders */, + 92E46DF81B634EA30035CD21 /* Products */, + 92D324FA1B697389005A86C7 /* CoreFoundation.framework */, + 92E46E931B6353E50035CD21 /* OpenGL.framework */, + ); + sourceTree = ""; + }; + 92E46DF81B634EA30035CD21 /* Products */ = { + isa = PBXGroup; + children = ( + 92E46DF71B634EA30035CD21 /* Game-mac */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 92E46DF61B634EA30035CD21 /* Game-mac */ = { + isa = PBXNativeTarget; + buildConfigurationList = 92E46DFE1B634EA40035CD21 /* Build configuration list for PBXNativeTarget "Game-mac" */; + buildPhases = ( + 92E46DF31B634EA30035CD21 /* Sources */, + 92E46DF41B634EA30035CD21 /* Frameworks */, + 92E46EA11B63615B0035CD21 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Game-mac"; + productName = "Game-mac"; + productReference = 92E46DF71B634EA30035CD21 /* Game-mac */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 92E46DEF1B634EA30035CD21 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0830; + ORGANIZATIONNAME = "Sanjay Madhav"; + TargetAttributes = { + 92E46DF61B634EA30035CD21 = { + CreatedOnToolsVersion = 6.4; + }; + }; + }; + buildConfigurationList = 92E46DF21B634EA30035CD21 /* Build configuration list for PBXProject "Chapter6-mac" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 92E46DEE1B634EA30035CD21; + productRefGroup = 92E46DF81B634EA30035CD21 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 92E46DF61B634EA30035CD21 /* Game-mac */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXShellScriptBuildPhase section */ + 92E46EA11B63615B0035CD21 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if [ -d \"$BUILD_DIR/Debug\" ]; then\n cp \"$SRCROOT\"/../external/GLEW/lib/mac/*.dylib $BUILD_DIR/Debug\n cp \"$SRCROOT\"/../external/SDL/lib/mac/*.dylib $BUILD_DIR/Debug\nfi\n\nif [ -d \"$BUILD_DIR/Release\" ]; then\n cp \"$SRCROOT\"/../external/GLEW/lib/mac/*.dylib $BUILD_DIR/Release\n cp \"$SRCROOT\"/../external/SDL/lib/mac/*.dylib $BUILD_DIR/Release\nfi"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 92E46DF31B634EA30035CD21 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9223C4941F0CA766009A94D7 /* CollisionComponent.cpp in Sources */, + 9223C47D1F009428009A94D7 /* Main.cpp in Sources */, + 9223C47E1F009428009A94D7 /* Math.cpp in Sources */, + 9203E9F01F0DD69900F9FFC2 /* Tower.cpp in Sources */, + 9223C4781F009428009A94D7 /* Game.cpp in Sources */, + 9203E9F61F0DF13600F9FFC2 /* NavComponent.cpp in Sources */, + 9223C4801F009428009A94D7 /* SpriteComponent.cpp in Sources */, + 92CF0D791F3BBF140086A0F3 /* VertexArray.cpp in Sources */, + 9223C48B1F0CA3CE009A94D7 /* MoveComponent.cpp in Sources */, + 9203E9F31F0DE24000F9FFC2 /* Enemy.cpp in Sources */, + 9206FDC91F140D40005078A2 /* Shader.cpp in Sources */, + 9223C4791F009428009A94D7 /* Actor.cpp in Sources */, + 9203E9F91F0F12FE00F9FFC2 /* Bullet.cpp in Sources */, + 9223C4951F0CA766009A94D7 /* CircleComponent.cpp in Sources */, + 9223C47C1F009428009A94D7 /* Component.cpp in Sources */, + 9206FDC61F140707005078A2 /* Texture.cpp in Sources */, + 9223C48F1F0CA67A009A94D7 /* Tile.cpp in Sources */, + 9223C4981F0DBD69009A94D7 /* Grid.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 92E46DFC1B634EA40035CD21 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + 92E46DFD1B634EA40035CD21 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + }; + name = Release; + }; + 92E46DFF1B634EA40035CD21 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "c++14"; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_ENABLE_CPP_RTTI = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, + "$(SRCROOT)/../external/SDL/include", + "$(SRCROOT)/../external/GLEW/include", + "$(SRCROOT)/../external/SOIL/include", + ); + LIBRARY_SEARCH_PATHS = ( + "$(SRCROOT)/../external/GLEW/lib/mac", + "$(SRCROOT)/../external/SDL/lib/mac", + "$(SRCROOT)/../external/SOIL/lib/mac", + ); + OTHER_LDFLAGS = ( + "-lGLEW.2.1.0", + "-lSDL2-2.0.0", + "-lSDL2_mixer-2.0.0", + "-lSDL2_ttf-2.0.0", + "-lSOIL", + "-lSDL2_image-2.0.0", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 92E46E001B634EA40035CD21 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "c++14"; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_ENABLE_CPP_RTTI = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, + "$(SRCROOT)/../external/SDL/include", + "$(SRCROOT)/../external/GLEW/include", + "$(SRCROOT)/../external/SOIL/include", + ); + LIBRARY_SEARCH_PATHS = ( + "$(SRCROOT)/../external/GLEW/lib/mac", + "$(SRCROOT)/../external/SDL/lib/mac", + "$(SRCROOT)/../external/SOIL/lib/mac", + ); + OTHER_LDFLAGS = ( + "-lGLEW.2.1.0", + "-lSDL2-2.0.0", + "-lSDL2_mixer-2.0.0", + "-lSDL2_ttf-2.0.0", + "-lSOIL", + "-lSDL2_image-2.0.0", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 92E46DF21B634EA30035CD21 /* Build configuration list for PBXProject "Chapter6-mac" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 92E46DFC1B634EA40035CD21 /* Debug */, + 92E46DFD1B634EA40035CD21 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 92E46DFE1B634EA40035CD21 /* Build configuration list for PBXNativeTarget "Game-mac" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 92E46DFF1B634EA40035CD21 /* Debug */, + 92E46E001B634EA40035CD21 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 92E46DEF1B634EA30035CD21 /* Project object */; +} diff --git a/Chapter08/Chapter6-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Chapter08/Chapter6-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..57070e17 --- /dev/null +++ b/Chapter08/Chapter6-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Chapter08/Chapter6-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme b/Chapter08/Chapter6-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme new file mode 100644 index 00000000..2f114aa1 --- /dev/null +++ b/Chapter08/Chapter6-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter08/CircleComponent.cpp b/Chapter08/CircleComponent.cpp new file mode 100644 index 00000000..d41aab2c --- /dev/null +++ b/Chapter08/CircleComponent.cpp @@ -0,0 +1,40 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "CircleComponent.h" +#include "Actor.h" + +CircleComponent::CircleComponent(class Actor* owner) +:Component(owner) +,mRadius(0.0f) +{ + +} + +const Vector2& CircleComponent::GetCenter() const +{ + return mOwner->GetPosition(); +} + +float CircleComponent::GetRadius() const +{ + return mOwner->GetScale() * mRadius; +} + +bool Intersect(const CircleComponent& a, const CircleComponent& b) +{ + // Calculate distance squared + Vector2 diff = a.GetCenter() - b.GetCenter(); + float distSq = diff.LengthSq(); + + // Calculate sum of radii squared + float radiiSq = a.GetRadius() + b.GetRadius(); + radiiSq *= radiiSq; + + return distSq <= radiiSq; +} diff --git a/Chapter08/CircleComponent.h b/Chapter08/CircleComponent.h new file mode 100644 index 00000000..4eecb2a4 --- /dev/null +++ b/Chapter08/CircleComponent.h @@ -0,0 +1,26 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "Component.h" +#include "Math.h" + +class CircleComponent : public Component +{ +public: + CircleComponent(class Actor* owner); + + void SetRadius(float radius) { mRadius = radius; } + float GetRadius() const; + + const Vector2& GetCenter() const; +private: + float mRadius; +}; + +bool Intersect(const CircleComponent& a, const CircleComponent& b); diff --git a/Chapter08/Component.cpp b/Chapter08/Component.cpp new file mode 100644 index 00000000..c4ed432d --- /dev/null +++ b/Chapter08/Component.cpp @@ -0,0 +1,27 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "Component.h" +#include "Actor.h" + +Component::Component(Actor* owner, int updateOrder) + :mOwner(owner) + ,mUpdateOrder(updateOrder) +{ + // Add to actor's vector of components + mOwner->AddComponent(this); +} + +Component::~Component() +{ + mOwner->RemoveComponent(this); +} + +void Component::Update(float deltaTime) +{ +} diff --git a/Chapter08/Component.h b/Chapter08/Component.h new file mode 100644 index 00000000..e2be424b --- /dev/null +++ b/Chapter08/Component.h @@ -0,0 +1,33 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once +#include + +class Component +{ +public: + // Constructor + // (the lower the update order, the earlier the component updates) + Component(class Actor* owner, int updateOrder = 100); + // Destructor + virtual ~Component(); + // Update this component by delta time + virtual void Update(float deltaTime); + // Process input for this component + virtual void ProcessInput(const uint8_t* keyState) {} + // Called when world transform changes + virtual void OnUpdateWorldTransform() { } + + int GetUpdateOrder() const { return mUpdateOrder; } +protected: + // Owning actor + class Actor* mOwner; + // Update order of component + int mUpdateOrder; +}; diff --git a/Chapter08/Game.cpp b/Chapter08/Game.cpp new file mode 100644 index 00000000..e18e90a3 --- /dev/null +++ b/Chapter08/Game.cpp @@ -0,0 +1,375 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "Game.h" +#include +#include "Texture.h" +#include "VertexArray.h" +#include "Shader.h" +#include +#include "Actor.h" +#include "SpriteComponent.h" +#include "Actor.h" +#include "Ship.h" +#include "Asteroid.h" +#include "Random.h" + +Game::Game() +:mWindow(nullptr) +,mSpriteShader(nullptr) +,mIsRunning(true) +,mUpdatingActors(false) +{ + +} + +bool Game::Initialize() +{ + if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO) != 0) + { + SDL_Log("Unable to initialize SDL: %s", SDL_GetError()); + return false; + } + + // Set OpenGL attributes + // Use the core OpenGL profile + SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); + // Specify version 3.3 + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3); + // Request a color buffer with 8-bits per RGBA channel + SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8); + // Enable double buffering + SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); + // Force OpenGL to use hardware acceleration + SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1); + + mWindow = SDL_CreateWindow("Game Programming in C++ (Chapter 5)", 100, 100, + 1024, 768, SDL_WINDOW_OPENGL); + if (!mWindow) + { + SDL_Log("Failed to create window: %s", SDL_GetError()); + return false; + } + + // Create an OpenGL context + mContext = SDL_GL_CreateContext(mWindow); + + // Initialize GLEW + glewExperimental = GL_TRUE; + if (glewInit() != GLEW_OK) + { + SDL_Log("Failed to initialize GLEW."); + return false; + } + + // On some platforms, GLEW will emit a benign error code, + // so clear it + glGetError(); + + // Make sure we can create/compile shaders + if (!LoadShaders()) + { + SDL_Log("Failed to load shaders."); + return false; + } + + // Create quad for drawing sprites + CreateSpriteVerts(); + + LoadData(); + + mTicksCount = SDL_GetTicks(); + + return true; +} + +void Game::RunLoop() +{ + while (mIsRunning) + { + ProcessInput(); + UpdateGame(); + GenerateOutput(); + } +} + +void Game::ProcessInput() +{ + SDL_Event event; + while (SDL_PollEvent(&event)) + { + switch (event.type) + { + case SDL_QUIT: + mIsRunning = false; + break; + } + } + + const Uint8* keyState = SDL_GetKeyboardState(NULL); + if (keyState[SDL_SCANCODE_ESCAPE]) + { + mIsRunning = false; + } + + mUpdatingActors = true; + for (auto actor : mActors) + { + actor->ProcessInput(keyState); + } + mUpdatingActors = false; +} + +void Game::UpdateGame() +{ + // Compute delta time + // Wait until 16ms has elapsed since last frame + while (!SDL_TICKS_PASSED(SDL_GetTicks(), mTicksCount + 16)) + ; + + float deltaTime = (SDL_GetTicks() - mTicksCount) / 1000.0f; + if (deltaTime > 0.05f) + { + deltaTime = 0.05f; + } + mTicksCount = SDL_GetTicks(); + + // Update all actors + mUpdatingActors = true; + for (auto actor : mActors) + { + actor->Update(deltaTime); + } + mUpdatingActors = false; + + // Move any pending actors to mActors + for (auto pending : mPendingActors) + { + pending->ComputeWorldTransform(); + mActors.emplace_back(pending); + } + mPendingActors.clear(); + + // Add any dead actors to a temp vector + std::vector deadActors; + for (auto actor : mActors) + { + if (actor->GetState() == Actor::EDead) + { + deadActors.emplace_back(actor); + } + } + + // Delete dead actors (which removes them from mActors) + for (auto actor : deadActors) + { + delete actor; + } +} + +void Game::GenerateOutput() +{ + // Set the clear color to grey + glClearColor(0.86f, 0.86f, 0.86f, 1.0f); + // Clear the color buffer + glClear(GL_COLOR_BUFFER_BIT); + + // Draw all sprite components + // Enable alpha blending on the color buffer + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + // Set shader/vao as active + mSpriteShader->SetActive(); + mSpriteVerts->SetActive(); + for (auto sprite : mSprites) + { + sprite->Draw(mSpriteShader); + } + + // Swap the buffers + SDL_GL_SwapWindow(mWindow); +} + +bool Game::LoadShaders() +{ + mSpriteShader = new Shader(); + if (!mSpriteShader->Load("Shaders/Sprite.vert", "Shaders/Sprite.frag")) + { + return false; + } + + mSpriteShader->SetActive(); + // Set the view-projection matrix + Matrix4 viewProj = Matrix4::CreateSimpleViewProj(1024.f, 768.f); + mSpriteShader->SetMatrixUniform("uViewProj", viewProj); + return true; +} + +void Game::CreateSpriteVerts() +{ + float vertices[] = { + -0.5f, 0.5f, 0.f, 0.f, 0.f, // top left + 0.5f, 0.5f, 0.f, 1.f, 0.f, // top right + 0.5f, -0.5f, 0.f, 1.f, 1.f, // bottom right + -0.5f, -0.5f, 0.f, 0.f, 1.f // bottom left + }; + + unsigned int indices[] = { + 0, 1, 2, + 2, 3, 0 + }; + + mSpriteVerts = new VertexArray(vertices, 4, indices, 6); +} + +void Game::LoadData() +{ + // Create player's ship + mShip = new Ship(this); + mShip->SetRotation(Math::PiOver2); + + // Create asteroids + const int numAsteroids = 20; + for (int i = 0; i < numAsteroids; i++) + { + new Asteroid(this); + } +} + +void Game::UnloadData() +{ + // Delete actors + // Because ~Actor calls RemoveActor, have to use a different style loop + while (!mActors.empty()) + { + delete mActors.back(); + } + + // Destroy textures + for (auto i : mTextures) + { + i.second->Unload(); + delete i.second; + } + mTextures.clear(); +} + +Texture* Game::GetTexture(const std::string& fileName) +{ + Texture* tex = nullptr; + auto iter = mTextures.find(fileName); + if (iter != mTextures.end()) + { + tex = iter->second; + } + else + { + tex = new Texture(); + if (tex->Load(fileName)) + { + mTextures.emplace(fileName, tex); + } + else + { + delete tex; + tex = nullptr; + } + } + return tex; +} + +void Game::AddAsteroid(Asteroid* ast) +{ + mAsteroids.emplace_back(ast); +} + +void Game::RemoveAsteroid(Asteroid* ast) +{ + auto iter = std::find(mAsteroids.begin(), + mAsteroids.end(), ast); + if (iter != mAsteroids.end()) + { + mAsteroids.erase(iter); + } +} + +void Game::Shutdown() +{ + UnloadData(); + delete mSpriteVerts; + mSpriteShader->Unload(); + delete mSpriteShader; + SDL_GL_DeleteContext(mContext); + SDL_DestroyWindow(mWindow); + SDL_Quit(); +} + +void Game::AddActor(Actor* actor) +{ + // If we're updating actors, need to add to pending + if (mUpdatingActors) + { + mPendingActors.emplace_back(actor); + } + else + { + mActors.emplace_back(actor); + } +} + +void Game::RemoveActor(Actor* actor) +{ + // Is it in pending actors? + auto iter = std::find(mPendingActors.begin(), mPendingActors.end(), actor); + if (iter != mPendingActors.end()) + { + // Swap to end of vector and pop off (avoid erase copies) + std::iter_swap(iter, mPendingActors.end() - 1); + mPendingActors.pop_back(); + } + + // Is it in actors? + iter = std::find(mActors.begin(), mActors.end(), actor); + if (iter != mActors.end()) + { + // Swap to end of vector and pop off (avoid erase copies) + std::iter_swap(iter, mActors.end() - 1); + mActors.pop_back(); + } +} + +void Game::AddSprite(SpriteComponent* sprite) +{ + // Find the insertion point in the sorted vector + // (The first element with a higher draw order than me) + int myDrawOrder = sprite->GetDrawOrder(); + auto iter = mSprites.begin(); + for (; + iter != mSprites.end(); + ++iter) + { + if (myDrawOrder < (*iter)->GetDrawOrder()) + { + break; + } + } + + // Inserts element before position of iterator + mSprites.insert(iter, sprite); +} + +void Game::RemoveSprite(SpriteComponent* sprite) +{ + auto iter = std::find(mSprites.begin(), mSprites.end(), sprite); + mSprites.erase(iter); +} diff --git a/Chapter08/Game.h b/Chapter08/Game.h new file mode 100644 index 00000000..d5c22637 --- /dev/null +++ b/Chapter08/Game.h @@ -0,0 +1,71 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "SDL/SDL.h" +#include +#include +#include +#include "Math.h" + +class Game +{ +public: + Game(); + bool Initialize(); + void RunLoop(); + void Shutdown(); + + void AddActor(class Actor* actor); + void RemoveActor(class Actor* actor); + + void AddSprite(class SpriteComponent* sprite); + void RemoveSprite(class SpriteComponent* sprite); + + class Texture* GetTexture(const std::string& fileName); + + // Game-specific (add/remove asteroid) + void AddAsteroid(class Asteroid* ast); + void RemoveAsteroid(class Asteroid* ast); + std::vector& GetAsteroids() { return mAsteroids; } +private: + void ProcessInput(); + void UpdateGame(); + void GenerateOutput(); + bool LoadShaders(); + void CreateSpriteVerts(); + void LoadData(); + void UnloadData(); + + // Map of textures loaded + std::unordered_map mTextures; + + // All the actors in the game + std::vector mActors; + // Any pending actors + std::vector mPendingActors; + + // All the sprite components drawn + std::vector mSprites; + + // Sprite shader + class Shader* mSpriteShader; + // Sprite vertex array + class VertexArray* mSpriteVerts; + + SDL_Window* mWindow; + SDL_GLContext mContext; + Uint32 mTicksCount; + bool mIsRunning; + // Track if we're updating actors right now + bool mUpdatingActors; + + // Game-specific + class Ship* mShip; + std::vector mAsteroids; +}; diff --git a/Chapter08/Game.vcxproj b/Chapter08/Game.vcxproj new file mode 100644 index 00000000..d478a3d7 --- /dev/null +++ b/Chapter08/Game.vcxproj @@ -0,0 +1,146 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {BC508D87-495F-4554-932D-DD68388B63CC} + Win32Proj + Game + + + + Application + true + v141 + Unicode + + + Application + false + v141 + true + Unicode + + + + + + + + + + + + + true + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) + true + ..\external\SDL\include;..\external\GLEW\include;..\external\SOIL\include;%(AdditionalIncludeDirectories) + false + Sync + + + Console + true + ..\external\SDL\lib\win\x86;..\external\GLEW\lib\win\x86;..\external\SOIL\lib\win\x86;%(AdditionalLibraryDirectories) + opengl32.lib;SDL2.lib;SDL2main.lib;SDL2_ttf.lib;SDL2_mixer.lib;SDL2_image.lib;glew32.lib;SOIL.lib;%(AdditionalDependencies) + /NODEFAULTLIB:msvcrt.lib %(AdditionalOptions) + + + xcopy "$(ProjectDir)\..\external\SDL\lib\win\x86\*.dll" "$(OutDir)" /i /s /y +xcopy "$(ProjectDir)\..\external\GLEW\lib\win\x86\*.dll" "$(OutDir)" /i /s /y + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) + true + ..\external\SDL\include;..\external\GLEW\include;..\external\SOIL\include;%(AdditionalIncludeDirectories) + false + Sync + + + Console + true + true + true + ..\external\SDL\lib\win\x86;..\external\GLEW\lib\win\x86;..\external\SOIL\lib\win\x86;%(AdditionalLibraryDirectories) + opengl32.lib;SDL2.lib;SDL2main.lib;SDL2_ttf.lib;SDL2_mixer.lib;SDL2_image.lib;glew32.lib;SOIL.lib;%(AdditionalDependencies) + + + xcopy "$(ProjectDir)\..\external\SDL\lib\win\x86\*.dll" "$(OutDir)" /i /s /y +xcopy "$(ProjectDir)\..\external\GLEW\lib\win\x86\*.dll" "$(OutDir)" /i /s /y + + + + + + \ No newline at end of file diff --git a/Chapter08/Game.vcxproj.filters b/Chapter08/Game.vcxproj.filters new file mode 100644 index 00000000..e78491fe --- /dev/null +++ b/Chapter08/Game.vcxproj.filters @@ -0,0 +1,132 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {12a47348-9a6e-404a-8d7e-2ffa91eb59f6} + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Shaders + + + Shaders + + + Shaders + + + Shaders + + + Shaders + + + \ No newline at end of file diff --git a/Chapter08/InputComponent.cpp b/Chapter08/InputComponent.cpp new file mode 100644 index 00000000..148ffc95 --- /dev/null +++ b/Chapter08/InputComponent.cpp @@ -0,0 +1,47 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "InputComponent.h" +#include "Actor.h" + +InputComponent::InputComponent(class Actor* owner) +:MoveComponent(owner) +,mForwardKey(0) +,mBackKey(0) +,mClockwiseKey(0) +,mCounterClockwiseKey(0) +{ + +} + +void InputComponent::ProcessInput(const uint8_t* keyState) +{ + // Calculate forward speed for MoveComponent + float forwardSpeed = 0.0f; + if (keyState[mForwardKey]) + { + forwardSpeed += mMaxForwardSpeed; + } + if (keyState[mBackKey]) + { + forwardSpeed -= mMaxForwardSpeed; + } + SetForwardSpeed(forwardSpeed); + + // Calculate angular speed for MoveComponent + float angularSpeed = 0.0f; + if (keyState[mClockwiseKey]) + { + angularSpeed += mMaxAngularSpeed; + } + if (keyState[mCounterClockwiseKey]) + { + angularSpeed -= mMaxAngularSpeed; + } + SetAngularSpeed(angularSpeed); +} diff --git a/Chapter08/InputComponent.h b/Chapter08/InputComponent.h new file mode 100644 index 00000000..57b32ccb --- /dev/null +++ b/Chapter08/InputComponent.h @@ -0,0 +1,45 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "MoveComponent.h" +#include + +class InputComponent : public MoveComponent +{ +public: + // Lower update order to update first + InputComponent(class Actor* owner); + + void ProcessInput(const uint8_t* keyState) override; + + // Getters/setters for private variables + float GetMaxForward() const { return mMaxForwardSpeed; } + float GetMaxAngular() const { return mMaxAngularSpeed; } + int GetForwardKey() const { return mForwardKey; } + int GetBackKey() const { return mBackKey; } + int GetClockwiseKey() const { return mClockwiseKey; } + int GetCounterClockwiseKey() const { return mCounterClockwiseKey; } + + void SetMaxForwardSpeed(float speed) { mMaxForwardSpeed = speed; } + void SetMaxAngularSpeed(float speed) { mMaxAngularSpeed = speed; } + void SetForwardKey(int key) { mForwardKey = key; } + void SetBackKey(int key) { mBackKey = key; } + void SetClockwiseKey(int key) { mClockwiseKey = key; } + void SetCounterClockwiseKey(int key) { mCounterClockwiseKey = key; } +private: + // The maximum forward/angular speeds + float mMaxForwardSpeed; + float mMaxAngularSpeed; + // Keys for forward/back movement + int mForwardKey; + int mBackKey; + // Keys for angular movement + int mClockwiseKey; + int mCounterClockwiseKey; +}; diff --git a/Chapter08/InputSystem.cpp b/Chapter08/InputSystem.cpp new file mode 100644 index 00000000..ae38641f --- /dev/null +++ b/Chapter08/InputSystem.cpp @@ -0,0 +1,61 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "InputSystem.h" + +bool KeyboardState::GetKeyValue(SDL_Scancode code) const +{ + return mCurrState[code] == 1; +} + +ButtonState KeyboardState::GetKeyState(SDL_Scancode code) const +{ + if (mCurrState[code] == 0) + { + if (mPrevState[code] == 0) + { + return ENone; + } + else + { + return EReleased; + } + } + else // must be 1 + { + if (mPrevState[code] == 0) + { + return EPressed; + } + else + { + return EHeld; + } + } +} + +InputSystem::InputSystem() +{ +} + +bool InputSystem::Initialize() +{ + return true; +} + +void InputSystem::Shutdown() +{ +} + +void InputSystem::PrepareForUpdate() +{ +} + +void InputSystem::Update() +{ +} diff --git a/Chapter08/InputSystem.h b/Chapter08/InputSystem.h new file mode 100644 index 00000000..3a5c3507 --- /dev/null +++ b/Chapter08/InputSystem.h @@ -0,0 +1,54 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once +#include + +// The different button states +enum ButtonState +{ + ENone, + EPressed, + EReleased, + EHeld +}; + +// Helper for Keyboard input +class KeyboardState +{ +public: + friend class InputSystem; + bool GetKeyValue(SDL_Scancode code) const; + ButtonState GetKeyState(SDL_Scancode code) const; +private: + const Uint8* mCurrState; + const Uint8 mPrevState[SDL_NUM_SCANCODES]; +}; + +// Wrapper that contains current state of input +struct InputState +{ + KeyboardState Keyboard; +}; + +class InputSystem +{ +public: + InputSystem(); + bool Initialize(); + void Shutdown(); + + // Called right before SDL_PollEvents loop + void PrepareForUpdate(); + // Called after SDL_PollEvents loop + void Update(); + + const InputState& GetState() const { return mState; } +private: + InputState mState; +}; diff --git a/Chapter08/Laser.cpp b/Chapter08/Laser.cpp new file mode 100644 index 00000000..a03c1981 --- /dev/null +++ b/Chapter08/Laser.cpp @@ -0,0 +1,56 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "Laser.h" +#include "SpriteComponent.h" +#include "MoveComponent.h" +#include "Game.h" +#include "CircleComponent.h" +#include "Asteroid.h" + +Laser::Laser(Game* game) + :Actor(game) + ,mDeathTimer(1.0f) +{ + // Create a sprite component + SpriteComponent* sc = new SpriteComponent(this); + sc->SetTexture(game->GetTexture("Assets/Laser.png")); + + // Create a move component, and set a forward speed + MoveComponent* mc = new MoveComponent(this); + mc->SetForwardSpeed(800.0f); + + // Create a circle component (for collision) + mCircle = new CircleComponent(this); + mCircle->SetRadius(11.0f); +} + +void Laser::UpdateActor(float deltaTime) +{ + // If we run out of time, laser is dead + mDeathTimer -= deltaTime; + if (mDeathTimer <= 0.0f) + { + SetState(EDead); + } + else + { + // Do we intersect with an asteroid? + for (auto ast : GetGame()->GetAsteroids()) + { + if (Intersect(*mCircle, *(ast->GetCircle()))) + { + // The first asteroid we intersect with, + // set ourselves and the asteroid to dead + SetState(EDead); + ast->SetState(EDead); + break; + } + } + } +} diff --git a/Chapter08/Laser.h b/Chapter08/Laser.h new file mode 100644 index 00000000..f1afd638 --- /dev/null +++ b/Chapter08/Laser.h @@ -0,0 +1,20 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "Actor.h" +class Laser : public Actor +{ +public: + Laser(class Game* game); + + void UpdateActor(float deltaTime) override; +private: + class CircleComponent* mCircle; + float mDeathTimer; +}; diff --git a/Chapter08/Main.cpp b/Chapter08/Main.cpp new file mode 100644 index 00000000..22ea0c69 --- /dev/null +++ b/Chapter08/Main.cpp @@ -0,0 +1,21 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "Game.h" + +int main(int argc, char** argv) +{ + Game game; + bool success = game.Initialize(); + if (success) + { + game.RunLoop(); + } + game.Shutdown(); + return 0; +} diff --git a/Chapter08/Math.cpp b/Chapter08/Math.cpp new file mode 100644 index 00000000..fb40e095 --- /dev/null +++ b/Chapter08/Math.cpp @@ -0,0 +1,240 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "Math.h" + +const Vector2 Vector2::Zero(0.0f, 0.0f); +const Vector2 Vector2::UnitX(1.0f, 0.0f); +const Vector2 Vector2::UnitY(0.0f, 1.0f); +const Vector2 Vector2::NegUnitX(-1.0f, 0.0f); +const Vector2 Vector2::NegUnitY(0.0f, -1.0f); + +const Vector3 Vector3::Zero(0.0f, 0.0f, 0.f); +const Vector3 Vector3::UnitX(1.0f, 0.0f, 0.0f); +const Vector3 Vector3::UnitY(0.0f, 1.0f, 0.0f); +const Vector3 Vector3::UnitZ(0.0f, 0.0f, 1.0f); +const Vector3 Vector3::NegUnitX(-1.0f, 0.0f, 0.0f); +const Vector3 Vector3::NegUnitY(0.0f, -1.0f, 0.0f); +const Vector3 Vector3::NegUnitZ(0.0f, 0.0f, -1.0f); +const Vector3 Vector3::Infinity(Math::Infinity, Math::Infinity, Math::Infinity); +const Vector3 Vector3::NegInfinity(Math::NegInfinity, Math::NegInfinity, Math::NegInfinity); + +static float m3Ident[3][3] = +{ + { 1.0f, 0.0f, 0.0f }, + { 0.0f, 1.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f } +}; +const Matrix3 Matrix3::Identity(m3Ident); + +static float m4Ident[4][4] = +{ + { 1.0f, 0.0f, 0.0f, 0.0f }, + { 0.0f, 1.0f, 0.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f, 0.0f }, + { 0.0f, 0.0f, 0.0f, 1.0f } +}; + +const Matrix4 Matrix4::Identity(m4Ident); + +const Quaternion Quaternion::Identity(0.0f, 0.0f, 0.0f, 1.0f); + +Vector2 Vector2::Transform(const Vector2& vec, const Matrix3& mat, float w /*= 1.0f*/) +{ + Vector2 retVal; + retVal.x = vec.x * mat.mat[0][0] + vec.y * mat.mat[1][0] + w * mat.mat[2][0]; + retVal.y = vec.x * mat.mat[0][1] + vec.y * mat.mat[1][1] + w * mat.mat[2][1]; + //ignore w since we aren't returning a new value for it... + return retVal; +} + +Vector3 Vector3::Transform(const Vector3& vec, const Matrix4& mat, float w /*= 1.0f*/) +{ + Vector3 retVal; + retVal.x = vec.x * mat.mat[0][0] + vec.y * mat.mat[1][0] + + vec.z * mat.mat[2][0] + w * mat.mat[3][0]; + retVal.y = vec.x * mat.mat[0][1] + vec.y * mat.mat[1][1] + + vec.z * mat.mat[2][1] + w * mat.mat[3][1]; + retVal.z = vec.x * mat.mat[0][2] + vec.y * mat.mat[1][2] + + vec.z * mat.mat[2][2] + w * mat.mat[3][2]; + //ignore w since we aren't returning a new value for it... + return retVal; +} + +// This will transform the vector and renormalize the w component +Vector3 Vector3::TransformWithPerspDiv(const Vector3& vec, const Matrix4& mat, float w /*= 1.0f*/) +{ + Vector3 retVal; + retVal.x = vec.x * mat.mat[0][0] + vec.y * mat.mat[1][0] + + vec.z * mat.mat[2][0] + w * mat.mat[3][0]; + retVal.y = vec.x * mat.mat[0][1] + vec.y * mat.mat[1][1] + + vec.z * mat.mat[2][1] + w * mat.mat[3][1]; + retVal.z = vec.x * mat.mat[0][2] + vec.y * mat.mat[1][2] + + vec.z * mat.mat[2][2] + w * mat.mat[3][2]; + float transformedW = vec.x * mat.mat[0][3] + vec.y * mat.mat[1][3] + + vec.z * mat.mat[2][3] + w * mat.mat[3][3]; + if (!Math::NearZero(Math::Abs(transformedW))) + { + transformedW = 1.0f / transformedW; + retVal *= transformedW; + } + return retVal; +} + +// Transform a Vector3 by a quaternion +Vector3 Vector3::Transform(const Vector3& v, const Quaternion& q) +{ + // v + 2.0*cross(q.xyz, cross(q.xyz,v) + q.w*v); + Vector3 qv(q.x, q.y, q.z); + Vector3 retVal = v; + retVal += 2.0f * Vector3::Cross(qv, Vector3::Cross(qv, v) + q.w * v); + return retVal; +} + +void Matrix4::Invert() +{ + // Thanks slow math + float tmp[12]; /* temp array for pairs */ + float src[16]; /* array of transpose source matrix */ + float dst[16]; /* storage */ + float det; /* determinant */ + /* transpose matrix */ + + // row 1 to col 1 + src[0] = mat[0][0]; + src[4] = mat[0][1]; + src[8] = mat[0][2]; + src[12] = mat[0][3]; + + // row 2 to col 2 + src[1] = mat[1][0]; + src[5] = mat[1][1]; + src[9] = mat[1][2]; + src[13] = mat[1][3]; + + // row 3 to col 3 + src[2] = mat[2][0]; + src[6] = mat[2][1]; + src[10] = mat[2][2]; + src[14] = mat[2][3]; + + // row 4 to col 4 + src[3] = mat[3][0]; + src[7] = mat[3][1]; + src[11] = mat[3][2]; + src[15] = mat[3][3]; + + // for (int i = 0; i < 4; i++) { + // src[i] = mat[i*4]; + // src[i + 4] = mat[i*4 + 1]; + // src[i + 8] = mat[i*4 + 2]; + // src[i + 12] = mat[i*4 + 3]; + // } + /* calculate pairs for first 8 elements (cofactors) */ + tmp[0] = src[10] * src[15]; + tmp[1] = src[11] * src[14]; + tmp[2] = src[9] * src[15]; + tmp[3] = src[11] * src[13]; + tmp[4] = src[9] * src[14]; + tmp[5] = src[10] * src[13]; + tmp[6] = src[8] * src[15]; + tmp[7] = src[11] * src[12]; + tmp[8] = src[8] * src[14]; + tmp[9] = src[10] * src[12]; + tmp[10] = src[8] * src[13]; + tmp[11] = src[9] * src[12]; + /* calculate first 8 elements (cofactors) */ + dst[0] = tmp[0] * src[5] + tmp[3] * src[6] + tmp[4] * src[7]; + dst[0] -= tmp[1] * src[5] + tmp[2] * src[6] + tmp[5] * src[7]; + dst[1] = tmp[1] * src[4] + tmp[6] * src[6] + tmp[9] * src[7]; + dst[1] -= tmp[0] * src[4] + tmp[7] * src[6] + tmp[8] * src[7]; + dst[2] = tmp[2] * src[4] + tmp[7] * src[5] + tmp[10] * src[7]; + dst[2] -= tmp[3] * src[4] + tmp[6] * src[5] + tmp[11] * src[7]; + dst[3] = tmp[5] * src[4] + tmp[8] * src[5] + tmp[11] * src[6]; + dst[3] -= tmp[4] * src[4] + tmp[9] * src[5] + tmp[10] * src[6]; + dst[4] = tmp[1] * src[1] + tmp[2] * src[2] + tmp[5] * src[3]; + dst[4] -= tmp[0] * src[1] + tmp[3] * src[2] + tmp[4] * src[3]; + dst[5] = tmp[0] * src[0] + tmp[7] * src[2] + tmp[8] * src[3]; + dst[5] -= tmp[1] * src[0] + tmp[6] * src[2] + tmp[9] * src[3]; + dst[6] = tmp[3] * src[0] + tmp[6] * src[1] + tmp[11] * src[3]; + dst[6] -= tmp[2] * src[0] + tmp[7] * src[1] + tmp[10] * src[3]; + dst[7] = tmp[4] * src[0] + tmp[9] * src[1] + tmp[10] * src[2]; + dst[7] -= tmp[5] * src[0] + tmp[8] * src[1] + tmp[11] * src[2]; + /* calculate pairs for second 8 elements (cofactors) */ + tmp[0] = src[2] * src[7]; + tmp[1] = src[3] * src[6]; + tmp[2] = src[1] * src[7]; + tmp[3] = src[3] * src[5]; + tmp[4] = src[1] * src[6]; + tmp[5] = src[2] * src[5]; + tmp[6] = src[0] * src[7]; + tmp[7] = src[3] * src[4]; + tmp[8] = src[0] * src[6]; + tmp[9] = src[2] * src[4]; + tmp[10] = src[0] * src[5]; + tmp[11] = src[1] * src[4]; + /* calculate second 8 elements (cofactors) */ + dst[8] = tmp[0] * src[13] + tmp[3] * src[14] + tmp[4] * src[15]; + dst[8] -= tmp[1] * src[13] + tmp[2] * src[14] + tmp[5] * src[15]; + dst[9] = tmp[1] * src[12] + tmp[6] * src[14] + tmp[9] * src[15]; + dst[9] -= tmp[0] * src[12] + tmp[7] * src[14] + tmp[8] * src[15]; + dst[10] = tmp[2] * src[12] + tmp[7] * src[13] + tmp[10] * src[15]; + dst[10] -= tmp[3] * src[12] + tmp[6] * src[13] + tmp[11] * src[15]; + dst[11] = tmp[5] * src[12] + tmp[8] * src[13] + tmp[11] * src[14]; + dst[11] -= tmp[4] * src[12] + tmp[9] * src[13] + tmp[10] * src[14]; + dst[12] = tmp[2] * src[10] + tmp[5] * src[11] + tmp[1] * src[9]; + dst[12] -= tmp[4] * src[11] + tmp[0] * src[9] + tmp[3] * src[10]; + dst[13] = tmp[8] * src[11] + tmp[0] * src[8] + tmp[7] * src[10]; + dst[13] -= tmp[6] * src[10] + tmp[9] * src[11] + tmp[1] * src[8]; + dst[14] = tmp[6] * src[9] + tmp[11] * src[11] + tmp[3] * src[8]; + dst[14] -= tmp[10] * src[11] + tmp[2] * src[8] + tmp[7] * src[9]; + dst[15] = tmp[10] * src[10] + tmp[4] * src[8] + tmp[9] * src[9]; + dst[15] -= tmp[8] * src[9] + tmp[11] * src[10] + tmp[5] * src[8]; + /* calculate determinant */ + det = src[0] * dst[0] + src[1] * dst[1] + src[2] * dst[2] + src[3] * dst[3]; + /* calculate matrix inverse */ + det = 1 / det; + for (int j = 0; j < 16; j++) + dst[j] *= det; + + // Set it back + for (int i = 0; i < 4; i++) + { + for (int j = 0; j < 4; j++) + { + mat[i][j] = dst[i * 4 + j]; + } + } +} + +Matrix4 Matrix4::CreateFromQuaternion(const class Quaternion& q) +{ + float mat[4][4]; + + mat[0][0] = 1.0f - 2.0f * q.y * q.y - 2.0f * q.z * q.z; + mat[0][1] = 2.0f * q.x * q.y + 2.0f * q.w * q.z; + mat[0][2] = 2.0f * q.x * q.z - 2.0f * q.w * q.y; + mat[0][3] = 0.0f; + + mat[1][0] = 2.0f * q.x * q.y - 2.0f * q.w * q.z; + mat[1][1] = 1.0f - 2.0f * q.x * q.x - 2.0f * q.z * q.z; + mat[1][2] = 2.0f * q.y * q.z + 2.0f * q.w * q.x; + mat[1][3] = 0.0f; + + mat[2][0] = 2.0f * q.x * q.z + 2.0f * q.w * q.y; + mat[2][1] = 2.0f * q.y * q.z - 2.0f * q.w * q.x; + mat[2][2] = 1.0f - 2.0f * q.x * q.x - 2.0f * q.y * q.y; + mat[2][3] = 0.0f; + + mat[3][0] = 0.0f; + mat[3][1] = 0.0f; + mat[3][2] = 0.0f; + mat[3][3] = 1.0f; + + return Matrix4(mat); +} diff --git a/Chapter08/Math.h b/Chapter08/Math.h new file mode 100644 index 00000000..752963f1 --- /dev/null +++ b/Chapter08/Math.h @@ -0,0 +1,1033 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once + +#include +#include +#include + +namespace Math +{ + const float Pi = 3.1415926535f; + const float TwoPi = Pi * 2.0f; + const float PiOver2 = Pi / 2.0f; + const float Infinity = std::numeric_limits::infinity(); + const float NegInfinity = -std::numeric_limits::infinity(); + + inline float ToRadians(float degrees) + { + return degrees * Pi / 180.0f; + } + + inline float ToDegrees(float radians) + { + return radians * 180.0f / Pi; + } + + inline bool NearZero(float val, float epsilon = 0.001f) + { + if (fabs(val) <= epsilon) + { + return true; + } + else + { + return false; + } + } + + template + T Max(const T& a, const T& b) + { + return (a < b ? b : a); + } + + template + T Min(const T& a, const T& b) + { + return (a < b ? a : b); + } + + template + T Clamp(const T& value, const T& lower, const T& upper) + { + return Min(upper, Max(lower, value)); + } + + inline float Abs(float value) + { + return fabs(value); + } + + inline float Cos(float angle) + { + return cosf(angle); + } + + inline float Sin(float angle) + { + return sinf(angle); + } + + inline float Tan(float angle) + { + return tanf(angle); + } + + inline float Acos(float value) + { + return acosf(value); + } + + inline float Atan2(float y, float x) + { + return atan2f(y, x); + } + + inline float Cot(float angle) + { + return 1.0f / Tan(angle); + } + + inline float Lerp(float a, float b, float f) + { + return a + f * (b - a); + } + + inline float Sqrt(float value) + { + return sqrtf(value); + } + + inline float Fmod(float numer, float denom) + { + return fmod(numer, denom); + } +} + +// 2D Vector +class Vector2 +{ +public: + float x; + float y; + + Vector2() + :x(0.0f) + ,y(0.0f) + {} + + explicit Vector2(float inX, float inY) + :x(inX) + ,y(inY) + {} + + // Set both components in one line + void Set(float inX, float inY) + { + x = inX; + y = inY; + } + + // Vector addition (a + b) + friend Vector2 operator+(const Vector2& a, const Vector2& b) + { + return Vector2(a.x + b.x, a.y + b.y); + } + + // Vector subtraction (a - b) + friend Vector2 operator-(const Vector2& a, const Vector2& b) + { + return Vector2(a.x - b.x, a.y - b.y); + } + + // Component-wise multiplication + // (a.x * b.x, ...) + friend Vector2 operator*(const Vector2& a, const Vector2& b) + { + return Vector2(a.x * b.x, a.y * b.y); + } + + // Scalar multiplication + friend Vector2 operator*(const Vector2& vec, float scalar) + { + return Vector2(vec.x * scalar, vec.y * scalar); + } + + // Scalar multiplication + friend Vector2 operator*(float scalar, const Vector2& vec) + { + return Vector2(vec.x * scalar, vec.y * scalar); + } + + // Scalar *= + Vector2& operator*=(float scalar) + { + x *= scalar; + y *= scalar; + return *this; + } + + // Vector += + Vector2& operator+=(const Vector2& right) + { + x += right.x; + y += right.y; + return *this; + } + + // Vector -= + Vector2& operator-=(const Vector2& right) + { + x -= right.x; + y -= right.y; + return *this; + } + + // Length squared of vector + float LengthSq() const + { + return (x*x + y*y); + } + + // Length of vector + float Length() const + { + return (Math::Sqrt(LengthSq())); + } + + // Normalize this vector + void Normalize() + { + float length = Length(); + x /= length; + y /= length; + } + + // Normalize the provided vector + static Vector2 Normalize(const Vector2& vec) + { + Vector2 temp = vec; + temp.Normalize(); + return temp; + } + + // Dot product between two vectors (a dot b) + static float Dot(const Vector2& a, const Vector2& b) + { + return (a.x * b.x + a.y * b.y); + } + + // Lerp from A to B by f + static Vector2 Lerp(const Vector2& a, const Vector2& b, float f) + { + return Vector2(a + f * (b - a)); + } + + // Reflect V about (normalized) N + static Vector2 Reflect(const Vector2& v, const Vector2& n) + { + return v - 2.0f * Vector2::Dot(v, n) * n; + } + + // Transform vector by matrix + static Vector2 Transform(const Vector2& vec, const class Matrix3& mat, float w = 1.0f); + + static const Vector2 Zero; + static const Vector2 UnitX; + static const Vector2 UnitY; + static const Vector2 NegUnitX; + static const Vector2 NegUnitY; +}; + +// 3D Vector +class Vector3 +{ +public: + float x; + float y; + float z; + + Vector3() + :x(0.0f) + ,y(0.0f) + ,z(0.0f) + {} + + explicit Vector3(float inX, float inY, float inZ) + :x(inX) + ,y(inY) + ,z(inZ) + {} + + // Cast to a const float pointer + const float* GetAsFloatPtr() const + { + return reinterpret_cast(&x); + } + + // Set all three components in one line + void Set(float inX, float inY, float inZ) + { + x = inX; + y = inY; + z = inZ; + } + + // Vector addition (a + b) + friend Vector3 operator+(const Vector3& a, const Vector3& b) + { + return Vector3(a.x + b.x, a.y + b.y, a.z + b.z); + } + + // Vector subtraction (a - b) + friend Vector3 operator-(const Vector3& a, const Vector3& b) + { + return Vector3(a.x - b.x, a.y - b.y, a.z - b.z); + } + + // Component-wise multiplication + friend Vector3 operator*(const Vector3& left, const Vector3& right) + { + return Vector3(left.x * right.x, left.y * right.y, left.z * right.z); + } + + // Scalar multiplication + friend Vector3 operator*(const Vector3& vec, float scalar) + { + return Vector3(vec.x * scalar, vec.y * scalar, vec.z * scalar); + } + + // Scalar multiplication + friend Vector3 operator*(float scalar, const Vector3& vec) + { + return Vector3(vec.x * scalar, vec.y * scalar, vec.z * scalar); + } + + // Scalar *= + Vector3& operator*=(float scalar) + { + x *= scalar; + y *= scalar; + z *= scalar; + return *this; + } + + // Vector += + Vector3& operator+=(const Vector3& right) + { + x += right.x; + y += right.y; + z += right.z; + return *this; + } + + // Vector -= + Vector3& operator-=(const Vector3& right) + { + x -= right.x; + y -= right.y; + z -= right.z; + return *this; + } + + // Length squared of vector + float LengthSq() const + { + return (x*x + y*y + z*z); + } + + // Length of vector + float Length() const + { + return (Math::Sqrt(LengthSq())); + } + + // Normalize this vector + void Normalize() + { + float length = Length(); + x /= length; + y /= length; + z /= length; + } + + // Normalize the provided vector + static Vector3 Normalize(const Vector3& vec) + { + Vector3 temp = vec; + temp.Normalize(); + return temp; + } + + // Dot product between two vectors (a dot b) + static float Dot(const Vector3& a, const Vector3& b) + { + return (a.x * b.x + a.y * b.y + a.z * b.z); + } + + // Cross product between two vectors (a cross b) + static Vector3 Cross(const Vector3& a, const Vector3& b) + { + Vector3 temp; + temp.x = a.y * b.z - a.z * b.y; + temp.y = a.z * b.x - a.x * b.z; + temp.z = a.x * b.y - a.y * b.x; + return temp; + } + + // Lerp from A to B by f + static Vector3 Lerp(const Vector3& a, const Vector3& b, float f) + { + return Vector3(a + f * (b - a)); + } + + // Reflect V about (normalized) N + static Vector3 Reflect(const Vector3& v, const Vector3& n) + { + return v - 2.0f * Vector3::Dot(v, n) * n; + } + + static Vector3 Transform(const Vector3& vec, const class Matrix4& mat, float w = 1.0f); + // This will transform the vector and renormalize the w component + static Vector3 TransformWithPerspDiv(const Vector3& vec, const class Matrix4& mat, float w = 1.0f); + + // Transform a Vector3 by a quaternion + static Vector3 Transform(const Vector3& v, const class Quaternion& q); + + static const Vector3 Zero; + static const Vector3 UnitX; + static const Vector3 UnitY; + static const Vector3 UnitZ; + static const Vector3 NegUnitX; + static const Vector3 NegUnitY; + static const Vector3 NegUnitZ; + static const Vector3 Infinity; + static const Vector3 NegInfinity; +}; + +// 3x3 Matrix +class Matrix3 +{ +public: + float mat[3][3]; + + Matrix3() + { + *this = Matrix3::Identity; + } + + explicit Matrix3(float inMat[3][3]) + { + memcpy(mat, inMat, 9 * sizeof(float)); + } + + // Cast to a const float pointer + const float* GetAsFloatPtr() const + { + return reinterpret_cast(&mat[0][0]); + } + + // Matrix multiplication + friend Matrix3 operator*(const Matrix3& left, const Matrix3& right) + { + Matrix3 retVal; + // row 0 + retVal.mat[0][0] = + left.mat[0][0] * right.mat[0][0] + + left.mat[0][1] * right.mat[1][0] + + left.mat[0][2] * right.mat[2][0]; + + retVal.mat[0][1] = + left.mat[0][0] * right.mat[0][1] + + left.mat[0][1] * right.mat[1][1] + + left.mat[0][2] * right.mat[2][1]; + + retVal.mat[0][2] = + left.mat[0][0] * right.mat[0][2] + + left.mat[0][1] * right.mat[1][2] + + left.mat[0][2] * right.mat[2][2]; + + // row 1 + retVal.mat[1][0] = + left.mat[1][0] * right.mat[0][0] + + left.mat[1][1] * right.mat[1][0] + + left.mat[1][2] * right.mat[2][0]; + + retVal.mat[1][1] = + left.mat[1][0] * right.mat[0][1] + + left.mat[1][1] * right.mat[1][1] + + left.mat[1][2] * right.mat[2][1]; + + retVal.mat[1][2] = + left.mat[1][0] * right.mat[0][2] + + left.mat[1][1] * right.mat[1][2] + + left.mat[1][2] * right.mat[2][2]; + + // row 2 + retVal.mat[2][0] = + left.mat[2][0] * right.mat[0][0] + + left.mat[2][1] * right.mat[1][0] + + left.mat[2][2] * right.mat[2][0]; + + retVal.mat[2][1] = + left.mat[2][0] * right.mat[0][1] + + left.mat[2][1] * right.mat[1][1] + + left.mat[2][2] * right.mat[2][1]; + + retVal.mat[2][2] = + left.mat[2][0] * right.mat[0][2] + + left.mat[2][1] * right.mat[1][2] + + left.mat[2][2] * right.mat[2][2]; + + return retVal; + } + + Matrix3& operator*=(const Matrix3& right) + { + *this = *this * right; + return *this; + } + + // Create a scale matrix with x and y scales + static Matrix3 CreateScale(float xScale, float yScale) + { + float temp[3][3] = + { + { xScale, 0.0f, 0.0f }, + { 0.0f, yScale, 0.0f }, + { 0.0f, 0.0f, 1.0f }, + }; + return Matrix3(temp); + } + + static Matrix3 CreateScale(const Vector2& scaleVector) + { + return CreateScale(scaleVector.x, scaleVector.y); + } + + // Create a scale matrix with a uniform factor + static Matrix3 CreateScale(float scale) + { + return CreateScale(scale, scale); + } + + // Create a rotation matrix about the Z axis + // theta is in radians + static Matrix3 CreateRotation(float theta) + { + float temp[3][3] = + { + { Math::Cos(theta), Math::Sin(theta), 0.0f }, + { -Math::Sin(theta), Math::Cos(theta), 0.0f }, + { 0.0f, 0.0f, 1.0f }, + }; + return Matrix3(temp); + } + + // Create a translation matrix (on the xy-plane) + static Matrix3 CreateTranslation(const Vector2& trans) + { + float temp[3][3] = + { + { 1.0f, 0.0f, 0.0f }, + { 0.0f, 1.0f, 0.0f }, + { trans.x, trans.y, 1.0f }, + }; + return Matrix3(temp); + } + + static const Matrix3 Identity; +}; + +// 4x4 Matrix +class Matrix4 +{ +public: + float mat[4][4]; + + Matrix4() + { + *this = Matrix4::Identity; + } + + explicit Matrix4(float inMat[4][4]) + { + memcpy(mat, inMat, 16 * sizeof(float)); + } + + // Cast to a const float pointer + const float* GetAsFloatPtr() const + { + return reinterpret_cast(&mat[0][0]); + } + + // Matrix multiplication (a * b) + friend Matrix4 operator*(const Matrix4& a, const Matrix4& b) + { + Matrix4 retVal; + // row 0 + retVal.mat[0][0] = + a.mat[0][0] * b.mat[0][0] + + a.mat[0][1] * b.mat[1][0] + + a.mat[0][2] * b.mat[2][0] + + a.mat[0][3] * b.mat[3][0]; + + retVal.mat[0][1] = + a.mat[0][0] * b.mat[0][1] + + a.mat[0][1] * b.mat[1][1] + + a.mat[0][2] * b.mat[2][1] + + a.mat[0][3] * b.mat[3][1]; + + retVal.mat[0][2] = + a.mat[0][0] * b.mat[0][2] + + a.mat[0][1] * b.mat[1][2] + + a.mat[0][2] * b.mat[2][2] + + a.mat[0][3] * b.mat[3][2]; + + retVal.mat[0][3] = + a.mat[0][0] * b.mat[0][3] + + a.mat[0][1] * b.mat[1][3] + + a.mat[0][2] * b.mat[2][3] + + a.mat[0][3] * b.mat[3][3]; + + // row 1 + retVal.mat[1][0] = + a.mat[1][0] * b.mat[0][0] + + a.mat[1][1] * b.mat[1][0] + + a.mat[1][2] * b.mat[2][0] + + a.mat[1][3] * b.mat[3][0]; + + retVal.mat[1][1] = + a.mat[1][0] * b.mat[0][1] + + a.mat[1][1] * b.mat[1][1] + + a.mat[1][2] * b.mat[2][1] + + a.mat[1][3] * b.mat[3][1]; + + retVal.mat[1][2] = + a.mat[1][0] * b.mat[0][2] + + a.mat[1][1] * b.mat[1][2] + + a.mat[1][2] * b.mat[2][2] + + a.mat[1][3] * b.mat[3][2]; + + retVal.mat[1][3] = + a.mat[1][0] * b.mat[0][3] + + a.mat[1][1] * b.mat[1][3] + + a.mat[1][2] * b.mat[2][3] + + a.mat[1][3] * b.mat[3][3]; + + // row 2 + retVal.mat[2][0] = + a.mat[2][0] * b.mat[0][0] + + a.mat[2][1] * b.mat[1][0] + + a.mat[2][2] * b.mat[2][0] + + a.mat[2][3] * b.mat[3][0]; + + retVal.mat[2][1] = + a.mat[2][0] * b.mat[0][1] + + a.mat[2][1] * b.mat[1][1] + + a.mat[2][2] * b.mat[2][1] + + a.mat[2][3] * b.mat[3][1]; + + retVal.mat[2][2] = + a.mat[2][0] * b.mat[0][2] + + a.mat[2][1] * b.mat[1][2] + + a.mat[2][2] * b.mat[2][2] + + a.mat[2][3] * b.mat[3][2]; + + retVal.mat[2][3] = + a.mat[2][0] * b.mat[0][3] + + a.mat[2][1] * b.mat[1][3] + + a.mat[2][2] * b.mat[2][3] + + a.mat[2][3] * b.mat[3][3]; + + // row 3 + retVal.mat[3][0] = + a.mat[3][0] * b.mat[0][0] + + a.mat[3][1] * b.mat[1][0] + + a.mat[3][2] * b.mat[2][0] + + a.mat[3][3] * b.mat[3][0]; + + retVal.mat[3][1] = + a.mat[3][0] * b.mat[0][1] + + a.mat[3][1] * b.mat[1][1] + + a.mat[3][2] * b.mat[2][1] + + a.mat[3][3] * b.mat[3][1]; + + retVal.mat[3][2] = + a.mat[3][0] * b.mat[0][2] + + a.mat[3][1] * b.mat[1][2] + + a.mat[3][2] * b.mat[2][2] + + a.mat[3][3] * b.mat[3][2]; + + retVal.mat[3][3] = + a.mat[3][0] * b.mat[0][3] + + a.mat[3][1] * b.mat[1][3] + + a.mat[3][2] * b.mat[2][3] + + a.mat[3][3] * b.mat[3][3]; + + return retVal; + } + + Matrix4& operator*=(const Matrix4& right) + { + *this = *this * right; + return *this; + } + + // Invert the matrix - super slow + void Invert(); + + // Get the translation component of the matrix + Vector3 GetTranslation() const + { + return Vector3(mat[3][0], mat[3][1], mat[3][2]); + } + + // Get the X axis of the matrix (forward) + Vector3 GetXAxis() const + { + return Vector3::Normalize(Vector3(mat[0][0], mat[0][1], mat[0][2])); + } + + // Get the Y axis of the matrix (left) + Vector3 GetYAxis() const + { + return Vector3::Normalize(Vector3(mat[1][0], mat[1][1], mat[1][2])); + } + + // Get the Z axis of the matrix (up) + Vector3 GetZAxis() const + { + return Vector3::Normalize(Vector3(mat[2][0], mat[2][1], mat[2][2])); + } + + // Extract the scale component from the matrix + Vector3 GetScale() const + { + Vector3 retVal; + retVal.x = Vector3(mat[0][0], mat[0][1], mat[0][2]).Length(); + retVal.y = Vector3(mat[1][0], mat[1][1], mat[1][2]).Length(); + retVal.z = Vector3(mat[2][0], mat[2][1], mat[2][2]).Length(); + return retVal; + } + + // Create a scale matrix with x, y, and z scales + static Matrix4 CreateScale(float xScale, float yScale, float zScale) + { + float temp[4][4] = + { + { xScale, 0.0f, 0.0f, 0.0f }, + { 0.0f, yScale, 0.0f, 0.0f }, + { 0.0f, 0.0f, zScale, 0.0f }, + { 0.0f, 0.0f, 0.0f, 1.0f } + }; + return Matrix4(temp); + } + + static Matrix4 CreateScale(const Vector3& scaleVector) + { + return CreateScale(scaleVector.x, scaleVector.y, scaleVector.z); + } + + // Create a scale matrix with a uniform factor + static Matrix4 CreateScale(float scale) + { + return CreateScale(scale, scale, scale); + } + + // Rotation about x-axis + static Matrix4 CreateRotationX(float theta) + { + float temp[4][4] = + { + { 1.0f, 0.0f, 0.0f , 0.0f }, + { 0.0f, Math::Cos(theta), Math::Sin(theta), 0.0f }, + { 0.0f, -Math::Sin(theta), Math::Cos(theta), 0.0f }, + { 0.0f, 0.0f, 0.0f, 1.0f }, + }; + return Matrix4(temp); + } + + // Rotation about y-axis + static Matrix4 CreateRotationY(float theta) + { + float temp[4][4] = + { + { Math::Cos(theta), 0.0f, -Math::Sin(theta), 0.0f }, + { 0.0f, 1.0f, 0.0f, 0.0f }, + { Math::Sin(theta), 0.0f, Math::Cos(theta), 0.0f }, + { 0.0f, 0.0f, 0.0f, 1.0f }, + }; + return Matrix4(temp); + } + + // Rotation about z-axis + static Matrix4 CreateRotationZ(float theta) + { + float temp[4][4] = + { + { Math::Cos(theta), Math::Sin(theta), 0.0f, 0.0f }, + { -Math::Sin(theta), Math::Cos(theta), 0.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f, 0.0f }, + { 0.0f, 0.0f, 0.0f, 1.0f }, + }; + return Matrix4(temp); + } + + // Create a rotation matrix from a quaternion + static Matrix4 CreateFromQuaternion(const class Quaternion& q); + + static Matrix4 CreateTranslation(const Vector3& trans) + { + float temp[4][4] = + { + { 1.0f, 0.0f, 0.0f, 0.0f }, + { 0.0f, 1.0f, 0.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f, 0.0f }, + { trans.x, trans.y, trans.z, 1.0f } + }; + return Matrix4(temp); + } + + static Matrix4 CreateLookAt(const Vector3& eye, const Vector3& target, const Vector3& up) + { + Vector3 zaxis = Vector3::Normalize(target - eye); + Vector3 xaxis = Vector3::Normalize(Vector3::Cross(up, zaxis)); + Vector3 yaxis = Vector3::Normalize(Vector3::Cross(zaxis, xaxis)); + Vector3 trans; + trans.x = -Vector3::Dot(xaxis, eye); + trans.y = -Vector3::Dot(yaxis, eye); + trans.z = -Vector3::Dot(zaxis, eye); + + float temp[4][4] = + { + { xaxis.x, yaxis.x, zaxis.x, 0.0f }, + { xaxis.y, yaxis.y, zaxis.y, 0.0f }, + { xaxis.z, yaxis.z, zaxis.z, 0.0f }, + { trans.x, trans.y, trans.z, 1.0f } + }; + return Matrix4(temp); + } + + static Matrix4 CreateOrtho(float width, float height, float near, float far) + { + float temp[4][4] = + { + { 2.0f / width, 0.0f, 0.0f, 0.0f }, + { 0.0f, 2.0f / height, 0.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f / (far - near), 0.0f }, + { 0.0f, 0.0f, near / (near - far), 1.0f } + }; + return Matrix4(temp); + } + + static Matrix4 CreatePerspectiveFOV(float fovY, float width, float height, float near, float far) + { + float yScale = Math::Cot(fovY / 2.0f); + float xScale = yScale * height / width; + float temp[4][4] = + { + { xScale, 0.0f, 0.0f, 0.0f }, + { 0.0f, yScale, 0.0f, 0.0f }, + { 0.0f, 0.0f, far / (far - near), 1.0f }, + { 0.0f, 0.0f, -near * far / (far - near), 0.0f } + }; + return Matrix4(temp); + } + + // Create "Simple" View-Projection Matrix from Chapter 6 + static Matrix4 CreateSimpleViewProj(float width, float height) + { + float temp[4][4] = + { + { 2.0f/width, 0.0f, 0.0f, 0.0f }, + { 0.0f, 2.0f/height, 0.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f, 1.0f } + }; + return Matrix4(temp); + } + + static const Matrix4 Identity; +}; + +// (Unit) Quaternion +class Quaternion +{ +public: + float x; + float y; + float z; + float w; + + Quaternion() + { + *this = Quaternion::Identity; + } + + // This directly sets the quaternion components -- + // don't use for axis/angle + explicit Quaternion(float inX, float inY, float inZ, float inW) + { + Set(inX, inY, inZ, inW); + } + + // Construct the quaternion from an axis and angle + // It is assumed that axis is already normalized, + // and the angle is in radians + explicit Quaternion(const Vector3& axis, float angle) + { + float scalar = Math::Sin(angle / 2.0f); + x = axis.x * scalar; + y = axis.y * scalar; + z = axis.z * scalar; + w = Math::Cos(angle / 2.0f); + } + + // Directly set the internal components + void Set(float inX, float inY, float inZ, float inW) + { + x = inX; + y = inY; + z = inZ; + w = inW; + } + + void Conjugate() + { + x *= -1.0f; + y *= -1.0f; + z *= -1.0f; + } + + float LengthSq() const + { + return (x*x + y*y + z*z + w*w); + } + + float Length() const + { + return Math::Sqrt(LengthSq()); + } + + void Normalize() + { + float length = Length(); + x /= length; + y /= length; + z /= length; + w /= length; + } + + // Normalize the provided quaternion + static Quaternion Normalize(const Quaternion& q) + { + Quaternion retVal = q; + retVal.Normalize(); + return retVal; + } + + // Linear interpolation + static Quaternion Lerp(const Quaternion& a, const Quaternion& b, float f) + { + Quaternion retVal; + retVal.x = Math::Lerp(a.x, b.x, f); + retVal.y = Math::Lerp(a.y, b.y, f); + retVal.z = Math::Lerp(a.z, b.z, f); + retVal.w = Math::Lerp(a.w, b.w, f); + retVal.Normalize(); + return retVal; + } + + static float Dot(const Quaternion& a, const Quaternion& b) + { + return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w; + } + + // Spherical Linear Interpolation + static Quaternion Slerp(const Quaternion& a, const Quaternion& b, float f) + { + float rawCosm = Quaternion::Dot(a, b); + + float cosom = -rawCosm; + if (rawCosm >= 0.0f) + { + cosom = rawCosm; + } + + float scale0, scale1; + + if (cosom < 0.9999f) + { + const float omega = Math::Acos(cosom); + const float invSin = 1.f / Math::Sin(omega); + scale0 = Math::Sin((1.f - f) * omega) * invSin; + scale1 = Math::Sin(f * omega) * invSin; + } + else + { + // Use linear interpolation if the quaternions + // are collinear + scale0 = 1.0f - f; + scale1 = f; + } + + if (rawCosm < 0.0f) + { + scale1 = -scale1; + } + + Quaternion retVal; + retVal.x = scale0 * a.x + scale1 * b.x; + retVal.y = scale0 * a.y + scale1 * b.y; + retVal.z = scale0 * a.z + scale1 * b.z; + retVal.w = scale0 * a.w + scale1 * b.w; + retVal.Normalize(); + return retVal; + } + + // Concatenate + // Rotate by q FOLLOWED BY p + static Quaternion Concatenate(const Quaternion& q, const Quaternion& p) + { + Quaternion retVal; + + // Vector component is: + // ps * qv + qs * pv + pv x qv + Vector3 qv(q.x, q.y, q.z); + Vector3 pv(p.x, p.y, p.z); + Vector3 newVec = p.w * qv + q.w * pv + Vector3::Cross(pv, qv); + retVal.x = newVec.x; + retVal.y = newVec.y; + retVal.z = newVec.z; + + // Scalar component is: + // ps * qs - pv . qv + retVal.w = p.w * q.w - Vector3::Dot(pv, qv); + + return retVal; + } + + static const Quaternion Identity; +}; + +namespace Color +{ + static const Vector3 Black(0.0f, 0.0f, 0.0f); + static const Vector3 White(1.0f, 1.0f, 1.0f); + static const Vector3 Red(1.0f, 0.0f, 0.0f); + static const Vector3 Green(0.0f, 1.0f, 0.0f); + static const Vector3 Blue(0.0f, 0.0f, 1.0f); + static const Vector3 Yellow(1.0f, 1.0f, 0.0f); + static const Vector3 LightYellow(1.0f, 1.0f, 0.88f); + static const Vector3 LightBlue(0.68f, 0.85f, 0.9f); + static const Vector3 LightPink(1.0f, 0.71f, 0.76f); + static const Vector3 LightGreen(0.56f, 0.93f, 0.56f); +} diff --git a/Chapter08/MoveComponent.cpp b/Chapter08/MoveComponent.cpp new file mode 100644 index 00000000..c1a5d5b2 --- /dev/null +++ b/Chapter08/MoveComponent.cpp @@ -0,0 +1,41 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "MoveComponent.h" +#include "Actor.h" + +MoveComponent::MoveComponent(class Actor* owner, int updateOrder) +:Component(owner, updateOrder) +,mAngularSpeed(0.0f) +,mForwardSpeed(0.0f) +{ + +} + +void MoveComponent::Update(float deltaTime) +{ + if (!Math::NearZero(mAngularSpeed)) + { + float rot = mOwner->GetRotation(); + rot += mAngularSpeed * deltaTime; + mOwner->SetRotation(rot); + } + + if (!Math::NearZero(mForwardSpeed)) + { + Vector2 pos = mOwner->GetPosition(); + pos += mOwner->GetForward() * mForwardSpeed * deltaTime; + + // Screen wrapping (for asteroids) + if (pos.x < -512.0f) { pos.x = 510.0f; } + else if (pos.x > 512.0f) { pos.x = -510.0f; } + if (pos.y < -384.0f) { pos.y = 382.0f; } + else if (pos.y > 384.0f) { pos.y = -382.0f; } + mOwner->SetPosition(pos); + } +} diff --git a/Chapter08/MoveComponent.h b/Chapter08/MoveComponent.h new file mode 100644 index 00000000..def7d389 --- /dev/null +++ b/Chapter08/MoveComponent.h @@ -0,0 +1,26 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "Component.h" + +class MoveComponent : public Component +{ +public: + // Lower update order to update first + MoveComponent(class Actor* owner, int updateOrder = 10); + void Update(float deltaTime) override; + + float GetAngularSpeed() const { return mAngularSpeed; } + float GetForwardSpeed() const { return mForwardSpeed; } + void SetAngularSpeed(float speed) { mAngularSpeed = speed; } + void SetForwardSpeed(float speed) { mForwardSpeed = speed; } +private: + float mAngularSpeed; + float mForwardSpeed; +}; diff --git a/Chapter08/Random.cpp b/Chapter08/Random.cpp new file mode 100644 index 00000000..05a3a32a --- /dev/null +++ b/Chapter08/Random.cpp @@ -0,0 +1,51 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "Random.h" + +void Random::Init() +{ + std::random_device rd; + Random::Seed(rd()); +} + +void Random::Seed(unsigned int seed) +{ + sGenerator.seed(seed); +} + +float Random::GetFloat() +{ + return GetFloatRange(0.0f, 1.0f); +} + +float Random::GetFloatRange(float min, float max) +{ + std::uniform_real_distribution dist(min, max); + return dist(sGenerator); +} + +int Random::GetIntRange(int min, int max) +{ + std::uniform_int_distribution dist(min, max); + return dist(sGenerator); +} + +Vector2 Random::GetVector(const Vector2& min, const Vector2& max) +{ + Vector2 r = Vector2(GetFloat(), GetFloat()); + return min + (max - min) * r; +} + +Vector3 Random::GetVector(const Vector3& min, const Vector3& max) +{ + Vector3 r = Vector3(GetFloat(), GetFloat(), GetFloat()); + return min + (max - min) * r; +} + +std::mt19937 Random::sGenerator; diff --git a/Chapter08/Random.h b/Chapter08/Random.h new file mode 100644 index 00000000..3ae92fe5 --- /dev/null +++ b/Chapter08/Random.h @@ -0,0 +1,36 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once +#include +#include "Math.h" + +class Random +{ +public: + static void Init(); + + // Seed the generator with the specified int + // NOTE: You should generally not need to manually use this + static void Seed(unsigned int seed); + + // Get a float between 0.0f and 1.0f + static float GetFloat(); + + // Get a float from the specified range + static float GetFloatRange(float min, float max); + + // Get an int from the specified range + static int GetIntRange(int min, int max); + + // Get a random vector given the min/max bounds + static Vector2 GetVector(const Vector2& min, const Vector2& max); + static Vector3 GetVector(const Vector3& min, const Vector3& max); +private: + static std::mt19937 sGenerator; +}; diff --git a/Chapter08/Shader.cpp b/Chapter08/Shader.cpp new file mode 100644 index 00000000..e32c07a2 --- /dev/null +++ b/Chapter08/Shader.cpp @@ -0,0 +1,148 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "Shader.h" +#include "Texture.h" +#include +#include +#include + +Shader::Shader() + : mShaderProgram(0) + , mVertexShader(0) + , mFragShader(0) +{ + +} + +Shader::~Shader() +{ + +} + +bool Shader::Load(const std::string& vertName, const std::string& fragName) +{ + // Compile vertex and pixel shaders + if (!CompileShader(vertName, + GL_VERTEX_SHADER, + mVertexShader) || + !CompileShader(fragName, + GL_FRAGMENT_SHADER, + mFragShader)) + { + return false; + } + + // Now create a shader program that + // links together the vertex/frag shaders + mShaderProgram = glCreateProgram(); + glAttachShader(mShaderProgram, mVertexShader); + glAttachShader(mShaderProgram, mFragShader); + glLinkProgram(mShaderProgram); + + // Verify that the program linked successfully + if (!IsValidProgram()) + { + return false; + } + + return true; +} + +void Shader::Unload() +{ + // Delete the program/shaders + glDeleteProgram(mShaderProgram); + glDeleteShader(mVertexShader); + glDeleteShader(mFragShader); +} + +void Shader::SetActive() +{ + // Set this program as the active one + glUseProgram(mShaderProgram); +} + +void Shader::SetMatrixUniform(const char* name, const Matrix4& matrix) +{ + // Find the uniform by this name + GLuint loc = glGetUniformLocation(mShaderProgram, name); + // Send the matrix data to the uniform + glUniformMatrix4fv(loc, 1, GL_TRUE, matrix.GetAsFloatPtr()); +} + +bool Shader::CompileShader(const std::string& fileName, + GLenum shaderType, + GLuint& outShader) +{ + // Open file + std::ifstream shaderFile(fileName); + if (shaderFile.is_open()) + { + // Read all the text into a string + std::stringstream sstream; + sstream << shaderFile.rdbuf(); + std::string contents = sstream.str(); + const char* contentsChar = contents.c_str(); + + // Create a shader of the specified type + outShader = glCreateShader(shaderType); + // Set the source characters and try to compile + glShaderSource(outShader, 1, &(contentsChar), nullptr); + glCompileShader(outShader); + + if (!IsCompiled(outShader)) + { + SDL_Log("Failed to compile shader %s", fileName.c_str()); + return false; + } + } + else + { + SDL_Log("Shader file not found: %s", fileName.c_str()); + return false; + } + + return true; +} + +bool Shader::IsCompiled(GLuint shader) +{ + GLint status; + // Query the compile status + glGetShaderiv(shader, GL_COMPILE_STATUS, &status); + + if (status != GL_TRUE) + { + char buffer[512]; + memset(buffer, 0, 512); + glGetShaderInfoLog(shader, 511, nullptr, buffer); + SDL_Log("GLSL Compile Failed:\n%s", buffer); + return false; + } + + return true; +} + +bool Shader::IsValidProgram() +{ + + GLint status; + // Query the link status + glGetProgramiv(mShaderProgram, GL_LINK_STATUS, &status); + if (status != GL_TRUE) + { + char buffer[512]; + memset(buffer, 0, 512); + glGetProgramInfoLog(mShaderProgram, 511, nullptr, buffer); + SDL_Log("GLSL Link Status:\n%s", buffer); + return false; + } + + return true; +} diff --git a/Chapter08/Shader.h b/Chapter08/Shader.h new file mode 100644 index 00000000..2b0161c0 --- /dev/null +++ b/Chapter08/Shader.h @@ -0,0 +1,41 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once +#include +#include +#include "Math.h" + +class Shader +{ +public: + Shader(); + ~Shader(); + // Load the vertex/fragment shaders with the given names + bool Load(const std::string& vertName, const std::string& fragName); + void Unload(); + // Set this as the active shader program + void SetActive(); + // Sets a Matrix uniform + void SetMatrixUniform(const char* name, const Matrix4& matrix); +private: + // Tries to compile the specified shader + bool CompileShader(const std::string& fileName, + GLenum shaderType, + GLuint& outShader); + + // Tests whether shader compiled successfully + bool IsCompiled(GLuint shader); + // Tests whether vertex/fragment programs link + bool IsValidProgram(); +private: + // Store the shader object IDs + GLuint mVertexShader; + GLuint mFragShader; + GLuint mShaderProgram; +}; diff --git a/Chapter08/Shaders/Basic.frag b/Chapter08/Shaders/Basic.frag new file mode 100644 index 00000000..af9a33e5 --- /dev/null +++ b/Chapter08/Shaders/Basic.frag @@ -0,0 +1,20 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +// Request GLSL 3.3 +#version 330 + +// This corresponds to the output color +// to the color buffer +out vec4 outColor; + +void main() +{ + // RGBA of 100% blue, 100% opaque + outColor = vec4(0.0, 0.0, 1.0, 1.0); +} diff --git a/Chapter08/Shaders/Basic.vert b/Chapter08/Shaders/Basic.vert new file mode 100644 index 00000000..345b3c05 --- /dev/null +++ b/Chapter08/Shaders/Basic.vert @@ -0,0 +1,23 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +// Request GLSL 3.3 +#version 330 + +// This should correspond to the data stored +// for each vertex in the vertex buffer. +// For now, just a position. +in vec3 inPosition; + +void main() +{ + // The vertex shader needs to output a 4D + // coordinate. + // For now set the 4th coordinate to 1.0 + gl_Position = vec4(inPosition, 1.0); +} diff --git a/Chapter08/Shaders/Sprite.frag b/Chapter08/Shaders/Sprite.frag new file mode 100644 index 00000000..f48caf3d --- /dev/null +++ b/Chapter08/Shaders/Sprite.frag @@ -0,0 +1,25 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +// Request GLSL 3.3 +#version 330 + +// Tex coord input from vertex shader +in vec2 fragTexCoord; + +// This corresponds to the output color to the color buffer +out vec4 outColor; + +// This is used for the texture sampling +uniform sampler2D uTexture; + +void main() +{ + // Sample color from texture + outColor = texture(uTexture, fragTexCoord); +} diff --git a/Chapter08/Shaders/Sprite.vert b/Chapter08/Shaders/Sprite.vert new file mode 100644 index 00000000..ea0f396f --- /dev/null +++ b/Chapter08/Shaders/Sprite.vert @@ -0,0 +1,33 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +// Request GLSL 3.3 +#version 330 + +// Uniforms for world transform and view-proj +uniform mat4 uWorldTransform; +uniform mat4 uViewProj; + +// Attribute 0 is position, 1 is tex coords. +layout(location = 0) in vec3 inPosition; +layout(location = 1) in vec2 inTexCoord; + +// Add texture coordinate as output +out vec2 fragTexCoord; + +void main() +{ + // Convert position to homogeneous coordinates + vec4 pos = vec4(inPosition, 1.0); + // Transform position to world space, then clip space + gl_Position = pos * uWorldTransform * uViewProj; + + // Transform + // Pass along the texture coordinate to frag shader + fragTexCoord = inTexCoord; +} diff --git a/Chapter08/Shaders/Transform.vert b/Chapter08/Shaders/Transform.vert new file mode 100644 index 00000000..fc59d32e --- /dev/null +++ b/Chapter08/Shaders/Transform.vert @@ -0,0 +1,23 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +// Request GLSL 3.3 +#version 330 + +// Uniforms for world transform and view-proj +uniform mat4 uWorldTransform; +uniform mat4 uViewProj; + +// Vertex attributes +in vec3 inPosition; + +void main() +{ + vec4 pos = vec4(inPosition, 1.0); + gl_Position = pos * uWorldTransform * uViewProj; +} diff --git a/Chapter08/Ship.cpp b/Chapter08/Ship.cpp new file mode 100644 index 00000000..e5b236db --- /dev/null +++ b/Chapter08/Ship.cpp @@ -0,0 +1,50 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "Ship.h" +#include "SpriteComponent.h" +#include "InputComponent.h" +#include "Game.h" +#include "Laser.h" + +Ship::Ship(Game* game) + :Actor(game) + ,mLaserCooldown(0.0f) +{ + // Create a sprite component + SpriteComponent* sc = new SpriteComponent(this, 150); + sc->SetTexture(game->GetTexture("Assets/Ship.png")); + + // Create an input component and set keys/speed + InputComponent* ic = new InputComponent(this); + ic->SetForwardKey(SDL_SCANCODE_W); + ic->SetBackKey(SDL_SCANCODE_S); + ic->SetClockwiseKey(SDL_SCANCODE_A); + ic->SetCounterClockwiseKey(SDL_SCANCODE_D); + ic->SetMaxForwardSpeed(300.0f); + ic->SetMaxAngularSpeed(Math::TwoPi); +} + +void Ship::UpdateActor(float deltaTime) +{ + mLaserCooldown -= deltaTime; +} + +void Ship::ActorInput(const uint8_t* keyState) +{ + if (keyState[SDL_SCANCODE_SPACE] && mLaserCooldown <= 0.0f) + { + // Create a laser and set its position/rotation to mine + Laser* laser = new Laser(GetGame()); + laser->SetPosition(GetPosition()); + laser->SetRotation(GetRotation()); + + // Reset laser cooldown (half second) + mLaserCooldown = 0.5f; + } +} diff --git a/Chapter08/Ship.h b/Chapter08/Ship.h new file mode 100644 index 00000000..808639ff --- /dev/null +++ b/Chapter08/Ship.h @@ -0,0 +1,20 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "Actor.h" +class Ship : public Actor +{ +public: + Ship(class Game* game); + + void UpdateActor(float deltaTime) override; + void ActorInput(const uint8_t* keyState) override; +private: + float mLaserCooldown; +}; \ No newline at end of file diff --git a/Chapter08/SpriteComponent.cpp b/Chapter08/SpriteComponent.cpp new file mode 100644 index 00000000..d62b9840 --- /dev/null +++ b/Chapter08/SpriteComponent.cpp @@ -0,0 +1,60 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "SpriteComponent.h" +#include "Texture.h" +#include "Shader.h" +#include "Actor.h" +#include "Game.h" + +SpriteComponent::SpriteComponent(Actor* owner, int drawOrder) + :Component(owner) + ,mTexture(nullptr) + ,mDrawOrder(drawOrder) + ,mTexWidth(0) + ,mTexHeight(0) +{ + mOwner->GetGame()->AddSprite(this); +} + +SpriteComponent::~SpriteComponent() +{ + mOwner->GetGame()->RemoveSprite(this); +} + +void SpriteComponent::Draw(Shader* shader) +{ + if (mTexture) + { + // Scale the quad by the width/height of texture + Matrix4 scaleMat = Matrix4::CreateScale( + static_cast(mTexWidth), + static_cast(mTexHeight), + 1.0f); + + Matrix4 world = scaleMat * mOwner->GetWorldTransform(); + + // Since all sprites use the same shader/vertices, + // the game first sets them active before any sprite draws + + // Set world transform + shader->SetMatrixUniform("uWorldTransform", world); + // Set current texture + mTexture->SetActive(); + // Draw quad + glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, nullptr); + } +} + +void SpriteComponent::SetTexture(Texture* texture) +{ + mTexture = texture; + // Set width/height + mTexWidth = texture->GetWidth(); + mTexHeight = texture->GetHeight(); +} diff --git a/Chapter08/SpriteComponent.h b/Chapter08/SpriteComponent.h new file mode 100644 index 00000000..6c5642f2 --- /dev/null +++ b/Chapter08/SpriteComponent.h @@ -0,0 +1,30 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once +#include "Component.h" +#include "SDL/SDL.h" +class SpriteComponent : public Component +{ +public: + // (Lower draw order corresponds with further back) + SpriteComponent(class Actor* owner, int drawOrder = 100); + ~SpriteComponent(); + + virtual void Draw(class Shader* shader); + virtual void SetTexture(class Texture* texture); + + int GetDrawOrder() const { return mDrawOrder; } + int GetTexHeight() const { return mTexHeight; } + int GetTexWidth() const { return mTexWidth; } +protected: + class Texture* mTexture; + int mDrawOrder; + int mTexWidth; + int mTexHeight; +}; diff --git a/Chapter08/Texture.cpp b/Chapter08/Texture.cpp new file mode 100644 index 00000000..7d0dbd3e --- /dev/null +++ b/Chapter08/Texture.cpp @@ -0,0 +1,69 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "Texture.h" +#include +#include +#include + +Texture::Texture() +:mTextureID(0) +,mWidth(0) +,mHeight(0) +{ + +} + +Texture::~Texture() +{ + +} + +bool Texture::Load(const std::string& fileName) +{ + int channels = 0; + + unsigned char* image = SOIL_load_image(fileName.c_str(), + &mWidth, &mHeight, &channels, SOIL_LOAD_AUTO); + + if (image == nullptr) + { + SDL_Log("SOIL failed to load image %s: %s", fileName.c_str(), SOIL_last_result()); + return false; + } + + int format = GL_RGB; + if (channels == 4) + { + format = GL_RGBA; + } + + glGenTextures(1, &mTextureID); + glBindTexture(GL_TEXTURE_2D, mTextureID); + + glTexImage2D(GL_TEXTURE_2D, 0, format, mWidth, mHeight, 0, format, + GL_UNSIGNED_BYTE, image); + + SOIL_free_image_data(image); + + // Enable bilinear filtering + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + + return true; +} + +void Texture::Unload() +{ + glDeleteTextures(1, &mTextureID); +} + +void Texture::SetActive() +{ + glBindTexture(GL_TEXTURE_2D, mTextureID); +} diff --git a/Chapter08/Texture.h b/Chapter08/Texture.h new file mode 100644 index 00000000..ed12b0dc --- /dev/null +++ b/Chapter08/Texture.h @@ -0,0 +1,30 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include + +class Texture +{ +public: + Texture(); + ~Texture(); + + bool Load(const std::string& fileName); + void Unload(); + + void SetActive(); + + int GetWidth() const { return mWidth; } + int GetHeight() const { return mHeight; } +private: + // OpenGL ID of this texture + unsigned int mTextureID; + // Width/height of the texture + int mWidth; + int mHeight; +}; diff --git a/Chapter08/VertexArray.cpp b/Chapter08/VertexArray.cpp new file mode 100644 index 00000000..c7bff446 --- /dev/null +++ b/Chapter08/VertexArray.cpp @@ -0,0 +1,51 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#include "VertexArray.h" +#include + +VertexArray::VertexArray(const float* verts, unsigned int numVerts, + const unsigned int* indices, unsigned int numIndices) + :mNumVerts(numVerts) + ,mNumIndices(numIndices) +{ + // Create vertex array + glGenVertexArrays(1, &mVertexArray); + glBindVertexArray(mVertexArray); + + // Create vertex buffer + glGenBuffers(1, &mVertexBuffer); + glBindBuffer(GL_ARRAY_BUFFER, mVertexBuffer); + glBufferData(GL_ARRAY_BUFFER, numVerts * 5 * sizeof(float), verts, GL_STATIC_DRAW); + + // Create index buffer + glGenBuffers(1, &mIndexBuffer); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mIndexBuffer); + glBufferData(GL_ELEMENT_ARRAY_BUFFER, numIndices * sizeof(unsigned int), indices, GL_STATIC_DRAW); + + // Specify the vertex attributes + // (For now, assume one vertex format) + // Position is 3 floats starting at offset 0 + glEnableVertexAttribArray(0); + glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 5, 0); + glEnableVertexAttribArray(1); + glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 5, + reinterpret_cast(sizeof(float) * 3)); +} + +VertexArray::~VertexArray() +{ + glDeleteBuffers(1, &mVertexBuffer); + glDeleteBuffers(1, &mIndexBuffer); + glDeleteVertexArrays(1, &mVertexArray); +} + +void VertexArray::SetActive() +{ + glBindVertexArray(mVertexArray); +} diff --git a/Chapter08/VertexArray.h b/Chapter08/VertexArray.h new file mode 100644 index 00000000..9f2c3e9b --- /dev/null +++ b/Chapter08/VertexArray.h @@ -0,0 +1,33 @@ +// ---------------------------------------------------------------- +// From Game Programming in C++ by Sanjay Madhav +// Copyright (C) 2017 Sanjay Madhav. All rights reserved. +// +// Released under the BSD License +// See LICENSE in root directory for full details. +// ---------------------------------------------------------------- + +#pragma once +class VertexArray +{ +public: + VertexArray(const float* verts, unsigned int numVerts, + const unsigned int* indices, unsigned int numIndices); + ~VertexArray(); + + // Activate this vertex array (so we can draw it) + void SetActive(); + + unsigned int GetNumIndices() const { return mNumIndices; } + unsigned int GetNumVerts() const { return mNumVerts; } +private: + // How many vertices in the vertex buffer? + unsigned int mNumVerts; + // How many indices in the index buffer + unsigned int mNumIndices; + // OpenGL ID of the vertex buffer + unsigned int mVertexBuffer; + // OpenGL ID of the index buffer + unsigned int mIndexBuffer; + // OpenGL ID of the vertex array object + unsigned int mVertexArray; +}; \ No newline at end of file From 59edad40f33be9d247bab1007d38d496668d9206 Mon Sep 17 00:00:00 2001 From: Sanjay Madhav Date: Tue, 28 Nov 2017 23:15:53 -0800 Subject: [PATCH 28/40] Keyboard --- Chapter08/Actor.cpp | 8 ++++---- Chapter08/Actor.h | 4 ++-- Chapter08/Component.h | 2 +- Chapter08/Game.cpp | 25 +++++++++++++++++++++---- Chapter08/Game.h | 3 +++ Chapter08/InputComponent.cpp | 11 ++++++----- Chapter08/InputComponent.h | 2 +- Chapter08/InputSystem.cpp | 29 +++++++++++++++++++---------- Chapter08/InputSystem.h | 10 ++++++---- Chapter08/Ship.cpp | 6 ++++-- Chapter08/Ship.h | 2 +- 11 files changed, 68 insertions(+), 34 deletions(-) diff --git a/Chapter08/Actor.cpp b/Chapter08/Actor.cpp index 738d508f..511c97ec 100644 --- a/Chapter08/Actor.cpp +++ b/Chapter08/Actor.cpp @@ -58,21 +58,21 @@ void Actor::UpdateActor(float deltaTime) { } -void Actor::ProcessInput(const uint8_t* keyState) +void Actor::ProcessInput(const struct InputState& state) { if (mState == EActive) { // First process input for components for (auto comp : mComponents) { - comp->ProcessInput(keyState); + comp->ProcessInput(state); } - ActorInput(keyState); + ActorInput(state); } } -void Actor::ActorInput(const uint8_t* keyState) +void Actor::ActorInput(const struct InputState& state) { } diff --git a/Chapter08/Actor.h b/Chapter08/Actor.h index 7a41bd47..38e28db3 100644 --- a/Chapter08/Actor.h +++ b/Chapter08/Actor.h @@ -32,9 +32,9 @@ class Actor virtual void UpdateActor(float deltaTime); // ProcessInput function called from Game (not overridable) - void ProcessInput(const uint8_t* keyState); + void ProcessInput(const struct InputState& state); // Any actor-specific input code (overridable) - virtual void ActorInput(const uint8_t* keyState); + virtual void ActorInput(const struct InputState& state); // Getters/setters const Vector2& GetPosition() const { return mPosition; } diff --git a/Chapter08/Component.h b/Chapter08/Component.h index e2be424b..a8174728 100644 --- a/Chapter08/Component.h +++ b/Chapter08/Component.h @@ -20,7 +20,7 @@ class Component // Update this component by delta time virtual void Update(float deltaTime); // Process input for this component - virtual void ProcessInput(const uint8_t* keyState) {} + virtual void ProcessInput(const struct InputState& state) {} // Called when world transform changes virtual void OnUpdateWorldTransform() { } diff --git a/Chapter08/Game.cpp b/Chapter08/Game.cpp index e18e90a3..1085a0f9 100644 --- a/Chapter08/Game.cpp +++ b/Chapter08/Game.cpp @@ -18,6 +18,7 @@ #include "Ship.h" #include "Asteroid.h" #include "Random.h" +#include "InputSystem.h" Game::Game() :mWindow(nullptr) @@ -25,7 +26,6 @@ Game::Game() ,mIsRunning(true) ,mUpdatingActors(false) { - } bool Game::Initialize() @@ -59,6 +59,14 @@ bool Game::Initialize() SDL_Log("Failed to create window: %s", SDL_GetError()); return false; } + + // Initialize input system + mInputSystem = new InputSystem(); + if (!mInputSystem->Initialize()) + { + SDL_Log("Failed to initialize input system"); + return false; + } // Create an OpenGL context mContext = SDL_GL_CreateContext(mWindow); @@ -104,6 +112,8 @@ void Game::RunLoop() void Game::ProcessInput() { + mInputSystem->PrepareForUpdate(); + SDL_Event event; while (SDL_PollEvent(&event)) { @@ -114,9 +124,12 @@ void Game::ProcessInput() break; } } + + mInputSystem->Update(); + const InputState& state = mInputSystem->GetState(); - const Uint8* keyState = SDL_GetKeyboardState(NULL); - if (keyState[SDL_SCANCODE_ESCAPE]) + if (state.Keyboard.GetKeyState(SDL_SCANCODE_ESCAPE) + == EReleased) { mIsRunning = false; } @@ -124,7 +137,7 @@ void Game::ProcessInput() mUpdatingActors = true; for (auto actor : mActors) { - actor->ProcessInput(keyState); + actor->ProcessInput(state); } mUpdatingActors = false; } @@ -306,6 +319,10 @@ void Game::RemoveAsteroid(Asteroid* ast) void Game::Shutdown() { UnloadData(); + + mInputSystem->Shutdown(); + delete mInputSystem; + delete mSpriteVerts; mSpriteShader->Unload(); delete mSpriteShader; diff --git a/Chapter08/Game.h b/Chapter08/Game.h index d5c22637..6c9595b5 100644 --- a/Chapter08/Game.h +++ b/Chapter08/Game.h @@ -47,6 +47,9 @@ class Game // All the actors in the game std::vector mActors; + + class InputSystem* mInputSystem; + // Any pending actors std::vector mPendingActors; diff --git a/Chapter08/InputComponent.cpp b/Chapter08/InputComponent.cpp index 148ffc95..79dbf666 100644 --- a/Chapter08/InputComponent.cpp +++ b/Chapter08/InputComponent.cpp @@ -8,6 +8,7 @@ #include "InputComponent.h" #include "Actor.h" +#include "InputSystem.h" InputComponent::InputComponent(class Actor* owner) :MoveComponent(owner) @@ -19,15 +20,15 @@ InputComponent::InputComponent(class Actor* owner) } -void InputComponent::ProcessInput(const uint8_t* keyState) +void InputComponent::ProcessInput(const InputState& state) { // Calculate forward speed for MoveComponent float forwardSpeed = 0.0f; - if (keyState[mForwardKey]) + if (state.Keyboard.GetKeyValue(mForwardKey)) { forwardSpeed += mMaxForwardSpeed; } - if (keyState[mBackKey]) + if (state.Keyboard.GetKeyValue(mBackKey)) { forwardSpeed -= mMaxForwardSpeed; } @@ -35,11 +36,11 @@ void InputComponent::ProcessInput(const uint8_t* keyState) // Calculate angular speed for MoveComponent float angularSpeed = 0.0f; - if (keyState[mClockwiseKey]) + if (state.Keyboard.GetKeyValue(mClockwiseKey)) { angularSpeed += mMaxAngularSpeed; } - if (keyState[mCounterClockwiseKey]) + if (state.Keyboard.GetKeyValue(mCounterClockwiseKey)) { angularSpeed -= mMaxAngularSpeed; } diff --git a/Chapter08/InputComponent.h b/Chapter08/InputComponent.h index 57b32ccb..dc5de17e 100644 --- a/Chapter08/InputComponent.h +++ b/Chapter08/InputComponent.h @@ -16,7 +16,7 @@ class InputComponent : public MoveComponent // Lower update order to update first InputComponent(class Actor* owner); - void ProcessInput(const uint8_t* keyState) override; + void ProcessInput(const struct InputState& state) override; // Getters/setters for private variables float GetMaxForward() const { return mMaxForwardSpeed; } diff --git a/Chapter08/InputSystem.cpp b/Chapter08/InputSystem.cpp index ae38641f..9e5fe81b 100644 --- a/Chapter08/InputSystem.cpp +++ b/Chapter08/InputSystem.cpp @@ -7,17 +7,19 @@ // ---------------------------------------------------------------- #include "InputSystem.h" +#include +#include -bool KeyboardState::GetKeyValue(SDL_Scancode code) const +bool KeyboardState::GetKeyValue(int keyCode) const { - return mCurrState[code] == 1; + return mCurrState[keyCode] == 1; } -ButtonState KeyboardState::GetKeyState(SDL_Scancode code) const +ButtonState KeyboardState::GetKeyState(int keyCode) const { - if (mCurrState[code] == 0) + if (mCurrState[keyCode] == 0) { - if (mPrevState[code] == 0) + if (mPrevState[keyCode] == 0) { return ENone; } @@ -28,7 +30,7 @@ ButtonState KeyboardState::GetKeyState(SDL_Scancode code) const } else // must be 1 { - if (mPrevState[code] == 0) + if (mPrevState[keyCode] == 0) { return EPressed; } @@ -39,12 +41,14 @@ ButtonState KeyboardState::GetKeyState(SDL_Scancode code) const } } -InputSystem::InputSystem() -{ -} - bool InputSystem::Initialize() { + // Assign current state pointer + mState.Keyboard.mCurrState = SDL_GetKeyboardState(NULL); + // Clear previous state memory + memset(mState.Keyboard.mPrevState, 0, + SDL_NUM_SCANCODES); + return true; } @@ -54,6 +58,11 @@ void InputSystem::Shutdown() void InputSystem::PrepareForUpdate() { + // Copy current state to previous + // Keyboard + memcpy(mState.Keyboard.mPrevState, + mState.Keyboard.mCurrState, + SDL_NUM_SCANCODES); } void InputSystem::Update() diff --git a/Chapter08/InputSystem.h b/Chapter08/InputSystem.h index 3a5c3507..a326669e 100644 --- a/Chapter08/InputSystem.h +++ b/Chapter08/InputSystem.h @@ -22,12 +22,15 @@ enum ButtonState class KeyboardState { public: + // Friend so InputSystem can easily update it friend class InputSystem; - bool GetKeyValue(SDL_Scancode code) const; - ButtonState GetKeyState(SDL_Scancode code) const; + // Get just the boolean true/false value of key + bool GetKeyValue(int keyCode) const; + // Get a state based on current and previous frame + ButtonState GetKeyState(int keyCode) const; private: const Uint8* mCurrState; - const Uint8 mPrevState[SDL_NUM_SCANCODES]; + Uint8 mPrevState[SDL_NUM_SCANCODES]; }; // Wrapper that contains current state of input @@ -39,7 +42,6 @@ struct InputState class InputSystem { public: - InputSystem(); bool Initialize(); void Shutdown(); diff --git a/Chapter08/Ship.cpp b/Chapter08/Ship.cpp index e5b236db..66b563ec 100644 --- a/Chapter08/Ship.cpp +++ b/Chapter08/Ship.cpp @@ -11,6 +11,7 @@ #include "InputComponent.h" #include "Game.h" #include "Laser.h" +#include "InputSystem.h" Ship::Ship(Game* game) :Actor(game) @@ -35,9 +36,10 @@ void Ship::UpdateActor(float deltaTime) mLaserCooldown -= deltaTime; } -void Ship::ActorInput(const uint8_t* keyState) +void Ship::ActorInput(const InputState& state) { - if (keyState[SDL_SCANCODE_SPACE] && mLaserCooldown <= 0.0f) + if (state.Keyboard.GetKeyValue(SDL_SCANCODE_SPACE) + && mLaserCooldown <= 0.0f) { // Create a laser and set its position/rotation to mine Laser* laser = new Laser(GetGame()); diff --git a/Chapter08/Ship.h b/Chapter08/Ship.h index 808639ff..4b506c2d 100644 --- a/Chapter08/Ship.h +++ b/Chapter08/Ship.h @@ -14,7 +14,7 @@ class Ship : public Actor Ship(class Game* game); void UpdateActor(float deltaTime) override; - void ActorInput(const uint8_t* keyState) override; + void ActorInput(const struct InputState& state) override; private: float mLaserCooldown; }; \ No newline at end of file From aff6581ba11d6e533ee763e48ab62117a6f38181 Mon Sep 17 00:00:00 2001 From: Sanjay Madhav Date: Wed, 29 Nov 2017 00:27:43 -0800 Subject: [PATCH 29/40] Basic mouse stuffs --- Chapter08/InputSystem.cpp | 52 ++++++++++++++++++++++++++++++++++++--- Chapter08/InputSystem.h | 24 +++++++++++++++++- 2 files changed, 71 insertions(+), 5 deletions(-) diff --git a/Chapter08/InputSystem.cpp b/Chapter08/InputSystem.cpp index 9e5fe81b..f4bc4a4c 100644 --- a/Chapter08/InputSystem.cpp +++ b/Chapter08/InputSystem.cpp @@ -17,23 +17,55 @@ bool KeyboardState::GetKeyValue(int keyCode) const ButtonState KeyboardState::GetKeyState(int keyCode) const { - if (mCurrState[keyCode] == 0) + if (mPrevState[keyCode] == 0) { - if (mPrevState[keyCode] == 0) + if (mCurrState[keyCode] == 0) { return ENone; } else + { + return EPressed; + } + } + else // Prev state must be 1 + { + if (mCurrState[keyCode] == 0) { return EReleased; } + else + { + return EHeld; + } } - else // must be 1 +} + +bool MouseState::GetButtonValue(int button) const +{ + return (SDL_BUTTON(button) & mCurrButtons) == 1; +} + +ButtonState MouseState::GetButtonState(int button) const +{ + int mask = SDL_BUTTON(button); + if ((mask & mPrevButtons) == 0) { - if (mPrevState[keyCode] == 0) + if ((mask & mCurrButtons) == 0) + { + return ENone; + } + else { return EPressed; } + } + else + { + if ((mask & mCurrButtons) == 0) + { + return EReleased; + } else { return EHeld; @@ -43,12 +75,16 @@ ButtonState KeyboardState::GetKeyState(int keyCode) const bool InputSystem::Initialize() { + // Keyboard // Assign current state pointer mState.Keyboard.mCurrState = SDL_GetKeyboardState(NULL); // Clear previous state memory memset(mState.Keyboard.mPrevState, 0, SDL_NUM_SCANCODES); + // Mouse (just set everything to 0) + mState.Mouse.mCurrButtons = 0; + mState.Mouse.mPrevButtons = 0; return true; } @@ -63,8 +99,16 @@ void InputSystem::PrepareForUpdate() memcpy(mState.Keyboard.mPrevState, mState.Keyboard.mCurrState, SDL_NUM_SCANCODES); + + // Mouse + mState.Mouse.mPrevButtons = mState.Mouse.mCurrButtons; } void InputSystem::Update() { + // Mouse + int x = 0, y = 0; + mState.Mouse.mCurrButtons = SDL_GetMouseState(&x, &y); + mState.Mouse.mMousePos.x = static_cast(x); + mState.Mouse.mMousePos.y = static_cast(y); } diff --git a/Chapter08/InputSystem.h b/Chapter08/InputSystem.h index a326669e..95e6a279 100644 --- a/Chapter08/InputSystem.h +++ b/Chapter08/InputSystem.h @@ -8,6 +8,7 @@ #pragma once #include +#include "Math.h" // The different button states enum ButtonState @@ -18,7 +19,7 @@ enum ButtonState EHeld }; -// Helper for Keyboard input +// Helper for keyboard input class KeyboardState { public: @@ -33,10 +34,31 @@ class KeyboardState Uint8 mPrevState[SDL_NUM_SCANCODES]; }; +// Helper for mouse input +class MouseState +{ +public: + friend class InputSystem; + + // For mouse position + const Vector2& GetPosition() const { return mMousePos; } + + // For buttons + bool GetButtonValue(int button) const; + ButtonState GetButtonState(int button) const; +private: + // Store current mouse position + Vector2 mMousePos; + // Store button data + Uint32 mCurrButtons; + Uint32 mPrevButtons; +}; + // Wrapper that contains current state of input struct InputState { KeyboardState Keyboard; + MouseState Mouse; }; class InputSystem From 651606bc70d35f89f4097c5322f01f936fe3845e Mon Sep 17 00:00:00 2001 From: chalonverse Date: Wed, 29 Nov 2017 13:17:29 -0800 Subject: [PATCH 30/40] Fixed windows SDK version --- Chapter04/Game.vcxproj | 1 + Chapter05/Game.vcxproj | 1 + Chapter08/Game.vcxproj | 1 + 3 files changed, 3 insertions(+) diff --git a/Chapter04/Game.vcxproj b/Chapter04/Game.vcxproj index 385795ed..23567660 100644 --- a/Chapter04/Game.vcxproj +++ b/Chapter04/Game.vcxproj @@ -50,6 +50,7 @@ {BC508D87-495F-4554-932D-DD68388B63CC} Win32Proj Game + 10.0.16299.0 diff --git a/Chapter05/Game.vcxproj b/Chapter05/Game.vcxproj index de734c91..70015946 100644 --- a/Chapter05/Game.vcxproj +++ b/Chapter05/Game.vcxproj @@ -56,6 +56,7 @@ {BC508D87-495F-4554-932D-DD68388B63CC} Win32Proj Game + 10.0.16299.0 diff --git a/Chapter08/Game.vcxproj b/Chapter08/Game.vcxproj index d478a3d7..af5adf12 100644 --- a/Chapter08/Game.vcxproj +++ b/Chapter08/Game.vcxproj @@ -58,6 +58,7 @@ {BC508D87-495F-4554-932D-DD68388B63CC} Win32Proj Game + 10.0.16299.0 From b8d57c2503793b457732cbb50425ad2524201850 Mon Sep 17 00:00:00 2001 From: chalonverse Date: Wed, 29 Nov 2017 13:34:17 -0800 Subject: [PATCH 31/40] Added mouse relative mode --- Chapter08/InputSystem.cpp | 21 ++++++++++++++++++++- Chapter08/InputSystem.h | 5 +++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/Chapter08/InputSystem.cpp b/Chapter08/InputSystem.cpp index f4bc4a4c..17c84475 100644 --- a/Chapter08/InputSystem.cpp +++ b/Chapter08/InputSystem.cpp @@ -102,13 +102,32 @@ void InputSystem::PrepareForUpdate() // Mouse mState.Mouse.mPrevButtons = mState.Mouse.mCurrButtons; + mState.Mouse.mIsRelative = false; } void InputSystem::Update() { // Mouse int x = 0, y = 0; - mState.Mouse.mCurrButtons = SDL_GetMouseState(&x, &y); + if (mState.Mouse.mIsRelative) + { + mState.Mouse.mCurrButtons = + SDL_GetRelativeMouseState(&x, &y); + } + else + { + mState.Mouse.mCurrButtons = + SDL_GetMouseState(&x, &y); + } + mState.Mouse.mMousePos.x = static_cast(x); mState.Mouse.mMousePos.y = static_cast(y); } + +void InputSystem::SetRelativeMouseMode(bool value) +{ + SDL_bool set = value ? SDL_TRUE : SDL_FALSE; + SDL_SetRelativeMouseMode(set); + + mState.Mouse.mIsRelative = value; +} diff --git a/Chapter08/InputSystem.h b/Chapter08/InputSystem.h index 95e6a279..0ef3b25b 100644 --- a/Chapter08/InputSystem.h +++ b/Chapter08/InputSystem.h @@ -42,6 +42,7 @@ class MouseState // For mouse position const Vector2& GetPosition() const { return mMousePos; } + bool IsRelative() const { return mIsRelative; } // For buttons bool GetButtonValue(int button) const; @@ -52,6 +53,8 @@ class MouseState // Store button data Uint32 mCurrButtons; Uint32 mPrevButtons; + // Are we in relative mouse mode + bool mIsRelative; }; // Wrapper that contains current state of input @@ -73,6 +76,8 @@ class InputSystem void Update(); const InputState& GetState() const { return mState; } + + void SetRelativeMouseMode(bool value); private: InputState mState; }; From 4c04879384e935b46e256de112b4eab866838784 Mon Sep 17 00:00:00 2001 From: Sanjay Madhav Date: Wed, 29 Nov 2017 20:33:53 -0800 Subject: [PATCH 32/40] Mouse done --- Chapter08/Game.cpp | 7 ++++++- Chapter08/InputSystem.cpp | 15 +++++++++++++++ Chapter08/InputSystem.h | 5 +++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/Chapter08/Game.cpp b/Chapter08/Game.cpp index 1085a0f9..e3fff3a7 100644 --- a/Chapter08/Game.cpp +++ b/Chapter08/Game.cpp @@ -30,7 +30,7 @@ Game::Game() bool Game::Initialize() { - if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO) != 0) + if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO|SDL_INIT_GAMECONTROLLER) != 0) { SDL_Log("Unable to initialize SDL: %s", SDL_GetError()); return false; @@ -122,6 +122,11 @@ void Game::ProcessInput() case SDL_QUIT: mIsRunning = false; break; + case SDL_MOUSEWHEEL: + mInputSystem->ProcessEvent(event); + break; + default: + break; } } diff --git a/Chapter08/InputSystem.cpp b/Chapter08/InputSystem.cpp index 17c84475..3148f92a 100644 --- a/Chapter08/InputSystem.cpp +++ b/Chapter08/InputSystem.cpp @@ -103,6 +103,7 @@ void InputSystem::PrepareForUpdate() // Mouse mState.Mouse.mPrevButtons = mState.Mouse.mCurrButtons; mState.Mouse.mIsRelative = false; + mState.Mouse.mScrollWheel = Vector2::Zero; } void InputSystem::Update() @@ -124,6 +125,20 @@ void InputSystem::Update() mState.Mouse.mMousePos.y = static_cast(y); } +void InputSystem::ProcessEvent(SDL_Event& event) +{ + switch (event.type) + { + case SDL_MOUSEWHEEL: + mState.Mouse.mScrollWheel = Vector2( + static_cast(event.wheel.x), + static_cast(event.wheel.y)); + break; + default: + break; + } +} + void InputSystem::SetRelativeMouseMode(bool value) { SDL_bool set = value ? SDL_TRUE : SDL_FALSE; diff --git a/Chapter08/InputSystem.h b/Chapter08/InputSystem.h index 0ef3b25b..760e6260 100644 --- a/Chapter08/InputSystem.h +++ b/Chapter08/InputSystem.h @@ -42,6 +42,7 @@ class MouseState // For mouse position const Vector2& GetPosition() const { return mMousePos; } + const Vector2& GetScrollWheel() const { return mScrollWheel; } bool IsRelative() const { return mIsRelative; } // For buttons @@ -50,6 +51,8 @@ class MouseState private: // Store current mouse position Vector2 mMousePos; + // Motion of scroll wheel + Vector2 mScrollWheel; // Store button data Uint32 mCurrButtons; Uint32 mPrevButtons; @@ -74,6 +77,8 @@ class InputSystem void PrepareForUpdate(); // Called after SDL_PollEvents loop void Update(); + // Called to process an SDL event in input system + void ProcessEvent(union SDL_Event& event); const InputState& GetState() const { return mState; } From 61782b541a74b9e0845fa50ddca9d2f01bb3c1a6 Mon Sep 17 00:00:00 2001 From: Sanjay Madhav Date: Thu, 30 Nov 2017 00:44:32 -0800 Subject: [PATCH 33/40] Chapter 8 done --- Chapter08/InputComponent.cpp | 8 +- Chapter08/InputSystem.cpp | 138 ++++++++++++++++++++++++++++++++++- Chapter08/InputSystem.h | 40 +++++++++- Chapter08/Ship.cpp | 35 +++++---- Chapter08/Ship.h | 3 + 5 files changed, 203 insertions(+), 21 deletions(-) diff --git a/Chapter08/InputComponent.cpp b/Chapter08/InputComponent.cpp index 79dbf666..56ede348 100644 --- a/Chapter08/InputComponent.cpp +++ b/Chapter08/InputComponent.cpp @@ -24,11 +24,11 @@ void InputComponent::ProcessInput(const InputState& state) { // Calculate forward speed for MoveComponent float forwardSpeed = 0.0f; - if (state.Keyboard.GetKeyValue(mForwardKey)) + if (state.Keyboard.GetKeyValue(SDL_Scancode(mForwardKey))) { forwardSpeed += mMaxForwardSpeed; } - if (state.Keyboard.GetKeyValue(mBackKey)) + if (state.Keyboard.GetKeyValue(SDL_Scancode(mBackKey))) { forwardSpeed -= mMaxForwardSpeed; } @@ -36,11 +36,11 @@ void InputComponent::ProcessInput(const InputState& state) // Calculate angular speed for MoveComponent float angularSpeed = 0.0f; - if (state.Keyboard.GetKeyValue(mClockwiseKey)) + if (state.Keyboard.GetKeyValue(SDL_Scancode(mClockwiseKey))) { angularSpeed += mMaxAngularSpeed; } - if (state.Keyboard.GetKeyValue(mCounterClockwiseKey)) + if (state.Keyboard.GetKeyValue(SDL_Scancode(mCounterClockwiseKey))) { angularSpeed -= mMaxAngularSpeed; } diff --git a/Chapter08/InputSystem.cpp b/Chapter08/InputSystem.cpp index 3148f92a..da787cf9 100644 --- a/Chapter08/InputSystem.cpp +++ b/Chapter08/InputSystem.cpp @@ -10,12 +10,12 @@ #include #include -bool KeyboardState::GetKeyValue(int keyCode) const +bool KeyboardState::GetKeyValue(SDL_Scancode keyCode) const { return mCurrState[keyCode] == 1; } -ButtonState KeyboardState::GetKeyState(int keyCode) const +ButtonState KeyboardState::GetKeyState(SDL_Scancode keyCode) const { if (mPrevState[keyCode] == 0) { @@ -73,6 +73,37 @@ ButtonState MouseState::GetButtonState(int button) const } } +bool ControllerState::GetButtonValue(SDL_GameControllerButton button) const +{ + return mCurrButtons[button] == 1; +} + +ButtonState ControllerState::GetButtonState(SDL_GameControllerButton button) const +{ + if (mPrevButtons[button] == 0) + { + if (mCurrButtons[button] == 0) + { + return ENone; + } + else + { + return EPressed; + } + } + else // Prev state must be 1 + { + if (mCurrButtons[button] == 0) + { + return EReleased; + } + else + { + return EHeld; + } + } +} + bool InputSystem::Initialize() { // Keyboard @@ -85,6 +116,16 @@ bool InputSystem::Initialize() // Mouse (just set everything to 0) mState.Mouse.mCurrButtons = 0; mState.Mouse.mPrevButtons = 0; + + // Get the connected controller, if it exists + mController = SDL_GameControllerOpen(0); + // Initialize controller state + mState.Controller.mIsConnected = (mController != nullptr); + memset(mState.Controller.mCurrButtons, 0, + SDL_CONTROLLER_BUTTON_MAX); + memset(mState.Controller.mPrevButtons, 0, + SDL_CONTROLLER_BUTTON_MAX); + return true; } @@ -104,6 +145,11 @@ void InputSystem::PrepareForUpdate() mState.Mouse.mPrevButtons = mState.Mouse.mCurrButtons; mState.Mouse.mIsRelative = false; mState.Mouse.mScrollWheel = Vector2::Zero; + + // Controller + memcpy(mState.Controller.mPrevButtons, + mState.Controller.mCurrButtons, + SDL_CONTROLLER_BUTTON_MAX); } void InputSystem::Update() @@ -123,6 +169,36 @@ void InputSystem::Update() mState.Mouse.mMousePos.x = static_cast(x); mState.Mouse.mMousePos.y = static_cast(y); + + // Controller + // Buttons + for (int i = 0; i < SDL_CONTROLLER_BUTTON_MAX; i++) + { + mState.Controller.mCurrButtons[i] = + SDL_GameControllerGetButton(mController, + SDL_GameControllerButton(i)); + } + + // Triggers + mState.Controller.mLeftTrigger = + Filter1D(SDL_GameControllerGetAxis(mController, + SDL_CONTROLLER_AXIS_TRIGGERLEFT)); + mState.Controller.mRightTrigger = + Filter1D(SDL_GameControllerGetAxis(mController, + SDL_CONTROLLER_AXIS_TRIGGERRIGHT)); + + // Sticks + x = SDL_GameControllerGetAxis(mController, + SDL_CONTROLLER_AXIS_LEFTX); + y = -SDL_GameControllerGetAxis(mController, + SDL_CONTROLLER_AXIS_LEFTY); + mState.Controller.mLeftStick = Filter2D(x, y); + + x = SDL_GameControllerGetAxis(mController, + SDL_CONTROLLER_AXIS_RIGHTX); + y = -SDL_GameControllerGetAxis(mController, + SDL_CONTROLLER_AXIS_RIGHTY); + mState.Controller.mRightStick = Filter2D(x, y); } void InputSystem::ProcessEvent(SDL_Event& event) @@ -146,3 +222,61 @@ void InputSystem::SetRelativeMouseMode(bool value) mState.Mouse.mIsRelative = value; } + +float InputSystem::Filter1D(int input) +{ + // A value < dead zone is interpreted as 0% + const int deadZone = 250; + // A value > max value is interpreted as 100% + const int maxValue = 30000; + + float retVal = 0.0f; + + // Take absolute value of input + int absValue = input > 0 ? input : -input; + // Ignore input within dead zone + if (absValue > deadZone) + { + // Compute fractional value between dead zone and max value + retVal = static_cast(absValue - deadZone) / + (maxValue - deadZone); + // Make sure sign matches original value + retVal = input > 0 ? retVal : -1.0f * retVal; + // Clamp between -1.0f and 1.0f + retVal = Math::Clamp(retVal, -1.0f, 1.0f); + } + + return retVal; +} + +Vector2 InputSystem::Filter2D(int inputX, int inputY) +{ + const float deadZone = 8000.0f; + const float maxValue = 30000.0f; + + // Make into 2D vector + Vector2 dir; + dir.x = static_cast(inputX); + dir.y = static_cast(inputY); + + float length = dir.Length(); + + // If length < deadZone, should be no input + if (length < deadZone) + { + dir = Vector2::Zero; + } + else + { + // Calculate fractional value between + // dead zone and max value circles + float f = (length - deadZone) / (maxValue - deadZone); + // Clamp f between 0.0f and 1.0f + f = Math::Clamp(f, 0.0f, 1.0f); + // Normalize the vector, and then scale it to the + // fractional value + dir *= f / length; + } + + return dir; +} diff --git a/Chapter08/InputSystem.h b/Chapter08/InputSystem.h index 760e6260..a1eccc04 100644 --- a/Chapter08/InputSystem.h +++ b/Chapter08/InputSystem.h @@ -8,6 +8,8 @@ #pragma once #include +#include +#include #include "Math.h" // The different button states @@ -26,9 +28,9 @@ class KeyboardState // Friend so InputSystem can easily update it friend class InputSystem; // Get just the boolean true/false value of key - bool GetKeyValue(int keyCode) const; + bool GetKeyValue(SDL_Scancode keyCode) const; // Get a state based on current and previous frame - ButtonState GetKeyState(int keyCode) const; + ButtonState GetKeyState(SDL_Scancode keyCode) const; private: const Uint8* mCurrState; Uint8 mPrevState[SDL_NUM_SCANCODES]; @@ -60,11 +62,42 @@ class MouseState bool mIsRelative; }; +// Helper for controller input +class ControllerState +{ +public: + friend class InputSystem; + + // For buttons + bool GetButtonValue(SDL_GameControllerButton button) const; + ButtonState GetButtonState(SDL_GameControllerButton button) const; + + const Vector2& GetLeftStick() const { return mLeftStick; } + const Vector2& GetRightStick() const { return mRightStick; } + float GetLeftTrigger() const { return mLeftTrigger; } + float GetRightTrigger() const { return mRightTrigger; } + + bool GetIsConnected() const { return mIsConnected; } +private: + // Current/previous buttons + Uint8 mCurrButtons[SDL_CONTROLLER_BUTTON_MAX]; + Uint8 mPrevButtons[SDL_CONTROLLER_BUTTON_MAX]; + // Left/right sticks + Vector2 mLeftStick; + Vector2 mRightStick; + // Left/right trigger + float mLeftTrigger; + float mRightTrigger; + // Is this controller connected? + bool mIsConnected; +}; + // Wrapper that contains current state of input struct InputState { KeyboardState Keyboard; MouseState Mouse; + ControllerState Controller; }; class InputSystem @@ -84,5 +117,8 @@ class InputSystem void SetRelativeMouseMode(bool value); private: + float Filter1D(int input); + Vector2 Filter2D(int inputX, int inputY); InputState mState; + SDL_GameController* mController; }; diff --git a/Chapter08/Ship.cpp b/Chapter08/Ship.cpp index 66b563ec..86bb7b3d 100644 --- a/Chapter08/Ship.cpp +++ b/Chapter08/Ship.cpp @@ -8,37 +8,37 @@ #include "Ship.h" #include "SpriteComponent.h" -#include "InputComponent.h" #include "Game.h" #include "Laser.h" #include "InputSystem.h" Ship::Ship(Game* game) :Actor(game) + ,mSpeed(400.0f) ,mLaserCooldown(0.0f) { // Create a sprite component SpriteComponent* sc = new SpriteComponent(this, 150); sc->SetTexture(game->GetTexture("Assets/Ship.png")); - - // Create an input component and set keys/speed - InputComponent* ic = new InputComponent(this); - ic->SetForwardKey(SDL_SCANCODE_W); - ic->SetBackKey(SDL_SCANCODE_S); - ic->SetClockwiseKey(SDL_SCANCODE_A); - ic->SetCounterClockwiseKey(SDL_SCANCODE_D); - ic->SetMaxForwardSpeed(300.0f); - ic->SetMaxAngularSpeed(Math::TwoPi); } void Ship::UpdateActor(float deltaTime) { mLaserCooldown -= deltaTime; + + // Update position based on velocity + Vector2 pos = GetPosition(); + pos += mVelocityDir * mSpeed * deltaTime; + SetPosition(pos); + + // Update rotation + float angle = Math::Atan2(mRotationDir.y, mRotationDir.x); + SetRotation(angle); } void Ship::ActorInput(const InputState& state) { - if (state.Keyboard.GetKeyValue(SDL_SCANCODE_SPACE) + if (state.Controller.GetRightTrigger() > 0.25f && mLaserCooldown <= 0.0f) { // Create a laser and set its position/rotation to mine @@ -46,7 +46,16 @@ void Ship::ActorInput(const InputState& state) laser->SetPosition(GetPosition()); laser->SetRotation(GetRotation()); - // Reset laser cooldown (half second) - mLaserCooldown = 0.5f; + // Reset laser cooldown (quarter second) + mLaserCooldown = 0.25f; + } + + if (state.Controller.GetIsConnected()) + { + mVelocityDir = state.Controller.GetLeftStick(); + if (!Math::NearZero(state.Controller.GetRightStick().Length())) + { + mRotationDir = state.Controller.GetRightStick(); + } } } diff --git a/Chapter08/Ship.h b/Chapter08/Ship.h index 4b506c2d..bafac3de 100644 --- a/Chapter08/Ship.h +++ b/Chapter08/Ship.h @@ -16,5 +16,8 @@ class Ship : public Actor void UpdateActor(float deltaTime) override; void ActorInput(const struct InputState& state) override; private: + Vector2 mVelocityDir; + Vector2 mRotationDir; + float mSpeed; float mLaserCooldown; }; \ No newline at end of file From e6c1b724d30e88cafe1594dcdfc4630bcc412dd3 Mon Sep 17 00:00:00 2001 From: Sanjay Madhav Date: Thu, 30 Nov 2017 03:11:43 -0800 Subject: [PATCH 34/40] Chapter 8 mac project --- .../project.pbxproj | 86 +++++++++---------- .../contents.xcworkspacedata | 2 +- .../xcshareddata/xcschemes/Game-mac.xcscheme | 10 ++- 3 files changed, 47 insertions(+), 51 deletions(-) rename Chapter08/{Chapter6-mac.xcodeproj => Chapter08-mac.xcodeproj}/project.pbxproj (80%) rename Chapter08/{Chapter6-mac.xcodeproj => Chapter08-mac.xcodeproj}/project.xcworkspace/contents.xcworkspacedata (52%) rename Chapter08/{Chapter6-mac.xcodeproj => Chapter08-mac.xcodeproj}/xcshareddata/xcschemes/Game-mac.xcscheme (90%) diff --git a/Chapter08/Chapter6-mac.xcodeproj/project.pbxproj b/Chapter08/Chapter08-mac.xcodeproj/project.pbxproj similarity index 80% rename from Chapter08/Chapter6-mac.xcodeproj/project.pbxproj rename to Chapter08/Chapter08-mac.xcodeproj/project.pbxproj index abc3a372..9e840bd8 100644 --- a/Chapter08/Chapter6-mac.xcodeproj/project.pbxproj +++ b/Chapter08/Chapter08-mac.xcodeproj/project.pbxproj @@ -7,12 +7,14 @@ objects = { /* Begin PBXBuildFile section */ - 9203E9F01F0DD69900F9FFC2 /* Tower.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9203E9EE1F0DD69900F9FFC2 /* Tower.cpp */; }; - 9203E9F31F0DE24000F9FFC2 /* Enemy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9203E9F11F0DE24000F9FFC2 /* Enemy.cpp */; }; - 9203E9F61F0DF13600F9FFC2 /* NavComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9203E9F41F0DF13600F9FFC2 /* NavComponent.cpp */; }; - 9203E9F91F0F12FE00F9FFC2 /* Bullet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9203E9F71F0F12FE00F9FFC2 /* Bullet.cpp */; }; 9206FDC61F140707005078A2 /* Texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9206FDC41F140707005078A2 /* Texture.cpp */; }; 9206FDC91F140D40005078A2 /* Shader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9206FDC71F140D40005078A2 /* Shader.cpp */; }; + 9216C5431FCFFDA400F72B29 /* Asteroid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9216C5371FCFFDA200F72B29 /* Asteroid.cpp */; }; + 9216C5441FCFFDA400F72B29 /* Random.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9216C53A1FCFFDA300F72B29 /* Random.cpp */; }; + 9216C5451FCFFDA400F72B29 /* Laser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9216C53D1FCFFDA300F72B29 /* Laser.cpp */; }; + 9216C5461FCFFDA400F72B29 /* InputSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9216C5401FCFFDA300F72B29 /* InputSystem.cpp */; }; + 9216C5471FCFFDA400F72B29 /* Ship.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9216C5411FCFFDA400F72B29 /* Ship.cpp */; }; + 9216C5481FCFFDA400F72B29 /* InputComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9216C5421FCFFDA400F72B29 /* InputComponent.cpp */; }; 9223C4781F009428009A94D7 /* Game.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4671F009428009A94D7 /* Game.cpp */; }; 9223C4791F009428009A94D7 /* Actor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4681F009428009A94D7 /* Actor.cpp */; }; 9223C47C1F009428009A94D7 /* Component.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C46E1F009428009A94D7 /* Component.cpp */; }; @@ -20,29 +22,30 @@ 9223C47E1F009428009A94D7 /* Math.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4721F009428009A94D7 /* Math.cpp */; }; 9223C4801F009428009A94D7 /* SpriteComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4761F009428009A94D7 /* SpriteComponent.cpp */; }; 9223C48B1F0CA3CE009A94D7 /* MoveComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C48A1F0CA3CE009A94D7 /* MoveComponent.cpp */; }; - 9223C48F1F0CA67A009A94D7 /* Tile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C48D1F0CA67A009A94D7 /* Tile.cpp */; }; - 9223C4941F0CA766009A94D7 /* CollisionComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4901F0CA766009A94D7 /* CollisionComponent.cpp */; }; 9223C4951F0CA766009A94D7 /* CircleComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4911F0CA766009A94D7 /* CircleComponent.cpp */; }; - 9223C4981F0DBD69009A94D7 /* Grid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4961F0DBD69009A94D7 /* Grid.cpp */; }; 92CF0D791F3BBF140086A0F3 /* VertexArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 92CF0D771F3BBF140086A0F3 /* VertexArray.cpp */; }; 92D324FB1B697389005A86C7 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 92D324FA1B697389005A86C7 /* CoreFoundation.framework */; }; 92E46E941B6353E50035CD21 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 92E46E931B6353E50035CD21 /* OpenGL.framework */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - 9203E9EE1F0DD69900F9FFC2 /* Tower.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Tower.cpp; sourceTree = ""; }; - 9203E9EF1F0DD69900F9FFC2 /* Tower.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Tower.h; sourceTree = ""; }; - 9203E9F11F0DE24000F9FFC2 /* Enemy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Enemy.cpp; sourceTree = ""; }; - 9203E9F21F0DE24000F9FFC2 /* Enemy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Enemy.h; sourceTree = ""; }; - 9203E9F41F0DF13600F9FFC2 /* NavComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NavComponent.cpp; sourceTree = ""; }; - 9203E9F51F0DF13600F9FFC2 /* NavComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NavComponent.h; sourceTree = ""; }; - 9203E9F71F0F12FE00F9FFC2 /* Bullet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Bullet.cpp; sourceTree = ""; }; - 9203E9F81F0F12FE00F9FFC2 /* Bullet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Bullet.h; sourceTree = ""; }; 9206FDC31F13F7E8005078A2 /* Shaders */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Shaders; sourceTree = ""; }; 9206FDC41F140707005078A2 /* Texture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Texture.cpp; sourceTree = ""; }; 9206FDC51F140707005078A2 /* Texture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Texture.h; sourceTree = ""; }; 9206FDC71F140D40005078A2 /* Shader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Shader.cpp; sourceTree = ""; }; 9206FDC81F140D40005078A2 /* Shader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Shader.h; sourceTree = ""; }; + 9216C5371FCFFDA200F72B29 /* Asteroid.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Asteroid.cpp; sourceTree = ""; }; + 9216C5381FCFFDA200F72B29 /* InputComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InputComponent.h; sourceTree = ""; }; + 9216C5391FCFFDA200F72B29 /* Random.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Random.h; sourceTree = ""; }; + 9216C53A1FCFFDA300F72B29 /* Random.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Random.cpp; sourceTree = ""; }; + 9216C53B1FCFFDA300F72B29 /* Ship.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Ship.h; sourceTree = ""; }; + 9216C53C1FCFFDA300F72B29 /* Laser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Laser.h; sourceTree = ""; }; + 9216C53D1FCFFDA300F72B29 /* Laser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Laser.cpp; sourceTree = ""; }; + 9216C53E1FCFFDA300F72B29 /* InputSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InputSystem.h; sourceTree = ""; }; + 9216C53F1FCFFDA300F72B29 /* Asteroid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Asteroid.h; sourceTree = ""; }; + 9216C5401FCFFDA300F72B29 /* InputSystem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InputSystem.cpp; sourceTree = ""; }; + 9216C5411FCFFDA400F72B29 /* Ship.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Ship.cpp; sourceTree = ""; }; + 9216C5421FCFFDA400F72B29 /* InputComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InputComponent.cpp; sourceTree = ""; }; 9223C4671F009428009A94D7 /* Game.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Game.cpp; sourceTree = ""; }; 9223C4681F009428009A94D7 /* Actor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Actor.cpp; sourceTree = ""; }; 9223C4691F009428009A94D7 /* Actor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Actor.h; sourceTree = ""; }; @@ -56,14 +59,8 @@ 9223C4771F009428009A94D7 /* SpriteComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpriteComponent.h; sourceTree = ""; }; 9223C48A1F0CA3CE009A94D7 /* MoveComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MoveComponent.cpp; sourceTree = ""; }; 9223C48C1F0CA3D4009A94D7 /* MoveComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MoveComponent.h; sourceTree = ""; }; - 9223C48D1F0CA67A009A94D7 /* Tile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Tile.cpp; sourceTree = ""; }; - 9223C48E1F0CA67A009A94D7 /* Tile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Tile.h; sourceTree = ""; }; - 9223C4901F0CA766009A94D7 /* CollisionComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CollisionComponent.cpp; sourceTree = ""; }; 9223C4911F0CA766009A94D7 /* CircleComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CircleComponent.cpp; sourceTree = ""; }; - 9223C4921F0CA766009A94D7 /* CollisionComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CollisionComponent.h; sourceTree = ""; }; 9223C4931F0CA766009A94D7 /* CircleComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CircleComponent.h; sourceTree = ""; }; - 9223C4961F0DBD69009A94D7 /* Grid.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Grid.cpp; sourceTree = ""; }; - 9223C4971F0DBD69009A94D7 /* Grid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Grid.h; sourceTree = ""; }; 92CF0D771F3BBF140086A0F3 /* VertexArray.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VertexArray.cpp; sourceTree = ""; }; 92CF0D781F3BBF140086A0F3 /* VertexArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VertexArray.h; sourceTree = ""; }; 92D324FA1B697389005A86C7 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; @@ -87,41 +84,39 @@ 92E46DEE1B634EA30035CD21 = { isa = PBXGroup; children = ( - 92CF0D771F3BBF140086A0F3 /* VertexArray.cpp */, - 92CF0D781F3BBF140086A0F3 /* VertexArray.h */, 9223C4681F009428009A94D7 /* Actor.cpp */, 9223C4691F009428009A94D7 /* Actor.h */, - 9203E9F71F0F12FE00F9FFC2 /* Bullet.cpp */, - 9203E9F81F0F12FE00F9FFC2 /* Bullet.h */, + 9216C5371FCFFDA200F72B29 /* Asteroid.cpp */, + 9216C53F1FCFFDA300F72B29 /* Asteroid.h */, 9223C46E1F009428009A94D7 /* Component.cpp */, 9223C46F1F009428009A94D7 /* Component.h */, 9223C4911F0CA766009A94D7 /* CircleComponent.cpp */, 9223C4931F0CA766009A94D7 /* CircleComponent.h */, - 9223C4901F0CA766009A94D7 /* CollisionComponent.cpp */, - 9223C4921F0CA766009A94D7 /* CollisionComponent.h */, - 9203E9F11F0DE24000F9FFC2 /* Enemy.cpp */, - 9203E9F21F0DE24000F9FFC2 /* Enemy.h */, + 9216C5421FCFFDA400F72B29 /* InputComponent.cpp */, + 9216C5381FCFFDA200F72B29 /* InputComponent.h */, + 9216C5401FCFFDA300F72B29 /* InputSystem.cpp */, + 9216C53E1FCFFDA300F72B29 /* InputSystem.h */, 9223C4671F009428009A94D7 /* Game.cpp */, 9223C4701F009428009A94D7 /* Game.h */, - 9223C4961F0DBD69009A94D7 /* Grid.cpp */, - 9223C4971F0DBD69009A94D7 /* Grid.h */, + 9216C53D1FCFFDA300F72B29 /* Laser.cpp */, + 9216C53C1FCFFDA300F72B29 /* Laser.h */, 9223C4711F009428009A94D7 /* Main.cpp */, 9223C4721F009428009A94D7 /* Math.cpp */, 9223C4731F009428009A94D7 /* Math.h */, 9223C48A1F0CA3CE009A94D7 /* MoveComponent.cpp */, 9223C48C1F0CA3D4009A94D7 /* MoveComponent.h */, - 9203E9F41F0DF13600F9FFC2 /* NavComponent.cpp */, - 9203E9F51F0DF13600F9FFC2 /* NavComponent.h */, + 9216C53A1FCFFDA300F72B29 /* Random.cpp */, + 9216C5391FCFFDA200F72B29 /* Random.h */, 9206FDC71F140D40005078A2 /* Shader.cpp */, 9206FDC81F140D40005078A2 /* Shader.h */, + 9216C5411FCFFDA400F72B29 /* Ship.cpp */, + 9216C53B1FCFFDA300F72B29 /* Ship.h */, 9223C4761F009428009A94D7 /* SpriteComponent.cpp */, 9223C4771F009428009A94D7 /* SpriteComponent.h */, 9206FDC41F140707005078A2 /* Texture.cpp */, 9206FDC51F140707005078A2 /* Texture.h */, - 9223C48D1F0CA67A009A94D7 /* Tile.cpp */, - 9223C48E1F0CA67A009A94D7 /* Tile.h */, - 9203E9EE1F0DD69900F9FFC2 /* Tower.cpp */, - 9203E9EF1F0DD69900F9FFC2 /* Tower.h */, + 92CF0D771F3BBF140086A0F3 /* VertexArray.cpp */, + 92CF0D781F3BBF140086A0F3 /* VertexArray.h */, 9206FDC31F13F7E8005078A2 /* Shaders */, 92E46DF81B634EA30035CD21 /* Products */, 92D324FA1B697389005A86C7 /* CoreFoundation.framework */, @@ -171,7 +166,7 @@ }; }; }; - buildConfigurationList = 92E46DF21B634EA30035CD21 /* Build configuration list for PBXProject "Chapter6-mac" */; + buildConfigurationList = 92E46DF21B634EA30035CD21 /* Build configuration list for PBXProject "Chapter08-mac" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; @@ -209,24 +204,23 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 9223C4941F0CA766009A94D7 /* CollisionComponent.cpp in Sources */, 9223C47D1F009428009A94D7 /* Main.cpp in Sources */, 9223C47E1F009428009A94D7 /* Math.cpp in Sources */, - 9203E9F01F0DD69900F9FFC2 /* Tower.cpp in Sources */, 9223C4781F009428009A94D7 /* Game.cpp in Sources */, - 9203E9F61F0DF13600F9FFC2 /* NavComponent.cpp in Sources */, + 9216C5451FCFFDA400F72B29 /* Laser.cpp in Sources */, + 9216C5481FCFFDA400F72B29 /* InputComponent.cpp in Sources */, + 9216C5461FCFFDA400F72B29 /* InputSystem.cpp in Sources */, 9223C4801F009428009A94D7 /* SpriteComponent.cpp in Sources */, + 9216C5431FCFFDA400F72B29 /* Asteroid.cpp in Sources */, 92CF0D791F3BBF140086A0F3 /* VertexArray.cpp in Sources */, 9223C48B1F0CA3CE009A94D7 /* MoveComponent.cpp in Sources */, - 9203E9F31F0DE24000F9FFC2 /* Enemy.cpp in Sources */, 9206FDC91F140D40005078A2 /* Shader.cpp in Sources */, 9223C4791F009428009A94D7 /* Actor.cpp in Sources */, - 9203E9F91F0F12FE00F9FFC2 /* Bullet.cpp in Sources */, 9223C4951F0CA766009A94D7 /* CircleComponent.cpp in Sources */, + 9216C5441FCFFDA400F72B29 /* Random.cpp in Sources */, + 9216C5471FCFFDA400F72B29 /* Ship.cpp in Sources */, 9223C47C1F009428009A94D7 /* Component.cpp in Sources */, 9206FDC61F140707005078A2 /* Texture.cpp in Sources */, - 9223C48F1F0CA67A009A94D7 /* Tile.cpp in Sources */, - 9223C4981F0DBD69009A94D7 /* Grid.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -378,7 +372,7 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 92E46DF21B634EA30035CD21 /* Build configuration list for PBXProject "Chapter6-mac" */ = { + 92E46DF21B634EA30035CD21 /* Build configuration list for PBXProject "Chapter08-mac" */ = { isa = XCConfigurationList; buildConfigurations = ( 92E46DFC1B634EA40035CD21 /* Debug */, diff --git a/Chapter08/Chapter6-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Chapter08/Chapter08-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 52% rename from Chapter08/Chapter6-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to Chapter08/Chapter08-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 57070e17..bd66929c 100644 --- a/Chapter08/Chapter6-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/Chapter08/Chapter08-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:/Users/Sanjay/gameprogcpp-final/Chapter08/Chapter08-mac.xcodeproj"> diff --git a/Chapter08/Chapter6-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme b/Chapter08/Chapter08-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme similarity index 90% rename from Chapter08/Chapter6-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme rename to Chapter08/Chapter08-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme index 2f114aa1..324df194 100644 --- a/Chapter08/Chapter6-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme +++ b/Chapter08/Chapter08-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme @@ -17,7 +17,7 @@ BlueprintIdentifier = "92E46DF61B634EA30035CD21" BuildableName = "Game-mac" BlueprintName = "Game-mac" - ReferencedContainer = "container:Chapter6-mac.xcodeproj"> + ReferencedContainer = "container:Chapter08-mac.xcodeproj"> @@ -26,6 +26,7 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + language = "" shouldUseLaunchSchemeArgsEnv = "YES"> @@ -35,7 +36,7 @@ BlueprintIdentifier = "92E46DF61B634EA30035CD21" BuildableName = "Game-mac" BlueprintName = "Game-mac" - ReferencedContainer = "container:Chapter6-mac.xcodeproj"> + ReferencedContainer = "container:Chapter08-mac.xcodeproj"> @@ -45,6 +46,7 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + language = "" launchStyle = "0" useCustomWorkingDirectory = "YES" customWorkingDirectory = "$(SRCROOT)" @@ -59,7 +61,7 @@ BlueprintIdentifier = "92E46DF61B634EA30035CD21" BuildableName = "Game-mac" BlueprintName = "Game-mac" - ReferencedContainer = "container:Chapter6-mac.xcodeproj"> + ReferencedContainer = "container:Chapter08-mac.xcodeproj"> @@ -78,7 +80,7 @@ BlueprintIdentifier = "92E46DF61B634EA30035CD21" BuildableName = "Game-mac" BlueprintName = "Game-mac" - ReferencedContainer = "container:Chapter6-mac.xcodeproj"> + ReferencedContainer = "container:Chapter08-mac.xcodeproj"> From fed429f9ecf0e8c050ae003eaa48bafbc4b81292 Mon Sep 17 00:00:00 2001 From: Sanjay Madhav Date: Mon, 18 Dec 2017 16:39:49 -0600 Subject: [PATCH 35/40] Chapter 1 mac --- .../project.pbxproj | 64 ++++++------------- .../contents.xcworkspacedata | 2 +- .../xcshareddata/xcschemes/Game-mac.xcscheme | 12 ++-- 3 files changed, 27 insertions(+), 51 deletions(-) rename Chapter01/{Chapter3-mac.xcodeproj => Chapter01-mac.xcodeproj}/project.pbxproj (69%) rename Chapter01/{Chapter3-mac.xcodeproj => Chapter01-mac.xcodeproj}/project.xcworkspace/contents.xcworkspacedata (54%) rename Chapter01/{Chapter3-mac.xcodeproj => Chapter01-mac.xcodeproj}/xcshareddata/xcschemes/Game-mac.xcscheme (89%) diff --git a/Chapter01/Chapter3-mac.xcodeproj/project.pbxproj b/Chapter01/Chapter01-mac.xcodeproj/project.pbxproj similarity index 69% rename from Chapter01/Chapter3-mac.xcodeproj/project.pbxproj rename to Chapter01/Chapter01-mac.xcodeproj/project.pbxproj index 991e7d82..cf8a87e1 100644 --- a/Chapter01/Chapter3-mac.xcodeproj/project.pbxproj +++ b/Chapter01/Chapter01-mac.xcodeproj/project.pbxproj @@ -8,36 +8,15 @@ /* Begin PBXBuildFile section */ 9223C4781F009428009A94D7 /* Game.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4671F009428009A94D7 /* Game.cpp */; }; - 9223C4791F009428009A94D7 /* Actor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4681F009428009A94D7 /* Actor.cpp */; }; - 9223C47A1F009428009A94D7 /* AnimSpriteComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C46A1F009428009A94D7 /* AnimSpriteComponent.cpp */; }; - 9223C47B1F009428009A94D7 /* BGSpriteComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C46C1F009428009A94D7 /* BGSpriteComponent.cpp */; }; - 9223C47C1F009428009A94D7 /* Component.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C46E1F009428009A94D7 /* Component.cpp */; }; 9223C47D1F009428009A94D7 /* Main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4711F009428009A94D7 /* Main.cpp */; }; - 9223C47E1F009428009A94D7 /* Math.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4721F009428009A94D7 /* Math.cpp */; }; - 9223C47F1F009428009A94D7 /* Ship.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4741F009428009A94D7 /* Ship.cpp */; }; - 9223C4801F009428009A94D7 /* SpriteComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4761F009428009A94D7 /* SpriteComponent.cpp */; }; 92D324FB1B697389005A86C7 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 92D324FA1B697389005A86C7 /* CoreFoundation.framework */; }; 92E46E941B6353E50035CD21 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 92E46E931B6353E50035CD21 /* OpenGL.framework */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ 9223C4671F009428009A94D7 /* Game.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Game.cpp; sourceTree = ""; }; - 9223C4681F009428009A94D7 /* Actor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Actor.cpp; sourceTree = ""; }; - 9223C4691F009428009A94D7 /* Actor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Actor.h; sourceTree = ""; }; - 9223C46A1F009428009A94D7 /* AnimSpriteComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AnimSpriteComponent.cpp; sourceTree = ""; }; - 9223C46B1F009428009A94D7 /* AnimSpriteComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AnimSpriteComponent.h; sourceTree = ""; }; - 9223C46C1F009428009A94D7 /* BGSpriteComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BGSpriteComponent.cpp; sourceTree = ""; }; - 9223C46D1F009428009A94D7 /* BGSpriteComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BGSpriteComponent.h; sourceTree = ""; }; - 9223C46E1F009428009A94D7 /* Component.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Component.cpp; sourceTree = ""; }; - 9223C46F1F009428009A94D7 /* Component.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Component.h; sourceTree = ""; }; 9223C4701F009428009A94D7 /* Game.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Game.h; sourceTree = ""; }; 9223C4711F009428009A94D7 /* Main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Main.cpp; sourceTree = ""; }; - 9223C4721F009428009A94D7 /* Math.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Math.cpp; sourceTree = ""; }; - 9223C4731F009428009A94D7 /* Math.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Math.h; sourceTree = ""; }; - 9223C4741F009428009A94D7 /* Ship.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Ship.cpp; sourceTree = ""; }; - 9223C4751F009428009A94D7 /* Ship.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Ship.h; sourceTree = ""; }; - 9223C4761F009428009A94D7 /* SpriteComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpriteComponent.cpp; sourceTree = ""; }; - 9223C4771F009428009A94D7 /* SpriteComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpriteComponent.h; sourceTree = ""; }; 92D324FA1B697389005A86C7 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; 92E46DF71B634EA30035CD21 /* Game-mac */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "Game-mac"; sourceTree = BUILT_PRODUCTS_DIR; }; 92E46E931B6353E50035CD21 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; @@ -59,23 +38,9 @@ 92E46DEE1B634EA30035CD21 = { isa = PBXGroup; children = ( - 9223C4681F009428009A94D7 /* Actor.cpp */, - 9223C4691F009428009A94D7 /* Actor.h */, - 9223C46A1F009428009A94D7 /* AnimSpriteComponent.cpp */, - 9223C46B1F009428009A94D7 /* AnimSpriteComponent.h */, - 9223C46C1F009428009A94D7 /* BGSpriteComponent.cpp */, - 9223C46D1F009428009A94D7 /* BGSpriteComponent.h */, - 9223C46E1F009428009A94D7 /* Component.cpp */, - 9223C46F1F009428009A94D7 /* Component.h */, 9223C4671F009428009A94D7 /* Game.cpp */, 9223C4701F009428009A94D7 /* Game.h */, 9223C4711F009428009A94D7 /* Main.cpp */, - 9223C4721F009428009A94D7 /* Math.cpp */, - 9223C4731F009428009A94D7 /* Math.h */, - 9223C4741F009428009A94D7 /* Ship.cpp */, - 9223C4751F009428009A94D7 /* Ship.h */, - 9223C4761F009428009A94D7 /* SpriteComponent.cpp */, - 9223C4771F009428009A94D7 /* SpriteComponent.h */, 92E46DF81B634EA30035CD21 /* Products */, 92D324FA1B697389005A86C7 /* CoreFoundation.framework */, 92E46E931B6353E50035CD21 /* OpenGL.framework */, @@ -116,7 +81,7 @@ 92E46DEF1B634EA30035CD21 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0720; + LastUpgradeCheck = 0920; ORGANIZATIONNAME = "Sanjay Madhav"; TargetAttributes = { 92E46DF61B634EA30035CD21 = { @@ -124,7 +89,7 @@ }; }; }; - buildConfigurationList = 92E46DF21B634EA30035CD21 /* Build configuration list for PBXProject "Chapter3-mac" */; + buildConfigurationList = 92E46DF21B634EA30035CD21 /* Build configuration list for PBXProject "Chapter01-mac" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; @@ -163,14 +128,7 @@ buildActionMask = 2147483647; files = ( 9223C47D1F009428009A94D7 /* Main.cpp in Sources */, - 9223C47E1F009428009A94D7 /* Math.cpp in Sources */, - 9223C47A1F009428009A94D7 /* AnimSpriteComponent.cpp in Sources */, - 9223C47B1F009428009A94D7 /* BGSpriteComponent.cpp in Sources */, 9223C4781F009428009A94D7 /* Game.cpp in Sources */, - 9223C4801F009428009A94D7 /* SpriteComponent.cpp in Sources */, - 9223C47F1F009428009A94D7 /* Ship.cpp in Sources */, - 9223C4791F009428009A94D7 /* Actor.cpp in Sources */, - 9223C47C1F009428009A94D7 /* Component.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -185,13 +143,21 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; @@ -228,13 +194,21 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; @@ -318,7 +292,7 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 92E46DF21B634EA30035CD21 /* Build configuration list for PBXProject "Chapter3-mac" */ = { + 92E46DF21B634EA30035CD21 /* Build configuration list for PBXProject "Chapter01-mac" */ = { isa = XCConfigurationList; buildConfigurations = ( 92E46DFC1B634EA40035CD21 /* Debug */, diff --git a/Chapter01/Chapter3-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Chapter01/Chapter01-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 54% rename from Chapter01/Chapter3-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to Chapter01/Chapter01-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 84be36ce..403d96cd 100644 --- a/Chapter01/Chapter3-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/Chapter01/Chapter01-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:/Users/Sanjay/gameprogcpp-final/Chapter01/Chapter01-mac.xcodeproj"> diff --git a/Chapter01/Chapter3-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme b/Chapter01/Chapter01-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme similarity index 89% rename from Chapter01/Chapter3-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme rename to Chapter01/Chapter01-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme index 8c41bc4b..21a91dfd 100644 --- a/Chapter01/Chapter3-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme +++ b/Chapter01/Chapter01-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme @@ -1,6 +1,6 @@ + ReferencedContainer = "container:Chapter01-mac.xcodeproj"> @@ -26,6 +26,7 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + language = "" shouldUseLaunchSchemeArgsEnv = "YES"> @@ -35,7 +36,7 @@ BlueprintIdentifier = "92E46DF61B634EA30035CD21" BuildableName = "Game-mac" BlueprintName = "Game-mac" - ReferencedContainer = "container:Chapter3-mac.xcodeproj"> + ReferencedContainer = "container:Chapter01-mac.xcodeproj"> @@ -45,6 +46,7 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + language = "" launchStyle = "0" useCustomWorkingDirectory = "YES" customWorkingDirectory = "$(SRCROOT)" @@ -59,7 +61,7 @@ BlueprintIdentifier = "92E46DF61B634EA30035CD21" BuildableName = "Game-mac" BlueprintName = "Game-mac" - ReferencedContainer = "container:Chapter3-mac.xcodeproj"> + ReferencedContainer = "container:Chapter01-mac.xcodeproj"> @@ -78,7 +80,7 @@ BlueprintIdentifier = "92E46DF61B634EA30035CD21" BuildableName = "Game-mac" BlueprintName = "Game-mac" - ReferencedContainer = "container:Chapter3-mac.xcodeproj"> + ReferencedContainer = "container:Chapter01-mac.xcodeproj"> From 91b726049925fa6c01d735ed9eb344e4c10b40d2 Mon Sep 17 00:00:00 2001 From: Sanjay Madhav Date: Mon, 18 Dec 2017 16:43:33 -0600 Subject: [PATCH 36/40] Chapter 2 mac --- .../project.pbxproj | 22 ++++++++++++++++--- .../contents.xcworkspacedata | 2 +- .../xcshareddata/xcschemes/Game-mac.xcscheme | 12 +++++----- 3 files changed, 27 insertions(+), 9 deletions(-) rename Chapter02/{Chapter3-mac.xcodeproj => Chapter02-mac.xcodeproj}/project.pbxproj (95%) rename Chapter02/{Chapter3-mac.xcodeproj => Chapter02-mac.xcodeproj}/project.xcworkspace/contents.xcworkspacedata (54%) rename Chapter02/{Chapter3-mac.xcodeproj => Chapter02-mac.xcodeproj}/xcshareddata/xcschemes/Game-mac.xcscheme (89%) diff --git a/Chapter02/Chapter3-mac.xcodeproj/project.pbxproj b/Chapter02/Chapter02-mac.xcodeproj/project.pbxproj similarity index 95% rename from Chapter02/Chapter3-mac.xcodeproj/project.pbxproj rename to Chapter02/Chapter02-mac.xcodeproj/project.pbxproj index 991e7d82..ee08bd01 100644 --- a/Chapter02/Chapter3-mac.xcodeproj/project.pbxproj +++ b/Chapter02/Chapter02-mac.xcodeproj/project.pbxproj @@ -116,7 +116,7 @@ 92E46DEF1B634EA30035CD21 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0720; + LastUpgradeCheck = 0920; ORGANIZATIONNAME = "Sanjay Madhav"; TargetAttributes = { 92E46DF61B634EA30035CD21 = { @@ -124,7 +124,7 @@ }; }; }; - buildConfigurationList = 92E46DF21B634EA30035CD21 /* Build configuration list for PBXProject "Chapter3-mac" */; + buildConfigurationList = 92E46DF21B634EA30035CD21 /* Build configuration list for PBXProject "Chapter02-mac" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; @@ -185,13 +185,21 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; @@ -228,13 +236,21 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; @@ -318,7 +334,7 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 92E46DF21B634EA30035CD21 /* Build configuration list for PBXProject "Chapter3-mac" */ = { + 92E46DF21B634EA30035CD21 /* Build configuration list for PBXProject "Chapter02-mac" */ = { isa = XCConfigurationList; buildConfigurations = ( 92E46DFC1B634EA40035CD21 /* Debug */, diff --git a/Chapter02/Chapter3-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Chapter02/Chapter02-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 54% rename from Chapter02/Chapter3-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to Chapter02/Chapter02-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 84be36ce..2bc09709 100644 --- a/Chapter02/Chapter3-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/Chapter02/Chapter02-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:/Users/Sanjay/gameprogcpp-final/Chapter02/Chapter02-mac.xcodeproj"> diff --git a/Chapter02/Chapter3-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme b/Chapter02/Chapter02-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme similarity index 89% rename from Chapter02/Chapter3-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme rename to Chapter02/Chapter02-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme index 8c41bc4b..52bf4f32 100644 --- a/Chapter02/Chapter3-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme +++ b/Chapter02/Chapter02-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme @@ -1,6 +1,6 @@ + ReferencedContainer = "container:Chapter02-mac.xcodeproj"> @@ -26,6 +26,7 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + language = "" shouldUseLaunchSchemeArgsEnv = "YES"> @@ -35,7 +36,7 @@ BlueprintIdentifier = "92E46DF61B634EA30035CD21" BuildableName = "Game-mac" BlueprintName = "Game-mac" - ReferencedContainer = "container:Chapter3-mac.xcodeproj"> + ReferencedContainer = "container:Chapter02-mac.xcodeproj"> @@ -45,6 +46,7 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + language = "" launchStyle = "0" useCustomWorkingDirectory = "YES" customWorkingDirectory = "$(SRCROOT)" @@ -59,7 +61,7 @@ BlueprintIdentifier = "92E46DF61B634EA30035CD21" BuildableName = "Game-mac" BlueprintName = "Game-mac" - ReferencedContainer = "container:Chapter3-mac.xcodeproj"> + ReferencedContainer = "container:Chapter02-mac.xcodeproj"> @@ -78,7 +80,7 @@ BlueprintIdentifier = "92E46DF61B634EA30035CD21" BuildableName = "Game-mac" BlueprintName = "Game-mac" - ReferencedContainer = "container:Chapter3-mac.xcodeproj"> + ReferencedContainer = "container:Chapter02-mac.xcodeproj"> From 8e49ec2928158124881faa0ebe3785b5093bff8d Mon Sep 17 00:00:00 2001 From: Sanjay Madhav Date: Mon, 18 Dec 2017 16:47:36 -0600 Subject: [PATCH 37/40] Chapter 3 mac --- .../project.pbxproj | 70 +++++++++++++++---- .../contents.xcworkspacedata | 2 +- .../xcshareddata/xcschemes/Game-mac.xcscheme | 12 ++-- 3 files changed, 63 insertions(+), 21 deletions(-) rename Chapter03/{Chapter3-mac.xcodeproj => Chapter03-mac.xcodeproj}/project.pbxproj (74%) rename Chapter03/{Chapter3-mac.xcodeproj => Chapter03-mac.xcodeproj}/project.xcworkspace/contents.xcworkspacedata (54%) rename Chapter03/{Chapter3-mac.xcodeproj => Chapter03-mac.xcodeproj}/xcshareddata/xcschemes/Game-mac.xcscheme (89%) diff --git a/Chapter03/Chapter3-mac.xcodeproj/project.pbxproj b/Chapter03/Chapter03-mac.xcodeproj/project.pbxproj similarity index 74% rename from Chapter03/Chapter3-mac.xcodeproj/project.pbxproj rename to Chapter03/Chapter03-mac.xcodeproj/project.pbxproj index 991e7d82..c3c8099d 100644 --- a/Chapter03/Chapter3-mac.xcodeproj/project.pbxproj +++ b/Chapter03/Chapter03-mac.xcodeproj/project.pbxproj @@ -9,14 +9,18 @@ /* Begin PBXBuildFile section */ 9223C4781F009428009A94D7 /* Game.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4671F009428009A94D7 /* Game.cpp */; }; 9223C4791F009428009A94D7 /* Actor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4681F009428009A94D7 /* Actor.cpp */; }; - 9223C47A1F009428009A94D7 /* AnimSpriteComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C46A1F009428009A94D7 /* AnimSpriteComponent.cpp */; }; - 9223C47B1F009428009A94D7 /* BGSpriteComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C46C1F009428009A94D7 /* BGSpriteComponent.cpp */; }; 9223C47C1F009428009A94D7 /* Component.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C46E1F009428009A94D7 /* Component.cpp */; }; 9223C47D1F009428009A94D7 /* Main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4711F009428009A94D7 /* Main.cpp */; }; 9223C47E1F009428009A94D7 /* Math.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4721F009428009A94D7 /* Math.cpp */; }; 9223C47F1F009428009A94D7 /* Ship.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4741F009428009A94D7 /* Ship.cpp */; }; 9223C4801F009428009A94D7 /* SpriteComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4761F009428009A94D7 /* SpriteComponent.cpp */; }; 92D324FB1B697389005A86C7 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 92D324FA1B697389005A86C7 /* CoreFoundation.framework */; }; + 92E391801FE87CA300D8C362 /* MoveComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 92E391741FE87CA200D8C362 /* MoveComponent.cpp */; }; + 92E391811FE87CA300D8C362 /* Laser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 92E391771FE87CA200D8C362 /* Laser.cpp */; }; + 92E391821FE87CA300D8C362 /* Random.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 92E391781FE87CA200D8C362 /* Random.cpp */; }; + 92E391831FE87CA300D8C362 /* InputComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 92E3917A1FE87CA200D8C362 /* InputComponent.cpp */; }; + 92E391841FE87CA300D8C362 /* Asteroid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 92E3917D1FE87CA300D8C362 /* Asteroid.cpp */; }; + 92E391851FE87CA300D8C362 /* CircleComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 92E3917E1FE87CA300D8C362 /* CircleComponent.cpp */; }; 92E46E941B6353E50035CD21 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 92E46E931B6353E50035CD21 /* OpenGL.framework */; }; /* End PBXBuildFile section */ @@ -24,10 +28,6 @@ 9223C4671F009428009A94D7 /* Game.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Game.cpp; sourceTree = ""; }; 9223C4681F009428009A94D7 /* Actor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Actor.cpp; sourceTree = ""; }; 9223C4691F009428009A94D7 /* Actor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Actor.h; sourceTree = ""; }; - 9223C46A1F009428009A94D7 /* AnimSpriteComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AnimSpriteComponent.cpp; sourceTree = ""; }; - 9223C46B1F009428009A94D7 /* AnimSpriteComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AnimSpriteComponent.h; sourceTree = ""; }; - 9223C46C1F009428009A94D7 /* BGSpriteComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BGSpriteComponent.cpp; sourceTree = ""; }; - 9223C46D1F009428009A94D7 /* BGSpriteComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BGSpriteComponent.h; sourceTree = ""; }; 9223C46E1F009428009A94D7 /* Component.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Component.cpp; sourceTree = ""; }; 9223C46F1F009428009A94D7 /* Component.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Component.h; sourceTree = ""; }; 9223C4701F009428009A94D7 /* Game.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Game.h; sourceTree = ""; }; @@ -39,6 +39,18 @@ 9223C4761F009428009A94D7 /* SpriteComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpriteComponent.cpp; sourceTree = ""; }; 9223C4771F009428009A94D7 /* SpriteComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpriteComponent.h; sourceTree = ""; }; 92D324FA1B697389005A86C7 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; + 92E391741FE87CA200D8C362 /* MoveComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MoveComponent.cpp; sourceTree = ""; }; + 92E391751FE87CA200D8C362 /* Asteroid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Asteroid.h; sourceTree = ""; }; + 92E391761FE87CA200D8C362 /* MoveComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MoveComponent.h; sourceTree = ""; }; + 92E391771FE87CA200D8C362 /* Laser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Laser.cpp; sourceTree = ""; }; + 92E391781FE87CA200D8C362 /* Random.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Random.cpp; sourceTree = ""; }; + 92E391791FE87CA200D8C362 /* CircleComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CircleComponent.h; sourceTree = ""; }; + 92E3917A1FE87CA200D8C362 /* InputComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InputComponent.cpp; sourceTree = ""; }; + 92E3917B1FE87CA200D8C362 /* Laser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Laser.h; sourceTree = ""; }; + 92E3917C1FE87CA300D8C362 /* Random.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Random.h; sourceTree = ""; }; + 92E3917D1FE87CA300D8C362 /* Asteroid.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Asteroid.cpp; sourceTree = ""; }; + 92E3917E1FE87CA300D8C362 /* CircleComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CircleComponent.cpp; sourceTree = ""; }; + 92E3917F1FE87CA300D8C362 /* InputComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InputComponent.h; sourceTree = ""; }; 92E46DF71B634EA30035CD21 /* Game-mac */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "Game-mac"; sourceTree = BUILT_PRODUCTS_DIR; }; 92E46E931B6353E50035CD21 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; /* End PBXFileReference section */ @@ -61,17 +73,25 @@ children = ( 9223C4681F009428009A94D7 /* Actor.cpp */, 9223C4691F009428009A94D7 /* Actor.h */, - 9223C46A1F009428009A94D7 /* AnimSpriteComponent.cpp */, - 9223C46B1F009428009A94D7 /* AnimSpriteComponent.h */, - 9223C46C1F009428009A94D7 /* BGSpriteComponent.cpp */, - 9223C46D1F009428009A94D7 /* BGSpriteComponent.h */, + 92E3917D1FE87CA300D8C362 /* Asteroid.cpp */, + 92E391751FE87CA200D8C362 /* Asteroid.h */, + 92E3917E1FE87CA300D8C362 /* CircleComponent.cpp */, + 92E391791FE87CA200D8C362 /* CircleComponent.h */, 9223C46E1F009428009A94D7 /* Component.cpp */, 9223C46F1F009428009A94D7 /* Component.h */, 9223C4671F009428009A94D7 /* Game.cpp */, 9223C4701F009428009A94D7 /* Game.h */, + 92E3917A1FE87CA200D8C362 /* InputComponent.cpp */, + 92E3917F1FE87CA300D8C362 /* InputComponent.h */, + 92E391771FE87CA200D8C362 /* Laser.cpp */, + 92E3917B1FE87CA200D8C362 /* Laser.h */, 9223C4711F009428009A94D7 /* Main.cpp */, 9223C4721F009428009A94D7 /* Math.cpp */, 9223C4731F009428009A94D7 /* Math.h */, + 92E391741FE87CA200D8C362 /* MoveComponent.cpp */, + 92E391761FE87CA200D8C362 /* MoveComponent.h */, + 92E391781FE87CA200D8C362 /* Random.cpp */, + 92E3917C1FE87CA300D8C362 /* Random.h */, 9223C4741F009428009A94D7 /* Ship.cpp */, 9223C4751F009428009A94D7 /* Ship.h */, 9223C4761F009428009A94D7 /* SpriteComponent.cpp */, @@ -116,7 +136,7 @@ 92E46DEF1B634EA30035CD21 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0720; + LastUpgradeCheck = 0920; ORGANIZATIONNAME = "Sanjay Madhav"; TargetAttributes = { 92E46DF61B634EA30035CD21 = { @@ -124,7 +144,7 @@ }; }; }; - buildConfigurationList = 92E46DF21B634EA30035CD21 /* Build configuration list for PBXProject "Chapter3-mac" */; + buildConfigurationList = 92E46DF21B634EA30035CD21 /* Build configuration list for PBXProject "Chapter03-mac" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; @@ -162,15 +182,19 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 92E391811FE87CA300D8C362 /* Laser.cpp in Sources */, + 92E391851FE87CA300D8C362 /* CircleComponent.cpp in Sources */, 9223C47D1F009428009A94D7 /* Main.cpp in Sources */, 9223C47E1F009428009A94D7 /* Math.cpp in Sources */, - 9223C47A1F009428009A94D7 /* AnimSpriteComponent.cpp in Sources */, - 9223C47B1F009428009A94D7 /* BGSpriteComponent.cpp in Sources */, 9223C4781F009428009A94D7 /* Game.cpp in Sources */, + 92E391841FE87CA300D8C362 /* Asteroid.cpp in Sources */, 9223C4801F009428009A94D7 /* SpriteComponent.cpp in Sources */, + 92E391801FE87CA300D8C362 /* MoveComponent.cpp in Sources */, 9223C47F1F009428009A94D7 /* Ship.cpp in Sources */, 9223C4791F009428009A94D7 /* Actor.cpp in Sources */, + 92E391821FE87CA300D8C362 /* Random.cpp in Sources */, 9223C47C1F009428009A94D7 /* Component.cpp in Sources */, + 92E391831FE87CA300D8C362 /* InputComponent.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -185,13 +209,21 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; @@ -228,13 +260,21 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; @@ -318,7 +358,7 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 92E46DF21B634EA30035CD21 /* Build configuration list for PBXProject "Chapter3-mac" */ = { + 92E46DF21B634EA30035CD21 /* Build configuration list for PBXProject "Chapter03-mac" */ = { isa = XCConfigurationList; buildConfigurations = ( 92E46DFC1B634EA40035CD21 /* Debug */, diff --git a/Chapter03/Chapter3-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Chapter03/Chapter03-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 54% rename from Chapter03/Chapter3-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to Chapter03/Chapter03-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 84be36ce..71b69c85 100644 --- a/Chapter03/Chapter3-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/Chapter03/Chapter03-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:/Users/Sanjay/gameprogcpp-final/Chapter03/Chapter03-mac.xcodeproj"> diff --git a/Chapter03/Chapter3-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme b/Chapter03/Chapter03-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme similarity index 89% rename from Chapter03/Chapter3-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme rename to Chapter03/Chapter03-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme index 8c41bc4b..08c75a44 100644 --- a/Chapter03/Chapter3-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme +++ b/Chapter03/Chapter03-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme @@ -1,6 +1,6 @@ + ReferencedContainer = "container:Chapter03-mac.xcodeproj"> @@ -26,6 +26,7 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + language = "" shouldUseLaunchSchemeArgsEnv = "YES"> @@ -35,7 +36,7 @@ BlueprintIdentifier = "92E46DF61B634EA30035CD21" BuildableName = "Game-mac" BlueprintName = "Game-mac" - ReferencedContainer = "container:Chapter3-mac.xcodeproj"> + ReferencedContainer = "container:Chapter03-mac.xcodeproj"> @@ -45,6 +46,7 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + language = "" launchStyle = "0" useCustomWorkingDirectory = "YES" customWorkingDirectory = "$(SRCROOT)" @@ -59,7 +61,7 @@ BlueprintIdentifier = "92E46DF61B634EA30035CD21" BuildableName = "Game-mac" BlueprintName = "Game-mac" - ReferencedContainer = "container:Chapter3-mac.xcodeproj"> + ReferencedContainer = "container:Chapter03-mac.xcodeproj"> @@ -78,7 +80,7 @@ BlueprintIdentifier = "92E46DF61B634EA30035CD21" BuildableName = "Game-mac" BlueprintName = "Game-mac" - ReferencedContainer = "container:Chapter3-mac.xcodeproj"> + ReferencedContainer = "container:Chapter03-mac.xcodeproj"> From 70ddf554ae911286aec0fe5f7756f7bd74cb1d1c Mon Sep 17 00:00:00 2001 From: Sanjay Madhav Date: Mon, 18 Dec 2017 16:54:24 -0600 Subject: [PATCH 38/40] Chapter 4 mac --- .../project.pbxproj | 40 ++++++++++++++----- .../contents.xcworkspacedata | 2 +- .../xcshareddata/xcschemes/Game-mac.xcscheme | 12 +++--- Chapter04/Math.cpp | 33 ++++++++------- 4 files changed, 55 insertions(+), 32 deletions(-) rename Chapter04/{Chapter5-mac.xcodeproj => Chapter04-mac.xcodeproj}/project.pbxproj (88%) rename Chapter04/{Chapter5-mac.xcodeproj => Chapter04-mac.xcodeproj}/project.xcworkspace/contents.xcworkspacedata (52%) rename Chapter04/{Chapter5-mac.xcodeproj => Chapter04-mac.xcodeproj}/xcshareddata/xcschemes/Game-mac.xcscheme (89%) diff --git a/Chapter04/Chapter5-mac.xcodeproj/project.pbxproj b/Chapter04/Chapter04-mac.xcodeproj/project.pbxproj similarity index 88% rename from Chapter04/Chapter5-mac.xcodeproj/project.pbxproj rename to Chapter04/Chapter04-mac.xcodeproj/project.pbxproj index 7c2d9853..82443e7c 100644 --- a/Chapter04/Chapter5-mac.xcodeproj/project.pbxproj +++ b/Chapter04/Chapter04-mac.xcodeproj/project.pbxproj @@ -19,10 +19,12 @@ 9223C4801F009428009A94D7 /* SpriteComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4761F009428009A94D7 /* SpriteComponent.cpp */; }; 9223C48B1F0CA3CE009A94D7 /* MoveComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C48A1F0CA3CE009A94D7 /* MoveComponent.cpp */; }; 9223C48F1F0CA67A009A94D7 /* Tile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C48D1F0CA67A009A94D7 /* Tile.cpp */; }; - 9223C4941F0CA766009A94D7 /* CollisionComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4901F0CA766009A94D7 /* CollisionComponent.cpp */; }; 9223C4951F0CA766009A94D7 /* CircleComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4911F0CA766009A94D7 /* CircleComponent.cpp */; }; 9223C4981F0DBD69009A94D7 /* Grid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4961F0DBD69009A94D7 /* Grid.cpp */; }; 92D324FB1B697389005A86C7 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 92D324FA1B697389005A86C7 /* CoreFoundation.framework */; }; + 92E3918B1FE87D6000D8C362 /* AIState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 92E391861FE87D6000D8C362 /* AIState.cpp */; }; + 92E3918C1FE87D6000D8C362 /* AIComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 92E391881FE87D6000D8C362 /* AIComponent.cpp */; }; + 92E3918D1FE87D6000D8C362 /* Search.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 92E3918A1FE87D6000D8C362 /* Search.cpp */; }; 92E46E941B6353E50035CD21 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 92E46E931B6353E50035CD21 /* OpenGL.framework */; }; /* End PBXBuildFile section */ @@ -50,13 +52,16 @@ 9223C48C1F0CA3D4009A94D7 /* MoveComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MoveComponent.h; sourceTree = ""; }; 9223C48D1F0CA67A009A94D7 /* Tile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Tile.cpp; sourceTree = ""; }; 9223C48E1F0CA67A009A94D7 /* Tile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Tile.h; sourceTree = ""; }; - 9223C4901F0CA766009A94D7 /* CollisionComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CollisionComponent.cpp; sourceTree = ""; }; 9223C4911F0CA766009A94D7 /* CircleComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CircleComponent.cpp; sourceTree = ""; }; - 9223C4921F0CA766009A94D7 /* CollisionComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CollisionComponent.h; sourceTree = ""; }; 9223C4931F0CA766009A94D7 /* CircleComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CircleComponent.h; sourceTree = ""; }; 9223C4961F0DBD69009A94D7 /* Grid.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Grid.cpp; sourceTree = ""; }; 9223C4971F0DBD69009A94D7 /* Grid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Grid.h; sourceTree = ""; }; 92D324FA1B697389005A86C7 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; + 92E391861FE87D6000D8C362 /* AIState.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AIState.cpp; sourceTree = ""; }; + 92E391871FE87D6000D8C362 /* AIComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIComponent.h; sourceTree = ""; }; + 92E391881FE87D6000D8C362 /* AIComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AIComponent.cpp; sourceTree = ""; }; + 92E391891FE87D6000D8C362 /* AIState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIState.h; sourceTree = ""; }; + 92E3918A1FE87D6000D8C362 /* Search.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Search.cpp; sourceTree = ""; }; 92E46DF71B634EA30035CD21 /* Game-mac */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "Game-mac"; sourceTree = BUILT_PRODUCTS_DIR; }; 92E46E931B6353E50035CD21 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; /* End PBXFileReference section */ @@ -79,14 +84,16 @@ children = ( 9223C4681F009428009A94D7 /* Actor.cpp */, 9223C4691F009428009A94D7 /* Actor.h */, + 92E391881FE87D6000D8C362 /* AIComponent.cpp */, + 92E391871FE87D6000D8C362 /* AIComponent.h */, + 92E391861FE87D6000D8C362 /* AIState.cpp */, + 92E391891FE87D6000D8C362 /* AIState.h */, 9203E9F71F0F12FE00F9FFC2 /* Bullet.cpp */, 9203E9F81F0F12FE00F9FFC2 /* Bullet.h */, 9223C46E1F009428009A94D7 /* Component.cpp */, 9223C46F1F009428009A94D7 /* Component.h */, 9223C4911F0CA766009A94D7 /* CircleComponent.cpp */, 9223C4931F0CA766009A94D7 /* CircleComponent.h */, - 9223C4901F0CA766009A94D7 /* CollisionComponent.cpp */, - 9223C4921F0CA766009A94D7 /* CollisionComponent.h */, 9203E9F11F0DE24000F9FFC2 /* Enemy.cpp */, 9203E9F21F0DE24000F9FFC2 /* Enemy.h */, 9223C4671F009428009A94D7 /* Game.cpp */, @@ -100,6 +107,7 @@ 9223C48C1F0CA3D4009A94D7 /* MoveComponent.h */, 9203E9F41F0DF13600F9FFC2 /* NavComponent.cpp */, 9203E9F51F0DF13600F9FFC2 /* NavComponent.h */, + 92E3918A1FE87D6000D8C362 /* Search.cpp */, 9223C4761F009428009A94D7 /* SpriteComponent.cpp */, 9223C4771F009428009A94D7 /* SpriteComponent.h */, 9223C48D1F0CA67A009A94D7 /* Tile.cpp */, @@ -146,7 +154,7 @@ 92E46DEF1B634EA30035CD21 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0830; + LastUpgradeCheck = 0920; ORGANIZATIONNAME = "Sanjay Madhav"; TargetAttributes = { 92E46DF61B634EA30035CD21 = { @@ -154,7 +162,7 @@ }; }; }; - buildConfigurationList = 92E46DF21B634EA30035CD21 /* Build configuration list for PBXProject "Chapter5-mac" */; + buildConfigurationList = 92E46DF21B634EA30035CD21 /* Build configuration list for PBXProject "Chapter04-mac" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; @@ -192,11 +200,11 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 9223C4941F0CA766009A94D7 /* CollisionComponent.cpp in Sources */, 9223C47D1F009428009A94D7 /* Main.cpp in Sources */, 9223C47E1F009428009A94D7 /* Math.cpp in Sources */, 9203E9F01F0DD69900F9FFC2 /* Tower.cpp in Sources */, 9223C4781F009428009A94D7 /* Game.cpp in Sources */, + 92E3918B1FE87D6000D8C362 /* AIState.cpp in Sources */, 9203E9F61F0DF13600F9FFC2 /* NavComponent.cpp in Sources */, 9223C4801F009428009A94D7 /* SpriteComponent.cpp in Sources */, 9223C48B1F0CA3CE009A94D7 /* MoveComponent.cpp in Sources */, @@ -205,6 +213,8 @@ 9203E9F91F0F12FE00F9FFC2 /* Bullet.cpp in Sources */, 9223C4951F0CA766009A94D7 /* CircleComponent.cpp in Sources */, 9223C47C1F009428009A94D7 /* Component.cpp in Sources */, + 92E3918C1FE87D6000D8C362 /* AIComponent.cpp in Sources */, + 92E3918D1FE87D6000D8C362 /* Search.cpp in Sources */, 9223C48F1F0CA67A009A94D7 /* Tile.cpp in Sources */, 9223C4981F0DBD69009A94D7 /* Grid.cpp in Sources */, ); @@ -221,14 +231,20 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -266,14 +282,20 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -356,7 +378,7 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 92E46DF21B634EA30035CD21 /* Build configuration list for PBXProject "Chapter5-mac" */ = { + 92E46DF21B634EA30035CD21 /* Build configuration list for PBXProject "Chapter04-mac" */ = { isa = XCConfigurationList; buildConfigurations = ( 92E46DFC1B634EA40035CD21 /* Debug */, diff --git a/Chapter04/Chapter5-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Chapter04/Chapter04-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 52% rename from Chapter04/Chapter5-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to Chapter04/Chapter04-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata index b1898c28..b36b9db7 100644 --- a/Chapter04/Chapter5-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/Chapter04/Chapter04-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:/Users/Sanjay/gameprogcpp-final/Chapter04/Chapter04-mac.xcodeproj"> diff --git a/Chapter04/Chapter5-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme b/Chapter04/Chapter04-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme similarity index 89% rename from Chapter04/Chapter5-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme rename to Chapter04/Chapter04-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme index 0cdf7699..2667789e 100644 --- a/Chapter04/Chapter5-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme +++ b/Chapter04/Chapter04-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme @@ -1,6 +1,6 @@ + ReferencedContainer = "container:Chapter04-mac.xcodeproj"> @@ -26,6 +26,7 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + language = "" shouldUseLaunchSchemeArgsEnv = "YES"> @@ -35,7 +36,7 @@ BlueprintIdentifier = "92E46DF61B634EA30035CD21" BuildableName = "Game-mac" BlueprintName = "Game-mac" - ReferencedContainer = "container:Chapter5-mac.xcodeproj"> + ReferencedContainer = "container:Chapter04-mac.xcodeproj"> @@ -45,6 +46,7 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + language = "" launchStyle = "0" useCustomWorkingDirectory = "YES" customWorkingDirectory = "$(SRCROOT)" @@ -59,7 +61,7 @@ BlueprintIdentifier = "92E46DF61B634EA30035CD21" BuildableName = "Game-mac" BlueprintName = "Game-mac" - ReferencedContainer = "container:Chapter5-mac.xcodeproj"> + ReferencedContainer = "container:Chapter04-mac.xcodeproj"> @@ -78,7 +80,7 @@ BlueprintIdentifier = "92E46DF61B634EA30035CD21" BuildableName = "Game-mac" BlueprintName = "Game-mac" - ReferencedContainer = "container:Chapter5-mac.xcodeproj"> + ReferencedContainer = "container:Chapter04-mac.xcodeproj"> diff --git a/Chapter04/Math.cpp b/Chapter04/Math.cpp index fb40e095..a16e7261 100644 --- a/Chapter04/Math.cpp +++ b/Chapter04/Math.cpp @@ -99,12 +99,13 @@ Vector3 Vector3::Transform(const Vector3& v, const Quaternion& q) void Matrix4::Invert() { // Thanks slow math - float tmp[12]; /* temp array for pairs */ - float src[16]; /* array of transpose source matrix */ - float dst[16]; /* storage */ - float det; /* determinant */ - /* transpose matrix */ + // This is a really janky way to unroll everything... + float tmp[12]; + float src[16]; + float dst[16]; + float det; + // Transpose matrix // row 1 to col 1 src[0] = mat[0][0]; src[4] = mat[0][1]; @@ -129,13 +130,7 @@ void Matrix4::Invert() src[11] = mat[3][2]; src[15] = mat[3][3]; - // for (int i = 0; i < 4; i++) { - // src[i] = mat[i*4]; - // src[i + 4] = mat[i*4 + 1]; - // src[i + 8] = mat[i*4 + 2]; - // src[i + 12] = mat[i*4 + 3]; - // } - /* calculate pairs for first 8 elements (cofactors) */ + // Calculate cofactors tmp[0] = src[10] * src[15]; tmp[1] = src[11] * src[14]; tmp[2] = src[9] * src[15]; @@ -148,7 +143,7 @@ void Matrix4::Invert() tmp[9] = src[10] * src[12]; tmp[10] = src[8] * src[13]; tmp[11] = src[9] * src[12]; - /* calculate first 8 elements (cofactors) */ + dst[0] = tmp[0] * src[5] + tmp[3] * src[6] + tmp[4] * src[7]; dst[0] -= tmp[1] * src[5] + tmp[2] * src[6] + tmp[5] * src[7]; dst[1] = tmp[1] * src[4] + tmp[6] * src[6] + tmp[9] * src[7]; @@ -165,7 +160,7 @@ void Matrix4::Invert() dst[6] -= tmp[2] * src[0] + tmp[7] * src[1] + tmp[10] * src[3]; dst[7] = tmp[4] * src[0] + tmp[9] * src[1] + tmp[10] * src[2]; dst[7] -= tmp[5] * src[0] + tmp[8] * src[1] + tmp[11] * src[2]; - /* calculate pairs for second 8 elements (cofactors) */ + tmp[0] = src[2] * src[7]; tmp[1] = src[3] * src[6]; tmp[2] = src[1] * src[7]; @@ -178,7 +173,7 @@ void Matrix4::Invert() tmp[9] = src[2] * src[4]; tmp[10] = src[0] * src[5]; tmp[11] = src[1] * src[4]; - /* calculate second 8 elements (cofactors) */ + dst[8] = tmp[0] * src[13] + tmp[3] * src[14] + tmp[4] * src[15]; dst[8] -= tmp[1] * src[13] + tmp[2] * src[14] + tmp[5] * src[15]; dst[9] = tmp[1] * src[12] + tmp[6] * src[14] + tmp[9] * src[15]; @@ -195,12 +190,16 @@ void Matrix4::Invert() dst[14] -= tmp[10] * src[11] + tmp[2] * src[8] + tmp[7] * src[9]; dst[15] = tmp[10] * src[10] + tmp[4] * src[8] + tmp[9] * src[9]; dst[15] -= tmp[8] * src[9] + tmp[11] * src[10] + tmp[5] * src[8]; - /* calculate determinant */ + + // Calculate determinant det = src[0] * dst[0] + src[1] * dst[1] + src[2] * dst[2] + src[3] * dst[3]; - /* calculate matrix inverse */ + + // Inverse of matrix is divided by determinant det = 1 / det; for (int j = 0; j < 16; j++) + { dst[j] *= det; + } // Set it back for (int i = 0; i < 4; i++) From 09f77ffe65f8be5634a58aad23f459e49bb6992d Mon Sep 17 00:00:00 2001 From: Sanjay Madhav Date: Mon, 18 Dec 2017 17:14:49 -0600 Subject: [PATCH 39/40] Chapter 5 mac --- .../project.pbxproj | 94 +++++++++---------- .../contents.xcworkspacedata | 2 +- .../xcshareddata/xcschemes/Game-mac.xcscheme | 12 ++- Chapter05/Math.cpp | 33 ++++--- 4 files changed, 71 insertions(+), 70 deletions(-) rename Chapter05/{Chapter6-mac.xcodeproj => Chapter05-mac.xcodeproj}/project.pbxproj (80%) rename Chapter05/{Chapter6-mac.xcodeproj => Chapter05-mac.xcodeproj}/project.xcworkspace/contents.xcworkspacedata (52%) rename Chapter05/{Chapter6-mac.xcodeproj => Chapter05-mac.xcodeproj}/xcshareddata/xcschemes/Game-mac.xcscheme (89%) diff --git a/Chapter05/Chapter6-mac.xcodeproj/project.pbxproj b/Chapter05/Chapter05-mac.xcodeproj/project.pbxproj similarity index 80% rename from Chapter05/Chapter6-mac.xcodeproj/project.pbxproj rename to Chapter05/Chapter05-mac.xcodeproj/project.pbxproj index abc3a372..0d5e462f 100644 --- a/Chapter05/Chapter6-mac.xcodeproj/project.pbxproj +++ b/Chapter05/Chapter05-mac.xcodeproj/project.pbxproj @@ -7,10 +7,6 @@ objects = { /* Begin PBXBuildFile section */ - 9203E9F01F0DD69900F9FFC2 /* Tower.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9203E9EE1F0DD69900F9FFC2 /* Tower.cpp */; }; - 9203E9F31F0DE24000F9FFC2 /* Enemy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9203E9F11F0DE24000F9FFC2 /* Enemy.cpp */; }; - 9203E9F61F0DF13600F9FFC2 /* NavComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9203E9F41F0DF13600F9FFC2 /* NavComponent.cpp */; }; - 9203E9F91F0F12FE00F9FFC2 /* Bullet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9203E9F71F0F12FE00F9FFC2 /* Bullet.cpp */; }; 9206FDC61F140707005078A2 /* Texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9206FDC41F140707005078A2 /* Texture.cpp */; }; 9206FDC91F140D40005078A2 /* Shader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9206FDC71F140D40005078A2 /* Shader.cpp */; }; 9223C4781F009428009A94D7 /* Game.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4671F009428009A94D7 /* Game.cpp */; }; @@ -20,24 +16,18 @@ 9223C47E1F009428009A94D7 /* Math.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4721F009428009A94D7 /* Math.cpp */; }; 9223C4801F009428009A94D7 /* SpriteComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4761F009428009A94D7 /* SpriteComponent.cpp */; }; 9223C48B1F0CA3CE009A94D7 /* MoveComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C48A1F0CA3CE009A94D7 /* MoveComponent.cpp */; }; - 9223C48F1F0CA67A009A94D7 /* Tile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C48D1F0CA67A009A94D7 /* Tile.cpp */; }; - 9223C4941F0CA766009A94D7 /* CollisionComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4901F0CA766009A94D7 /* CollisionComponent.cpp */; }; 9223C4951F0CA766009A94D7 /* CircleComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4911F0CA766009A94D7 /* CircleComponent.cpp */; }; - 9223C4981F0DBD69009A94D7 /* Grid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4961F0DBD69009A94D7 /* Grid.cpp */; }; 92CF0D791F3BBF140086A0F3 /* VertexArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 92CF0D771F3BBF140086A0F3 /* VertexArray.cpp */; }; 92D324FB1B697389005A86C7 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 92D324FA1B697389005A86C7 /* CoreFoundation.framework */; }; + 92E391981FE87F4800D8C362 /* InputComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 92E3918F1FE87F4700D8C362 /* InputComponent.cpp */; }; + 92E391991FE87F4800D8C362 /* Ship.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 92E391911FE87F4700D8C362 /* Ship.cpp */; }; + 92E3919A1FE87F4800D8C362 /* Asteroid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 92E391921FE87F4700D8C362 /* Asteroid.cpp */; }; + 92E3919B1FE87F4800D8C362 /* Laser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 92E391931FE87F4700D8C362 /* Laser.cpp */; }; + 92E3919C1FE87F4800D8C362 /* Random.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 92E391941FE87F4800D8C362 /* Random.cpp */; }; 92E46E941B6353E50035CD21 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 92E46E931B6353E50035CD21 /* OpenGL.framework */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - 9203E9EE1F0DD69900F9FFC2 /* Tower.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Tower.cpp; sourceTree = ""; }; - 9203E9EF1F0DD69900F9FFC2 /* Tower.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Tower.h; sourceTree = ""; }; - 9203E9F11F0DE24000F9FFC2 /* Enemy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Enemy.cpp; sourceTree = ""; }; - 9203E9F21F0DE24000F9FFC2 /* Enemy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Enemy.h; sourceTree = ""; }; - 9203E9F41F0DF13600F9FFC2 /* NavComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NavComponent.cpp; sourceTree = ""; }; - 9203E9F51F0DF13600F9FFC2 /* NavComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NavComponent.h; sourceTree = ""; }; - 9203E9F71F0F12FE00F9FFC2 /* Bullet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Bullet.cpp; sourceTree = ""; }; - 9203E9F81F0F12FE00F9FFC2 /* Bullet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Bullet.h; sourceTree = ""; }; 9206FDC31F13F7E8005078A2 /* Shaders */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Shaders; sourceTree = ""; }; 9206FDC41F140707005078A2 /* Texture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Texture.cpp; sourceTree = ""; }; 9206FDC51F140707005078A2 /* Texture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Texture.h; sourceTree = ""; }; @@ -56,17 +46,21 @@ 9223C4771F009428009A94D7 /* SpriteComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpriteComponent.h; sourceTree = ""; }; 9223C48A1F0CA3CE009A94D7 /* MoveComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MoveComponent.cpp; sourceTree = ""; }; 9223C48C1F0CA3D4009A94D7 /* MoveComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MoveComponent.h; sourceTree = ""; }; - 9223C48D1F0CA67A009A94D7 /* Tile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Tile.cpp; sourceTree = ""; }; - 9223C48E1F0CA67A009A94D7 /* Tile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Tile.h; sourceTree = ""; }; - 9223C4901F0CA766009A94D7 /* CollisionComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CollisionComponent.cpp; sourceTree = ""; }; 9223C4911F0CA766009A94D7 /* CircleComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CircleComponent.cpp; sourceTree = ""; }; - 9223C4921F0CA766009A94D7 /* CollisionComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CollisionComponent.h; sourceTree = ""; }; 9223C4931F0CA766009A94D7 /* CircleComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CircleComponent.h; sourceTree = ""; }; - 9223C4961F0DBD69009A94D7 /* Grid.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Grid.cpp; sourceTree = ""; }; - 9223C4971F0DBD69009A94D7 /* Grid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Grid.h; sourceTree = ""; }; 92CF0D771F3BBF140086A0F3 /* VertexArray.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VertexArray.cpp; sourceTree = ""; }; 92CF0D781F3BBF140086A0F3 /* VertexArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VertexArray.h; sourceTree = ""; }; 92D324FA1B697389005A86C7 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; + 92E3918E1FE87F4700D8C362 /* Asteroid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Asteroid.h; sourceTree = ""; }; + 92E3918F1FE87F4700D8C362 /* InputComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InputComponent.cpp; sourceTree = ""; }; + 92E391901FE87F4700D8C362 /* Random.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Random.h; sourceTree = ""; }; + 92E391911FE87F4700D8C362 /* Ship.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Ship.cpp; sourceTree = ""; }; + 92E391921FE87F4700D8C362 /* Asteroid.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Asteroid.cpp; sourceTree = ""; }; + 92E391931FE87F4700D8C362 /* Laser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Laser.cpp; sourceTree = ""; }; + 92E391941FE87F4800D8C362 /* Random.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Random.cpp; sourceTree = ""; }; + 92E391951FE87F4800D8C362 /* Laser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Laser.h; sourceTree = ""; }; + 92E391961FE87F4800D8C362 /* InputComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InputComponent.h; sourceTree = ""; }; + 92E391971FE87F4800D8C362 /* Ship.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Ship.h; sourceTree = ""; }; 92E46DF71B634EA30035CD21 /* Game-mac */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "Game-mac"; sourceTree = BUILT_PRODUCTS_DIR; }; 92E46E931B6353E50035CD21 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; /* End PBXFileReference section */ @@ -87,41 +81,37 @@ 92E46DEE1B634EA30035CD21 = { isa = PBXGroup; children = ( - 92CF0D771F3BBF140086A0F3 /* VertexArray.cpp */, - 92CF0D781F3BBF140086A0F3 /* VertexArray.h */, 9223C4681F009428009A94D7 /* Actor.cpp */, 9223C4691F009428009A94D7 /* Actor.h */, - 9203E9F71F0F12FE00F9FFC2 /* Bullet.cpp */, - 9203E9F81F0F12FE00F9FFC2 /* Bullet.h */, + 92E391921FE87F4700D8C362 /* Asteroid.cpp */, + 92E3918E1FE87F4700D8C362 /* Asteroid.h */, 9223C46E1F009428009A94D7 /* Component.cpp */, 9223C46F1F009428009A94D7 /* Component.h */, 9223C4911F0CA766009A94D7 /* CircleComponent.cpp */, 9223C4931F0CA766009A94D7 /* CircleComponent.h */, - 9223C4901F0CA766009A94D7 /* CollisionComponent.cpp */, - 9223C4921F0CA766009A94D7 /* CollisionComponent.h */, - 9203E9F11F0DE24000F9FFC2 /* Enemy.cpp */, - 9203E9F21F0DE24000F9FFC2 /* Enemy.h */, 9223C4671F009428009A94D7 /* Game.cpp */, 9223C4701F009428009A94D7 /* Game.h */, - 9223C4961F0DBD69009A94D7 /* Grid.cpp */, - 9223C4971F0DBD69009A94D7 /* Grid.h */, + 92E3918F1FE87F4700D8C362 /* InputComponent.cpp */, + 92E391961FE87F4800D8C362 /* InputComponent.h */, + 92E391931FE87F4700D8C362 /* Laser.cpp */, + 92E391951FE87F4800D8C362 /* Laser.h */, 9223C4711F009428009A94D7 /* Main.cpp */, 9223C4721F009428009A94D7 /* Math.cpp */, 9223C4731F009428009A94D7 /* Math.h */, 9223C48A1F0CA3CE009A94D7 /* MoveComponent.cpp */, 9223C48C1F0CA3D4009A94D7 /* MoveComponent.h */, - 9203E9F41F0DF13600F9FFC2 /* NavComponent.cpp */, - 9203E9F51F0DF13600F9FFC2 /* NavComponent.h */, + 92E391941FE87F4800D8C362 /* Random.cpp */, + 92E391901FE87F4700D8C362 /* Random.h */, 9206FDC71F140D40005078A2 /* Shader.cpp */, 9206FDC81F140D40005078A2 /* Shader.h */, + 92E391911FE87F4700D8C362 /* Ship.cpp */, + 92E391971FE87F4800D8C362 /* Ship.h */, 9223C4761F009428009A94D7 /* SpriteComponent.cpp */, 9223C4771F009428009A94D7 /* SpriteComponent.h */, 9206FDC41F140707005078A2 /* Texture.cpp */, 9206FDC51F140707005078A2 /* Texture.h */, - 9223C48D1F0CA67A009A94D7 /* Tile.cpp */, - 9223C48E1F0CA67A009A94D7 /* Tile.h */, - 9203E9EE1F0DD69900F9FFC2 /* Tower.cpp */, - 9203E9EF1F0DD69900F9FFC2 /* Tower.h */, + 92CF0D771F3BBF140086A0F3 /* VertexArray.cpp */, + 92CF0D781F3BBF140086A0F3 /* VertexArray.h */, 9206FDC31F13F7E8005078A2 /* Shaders */, 92E46DF81B634EA30035CD21 /* Products */, 92D324FA1B697389005A86C7 /* CoreFoundation.framework */, @@ -163,7 +153,7 @@ 92E46DEF1B634EA30035CD21 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0830; + LastUpgradeCheck = 0920; ORGANIZATIONNAME = "Sanjay Madhav"; TargetAttributes = { 92E46DF61B634EA30035CD21 = { @@ -171,7 +161,7 @@ }; }; }; - buildConfigurationList = 92E46DF21B634EA30035CD21 /* Build configuration list for PBXProject "Chapter6-mac" */; + buildConfigurationList = 92E46DF21B634EA30035CD21 /* Build configuration list for PBXProject "Chapter05-mac" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; @@ -209,24 +199,22 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 9223C4941F0CA766009A94D7 /* CollisionComponent.cpp in Sources */, + 92E391991FE87F4800D8C362 /* Ship.cpp in Sources */, 9223C47D1F009428009A94D7 /* Main.cpp in Sources */, 9223C47E1F009428009A94D7 /* Math.cpp in Sources */, - 9203E9F01F0DD69900F9FFC2 /* Tower.cpp in Sources */, 9223C4781F009428009A94D7 /* Game.cpp in Sources */, - 9203E9F61F0DF13600F9FFC2 /* NavComponent.cpp in Sources */, 9223C4801F009428009A94D7 /* SpriteComponent.cpp in Sources */, 92CF0D791F3BBF140086A0F3 /* VertexArray.cpp in Sources */, 9223C48B1F0CA3CE009A94D7 /* MoveComponent.cpp in Sources */, - 9203E9F31F0DE24000F9FFC2 /* Enemy.cpp in Sources */, 9206FDC91F140D40005078A2 /* Shader.cpp in Sources */, 9223C4791F009428009A94D7 /* Actor.cpp in Sources */, - 9203E9F91F0F12FE00F9FFC2 /* Bullet.cpp in Sources */, + 92E3919B1FE87F4800D8C362 /* Laser.cpp in Sources */, 9223C4951F0CA766009A94D7 /* CircleComponent.cpp in Sources */, 9223C47C1F009428009A94D7 /* Component.cpp in Sources */, + 92E3919C1FE87F4800D8C362 /* Random.cpp in Sources */, + 92E391981FE87F4800D8C362 /* InputComponent.cpp in Sources */, + 92E3919A1FE87F4800D8C362 /* Asteroid.cpp in Sources */, 9206FDC61F140707005078A2 /* Texture.cpp in Sources */, - 9223C48F1F0CA67A009A94D7 /* Tile.cpp in Sources */, - 9223C4981F0DBD69009A94D7 /* Grid.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -241,14 +229,20 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -286,14 +280,20 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -378,7 +378,7 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 92E46DF21B634EA30035CD21 /* Build configuration list for PBXProject "Chapter6-mac" */ = { + 92E46DF21B634EA30035CD21 /* Build configuration list for PBXProject "Chapter05-mac" */ = { isa = XCConfigurationList; buildConfigurations = ( 92E46DFC1B634EA40035CD21 /* Debug */, diff --git a/Chapter05/Chapter6-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Chapter05/Chapter05-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 52% rename from Chapter05/Chapter6-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to Chapter05/Chapter05-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 57070e17..da50ea13 100644 --- a/Chapter05/Chapter6-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/Chapter05/Chapter05-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:/Users/Sanjay/gameprogcpp-final/Chapter05/Chapter05-mac.xcodeproj"> diff --git a/Chapter05/Chapter6-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme b/Chapter05/Chapter05-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme similarity index 89% rename from Chapter05/Chapter6-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme rename to Chapter05/Chapter05-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme index 2f114aa1..39791b89 100644 --- a/Chapter05/Chapter6-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme +++ b/Chapter05/Chapter05-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme @@ -1,6 +1,6 @@ + ReferencedContainer = "container:Chapter05-mac.xcodeproj"> @@ -26,6 +26,7 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + language = "" shouldUseLaunchSchemeArgsEnv = "YES"> @@ -35,7 +36,7 @@ BlueprintIdentifier = "92E46DF61B634EA30035CD21" BuildableName = "Game-mac" BlueprintName = "Game-mac" - ReferencedContainer = "container:Chapter6-mac.xcodeproj"> + ReferencedContainer = "container:Chapter05-mac.xcodeproj"> @@ -45,6 +46,7 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + language = "" launchStyle = "0" useCustomWorkingDirectory = "YES" customWorkingDirectory = "$(SRCROOT)" @@ -59,7 +61,7 @@ BlueprintIdentifier = "92E46DF61B634EA30035CD21" BuildableName = "Game-mac" BlueprintName = "Game-mac" - ReferencedContainer = "container:Chapter6-mac.xcodeproj"> + ReferencedContainer = "container:Chapter05-mac.xcodeproj"> @@ -78,7 +80,7 @@ BlueprintIdentifier = "92E46DF61B634EA30035CD21" BuildableName = "Game-mac" BlueprintName = "Game-mac" - ReferencedContainer = "container:Chapter6-mac.xcodeproj"> + ReferencedContainer = "container:Chapter05-mac.xcodeproj"> diff --git a/Chapter05/Math.cpp b/Chapter05/Math.cpp index fb40e095..a16e7261 100644 --- a/Chapter05/Math.cpp +++ b/Chapter05/Math.cpp @@ -99,12 +99,13 @@ Vector3 Vector3::Transform(const Vector3& v, const Quaternion& q) void Matrix4::Invert() { // Thanks slow math - float tmp[12]; /* temp array for pairs */ - float src[16]; /* array of transpose source matrix */ - float dst[16]; /* storage */ - float det; /* determinant */ - /* transpose matrix */ + // This is a really janky way to unroll everything... + float tmp[12]; + float src[16]; + float dst[16]; + float det; + // Transpose matrix // row 1 to col 1 src[0] = mat[0][0]; src[4] = mat[0][1]; @@ -129,13 +130,7 @@ void Matrix4::Invert() src[11] = mat[3][2]; src[15] = mat[3][3]; - // for (int i = 0; i < 4; i++) { - // src[i] = mat[i*4]; - // src[i + 4] = mat[i*4 + 1]; - // src[i + 8] = mat[i*4 + 2]; - // src[i + 12] = mat[i*4 + 3]; - // } - /* calculate pairs for first 8 elements (cofactors) */ + // Calculate cofactors tmp[0] = src[10] * src[15]; tmp[1] = src[11] * src[14]; tmp[2] = src[9] * src[15]; @@ -148,7 +143,7 @@ void Matrix4::Invert() tmp[9] = src[10] * src[12]; tmp[10] = src[8] * src[13]; tmp[11] = src[9] * src[12]; - /* calculate first 8 elements (cofactors) */ + dst[0] = tmp[0] * src[5] + tmp[3] * src[6] + tmp[4] * src[7]; dst[0] -= tmp[1] * src[5] + tmp[2] * src[6] + tmp[5] * src[7]; dst[1] = tmp[1] * src[4] + tmp[6] * src[6] + tmp[9] * src[7]; @@ -165,7 +160,7 @@ void Matrix4::Invert() dst[6] -= tmp[2] * src[0] + tmp[7] * src[1] + tmp[10] * src[3]; dst[7] = tmp[4] * src[0] + tmp[9] * src[1] + tmp[10] * src[2]; dst[7] -= tmp[5] * src[0] + tmp[8] * src[1] + tmp[11] * src[2]; - /* calculate pairs for second 8 elements (cofactors) */ + tmp[0] = src[2] * src[7]; tmp[1] = src[3] * src[6]; tmp[2] = src[1] * src[7]; @@ -178,7 +173,7 @@ void Matrix4::Invert() tmp[9] = src[2] * src[4]; tmp[10] = src[0] * src[5]; tmp[11] = src[1] * src[4]; - /* calculate second 8 elements (cofactors) */ + dst[8] = tmp[0] * src[13] + tmp[3] * src[14] + tmp[4] * src[15]; dst[8] -= tmp[1] * src[13] + tmp[2] * src[14] + tmp[5] * src[15]; dst[9] = tmp[1] * src[12] + tmp[6] * src[14] + tmp[9] * src[15]; @@ -195,12 +190,16 @@ void Matrix4::Invert() dst[14] -= tmp[10] * src[11] + tmp[2] * src[8] + tmp[7] * src[9]; dst[15] = tmp[10] * src[10] + tmp[4] * src[8] + tmp[9] * src[9]; dst[15] -= tmp[8] * src[9] + tmp[11] * src[10] + tmp[5] * src[8]; - /* calculate determinant */ + + // Calculate determinant det = src[0] * dst[0] + src[1] * dst[1] + src[2] * dst[2] + src[3] * dst[3]; - /* calculate matrix inverse */ + + // Inverse of matrix is divided by determinant det = 1 / det; for (int j = 0; j < 16; j++) + { dst[j] *= det; + } // Set it back for (int i = 0; i < 4; i++) From 80c945af73ab733b6796c8df80ccd482a80080de Mon Sep 17 00:00:00 2001 From: Sanjay Madhav Date: Mon, 18 Dec 2017 17:52:20 -0600 Subject: [PATCH 40/40] Chapter 8 Mac --- .../Chapter08-mac.xcodeproj/project.pbxproj | 14 +++++++- .../xcshareddata/xcschemes/Game-mac.xcscheme | 2 +- Chapter08/Math.cpp | 33 +++++++++---------- 3 files changed, 30 insertions(+), 19 deletions(-) diff --git a/Chapter08/Chapter08-mac.xcodeproj/project.pbxproj b/Chapter08/Chapter08-mac.xcodeproj/project.pbxproj index 9e840bd8..10dd8c93 100644 --- a/Chapter08/Chapter08-mac.xcodeproj/project.pbxproj +++ b/Chapter08/Chapter08-mac.xcodeproj/project.pbxproj @@ -158,7 +158,7 @@ 92E46DEF1B634EA30035CD21 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0830; + LastUpgradeCheck = 0920; ORGANIZATIONNAME = "Sanjay Madhav"; TargetAttributes = { 92E46DF61B634EA30035CD21 = { @@ -235,14 +235,20 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -280,14 +286,20 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; diff --git a/Chapter08/Chapter08-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme b/Chapter08/Chapter08-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme index 324df194..57c6b89e 100644 --- a/Chapter08/Chapter08-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme +++ b/Chapter08/Chapter08-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme @@ -1,6 +1,6 @@

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 zΝ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