diff --git a/.gitignore b/.gitignore index 497ac38..43de459 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ Out/ release/ debug/ out/ +bin/ #Project generated files *.db diff --git a/common b/common index 6bcaf46..47d464e 160000 --- a/common +++ b/common @@ -1 +1 @@ -Subproject commit 6bcaf460b95d3da258545140b8c82fc508cb658b +Subproject commit 47d464ed3afcd21bbd13f8ce7954371579065f6c diff --git a/src/scenes/application.cpp b/src/scenes/application.cpp deleted file mode 100644 index 32b9906..0000000 --- a/src/scenes/application.cpp +++ /dev/null @@ -1,188 +0,0 @@ -/* Copyright: (c) Kayne Ruse 2015 - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source - * distribution. -*/ -#include "application.hpp" - -#include -#include -#include - -void Application::Init(int argc, char* argv[]) { - //create and check the window - window = SDL_CreateWindow( - "Example Caption", - SDL_WINDOWPOS_UNDEFINED, - SDL_WINDOWPOS_UNDEFINED, - screenWidth, - screenHeight, - SDL_WINDOW_RESIZABLE); - - if (!window) { - std::ostringstream msg; - msg << "Failed to create the window: " << SDL_GetError(); - throw(std::runtime_error(msg.str())); - } - - //create and check the renderer - renderer = SDL_CreateRenderer(window, -1, 0); - - if (!renderer) { - std::ostringstream msg; - msg << "Failed to create the renderer: " << SDL_GetError(); - throw(std::runtime_error(msg.str())); - } - - //screen scaling - SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "best"); - SDL_RenderSetLogicalSize(renderer, 800, 600); - - //set the hook for the renderer - BaseScene::SetRenderer(renderer); -} - -void Application::Proc() { - //load the first scene - ProcessSceneSignal(SceneSignal::FIRST); - - //fixed frame rate - typedef std::chrono::steady_clock Clock; - - Clock::time_point simTime = Clock::now(); - Clock::time_point realTime; - constexpr std::chrono::duration frameDelay(16); //~60FPS - - //the game loop continues until the scenes signal QUIT - while(activeScene->GetSceneSignal() != SceneSignal::QUIT) { - //switch scenes if necessary - if(activeScene->GetSceneSignal() != SceneSignal::CONTINUE) { - ProcessSceneSignal(activeScene->GetSceneSignal()); - continue; - } - - //update the current time - realTime = Clock::now(); - - //simulate the game or give the machine a break - if (simTime < realTime) { - while(simTime < realTime) { - //call the user defined functions - activeScene->FrameStart(); - ProcessEvents(); - activeScene->Update(); - activeScene->FrameEnd(); - - //step to the next frame - simTime += frameDelay; - } - } - else { - SDL_Delay(1); - } - - SDL_RenderClear(renderer); - activeScene->RenderFrame(renderer); - SDL_RenderPresent(renderer); - } - - //cleanup - ClearScene(); -} - -void Application::Quit() { - //clean up after the program - BaseScene::SetRenderer(nullptr); - SDL_DestroyRenderer(renderer); - SDL_DestroyWindow(window); -} - -//------------------------- -//Scene management -//------------------------- - -void Application::ProcessEvents() { - SDL_Event event; - while(SDL_PollEvent(&event)) { - switch(event.type) { - case SDL_QUIT: - activeScene->QuitEvent(); - break; - - case SDL_MOUSEMOTION: - activeScene->MouseMotion(event.motion); - break; - - case SDL_MOUSEBUTTONDOWN: - activeScene->MouseButtonDown(event.button); - break; - - case SDL_MOUSEBUTTONUP: - activeScene->MouseButtonUp(event.button); - break; - - case SDL_MOUSEWHEEL: - activeScene->MouseWheel(event.wheel); - break; - - case SDL_KEYDOWN: - activeScene->KeyDown(event.key); - break; - - case SDL_KEYUP: - activeScene->KeyUp(event.key); - break; - - //TODO: joystick and controller events - - //window events are handled internally - case SDL_WINDOWEVENT: - switch(event.window.event) { - case SDL_WINDOWEVENT_RESIZED: - SDL_RenderSetLogicalSize(renderer, event.window.data1, event.window.data2); - break; - } - break; - } - } -} - -//Add the custom scene headers here -#include "example_scene.hpp" - -void Application::ProcessSceneSignal(SceneSignal signal) { - ClearScene(); - - switch(signal) { - case SceneSignal::FIRST: - case SceneSignal::EXAMPLE_SCENE: - activeScene = new ExampleScene(); - break; - default: { - std::ostringstream msg; - msg << "Failed to recognize the scene signal: " << signal; - throw(std::logic_error(msg.str())); - } - } -} - -void Application::ClearScene() { - delete activeScene; - activeScene = nullptr; -} \ No newline at end of file diff --git a/src/scenes/application.hpp b/src/scenes/application.hpp deleted file mode 100644 index c927734..0000000 --- a/src/scenes/application.hpp +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright: (c) Kayne Ruse 2015 - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source - * distribution. -*/ -#pragma once - -#include "base_scene.hpp" -#include "scene_signal.hpp" - -#include "SDL2/SDL.h" - -//TODO: do something with these -constexpr int screenWidth = 800; -constexpr int screenHeight = 600; - -//DOCS: The Application class handles scene switching, utilizing only one window -class Application { -public: - Application() = default; - ~Application() = default; - - void Init(int argc, char* argv[]); - void Proc(); - void Quit(); - -private: - //scene management - void ProcessEvents(); - void ProcessSceneSignal(SceneSignal); - void ClearScene(); - - BaseScene* activeScene = nullptr; - - //TODO: build a "window" class? - SDL_Window* window = nullptr; - SDL_Renderer* renderer = nullptr; -}; \ No newline at end of file diff --git a/src/scenes/base_scene.cpp b/src/scenes/base_scene.cpp deleted file mode 100644 index f637710..0000000 --- a/src/scenes/base_scene.cpp +++ /dev/null @@ -1,105 +0,0 @@ -/* Copyright: (c) Kayne Ruse 2015 - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source - * distribution. -*/ -#include "base_scene.hpp" - -SDL_Renderer* BaseScene::rendererHandle = nullptr; - -BaseScene::BaseScene() { - //EMPTY -} - -BaseScene::~BaseScene() { - //EMPTY -} - -void BaseScene::RenderFrame(SDL_Renderer* renderer) { - //EMPTY -} - -void BaseScene::SetRenderer(SDL_Renderer* r) { - rendererHandle = r; -} - -SDL_Renderer* BaseScene::GetRenderer() { - return rendererHandle; -} - -void BaseScene::SetSceneSignal(SceneSignal signal) { - sceneSignal = signal; -} - -SceneSignal BaseScene::GetSceneSignal() { - return sceneSignal; -} - -//------------------------- -//frame phases -//------------------------- - -void BaseScene::FrameStart() { - //EMPTY -} - -void BaseScene::Update() { - //EMPTY -} - -void BaseScene::FrameEnd() { - //EMPTY -} - -//------------------------- -//input events -//------------------------- - -void BaseScene::QuitEvent() { - sceneSignal = SceneSignal::QUIT; -} - -void BaseScene::MouseMotion(SDL_MouseMotionEvent const& event) { - //EMPTY -} - -void BaseScene::MouseButtonDown(SDL_MouseButtonEvent const& event) { - //EMPTY -} - -void BaseScene::MouseButtonUp(SDL_MouseButtonEvent const& event) { - //EMPTY -} - -void BaseScene::MouseWheel(SDL_MouseWheelEvent const& event) { - //EMPTY -} - -void BaseScene::KeyDown(SDL_KeyboardEvent const& event) { - //preference as a default - switch(event.keysym.sym) { - case SDLK_ESCAPE: - QuitEvent(); - break; - } -} - -void BaseScene::KeyUp(SDL_KeyboardEvent const& event) { - //EMPTY -} diff --git a/src/scenes/base_scene.hpp b/src/scenes/base_scene.hpp deleted file mode 100644 index 96a4085..0000000 --- a/src/scenes/base_scene.hpp +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright: (c) Kayne Ruse 2015 - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source - * distribution. -*/ -#pragma once - -#include "scene_signal.hpp" - -#include "SDL2/SDL.h" - -class BaseScene { -public: - BaseScene(); - virtual ~BaseScene(); - - virtual void RenderFrame(SDL_Renderer*); - static void SetRenderer(SDL_Renderer*); - SceneSignal GetSceneSignal(); - - //frame phases - virtual void FrameStart(); - virtual void Update(); - virtual void FrameEnd(); - - //input events - virtual void QuitEvent(); - virtual void MouseMotion(SDL_MouseMotionEvent const& event); - virtual void MouseButtonDown(SDL_MouseButtonEvent const& event); - virtual void MouseButtonUp(SDL_MouseButtonEvent const& event); - virtual void MouseWheel(SDL_MouseWheelEvent const& event); - virtual void KeyDown(SDL_KeyboardEvent const& event); - virtual void KeyUp(SDL_KeyboardEvent const& event); - - //TODO: joystick and controller events - -protected: - //control - static SDL_Renderer* GetRenderer(); - void SetSceneSignal(SceneSignal); - -private: - static SDL_Renderer* rendererHandle; - SceneSignal sceneSignal = SceneSignal::CONTINUE; -}; \ No newline at end of file diff --git a/src/scenes/example_scene.cpp b/src/scenes/example_scene.cpp deleted file mode 100644 index 33be9ab..0000000 --- a/src/scenes/example_scene.cpp +++ /dev/null @@ -1,83 +0,0 @@ -/* Copyright: (c) Kayne Ruse 2015 - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source - * distribution. -*/ -#include "example_scene.hpp" - -ExampleScene::ExampleScene() { - // -} - -ExampleScene::~ExampleScene() { - // -} - -//------------------------- -//frame phases -//------------------------- - -void ExampleScene::FrameStart() { - // -} - -void ExampleScene::Update() { - // -} - -void ExampleScene::FrameEnd() { - // -} - -void ExampleScene::RenderFrame(SDL_Renderer* renderer) { - // -} - -//------------------------- -//input events -//------------------------- - -void ExampleScene::MouseMotion(SDL_MouseMotionEvent const& event) { - // -} - -void ExampleScene::MouseButtonDown(SDL_MouseButtonEvent const& event) { - // -} - -void ExampleScene::MouseButtonUp(SDL_MouseButtonEvent const& event) { - // -} - -void ExampleScene::MouseWheel(SDL_MouseWheelEvent const& event) { - // -} - -void ExampleScene::KeyDown(SDL_KeyboardEvent const& event) { - //preference as a default - switch(event.keysym.sym) { - case SDLK_ESCAPE: - QuitEvent(); - break; - } -} - -void ExampleScene::KeyUp(SDL_KeyboardEvent const& event) { - // -} diff --git a/src/scenes/example_scene.hpp b/src/scenes/example_scene.hpp deleted file mode 100644 index 2f18af1..0000000 --- a/src/scenes/example_scene.hpp +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright: (c) Kayne Ruse 2015 - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source - * distribution. -*/ -#pragma once - -#include "base_scene.hpp" - -class ExampleScene : public BaseScene { -public: - ExampleScene(); - ~ExampleScene(); - - void RenderFrame(SDL_Renderer* renderer) override; - -private: - //frame phases - void FrameStart() override; - void Update() override; - void FrameEnd() override; - - //input events - void MouseMotion(SDL_MouseMotionEvent const& event) override; - void MouseButtonDown(SDL_MouseButtonEvent const& event) override; - void MouseButtonUp(SDL_MouseButtonEvent const& event) override; - void MouseWheel(SDL_MouseWheelEvent const& event) override; - void KeyDown(SDL_KeyboardEvent const& event) override; - void KeyUp(SDL_KeyboardEvent const& event) override; -}; diff --git a/src/scenes/main.cpp b/src/scenes/main.cpp deleted file mode 100644 index 90f7d67..0000000 --- a/src/scenes/main.cpp +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright: (c) Kayne Ruse 2015 - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source - * distribution. -*/ -#include "application.hpp" - -#include "SDL2/SDL.h" - -#include -#include - -int main(int argc, char** argv) { - std::cout << "Beginning " << argv[0] << std::endl; - try { - Application app; - app.Init(argc, argv); - app.Proc(); - app.Quit(); - } - catch(std::exception& e) { - std::cerr << "Fatal Error: " << e.what() << std::endl; - return 1; - } - std::cout << "Clean exit from " << argv[0] << std::endl; - return 0; -} \ No newline at end of file diff --git a/src/scenes/makefile b/src/scenes/makefile deleted file mode 100644 index a8f0ea0..0000000 --- a/src/scenes/makefile +++ /dev/null @@ -1,56 +0,0 @@ -#include directories -INCLUDES+=. - -#libraries -#the order of the $(LIBS) is important, at least for MinGW -LIBS+= -ifeq ($(OS),Windows_NT) - LIBS+=-lmingw32 -endif -LIBS+=-lSDL2main -lSDL2 - -#flags -CXXFLAGS+=-std=c++11 $(addprefix -I,$(INCLUDES)) -ifeq ($(shell uname), Linux) - #read data about the current install - CXXFLAGS+=$(shell sdl-config --cflags --static-libs) -endif - -#source -CXXSRC=$(wildcard *.cpp) - -#objects -OBJDIR=obj -OBJ+=$(addprefix $(OBJDIR)/,$(CXXSRC:.cpp=.o)) - -#output -OUTDIR=out -OUT=$(addprefix $(OUTDIR)/,scenes) - -#targets -all: $(OBJ) $(OUT) - $(CXX) $(CXXFLAGS) -o $(OUT) $(OBJ) $(LIBS) - -$(OBJ): | $(OBJDIR) - -$(OUT): | $(OUTDIR) - -$(OBJDIR): - mkdir $(OBJDIR) - -$(OUTDIR): - mkdir $(OUTDIR) - -$(OBJDIR)/%.o: %.cpp - $(CXX) $(CXXFLAGS) -c -o $@ $< - -clean: -ifeq ($(OS),Windows_NT) - $(RM) *.o *.a *.exe -else ifeq ($(shell uname), Linux) - find . -type f -name '*.o' -exec rm -f -r -v {} \; - find . -type f -name '*.a' -exec rm -f -r -v {} \; - rm -f -v $(OUT) -endif - -rebuild: clean all diff --git a/src/scenes/scene_signal.hpp b/src/scenes/scene_signal.hpp deleted file mode 100644 index 49e0bcb..0000000 --- a/src/scenes/scene_signal.hpp +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright: (c) Kayne Ruse 2015 - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source - * distribution. -*/ -#pragma once - -enum SceneSignal { - //reserved members for internal use - QUIT = -1, - CONTINUE = 0, - FIRST = 1, - - //custom scenes - EXAMPLE_SCENE -}; \ No newline at end of file