# HG changeset patch # User koryspansel # Date 1315610321 25200 # Node ID 968341ab1fb25422ad3e3bd7a5eb8ad886c3e047 # Parent 31373c5bd1b91ca6a486f3a3aed5ffd8b7684acc First pass world re-structuring diff -r 31373c5bd1b9 -r 968341ab1fb2 LightClone/LightClone.vcproj --- a/LightClone/LightClone.vcproj Fri Sep 09 13:21:22 2011 -0700 +++ b/LightClone/LightClone.vcproj Fri Sep 09 16:18:41 2011 -0700 @@ -197,10 +197,6 @@ > - - @@ -217,6 +213,10 @@ > + + @@ -237,11 +237,11 @@ > - - @@ -315,6 +311,10 @@ > + + @@ -331,11 +331,11 @@ > GetWindow(); - - ErrorCode eCode = pModel->kInputManager.Initialize(kWindow); - if(eCode == Error_Success) - { - pModel->kInputManager.SetBounds(0, 0, (float)ScreenSizeX, (float)ScreenSizeY); - pModel->kInputManager.SetMouse(0.5f * ScreenSizeX, 0.5f * ScreenSizeY); - } - - return eCode; -} - -/* - * Terminate - */ -void Controller::Terminate() -{ - pModel->kInputManager.Terminate(); -} - -/* - * Update - */ -void Controller::Update(float fElapsed) -{ - ProcessInput(fElapsed); - - if(pModel->nGameState == GameState_LoadMap) - { - char kBuffer[256]; - sprintf_s(kBuffer, "Data\\Maps\\Map%02d.map", pModel->nCurrentLevel++); - - pModel->nGameState = pModel->Load(kBuffer) ? GameState_Active : GameState_Over; - } - else - - if(pModel->nGameState == GameState_Active) - { - if(pModel->nSimulationState == SimulationState_Active) - { - if(pModel->GetBot()->Update(fElapsed)) - { - Environment* pEnvironment = pModel->GetEnvironment(); - if(pEnvironment->RequirementsMet()) - { - pModel->kDialog.Reset("Some message"); - pModel->kDialog.AddButton(DialogButton_Ok, "Ok", 0.0f, 0.0f, 0.0f, 0.0f); - - pModel->nGameState = GameState_Complete; - } - } - } - } -} - -/* - * ProcessInput - */ -void Controller::ProcessInput(float fElapsed) -{ - pModel->kInputManager.Update(fElapsed); - - #if defined(_DEBUG) - if(pModel->kInputManager.IsKeyDown(DIK_LEFT)) - { - pView->UpdateCameraYaw(0.01f); - } - else - - if(pModel->kInputManager.IsKeyDown(DIK_RIGHT)) - { - pView->UpdateCameraYaw(-0.01f); - } - - if(pModel->kInputManager.IsKeyDown(DIK_UP)) - { - pView->UpdateCameraPitch(0.01f); - } - else - - if(pModel->kInputManager.IsKeyDown(DIK_DOWN)) - { - pView->UpdateCameraPitch(-0.01f); - } - - if(pModel->kInputManager.IsKeyDown(DIK_NEXT)) - { - pView->UpdateCameraDistance(0.1f); - } - else - - if(pModel->kInputManager.IsKeyDown(DIK_PRIOR)) - { - pView->UpdateCameraDistance(-0.1f); - } - #endif - - const float fMouseX = pModel->kInputManager.GetMouseX(); - const float fMouseY = pModel->kInputManager.GetMouseY(); - - if(pModel->nGameState == GameState_Active) - { - if(pModel->kInputManager.IsButtonDown(0) && !pModel->kInputManager.WasButtonDown(0)) - { - int32 nSelection = pModel->kControls.Pick(fMouseX, fMouseY); - if(nSelection >= 0) - { - if(nSelection == ControlButton_Play) - { - if(pModel->nSimulationState == SimulationState_Idle) - { - pModel->ResetBot(); - pModel->GetBot()->Upload(pModel->GetFunction(0), pModel->GetFunctionCount()); - - pModel->nSimulationState = SimulationState_Active; - } - } - else - - if(nSelection == ControlButton_Stop) - { - if(pModel->nSimulationState == SimulationState_Active) - { - pModel->ResetEnvironment(); - pModel->ResetBot(); - - pModel->nSimulationState = SimulationState_Idle; - } - } - else - - if(nSelection == ControlButton_Exit) - { - pModel->nGameState = GameState_Exit; - } - } - else - { - // pick against the toolbar - nSelection = pModel->kToolbar.Pick(fMouseX, fMouseY); - if(nSelection >= 0) - { - pModel->kDragController.Begin(Action_Forward + nSelection); - } - else - { - // pick against the main pane - nSelection = pModel->kMain.Pick(fMouseX, fMouseY); - if(nSelection >= 0) - { - Code* pCode = pModel->GetFunction(0); - if(!pCode->IsEmptySlot(nSelection)) - { - pModel->kDragController.Begin(pCode->GetSlot(nSelection)); - pCode->ClearSlot(nSelection); - } - } - else - { - // pick against the function pane - nSelection = pModel->kFunction.Pick(fMouseX, fMouseY); - if(nSelection >= 0) - { - Code* pCode = pModel->GetFunction(pModel->nCurrentFunction + 1); - if(!pCode->IsEmptySlot(nSelection)) - { - pModel->kDragController.Begin(pCode->GetSlot(nSelection)); - pCode->ClearSlot(nSelection); - } - } - else - { - // pick against the function pane arrows - for(uint32 i = 0; i < sizeof(pModel->kArrowBounds) / sizeof(pModel->kArrowBounds[0]); ++i) - { - if(pModel->kArrowBounds[i].Contains(fMouseX, fMouseY)) - { - const uint32 nCount = pModel->GetFunctionCount() - 1; - pModel->nCurrentFunction = (pModel->nCurrentFunction + 2 * (int32)i - 1 + nCount) % nCount; - } - } - } - } - } - } - } - else - - if(!pModel->kInputManager.IsButtonDown(0) && pModel->kInputManager.WasButtonDown(0)) - { - if(pModel->kDragController.IsActive()) - { - const uint32 nAction = pModel->kDragController.End(); - - int32 nSelection = pModel->kMain.Pick(fMouseX, fMouseY); - if(nSelection >= 0) - { - pModel->GetFunction(0)->SetSlot(nSelection, nAction); - } - else - { - nSelection = pModel->kFunction.Pick(fMouseX, fMouseY); - if(nSelection >= 0) - { - pModel->GetFunction(pModel->nCurrentFunction + 1)->SetSlot(nSelection, nAction); - } - } - } - } - } - else - - if(pModel->nGameState == GameState_Complete) - { - if(pModel->kInputManager.IsButtonDown(0) && !pModel->kInputManager.WasButtonDown(0)) - { - for(uint32 i = 0; i < sizeof(pModel->kDialog1Bounds) / sizeof(pModel->kDialog1Bounds[0]); ++i) - { - if(pModel->kDialog1Bounds[i].Contains(fMouseX, fMouseY)) - { - if(i == 0) - { - if(pModel->nSimulationState == SimulationState_Active) - { - pModel->ResetEnvironment(); - pModel->ResetBot(); - - pModel->nSimulationState = SimulationState_Idle; - } - - pModel->nGameState = GameState_LoadMap; - } - } - } - - /* - int32 nSelection = kDialog.Pick(fMouseX, fMouseY); - - if(nSelection == DialogButton_A) - { - if(pModel->nSimulationState == SimulationState_Active) - { - pModel->ResetEnvironment(); - pModel->ResetBot(); - - pModel->nSimulationState = SimulationState_Idle; - } - - pModel->nGameState = GameState_LoadMap; - } - */ - } - } - else - - if(pModel->nGameState == GameState_Over) - { - // check to see if button was clicked - if(pModel->kInputManager.IsButtonDown(0) && !pModel->kInputManager.WasButtonDown(0)) - { - for(uint32 i = 0; i < sizeof(pModel->kDialog1Bounds) / sizeof(pModel->kDialog1Bounds[0]); ++i) - { - if(pModel->kDialog1Bounds[i].Contains(fMouseX, fMouseY)) - { - if(i == 0) - { - pModel->nCurrentLevel = 0; - pModel->nGameState = GameState_LoadMap; - } - } - } - - /* - int32 nSelection = kDialog.Pick(fMouseX, fMouseY); - - if(nSelection == DialogButton_A) - { - pModel->nCurrentLevel = 0; - pModel->nGameState = GameState_LoadMap; - } - */ - } - } - else - - if(pModel->nGameState == GameState_Confirm) - { - // check to see if button was clicked - if(pModel->kInputManager.IsButtonDown(0) && !pModel->kInputManager.WasButtonDown(0)) - { - for(uint32 i = 0; i < sizeof(pModel->kDialog2Bounds) / sizeof(pModel->kDialog2Bounds[0]); ++i) - { - if(pModel->kDialog2Bounds[i].Contains(fMouseX, fMouseY)) - { - if(i == 0) - { - pModel->nGameState = GameState_Exit; - } - else - - if(i == 1) - { - pModel->nGameState = GameState_Active; - } - } - } - - /* - int32 nSelection = kDialog.Pick(fMouseX, fMouseY); - - if(nSelection == DialogButton_A) - { - pModel->nGameState = GameState_Exit; - } - else - - if(nSelection == DialogButton_B) - { - pModel->nGameState = GameState_Active; - } - */ - } - } -} diff -r 31373c5bd1b9 -r 968341ab1fb2 LightClone/Source/Controller.h --- a/LightClone/Source/Controller.h Fri Sep 09 13:21:22 2011 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,56 +0,0 @@ -/* - * Controller - */ - -#ifndef __CONTROLLER_H__ -#define __CONTROLLER_H__ - -#include "View.h" -#include "Model.h" - -/* - * Controller - */ -class Controller -{ - /* - * pModel - */ - Model* pModel; - - /* - * pView - */ - View* pView; - -public: - - /* - * Controller - */ - Controller(Model* pModel, View* pView); - - /* - * Initialize - */ - ErrorCode Initialize(); - - /* - * Terminate - */ - void Terminate(); - - /* - * Update - */ - void Update(float fElapsed); - -private: - - /* - * ProcessInput - */ - void ProcessInput(float fElapsed); -}; - -#endif //__CONTROLLER_H__ diff -r 31373c5bd1b9 -r 968341ab1fb2 LightClone/Source/GraphicsDevice.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LightClone/Source/GraphicsDevice.cpp Fri Sep 09 16:18:41 2011 -0700 @@ -0,0 +1,138 @@ +/* + * GraphicsDevice + */ + +#include "GraphicsDevice.h" +#include "VertexTypes.h" + +/* + * GraphicsDevice + */ +GraphicsDevice::GraphicsDevice(IDirect3D9* pContext, IDirect3DDevice9* pInstance, const D3DPRESENT_PARAMETERS& kPresentParameters) + : pDirect3D(pContext), pDevice(pInstance), kParameters(kPresentParameters) +{ + //ASSERT(pDirect3D); + pDirect3D->AddRef(); + + //ASSERT(pDevice); + pDevice->AddRef(); +} + +/* + * ~GraphicsDevice + */ +GraphicsDevice::~GraphicsDevice() +{ + if(pDevice) + { + pDevice->Release(); + pDevice = NULL; + } + + if(pDirect3D) + { + pDirect3D->Release(); + pDirect3D = NULL; + } +} + +/* + * Create + */ +ErrorCode GraphicsDevice::Create(HWND kWindow, uint32 nWidth, uint32 nHeight, GraphicsDevice** pInstance) +{ + ErrorCode eCode = Error_Fail; + + if(pInstance) + { + const uint32 nAdapter = D3DADAPTER_DEFAULT; + const uint32 nFlags = D3DCREATE_HARDWARE_VERTEXPROCESSING; + + D3DPRESENT_PARAMETERS kParameters = { + nWidth, + nHeight, + D3DFMT_UNKNOWN, + 1, + D3DMULTISAMPLE_4_SAMPLES, + 1, + D3DSWAPEFFECT_DISCARD, + kWindow, + TRUE, + TRUE, + D3DFMT_D24S8, + 0, + 0, + D3DPRESENT_INTERVAL_DEFAULT, + }; + + IDirect3D9* pContext = Direct3DCreate9(D3D_SDK_VERSION); + if(pContext) + { + IDirect3DDevice9* pDevice = NULL; + + HRESULT hResult = pContext->CreateDevice(nAdapter, D3DDEVTYPE_HAL, kWindow, nFlags, &kParameters, &pDevice); + if(SUCCEEDED(hResult)) + { + eCode = InitializeVertexTypes(pDevice); + if(eCode == Error_Success) + { + *pInstance = new GraphicsDevice(pContext, pDevice, kParameters); + } + + pDevice->Release(); + } + + pContext->Release(); + } + } + + return eCode; +} + +/* + * Destroy + */ +void GraphicsDevice::Destroy(GraphicsDevice*& pDevice) +{ + //NOTE: If I ever want to have more than one device this would be an issue + TerminateVertexTypes(); + + delete pDevice; + pDevice = NULL; +} + +/* + * GetViewport + */ +ErrorCode GraphicsDevice::GetViewport(D3DVIEWPORT9* pViewport) +{ + return SUCCEEDED(pDevice->GetViewport(pViewport)) ? Error_Success : Error_Fail; +} + +/* + * Begin + */ +void GraphicsDevice::Begin(uint32 nColor, float fDepth, uint32 nStencil) +{ + pDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER | D3DCLEAR_STENCIL, nColor, fDepth, nStencil); + pDevice->BeginScene(); +} + +/* + * End + */ +void GraphicsDevice::End() +{ + pDevice->EndScene(); + pDevice->Present(NULL, NULL, NULL, NULL); +} + +/* + * DrawTriangles + */ +void GraphicsDevice::DrawTriangles(IDirect3DVertexDeclaration9* pDeclaration, IDirect3DVertexBuffer9* pBuffer, uint32 nSize, uint32 nCount) +{ + pDevice->SetVertexDeclaration(pDeclaration); + pDevice->SetStreamSource(0, pBuffer, 0, nSize); + pDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, nCount); +} diff -r 31373c5bd1b9 -r 968341ab1fb2 LightClone/Source/GraphicsDevice.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LightClone/Source/GraphicsDevice.h Fri Sep 09 16:18:41 2011 -0700 @@ -0,0 +1,81 @@ +/* + * GraphicsDevice + */ + +#ifndef __GRAPHICSDEVICE_H__ +#define __GRAPHICSDEVICE_H__ + +#include "Core.h" + +/* + * GraphicsDevice + */ +class GraphicsDevice +{ + /* + * pDirect3D + */ + IDirect3D9* pDirect3D; + + /* + * pDevice + */ + IDirect3DDevice9* pDevice; + + /* + * kParameters + */ + D3DPRESENT_PARAMETERS kParameters; + + /* + * GraphicsDevice + */ + GraphicsDevice(IDirect3D9* pContext, IDirect3DDevice9* pInstance, const D3DPRESENT_PARAMETERS& kPresentParameters); + +public: + + /* + * ~GraphicsDevice + */ + ~GraphicsDevice(); + + /* + * Create + */ + static ErrorCode Create(HWND kWindow, uint32 nWidth, uint32 nHeight, GraphicsDevice** pDevice); + + /* + * Destroy + */ + static void Destroy(GraphicsDevice*& pDevice); + + /* + * GetViewport + */ + ErrorCode GetViewport(D3DVIEWPORT9* pViewport); + + /* + * Begin + */ + void Begin(uint32 nColor = 0, float fDepth = 1.0f, uint32 nStencil = 0); + + /* + * End + */ + void End(); + + /* + * DrawTriangles + */ + void DrawTriangles(IDirect3DVertexDeclaration9* pDeclaration, IDirect3DVertexBuffer9* pBuffer, uint32 nSize, uint32 nCount); + + /* + * operator IDirect3DDevice9* + */ + operator IDirect3DDevice9*() + { + return pDevice; + } +}; + +#endif //__GRAPHICSDEVICE_H__ diff -r 31373c5bd1b9 -r 968341ab1fb2 LightClone/Source/Interface.cpp --- a/LightClone/Source/Interface.cpp Fri Sep 09 13:21:22 2011 -0700 +++ b/LightClone/Source/Interface.cpp Fri Sep 09 16:18:41 2011 -0700 @@ -59,30 +59,30 @@ /* * Initialize */ -ErrorCode Interface::Initialize(RenderContext& kContext) +ErrorCode Interface::Initialize(ResourceManager* pManager) { - ErrorCode eCode = kContext.CreateEffectFromFile("Data\\Shaders\\TexturedQuad.fx", &pEffect); + ErrorCode eCode = pManager->CreateEffectFromFile("Data\\Shaders\\TexturedQuad.fx", &pEffect); if(eCode != Error_Success) { Terminate(); return Error_Fail; } - eCode = kContext.CreateFontFromName("Courier New", 18, FW_BOLD, &pFont); + eCode = pManager->CreateFontFromName("Courier New", 18, FW_BOLD, &pFont); if(eCode != Error_Success) { Terminate(); return Error_Fail; } - eCode = kContext.CreateVertexBuffer(TrianglesPerFace * VerticesPerTriangle * sizeof(Vertex::Quad), D3DUSAGE_WRITEONLY, D3DPOOL_MANAGED, &pVertexBuffer); + eCode = pManager->CreateVertexBuffer(TrianglesPerFace * VerticesPerTriangle * sizeof(Vertex::Quad), D3DUSAGE_WRITEONLY, D3DPOOL_MANAGED, &pVertexBuffer); if(eCode != Error_Success) { Terminate(); return Error_Fail; } - eCode = kContext.CreateTextureFromFile("Data\\Textures\\Background00.tga", &pBackgroundTexture); + eCode = pManager->CreateTextureFromFile("Data\\Textures\\Background00.tga", &pBackgroundTexture); if(eCode != Error_Success) { Terminate(); @@ -91,7 +91,7 @@ for(uint32 i = 0; i < Action_Count; ++i) { - eCode = kContext.CreateTextureFromFile(pActionTextureName[i], pActionTexture + i); + eCode = pManager->CreateTextureFromFile(pActionTextureName[i], pActionTexture + i); if(eCode != Error_Success) { Terminate(); @@ -101,7 +101,7 @@ for(uint32 i = 0; i < sizeof(pControlTextureName) / sizeof(pControlTextureName[0]); ++i) { - eCode = kContext.CreateTextureFromFile(pControlTextureName[i], pControlTexture + i); + eCode = pManager->CreateTextureFromFile(pControlTextureName[i], pControlTexture + i); if(eCode != Error_Success) { Terminate(); @@ -111,7 +111,7 @@ for(uint32 i = 0; i < sizeof(pArrowTextureName) / sizeof(pArrowTextureName[0]); ++i) { - eCode = kContext.CreateTextureFromFile(pArrowTextureName[i], pArrowTexture + i); + eCode = pManager->CreateTextureFromFile(pArrowTextureName[i], pArrowTexture + i); if(eCode != Error_Success) { Terminate(); @@ -119,21 +119,21 @@ } } - eCode = kContext.CreateTextureFromFile("Data\\Textures\\Dialog1.tga", &pDialog1Texture); + eCode = pManager->CreateTextureFromFile("Data\\Textures\\Dialog1.tga", &pDialog1Texture); if(eCode != Error_Success) { Terminate(); return Error_Fail; } - eCode = kContext.CreateTextureFromFile("Data\\Textures\\Dialog2.tga", &pDialog2Texture); + eCode = pManager->CreateTextureFromFile("Data\\Textures\\Dialog2.tga", &pDialog2Texture); if(eCode != Error_Success) { Terminate(); return Error_Fail; } - eCode = kContext.CreateTextureFromFile("Data\\Textures\\Arrow.tga", &pCursorTexture); + eCode = pManager->CreateTextureFromFile("Data\\Textures\\Arrow.tga", &pCursorTexture); if(eCode != Error_Success) { Terminate(); @@ -221,8 +221,9 @@ /* * Render */ -void Interface::Render(RenderContext& kContext, Model* pModel) +void Interface::Render(RenderContext& kContext) { + /* if(pModel->nGameState != GameState_Exit) { kContext.SetupCamera2D(pEffect); @@ -250,7 +251,6 @@ sprintf_s(kMessage, "Congratulations!\nYou have completed level %d", pModel->nCurrentLevel); RenderDialog(kContext, pModel, kMessage, "Ok"); - //RenderLevelDialog(kContext, pModel); } else @@ -259,7 +259,6 @@ const char* pMessage = "Congratulations!\nYou have won the game!"; RenderDialog(kContext, pModel, pMessage, "Ok"); - //RenderGameOverDialog(kContext, pModel); } else @@ -268,7 +267,6 @@ const char* pMessage = "Are you sure you want to quit the game?"; RenderDialog(kContext, pModel, pMessage, "Yes", "No"); - //RenderConfirmExitDialog(kContext, pModel); } RenderCursor(kContext, pModel); @@ -276,6 +274,7 @@ pEffect->EndPass(); pEffect->End(); } + */ } /* @@ -306,8 +305,9 @@ /* * RenderBackground */ -void Interface::RenderBackground(RenderContext& kContext, Model* pModel) +void Interface::RenderBackground(RenderContext& kContext) { + /* const D3DXVECTOR4 kColorVector(1.0f, 1.0f, 1.0f, 1.0f); D3DSURFACE_DESC kDescriptor; @@ -331,13 +331,15 @@ pEffect->CommitChanges(); kContext.DrawTriangles(Vertex::Quad::Declaration, pVertexBuffer, sizeof(Vertex::Quad), TrianglesPerFace); + */ } /* * RenderToolbar */ -void Interface::RenderToolbar(RenderContext& kContext, Model* pModel) +void Interface::RenderToolbar(RenderContext& kContext) { + /* const D3DXVECTOR4 kColorVector(1.0f, 1.0f, 1.0f, 1.0f); for(uint32 i = 0; i < Action_Count; ++i) @@ -360,13 +362,15 @@ kContext.DrawTriangles(Vertex::Quad::Declaration, pVertexBuffer, sizeof(Vertex::Quad), TrianglesPerFace); } + */ } /* * RenderMain */ -void Interface::RenderMain(RenderContext& kContext, Model* pModel) +void Interface::RenderMain(RenderContext& kContext) { + /* Code* pCode = pModel->GetFunction(0); if(pCode) { @@ -406,13 +410,15 @@ pFont->DrawTextA(NULL, "Main", -1, &kRectangle, 0, D3DCOLOR_XRGB(0, 0, 0)); } + */ } /* * RenderFunctions */ -void Interface::RenderFunctions(RenderContext& kContext, Model* pModel) +void Interface::RenderFunctions(RenderContext& kContext) { + /* Code* pCode = pModel->GetFunction(pModel->nCurrentFunction + 1); if(pCode) { @@ -484,13 +490,15 @@ pFont->DrawTextA(NULL, kBuffer, -1, &kRectangle, 0, D3DCOLOR_XRGB(0, 0, 0)); } + */ } /* * RenderControls */ -void Interface::RenderControls(RenderContext& kContext, Model* pModel) +void Interface::RenderControls(RenderContext& kContext) { + /* const D3DXVECTOR4 kColorVector(1.0f, 1.0f, 1.0f, 1.0f); for(uint32 i = 0; i < pModel->kControls.GetSize(); ++i) @@ -513,14 +521,15 @@ kContext.DrawTriangles(Vertex::Quad::Declaration, pVertexBuffer, sizeof(Vertex::Quad), TrianglesPerFace); } + */ } /* * RenderDialog */ -void Interface::RenderDialog(RenderContext& kContext, Model* pModel, const char* pMessage, const char* pChoiceA, const char* pChoiceB) -//void Interface::RenderDialog(RenderContext& kContext, const Dialog& kDialog) +void Interface::RenderDialog(RenderContext& kContext, const char* pMessage, const char* pChoiceA, const char* pChoiceB) { + /* if(pMessage && pChoiceA) { IDirect3DTexture9* pDialogTexture = pChoiceB ? pDialog2Texture : pDialog1Texture; @@ -549,27 +558,6 @@ kContext.DrawTriangles(Vertex::Quad::Declaration, pVertexBuffer, sizeof(Vertex::Quad), TrianglesPerFace); } - /* - for(uint32 i = 0; i < kDialog.nButtonCount; ++i) - { - D3DXMATRIX kScale; - D3DXMatrixScaling(&kScale, fSizeX, fSizeY, 1.0f); - - D3DXMATRIX kTranslate; - D3DXMatrixTranslation(&kTranslate, -0.5f * fSizeX, 0.5f * fSizeY, 0.0f); - - D3DXMATRIX kWorldMatrix; - D3DXMatrixMultiply(&kWorldMatrix, &kScale, &kTranslate); - - pEffect->SetMatrix(pEffect->GetParameterByName(NULL, "kWorld"), &kWorldMatrix); - pEffect->SetTexture(pEffect->GetParameterByName(NULL, "kTexture"), pDialogTexture); - pEffect->SetVector(pEffect->GetParameterByName(NULL, "kColor"), &D3DXVECTOR4(1.0f, 1.0f, 1.0f, 1.0f)); - pEffect->CommitChanges(); - - kContext.DrawTriangles(Vertex::Quad::Declaration, pVertexBuffer, sizeof(Vertex::Quad), TrianglesPerFace); - } - */ - #if 0 { D3DXMATRIX kScale; @@ -611,13 +599,15 @@ { } } + */ } /* * RenderCursor */ -void Interface::RenderCursor(RenderContext& kContext, Model* pModel) +void Interface::RenderCursor(RenderContext& kContext) { + /* const D3DXVECTOR4 kColorVector(1.0f, 1.0f, 1.0f, 1.0f); if(pCursorTexture) @@ -671,4 +661,5 @@ kContext.DrawTriangles(Vertex::Quad::Declaration, pVertexBuffer, sizeof(Vertex::Quad), TrianglesPerFace); } + */ } diff -r 31373c5bd1b9 -r 968341ab1fb2 LightClone/Source/Interface.h --- a/LightClone/Source/Interface.h Fri Sep 09 13:21:22 2011 -0700 +++ b/LightClone/Source/Interface.h Fri Sep 09 16:18:41 2011 -0700 @@ -7,7 +7,7 @@ #include "Core.h" #include "RenderContext.h" -#include "Model.h" +#include "ResourceManager.h" /* * Interface @@ -76,7 +76,7 @@ /* * Initialize */ - ErrorCode Initialize(RenderContext& kContext); + ErrorCode Initialize(ResourceManager* pManager); /* * Terminate @@ -86,7 +86,7 @@ /* * Render */ - void Render(RenderContext& kContext, Model* pModel); + void Render(RenderContext& kContext); private: @@ -98,52 +98,37 @@ /* * RenderBackground */ - void RenderBackground(RenderContext& kContext, Model* pModel); + void RenderBackground(RenderContext& kContext); /* * RenderToolbar */ - void RenderToolbar(RenderContext& kContext, Model* pModel); + void RenderToolbar(RenderContext& kContext); /* * RenderMain */ - void RenderMain(RenderContext& kContext, Model* pModel); + void RenderMain(RenderContext& kContext); /* * RenderFunctions */ - void RenderFunctions(RenderContext& kContext, Model* pModel); + void RenderFunctions(RenderContext& kContext); /* * RenderControls */ - void RenderControls(RenderContext& kContext, Model* pModel); - - /* - * RenderLevelDialog - */ - void RenderLevelDialog(RenderContext& kContext, Model* pModel); - - /* - * RenderGameOverDialog - */ - void RenderGameOverDialog(RenderContext& kContext, Model* pModel); - - /* - * RenderConfirmExitDialog - */ - void RenderConfirmExitDialog(RenderContext& kContext, Model* pModel); + void RenderControls(RenderContext& kContext); /* * RenderDialog */ - void RenderDialog(RenderContext& kContext, Model* pModel, const char* pMessage, const char* pChoiceA, const char* pChoiceB = NULL); + void RenderDialog(RenderContext& kContext, const char* pMessage, const char* pChoiceA, const char* pChoiceB = NULL); /* * RenderCursor */ - void RenderCursor(RenderContext& kContext, Model* pModel); + void RenderCursor(RenderContext& kContext); }; #endif //__INTERFACE_H__ diff -r 31373c5bd1b9 -r 968341ab1fb2 LightClone/Source/Mediator.cpp --- a/LightClone/Source/Mediator.cpp Fri Sep 09 13:21:22 2011 -0700 +++ b/LightClone/Source/Mediator.cpp Fri Sep 09 16:18:41 2011 -0700 @@ -3,7 +3,10 @@ */ #include "Mediator.h" -#include +#include "VertexTypes.h" +//#include + +#pragma warning(disable:4355) /* * fUpdatePeriod @@ -13,8 +16,65 @@ /* * Mediator */ -Mediator::Mediator() +Mediator::Mediator() : kWindow(this), kToolbar(8), kMain(16), kFunction(8), kControls(4) { + nGameState = GameState_Active; + nSimulationState = SimulationState_Idle; + pFunction = 0; + nCurrentFunction = 0; + nCurrentLevel = 0; + + kArrowBounds[0] = Rectangle2(1206.0f + 0 * 16.0f, 473.0f + 0 * 54.0f, 16.0f, 16.0f); + kArrowBounds[1] = Rectangle2(1206.0f + 2 * 16.0f, 473.0f + 0 * 54.0f, 16.0f, 16.0f); + + kDialog1Bounds[0] = Rectangle2(567.0f, 412.0f, 150.0f, 60.0f); + + kDialog2Bounds[0] = Rectangle2(1023.0f + 2.5f * 54.0f, 638.0f + 0 * 00.0f, 48.0f, 48.0f); + kDialog2Bounds[1] = Rectangle2(1023.0f + 2.5f * 54.0f, 638.0f + 0 * 00.0f, 48.0f, 48.0f); + + kToolbar.Add(1023.0f + 0 * 54.0f, 85.0f + 0 * 54.0f, 48.0f, 48.0f); + kToolbar.Add(1023.0f + 1 * 54.0f, 85.0f + 0 * 54.0f, 48.0f, 48.0f); + kToolbar.Add(1023.0f + 2 * 54.0f, 85.0f + 0 * 54.0f, 48.0f, 48.0f); + kToolbar.Add(1023.0f + 3 * 54.0f, 85.0f + 0 * 54.0f, 48.0f, 48.0f); + kToolbar.Add(1023.0f + 0 * 54.0f, 85.0f + 1 * 54.0f, 48.0f, 48.0f); + kToolbar.Add(1023.0f + 1 * 54.0f, 85.0f + 1 * 54.0f, 48.0f, 48.0f); + kToolbar.Add(1023.0f + 2 * 54.0f, 85.0f + 1 * 54.0f, 48.0f, 48.0f); + kToolbar.Add(1023.0f + 3 * 54.0f, 85.0f + 1 * 54.0f, 48.0f, 48.0f); + + kMain.Add(1023.0f + 0 * 54.0f, 238.0f + 0 * 54.0f, 48.0f, 48.0f); + kMain.Add(1023.0f + 1 * 54.0f, 238.0f + 0 * 54.0f, 48.0f, 48.0f); + kMain.Add(1023.0f + 2 * 54.0f, 238.0f + 0 * 54.0f, 48.0f, 48.0f); + kMain.Add(1023.0f + 3 * 54.0f, 238.0f + 0 * 54.0f, 48.0f, 48.0f); + kMain.Add(1023.0f + 0 * 54.0f, 238.0f + 1 * 54.0f, 48.0f, 48.0f); + kMain.Add(1023.0f + 1 * 54.0f, 238.0f + 1 * 54.0f, 48.0f, 48.0f); + kMain.Add(1023.0f + 2 * 54.0f, 238.0f + 1 * 54.0f, 48.0f, 48.0f); + kMain.Add(1023.0f + 3 * 54.0f, 238.0f + 1 * 54.0f, 48.0f, 48.0f); + kMain.Add(1023.0f + 0 * 54.0f, 238.0f + 2 * 54.0f, 48.0f, 48.0f); + kMain.Add(1023.0f + 1 * 54.0f, 238.0f + 2 * 54.0f, 48.0f, 48.0f); + kMain.Add(1023.0f + 2 * 54.0f, 238.0f + 2 * 54.0f, 48.0f, 48.0f); + kMain.Add(1023.0f + 3 * 54.0f, 238.0f + 2 * 54.0f, 48.0f, 48.0f); + kMain.Add(1023.0f + 0 * 54.0f, 238.0f + 3 * 54.0f, 48.0f, 48.0f); + kMain.Add(1023.0f + 1 * 54.0f, 238.0f + 3 * 54.0f, 48.0f, 48.0f); + kMain.Add(1023.0f + 2 * 54.0f, 238.0f + 3 * 54.0f, 48.0f, 48.0f); + kMain.Add(1023.0f + 3 * 54.0f, 238.0f + 3 * 54.0f, 48.0f, 48.0f); + + kFunction.Add(1023.0f + 0 * 54.0f, 501.0f + 0 * 54.0f, 48.0f, 48.0f); + kFunction.Add(1023.0f + 1 * 54.0f, 501.0f + 0 * 54.0f, 48.0f, 48.0f); + kFunction.Add(1023.0f + 2 * 54.0f, 501.0f + 0 * 54.0f, 48.0f, 48.0f); + kFunction.Add(1023.0f + 3 * 54.0f, 501.0f + 0 * 54.0f, 48.0f, 48.0f); + kFunction.Add(1023.0f + 0 * 54.0f, 501.0f + 1 * 54.0f, 48.0f, 48.0f); + kFunction.Add(1023.0f + 1 * 54.0f, 501.0f + 1 * 54.0f, 48.0f, 48.0f); + kFunction.Add(1023.0f + 2 * 54.0f, 501.0f + 1 * 54.0f, 48.0f, 48.0f); + kFunction.Add(1023.0f + 3 * 54.0f, 501.0f + 1 * 54.0f, 48.0f, 48.0f); + + kControls.Add(1023.0f + 0.5f * 54.0f, 638.0f + 0 * 00.0f, 48.0f, 48.0f); + kControls.Add(1023.0f + 1.5f * 54.0f, 638.0f + 0 * 00.0f, 48.0f, 48.0f); + kControls.Add(1023.0f + 2.5f * 54.0f, 638.0f + 0 * 00.0f, 48.0f, 48.0f); + + pGraphicsDevice = NULL; + pBlockEffect = NULL; + pBlockVertexBuffer = NULL; + pBlockTexture = NULL; } /* @@ -29,7 +89,7 @@ kClock.Reset(); - while(pModel->nGameState != GameState_Exit) + while(nGameState != GameState_Exit) //while(pWorld->IsActive()) { ProcessMessages(); @@ -54,27 +114,152 @@ } /* + * OnMessage + */ +int32 Mediator::OnMessage(Window* pInstance, uint32 nMessage, WPARAM wParam, LPARAM lParam) +{ + if(nMessage == WM_CLOSE) + { + pInstance->Terminate(); + return 0; + } + else + + if(nMessage == WM_DESTROY) + { + PostQuitMessage(0); + return 0; + } + + return DefWindowProc(pInstance->GetHandle(), nMessage, wParam, lParam); +} + +/* * Initialize */ ErrorCode Mediator::Initialize() { + /* + ErrorCode eCode = kWindow.Initialize(); + if(eCode == Error_Success) + { + eCode = GraphicsDevice::Create(kWindow, ScreenSizeX, ScreenSizeY, &pGraphicsDevice); + if(eCode == Error_Success) + { + eCode = kRenderContext.Initialize(pGraphicsDevice); + if(eCode == Error_Success) + { + //NOTE: This seems like a big hack. Why does the resource manager + // need to be aware of the graphics device just to load resources? + // This could be replaced by a "resource loader" which is owned + // by the graphics device and registered to the resource manager + eCode = kResourceManager.Initialize(pGraphicsDevice); + if(eCode == Error_Success) + { + eCode = kInputManager.Initialize(kWindow); + if(eCode == Error_Success) + { + eCode = kWorld.Initialize(&kResourceManager); + if(eCode == Error_Success) + { + eCode = kInputManager.Register(&kWorld); + if(eCode == Error_Success) + { + kWorld.Activate(); + } + } + } + } + } + } + } + */ + + /* pModel = new Model(); pView = new View(pModel); pController = new Controller(pModel, pView); - //pWorld = new World(); ErrorCode eCode = pView->Initialize(); - //eCode = pWorld->Initialize(); if(eCode == Error_Success) { - //pWorld->Activate(); - eCode = pController->Initialize(); if(eCode == Error_Success) { - pModel->nCurrentLevel = 0; - pModel->nGameState = GameState_LoadMap; + nCurrentLevel = 0; + nGameState = GameState_LoadMap; + } + } + */ + + ErrorCode eCode = kWindow.Initialize(); + if(eCode == Error_Success) + { + ErrorCode eCode = GraphicsDevice::Create(kWindow.GetHandle(), ScreenSizeX, ScreenSizeY, &pGraphicsDevice); + if(eCode != Error_Success) + { + Terminate(); + return Error_Fail; + } + + eCode = kContext.Initialize(pGraphicsDevice); + if(eCode != Error_Success) + { + Terminate(); + return Error_Fail; + } + + eCode = kResourceManager.Initialize(pGraphicsDevice); + if(eCode != Error_Success) + { + Terminate(); + return Error_Fail; + } + + eCode = kInputManager.Initialize(kWindow.GetHandle()); + if(eCode != Error_Success) + { + Terminate(); + return Error_Fail; } + + eCode = kResourceManager.CreateEffectFromFile("Data\\Shaders\\Environment.fx", &pBlockEffect); + if(eCode != Error_Success) + { + Terminate(); + return Error_Fail; + } + + eCode = kResourceManager.CreateTextureFromFile("Data\\Textures\\Block02.tga", &pBlockTexture); + if(eCode != Error_Success) + { + Terminate(); + return Error_Fail; + } + + eCode = kResourceManager.CreateVertexBuffer(VerticesPerBlock * sizeof(Vertex::Block), D3DUSAGE_WRITEONLY, D3DPOOL_MANAGED, &pBlockVertexBuffer); + if(eCode != Error_Success) + { + Terminate(); + return Error_Fail; + } + + eCode = SetupVertexBuffer(); + if(eCode != Error_Success) + { + Terminate(); + return Error_Fail; + } + + eCode = kInterface.Initialize(&kResourceManager); + if(eCode != Error_Success) + { + Terminate(); + return Error_Fail; + } + + nCurrentLevel = 0; + nGameState = GameState_LoadMap; } return eCode; @@ -85,34 +270,31 @@ */ void Mediator::Terminate() { - /* - if(pWorld) - { - pWorld->Terminate(); + kInterface.Terminate(); - delete pWorld; - pWorld = NULL; - } - */ - - if(pController) + if(pBlockVertexBuffer) { - pController->Terminate(); - - delete pController; - pController = 0; + pBlockVertexBuffer->Release(); + pBlockVertexBuffer = NULL; } - if(pView) + if(pBlockTexture) { - pView->Terminate(); - - delete pView; - pView = 0; + pBlockTexture->Release(); + pBlockTexture = NULL; } - delete pModel; - pModel = 0; + if(pBlockEffect) + { + pBlockEffect->Release(); + pBlockEffect = 0; + } + + kContext.Terminate(); + kInputManager.Terminate(); + kResourceManager.Terminate(); + + GraphicsDevice::Destroy(pGraphicsDevice); } /* @@ -120,8 +302,35 @@ */ void Mediator::Update(float fElapsed) { - pController->Update(fElapsed); - //pWorld->Update(fElapsed); + ProcessInput(fElapsed); + + if(nGameState == GameState_LoadMap) + { + char kBuffer[256]; + sprintf_s(kBuffer, "Data\\Maps\\Map%02d.map", nCurrentLevel++); + + nGameState = Load(kBuffer) ? GameState_Active : GameState_Over; + } + else + + if(nGameState == GameState_Active) + { + if(nSimulationState == SimulationState_Active) + { + if(kBot.Update(fElapsed)) + { + if(kEnvironment.RequirementsMet()) + { + kDialog.Reset("Some message"); + kDialog.AddButton(DialogButton_Ok, "Ok", 0.0f, 0.0f, 0.0f, 0.0f); + + nGameState = GameState_Complete; + } + } + } + } + + //kWorld.Update(fElapsed); } /* @@ -129,8 +338,19 @@ */ void Mediator::Render() { - pView->Render(); - //pWorld->Render(); + const uint32 nColor = D3DCOLOR_XRGB(32, 32, 32); + + kContext.Begin(nColor); + + if(nGameState >= GameState_Active) + { + Render3D(); + Render2D(); + } + + kContext.End(); + + //kWorld.Render(kRenderContext); } /* @@ -144,12 +364,615 @@ { if(kMessage.message == WM_QUIT) { - pModel->nGameState = GameState_Exit; - //pWorld->Deactivate(); + nGameState = GameState_Exit; + //kWorld.Deactivate(); break; } TranslateMessage(&kMessage); DispatchMessage(&kMessage); } -} \ No newline at end of file +} + +/* + * Load + */ +bool Mediator::Load(const char* pName) +{ + ErrorCode eCode = kLoader.Load(pName); + if(eCode == Error_Success) + { + if(pFunction) + { + delete[] pFunction; + pFunction = NULL; + } + + const Size& kSize = kLoader.GetSize(); + + eCode = kEnvironment.Initialize(kSize.X, kSize.Y); + if(eCode == Error_Success) + { + for(uint32 nY = 0; nY < kSize.Y; ++nY) + { + for(uint32 nX = 0; nX < kSize.X; ++nX) + { + kEnvironment.SetType(nX, nY, kLoader.GetTowerType(nX, nY)); + kEnvironment.SetAltitude(nX, nY, kLoader.GetTowerHeight(nX, nY)); + } + } + + kBot.Initialize(&kEnvironment); + kBot.kPosition = kLoader.GetInitialPosition(); + kBot.kDirection = kLoader.GetInitialDirection(); + + const uint32 nCount = kLoader.GetFunctionCount(); + + pFunction = new Code[nCount + 1]; + pFunction[0].Initialize(MainFunctionLength); + pFunction[0].Clear(); + + for(uint32 i = 0; i < nCount; ++i) + { + const uint32 nLength = kLoader.GetFunctionLength(i); + + pFunction[i + 1].Initialize(nLength); + pFunction[i + 1].Clear(); + } + } + } + + return eCode == Error_Success; +} + +/* + * ResetEnvironment + */ +void Mediator::ResetEnvironment() +{ + kEnvironment.Reset(); +} + +/* + * ResetBot + */ +void Mediator::ResetBot() +{ + kBot.Reset(); + kBot.kPosition = kLoader.GetInitialPosition(); + kBot.kDirection = kLoader.GetInitialDirection(); +} + +/* + * ResetCode + */ +void Mediator::ClearCode() +{ + for(uint32 i = 0; i < kLoader.GetFunctionCount(); ++i) + { + pFunction[i].Clear(); + } +} + +/* + * SetupVertexBuffer + */ +ErrorCode Mediator::SetupVertexBuffer() +{ + Vertex::Block* pVertices = NULL; + + HRESULT hResult = pBlockVertexBuffer->Lock(0, 0, (void**)&pVertices, D3DLOCK_DISCARD); + if(FAILED(hResult)) + { + return Error_Fail; + } + + const float fU1 = 0.66f; + const float fV1 = 0.66f; + + // front + pVertices[0] = Vertex::Block(-0.5f, 0.0f, -0.5f, 0.0f, 0.0f, -1.0f, 0.00f, 1.00f); + pVertices[1] = Vertex::Block(-0.5f, 1.0f, -0.5f, 0.0f, 0.0f, -1.0f, 0.00f, 0.66f); + pVertices[2] = Vertex::Block(+0.5f, 1.0f, -0.5f, 0.0f, 0.0f, -1.0f, 1.00f, 0.66f); + pVertices[3] = Vertex::Block(-0.5f, 0.0f, -0.5f, 0.0f, 0.0f, -1.0f, 0.00f, 1.00f); + pVertices[4] = Vertex::Block(+0.5f, 1.0f, -0.5f, 0.0f, 0.0f, -1.0f, 1.00f, 0.66f); + pVertices[5] = Vertex::Block(+0.5f, 0.0f, -0.5f, 0.0f, 0.0f, -1.0f, 1.00f, 1.00f); + // back + pVertices[6] = Vertex::Block(+0.5f, 0.0f, +0.5f, 0.0f, 0.0f, +1.0f, 0.00f, 1.00f); + pVertices[7] = Vertex::Block(+0.5f, 1.0f, +0.5f, 0.0f, 0.0f, +1.0f, 0.00f, 0.66f); + pVertices[8] = Vertex::Block(-0.5f, 1.0f, +0.5f, 0.0f, 0.0f, +1.0f, 1.00f, 0.66f); + pVertices[9] = Vertex::Block(+0.5f, 0.0f, +0.5f, 0.0f, 0.0f, +1.0f, 0.00f, 1.00f); + pVertices[10] = Vertex::Block(-0.5f, 1.0f, +0.5f, 0.0f, 0.0f, +1.0f, 1.00f, 0.66f); + pVertices[11] = Vertex::Block(-0.5f, 0.0f, +0.5f, 0.0f, 0.0f, +1.0f, 1.00f, 1.00f); + // left + pVertices[12] = Vertex::Block(-0.5f, 0.0f, +0.5f, -1.0f, 0.0f, 0.0f, 0.00f, 1.00f); + pVertices[13] = Vertex::Block(-0.5f, 1.0f, +0.5f, -1.0f, 0.0f, 0.0f, 0.00f, 0.66f); + pVertices[14] = Vertex::Block(-0.5f, 1.0f, -0.5f, -1.0f, 0.0f, 0.0f, 1.00f, 0.66f); + pVertices[15] = Vertex::Block(-0.5f, 0.0f, +0.5f, -1.0f, 0.0f, 0.0f, 0.00f, 1.00f); + pVertices[16] = Vertex::Block(-0.5f, 1.0f, -0.5f, -1.0f, 0.0f, 0.0f, 1.00f, 0.66f); + pVertices[17] = Vertex::Block(-0.5f, 0.0f, -0.5f, -1.0f, 0.0f, 0.0f, 1.00f, 1.00f); + // right + pVertices[18] = Vertex::Block(+0.5f, 0.0f, -0.5f, +1.0f, 0.0f, 0.0f, 0.00f, 1.00f); + pVertices[19] = Vertex::Block(+0.5f, 1.0f, -0.5f, +1.0f, 0.0f, 0.0f, 0.00f, 0.66f); + pVertices[20] = Vertex::Block(+0.5f, 1.0f, +0.5f, +1.0f, 0.0f, 0.0f, 1.00f, 0.66f); + pVertices[21] = Vertex::Block(+0.5f, 0.0f, -0.5f, +1.0f, 0.0f, 0.0f, 0.00f, 1.00f); + pVertices[22] = Vertex::Block(+0.5f, 1.0f, +0.5f, +1.0f, 0.0f, 0.0f, 1.00f, 0.66f); + pVertices[23] = Vertex::Block(+0.5f, 0.0f, +0.5f, +1.0f, 0.0f, 0.0f, 1.00f, 1.00f); + // top + pVertices[24] = Vertex::Block(-0.5f, 1.0f, -0.5f, 0.0f, +1.0f, 0.0f, 0.00f, 0.66f); + pVertices[25] = Vertex::Block(-0.5f, 1.0f, +0.5f, 0.0f, +1.0f, 0.0f, 0.00f, 0.00f); + pVertices[26] = Vertex::Block(+0.5f, 1.0f, +0.5f, 0.0f, +1.0f, 0.0f, 1.00f, 0.00f); + pVertices[27] = Vertex::Block(-0.5f, 1.0f, -0.5f, 0.0f, +1.0f, 0.0f, 0.00f, 0.66f); + pVertices[28] = Vertex::Block(+0.5f, 1.0f, +0.5f, 0.0f, +1.0f, 0.0f, 1.00f, 0.00f); + pVertices[29] = Vertex::Block(+0.5f, 1.0f, -0.5f, 0.0f, +1.0f, 0.0f, 1.00f, 0.66f); + // bottom + pVertices[30] = Vertex::Block(-0.5f, 0.0f, +0.5f, 0.0f, -1.0f, 0.0f, 0.00f, 0.66f); + pVertices[31] = Vertex::Block(-0.5f, 0.0f, -0.5f, 0.0f, -1.0f, 0.0f, 0.00f, 0.00f); + pVertices[32] = Vertex::Block(+0.5f, 0.0f, -0.5f, 0.0f, -1.0f, 0.0f, 1.00f, 0.00f); + pVertices[33] = Vertex::Block(-0.5f, 0.0f, +0.5f, 0.0f, -1.0f, 0.0f, 0.00f, 0.66f); + pVertices[34] = Vertex::Block(+0.5f, 0.0f, -0.5f, 0.0f, -1.0f, 0.0f, 1.00f, 0.00f); + pVertices[35] = Vertex::Block(+0.5f, 0.0f, +0.5f, 0.0f, -1.0f, 0.0f, 1.00f, 0.66f); + + pBlockVertexBuffer->Unlock(); + + return Error_Success; +} + +/* + * Render3D + */ +void Mediator::Render3D() +{ + const D3DXVECTOR3& kScale = kEnvironment.GetScale(); + const uint32 nSizeX = kEnvironment.GetWidth(); + const uint32 nSizeY = kEnvironment.GetHeight(); + + //const D3DXVECTOR3 kTarget(0.5f * (nSizeX - 1) * kScale.x, 0.0f, 0.5f * (nSizeY - 1) * kScale.z); + const D3DXVECTOR3 kTarget(0.0f, 0.0f, 0.0f); + + kContext.SetupCamera3D(pBlockEffect, kCameraController.GetLocation(kTarget), kTarget); + + RenderEnvironment(&kEnvironment); + RenderBot(&kEnvironment, &kBot); +} + +/* + * Render2D + */ +void Mediator::Render2D() +{ + kInterface.Render(kContext); +} + +/* + * RenderEnvironment + */ +void Mediator::RenderEnvironment(Environment* pEnvironment) +{ + const D3DXVECTOR3& kScale = pEnvironment->GetScale(); + + uint32 nPasses = 0; + + pBlockEffect->SetTechnique(pBlockEffect->GetTechnique(0)); + pBlockEffect->Begin(&nPasses, 0); + pBlockEffect->BeginPass(0); + + D3DXMATRIX kScaleMatrix; + D3DXMatrixScaling(&kScaleMatrix, kScale.x, kScale.y, kScale.z); + + const uint32 nSizeX = pEnvironment->GetWidth(); + const uint32 nSizeY = pEnvironment->GetHeight(); + + const D3DXMATRIX& kProjection = kContext.GetProjection(); + const D3DXMATRIX& kView = kContext.GetView(); + + D3DVIEWPORT9 kViewport; + kContext.GetViewport(&kViewport); + + D3DXVECTOR3 kCenterWorld(0.0f, 0.0f, 0.0f); + const float fMagicOffset = 400.0f; + //const D3DXVECTOR3& kCenterWorld = ComputeOrigin(0.5f * (ScreenSizeX - (304.0f + fMagicOffset)), 0.5f * ScreenSizeY, kViewport, kProjection, kView); + + const float fOffsetX = -0.5f * (nSizeX * kScale.x); + const float fOffsetZ = -0.5f * (nSizeY * kScale.z); + + for(uint32 nZ = 0; nZ < nSizeY; ++nZ) + { + for(uint32 nX = 0; nX < nSizeX; ++nX) + { + uint32 nType = pEnvironment->GetType(nX, nZ); + uint32 nHeight = pEnvironment->GetAltitude(nX, nZ); + uint32 nState = pEnvironment->GetState(nX, nZ); + uint32 nColor = D3DCOLOR_XRGB(0x80, 0x80, 0x80); + + if(nType == 1) + { + nColor = nState ? D3DCOLOR_XRGB(0, 0, 255) : D3DCOLOR_XRGB(255, 0, 0); + } + + for(uint32 i = 0; i < pEnvironment->GetAltitude(nX, nZ); ++i) + { + D3DXMATRIX kTranslateMatrix; + D3DXMatrixTranslation(&kTranslateMatrix, fOffsetX + (kCenterWorld.x + nX) * kScale.x, i * kScale.y, fOffsetZ + (kCenterWorld.z + nZ) * kScale.z); + + D3DXMATRIX kWorldMatrix; + D3DXMatrixMultiply(&kWorldMatrix, &kScaleMatrix, &kTranslateMatrix); + + const float fAlpha = ((nColor >> 24) & 0xFF) / 255.0f; + const float fRed = ((nColor >> 16) & 0xFF) / 255.0f; + const float fGreen = ((nColor >> 8 ) & 0xFF) / 255.0f; + const float fBlue = ((nColor >> 0 ) & 0xFF) / 255.0f; + + const D3DXVECTOR4 kColorVector(fRed, fGreen, fBlue, fAlpha); + + pBlockEffect->SetMatrix(pBlockEffect->GetParameterByName(NULL, "kWorld"), &kWorldMatrix); + pBlockEffect->SetVector(pBlockEffect->GetParameterByName(NULL, "kColor"), &kColorVector); + pBlockEffect->SetTexture(pBlockEffect->GetParameterByName(NULL, "kTexture"), pBlockTexture); + pBlockEffect->CommitChanges(); + + kContext.DrawTriangles(Vertex::Block::Declaration, pBlockVertexBuffer, sizeof(Vertex::Block), FacesPerCube * TrianglesPerFace); + } + } + } + + pBlockEffect->EndPass(); + pBlockEffect->End(); + + if(false) // wireframe + { + pBlockEffect->SetTechnique(pBlockEffect->GetTechniqueByName("Wire")); + pBlockEffect->Begin(&nPasses, 0); + pBlockEffect->BeginPass(0); + + for(uint32 nZ = 0; nZ < nSizeY; ++nZ) + { + for(uint32 nX = 0; nX < nSizeX; ++nX) + { + for(uint32 i = 0; i < pEnvironment->GetAltitude(nX, nZ); ++i) + { + D3DXMATRIX kTranslateMatrix; + D3DXMatrixTranslation(&kTranslateMatrix, nX * kScale.x, i * kScale.y, nZ * kScale.z); + + D3DXMATRIX kWorldMatrix; + D3DXMatrixMultiply(&kWorldMatrix, &kScaleMatrix, &kTranslateMatrix); + + const D3DXVECTOR4 kColorVector(0.0f, 0.0f, 0.0f, 1.0f); + + pBlockEffect->SetMatrix(pBlockEffect->GetParameterByName(NULL, "kWorld"), &kWorldMatrix); + pBlockEffect->SetVector(pBlockEffect->GetParameterByName(NULL, "kColor"), &kColorVector); + pBlockEffect->SetTexture(pBlockEffect->GetParameterByName(NULL, "kTexture"), pBlockTexture); + pBlockEffect->CommitChanges(); + + kContext.DrawTriangles(Vertex::Block::Declaration, pBlockVertexBuffer, sizeof(Vertex::Block), FacesPerCube * TrianglesPerFace); + } + } + } + + pBlockEffect->EndPass(); + pBlockEffect->End(); + } +} + +/* + * RenderBot + */ +void Mediator::RenderBot(Environment* pEnvironment, Bot* pBot) +{ + const D3DXVECTOR3& kPosition = pBot->GetWorldPosition(); + const D3DXVECTOR3& kOrientation = pBot->GetWorldOrientation(); + + const float fOffsetX = -0.5f * (pEnvironment->GetWidth() * pEnvironment->GetScale().x); + const float fOffsetZ = -0.5f * (pEnvironment->GetHeight() * pEnvironment->GetScale().z); + + uint32 nPasses = 0; + + pBlockEffect->SetTechnique(pBlockEffect->GetTechnique(0)); + pBlockEffect->Begin(&nPasses, 0); + pBlockEffect->BeginPass(0); + + D3DXMATRIX kScale; + D3DXMatrixScaling(&kScale, pBot->kSize.x, pBot->kSize.y, pBot->kSize.z); + + D3DXMATRIX kTranslate; + D3DXMatrixTranslation(&kTranslate, fOffsetX + kPosition.x, kPosition.y, fOffsetZ + kPosition.z); + + D3DXMATRIX kRotate; + D3DXMatrixRotationY(&kRotate, kOrientation.y); + + D3DXMATRIX kTempMatrix; + D3DXMATRIX kWorldMatrix; + D3DXMatrixMultiply(&kWorldMatrix, D3DXMatrixMultiply(&kTempMatrix, &kScale, &kRotate), &kTranslate); + + const float fAlpha = ((pBot->nColor >> 24) & 0xFF) / 255.0f; + const float fRed = ((pBot->nColor >> 16) & 0xFF) / 255.0f; + const float fGreen = ((pBot->nColor >> 8 ) & 0xFF) / 255.0f; + const float fBlue = ((pBot->nColor >> 0 ) & 0xFF) / 255.0f; + + const D3DXVECTOR4 kColorVector(fRed, fGreen, fBlue, fAlpha); + + pBlockEffect->SetMatrix(pBlockEffect->GetParameterByName(NULL, "kWorld"), &kWorldMatrix); + pBlockEffect->SetVector(pBlockEffect->GetParameterByName(NULL, "kColor"), &kColorVector); + pBlockEffect->SetTexture(pBlockEffect->GetParameterByName(NULL, "kTexture"), NULL); + pBlockEffect->CommitChanges(); + + kContext.DrawTriangles(Vertex::Block::Declaration, pBlockVertexBuffer, sizeof(Vertex::Block), FacesPerCube * TrianglesPerFace); + + pBlockEffect->EndPass(); + pBlockEffect->End(); +} + +/* + * ProcessInput + */ +void Mediator::ProcessInput(float fElapsed) +{ + kInputManager.Update(fElapsed); + + #if defined(_DEBUG) + if(kInputManager.IsKeyDown(DIK_LEFT)) + { + //pView->UpdateCameraYaw(0.01f); + kCameraController.Yaw(0.01f); + } + else + + if(kInputManager.IsKeyDown(DIK_RIGHT)) + { + //pView->UpdateCameraYaw(-0.01f); + kCameraController.Yaw(-0.01f); + } + + if(kInputManager.IsKeyDown(DIK_UP)) + { + //pView->UpdateCameraPitch(0.01f); + kCameraController.Pitch(0.01f); + } + else + + if(kInputManager.IsKeyDown(DIK_DOWN)) + { + //pView->UpdateCameraPitch(-0.01f); + kCameraController.Pitch(-0.01f); + } + + if(kInputManager.IsKeyDown(DIK_NEXT)) + { + //pView->UpdateCameraDistance(0.1f); + kCameraController.Move(0.1f); + } + else + + if(kInputManager.IsKeyDown(DIK_PRIOR)) + { + //pView->UpdateCameraDistance(-0.1f); + kCameraController.Move(-0.1f); + } + #endif + + const float fMouseX = kInputManager.GetMouseX(); + const float fMouseY = kInputManager.GetMouseY(); + + if(nGameState == GameState_Active) + { + if(kInputManager.IsButtonDown(0) && !kInputManager.WasButtonDown(0)) + { + int32 nSelection = kControls.Pick(fMouseX, fMouseY); + if(nSelection >= 0) + { + if(nSelection == ControlButton_Play) + { + if(nSimulationState == SimulationState_Idle) + { + ResetBot(); + kBot.Upload(pFunction, kLoader.GetFunctionCount() + 1); + + nSimulationState = SimulationState_Active; + } + } + else + + if(nSelection == ControlButton_Stop) + { + if(nSimulationState == SimulationState_Active) + { + ResetEnvironment(); + ResetBot(); + + nSimulationState = SimulationState_Idle; + } + } + else + + if(nSelection == ControlButton_Exit) + { + nGameState = GameState_Exit; + } + } + else + { + // pick against the toolbar + nSelection = kToolbar.Pick(fMouseX, fMouseY); + if(nSelection >= 0) + { + kDragController.Begin(Action_Forward + nSelection); + } + else + { + // pick against the main pane + nSelection = kMain.Pick(fMouseX, fMouseY); + if(nSelection >= 0) + { + Code* pCode = pFunction; + if(!pCode->IsEmptySlot(nSelection)) + { + kDragController.Begin(pCode->GetSlot(nSelection)); + pCode->ClearSlot(nSelection); + } + } + else + { + // pick against the function pane + nSelection = kFunction.Pick(fMouseX, fMouseY); + if(nSelection >= 0) + { + Code* pCode = pFunction + nCurrentFunction + 1; + if(!pCode->IsEmptySlot(nSelection)) + { + kDragController.Begin(pCode->GetSlot(nSelection)); + pCode->ClearSlot(nSelection); + } + } + else + { + // pick against the function pane arrows + for(uint32 i = 0; i < sizeof(kArrowBounds) / sizeof(kArrowBounds[0]); ++i) + { + if(kArrowBounds[i].Contains(fMouseX, fMouseY)) + { + const uint32 nCount = kLoader.GetFunctionCount(); + nCurrentFunction = (nCurrentFunction + 2 * (int32)i - 1 + nCount) % nCount; + } + } + } + } + } + } + } + else + + if(!kInputManager.IsButtonDown(0) && kInputManager.WasButtonDown(0)) + { + if(kDragController.IsActive()) + { + const uint32 nAction = kDragController.End(); + + int32 nSelection = kMain.Pick(fMouseX, fMouseY); + if(nSelection >= 0) + { + pFunction[0].SetSlot(nSelection, nAction); + } + else + { + nSelection = kFunction.Pick(fMouseX, fMouseY); + if(nSelection >= 0) + { + pFunction[nCurrentFunction + 1].SetSlot(nSelection, nAction); + } + } + } + } + } + else + + if(nGameState == GameState_Complete) + { + if(kInputManager.IsButtonDown(0) && !kInputManager.WasButtonDown(0)) + { + for(uint32 i = 0; i < sizeof(kDialog1Bounds) / sizeof(kDialog1Bounds[0]); ++i) + { + if(kDialog1Bounds[i].Contains(fMouseX, fMouseY)) + { + if(i == 0) + { + if(nSimulationState == SimulationState_Active) + { + ResetEnvironment(); + ResetBot(); + + nSimulationState = SimulationState_Idle; + } + + nGameState = GameState_LoadMap; + } + } + } + + /* + int32 nSelection = kDialog.Pick(fMouseX, fMouseY); + + if(nSelection == DialogButton_A) + { + if(nSimulationState == SimulationState_Active) + { + ResetEnvironment(); + ResetBot(); + + nSimulationState = SimulationState_Idle; + } + + nGameState = GameState_LoadMap; + } + */ + } + } + else + + if(nGameState == GameState_Over) + { + // check to see if button was clicked + if(kInputManager.IsButtonDown(0) && !kInputManager.WasButtonDown(0)) + { + for(uint32 i = 0; i < sizeof(kDialog1Bounds) / sizeof(kDialog1Bounds[0]); ++i) + { + if(kDialog1Bounds[i].Contains(fMouseX, fMouseY)) + { + if(i == 0) + { + nCurrentLevel = 0; + nGameState = GameState_LoadMap; + } + } + } + + /* + int32 nSelection = kDialog.Pick(fMouseX, fMouseY); + + if(nSelection == DialogButton_A) + { + nCurrentLevel = 0; + nGameState = GameState_LoadMap; + } + */ + } + } + else + + if(nGameState == GameState_Confirm) + { + // check to see if button was clicked + if(kInputManager.IsButtonDown(0) && !kInputManager.WasButtonDown(0)) + { + for(uint32 i = 0; i < sizeof(kDialog2Bounds) / sizeof(kDialog2Bounds[0]); ++i) + { + if(kDialog2Bounds[i].Contains(fMouseX, fMouseY)) + { + if(i == 0) + { + nGameState = GameState_Exit; + } + else + + if(i == 1) + { + nGameState = GameState_Active; + } + } + } + + /* + int32 nSelection = kDialog.Pick(fMouseX, fMouseY); + + if(nSelection == DialogButton_A) + { + nGameState = GameState_Exit; + } + else + + if(nSelection == DialogButton_B) + { + nGameState = GameState_Active; + } + */ + } + } +} diff -r 31373c5bd1b9 -r 968341ab1fb2 LightClone/Source/Mediator.h --- a/LightClone/Source/Mediator.h Fri Sep 09 13:21:22 2011 -0700 +++ b/LightClone/Source/Mediator.h Fri Sep 09 16:18:41 2011 -0700 @@ -7,9 +7,20 @@ #include "Core.h" #include "Clock.h" -#include "Model.h" -#include "View.h" -#include "Controller.h" +#include "Window.h" +#include "InputManager.h" +#include "Loader.h" +#include "Environment.h" +#include "Bot.h" +#include "Code.h" +#include "DragController.h" +#include "ButtonPane.h" +#include "Dialog.h" +#include "GraphicsDevice.h" +#include "ResourceManager.h" +#include "RenderContext.h" +#include "CameraController.h" +#include "Interface.h" /* * MediatorState @@ -24,29 +35,177 @@ }; /* + * GameState + */ +enum +{ + GameState_Idle, + GameState_LoadMap, + GameState_Active, + GameState_Complete, + GameState_Over, + GameState_Confirm, + GameState_Exit, +}; + +/* + * SimulationState + */ +enum +{ + SimulationState_Idle, + SimulationState_Active, +}; + +/* * Mediator */ -class Mediator +class Mediator : public WindowCallback { /* + * kWindow + */ + Window kWindow; + + /* * kClock */ Clock kClock; /* - * pModel + * kLoader + */ + Loader kLoader; + + /* + * kEnvironment + */ + Environment kEnvironment; + + /* + * kBot + */ + Bot kBot; + + /* + * kFunction + */ + Code* pFunction; + + /* + * nGameState + */ + uint32 nGameState; + + /* + * nSimulationState + */ + uint32 nSimulationState; + + /* + * nCurrentLevel */ - Model* pModel; + uint32 nCurrentLevel; + + /* + * nCurrentFunction + */ + uint32 nCurrentFunction; + + /* + * kInputManager + */ + InputManager kInputManager; + + /* + * kDragController + */ + DragController kDragController; + + /* + * kToolbar + */ + ButtonPane kToolbar; + + /* + * kMain + */ + ButtonPane kMain; + + /* + * kFunction + */ + ButtonPane kFunction; /* - * pView + * kControlBounds + */ + ButtonPane kControls; + + /* + * kArrowBounds + */ + Rectangle2 kArrowBounds[2]; + + /* + * kDialog1Bounds */ - View* pView; + Rectangle2 kDialog1Bounds[1]; + + /* + * kDialog2Bounds + */ + Rectangle2 kDialog2Bounds[2]; + + /* + * kDialog + */ + Dialog kDialog; + + /* + * pGraphicsDevice + */ + GraphicsDevice* pGraphicsDevice; /* - * pController + * kResourceManager + */ + ResourceManager kResourceManager; + + /* + * kContext + */ + RenderContext kContext; + + /* + * kCameraController + * Move to World + */ + CameraController kCameraController; + + /* + * pBlockEffect + * Move to World */ - Controller* pController; + ID3DXEffect* pBlockEffect; + + /* + * pBlockVertexBuffer + * Move to World + */ + IDirect3DVertexBuffer9* pBlockVertexBuffer; + + /* + * pBlockTexture + * Move to World + */ + IDirect3DTexture9* pBlockTexture; + + /* + * kInterface + * Move to World + */ + Interface kInterface; public: @@ -60,7 +219,12 @@ */ ErrorCode Run(); -protected: + /* + * OnMessage + */ + virtual int32 OnMessage(Window* pInstance, uint32 nMessage, WPARAM wParam, LPARAM lParam); + +private: /* * Initialize @@ -86,6 +250,56 @@ * ProcessMessages */ virtual void ProcessMessages(); + + /* + * Load + */ + bool Load(const char* pName); + + /* + * ResetEnvironment + */ + void ResetEnvironment(); + + /* + * ResetBot + */ + void ResetBot(); + + /* + * ResetCode + */ + void ClearCode(); + + /* + * SetupVertexBuffer + */ + ErrorCode SetupVertexBuffer(); + + /* + * Render3D + */ + void Render3D(); + + /* + * Render2D + */ + void Render2D(); + + /* + * RenderEnvironment + */ + void RenderEnvironment(Environment* pEnvironment); + + /* + * RenderBot + */ + void RenderBot(Environment* pEnvironment, Bot* pBot); + + /* + * ProcessInput + */ + void ProcessInput(float fElapsed); }; #endif //__MEDIATOR_H__ diff -r 31373c5bd1b9 -r 968341ab1fb2 LightClone/Source/Model.cpp --- a/LightClone/Source/Model.cpp Fri Sep 09 13:21:22 2011 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,207 +0,0 @@ -/* - * Model - */ - -#include "Model.h" - -/* -World - Update - Update WorldObjects - - Render3D - Setup 3D Projection - Render Environment - Render Bot - - Render2D - Interface - - -WorldObject Concerns: - Initialization & Resource Loading - Updating - Rendering - Termination -*/ - -/* - * Model - */ -Model::Model() : kToolbar(Action_Count), kMain(MaximumFunctionLength), kFunction(MaximumFunctionLength / 2), kControls(4) -{ - nGameState = GameState_Active; - nSimulationState = SimulationState_Idle; - pFunction = 0; - nCurrentFunction = 0; - nCurrentLevel = 0; - - kArrowBounds[0] = Rectangle2(1206.0f + 0 * 16.0f, 473.0f + 0 * 54.0f, 16.0f, 16.0f); - kArrowBounds[1] = Rectangle2(1206.0f + 2 * 16.0f, 473.0f + 0 * 54.0f, 16.0f, 16.0f); - - kDialog1Bounds[0] = Rectangle2(567.0f, 412.0f, 150.0f, 60.0f); - - kDialog2Bounds[0] = Rectangle2(1023.0f + 2.5f * 54.0f, 638.0f + 0 * 00.0f, 48.0f, 48.0f); - kDialog2Bounds[1] = Rectangle2(1023.0f + 2.5f * 54.0f, 638.0f + 0 * 00.0f, 48.0f, 48.0f); - - kToolbar.Add(1023.0f + 0 * 54.0f, 85.0f + 0 * 54.0f, 48.0f, 48.0f); - kToolbar.Add(1023.0f + 1 * 54.0f, 85.0f + 0 * 54.0f, 48.0f, 48.0f); - kToolbar.Add(1023.0f + 2 * 54.0f, 85.0f + 0 * 54.0f, 48.0f, 48.0f); - kToolbar.Add(1023.0f + 3 * 54.0f, 85.0f + 0 * 54.0f, 48.0f, 48.0f); - kToolbar.Add(1023.0f + 0 * 54.0f, 85.0f + 1 * 54.0f, 48.0f, 48.0f); - kToolbar.Add(1023.0f + 1 * 54.0f, 85.0f + 1 * 54.0f, 48.0f, 48.0f); - kToolbar.Add(1023.0f + 2 * 54.0f, 85.0f + 1 * 54.0f, 48.0f, 48.0f); - kToolbar.Add(1023.0f + 3 * 54.0f, 85.0f + 1 * 54.0f, 48.0f, 48.0f); - - kMain.Add(1023.0f + 0 * 54.0f, 238.0f + 0 * 54.0f, 48.0f, 48.0f); - kMain.Add(1023.0f + 1 * 54.0f, 238.0f + 0 * 54.0f, 48.0f, 48.0f); - kMain.Add(1023.0f + 2 * 54.0f, 238.0f + 0 * 54.0f, 48.0f, 48.0f); - kMain.Add(1023.0f + 3 * 54.0f, 238.0f + 0 * 54.0f, 48.0f, 48.0f); - kMain.Add(1023.0f + 0 * 54.0f, 238.0f + 1 * 54.0f, 48.0f, 48.0f); - kMain.Add(1023.0f + 1 * 54.0f, 238.0f + 1 * 54.0f, 48.0f, 48.0f); - kMain.Add(1023.0f + 2 * 54.0f, 238.0f + 1 * 54.0f, 48.0f, 48.0f); - kMain.Add(1023.0f + 3 * 54.0f, 238.0f + 1 * 54.0f, 48.0f, 48.0f); - kMain.Add(1023.0f + 0 * 54.0f, 238.0f + 2 * 54.0f, 48.0f, 48.0f); - kMain.Add(1023.0f + 1 * 54.0f, 238.0f + 2 * 54.0f, 48.0f, 48.0f); - kMain.Add(1023.0f + 2 * 54.0f, 238.0f + 2 * 54.0f, 48.0f, 48.0f); - kMain.Add(1023.0f + 3 * 54.0f, 238.0f + 2 * 54.0f, 48.0f, 48.0f); - kMain.Add(1023.0f + 0 * 54.0f, 238.0f + 3 * 54.0f, 48.0f, 48.0f); - kMain.Add(1023.0f + 1 * 54.0f, 238.0f + 3 * 54.0f, 48.0f, 48.0f); - kMain.Add(1023.0f + 2 * 54.0f, 238.0f + 3 * 54.0f, 48.0f, 48.0f); - kMain.Add(1023.0f + 3 * 54.0f, 238.0f + 3 * 54.0f, 48.0f, 48.0f); - - kFunction.Add(1023.0f + 0 * 54.0f, 501.0f + 0 * 54.0f, 48.0f, 48.0f); - kFunction.Add(1023.0f + 1 * 54.0f, 501.0f + 0 * 54.0f, 48.0f, 48.0f); - kFunction.Add(1023.0f + 2 * 54.0f, 501.0f + 0 * 54.0f, 48.0f, 48.0f); - kFunction.Add(1023.0f + 3 * 54.0f, 501.0f + 0 * 54.0f, 48.0f, 48.0f); - kFunction.Add(1023.0f + 0 * 54.0f, 501.0f + 1 * 54.0f, 48.0f, 48.0f); - kFunction.Add(1023.0f + 1 * 54.0f, 501.0f + 1 * 54.0f, 48.0f, 48.0f); - kFunction.Add(1023.0f + 2 * 54.0f, 501.0f + 1 * 54.0f, 48.0f, 48.0f); - kFunction.Add(1023.0f + 3 * 54.0f, 501.0f + 1 * 54.0f, 48.0f, 48.0f); - - kControls.Add(1023.0f + 0.5f * 54.0f, 638.0f + 0 * 00.0f, 48.0f, 48.0f); - kControls.Add(1023.0f + 1.5f * 54.0f, 638.0f + 0 * 00.0f, 48.0f, 48.0f); - kControls.Add(1023.0f + 2.5f * 54.0f, 638.0f + 0 * 00.0f, 48.0f, 48.0f); -} - -/* - * Load - */ -bool Model::Load(const char* pName) -{ - ErrorCode eCode = kLoader.Load(pName); - if(eCode == Error_Success) - { - if(pFunction) - { - delete[] pFunction; - pFunction = NULL; - } - - const Size& kSize = kLoader.GetSize(); - - eCode = kEnvironment.Initialize(kSize.X, kSize.Y); - if(eCode == Error_Success) - { - for(uint32 nY = 0; nY < kSize.Y; ++nY) - { - for(uint32 nX = 0; nX < kSize.X; ++nX) - { - kEnvironment.SetType(nX, nY, kLoader.GetTowerType(nX, nY)); - kEnvironment.SetAltitude(nX, nY, kLoader.GetTowerHeight(nX, nY)); - } - } - - kBot.Initialize(&kEnvironment); - kBot.kPosition = kLoader.GetInitialPosition(); - kBot.kDirection = kLoader.GetInitialDirection(); - - const uint32 nCount = kLoader.GetFunctionCount(); - - pFunction = new Code[nCount + 1]; - pFunction[0].Initialize(MainFunctionLength); - pFunction[0].Clear(); - - for(uint32 i = 0; i < nCount; ++i) - { - const uint32 nLength = kLoader.GetFunctionLength(i); - - pFunction[i + 1].Initialize(nLength); - pFunction[i + 1].Clear(); - } - } - } - - return eCode == Error_Success; -} - -/* - * GetBot - */ -Bot* Model::GetBot() -{ - return &kBot; -} - -/* - * GetFunction - */ -Code* Model::GetFunction(uint32 nIndex) -{ - return &pFunction[nIndex]; -} - -/* - * GetFunctionCount - */ -uint32 Model::GetFunctionCount() -{ - return kLoader.GetFunctionCount() + 1; -} - -/* - * GetEnvironment - */ -Environment* Model::GetEnvironment() -{ - return &kEnvironment; -} - -/* - * ResetEnvironment - */ -void Model::ResetEnvironment() -{ - kEnvironment.Reset(); -} - -/* - * ResetBot - */ -void Model::ResetBot() -{ - kBot.Reset(); - kBot.kPosition = kLoader.GetInitialPosition(); - kBot.kDirection = kLoader.GetInitialDirection(); -} - -/* - * ClearCode - */ -void Model::ClearCode() -{ - for(uint32 i = 0; i < kLoader.GetFunctionCount(); ++i) - { - pFunction[i].Clear(); - } -} - -/* - * SetupDialog - */ -void Model::SetupDialog(const char* pMessage, const char* pChoiceA, uint32 nResultA, const char* pChoiceB, uint32 nResultB) -{ - //kDialog.Reset("Some message"); - //kDialog.AddButton(DialogButton_Ok, "Ok", 0.0f, 0.0f, 0.0f, 0.0f); - //kDialog.AddButton(nResultA, pMessageA, -} diff -r 31373c5bd1b9 -r 968341ab1fb2 LightClone/Source/Model.h --- a/LightClone/Source/Model.h Fri Sep 09 13:21:22 2011 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,193 +0,0 @@ -/* - * Model - */ - -#ifndef __MODEL_H__ -#define __MODEL_H__ - -#include "Core.h" -#include "Bot.h" -#include "Environment.h" -#include "Code.h" -#include "Loader.h" -#include "InputManager.h" -#include "DragController.h" -#include "ButtonPane.h" -#include "Dialog.h" - -/* - * GameState - */ -enum -{ - GameState_Idle, - GameState_LoadMap, - GameState_Active, - GameState_Complete, - GameState_Over, - GameState_Confirm, - GameState_Exit, -}; - -/* - * SimulationState - */ -enum -{ - SimulationState_Idle, - SimulationState_Active, -}; - -/* - * Model - */ -class Model -{ - /* - * kLoader - */ - Loader kLoader; - - /* - * kEnvironment - */ - Environment kEnvironment; - - /* - * kBot - */ - Bot kBot; - - /* - * kFunction - */ - Code* pFunction; - -public: - - /* - * nGameState - */ - uint32 nGameState; - - /* - * nSimulationState - */ - uint32 nSimulationState; - - /* - * nCurrentLevel - */ - uint32 nCurrentLevel; - - /* - * nCurrentFunction - */ - uint32 nCurrentFunction; - -public: - - /* - * kInputManager - */ - InputManager kInputManager; - - /* - * kDragController - */ - DragController kDragController; - - /* - * kToolbar - */ - ButtonPane kToolbar; - - /* - * kMain - */ - ButtonPane kMain; - - /* - * kFunction - */ - ButtonPane kFunction; - - /* - * kControlBounds - */ - ButtonPane kControls; - - /* - * kArrowBounds - */ - Rectangle2 kArrowBounds[2]; - - /* - * kDialog1Bounds - */ - Rectangle2 kDialog1Bounds[1]; - - /* - * kDialog2Bounds - */ - Rectangle2 kDialog2Bounds[2]; - - /* - * kDialog - */ - Dialog kDialog; - -public: - - /* - * Model - */ - Model(); - - /* - * Load - */ - bool Load(const char* pName); - - /* - * GetEnvironment - */ - Environment* GetEnvironment(); - - /* - * GetBot - */ - Bot* GetBot(); - - /* - * GetFunction - */ - Code* GetFunction(uint32 nIndex); - - /* - * GetFunctionCount - */ - uint32 GetFunctionCount(); - - /* - * ResetEnvironment - */ - void ResetEnvironment(); - - /* - * ResetBot - */ - void ResetBot(); - - /* - * ResetCode - */ - void ClearCode(); - - /* - * SetupDialog - */ - void SetupDialog(const char* pMessage, const char* pChoiceA, uint32 nResultA, const char* pChoiceB = NULL, uint32 nResultB = 0); -}; - -#endif //__MODEL_H__ diff -r 31373c5bd1b9 -r 968341ab1fb2 LightClone/Source/RenderContext.cpp --- a/LightClone/Source/RenderContext.cpp Fri Sep 09 13:21:22 2011 -0700 +++ b/LightClone/Source/RenderContext.cpp Fri Sep 09 16:18:41 2011 -0700 @@ -8,56 +8,16 @@ /* * RenderContext */ -RenderContext::RenderContext() +RenderContext::RenderContext() : pGraphicsDevice(NULL) { - pDirect3D = NULL; - pDevice = NULL; } /* * Initialize */ -ErrorCode RenderContext::Initialize(HWND kWindow, uint32 nWidth, uint32 nHeight) +ErrorCode RenderContext::Initialize(GraphicsDevice* pDevice) { - pDirect3D = Direct3DCreate9(D3D_SDK_VERSION); - if(!pDirect3D) - { - return Error_Fail; - } - - uint32 nAdapter = D3DADAPTER_DEFAULT; - uint32 nFlags = D3DCREATE_HARDWARE_VERTEXPROCESSING; - - kParameters.BackBufferCount = 1; - kParameters.BackBufferWidth = nWidth; - kParameters.BackBufferHeight = nHeight; - kParameters.BackBufferFormat = D3DFMT_UNKNOWN; -// kParameters.MultiSampleType = D3DMULTISAMPLE_NONE; -// kParameters.MultiSampleQuality = 0; - kParameters.MultiSampleType = D3DMULTISAMPLE_4_SAMPLES; - kParameters.MultiSampleQuality = 2; - kParameters.SwapEffect = D3DSWAPEFFECT_DISCARD; - kParameters.hDeviceWindow = kWindow; - kParameters.Windowed = TRUE; - kParameters.EnableAutoDepthStencil = TRUE; - kParameters.AutoDepthStencilFormat = D3DFMT_D24S8; - kParameters.Flags = 0; - kParameters.FullScreen_RefreshRateInHz = 0; - kParameters.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT; - - HRESULT hResult = pDirect3D->CreateDevice(nAdapter, D3DDEVTYPE_HAL, kWindow, nFlags, &kParameters, &pDevice); - if(FAILED(hResult)) - { - Terminate(); - return Error_Fail; - } - - if(InitializeVertexTypes(pDevice) != Error_Success) - { - return Error_Fail; - } - - return Error_Success; + return pGraphicsDevice = pDevice, Error_Success; } /* @@ -65,19 +25,7 @@ */ void RenderContext::Terminate() { - TerminateVertexTypes(); - - if(pDevice) - { - pDevice->Release(); - pDevice = 0; - } - - if(pDirect3D) - { - pDirect3D->Release(); - pDirect3D = 0; - } + pGraphicsDevice = NULL; } /* @@ -85,18 +33,23 @@ */ ErrorCode RenderContext::CreateTextureFromFile(const char* pName, IDirect3DTexture9** pTexture) { - const uint32 nSizeX = D3DX_DEFAULT_NONPOW2; - const uint32 nSizeY = D3DX_DEFAULT_NONPOW2; - const uint32 nFilter = D3DX_DEFAULT; - const uint32 nFilterMip = D3DX_DEFAULT; + ErrorCode eCode = Error_Fail; - HRESULT hResult = D3DXCreateTextureFromFileExA(pDevice, pName, nSizeX, nSizeY, 0, 0, D3DFMT_FROM_FILE, D3DPOOL_MANAGED, nFilter, nFilterMip, 0, NULL, NULL, pTexture); - if(FAILED(hResult)) + if(pGraphicsDevice) { - return Error_Fail; + const uint32 nSizeX = D3DX_DEFAULT_NONPOW2; + const uint32 nSizeY = D3DX_DEFAULT_NONPOW2; + const uint32 nFilter = D3DX_DEFAULT; + const uint32 nFilterMip = D3DX_DEFAULT; + + HRESULT hResult = D3DXCreateTextureFromFileExA(*pGraphicsDevice, pName, nSizeX, nSizeY, 0, 0, D3DFMT_FROM_FILE, D3DPOOL_MANAGED, nFilter, nFilterMip, 0, NULL, NULL, pTexture); + if(SUCCEEDED(hResult)) + { + eCode = Error_Success; + } } - return Error_Success; + return eCode; } /* @@ -106,7 +59,7 @@ { ID3DXBuffer* pBuffer = NULL; - HRESULT hResult = D3DXCreateEffectFromFileA(pDevice, pName, NULL, NULL, 0, NULL, pEffect, &pBuffer); + HRESULT hResult = D3DXCreateEffectFromFileA(*pGraphicsDevice, pName, NULL, NULL, 0, NULL, pEffect, &pBuffer); if(FAILED(hResult)) { if(pBuffer) @@ -125,7 +78,7 @@ */ ErrorCode RenderContext::CreateVertexBuffer(uint32 nSize, uint32 nUsage, uint32 nPool, IDirect3DVertexBuffer9** pBuffer) { - HRESULT hResult = pDevice->CreateVertexBuffer(nSize, nUsage, 0, (D3DPOOL)nPool, pBuffer, NULL); + HRESULT hResult = ((IDirect3DDevice9*)*pGraphicsDevice)->CreateVertexBuffer(nSize, nUsage, 0, (D3DPOOL)nPool, pBuffer, NULL); if(FAILED(hResult)) { return Error_Fail; @@ -139,7 +92,7 @@ */ ErrorCode RenderContext::CreateFontFromName(const char* pName, uint32 nSize, uint32 nWeight, ID3DXFont** pFont) { - HRESULT hResult = D3DXCreateFontA(pDevice, nSize, 0, nWeight, 1, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, pName, pFont); + HRESULT hResult = D3DXCreateFontA(*pGraphicsDevice, nSize, 0, nWeight, 1, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, pName, pFont); if(FAILED(hResult)) { return Error_Fail; @@ -153,8 +106,7 @@ */ void RenderContext::Begin(uint32 nColor) { - pDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER | D3DCLEAR_STENCIL, nColor, 1.0f, 0); - pDevice->BeginScene(); + pGraphicsDevice->Begin(nColor); } /* @@ -162,8 +114,7 @@ */ void RenderContext::End() { - pDevice->EndScene(); - pDevice->Present(NULL, NULL, NULL, NULL); + pGraphicsDevice->End(); } /* @@ -172,7 +123,7 @@ void RenderContext::SetupCamera3D(ID3DXEffect* pEffect, const D3DXVECTOR3& kLocation, const D3DXVECTOR3& kTarget, float fViewAngle) { D3DVIEWPORT9 kViewport; - if(SUCCEEDED(pDevice->GetViewport(&kViewport))) + if(SUCCEEDED(pGraphicsDevice->GetViewport(&kViewport))) { D3DXHANDLE kHandleProj = pEffect->GetParameterByName(NULL, "kProjection"); D3DXHANDLE kHandleView = pEffect->GetParameterByName(NULL, "kView"); @@ -198,7 +149,7 @@ void RenderContext::SetupCamera2D(ID3DXEffect* pEffect) { D3DVIEWPORT9 kViewport; - if(SUCCEEDED(pDevice->GetViewport(&kViewport))) + if(SUCCEEDED(pGraphicsDevice->GetViewport(&kViewport))) { D3DXHANDLE kHandle = pEffect->GetParameterByName(NULL, "kProjection"); if(kHandle) @@ -219,9 +170,7 @@ */ void RenderContext::DrawTriangles(IDirect3DVertexDeclaration9* pDeclaration, IDirect3DVertexBuffer9* pBuffer, uint32 nSize, uint32 nCount) { - pDevice->SetVertexDeclaration(pDeclaration); - pDevice->SetStreamSource(0, pBuffer, 0, nSize); - pDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, nCount); + pGraphicsDevice->DrawTriangles(pDeclaration, pBuffer, nSize, nCount); } /* @@ -229,7 +178,7 @@ */ ErrorCode RenderContext::GetViewport(D3DVIEWPORT9* pViewport) { - return SUCCEEDED(pDevice->GetViewport(pViewport)) ? Error_Success : Error_Fail; + return pGraphicsDevice->GetViewport(pViewport); } /* diff -r 31373c5bd1b9 -r 968341ab1fb2 LightClone/Source/RenderContext.h --- a/LightClone/Source/RenderContext.h Fri Sep 09 13:21:22 2011 -0700 +++ b/LightClone/Source/RenderContext.h Fri Sep 09 16:18:41 2011 -0700 @@ -6,8 +6,7 @@ #define __RENDERCONTEXT_H__ #include "Core.h" -#include -#include +#include "GraphicsDevice.h" /* * RenderContext @@ -15,19 +14,19 @@ class RenderContext { /* - * pDirect3D + * pGraphicsDevice */ - IDirect3D9* pDirect3D; + GraphicsDevice* pGraphicsDevice; /* - * pDevice + * kProjectionStack */ - IDirect3DDevice9* pDevice; + //MatrixStack kProjectionStack; /* - * kParameters + * kWorldStack */ - D3DPRESENT_PARAMETERS kParameters; + //MatrixStack kWorldStack; /* * kProjection @@ -49,7 +48,7 @@ /* * Initialize */ - ErrorCode Initialize(HWND kWindow, uint32 nWidth, uint32 nHeight); + ErrorCode Initialize(GraphicsDevice* pDevice); /* * Terminate diff -r 31373c5bd1b9 -r 968341ab1fb2 LightClone/Source/ResourceManager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LightClone/Source/ResourceManager.cpp Fri Sep 09 16:18:41 2011 -0700 @@ -0,0 +1,112 @@ +/* + * ResourceManager + */ + +#include "ResourceManager.h" + +/* + * ResourceManager + */ +ResourceManager::ResourceManager() +{ +} + +/* + * Initialize + */ +ErrorCode ResourceManager::Initialize(GraphicsDevice* pDevice) +{ + return pGraphicsDevice = pDevice, Error_Success; +} + +/* + * Terminate + */ +void ResourceManager::Terminate() +{ + pGraphicsDevice = NULL; +} + +/* + * CreateTextureFromFile + */ +ErrorCode ResourceManager::CreateTextureFromFile(const char* pName, IDirect3DTexture9** pTexture) +{ + ErrorCode eCode = Error_Fail; + + if(pGraphicsDevice) + { + const uint32 nSizeX = D3DX_DEFAULT_NONPOW2; + const uint32 nSizeY = D3DX_DEFAULT_NONPOW2; + const uint32 nFilter = D3DX_DEFAULT; + const uint32 nFilterMip = D3DX_DEFAULT; + + HRESULT hResult = D3DXCreateTextureFromFileExA(*pGraphicsDevice, pName, nSizeX, nSizeY, 0, 0, D3DFMT_FROM_FILE, D3DPOOL_MANAGED, nFilter, nFilterMip, 0, NULL, NULL, pTexture); + if(SUCCEEDED(hResult)) + { + eCode = Error_Success; + } + } + + return eCode; +} + +/* + * CreateEffectFromFile + */ +ErrorCode ResourceManager::CreateEffectFromFile(const char* pName, ID3DXEffect** pEffect) +{ + ErrorCode eCode = Error_Fail; + + if(pGraphicsDevice) + { + ID3DXBuffer* pBuffer = NULL; + + HRESULT hResult = D3DXCreateEffectFromFileA(*pGraphicsDevice, pName, NULL, NULL, 0, NULL, pEffect, &pBuffer); + if(SUCCEEDED(hResult)) + { + eCode = Error_Success; + } + } + + return eCode; +} + +/* + * CreateVertexBuffer + */ +ErrorCode ResourceManager::CreateVertexBuffer(uint32 nSize, uint32 nUsage, uint32 nPool, IDirect3DVertexBuffer9** pBuffer) +{ + ErrorCode eCode = Error_Fail; + + if(pGraphicsDevice) + { + //HRESULT hResult = ((IDirect3DDevice9*)*pGraphicsDevice)->CreateVertexBuffer(nSize, nUsage, 0, (D3DPOOL)nPool, pBuffer, NULL); + HRESULT hResult = static_cast(*pGraphicsDevice)->CreateVertexBuffer(nSize, nUsage, 0, (D3DPOOL)nPool, pBuffer, NULL); + if(SUCCEEDED(hResult)) + { + eCode = Error_Success; + } + } + + return eCode; +} + +/* + * CreateFontFromName + */ +ErrorCode ResourceManager::CreateFontFromName(const char* pName, uint32 nSize, uint32 nWeight, ID3DXFont** pFont) +{ + ErrorCode eCode = Error_Fail; + + if(pGraphicsDevice) + { + HRESULT hResult = D3DXCreateFontA(*pGraphicsDevice, nSize, 0, nWeight, 1, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, pName, pFont); + if(SUCCEEDED(hResult)) + { + eCode = Error_Success; + } + } + + return eCode; +} diff -r 31373c5bd1b9 -r 968341ab1fb2 LightClone/Source/ResourceManager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LightClone/Source/ResourceManager.h Fri Sep 09 16:18:41 2011 -0700 @@ -0,0 +1,59 @@ +/* + * ResourceManager + */ + +#ifndef __RESOURCEMANAGER_H__ +#define __RESOURCEMANAGER_H__ + +#include "Core.h" +#include "GraphicsDevice.h" + +/* + * ResourceManager + */ +class ResourceManager +{ + /* + * pGraphicsDevice + */ + GraphicsDevice* pGraphicsDevice; + +public: + + /* + * ResourceManager + */ + ResourceManager(); + + /* + * Initialize + */ + ErrorCode Initialize(GraphicsDevice* pDevice); + + /* + * Terminate + */ + void Terminate(); + + /* + * CreateTextureFromFile + */ + ErrorCode CreateTextureFromFile(const char* pName, IDirect3DTexture9** pTexture); + + /* + * CreateEffectFromFile + */ + ErrorCode CreateEffectFromFile(const char* pName, ID3DXEffect** pEffect); + + /* + * CreateVertexBuffer + */ + ErrorCode CreateVertexBuffer(uint32 nSize, uint32 nUsage, uint32 nPool, IDirect3DVertexBuffer9** pBuffer); + + /* + * CreateFontFromName + */ + ErrorCode CreateFontFromName(const char* pName, uint32 nSize, uint32 nWeight, ID3DXFont** pFont); +}; + +#endif //__RESOURCEMANAGER_H__ diff -r 31373c5bd1b9 -r 968341ab1fb2 LightClone/Source/View.cpp --- a/LightClone/Source/View.cpp Fri Sep 09 13:21:22 2011 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,497 +0,0 @@ -/* - * View - */ - -#include "View.h" -#include "VertexTypes.h" - -/* - * kClassName - */ -static const TCHAR* kClassName = L"LightCloneClass"; - -/* - * kCaption - */ -static const TCHAR* kCaption = L"LightClone"; - -/* - * pView - */ -View* View::pView = NULL; - -/* - * View - */ -View::View(Model* pInstance) : pModel(pInstance) -{ - pView = this; - - kWindow = NULL; - pBlockEffect = NULL; - pBlockVertexBuffer = NULL; - pBlockTexture = NULL; -} - -/* - * Initialize - */ -ErrorCode View::Initialize() -{ - HINSTANCE hInstance = GetModuleHandle(NULL); - - WNDCLASSEX kClass; - kClass.cbSize = sizeof(WNDCLASSEX); - kClass.cbClsExtra = 0; - kClass.cbWndExtra = 0; - kClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); - kClass.hCursor = LoadCursor(NULL, IDC_ARROW); - kClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); - kClass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); - kClass.hInstance = hInstance; - kClass.lpfnWndProc = &MessageRouter; - kClass.lpszClassName = kClassName; - kClass.lpszMenuName = NULL; - kClass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; - - ATOM kAtom = RegisterClassEx(&kClass); - if(kAtom == 0) - { - return Error_Fail; - } - - const uint32 nStyleEx = WS_EX_OVERLAPPEDWINDOW; - const uint32 nStyle = WS_OVERLAPPEDWINDOW; - - RECT kDesktopRectangle; - GetClientRect(GetDesktopWindow(), &kDesktopRectangle); - - RECT kRectangle; - kRectangle.left = 0; - kRectangle.top = 0; - kRectangle.right = ScreenSizeX; - kRectangle.bottom = ScreenSizeY; - - AdjustWindowRectEx(&kRectangle, nStyle, FALSE, nStyleEx); - - uint32 nW = kRectangle.right - kRectangle.left; - uint32 nH = kRectangle.bottom - kRectangle.top; - uint32 nX = ((kDesktopRectangle.right - kDesktopRectangle.left) - nW) / 2; - uint32 nY = ((kDesktopRectangle.bottom - kDesktopRectangle.top) - nH) / 2; - - kWindow = CreateWindowEx(nStyleEx, kClassName, kCaption, nStyle, nX, nY, nW, nH, NULL, NULL, hInstance, NULL); - if(!kWindow) - { - return Error_Fail; - } - - UpdateWindow(kWindow); - ShowWindow(kWindow, SW_SHOW); - - ErrorCode eCode = kContext.Initialize(kWindow, ScreenSizeX, ScreenSizeY); - if(eCode != Error_Success) - { - Terminate(); - return Error_Fail; - } - - eCode = kContext.CreateEffectFromFile("Data\\Shaders\\Environment.fx", &pBlockEffect); - if(eCode != Error_Success) - { - Terminate(); - return Error_Fail; - } - - eCode = kContext.CreateTextureFromFile("Data\\Textures\\Block02.tga", &pBlockTexture); - if(eCode != Error_Success) - { - Terminate(); - return Error_Fail; - } - - eCode = kContext.CreateVertexBuffer(VerticesPerBlock * sizeof(Vertex::Block), D3DUSAGE_WRITEONLY, D3DPOOL_MANAGED, &pBlockVertexBuffer); - if(eCode != Error_Success) - { - Terminate(); - return Error_Fail; - } - - eCode = SetupVertexBuffer(); - if(eCode != Error_Success) - { - Terminate(); - return Error_Fail; - } - - return kInterface.Initialize(kContext); -} - -/* - * Terminate - */ -void View::Terminate() -{ - kInterface.Terminate(); - - if(pBlockTexture) - { - pBlockTexture->Release(); - pBlockTexture = NULL; - } - - if(pBlockVertexBuffer) - { - pBlockVertexBuffer->Release(); - pBlockVertexBuffer = NULL; - } - - if(pBlockEffect) - { - pBlockEffect->Release(); - pBlockEffect = 0; - } - - kContext.Terminate(); -} - -/* - * Render - */ -void View::Render() -{ - const uint32 nColor = D3DCOLOR_XRGB(32, 32, 32); - - kContext.Begin(nColor); - - if(pModel) - { - if(pModel->nGameState >= GameState_Active) - { - Render3D(); - Render2D(); - } - } - - kContext.End(); -} - -/* - * GetWindow - */ -HWND View::GetWindow() const -{ - return kWindow; -} - -/* - * UpdateCameraYaw - */ -void View::UpdateCameraYaw(float fDelta) -{ - kCameraController.Yaw(fDelta); -} - -/* - * UpdateCameraPitch - */ -void View::UpdateCameraPitch(float fDelta) -{ - kCameraController.Pitch(fDelta); -} - -/* - * UpdateCameraDistance - */ -void View::UpdateCameraDistance(float fDelta) -{ - kCameraController.Move(fDelta); -} - -/* - * SetupVertexBuffer - */ -ErrorCode View::SetupVertexBuffer() -{ - Vertex::Block* pVertices = NULL; - - HRESULT hResult = pBlockVertexBuffer->Lock(0, 0, (void**)&pVertices, D3DLOCK_DISCARD); - if(FAILED(hResult)) - { - return Error_Fail; - } - - const float fU1 = 0.66f; - const float fV1 = 0.66f; - - // front - pVertices[0] = Vertex::Block(-0.5f, 0.0f, -0.5f, 0.0f, 0.0f, -1.0f, 0.00f, 1.00f); - pVertices[1] = Vertex::Block(-0.5f, 1.0f, -0.5f, 0.0f, 0.0f, -1.0f, 0.00f, 0.66f); - pVertices[2] = Vertex::Block(+0.5f, 1.0f, -0.5f, 0.0f, 0.0f, -1.0f, 1.00f, 0.66f); - pVertices[3] = Vertex::Block(-0.5f, 0.0f, -0.5f, 0.0f, 0.0f, -1.0f, 0.00f, 1.00f); - pVertices[4] = Vertex::Block(+0.5f, 1.0f, -0.5f, 0.0f, 0.0f, -1.0f, 1.00f, 0.66f); - pVertices[5] = Vertex::Block(+0.5f, 0.0f, -0.5f, 0.0f, 0.0f, -1.0f, 1.00f, 1.00f); - // back - pVertices[6] = Vertex::Block(+0.5f, 0.0f, +0.5f, 0.0f, 0.0f, +1.0f, 0.00f, 1.00f); - pVertices[7] = Vertex::Block(+0.5f, 1.0f, +0.5f, 0.0f, 0.0f, +1.0f, 0.00f, 0.66f); - pVertices[8] = Vertex::Block(-0.5f, 1.0f, +0.5f, 0.0f, 0.0f, +1.0f, 1.00f, 0.66f); - pVertices[9] = Vertex::Block(+0.5f, 0.0f, +0.5f, 0.0f, 0.0f, +1.0f, 0.00f, 1.00f); - pVertices[10] = Vertex::Block(-0.5f, 1.0f, +0.5f, 0.0f, 0.0f, +1.0f, 1.00f, 0.66f); - pVertices[11] = Vertex::Block(-0.5f, 0.0f, +0.5f, 0.0f, 0.0f, +1.0f, 1.00f, 1.00f); - // left - pVertices[12] = Vertex::Block(-0.5f, 0.0f, +0.5f, -1.0f, 0.0f, 0.0f, 0.00f, 1.00f); - pVertices[13] = Vertex::Block(-0.5f, 1.0f, +0.5f, -1.0f, 0.0f, 0.0f, 0.00f, 0.66f); - pVertices[14] = Vertex::Block(-0.5f, 1.0f, -0.5f, -1.0f, 0.0f, 0.0f, 1.00f, 0.66f); - pVertices[15] = Vertex::Block(-0.5f, 0.0f, +0.5f, -1.0f, 0.0f, 0.0f, 0.00f, 1.00f); - pVertices[16] = Vertex::Block(-0.5f, 1.0f, -0.5f, -1.0f, 0.0f, 0.0f, 1.00f, 0.66f); - pVertices[17] = Vertex::Block(-0.5f, 0.0f, -0.5f, -1.0f, 0.0f, 0.0f, 1.00f, 1.00f); - // right - pVertices[18] = Vertex::Block(+0.5f, 0.0f, -0.5f, +1.0f, 0.0f, 0.0f, 0.00f, 1.00f); - pVertices[19] = Vertex::Block(+0.5f, 1.0f, -0.5f, +1.0f, 0.0f, 0.0f, 0.00f, 0.66f); - pVertices[20] = Vertex::Block(+0.5f, 1.0f, +0.5f, +1.0f, 0.0f, 0.0f, 1.00f, 0.66f); - pVertices[21] = Vertex::Block(+0.5f, 0.0f, -0.5f, +1.0f, 0.0f, 0.0f, 0.00f, 1.00f); - pVertices[22] = Vertex::Block(+0.5f, 1.0f, +0.5f, +1.0f, 0.0f, 0.0f, 1.00f, 0.66f); - pVertices[23] = Vertex::Block(+0.5f, 0.0f, +0.5f, +1.0f, 0.0f, 0.0f, 1.00f, 1.00f); - // top - pVertices[24] = Vertex::Block(-0.5f, 1.0f, -0.5f, 0.0f, +1.0f, 0.0f, 0.00f, 0.66f); - pVertices[25] = Vertex::Block(-0.5f, 1.0f, +0.5f, 0.0f, +1.0f, 0.0f, 0.00f, 0.00f); - pVertices[26] = Vertex::Block(+0.5f, 1.0f, +0.5f, 0.0f, +1.0f, 0.0f, 1.00f, 0.00f); - pVertices[27] = Vertex::Block(-0.5f, 1.0f, -0.5f, 0.0f, +1.0f, 0.0f, 0.00f, 0.66f); - pVertices[28] = Vertex::Block(+0.5f, 1.0f, +0.5f, 0.0f, +1.0f, 0.0f, 1.00f, 0.00f); - pVertices[29] = Vertex::Block(+0.5f, 1.0f, -0.5f, 0.0f, +1.0f, 0.0f, 1.00f, 0.66f); - // bottom - pVertices[30] = Vertex::Block(-0.5f, 0.0f, +0.5f, 0.0f, -1.0f, 0.0f, 0.00f, 0.66f); - pVertices[31] = Vertex::Block(-0.5f, 0.0f, -0.5f, 0.0f, -1.0f, 0.0f, 0.00f, 0.00f); - pVertices[32] = Vertex::Block(+0.5f, 0.0f, -0.5f, 0.0f, -1.0f, 0.0f, 1.00f, 0.00f); - pVertices[33] = Vertex::Block(-0.5f, 0.0f, +0.5f, 0.0f, -1.0f, 0.0f, 0.00f, 0.66f); - pVertices[34] = Vertex::Block(+0.5f, 0.0f, -0.5f, 0.0f, -1.0f, 0.0f, 1.00f, 0.00f); - pVertices[35] = Vertex::Block(+0.5f, 0.0f, +0.5f, 0.0f, -1.0f, 0.0f, 1.00f, 0.66f); - - pBlockVertexBuffer->Unlock(); - - return Error_Success; -} - -/* - * Render3D - */ -void View::Render3D() -{ - Environment* pEnvironment = pModel->GetEnvironment(); - if(pEnvironment) - { - Bot* pBot = pModel->GetBot(); - if(pBot) - { - const D3DXVECTOR3& kScale = pEnvironment->GetScale(); - const uint32 nSizeX = pEnvironment->GetWidth(); - const uint32 nSizeY = pEnvironment->GetHeight(); - - //const D3DXVECTOR3 kTarget(0.5f * (nSizeX - 1) * kScale.x, 0.0f, 0.5f * (nSizeY - 1) * kScale.z); - const D3DXVECTOR3 kTarget(0.0f, 0.0f, 0.0f); - - kContext.SetupCamera3D(pBlockEffect, kCameraController.GetLocation(kTarget), kTarget); - - RenderEnvironment(pEnvironment); - RenderBot(pEnvironment, pBot); - } - } -} - -/* - * Render2D - */ -void View::Render2D() -{ - kInterface.Render(kContext, pModel); -} - -/* - * RenderEnvironment - */ -void View::RenderEnvironment(Environment* pEnvironment) -{ - const D3DXVECTOR3& kScale = pEnvironment->GetScale(); - - uint32 nPasses = 0; - - pBlockEffect->SetTechnique(pBlockEffect->GetTechnique(0)); - pBlockEffect->Begin(&nPasses, 0); - pBlockEffect->BeginPass(0); - - D3DXMATRIX kScaleMatrix; - D3DXMatrixScaling(&kScaleMatrix, kScale.x, kScale.y, kScale.z); - - const uint32 nSizeX = pEnvironment->GetWidth(); - const uint32 nSizeY = pEnvironment->GetHeight(); - - const D3DXMATRIX& kProjection = kContext.GetProjection(); - const D3DXMATRIX& kView = kContext.GetView(); - - D3DVIEWPORT9 kViewport; - kContext.GetViewport(&kViewport); - - D3DXVECTOR3 kCenterWorld(0.0f, 0.0f, 0.0f); - const float fMagicOffset = 400.0f; - //const D3DXVECTOR3& kCenterWorld = ComputeOrigin(0.5f * (ScreenSizeX - (304.0f + fMagicOffset)), 0.5f * ScreenSizeY, kViewport, kProjection, kView); - - const float fOffsetX = -0.5f * (nSizeX * kScale.x); - const float fOffsetZ = -0.5f * (nSizeY * kScale.z); - - for(uint32 nZ = 0; nZ < nSizeY; ++nZ) - { - for(uint32 nX = 0; nX < nSizeX; ++nX) - { - uint32 nType = pEnvironment->GetType(nX, nZ); - uint32 nHeight = pEnvironment->GetAltitude(nX, nZ); - uint32 nState = pEnvironment->GetState(nX, nZ); - uint32 nColor = D3DCOLOR_XRGB(0x80, 0x80, 0x80); - - if(nType == 1) - { - nColor = nState ? D3DCOLOR_XRGB(0, 0, 255) : D3DCOLOR_XRGB(255, 0, 0); - } - - for(uint32 i = 0; i < pEnvironment->GetAltitude(nX, nZ); ++i) - { - D3DXMATRIX kTranslateMatrix; - D3DXMatrixTranslation(&kTranslateMatrix, fOffsetX + (kCenterWorld.x + nX) * kScale.x, i * kScale.y, fOffsetZ + (kCenterWorld.z + nZ) * kScale.z); - - D3DXMATRIX kWorldMatrix; - D3DXMatrixMultiply(&kWorldMatrix, &kScaleMatrix, &kTranslateMatrix); - - const float fAlpha = ((nColor >> 24) & 0xFF) / 255.0f; - const float fRed = ((nColor >> 16) & 0xFF) / 255.0f; - const float fGreen = ((nColor >> 8 ) & 0xFF) / 255.0f; - const float fBlue = ((nColor >> 0 ) & 0xFF) / 255.0f; - - const D3DXVECTOR4 kColorVector(fRed, fGreen, fBlue, fAlpha); - - pBlockEffect->SetMatrix(pBlockEffect->GetParameterByName(NULL, "kWorld"), &kWorldMatrix); - pBlockEffect->SetVector(pBlockEffect->GetParameterByName(NULL, "kColor"), &kColorVector); - pBlockEffect->SetTexture(pBlockEffect->GetParameterByName(NULL, "kTexture"), pBlockTexture); - pBlockEffect->CommitChanges(); - - kContext.DrawTriangles(Vertex::Block::Declaration, pBlockVertexBuffer, sizeof(Vertex::Block), FacesPerCube * TrianglesPerFace); - } - } - } - - pBlockEffect->EndPass(); - pBlockEffect->End(); - - if(false) // wireframe - { - pBlockEffect->SetTechnique(pBlockEffect->GetTechniqueByName("Wire")); - pBlockEffect->Begin(&nPasses, 0); - pBlockEffect->BeginPass(0); - - for(uint32 nZ = 0; nZ < nSizeY; ++nZ) - { - for(uint32 nX = 0; nX < nSizeX; ++nX) - { - for(uint32 i = 0; i < pEnvironment->GetAltitude(nX, nZ); ++i) - { - D3DXMATRIX kTranslateMatrix; - D3DXMatrixTranslation(&kTranslateMatrix, nX * kScale.x, i * kScale.y, nZ * kScale.z); - - D3DXMATRIX kWorldMatrix; - D3DXMatrixMultiply(&kWorldMatrix, &kScaleMatrix, &kTranslateMatrix); - - const D3DXVECTOR4 kColorVector(0.0f, 0.0f, 0.0f, 1.0f); - - pBlockEffect->SetMatrix(pBlockEffect->GetParameterByName(NULL, "kWorld"), &kWorldMatrix); - pBlockEffect->SetVector(pBlockEffect->GetParameterByName(NULL, "kColor"), &kColorVector); - pBlockEffect->SetTexture(pBlockEffect->GetParameterByName(NULL, "kTexture"), pBlockTexture); - pBlockEffect->CommitChanges(); - - kContext.DrawTriangles(Vertex::Block::Declaration, pBlockVertexBuffer, sizeof(Vertex::Block), FacesPerCube * TrianglesPerFace); - } - } - } - - pBlockEffect->EndPass(); - pBlockEffect->End(); - } -} - -/* - * RenderBot - */ -void View::RenderBot(Environment* pEnvironment, Bot* pBot) -{ - const D3DXVECTOR3& kPosition = pBot->GetWorldPosition(); - const D3DXVECTOR3& kOrientation = pBot->GetWorldOrientation(); - - const float fOffsetX = -0.5f * (pEnvironment->GetWidth() * pEnvironment->GetScale().x); - const float fOffsetZ = -0.5f * (pEnvironment->GetHeight() * pEnvironment->GetScale().z); - - uint32 nPasses = 0; - - pBlockEffect->SetTechnique(pBlockEffect->GetTechnique(0)); - pBlockEffect->Begin(&nPasses, 0); - pBlockEffect->BeginPass(0); - - D3DXMATRIX kScale; - D3DXMatrixScaling(&kScale, pBot->kSize.x, pBot->kSize.y, pBot->kSize.z); - - D3DXMATRIX kTranslate; - D3DXMatrixTranslation(&kTranslate, fOffsetX + kPosition.x, kPosition.y, fOffsetZ + kPosition.z); - - D3DXMATRIX kRotate; - D3DXMatrixRotationY(&kRotate, kOrientation.y); - - D3DXMATRIX kTempMatrix; - D3DXMATRIX kWorldMatrix; - D3DXMatrixMultiply(&kWorldMatrix, D3DXMatrixMultiply(&kTempMatrix, &kScale, &kRotate), &kTranslate); - - const float fAlpha = ((pBot->nColor >> 24) & 0xFF) / 255.0f; - const float fRed = ((pBot->nColor >> 16) & 0xFF) / 255.0f; - const float fGreen = ((pBot->nColor >> 8 ) & 0xFF) / 255.0f; - const float fBlue = ((pBot->nColor >> 0 ) & 0xFF) / 255.0f; - - const D3DXVECTOR4 kColorVector(fRed, fGreen, fBlue, fAlpha); - - pBlockEffect->SetMatrix(pBlockEffect->GetParameterByName(NULL, "kWorld"), &kWorldMatrix); - pBlockEffect->SetVector(pBlockEffect->GetParameterByName(NULL, "kColor"), &kColorVector); - pBlockEffect->SetTexture(pBlockEffect->GetParameterByName(NULL, "kTexture"), NULL); - pBlockEffect->CommitChanges(); - - kContext.DrawTriangles(Vertex::Block::Declaration, pBlockVertexBuffer, sizeof(Vertex::Block), FacesPerCube * TrianglesPerFace); - - pBlockEffect->EndPass(); - pBlockEffect->End(); -} - -/* - * OnMessage - */ -LRESULT View::OnMessage(UINT nMessage, WPARAM wParam, LPARAM lParam) -{ - if(nMessage == WM_CLOSE) - { - DestroyWindow(kWindow); - return 0; - } - else - - if(nMessage == WM_DESTROY) - { - PostQuitMessage(0); - return 0; - } - - return DefWindowProc(kWindow, nMessage, wParam, lParam); -} - -/* - * MessageRouter - */ -LRESULT CALLBACK View::MessageRouter(HWND hWnd, UINT nMessage, WPARAM wParam, LPARAM lParam) -{ - if(pView && pView->kWindow) - { - return pView->OnMessage(nMessage, wParam, lParam); - } - - return DefWindowProc(hWnd, nMessage, wParam, lParam); -} diff -r 31373c5bd1b9 -r 968341ab1fb2 LightClone/Source/View.h --- a/LightClone/Source/View.h Fri Sep 09 13:21:22 2011 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,199 +0,0 @@ -/* - * View - */ - -#ifndef __VIEW_H__ -#define __VIEW_H__ - -#include "Core.h" -#include "Model.h" -#include "RenderContext.h" -#include "CameraController.h" -#include "Interface.h" - -/* - * View - */ -class View -{ - /* - * pView - * Replace this with the Mediator - */ - static View* pView; - - /* - * pModel - * Remove - */ - Model* pModel; - - /* - * kWindow - * Move to Mediator; Anything requiring access to the window will need to - * be owned and initialized by the Mediator. - */ - HWND kWindow; - - /* - * kContext - * Move to Mediator - */ - RenderContext kContext; - - /* - * kCameraController - * Move to World - */ - CameraController kCameraController; - - /* - * pBlockEffect - * Move to World - */ - ID3DXEffect* pBlockEffect; - - /* - * pBlockVertexBuffer - * Move to World - */ - IDirect3DVertexBuffer9* pBlockVertexBuffer; - - /* - * pBlockTexture - * Move to World - */ - IDirect3DTexture9* pBlockTexture; - - /* - * kInterface - * Move to World - */ - Interface kInterface; - -public: - - /* - * View - */ - View(Model* pModel); - - /* - * Initialize - */ - ErrorCode Initialize(); - - /* - * Terminate - */ - void Terminate(); - - /* - * Render - */ - void Render(); - - /* - * GetWindow - */ - HWND GetWindow() const; - - /* - * UpdateCameraYaw - */ - void UpdateCameraYaw(float fDelta); - - /* - * UpdateCameraPitch - */ - void UpdateCameraPitch(float fDelta); - - /* - * UpdateCameraDistance - */ - void UpdateCameraDistance(float fDelta); - -private: - - /* - * SetupVertexBuffer - */ - ErrorCode SetupVertexBuffer(); - - /* - * Render3D - */ - void Render3D(); - - /* - * Render2D - */ - void Render2D(); - - /* - * RenderEnvironment - */ - void RenderEnvironment(Environment* pEnvironment); - - /* - * RenderBot - */ - void RenderBot(Environment* pEnvironment, Bot* pBot); - - /* - * RenderBlock - */ - void RenderBlock(const D3DXMATRIX& kWorldMatrix, D3DCOLOR kColor); - - /* - * RenderBackground - */ - void RenderBackground(); - - /* - * RenderToolbar - */ - void RenderToolbar(); - - /* - * RenderMain - */ - void RenderMain(); - - /* - * RenderFunction(); - */ - void RenderFunction(); - - /* - * RenderControls - */ - void RenderControls(); - - /* - * RenderLevelDialog - */ - void RenderLevelDialog(); - - /* - * RenderGameOverDialog - */ - void RenderGameOverDialog(); - - /* - * RenderCursor - */ - void RenderCursor(); - - /* - * OnMessage - */ - LRESULT OnMessage(UINT nMessage, WPARAM wParam, LPARAM lParam); - - /* - * MessageRouter - */ - static LRESULT CALLBACK MessageRouter(HWND hWnd, UINT nMessage, WPARAM wParam, LPARAM lParam); -}; - -#endif //__VIEW_H__ diff -r 31373c5bd1b9 -r 968341ab1fb2 LightClone/Source/Window.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LightClone/Source/Window.cpp Fri Sep 09 16:18:41 2011 -0700 @@ -0,0 +1,122 @@ +/* + * Window + */ + +#include "Window.h" +#include "VertexTypes.h" + +/* + * kClassName + */ +static const TCHAR* kClassName = L"LightCloneClass"; + +/* + * kCaption + */ +static const TCHAR* kCaption = L"LightClone"; + +/* + * pInstance + */ +Window* Window::pInstance = NULL; + +/* + * Window + */ +Window::Window(WindowCallback* pHandler) : pCallback(pHandler) +{ + pInstance = this; + kWindow = NULL; +} + +/* + * Initialize + */ +ErrorCode Window::Initialize() +{ + HINSTANCE hInstance = GetModuleHandle(NULL); + + WNDCLASSEX kClass; + kClass.cbSize = sizeof(WNDCLASSEX); + kClass.cbClsExtra = 0; + kClass.cbWndExtra = 0; + kClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); + kClass.hCursor = LoadCursor(NULL, IDC_ARROW); + kClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); + kClass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); + kClass.hInstance = hInstance; + kClass.lpfnWndProc = &MessageRouter; + kClass.lpszClassName = kClassName; + kClass.lpszMenuName = NULL; + kClass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; + + ATOM kAtom = RegisterClassEx(&kClass); + if(kAtom) + { + const uint32 nStyleEx = WS_EX_OVERLAPPEDWINDOW; + const uint32 nStyle = WS_OVERLAPPEDWINDOW | WS_VISIBLE; + + RECT kDesktopRectangle; + GetClientRect(GetDesktopWindow(), &kDesktopRectangle); + + RECT kRectangle; + kRectangle.left = 0; + kRectangle.top = 0; + kRectangle.right = ScreenSizeX; + kRectangle.bottom = ScreenSizeY; + + AdjustWindowRectEx(&kRectangle, nStyle, FALSE, nStyleEx); + + uint32 nW = kRectangle.right - kRectangle.left; + uint32 nH = kRectangle.bottom - kRectangle.top; + uint32 nX = ((kDesktopRectangle.right - kDesktopRectangle.left) - nW) / 2; + uint32 nY = ((kDesktopRectangle.bottom - kDesktopRectangle.top) - nH) / 2; + + kWindow = CreateWindowEx(nStyleEx, kClassName, kCaption, nStyle, nX, nY, nW, nH, NULL, NULL, hInstance, NULL); + if(kWindow) + { + UpdateWindow(kWindow); + + return Error_Success; + } + } + + return Error_Fail; +} + +/* + * Terminate + */ +void Window::Terminate() +{ + if(kWindow) + { + DestroyWindow(kWindow); + } +} + +/* + * GetHandle + */ +HWND Window::GetHandle() const +{ + return kWindow; +} + +/* + * MessageRouter + */ +LRESULT CALLBACK Window::MessageRouter(HWND hWnd, UINT nMessage, WPARAM wParam, LPARAM lParam) +{ + //NOTE: This only works for a single, global window instance + + if(pInstance && pInstance->kWindow) + { + if(pInstance->pCallback) + { + return pInstance->pCallback->OnMessage(pInstance, nMessage, wParam, lParam); + } + } + + return DefWindowProc(hWnd, nMessage, wParam, lParam); +} diff -r 31373c5bd1b9 -r 968341ab1fb2 LightClone/Source/Window.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LightClone/Source/Window.h Fri Sep 09 16:18:41 2011 -0700 @@ -0,0 +1,85 @@ +/* + * Window + */ + +#ifndef __WINDOW_H__ +#define __WINDOW_H__ + +#include "Core.h" + +/* + * Window + */ +class Window; + +/* + * WindowCallback + */ +class WindowCallback +{ +public: + + /* + * ~WindowCallback + */ + virtual ~WindowCallback() + { + } + + /* + * OnMessage + */ + virtual int32 OnMessage(Window* pWindow, uint32 nMessage, WPARAM wParam, LPARAM lParam) = 0; +}; + +/* + * Window + */ +class Window +{ + /* + * pInstance + */ + static Window* pInstance; + + /* + * kWindow + */ + HWND kWindow; + + /* + * pCallback + */ + WindowCallback* pCallback; + +public: + + /* + * Window + */ + Window(WindowCallback* pHandler); + + /* + * Initialize + */ + ErrorCode Initialize(); + + /* + * Terminate + */ + void Terminate(); + + /* + * GetHandle + */ + HWND GetHandle() const; + +private: + + /* + * MessageRouter + */ + static LRESULT CALLBACK MessageRouter(HWND hWnd, UINT nMessage, WPARAM wParam, LPARAM lParam); +}; + +#endif //__WINDOW_H__ diff -r 31373c5bd1b9 -r 968341ab1fb2 LightClone/Source/World.cpp --- a/LightClone/Source/World.cpp Fri Sep 09 13:21:22 2011 -0700 +++ b/LightClone/Source/World.cpp Fri Sep 09 16:18:41 2011 -0700 @@ -4,3 +4,67 @@ #include "World.h" +/* + * World + */ +World::World() +{ +} + +/* + * Initialize + */ +ErrorCode World::Initialize() +{ + ErrorCode eCode = Error_Fail; + + /* + eCode = kEnvironment.Initialize(); + if(eCode == Error_Success) + { + eCode = kBot.Initialize(&kEnvironment); + if(eCode == Error_Success) + { + eCode = kProgram.Initialize(); + if(eCode == Error_Success) + { + eCode = kInterface.Initialize(); + } + } + } + */ + + return eCode; +} + +/* + * Terminate + */ +void World::Terminate() +{ + /* + kInterface.Terminate(); + kProgram.Terminate(); + kBot.Terminate(); + kEnvironment.Terminate(); + */ +} + +/* + * Update + */ +void World::Update(float fElapsed) +{ + //kBot.Update(fElapsed); + //kEnvironment.Update(fElapsed); + //kInterface.Update(fElapsed); +} + +/* + * Render + */ +void World::Render() +{ + //Render3D(); + //Render2D(); +} diff -r 31373c5bd1b9 -r 968341ab1fb2 LightClone/Source/World.h --- a/LightClone/Source/World.h Fri Sep 09 13:21:22 2011 -0700 +++ b/LightClone/Source/World.h Fri Sep 09 16:18:41 2011 -0700 @@ -12,6 +12,29 @@ */ class World { + /* + * kEnvironment + * The environment is the grid on which the bot is placed and with which it interacts + */ + //Environment kEnvironment; + + /* + * kBot + * Represents the robot programmed to solve the challenges + */ + //Bot kBot; + + /* + * kProgram + * Stores the current program being edited by the player + */ + + /* + * kInterface + * Manages the tree of UI elements + */ + //Interface kInterface; + public: /*