Rewrote Gamestate to be a class instead of an interface; Added layers
This commit is contained in:
parent
2f4e0ebfac
commit
e35688373e
@ -9,7 +9,7 @@ int main(int argc, char* argv[]) {
|
|||||||
//app.setWindowIcon(...);
|
//app.setWindowIcon(...);
|
||||||
// app.setWindowCursor(...);
|
// app.setWindowCursor(...);
|
||||||
|
|
||||||
MainState* test = new MainState;
|
MainState* test = new MainState(&app);
|
||||||
app.addState(test, "Main State");
|
app.addState(test, "Main State");
|
||||||
app.addDefaultState("Main State");
|
app.addDefaultState("Main State");
|
||||||
|
|
||||||
|
@ -1,18 +1,22 @@
|
|||||||
#include "MainState.h"
|
#include "MainState.h"
|
||||||
|
|
||||||
void MainState::onEnter(Application* app) {
|
MainState::MainState(Application* app) :
|
||||||
|
Gamestate(app)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainState::onEnter() {
|
||||||
Log("MainState onEnter!");
|
Log("MainState onEnter!");
|
||||||
m_app = app;
|
}
|
||||||
|
|
||||||
|
void MainState::update(double deltaTime) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainState::render() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainState::onExit() {
|
void MainState::onExit() {
|
||||||
Log("MainState onExit!");
|
Log("MainState onExit!");
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainState::update() {
|
|
||||||
Log("MainState update!");
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainState::render() {
|
|
||||||
Log("MainState render!");
|
|
||||||
}
|
|
@ -1,13 +1,16 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "NothinFancy.h"
|
#include "NothinFancy.h"
|
||||||
|
|
||||||
class MainState : public nf::IGamestate {
|
class MainState : public nf::Gamestate {
|
||||||
public:
|
public:
|
||||||
void onEnter(Application* app) override;
|
MainState(Application* app);
|
||||||
void onExit() override;
|
|
||||||
|
|
||||||
void update() override;
|
void onEnter() override;
|
||||||
|
|
||||||
|
void update(double deltaTime) override;
|
||||||
void render() override;
|
void render() override;
|
||||||
|
|
||||||
|
void onExit() override;
|
||||||
private:
|
private:
|
||||||
|
|
||||||
};
|
};
|
@ -192,6 +192,7 @@
|
|||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="src\Application.cpp" />
|
<ClCompile Include="src\Application.cpp" />
|
||||||
|
<ClCompile Include="src\Gamestate.cpp" />
|
||||||
<ClCompile Include="src\IntroGamestate.cpp" />
|
<ClCompile Include="src\IntroGamestate.cpp" />
|
||||||
<ClCompile Include="src\Renderer\Drawable.cpp" />
|
<ClCompile Include="src\Renderer\Drawable.cpp" />
|
||||||
<ClCompile Include="src\Renderer\IndexBuffer.cpp" />
|
<ClCompile Include="src\Renderer\IndexBuffer.cpp" />
|
||||||
@ -205,7 +206,7 @@
|
|||||||
<ClInclude Include="src\include\Application.h" />
|
<ClInclude Include="src\include\Application.h" />
|
||||||
<ClInclude Include="src\include\Config.h" />
|
<ClInclude Include="src\include\Config.h" />
|
||||||
<ClInclude Include="src\include\Drawable.h" />
|
<ClInclude Include="src\include\Drawable.h" />
|
||||||
<ClInclude Include="src\include\IGamestate.h" />
|
<ClInclude Include="src\include\Gamestate.h" />
|
||||||
<ClInclude Include="src\include\IndexBuffer.h" />
|
<ClInclude Include="src\include\IndexBuffer.h" />
|
||||||
<ClInclude Include="src\include\IntroGamestate.h" />
|
<ClInclude Include="src\include\IntroGamestate.h" />
|
||||||
<ClInclude Include="src\include\Input.h" />
|
<ClInclude Include="src\include\Input.h" />
|
||||||
|
@ -42,6 +42,9 @@
|
|||||||
<ClCompile Include="src\Renderer\Drawable.cpp">
|
<ClCompile Include="src\Renderer\Drawable.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="src\Gamestate.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="src\include\Config.h">
|
<ClInclude Include="src\include\Config.h">
|
||||||
@ -56,7 +59,7 @@
|
|||||||
<ClInclude Include="src\include\Application.h">
|
<ClInclude Include="src\include\Application.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="src\include\IGamestate.h">
|
<ClInclude Include="src\include\Gamestate.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="src\include\IntroGamestate.h">
|
<ClInclude Include="src\include\IntroGamestate.h">
|
||||||
|
@ -40,7 +40,11 @@ namespace nf {
|
|||||||
SetClassLongPtr(m_window, GCLP_HCURSOR, (LONG_PTR)hCursor);
|
SetClassLongPtr(m_window, GCLP_HCURSOR, (LONG_PTR)hCursor);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Application::addState(IGamestate* state,const std::string& stateName) {
|
Renderer* Application::getRenderer() const {
|
||||||
|
return m_renderer;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Application::addState(Gamestate* state,const std::string& stateName) {
|
||||||
if (m_states.find(stateName) == m_states.end()) {
|
if (m_states.find(stateName) == m_states.end()) {
|
||||||
m_states[stateName] = state;
|
m_states[stateName] = state;
|
||||||
}
|
}
|
||||||
@ -188,9 +192,10 @@ namespace nf {
|
|||||||
std::chrono::steady_clock::time_point start_time = std::chrono::steady_clock::now();
|
std::chrono::steady_clock::time_point start_time = std::chrono::steady_clock::now();
|
||||||
const std::chrono::duration<double> wait_time = std::chrono::nanoseconds(1000000000 / 60);
|
const std::chrono::duration<double> wait_time = std::chrono::nanoseconds(1000000000 / 60);
|
||||||
auto next_time = start_time + wait_time;
|
auto next_time = start_time + wait_time;
|
||||||
|
m_deltaTime = 0.0167;
|
||||||
while (m_running) {
|
while (m_running) {
|
||||||
start_time = std::chrono::steady_clock::now();
|
start_time = std::chrono::steady_clock::now();
|
||||||
m_currentState->update();
|
m_currentState->update(m_deltaTime);
|
||||||
m_currentState->render();
|
m_currentState->render();
|
||||||
m_renderer->doFrame();
|
m_renderer->doFrame();
|
||||||
m_frames++;
|
m_frames++;
|
||||||
@ -214,8 +219,8 @@ namespace nf {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Application::startIntroState() {
|
void Application::startIntroState() {
|
||||||
m_sIntro = new IntroGamestate;
|
m_sIntro = new IntroGamestate(this);
|
||||||
m_sIntro->onEnter(this);
|
m_sIntro->onEnter();
|
||||||
m_currentState = m_sIntro;
|
m_currentState = m_sIntro;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -223,7 +228,7 @@ namespace nf {
|
|||||||
m_stateChange = false;
|
m_stateChange = false;
|
||||||
m_currentState->onExit();
|
m_currentState->onExit();
|
||||||
m_currentState = m_states[m_nextState];
|
m_currentState = m_states[m_nextState];
|
||||||
m_currentState->onEnter(this);
|
m_currentState->onEnter();
|
||||||
}
|
}
|
||||||
|
|
||||||
LRESULT CALLBACK Application::WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
|
LRESULT CALLBACK Application::WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
|
||||||
@ -297,8 +302,8 @@ namespace nf {
|
|||||||
Application::~Application() {
|
Application::~Application() {
|
||||||
Log("Exiting NF application");
|
Log("Exiting NF application");
|
||||||
|
|
||||||
for (std::pair<std::string, IGamestate*> state : m_states) {
|
for (std::pair<std::string, Gamestate*> state : m_states) {
|
||||||
IGamestate* curr = state.second;
|
Gamestate* curr = state.second;
|
||||||
delete curr;
|
delete curr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
27
NothinFancy/src/Gamestate.cpp
Normal file
27
NothinFancy/src/Gamestate.cpp
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#include "Gamestate.h"
|
||||||
|
|
||||||
|
#include "Application.h"
|
||||||
|
#include "Utility.h"
|
||||||
|
|
||||||
|
namespace nf {
|
||||||
|
Gamestate::Gamestate(Application* app) {
|
||||||
|
m_app = app;
|
||||||
|
m_renderer = m_app->getRenderer();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Gamestate::onEnter() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void Gamestate::update(double deltaTime) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void Gamestate::render() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void Gamestate::onExit() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -4,25 +4,29 @@
|
|||||||
#include "Utility.h"
|
#include "Utility.h"
|
||||||
|
|
||||||
namespace nf {
|
namespace nf {
|
||||||
void IntroGamestate::onEnter(Application* app) {
|
IntroGamestate::IntroGamestate(Application* app) :
|
||||||
|
Gamestate(app),
|
||||||
|
m_counter(0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void IntroGamestate::onEnter() {
|
||||||
Log("Intro onEnter!");
|
Log("Intro onEnter!");
|
||||||
m_app = app;
|
m_counter = 0;
|
||||||
counter = 0;
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void IntroGamestate::update(double deltaTime) {
|
||||||
|
if (m_counter >= 120) {
|
||||||
|
m_app->changeState("Main State");
|
||||||
|
}
|
||||||
|
m_counter++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void IntroGamestate::render() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void IntroGamestate::onExit() {
|
void IntroGamestate::onExit() {
|
||||||
Log("Intro onExit!");
|
Log("Intro onExit!");
|
||||||
}
|
}
|
||||||
|
|
||||||
void IntroGamestate::update() {
|
|
||||||
Log("Intro update!");
|
|
||||||
if (counter >= 120) {
|
|
||||||
m_app->changeState("Main State");
|
|
||||||
}
|
|
||||||
counter++;
|
|
||||||
}
|
|
||||||
|
|
||||||
void IntroGamestate::render() {
|
|
||||||
Log("Intro render!");
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -46,13 +46,31 @@ namespace nf {
|
|||||||
wglMakeCurrent(m_hdc, m_hglrc);
|
wglMakeCurrent(m_hdc, m_hglrc);
|
||||||
wglSwapIntervalEXT(0);
|
wglSwapIntervalEXT(0);
|
||||||
Log("OpenGL version: " + std::string((char*)glGetString(GL_VERSION)));
|
Log("OpenGL version: " + std::string((char*)glGetString(GL_VERSION)));
|
||||||
|
glEnable(GL_DEPTH_TEST);
|
||||||
|
glDepthFunc(GL_LESS);
|
||||||
|
glEnable(GL_BLEND);
|
||||||
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
|
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Renderer::render(const Drawable& in) {
|
||||||
|
//TODO: Check identity
|
||||||
|
}
|
||||||
|
|
||||||
void Renderer::doFrame() {
|
void Renderer::doFrame() {
|
||||||
glViewport(0, 0, m_app->getConfig().width, m_app->getConfig().height);
|
glViewport(0, 0, m_app->getConfig().width, m_app->getConfig().height);
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
|
||||||
|
for (Drawable* draw : m_lGame) {
|
||||||
|
Drawable& curr = *draw;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Drawable* draw : m_lUI) {
|
||||||
|
Drawable& curr = *draw;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
SwapBuffers(m_hdc);
|
SwapBuffers(m_hdc);
|
||||||
|
|
||||||
GLenum err = glGetError();
|
GLenum err = glGetError();
|
||||||
|
@ -17,7 +17,8 @@ namespace nf {
|
|||||||
|
|
||||||
void setWindowIcon(HANDLE hIcon);
|
void setWindowIcon(HANDLE hIcon);
|
||||||
void setWindowCursor(HCURSOR hCursor);
|
void setWindowCursor(HCURSOR hCursor);
|
||||||
void addState(IGamestate* state, const std::string& stateName);
|
Renderer* getRenderer() const;
|
||||||
|
void addState(Gamestate* state, const std::string& stateName);
|
||||||
void addDefaultState(const std::string& stateName);
|
void addDefaultState(const std::string& stateName);
|
||||||
void run();
|
void run();
|
||||||
void changeState(const std::string& stateName);
|
void changeState(const std::string& stateName);
|
||||||
@ -59,11 +60,11 @@ namespace nf {
|
|||||||
|
|
||||||
//Inactive states to potentially be active during the Application's lifetime
|
//Inactive states to potentially be active during the Application's lifetime
|
||||||
//Mapped to const char* to be referenced later in the frontend
|
//Mapped to const char* to be referenced later in the frontend
|
||||||
std::unordered_map<std::string, IGamestate*> m_states;
|
std::unordered_map<std::string, Gamestate*> m_states;
|
||||||
IntroGamestate* m_sIntro;
|
Gamestate* m_sIntro;
|
||||||
IGamestate* m_DefaultState;
|
Gamestate* m_DefaultState;
|
||||||
bool m_defaultStateAdded;
|
bool m_defaultStateAdded;
|
||||||
IGamestate* m_currentState;
|
Gamestate* m_currentState;
|
||||||
bool m_stateChange;
|
bool m_stateChange;
|
||||||
std::string m_nextState;
|
std::string m_nextState;
|
||||||
|
|
||||||
|
@ -1,12 +1,20 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
#include "VertexArray.h"
|
||||||
|
#include "Shader.h"
|
||||||
|
#include "IndexBuffer.h"
|
||||||
|
|
||||||
namespace nf {
|
namespace nf {
|
||||||
class Drawable {
|
class Drawable {
|
||||||
|
enum class DrawableType {
|
||||||
|
NF_GAME, NF_UI
|
||||||
|
};
|
||||||
public:
|
public:
|
||||||
Drawable();
|
Drawable();
|
||||||
|
|
||||||
~Drawable();
|
virtual DrawableType identity();
|
||||||
private:
|
|
||||||
|
|
||||||
|
~Drawable();
|
||||||
|
protected:
|
||||||
|
//TODO: Add VAO, Shader, index buffer, etc.
|
||||||
};
|
};
|
||||||
}
|
}
|
24
NothinFancy/src/include/Gamestate.h
Normal file
24
NothinFancy/src/include/Gamestate.h
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace nf {
|
||||||
|
class Application;
|
||||||
|
class Renderer;
|
||||||
|
|
||||||
|
class Gamestate {
|
||||||
|
public:
|
||||||
|
Gamestate(Application* app);
|
||||||
|
Gamestate() = delete;
|
||||||
|
Gamestate(const Gamestate& other) = delete;
|
||||||
|
|
||||||
|
virtual void onEnter();
|
||||||
|
|
||||||
|
virtual void update(double deltaTime);
|
||||||
|
virtual void render();
|
||||||
|
|
||||||
|
virtual void onExit();
|
||||||
|
protected:
|
||||||
|
Application* m_app;
|
||||||
|
Renderer* m_renderer;
|
||||||
|
//Resource identifier?
|
||||||
|
};
|
||||||
|
}
|
@ -1,18 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
namespace nf {
|
|
||||||
class Application;
|
|
||||||
|
|
||||||
class IGamestate {
|
|
||||||
public:
|
|
||||||
virtual void onEnter(Application* app) = 0;
|
|
||||||
virtual void onExit() = 0;
|
|
||||||
|
|
||||||
virtual void update() = 0;
|
|
||||||
virtual void render() = 0;
|
|
||||||
|
|
||||||
Application* m_app;
|
|
||||||
private:
|
|
||||||
//Resource identifier?
|
|
||||||
};
|
|
||||||
}
|
|
@ -1,16 +1,19 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "IGamestate.h"
|
#include "Gamestate.h"
|
||||||
|
|
||||||
namespace nf {
|
namespace nf {
|
||||||
class IntroGamestate : public IGamestate {
|
class IntroGamestate : public Gamestate {
|
||||||
public:
|
public:
|
||||||
void onEnter(Application* app) override;
|
IntroGamestate(Application* app);
|
||||||
void onExit() override;
|
|
||||||
|
|
||||||
void update() override;
|
void onEnter() override;
|
||||||
|
|
||||||
|
void update(double deltaTime) override;
|
||||||
void render() override;
|
void render() override;
|
||||||
|
|
||||||
|
void onExit() override;
|
||||||
private:
|
private:
|
||||||
int counter;
|
int m_counter;
|
||||||
//TODO: Flesh out intro gamestate
|
//TODO: Flesh out intro gamestate
|
||||||
};
|
};
|
||||||
}
|
}
|
@ -11,6 +11,8 @@ namespace nf {
|
|||||||
public:
|
public:
|
||||||
Renderer(Application* app);
|
Renderer(Application* app);
|
||||||
|
|
||||||
|
void render(const Drawable& in);
|
||||||
|
|
||||||
void doFrame();
|
void doFrame();
|
||||||
|
|
||||||
~Renderer();
|
~Renderer();
|
||||||
|
Reference in New Issue
Block a user