changeset 6:817a7b518fbb

Fix up dialog buttons
author koryspansel <koryspansel@bendbroadband.com>
date Fri, 09 Sep 2011 09:57:27 -0700
parents 88b5c4d51c68
children 31373c5bd1b9
files Assets/Maps/map03.def LightClone/Source/Controller.cpp LightClone/Source/Core.cpp LightClone/Source/Interface.cpp LightClone/Source/Model.cpp LightClone/Source/Model.h LightClone/Source/View.cpp
diffstat 7 files changed, 205 insertions(+), 207 deletions(-) [+]
line wrap: on
line diff
--- a/Assets/Maps/map03.def	Thu Sep 08 11:55:35 2011 -0700
+++ b/Assets/Maps/map03.def	Fri Sep 09 09:57:27 2011 -0700
@@ -21,7 +21,7 @@
 0,1
 0,1
 0,1
-1,2
+0,1
 0,1
 0,1
 
@@ -30,12 +30,12 @@
 0,1
 1,2
 0,1
-1,2
+0,1
 0,1
 
 0,1
 0,1
-0,1
+1,2
 0,1
 1,2
 0,1
@@ -44,7 +44,7 @@
 0,1
 0,1
 0,1
-0,1
+1,2
 0,1
 0,1
 0,1
--- a/LightClone/Source/Controller.cpp	Thu Sep 08 11:55:35 2011 -0700
+++ b/LightClone/Source/Controller.cpp	Fri Sep 09 09:57:27 2011 -0700
@@ -103,13 +103,13 @@
 
 	if(pModel->kInputManager.IsKeyDown(DIK_NEXT))
 	{
-		pView->UpdateCameraDistance(-0.1f);
+		pView->UpdateCameraDistance(0.1f);
 	}
 	else
 
 	if(pModel->kInputManager.IsKeyDown(DIK_PRIOR))
 	{
-		pView->UpdateCameraDistance(0.1f);
+		pView->UpdateCameraDistance(-0.1f);
 	}
 	#endif
 
@@ -238,6 +238,14 @@
 				{
 					if(i == 0)
 					{
+						if(pModel->nSimulationState == SimulationState_Active)
+						{
+							pModel->ResetEnvironment();
+							pModel->ResetBot();
+
+							pModel->nSimulationState = SimulationState_Idle;
+						}
+
 						pModel->nGameState = GameState_LoadMap;
 					}
 				}
@@ -248,6 +256,14 @@
 
 			if(nSelection == DialogButton_A)
 			{
+				if(pModel->nSimulationState == SimulationState_Active)
+				{
+					pModel->ResetEnvironment();
+					pModel->ResetBot();
+
+					pModel->nSimulationState = SimulationState_Idle;
+				}
+
 				pModel->nGameState = GameState_LoadMap;
 			}
 			*/
