Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include "Game.h"
- #include <tga2d/error/error_manager.h>
- #include <tga2d/engine.h>
- #include <functional>
- #include <time.h>
- #include <thread>
- #include "../CommonUtilities/CommonUtilities/DL_Debug.h"
- using namespace std::placeholders;
- #ifdef _DEBUG
- #pragma comment(lib,"DX2DEngine_Debug.lib")
- #endif // DEBUG
- #ifdef NDEBUG
- #pragma comment(lib,"DX2DEngine_Release.lib")
- #endif // DEBUG
- CGame::CGame() : myGameWorld(mySyncronizer)
- {
- }
- CGame::~CGame()
- {
- mySyncronizer.Quit();
- myUpdateThread->join();
- myRenderThread->join();
- delete myUpdateThread;
- myUpdateThread = nullptr;
- delete myRenderThread;
- myRenderThread = nullptr;
- }
- void CGame::Init()
- {
- unsigned short windowWidth = static_cast<float>(GetSystemMetrics(SM_CXSCREEN));
- unsigned short windowHeight = static_cast<float>(GetSystemMetrics(SM_CYSCREEN));
- while (ShowCursor(false) >= 0);
- DX2D::SEngineCreateParameters createParameters;
- createParameters.myActivateDebugSystems = true;
- createParameters.myInitFunctionToCall = std::bind(&CGame::InitCallBack, this);
- createParameters.myUpdateFunctionToCall = std::bind(&CGame::UpdateCallBack, this);
- createParameters.myLogFunction = std::bind(&CGame::LogCallback, this, _1);
- createParameters.myWindowHeight = windowHeight;
- createParameters.myWindowWidth = windowWidth;
- createParameters.myRenderHeight = windowHeight;
- createParameters.myRenderWidth = windowWidth;
- createParameters.myClearColor.Set(0.0f, 0.0f, 0.0f, 1.0f);
- createParameters.myWindowSetting = DX2D::EWindowSetting_Borderless;
- std::wstring appname = L"TGA 2D RELEASE";
- #ifdef _DEBUG
- appname = L"TGA 2D DEBUG";
- #endif
- createParameters.myApplicationName = appname;
- createParameters.myEnableVSync = false;
- DX2D::CEngine::CreateInstance(createParameters);
- myTimerManager.CreateTimer();
- DL_DEBUG::Debug::Create();
- if (!DX2D::CEngine::GetInstance()->Start())
- {
- ERROR_AUTO_PRINT("Fatal error! Engine could not start!");
- }
- }
- void CGame::InitCallBack()
- {
- myGameWorld.Init();
- myRenderThread = new std::thread(&CGame::Render, this);
- myUpdateThread = new std::thread(&CGame::UpdateLogic, this);
- }
- void CGame::UpdateCallBack()
- {
- myTimerManager.Update();
- mySyncronizer.SwapBuffer();
- mySyncronizer.BeginNewFrame();
- mySyncronizer.WaitForLogicAndRenderToFinish();
- }
- void CGame::UpdateLogic()
- {
- while (mySyncronizer.HasQuit() == false)
- {
- mySyncronizer.WaitToDoLogic();
- bool run = myGameWorld.Update(myTimerManager.GetTimer(0).DeltaTime().TotalMilliSeconds() / 1000.f);
- mySyncronizer.LogisIsDone();
- if (run == false)
- {
- mySyncronizer.Quit();
- }
- }
- }
- void CGame::Render()
- {
- while (mySyncronizer.HasQuit() == false)
- {
- mySyncronizer.WaitToRender();
- myRenderer.Render(mySyncronizer.GetRenderCommands(), mySyncronizer.GetTextRenderCommands());
- mySyncronizer.RenderIsDone();
- }
- }
- void CGame::LogCallback(std::string aText)
- {
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement