Merge remote-tracking branch 'commondir/libcommon' into libcommon
This commit is contained in:
@@ -0,0 +1,29 @@
|
|||||||
|
#config
|
||||||
|
INCLUDES+=. packet_types ../gameplay ../map ../utilities
|
||||||
|
LIBS+=
|
||||||
|
CXXFLAGS+=-std=c++11 $(addprefix -I,$(INCLUDES))
|
||||||
|
|
||||||
|
#source
|
||||||
|
CXXSRC=$(wildcard *.cpp)
|
||||||
|
|
||||||
|
#objects
|
||||||
|
OBJDIR=obj
|
||||||
|
OBJ+=$(addprefix $(OBJDIR)/,$(CXXSRC:.cpp=.o))
|
||||||
|
|
||||||
|
#targets
|
||||||
|
all: $(OBJ) $(OUT)
|
||||||
|
ar -crs $(OUT) $(OBJ)
|
||||||
|
$(MAKE) -C packet_types
|
||||||
|
|
||||||
|
$(OBJ): | $(OBJDIR)
|
||||||
|
|
||||||
|
$(OUT): | $(OUTDIR)
|
||||||
|
|
||||||
|
$(OBJDIR):
|
||||||
|
mkdir $(OBJDIR)
|
||||||
|
|
||||||
|
$(OUTDIR):
|
||||||
|
mkdir $(OUTDIR)
|
||||||
|
|
||||||
|
$(OBJDIR)/%.o: %.cpp
|
||||||
|
$(CXX) $(CXXFLAGS) -c -o $@ $<
|
||||||
@@ -0,0 +1,188 @@
|
|||||||
|
/* 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 <chrono>
|
||||||
|
#include <sstream>
|
||||||
|
#include <stdexcept>
|
||||||
|
|
||||||
|
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<int, std::milli> 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;
|
||||||
|
}
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
/* 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;
|
||||||
|
};
|
||||||
@@ -0,0 +1,105 @@
|
|||||||
|
/* 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
|
||||||
|
}
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
/* 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;
|
||||||
|
};
|
||||||
@@ -0,0 +1,83 @@
|
|||||||
|
/* 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) {
|
||||||
|
//
|
||||||
|
}
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
/* 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;
|
||||||
|
};
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
/* 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 <iostream>
|
||||||
|
#include <stdexcept>
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
#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
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
/* 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
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user