--- a/LightClone/Source/Core.cpp	Thu Sep 08 11:55:35 2011 -0700
+++ b/LightClone/Source/Core.cpp	Fri Sep 09 09:57:27 2011 -0700
@@ -88,13 +88,42 @@
  */
 void ComputePickRay(float fScreenX, float fScreenY, const D3DVIEWPORT9& kViewport, const D3DXMATRIX& kProjection, const D3DXMATRIX& kView, D3DXVECTOR3* pOrigin, D3DXVECTOR3* pDirection)
 {
-	const float fX = +(2.0f * (fScreenX / kViewport.Width) - 1.0f) / kProjection._11;
-	const float fY = -(2.0f * (fScreenY / kViewport.Height) - 1.0f) / kProjection._22;
-	const float fZ = 1.0f;
+	const float fHalfSizeX	= 0.5f * kViewport.Width;
+	const float fHalfSizeY	= 0.5f * kViewport.Height;
+	const float fAspect		= fHalfSizeX / fHalfSizeY; 
+	const float fViewAngle	= D3DX_PI / 4.0f;
+	const float fNear		= 1.0f;
+	const float fFar		= 1024.0f;
+
+	const float fX = tanf(0.5f * fViewAngle) * (fScreenX / fHalfSizeX - 1.0f) / fAspect;
+	const float fY = tanf(0.5f * fViewAngle) * (1.0f - fScreenY / fHalfSizeY);
+
+	//const float fX = +(2.0f * (fScreenX / kViewport.Width) - 1.0f) / kProjection._11;
+	//const float fY = -(2.0f * (fScreenY / kViewport.Height) - 1.0f) / kProjection._22;
+	//const float fZ = 1.0f;
 
 	D3DXMATRIX kInverseView;
 	D3DXMatrixInverse(&kInverseView, NULL, &kView);
 
+	D3DXVECTOR3 kPointA(fNear * fX, fNear * fY, fNear);
+	D3DXVECTOR3 kPointB(fFar * fX, fFar * fY, fFar);
+
+	D3DXVECTOR3 kWorldA;
+	D3DXVec3TransformCoord(&kWorldA, &kPointA, &kInverseView);
+
+	D3DXVECTOR3 kWorldB;
+	D3DXVec3TransformCoord(&kWorldB, &kPointB, &kInverseView);
+
+	if(pOrigin)
+		*pOrigin = kWorldA;
+
+	if(pDirection)
+	{
+		D3DXVec3Normalize(pDirection, &(kWorldB - kWorldA));
+		//*pDirection = kWorldB - kWorldA;
+	}
+
+	/*
 	if(pOrigin)
 	{
 		pOrigin->x = kInverseView._41;
@@ -108,6 +137,7 @@
 		pDirection->y = fX * kInverseView._12 + fY * kInverseView._22 + fZ * kInverseView._32;
 		pDirection->z = fX * kInverseView._13 + fY * kInverseView._23 + fZ * kInverseView._33;
 	}
+	*/
 }
 
 /*
@@ -125,10 +155,10 @@
 
 	D3DXVECTOR3 kDelta;
 	D3DXVec3Subtract(&kDelta, &kCameraOrigin, &kPlaneOrigin);
-	D3DXVec3Normalize(&kDelta, &kDelta);
 
-	float fD = D3DXVec3Dot(&kPlaneNormal, &kCameraDirection);
-	float fT = fD != 0.0f ? D3DXVec3Dot(&kPlaneNormal, &kDelta) / fD : 0.0f;
+	//float fD = D3DXVec3Dot(&kPlaneNormal, &kCameraDirection);
+	//float fT = fD != 0.0f ? D3DXVec3Dot(&kPlaneNormal, &kDelta) / fD : 0.0f;
+	const float fT = -D3DXVec3Dot(&kPlaneNormal, &kDelta) / D3DXVec3Dot(&kPlaneNormal, &kCameraDirection);
 
 	return kCameraOrigin + fT * kCameraDirection;
 }
\ No newline at end of file
--- a/LightClone/Source/Interface.cpp	Thu Sep 08 11:55:35 2011 -0700
+++ b/LightClone/Source/Interface.cpp	Fri Sep 09 09:57:27 2011 -0700
@@ -223,56 +223,59 @@
  */
 void Interface::Render(RenderContext& kContext, Model* pModel)
 {
-	kContext.SetupCamera2D(pEffect);
-
-	uint32 nPasses = 0;
+	if(pModel->nGameState != GameState_Exit)
+	{
+		kContext.SetupCamera2D(pEffect);
 
-	pEffect->SetTechnique(pEffect->GetTechnique(0));
-	pEffect->Begin(&nPasses, 0);
-	pEffect->BeginPass(0);
+		uint32 nPasses = 0;
+
+		pEffect->SetTechnique(pEffect->GetTechnique(0));
+		pEffect->Begin(&nPasses, 0);
+		pEffect->BeginPass(0);
 
-	RenderBackground(kContext, pModel);
-	RenderToolbar(kContext, pModel);
-	RenderMain(kContext, pModel);
-	RenderFunctions(kContext, pModel);
-	RenderControls(kContext, pModel);
+		RenderBackground(kContext, pModel);
+		RenderToolbar(kContext, pModel);
+		RenderMain(kContext, pModel);
+		RenderFunctions(kContext, pModel);
+		RenderControls(kContext, pModel);
 
-	if(pModel->nGameState == GameState_Active)
-	{
-	}
-	else
+		if(pModel->nGameState == GameState_Active)
+		{
+		}
+		else
 
-	if(pModel->nGameState == GameState_Complete)
-	{
-		char kMessage[256];
-		sprintf_s(kMessage, "Congratulations!\nYou have completed level %d", pModel->nCurrentLevel);
+		if(pModel->nGameState == GameState_Complete)
+		{
+			char kMessage[256];
+			sprintf_s(kMessage, "Congratulations!\nYou have completed level %d", pModel->nCurrentLevel);
 
-		RenderDialog(kContext, pModel, kMessage, "Ok");
-		//RenderLevelDialog(kContext, pModel);
-	}
-	else
+			RenderDialog(kContext, pModel, kMessage, "Ok");
+			//RenderLevelDialog(kContext, pModel);
+		}
+		else
+
+		if(pModel->nGameState == GameState_Over)
+		{
+			const char* pMessage = "Congratulations!\nYou have won the game!";
 
-	if(pModel->nGameState == GameState_Over)
-	{
-		const char* pMessage = "Congratulations!\nYou have won the game!";
+			RenderDialog(kContext, pModel, pMessage, "Ok");
+			//RenderGameOverDialog(kContext, pModel);
+		}
+		else
+
+		if(pModel->nGameState == GameState_Confirm)
+		{
+			const char* pMessage = "Are you sure you want to quit the game?";
 
-		RenderDialog(kContext, pModel, pMessage, "Ok");
-		//RenderGameOverDialog(kContext, pModel);
+			RenderDialog(kContext, pModel, pMessage, "Yes", "No");
+			//RenderConfirmExitDialog(kContext, pModel);
+		}
+
+		RenderCursor(kContext, pModel);
+
+		pEffect->EndPass();
+		pEffect->End();
 	}
-	else
-
-	if(pModel->nGameState == GameState_Confirm)
-	{
-		const char* pMessage = "Are you sure you want to quit the game?";
-
-		RenderDialog(kContext, pModel, pMessage, "Yes", "No");
-		//RenderConfirmExitDialog(kContext, pModel);
-	}
-
-	RenderCursor(kContext, pModel);
-
-	pEffect->EndPass();
-	pEffect->End();
 }
 
 /*
@@ -513,162 +516,79 @@
 }
 
 /*
- * RenderLevelDialog
- */
-void Interface::RenderLevelDialog(RenderContext& kContext, Model* pModel)
-{
-	const D3DXVECTOR4 kColorVector(1.0f, 1.0f, 1.0f, 1.0f);
-
-	D3DSURFACE_DESC kDescriptor;
-	pDialog1Texture->GetLevelDesc(0, &kDescriptor);
-
-	const float fSizeX	= (float)kDescriptor.Width;
-	const float fSizeY	= (float)kDescriptor.Height;
-
-	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->SetVector(pEffect->GetParameterByName(NULL, "kColor"), &kColorVector);
-	pEffect->SetTexture(pEffect->GetParameterByName(NULL, "kTexture"), pDialog1Texture);
-	pEffect->CommitChanges();
-
-	kContext.DrawTriangles(Vertex::Quad::Declaration, pVertexBuffer, sizeof(Vertex::Quad), TrianglesPerFace);
-
-	RECT kRectangle;
-
-	kRectangle.left		= ScreenSizeX / 2;
-	kRectangle.top		= ScreenSizeY / 2 - 24;
-	kRectangle.right	= ScreenSizeX / 2;
-	kRectangle.bottom	= ScreenSizeY / 2 - 24;
-
-	char kMessage[256];
-	sprintf_s(kMessage, "Congratulations!\nYou have completed level %d", pModel->nCurrentLevel);
-
-	pFont->DrawTextA(NULL, kMessage, -1, &kRectangle, DT_CENTER | DT_VCENTER | DT_CALCRECT, D3DCOLOR_XRGB(0, 0, 0));
-	pFont->DrawTextA(NULL, kMessage, -1, &kRectangle, DT_CENTER | DT_VCENTER, D3DCOLOR_XRGB(0, 0, 0));
-}
-
-/*
- * RenderGameOverDialog
- */
-void Interface::RenderGameOverDialog(RenderContext& kContext, Model* pModel)
-{
-	const D3DXVECTOR4 kColorVector(1.0f, 1.0f, 1.0f, 1.0f);
-
-	D3DSURFACE_DESC kDescriptor;
-	pDialog1Texture->GetLevelDesc(0, &kDescriptor);
-
-	const float fSizeX	= (float)kDescriptor.Width;
-	const float fSizeY	= (float)kDescriptor.Height;
-
-	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->SetVector(pEffect->GetParameterByName(NULL, "kColor"), &kColorVector);
-	pEffect->SetTexture(pEffect->GetParameterByName(NULL, "kTexture"), pDialog1Texture);
-	pEffect->CommitChanges();
-
-	kContext.DrawTriangles(Vertex::Quad::Declaration, pVertexBuffer, sizeof(Vertex::Quad), TrianglesPerFace);
-
-	RECT kRectangle;
-
-	kRectangle.left		= ScreenSizeX / 2;
-	kRectangle.top		= ScreenSizeY / 2 - 24;
-	kRectangle.right	= ScreenSizeX / 2;
-	kRectangle.bottom	= ScreenSizeY / 2 - 24;
-
-	const char* pMessage = "Congratulations!\nYou have won the game!";
-
-	pFont->DrawTextA(NULL, pMessage, -1, &kRectangle, DT_CENTER | DT_VCENTER | DT_CALCRECT, D3DCOLOR_XRGB(0, 0, 0));
-	pFont->DrawTextA(NULL, pMessage, -1, &kRectangle, DT_CENTER | DT_VCENTER, D3DCOLOR_XRGB(0, 0, 0));
-}
-
-/*
- * RenderConfirmExitDialog
- */
-void Interface::RenderConfirmExitDialog(RenderContext& kContext, Model* pModel)
-{
-	const D3DXVECTOR4 kColorVector(1.0f, 1.0f, 1.0f, 1.0f);
-
-	D3DSURFACE_DESC kDescriptor;
-	pDialog1Texture->GetLevelDesc(0, &kDescriptor);
-
-	const float fSizeX	= (float)kDescriptor.Width;
-	const float fSizeY	= (float)kDescriptor.Height;
-
-	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->SetVector(pEffect->GetParameterByName(NULL, "kColor"), &kColorVector);
-	pEffect->SetTexture(pEffect->GetParameterByName(NULL, "kTexture"), pDialog1Texture);
-	pEffect->CommitChanges();
-
-	kContext.DrawTriangles(Vertex::Quad::Declaration, pVertexBuffer, sizeof(Vertex::Quad), TrianglesPerFace);
-
-	RECT kRectangle;
-
-	kRectangle.left		= ScreenSizeX / 2;
-	kRectangle.top		= ScreenSizeY / 2 - 24;
-	kRectangle.right	= ScreenSizeX / 2;
-	kRectangle.bottom	= ScreenSizeY / 2 - 24;
-
-	const char* pMessage = "Are you sure you want to quit the game?";
-
-	pFont->DrawTextA(NULL, pMessage, -1, &kRectangle, DT_CENTER | DT_VCENTER | DT_CALCRECT, D3DCOLOR_XRGB(0, 0, 0));
-	pFont->DrawTextA(NULL, pMessage, -1, &kRectangle, DT_CENTER | DT_VCENTER, D3DCOLOR_XRGB(0, 0, 0));
-}
-
-/*
  * 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)
 {
 	if(pMessage && pChoiceA)
 	{
-		IDirect3DTexture9* pTexture = pChoiceB ? pDialog2Texture : pDialog1Texture;
+		IDirect3DTexture9* pDialogTexture = pChoiceB ? pDialog2Texture : pDialog1Texture;
 
 		D3DSURFACE_DESC kDescriptor;
-		pTexture->GetLevelDesc(0, &kDescriptor);
+		pDialogTexture->GetLevelDesc(0, &kDescriptor);
 
 		const float fSizeX	= (float)kDescriptor.Width;
 		const float fSizeY	= (float)kDescriptor.Height;
 
-		D3DXMATRIX kScale;
-		D3DXMatrixScaling(&kScale, fSizeX, fSizeY, 1.0f);
+		{
+			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);
 
-		D3DXMATRIX kTranslate;
-		D3DXMatrixTranslation(&kTranslate, -0.5f * fSizeX, 0.5f * fSizeY, 0.0f);
+			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);
+		}
+
+		/*
+		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);
+			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);
+		}
+		*/
 
-		pEffect->SetMatrix(pEffect->GetParameterByName(NULL, "kWorld"), &kWorldMatrix);
-		pEffect->SetTexture(pEffect->GetParameterByName(NULL, "kTexture"), pTexture);
-		pEffect->SetVector(pEffect->GetParameterByName(NULL, "kColor"), &D3DXVECTOR4(1.0f, 1.0f, 1.0f, 1.0f));
-		pEffect->CommitChanges();
+		#if 0
+		{
+			D3DXMATRIX kScale;
+			D3DXMatrixScaling(&kScale, pModel->kDialog1Bounds[0].Width, pModel->kDialog1Bounds[0].Height, 1.0f);
+
+			D3DXMATRIX kTranslate;
+			D3DXMatrixTranslation(&kTranslate, -0.5f * ScreenSizeX + pModel->kDialog1Bounds[0].X, 0.5f * ScreenSizeY - pModel->kDialog1Bounds[0].Y, 0.0f);
 
-		kContext.DrawTriangles(Vertex::Quad::Declaration, pVertexBuffer, sizeof(Vertex::Quad), TrianglesPerFace);
+			D3DXMATRIX kWorldMatrix;
+			D3DXMatrixMultiply(&kWorldMatrix, &kScale, &kTranslate);
+
+			pEffect->SetMatrix(pEffect->GetParameterByName(NULL, "kWorld"), &kWorldMatrix);
+			pEffect->SetTexture(pEffect->GetParameterByName(NULL, "kTexture"), pTexture);
+			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);
+		}
+		#endif
 
 		RECT kRectangle;
 
