Mercurial > LightClone
view LightClone/Source/Mediator.cpp @ 0:7e3a0ae9c016
Initial commit
author | koryspansel <koryspansel@bendbroadband.com> |
---|---|
date | Wed, 07 Sep 2011 12:36:37 -0700 |
parents | |
children | 31373c5bd1b9 |
line wrap: on
line source
/* * Mediator */ #include "Mediator.h" #include <windows.h> /* * fUpdatePeriod */ static const float fUpdatePeriod = 1.0f / 60.0f; /* * Mediator */ Mediator::Mediator() { } /* * Run */ ErrorCode Mediator::Run() { ErrorCode eCode = Initialize(); if(eCode == Error_Success) { float fAccumulator = 0.0f; kClock.Reset(); while(pModel->nGameState != GameState_Exit) { ProcessMessages(); float fElapsed = kClock.GetElapsed(); if(fElapsed > 2 * fUpdatePeriod) { fElapsed = 2 * fUpdatePeriod; } fAccumulator += fElapsed; while(fAccumulator >= fUpdatePeriod) { Update(fUpdatePeriod); fAccumulator -= fUpdatePeriod; } Render(); } Terminate(); } return eCode; } /* * Initialize */ ErrorCode Mediator::Initialize() { pModel = new Model(); pView = new View(pModel); pController = new Controller(pModel, pView); ErrorCode eCode = pView->Initialize(); if(eCode == Error_Success) { eCode = pController->Initialize(); if(eCode == Error_Success) { pModel->nCurrentLevel = 0; pModel->nGameState = GameState_LoadMap; } } return eCode; } /* * Terminate */ void Mediator::Terminate() { if(pController) { pController->Terminate(); delete pController; pController = 0; } if(pView) { pView->Terminate(); delete pView; pView = 0; } delete pModel; pModel = 0; } /* * Update */ void Mediator::Update(float fElapsed) { pController->Update(fElapsed); } /* * Render */ void Mediator::Render() { pView->Render(); } /* * ProcessMessages */ void Mediator::ProcessMessages() { MSG kMessage; while(PeekMessage(&kMessage, NULL, 0, 0, PM_REMOVE)) { if(kMessage.message == WM_QUIT) { pModel->nGameState = GameState_Exit; break; } TranslateMessage(&kMessage); DispatchMessage(&kMessage); } }