# HG changeset patch
# User koryspansel
# Date 1315618578 25200
# Node ID e494c4295dba1a618f95d4111193345816d1ea49
# Parent 968341ab1fb25422ad3e3bd7a5eb8ad886c3e047
Conversion to World architecture
diff -r 968341ab1fb2 -r e494c4295dba LightClone/LightClone.vcproj
--- a/LightClone/LightClone.vcproj Fri Sep 09 16:18:41 2011 -0700
+++ b/LightClone/LightClone.vcproj Fri Sep 09 18:36:18 2011 -0700
@@ -185,6 +185,10 @@
>
+
+
@@ -283,6 +287,10 @@
>
+
+
diff -r 968341ab1fb2 -r e494c4295dba LightClone/Source/Bot.cpp
--- a/LightClone/Source/Bot.cpp Fri Sep 09 16:18:41 2011 -0700
+++ b/LightClone/Source/Bot.cpp Fri Sep 09 18:36:18 2011 -0700
@@ -4,8 +4,7 @@
#include "Bot.h"
#include "Clock.h"
-#include
-#include
+#include "VertexTypes.h"
/*
* DirectionAngle
@@ -30,12 +29,62 @@
pEnvironment = 0;
nState = BotState_Idle;
kSize = D3DXVECTOR3(0.55f, 1.00f, 0.55f);
+
+ pEffect = NULL;
+ pVertexBuffer = NULL;
+ pTexture = NULL;
}
/*
* Initialize
*/
-void Bot::Initialize(Environment* pInstance)
+ErrorCode Bot::Initialize(ResourceManager* pResourceManager)
+{
+ ErrorCode eCode = pResourceManager->CreateEffectFromFile("Data\\Shaders\\Environment.fx", &pEffect);
+ if(eCode == Error_Success)
+ {
+ //eCode = pResourceManager->CreateTextureFromFile("Data\\Textures\\Block02.tga", &pTexture);
+ if(eCode == Error_Success)
+ {
+ eCode = pResourceManager->CreateVertexBuffer(VerticesPerBlock * sizeof(Vertex::Block), D3DUSAGE_WRITEONLY, D3DPOOL_MANAGED, &pVertexBuffer);
+ if(eCode == Error_Success)
+ {
+ eCode = SetupVertexBuffer();
+ }
+ }
+ }
+
+ return eCode;
+}
+
+/*
+ * Terminate
+ */
+void Bot::Terminate()
+{
+ if(pVertexBuffer)
+ {
+ pVertexBuffer->Release();
+ pVertexBuffer = NULL;
+ }
+
+ if(pTexture)
+ {
+ pTexture->Release();
+ pTexture = NULL;
+ }
+
+ if(pEffect)
+ {
+ pEffect->Release();
+ pEffect = NULL;
+ }
+}
+
+/*
+ * Setup
+ */
+void Bot::Setup(Environment* pInstance)
{
pEnvironment = pInstance;
nState = BotState_Idle;
@@ -159,44 +208,6 @@
}
/*
- * Compile
- */
-ErrorCode Bot::Compile(Code* pInstance, uint8* pData, uint32 nSize)
-{
- const uint32 nLength = pInstance->GetLength();
-
- for(uint32 i = 0; i < nLength; ++i)
- {
- const uint32 nAction = pInstance->GetSlot(i);
-
- if(Action_Forward <= nAction && nAction <= Action_Light)
- {
- if(nSize < 2)
- return Error_Fail;
-
- *pData++ = Instruction_Action;
- *pData++ = nAction;
-
- nSize -= 2;
- }
- else
-
- if(Action_FunctionA <= nAction && nAction <= Action_FunctionB)
- {
- if(nSize < 2)
- return Error_Fail;
-
- *pData++ = Instruction_Call;
- *pData++ = nAction - Action_FunctionA + 1;
-
- nSize -= 2;
- }
- }
-
- return Error_Success;
-}
-
-/*
* Update
*/
bool Bot::Update(float fElapsed)
@@ -343,3 +354,155 @@
return false;
}
+
+/*
+ * Render
+ */
+void Bot::Render(RenderContext& kContext, Camera& kCamera)
+{
+ const D3DXVECTOR3& kPosition = GetWorldPosition();
+ const D3DXVECTOR3& kOrientation = GetWorldOrientation();
+
+ const float fOffsetX = -0.5f * (pEnvironment->GetWidth() * pEnvironment->GetScale().x);
+ const float fOffsetZ = -0.5f * (pEnvironment->GetHeight() * pEnvironment->GetScale().z);
+
+ uint32 nPasses = 0;
+
+ kContext.Apply(kCamera, pEffect);
+
+ pEffect->SetTechnique(pEffect->GetTechnique(0));
+ pEffect->Begin(&nPasses, 0);
+ pEffect->BeginPass(0);
+
+ D3DXMATRIX kScale;
+ D3DXMatrixScaling(&kScale, kSize.x, kSize.y, 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 = ((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);
+
+ pEffect->SetMatrix(pEffect->GetParameterByName(NULL, "kWorld"), &kWorldMatrix);
+ pEffect->SetVector(pEffect->GetParameterByName(NULL, "kColor"), &kColorVector);
+ pEffect->SetTexture(pEffect->GetParameterByName(NULL, "kTexture"), pTexture);
+ pEffect->CommitChanges();
+
+ kContext.DrawTriangles(Vertex::Block::Declaration, pVertexBuffer, sizeof(Vertex::Block), FacesPerCube * TrianglesPerFace);
+
+ pEffect->EndPass();
+ pEffect->End();
+}
+
+/*
+ * Compile
+ */
+ErrorCode Bot::Compile(Code* pInstance, uint8* pData, uint32 nSize)
+{
+ const uint32 nLength = pInstance->GetLength();
+
+ for(uint32 i = 0; i < nLength; ++i)
+ {
+ const uint32 nAction = pInstance->GetSlot(i);
+
+ if(Action_Forward <= nAction && nAction <= Action_Light)
+ {
+ if(nSize < 2)
+ return Error_Fail;
+
+ *pData++ = Instruction_Action;
+ *pData++ = nAction;
+
+ nSize -= 2;
+ }
+ else
+
+ if(Action_FunctionA <= nAction && nAction <= Action_FunctionB)
+ {
+ if(nSize < 2)
+ return Error_Fail;
+
+ *pData++ = Instruction_Call;
+ *pData++ = nAction - Action_FunctionA + 1;
+
+ nSize -= 2;
+ }
+ }
+
+ return Error_Success;
+}
+
+/*
+ * SetupVertexBuffer
+ */
+ErrorCode Bot::SetupVertexBuffer()
+{
+ Vertex::Block* pVertices = NULL;
+
+ HRESULT hResult = pVertexBuffer->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);
+
+ pVertexBuffer->Unlock();
+
+ return Error_Success;
+}
diff -r 968341ab1fb2 -r e494c4295dba LightClone/Source/Bot.h
--- a/LightClone/Source/Bot.h Fri Sep 09 16:18:41 2011 -0700
+++ b/LightClone/Source/Bot.h Fri Sep 09 18:36:18 2011 -0700
@@ -6,6 +6,8 @@
#define __BOT_H__
#include "Core.h"
+#include "RenderContext.h"
+#include "ResourceManager.h"
#include "VirtualMachine.h"
#include "Environment.h"
#include "Code.h"
@@ -78,6 +80,21 @@
private:
/*
+ * pEffect
+ */
+ ID3DXEffect* pEffect;
+
+ /*
+ * pVertexBuffer
+ */
+ IDirect3DVertexBuffer9* pVertexBuffer;
+
+ /*
+ * pTexture
+ */
+ IDirect3DTexture9* pTexture;
+
+ /*
* pEnvironment
*/
Environment* pEnvironment;
@@ -135,7 +152,17 @@
/*
* Reset
*/
- void Initialize(Environment* pInstance);
+ ErrorCode Initialize(ResourceManager* pResourceManager);
+
+ /*
+ * Terminate
+ */
+ void Terminate();
+
+ /*
+ * Setup
+ */
+ void Setup(Environment* pInstance);
/*
* Reset
@@ -167,12 +194,22 @@
*/
bool Update(float fElapsed);
+ /*
+ * Render
+ */
+ void Render(RenderContext& kContext, Camera& kCamera);
+
private:
/*
* Compile
*/
ErrorCode Compile(Code* pCode, uint8* pData, uint32 nSize);
+
+ /*
+ * SetupVertexBuffer
+ */
+ ErrorCode SetupVertexBuffer();
};
#endif //__BOT_H__
diff -r 968341ab1fb2 -r e494c4295dba LightClone/Source/Camera.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/LightClone/Source/Camera.cpp Fri Sep 09 18:36:18 2011 -0700
@@ -0,0 +1,12 @@
+/*
+ * Camera
+ */
+
+#include "Camera.h"
+
+/*
+ * ~Camera
+ */
+Camera::~Camera()
+{
+}
\ No newline at end of file
diff -r 968341ab1fb2 -r e494c4295dba LightClone/Source/Camera.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/LightClone/Source/Camera.h Fri Sep 09 18:36:18 2011 -0700
@@ -0,0 +1,43 @@
+/*
+ * Camera
+ */
+
+#ifndef __CAMERA_H__
+#define __CAMERA_H__
+
+#include "Core.h"
+
+/*
+ * Camera
+ */
+class Camera
+{
+public:
+
+ /*
+ * ~Camera
+ */
+ virtual ~Camera();
+
+ /*
+ * GetLocation
+ */
+ virtual const D3DXVECTOR3 GetLocation() const = 0;
+
+ /*
+ * GetDirection
+ */
+ virtual const D3DXVECTOR3 GetDirection() const = 0;
+
+ /*
+ * GetRight
+ */
+ virtual const D3DXVECTOR3 GetRight() const = 0;
+
+ /*
+ * GetUp
+ */
+ virtual const D3DXVECTOR3 GetUp() const = 0;
+};
+
+#endif //__CAMERA_H__
diff -r 968341ab1fb2 -r e494c4295dba LightClone/Source/CameraController.cpp
--- a/LightClone/Source/CameraController.cpp Fri Sep 09 16:18:41 2011 -0700
+++ b/LightClone/Source/CameraController.cpp Fri Sep 09 18:36:18 2011 -0700
@@ -48,11 +48,35 @@
/*
* GetLocation
*/
-const D3DXVECTOR3 CameraController::GetLocation(const D3DXVECTOR3& kTarget) const
+const D3DXVECTOR3 CameraController::GetLocation() const
{
const float fOffsetX = fCameraDistance * sinf(0.5f * D3DX_PI - fCameraPitch) * cosf(fCameraYaw);
const float fOffsetY = fCameraDistance * cosf(0.5f * D3DX_PI - fCameraPitch);
const float fOffsetZ = fCameraDistance * sinf(0.5f * D3DX_PI - fCameraPitch) * sinf(fCameraYaw);
- return D3DXVECTOR3(kTarget.x + fOffsetX, kTarget.y + fOffsetY, kTarget.z + fOffsetZ);
+ return D3DXVECTOR3(fOffsetX, fOffsetY, fOffsetZ);
+}
+
+/*
+ * GetDirection
+ */
+const D3DXVECTOR3 CameraController::GetDirection() const
+{
+ return D3DXVECTOR3(0.0f, 0.0f, 1.0f);
}
+
+/*
+ * GetRight
+ */
+const D3DXVECTOR3 CameraController::GetRight() const
+{
+ return D3DXVECTOR3(1.0f, 0.0f, 0.0f);
+}
+
+/*
+ * GetUp
+ */
+const D3DXVECTOR3 CameraController::GetUp() const
+{
+ return D3DXVECTOR3(0.0f, 1.0f, 0.0f);
+}
diff -r 968341ab1fb2 -r e494c4295dba LightClone/Source/CameraController.h
--- a/LightClone/Source/CameraController.h Fri Sep 09 16:18:41 2011 -0700
+++ b/LightClone/Source/CameraController.h Fri Sep 09 18:36:18 2011 -0700
@@ -6,11 +6,12 @@
#define __CAMERACONTROLLER_H__
#include "Core.h"
+#include "Camera.h"
/*
* CameraController
*/
-class CameraController
+class CameraController : public Camera
{
public:
@@ -34,7 +35,6 @@
/*
* CameraController
*/
- //CameraController(float fInitialDistance = 16.0f, float fInitialYaw = D3DX_PI / 6.0f, float fInitialPitch = D3DX_PI / 4.0);
CameraController(float fInitialDistance = 16.0f, float fInitialYaw = 0.306f, float fInitialPitch = 0.875f);
/*
@@ -60,7 +60,22 @@
/*
* GetLocation
*/
- const D3DXVECTOR3 GetLocation(const D3DXVECTOR3& kTarget) const;
+ virtual const D3DXVECTOR3 GetLocation() const;
+
+ /*
+ * GetDirection
+ */
+ virtual const D3DXVECTOR3 GetDirection() const;
+
+ /*
+ * GetRight
+ */
+ virtual const D3DXVECTOR3 GetRight() const;
+
+ /*
+ * GetUp
+ */
+ virtual const D3DXVECTOR3 GetUp() const;
};
#endif //__CAMERACONTROLLER_H__
diff -r 968341ab1fb2 -r e494c4295dba LightClone/Source/Core.h
--- a/LightClone/Source/Core.h Fri Sep 09 16:18:41 2011 -0700
+++ b/LightClone/Source/Core.h Fri Sep 09 18:36:18 2011 -0700
@@ -60,6 +60,29 @@
};
/*
+ * GameState
+ */
+enum
+{
+ GameState_Idle,
+ GameState_LoadMap,
+ GameState_Active,
+ GameState_Complete,
+ GameState_Over,
+ GameState_Confirm,
+ GameState_Exit,
+};
+
+/*
+ * SimulationState
+ */
+enum
+{
+ SimulationState_Idle,
+ SimulationState_Active,
+};
+
+/*
* Action
*/
enum
diff -r 968341ab1fb2 -r e494c4295dba LightClone/Source/Interface.cpp
--- a/LightClone/Source/Interface.cpp Fri Sep 09 16:18:41 2011 -0700
+++ b/LightClone/Source/Interface.cpp Fri Sep 09 18:36:18 2011 -0700
@@ -221,7 +221,7 @@
/*
* Render
*/
-void Interface::Render(RenderContext& kContext)
+void Interface::Render(RenderContext& kContext, Camera& kCamera)
{
/*
if(pModel->nGameState != GameState_Exit)
@@ -663,3 +663,9 @@
}
*/
}
+
+
+/*
+Drag & Drop Handling:
+ 1. Separate into 2 stages: drag detection and drop detection
+*/
\ No newline at end of file
diff -r 968341ab1fb2 -r e494c4295dba LightClone/Source/Interface.h
--- a/LightClone/Source/Interface.h Fri Sep 09 16:18:41 2011 -0700
+++ b/LightClone/Source/Interface.h Fri Sep 09 18:36:18 2011 -0700
@@ -86,7 +86,7 @@
/*
* Render
*/
- void Render(RenderContext& kContext);
+ void Render(RenderContext& kContext, Camera& kCamera);
private:
diff -r 968341ab1fb2 -r e494c4295dba LightClone/Source/Mediator.cpp
--- a/LightClone/Source/Mediator.cpp Fri Sep 09 16:18:41 2011 -0700
+++ b/LightClone/Source/Mediator.cpp Fri Sep 09 18:36:18 2011 -0700
@@ -4,7 +4,6 @@
#include "Mediator.h"
#include "VertexTypes.h"
-//#include
#pragma warning(disable:4355)
@@ -16,65 +15,9 @@
/*
* Mediator
*/
-Mediator::Mediator() : kWindow(this), kToolbar(8), kMain(16), kFunction(8), kControls(4)
+Mediator::Mediator() : kWindow(this)
{
- 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;
+ pGraphicsDevice = NULL;
}
/*
@@ -89,8 +32,7 @@
kClock.Reset();
- while(nGameState != GameState_Exit)
- //while(pWorld->IsActive())
+ while(kWorld.IsActive())
{
ProcessMessages();
@@ -139,59 +81,6 @@
*/
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);
-
- ErrorCode eCode = pView->Initialize();
- if(eCode == Error_Success)
- {
- eCode = pController->Initialize();
- if(eCode == Error_Success)
- {
- nCurrentLevel = 0;
- nGameState = GameState_LoadMap;
- }
- }
- */
-
ErrorCode eCode = kWindow.Initialize();
if(eCode == Error_Success)
{
@@ -223,43 +112,12 @@
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);
+ eCode = kWorld.Initialize(&kResourceManager, &kInputManager);
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;
@@ -270,29 +128,10 @@
*/
void Mediator::Terminate()
{
- kInterface.Terminate();
-
- if(pBlockVertexBuffer)
- {
- pBlockVertexBuffer->Release();
- pBlockVertexBuffer = NULL;
- }
-
- if(pBlockTexture)
- {
- pBlockTexture->Release();
- pBlockTexture = NULL;
- }
-
- if(pBlockEffect)
- {
- pBlockEffect->Release();
- pBlockEffect = 0;
- }
-
- kContext.Terminate();
+ kWorld.Terminate();
kInputManager.Terminate();
kResourceManager.Terminate();
+ kContext.Terminate();
GraphicsDevice::Destroy(pGraphicsDevice);
}
@@ -302,35 +141,7 @@
*/
void Mediator::Update(float 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);
+ kWorld.Update(fElapsed);
}
/*
@@ -338,19 +149,7 @@
*/
void Mediator::Render()
{
- const uint32 nColor = D3DCOLOR_XRGB(32, 32, 32);
-
- kContext.Begin(nColor);
-
- if(nGameState >= GameState_Active)
- {
- Render3D();
- Render2D();
- }
-
- kContext.End();
-
- //kWorld.Render(kRenderContext);
+ kWorld.Render(kContext);
}
/*
@@ -364,8 +163,7 @@
{
if(kMessage.message == WM_QUIT)
{
- nGameState = GameState_Exit;
- //kWorld.Deactivate();
+ kWorld.Deactivate();
break;
}
@@ -373,606 +171,3 @@
DispatchMessage(&kMessage);
}
}
-
-/*
- * 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 968341ab1fb2 -r e494c4295dba LightClone/Source/Mediator.h
--- a/LightClone/Source/Mediator.h Fri Sep 09 16:18:41 2011 -0700
+++ b/LightClone/Source/Mediator.h Fri Sep 09 18:36:18 2011 -0700
@@ -9,10 +9,7 @@
#include "Clock.h"
#include "Window.h"
#include "InputManager.h"
-#include "Loader.h"
-#include "Environment.h"
-#include "Bot.h"
-#include "Code.h"
+#include "World.h"
#include "DragController.h"
#include "ButtonPane.h"
#include "Dialog.h"
@@ -23,41 +20,6 @@
#include "Interface.h"
/*
- * MediatorState
- */
-enum
-{
- MediatorState_Initialize,
- MediatorState_Splash,
- MediatorState_Game,
- MediatorState_Complete,
- MediatorState_Exit,
-};
-
-/*
- * 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 : public WindowCallback
@@ -73,96 +35,6 @@
Clock kClock;
/*
- * kLoader
- */
- Loader kLoader;
-
- /*
- * kEnvironment
- */
- Environment kEnvironment;
-
- /*
- * kBot
- */
- Bot kBot;
-
- /*
- * kFunction
- */
- Code* pFunction;
-
- /*
- * nGameState
- */
- uint32 nGameState;
-
- /*
- * nSimulationState
- */
- uint32 nSimulationState;
-
- /*
- * nCurrentLevel
- */
- uint32 nCurrentLevel;
-
- /*
- * nCurrentFunction
- */
- uint32 nCurrentFunction;
-
- /*
- * 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;
-
- /*
* pGraphicsDevice
*/
GraphicsDevice* pGraphicsDevice;
@@ -178,34 +50,14 @@
RenderContext kContext;
/*
- * kCameraController
- * Move to World
+ * kInputManager
*/
- CameraController kCameraController;
-
- /*
- * pBlockEffect
- * Move to World
- */
- ID3DXEffect* pBlockEffect;
+ InputManager kInputManager;
/*
- * pBlockVertexBuffer
- * Move to World
+ * kWorld
*/
- IDirect3DVertexBuffer9* pBlockVertexBuffer;
-
- /*
- * pBlockTexture
- * Move to World
- */
- IDirect3DTexture9* pBlockTexture;
-
- /*
- * kInterface
- * Move to World
- */
- Interface kInterface;
+ World kWorld;
public:
@@ -250,56 +102,6 @@
* 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 968341ab1fb2 -r e494c4295dba LightClone/Source/RenderContext.cpp
--- a/LightClone/Source/RenderContext.cpp Fri Sep 09 16:18:41 2011 -0700
+++ b/LightClone/Source/RenderContext.cpp Fri Sep 09 18:36:18 2011 -0700
@@ -118,6 +118,14 @@
}
/*
+ * Apply
+ */
+void RenderContext::Apply(Camera& kCamera, ID3DXEffect* pEffect)
+{
+ //TODO:
+}
+
+/*
* SetupCamera3D
*/
void RenderContext::SetupCamera3D(ID3DXEffect* pEffect, const D3DXVECTOR3& kLocation, const D3DXVECTOR3& kTarget, float fViewAngle)
diff -r 968341ab1fb2 -r e494c4295dba LightClone/Source/RenderContext.h
--- a/LightClone/Source/RenderContext.h Fri Sep 09 16:18:41 2011 -0700
+++ b/LightClone/Source/RenderContext.h Fri Sep 09 18:36:18 2011 -0700
@@ -7,6 +7,7 @@
#include "Core.h"
#include "GraphicsDevice.h"
+#include "Camera.h"
/*
* RenderContext
@@ -86,6 +87,11 @@
void End();
/*
+ * Apply
+ */
+ void Apply(Camera& kCamera, ID3DXEffect* pEffect);
+
+ /*
* SetupCamera3D
*/
void SetupCamera3D(ID3DXEffect* pEffect, const D3DXVECTOR3& kLocation, const D3DXVECTOR3& kTarget, float fViewAngle = D3DX_PI / 4.0f);
diff -r 968341ab1fb2 -r e494c4295dba LightClone/Source/World.cpp
--- a/LightClone/Source/World.cpp Fri Sep 09 16:18:41 2011 -0700
+++ b/LightClone/Source/World.cpp Fri Sep 09 18:36:18 2011 -0700
@@ -3,36 +3,109 @@
*/
#include "World.h"
+#include "VertexTypes.h"
/*
* World
*/
-World::World()
+World::World() : kToolbar(8), kMain(16), kFunction(8), kControls(4)
{
+ pBlockEffect = NULL;
+ pBlockVertexBuffer = NULL;
+ pBlockTexture = NULL;
+
+ 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);
}
/*
* Initialize
*/
-ErrorCode World::Initialize()
+ErrorCode World::Initialize(ResourceManager* pResourceManager, InputManager* pInput)
{
ErrorCode eCode = Error_Fail;
- /*
- eCode = kEnvironment.Initialize();
- if(eCode == Error_Success)
+ if(pResourceManager && pInput)
{
- eCode = kBot.Initialize(&kEnvironment);
+ pInputManager = pInput;
+
+ eCode = pResourceManager->CreateEffectFromFile("Data\\Shaders\\Environment.fx", &pBlockEffect);
if(eCode == Error_Success)
{
- eCode = kProgram.Initialize();
+ eCode = pResourceManager->CreateTextureFromFile("Data\\Textures\\Block02.tga", &pBlockTexture);
if(eCode == Error_Success)
{
- eCode = kInterface.Initialize();
+ eCode = pResourceManager->CreateVertexBuffer(VerticesPerBlock * sizeof(Vertex::Block), D3DUSAGE_WRITEONLY, D3DPOOL_MANAGED, &pBlockVertexBuffer);
+ if(eCode == Error_Success)
+ {
+ eCode = SetupVertexBuffer();
+ if(eCode == Error_Success)
+ {
+ eCode = kInterface.Initialize(pResourceManager);
+ if(eCode == Error_Success)
+ {
+ eCode = kBot.Initialize(pResourceManager);
+ if(eCode == Error_Success)
+ {
+ nCurrentLevel = 0;
+ nGameState = GameState_LoadMap;
+ }
+ }
+ }
+ }
}
}
}
- */
return eCode;
}
@@ -42,29 +115,705 @@
*/
void World::Terminate()
{
+ kInterface.Terminate();
+ kBot.Terminate();
+
+ if(pBlockVertexBuffer)
+ {
+ pBlockVertexBuffer->Release();
+ pBlockVertexBuffer = NULL;
+ }
+
+ if(pBlockTexture)
+ {
+ pBlockTexture->Release();
+ pBlockTexture = NULL;
+ }
+
+ if(pBlockEffect)
+ {
+ pBlockEffect->Release();
+ pBlockEffect = 0;
+ }
+
/*
- kInterface.Terminate();
kProgram.Terminate();
- kBot.Terminate();
kEnvironment.Terminate();
*/
}
/*
+ * Activate
+ */
+void World::Activate()
+{
+ nGameState = GameState_LoadMap;
+}
+
+/*
+ * Deactivate
+ */
+void World::Deactivate()
+{
+ nGameState = GameState_Exit;
+}
+
+/*
+ * IsActive
+ */
+bool World::IsActive()
+{
+ return nGameState != GameState_Exit;
+}
+
+/*
+ * Load
+ */
+bool World::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.Setup(&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 World::ResetEnvironment()
+{
+ kEnvironment.Reset();
+}
+
+/*
+ * ResetBot
+ */
+void World::ResetBot()
+{
+ kBot.Reset();
+ kBot.kPosition = kLoader.GetInitialPosition();
+ kBot.kDirection = kLoader.GetInitialDirection();
+}
+
+/*
+ * ResetCode
+ */
+void World::ClearCode()
+{
+ for(uint32 i = 0; i < kLoader.GetFunctionCount(); ++i)
+ {
+ pFunction[i].Clear();
+ }
+}
+
+/*
* Update
*/
void World::Update(float fElapsed)
{
- //kBot.Update(fElapsed);
- //kEnvironment.Update(fElapsed);
- //kInterface.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;
+ }
+ }
+ }
+ }
}
/*
* Render
*/
-void World::Render()
+void World::Render(RenderContext& kContext)
+{
+ const uint32 nColor = D3DCOLOR_XRGB(32, 32, 32);
+
+ kContext.Begin(nColor);
+
+ if(nGameState >= GameState_Active)
+ {
+ Render3D(kContext);
+ Render2D(kContext);
+ }
+
+ kContext.End();
+}
+
+/*
+ * SetupVertexBuffer
+ */
+ErrorCode World::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 World::Render3D(RenderContext& kContext)
+{
+ 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, kTarget + kCameraController.GetLocation(), kTarget);
+
+ RenderEnvironment(kContext, &kEnvironment);
+ RenderBot(kContext, &kEnvironment, &kBot);
+}
+
+/*
+ * Render2D
+ */
+void World::Render2D(RenderContext& kContext)
+{
+ kInterface.Render(kContext, kCameraController);
+}
+
+/*
+ * RenderEnvironment
+ */
+void World::RenderEnvironment(RenderContext& kContext, 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 World::RenderBot(RenderContext& kContext, Environment* pEnvironment, Bot* pBot)
{
- //Render3D();
- //Render2D();
+ //*
+ 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();
+ //*/
+ //kBot.Render(kContext, kCameraController);
}
+
+/*
+ * ProcessInput
+ */
+void World::ProcessInput(float fElapsed)
+{
+ pInputManager->Update(fElapsed);
+
+ #if defined(_DEBUG)
+ if(pInputManager->IsKeyDown(DIK_LEFT))
+ {
+ kCameraController.Yaw(0.01f);
+ }
+ else
+
+ if(pInputManager->IsKeyDown(DIK_RIGHT))
+ {
+ kCameraController.Yaw(-0.01f);
+ }
+
+ if(pInputManager->IsKeyDown(DIK_UP))
+ {
+ kCameraController.Pitch(0.01f);
+ }
+ else
+
+ if(pInputManager->IsKeyDown(DIK_DOWN))
+ {
+ kCameraController.Pitch(-0.01f);
+ }
+
+ if(pInputManager->IsKeyDown(DIK_NEXT))
+ {
+ kCameraController.Move(0.1f);
+ }
+ else
+
+ if(pInputManager->IsKeyDown(DIK_PRIOR))
+ {
+ kCameraController.Move(-0.1f);
+ }
+ #endif
+
+ const float fMouseX = pInputManager->GetMouseX();
+ const float fMouseY = pInputManager->GetMouseY();
+
+ if(nGameState == GameState_Active)
+ {
+ if(pInputManager->IsButtonDown(0) && !pInputManager->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(!pInputManager->IsButtonDown(0) && pInputManager->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(pInputManager->IsButtonDown(0) && !pInputManager->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(pInputManager->IsButtonDown(0) && !pInputManager->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(pInputManager->IsButtonDown(0) && !pInputManager->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 968341ab1fb2 -r e494c4295dba LightClone/Source/World.h
--- a/LightClone/Source/World.h Fri Sep 09 16:18:41 2011 -0700
+++ b/LightClone/Source/World.h Fri Sep 09 18:36:18 2011 -0700
@@ -6,6 +6,18 @@
#define __WORLD_H__
#include "Core.h"
+#include "RenderContext.h"
+#include "Environment.h"
+#include "Bot.h"
+#include "Code.h"
+#include "Loader.h"
+#include "CameraController.h"
+#include "DragController.h"
+#include "ResourceManager.h"
+#include "InputManager.h"
+#include "ButtonPane.h"
+#include "Dialog.h"
+#include "Interface.h"
/*
* World
@@ -13,27 +25,123 @@
class World
{
/*
+ * pInputManager
+ */
+ InputManager* pInputManager;
+
+ /*
+ * kLoader
+ */
+ Loader kLoader;
+
+ /*
* kEnvironment
- * The environment is the grid on which the bot is placed and with which it interacts
*/
- //Environment kEnvironment;
+ Environment kEnvironment;
/*
* kBot
- * Represents the robot programmed to solve the challenges
+ */
+ Bot kBot;
+
+ /*
+ * kFunction
+ */
+ Code* pFunction;
+
+ /*
+ * nGameState
+ */
+ uint32 nGameState;
+
+ /*
+ * nSimulationState
+ */
+ uint32 nSimulationState;
+
+ /*
+ * nCurrentLevel
*/
- //Bot kBot;
+ uint32 nCurrentLevel;
+
+ /*
+ * nCurrentFunction
+ */
+ uint32 nCurrentFunction;
+
+ /*
+ * kCameraController
+ */
+ CameraController kCameraController;
+
+ /*
+ * kDragController
+ */
+ DragController kDragController;
+
+ /*
+ * kToolbar
+ */
+ ButtonPane kToolbar;
/*
- * kProgram
- * Stores the current program being edited by the player
+ * kMain
+ */
+ ButtonPane kMain;
+
+ /*
+ * kFunction
+ */
+ ButtonPane kFunction;
+
+ /*
+ * kControlBounds
+ */
+ ButtonPane kControls;
+
+ /*
+ * kArrowBounds
+ */
+ Rectangle2 kArrowBounds[2];
+
+ /*
+ * kDialog1Bounds
*/
+ Rectangle2 kDialog1Bounds[1];
+
+ /*
+ * kDialog2Bounds
+ */
+ Rectangle2 kDialog2Bounds[2];
+
+ /*
+ * pBlockEffect
+ * Move to World
+ */
+ ID3DXEffect* pBlockEffect;
+
+ /*
+ * pBlockVertexBuffer
+ * Move to World
+ */
+ IDirect3DVertexBuffer9* pBlockVertexBuffer;
+
+ /*
+ * pBlockTexture
+ * Move to World
+ */
+ IDirect3DTexture9* pBlockTexture;
/*
* kInterface
- * Manages the tree of UI elements
+ * Move to World
*/
- //Interface kInterface;
+ Interface kInterface;
+
+ /*
+ * kDialog
+ */
+ Dialog kDialog;
public:
@@ -45,7 +153,7 @@
/*
* Initialize
*/
- ErrorCode Initialize();
+ ErrorCode Initialize(ResourceManager* pResource, InputManager* pInput);
/*
* Terminate
@@ -53,6 +161,41 @@
void Terminate();
/*
+ * Activate
+ */
+ void Activate();
+
+ /*
+ * Deactivate
+ */
+ void Deactivate();
+
+ /*
+ * IsActive
+ */
+ bool IsActive();
+
+ /*
+ * Load
+ */
+ bool Load(const char* pName);
+
+ /*
+ * ResetEnvironment
+ */
+ void ResetEnvironment();
+
+ /*
+ * ResetBot
+ */
+ void ResetBot();
+
+ /*
+ * ResetCode
+ */
+ void ClearCode();
+
+ /*
* Update
*/
void Update(float fElapsed);
@@ -60,7 +203,39 @@
/*
* Render
*/
- void Render();
+ void Render(RenderContext& kContext);
+
+private:
+
+ /*
+ * SetupVertexBuffer
+ */
+ ErrorCode SetupVertexBuffer();
+
+ /*
+ * Render3D
+ */
+ void Render3D(RenderContext& kContext);
+
+ /*
+ * Render2D
+ */
+ void Render2D(RenderContext& kContext);
+
+ /*
+ * RenderEnvironment
+ */
+ void RenderEnvironment(RenderContext& kContext, Environment* pEnvironment);
+
+ /*
+ * RenderBot
+ */
+ void RenderBot(RenderContext& kContext, Environment* pEnvironment, Bot* pBot);
+
+ /*
+ * ProcessInput
+ */
+ void ProcessInput(float fElapsed);
};
#endif //__WORLD_H__
diff -r 968341ab1fb2 -r e494c4295dba LightClone/ToDo.txt
--- a/LightClone/ToDo.txt Fri Sep 09 16:18:41 2011 -0700
+++ b/LightClone/ToDo.txt Fri Sep 09 18:36:18 2011 -0700
@@ -5,9 +5,9 @@
5. Pause menu
6. Robot model & texture
7. Separate button images from dialog box
-8. Finish level completion dialog
-9. Implement game over dialog
-10. Implement confirm exit dialog
-11. Create textures for each button state
-12. Help interface
-13. Add button to clear code panes
\ No newline at end of file
+8. Implement confirm exit dialog
+9. Create textures for each button state
+10. Help interface
+11. Add button to clear code panes
+12. Get interface working again
+13. Finish conversion to world model
\ No newline at end of file