@@ -680,7 +600,16 @@
 		pFont->DrawTextA(NULL, pMessage, -1, &kRectangle, DT_CENTER | DT_VCENTER | DT_CALCRECT, D3DCOLOR_XRGB(0, 0, 0));
 		pFont->DrawTextA(NULL, pMessage, -1, &kRectangle, DT_CENTER | DT_VCENTER, D3DCOLOR_XRGB(0, 0, 0));
 
-		//TODO: Render button text
+		kRectangle.left		= (int32)pModel->kDialog1Bounds[0].X;
+		kRectangle.right	= (int32)(pModel->kDialog1Bounds[0].X + pModel->kDialog1Bounds[0].Width);
+		kRectangle.top		= (int32)pModel->kDialog1Bounds[0].Y;
+		kRectangle.bottom	= (int32)(pModel->kDialog1Bounds[0].Y + pModel->kDialog1Bounds[0].Height);
+
+		pFont->DrawTextA(NULL, pChoiceA, -1, &kRectangle, DT_CENTER | DT_VCENTER, D3DCOLOR_XRGB(0, 0, 0));
+
+		if(pChoiceB)
+		{
+		}
 	}
 }
 
--- a/LightClone/Source/Model.cpp	Thu Sep 08 11:55:35 2011 -0700
+++ b/LightClone/Source/Model.cpp	Fri Sep 09 09:57:27 2011 -0700
@@ -18,7 +18,7 @@
 	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(1023.0f + 2.5f * 54.0f, 638.0f + 0 * 00.0f, 48.0f, 48.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);
@@ -68,15 +68,15 @@
  */
 bool Model::Load(const char* pName)
 {
-	if(pFunction)
-	{
-		delete[] pFunction;
-		pFunction = NULL;
-	}
-
 	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);
@@ -174,3 +174,13 @@
 		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, 
+}
--- a/LightClone/Source/Model.h	Thu Sep 08 11:55:35 2011 -0700
+++ b/LightClone/Source/Model.h	Fri Sep 09 09:57:27 2011 -0700
@@ -183,6 +183,11 @@
 	 * ResetCode
 	 */
 	void ClearCode();
+
+	/*
+	 * SetupDialog
+	 */
+	void SetupDialog(const char* pMessage, const char* pChoiceA, uint32 nResultA, const char* pChoiceB = NULL, uint32 nResultB = 0);
 };
 
 #endif //__MODEL_H__
--- a/LightClone/Source/View.cpp	Thu Sep 08 11:55:35 2011 -0700
+++ b/LightClone/Source/View.cpp	Fri Sep 09 09:57:27 2011 -0700
@@ -286,7 +286,8 @@
 			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.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);
 
@@ -329,8 +330,12 @@
 	D3DVIEWPORT9 kViewport;
 	kContext.GetViewport(&kViewport);
 
-	//D3DXVECTOR3 kCenterWorld(0.0f, 0.0f, 0.0f);
-	const D3DXVECTOR3& kCenterWorld = ComputeOrigin(0.5f * (ScreenSizeX - 304.0f), 0.5f * ScreenSizeY, kViewport, kProjection, kView);
+	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)
 	{
@@ -349,7 +354,7 @@
 			for(uint32 i = 0; i < pEnvironment->GetAltitude(nX, nZ); ++i)
 			{
 				D3DXMATRIX kTranslateMatrix;
-				D3DXMatrixTranslation(&kTranslateMatrix, kCenterWorld.x + nX * kScale.x, i * kScale.y, kCenterWorld.z + nZ * kScale.z);
+				D3DXMatrixTranslation(&kTranslateMatrix, fOffsetX + (kCenterWorld.x + nX) * kScale.x, i * kScale.y, fOffsetZ + (kCenterWorld.z + nZ) * kScale.z);
 
 				D3DXMATRIX kWorldMatrix;
 				D3DXMatrixMultiply(&kWorldMatrix, &kScaleMatrix, &kTranslateMatrix);
@@ -417,6 +422,9 @@
 	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));
@@ -427,7 +435,7 @@
 	D3DXMatrixScaling(&kScale, pBot->kSize.x, pBot->kSize.y, pBot->kSize.z);
 
 	D3DXMATRIX kTranslate;
-	D3DXMatrixTranslation(&kTranslate, kPosition.x, kPosition.y, kPosition.z);
+	D3DXMatrixTranslation(&kTranslate, fOffsetX + kPosition.x, kPosition.y, fOffsetZ + kPosition.z);
 
 	D3DXMATRIX kRotate;
 	D3DXMatrixRotationY(&kRotate, kOrientation.y);