# HG changeset patch
# User koryspansel
# Date 1318964209 25200
# Node ID 40c0b5305de830da6045e0f078e1f6da8ad221f6
# Parent 0574e2cf8bacf94e4cdafd1c57b29c691185160c
Work on removing ScreenManager
diff -r 0574e2cf8bac -r 40c0b5305de8 LightClone/LightClone.vcproj
--- a/LightClone/LightClone.vcproj Tue Oct 11 17:44:10 2011 -0700
+++ b/LightClone/LightClone.vcproj Tue Oct 18 11:56:49 2011 -0700
@@ -302,14 +302,6 @@
>
-
-
-
-
@@ -334,38 +326,6 @@
>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -560,38 +512,6 @@
>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Set(NULL);
+ //pScreenManager->Set(NULL);
}
else
if(kResultArguments.nResult == DialogResult_No)
{
- pScreenManager->Pop();
+ //pScreenManager->Pop();
}
}
diff -r 0574e2cf8bac -r 40c0b5305de8 LightClone/Source/ConfirmScreen.h
--- a/LightClone/Source/ConfirmScreen.h Tue Oct 11 17:44:10 2011 -0700
+++ b/LightClone/Source/ConfirmScreen.h Tue Oct 18 11:56:49 2011 -0700
@@ -6,7 +6,6 @@
#define __CONFIRMSCREEN_H__
#include "Core.h"
-#include "Screen.h"
#include "CameraController.h"
#include "GuiInterface.h"
#include "Dialog.h"
@@ -14,7 +13,7 @@
/*
* ConfirmScreen
*/
-class ConfirmScreen : public Screen
+class ConfirmScreen
{
/*
* kCameraController
diff -r 0574e2cf8bac -r 40c0b5305de8 LightClone/Source/Core.h
--- a/LightClone/Source/Core.h Tue Oct 11 17:44:10 2011 -0700
+++ b/LightClone/Source/Core.h Tue Oct 18 11:56:49 2011 -0700
@@ -18,27 +18,27 @@
#include
/*
- * WorldState
+ * ApplicationState
*/
enum
{
- WorldState_Main,
- WorldState_Game,
- WorldState_Pause,
- WorldState_Help,
- WorldState_Confirm,
- WorldState_Exit,
+ ApplicationState_Main,
+ ApplicationState_Game,
+ ApplicationState_Pause,
+ ApplicationState_Help,
+ ApplicationState_Confirm,
+ ApplicationState_Exit,
};
/*
- * LogicState
+ * GameState
*/
enum
{
- LogicState_LevelLoad,
- LogicState_LevelComplete,
- LogicState_GameActive,
- LogicState_GameOver,
+ GameState_Load,
+ GameState_Active,
+ GameState_Complete,
+ GameState_Over,
};
/*
diff -r 0574e2cf8bac -r 40c0b5305de8 LightClone/Source/GameOverScreen.cpp
--- a/LightClone/Source/GameOverScreen.cpp Tue Oct 11 17:44:10 2011 -0700
+++ b/LightClone/Source/GameOverScreen.cpp Tue Oct 18 11:56:49 2011 -0700
@@ -3,7 +3,6 @@
*/
#include "GameOverScreen.h"
-#include "ScreenManager.h"
/*
* Initialize
@@ -30,8 +29,6 @@
void GameOverScreen::Terminate()
{
kInterface.Terminate();
-
- Screen::Terminate();
}
/*
@@ -76,6 +73,6 @@
if(kResultArguments.nResult == DialogResult_Ok)
{
- pScreenManager->Set("Main");
+ //pScreenManager->Set("Main");
}
}
diff -r 0574e2cf8bac -r 40c0b5305de8 LightClone/Source/GameOverScreen.h
--- a/LightClone/Source/GameOverScreen.h Tue Oct 11 17:44:10 2011 -0700
+++ b/LightClone/Source/GameOverScreen.h Tue Oct 18 11:56:49 2011 -0700
@@ -6,7 +6,6 @@
#define __GAMEOVERSCREEN_H__
#include "Core.h"
-#include "Screen.h"
#include "CameraController.h"
#include "GuiInterface.h"
#include "Dialog.h"
@@ -14,7 +13,7 @@
/*
* GameOverScreen
*/
-class GameOverScreen : public Screen
+class GameOverScreen
{
/*
* kCameraController
diff -r 0574e2cf8bac -r 40c0b5305de8 LightClone/Source/GameScreen.cpp
--- a/LightClone/Source/GameScreen.cpp Tue Oct 11 17:44:10 2011 -0700
+++ b/LightClone/Source/GameScreen.cpp Tue Oct 18 11:56:49 2011 -0700
@@ -3,7 +3,6 @@
*/
#include "GameScreen.h"
-#include "ScreenManager.h"
/*
* Initialize
@@ -55,7 +54,7 @@
return eCode;
}
- nLogicState = LogicState_LevelLoad;
+ nGameState = GameState_Load;
nSimulationState = SimulationState_Idle;
nCurrentLevel = 0;
@@ -71,8 +70,6 @@
kProgram.Terminate();
kBot.Terminate();
kEnvironment.Terminate();
-
- Screen::Terminate();
}
/*
@@ -101,7 +98,7 @@
*/
void GameScreen::Render(RenderContext& kContext)
{
- if(nLogicState != LogicState_LevelLoad)
+ if(nGameState != GameState_Load)
{
D3DVIEWPORT9 kOriginal;
kContext.GetViewport(&kOriginal);
@@ -413,7 +410,7 @@
if(nCount > 0)
{
nCurrentLevel = 0;
- nLogicState = LogicState_LevelLoad;
+ nGameState = GameState_Load;
for(uint32 i = 0; i < nCount; ++i)
{
@@ -440,7 +437,7 @@
*/
void GameScreen::UpdateLogic(float fElapsed)
{
- if(nLogicState == LogicState_LevelLoad)
+ if(nGameState == GameState_Load)
{
char kBuffer[256];
sprintf(kBuffer, "Data\\Maps\\Map%02d.map", nCurrentLevel++);
@@ -455,18 +452,18 @@
pCode[i]->Clear();
}
- nLogicState = LogicState_GameActive;
+ nGameState = GameState_Active;
}
else
{
- pScreenManager->Push("GameOver");
+ //pScreenManager->Push("GameOver");
}
nSimulationState = SimulationState_Idle;
}
else
- if(nLogicState == LogicState_GameActive)
+ if(nGameState == GameState_Active)
{
if(nSimulationState == SimulationState_Active)
{
@@ -474,8 +471,8 @@
{
if(kEnvironment.RequirementsMet())
{
- nLogicState = LogicState_LevelLoad;
- pScreenManager->Push("LevelOver");
+ nGameState = GameState_Load;
+ //pScreenManager->Push("LevelOver");
}
}
}
@@ -551,5 +548,5 @@
*/
void GameScreen::OnExit(GuiEventArguments& kArguments)
{
- pScreenManager->Push("Confirm");
+ //pScreenManager->Push("Confirm");
}
diff -r 0574e2cf8bac -r 40c0b5305de8 LightClone/Source/GameScreen.h
--- a/LightClone/Source/GameScreen.h Tue Oct 11 17:44:10 2011 -0700
+++ b/LightClone/Source/GameScreen.h Tue Oct 18 11:56:49 2011 -0700
@@ -6,7 +6,6 @@
#define __GAMESCREEN_H__
#include "Core.h"
-#include "Screen.h"
#include "CameraController.h"
#include "GuiInterface.h"
#include "GuiImage.h"
@@ -20,7 +19,7 @@
/*
* GameScreen
*/
-class GameScreen : public Screen
+class GameScreen
{
/*
* pInputManager
@@ -53,9 +52,9 @@
Program kProgram;
/*
- * nLogicState
+ * nGameState
*/
- uint32 nLogicState;
+ uint32 nGameState;
/*
* nSimulationState
diff -r 0574e2cf8bac -r 40c0b5305de8 LightClone/Source/HelpScreen.cpp
--- a/LightClone/Source/HelpScreen.cpp Tue Oct 11 17:44:10 2011 -0700
+++ b/LightClone/Source/HelpScreen.cpp Tue Oct 18 11:56:49 2011 -0700
@@ -17,7 +17,6 @@
*/
void HelpScreen::Terminate()
{
- Screen::Terminate();
}
/*
diff -r 0574e2cf8bac -r 40c0b5305de8 LightClone/Source/HelpScreen.h
--- a/LightClone/Source/HelpScreen.h Tue Oct 11 17:44:10 2011 -0700
+++ b/LightClone/Source/HelpScreen.h Tue Oct 18 11:56:49 2011 -0700
@@ -6,12 +6,13 @@
#define __HELPSCREEN_H__
#include "Core.h"
-#include "Screen.h"
+#include "ServiceProvider.h"
+#include "RenderContext.h"
/*
* HelpScreen
*/
-class HelpScreen : public Screen
+class HelpScreen
{
public:
diff -r 0574e2cf8bac -r 40c0b5305de8 LightClone/Source/LevelOverScreen.cpp
--- a/LightClone/Source/LevelOverScreen.cpp Tue Oct 11 17:44:10 2011 -0700
+++ b/LightClone/Source/LevelOverScreen.cpp Tue Oct 18 11:56:49 2011 -0700
@@ -3,7 +3,6 @@
*/
#include "LevelOverScreen.h"
-#include "ScreenManager.h"
/*
* Initialize
@@ -30,8 +29,6 @@
void LevelOverScreen::Terminate()
{
kInterface.Terminate();
-
- Screen::Terminate();
}
/*
@@ -76,6 +73,5 @@
if(kResultArguments.nResult == DialogResult_Ok)
{
- pScreenManager->Pop();
}
}
diff -r 0574e2cf8bac -r 40c0b5305de8 LightClone/Source/LevelOverScreen.h
--- a/LightClone/Source/LevelOverScreen.h Tue Oct 11 17:44:10 2011 -0700
+++ b/LightClone/Source/LevelOverScreen.h Tue Oct 18 11:56:49 2011 -0700
@@ -6,7 +6,6 @@
#define __LEVELOVERSCREEN_H__
#include "Core.h"
-#include "Screen.h"
#include "CameraController.h"
#include "GuiInterface.h"
#include "Dialog.h"
@@ -14,7 +13,7 @@
/*
* LevelOverScreen
*/
-class LevelOverScreen : public Screen
+class LevelOverScreen
{
/*
* kCameraController
diff -r 0574e2cf8bac -r 40c0b5305de8 LightClone/Source/MainScreen.cpp
--- a/LightClone/Source/MainScreen.cpp Tue Oct 11 17:44:10 2011 -0700
+++ b/LightClone/Source/MainScreen.cpp Tue Oct 18 11:56:49 2011 -0700
@@ -9,7 +9,7 @@
*/
ErrorCode MainScreen::Initialize(ServiceProvider* pServiceProvider)
{
- ErrorCode eCode = Screen::Initialize(pServiceProvider);
+ ErrorCode eCode = Error_Success;
if(eCode == Error_Success)
{
eCode = kInterface.Initialize(pServiceProvider);
@@ -61,7 +61,6 @@
*/
void MainScreen::Terminate()
{
- Screen::Terminate();
}
/*
diff -r 0574e2cf8bac -r 40c0b5305de8 LightClone/Source/MainScreen.h
--- a/LightClone/Source/MainScreen.h Tue Oct 11 17:44:10 2011 -0700
+++ b/LightClone/Source/MainScreen.h Tue Oct 18 11:56:49 2011 -0700
@@ -6,7 +6,6 @@
#define __MAINSCREEN_H__
#include "Core.h"
-#include "Screen.h"
#include "GuiInterface.h"
#include "GuiButton.h"
#include "GuiImage.h"
@@ -14,7 +13,7 @@
/*
* MainScreen
*/
-class MainScreen : public Screen
+class MainScreen
{
/*
* kInterface
diff -r 0574e2cf8bac -r 40c0b5305de8 LightClone/Source/Mediator.cpp
--- a/LightClone/Source/Mediator.cpp Tue Oct 11 17:44:10 2011 -0700
+++ b/LightClone/Source/Mediator.cpp Tue Oct 18 11:56:49 2011 -0700
@@ -18,14 +18,6 @@
Mediator::Mediator() : kWindow(this)
{
pGraphicsDevice = NULL;
-
- kScreenManager.Register("Main", &kMainScreen);
- kScreenManager.Register("Help", &kHelpScreen);
- kScreenManager.Register("Game", &kGameScreen);
- kScreenManager.Register("Pause", &kPauseScreen);
- kScreenManager.Register("LevelOver", &kLevelOverScreen);
- kScreenManager.Register("GameOver", &kGameOverScreen);
- kScreenManager.Register("Confirm", &kConfirmScreen);
}
/*
@@ -36,25 +28,14 @@
ErrorCode eCode = Initialize();
if(eCode == Error_Success)
{
- float fAccumulator = fUpdatePeriod;
-
kClock.Reset();
- while(kScreenManager.IsActive())
+ fAccumulator = fUpdatePeriod;
+ while(nApplicationState != ApplicationState_Exit)
{
ProcessMessages();
-
- fAccumulator += Min(kClock.GetElapsed(), fUpdatePeriod);
- while(fAccumulator >= fUpdatePeriod)
- {
- Update(fUpdatePeriod);
- fAccumulator -= fUpdatePeriod;
- }
-
- //if(updated)
- {
- Render();
- }
+ ProcessUpdate();
+ ProcessRender();
}
Terminate();
@@ -154,16 +135,45 @@
return eCode;
}
- eCode = kScreenManager.Initialize(&kServiceProvider);
+ eCode = kEnvironment.Initialize(&kServiceProvider);
if(eCode != Error_Success)
{
- TRACE("Error: Failed to initialize screen manager\n");
+ TRACE("Error: Failed to initialize environment\n");
+
+ Terminate();
+ return eCode;
+ }
+
+ eCode = kBot.Initialize(&kServiceProvider);
+ if(eCode != Error_Success)
+ {
+ TRACE("Error: Failed to initialize bot\n");
Terminate();
return eCode;
}
- kScreenManager.Push("Game");
+ eCode = kProgram.Initialize();
+ if(eCode != Error_Success)
+ {
+ TRACE("Error: Failed to initialize program\n");
+
+ Terminate();
+ return eCode;
+ }
+
+ eCode = InitializeInterface(&kServiceProvider);
+ if(eCode != Error_Success)
+ {
+ TRACE("Error: Failed to initialize interface\n");
+
+ Terminate();
+ return eCode;
+ }
+
+ nGameState = GameState_Load;
+ nSimulationState = SimulationState_Idle;
+ nCurrentLevel = 0;
return eCode;
}
@@ -173,7 +183,10 @@
*/
void Mediator::Terminate()
{
- kScreenManager.Terminate();
+ kInterface.Terminate();
+ kProgram.Terminate();
+ kBot.Terminate();
+ kEnvironment.Terminate();
kInputManager.Terminate();
kResourceManager.Terminate();
kContext.Terminate();
@@ -188,7 +201,45 @@
*/
void Mediator::Update(float fElapsed)
{
- kScreenManager.Update(fElapsed);
+ kInputManager.Update(fElapsed);
+
+ if(nApplicationState == ApplicationState_Main)
+ {
+ }
+ else
+
+ if(nApplicationState == ApplicationState_Game)
+ {
+ UpdateInput(fElapsed);
+ UpdateLogic(fElapsed);
+
+ {
+ const D3DXVECTOR3& kCameraPosition = kCameraController.GetLocation();
+
+ char kBuffer[256];
+ sprintf_s(kBuffer, "Camera: <%.2f, %.2f, %.2f> (%.2f, %.2f, %.2f)", kCameraPosition.x, kCameraPosition.y, kCameraPosition.z, kCameraController.fCameraDistance, kCameraController.fCameraYaw, kCameraController.fCameraPitch);
+ pDebugText->SetText(kBuffer);
+ }
+
+ kInterface.Update(fElapsed);
+ }
+ else
+
+ if(nApplicationState == ApplicationState_Pause)
+ {
+ }
+ else
+
+ if(nApplicationState == ApplicationState_Help)
+ {
+ }
+ else
+
+ if(nApplicationState == ApplicationState_Confirm)
+ {
+ }
+
+ //kScreenManager.Update(fElapsed);
}
/*
@@ -199,7 +250,57 @@
const uint32 nColor = D3DCOLOR_XRGB(32, 32, 32);
kContext.Begin(nColor);
- kScreenManager.Render(kContext);
+ //kScreenManager.Render(kContext);
+
+ if(nApplicationState == ApplicationState_Main)
+ {
+ }
+ else
+
+ if(nApplicationState == ApplicationState_Game)
+ {
+ if(nGameState != GameState_Load)
+ {
+ D3DVIEWPORT9 kOriginal;
+ kContext.GetViewport(&kOriginal);
+
+ D3DVIEWPORT9 kViewport;
+ kViewport.X = 0;
+ kViewport.Y = 0;
+ kViewport.Width = ScreenSizeX - 280; // minus size of interface
+ kViewport.Height = ScreenSizeY;
+ kViewport.MinZ = kOriginal.MinZ;
+ kViewport.MaxZ = kOriginal.MaxZ;
+
+ kContext.SetViewport(kViewport);
+
+ kCameraController.SetMode(CameraMode_3D);
+
+ kEnvironment.Render(kContext, kCameraController);
+ kBot.Render(kContext, kCameraController);
+
+ kContext.SetViewport(kOriginal);
+ }
+
+ kCameraController.SetMode(CameraMode_2D);
+ kInterface.Render(kContext, kCameraController);
+ }
+ else
+
+ if(nApplicationState == ApplicationState_Pause)
+ {
+ }
+ else
+
+ if(nApplicationState == ApplicationState_Help)
+ {
+ }
+ else
+
+ if(nApplicationState == ApplicationState_Confirm)
+ {
+ }
+
kContext.End();
}
@@ -214,11 +315,459 @@
{
if(kMessage.message == WM_QUIT)
{
- kScreenManager.Set(NULL);
- break;
+ nApplicationState = ApplicationState_Exit;
+ }
+ else
+ {
+ TranslateMessage(&kMessage);
+ DispatchMessage(&kMessage);
+ }
+ }
+}
+
+/*
+ * ProcessUpdate
+ */
+void Mediator::ProcessUpdate()
+{
+ fAccumulator += Min(kClock.GetElapsed(), fUpdatePeriod);
+ while(fAccumulator >= fUpdatePeriod)
+ {
+ Update(fUpdatePeriod);
+ fAccumulator -= fUpdatePeriod;
+ }
+}
+
+/*
+ * ProcessRender
+ */
+void Mediator::ProcessRender()
+{
+ Render();
+}
+
+/*
+ * Load
+ */
+ErrorCode Mediator::Load(const char* pName)
+{
+ ErrorCode eCode = kLoader.Load(pName);
+ if(eCode == Error_Success)
+ {
+ const Size& kSize = kLoader.GetSize();
+
+ eCode = kEnvironment.Setup(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.SetPosition(kLoader.GetInitialPosition());
+ kBot.SetDirection(kLoader.GetInitialDirection());
+
+ //kCameraController.SetDistance(
+ }
+ }
+
+ return eCode;
+}
+
+/*
+ * InitializeInterface
+ */
+ErrorCode Mediator::InitializeInterface(ServiceProvider* pServiceProvider)
+{
+ ErrorCode eCode = kInterface.Initialize(pServiceProvider);
+ if(eCode == Error_Success)
+ {
+ pBackground = new GuiImage();
+ pBackground->Initialize(pServiceProvider);
+ pBackground->SetTexture("Data\\Textures\\Background04.tga", true);
+ pBackground->SetPosition(ScreenSizeX - pBackground->GetWidth(), 0.0f);
+ pBackground->SetDepth(512.0f);
+
+ pToolbar = new ActionPanel(4, 2);
+ pToolbar->Initialize(pServiceProvider);
+ pToolbar->SetTexture("Data\\Textures\\PanelA.png");
+ pToolbar->SetPosition(16, 16.0f);
+ pToolbar->SetAction(0, Action_Forward);
+ pToolbar->SetAction(1, Action_RotateCW);
+ pToolbar->SetAction(2, Action_RotateCCW);
+ pToolbar->SetAction(3, Action_Jump);
+ pToolbar->SetAction(4, Action_Light);
+ pToolbar->SetAction(5, Action_FunctionA);
+ pToolbar->SetAction(6, Action_FunctionB);
+ pToolbar->SetPermanent(true);
+ pToolbar->SetDepth(256.0f);
+
+ GuiLabel* pMainLabel = new GuiLabel();
+ pMainLabel->Initialize(pServiceProvider);
+ pMainLabel->SetFont("Courier New", 16);
+ pMainLabel->SetText("Main:");
+ pMainLabel->SetColor(D3DCOLOR_XRGB(0, 0, 0));
+ pMainLabel->SetPosition(26.0f, 149.0f);
+ pMainLabel->SetDepth(256.0f);
+
+ pCode[0] = new ActionPanel(4, 3);
+ pCode[0]->Initialize(pServiceProvider);
+ pCode[0]->SetTexture("Data\\Textures\\PanelB.png");
+ pCode[0]->SetPosition(16.0f, 160.0f);
+ pCode[0]->Subscribe(ActionPanel::EventAction, &Mediator::OnAction, this);
+ pCode[0]->SetDepth(256.0f);
+
+ GuiLabel* pFunctionALabel = new GuiLabel();
+ pFunctionALabel->Initialize(pServiceProvider);
+ pFunctionALabel->SetFont("Courier New", 16);
+ pFunctionALabel->SetText("Function 1:");
+ pFunctionALabel->SetColor(D3DCOLOR_XRGB(0, 0, 0));
+ pFunctionALabel->SetPosition(26.0f, 349.0f);
+
+ pCode[1] = new ActionPanel(4, 2);
+ pCode[1]->Initialize(pServiceProvider);
+ pCode[1]->SetTexture("Data\\Textures\\PanelA.png");
+ pCode[1]->SetPosition(16.0f, 360.0f);
+ pCode[1]->Subscribe(ActionPanel::EventAction, &Mediator::OnAction, this);
+
+ GuiLabel* pFunctionBLabel = new GuiLabel();
+ pFunctionBLabel->Initialize(pServiceProvider);
+ pFunctionBLabel->SetFont("Courier New", 16);
+ pFunctionBLabel->SetText("Function 2:");
+ pFunctionBLabel->SetColor(D3DCOLOR_XRGB(0, 0, 0));
+ pFunctionBLabel->SetPosition(26.0f, 493.0f);
+
+ pCode[2] = new ActionPanel(4, 2);
+ pCode[2]->Initialize(pServiceProvider);
+ pCode[2]->SetTexture("Data\\Textures\\PanelA.png");
+ pCode[2]->SetPosition(16.0f, 504.0f);
+ pCode[2]->Subscribe(ActionPanel::EventAction, &Mediator::OnAction, this);
+
+ const float fButtonPadding = 32.0f;
+ const float fButtonSpacing = 8.0f;
+ const float fButtonSize = 48.0f;
+
+ pButtonPlay = new GuiButton();
+ pButtonPlay->Initialize(pServiceProvider);
+ pButtonPlay->SetTexture(GuiButtonState_Normal, "Data\\Textures\\Button2N.png", true);
+ pButtonPlay->SetTexture(GuiButtonState_Hover, "Data\\Textures\\Button2H.png", true);
+ pButtonPlay->SetTexture(GuiButtonState_Down, "Data\\Textures\\Button2D.png", true);
+ pButtonPlay->SetFont("Courier New", 16, FW_BOLD);
+ pButtonPlay->SetText("Play");
+ pButtonPlay->SetColor(D3DCOLOR_XRGB(0, 0, 0));
+ pButtonPlay->SetPosition(fButtonPadding + 0.0f * (fButtonSize + fButtonSpacing), 652.0f);
+ pButtonPlay->Subscribe(GuiButton::EventClick, &Mediator::OnPlay, this);
+
+ pButtonStop = new GuiButton();
+ pButtonStop->Initialize(pServiceProvider);
+ pButtonStop->SetTexture(GuiButtonState_Normal, "Data\\Textures\\Button2N.png", true);
+ pButtonStop->SetTexture(GuiButtonState_Hover, "Data\\Textures\\Button2H.png", true);
+ pButtonStop->SetTexture(GuiButtonState_Down, "Data\\Textures\\Button2D.png", true);
+ pButtonStop->SetFont("Courier New", 16, FW_BOLD);
+ pButtonStop->SetText("Stop");
+ pButtonStop->SetColor(D3DCOLOR_XRGB(0, 0, 0));
+ pButtonStop->SetPosition(fButtonPadding + 1.0f * (fButtonSize + fButtonSpacing), 652.0f);
+ pButtonStop->Subscribe(GuiButton::EventClick, &Mediator::OnStop, this);
+
+ pButtonReset = new GuiButton();
+ pButtonReset->Initialize(pServiceProvider);
+ pButtonReset->SetTexture(GuiButtonState_Normal, "Data\\Textures\\Button2N.png", true);
+ pButtonReset->SetTexture(GuiButtonState_Hover, "Data\\Textures\\Button2H.png", true);
+ pButtonReset->SetTexture(GuiButtonState_Down, "Data\\Textures\\Button2D.png", true);
+ pButtonReset->SetFont("Courier New", 16, FW_BOLD);
+ pButtonReset->SetText("Reset");
+ pButtonReset->SetColor(D3DCOLOR_XRGB(0, 0, 0));
+ pButtonReset->SetPosition(fButtonPadding + 2.0f * (fButtonSize + fButtonSpacing), 652.0f);
+ pButtonReset->Subscribe(GuiButton::EventClick, &Mediator::OnReset, this);
+
+ pButtonExit = new GuiButton();
+ pButtonExit->Initialize(pServiceProvider);
+ pButtonExit->SetTexture(GuiButtonState_Normal, "Data\\Textures\\Button2N.png", true);
+ pButtonExit->SetTexture(GuiButtonState_Hover, "Data\\Textures\\Button2H.png", true);
+ pButtonExit->SetTexture(GuiButtonState_Down, "Data\\Textures\\Button2D.png", true);
+ pButtonExit->SetFont("Courier New", 16, FW_BOLD);
+ pButtonExit->SetText("Exit");
+ pButtonExit->SetColor(D3DCOLOR_XRGB(0, 0, 0));
+ pButtonExit->SetPosition(fButtonPadding + 3.0f * (fButtonSize + fButtonSpacing), 652.0f);
+ pButtonExit->Subscribe(GuiButton::EventClick, &Mediator::OnExit, this);
+
+ pBackground->Add(pToolbar);
+ pBackground->Add(pMainLabel);
+ pBackground->Add(pCode[0]);
+ pBackground->Add(pFunctionALabel);
+ pBackground->Add(pCode[1]);
+ pBackground->Add(pFunctionBLabel);
+ pBackground->Add(pCode[2]);
+ pBackground->Add(pButtonPlay);
+ pBackground->Add(pButtonStop);
+ pBackground->Add(pButtonReset);
+ pBackground->Add(pButtonExit);
+
+ pDebugText = new GuiLabel();
+ pDebugText->Initialize(pServiceProvider);
+ pDebugText->SetFont("Courier New", 16);
+ pDebugText->SetPosition(10.0f, 10.0f);
+ pDebugText->SetText("Debug");
+ pDebugText->SetColor(D3DCOLOR_XRGB(255, 255, 255));
+
+ kInterface.Add(pBackground);
+ kInterface.Add(pDebugText);
+ }
+
+ return eCode;
+}
+
+/*
+ * UpdateInput
+ */
+void Mediator::UpdateInput(float 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);
+ }
+
+ static bool bControl = false;
+ static uint32 nBuffer[4] = {0};
+ static uint32 nCount = 0;
+
+ if(bControl)
+ {
+ if(pInputManager->IsKeyDown(DIK_0) && !pInputManager->WasKeyDown(DIK_0))
+ {
+ nBuffer[nCount++] = 0;
+ }
+ else
+
+ if(pInputManager->IsKeyDown(DIK_1) && !pInputManager->WasKeyDown(DIK_1))
+ {
+ nBuffer[nCount++] = 1;
+ }
+ else
+
+ if(pInputManager->IsKeyDown(DIK_2) && !pInputManager->WasKeyDown(DIK_2))
+ {
+ nBuffer[nCount++] = 2;
+ }
+ else
+
+ if(pInputManager->IsKeyDown(DIK_3) && !pInputManager->WasKeyDown(DIK_3))
+ {
+ nBuffer[nCount++] = 3;
+ }
+ else
+
+ if(pInputManager->IsKeyDown(DIK_4) && !pInputManager->WasKeyDown(DIK_4))
+ {
+ nBuffer[nCount++] = 4;
+ }
+ else
+
+ if(pInputManager->IsKeyDown(DIK_5) && !pInputManager->WasKeyDown(DIK_5))
+ {
+ nBuffer[nCount++] = 5;
+ }
+ else
+
+ if(pInputManager->IsKeyDown(DIK_6) && !pInputManager->WasKeyDown(DIK_6))
+ {
+ nBuffer[nCount++] = 6;
+ }
+ else
+
+ if(pInputManager->IsKeyDown(DIK_7) && !pInputManager->WasKeyDown(DIK_7))
+ {
+ nBuffer[nCount++] = 7;
+ }
+ else
+
+ if(pInputManager->IsKeyDown(DIK_8) && !pInputManager->WasKeyDown(DIK_8))
+ {
+ nBuffer[nCount++] = 8;
+ }
+ else
+
+ if(pInputManager->IsKeyDown(DIK_9) && !pInputManager->WasKeyDown(DIK_9))
+ {
+ nBuffer[nCount++] = 9;
}
- TranslateMessage(&kMessage);
- DispatchMessage(&kMessage);
+ if(!pInputManager->IsKeyDown(DIK_LCONTROL))
+ {
+ if(nCount > 0)
+ {
+ nCurrentLevel = 0;
+ nGameState = GameState_Load;
+
+ for(uint32 i = 0; i < nCount; ++i)
+ {
+ nCurrentLevel += (uint32)(nBuffer[i] * powf(10.0f, (float)i));
+ }
+ }
+
+ bControl = false;
+ }
+ }
+ else
+ {
+ if(pInputManager->IsKeyDown(DIK_LCONTROL))
+ {
+ bControl = true;
+ nCount = 0;
+ }
+ }
+ #endif
+}
+
+/*
+ * UpdateLogic
+ */
+void Mediator::UpdateLogic(float fElapsed)
+{
+ if(nGameState == GameState_Load)
+ {
+ char kBuffer[256];
+ sprintf(kBuffer, "Data\\Maps\\Map%02d.map", nCurrentLevel++);
+
+ ErrorCode eCode = Load(kBuffer);
+ if(eCode == Error_Success)
+ {
+ kProgram.Clear();
+
+ for(uint32 i = 0; i < MaximumFunctionCount; ++i)
+ {
+ pCode[i]->Clear();
+ }
+
+ nGameState = GameState_Active;
+ }
+ else
+ {
+ //pScreenManager->Push("GameOver");
+ }
+
+ nSimulationState = SimulationState_Idle;
+ }
+ else
+
+ if(nGameState == GameState_Active)
+ {
+ if(nSimulationState == SimulationState_Active)
+ {
+ if(kBot.Update(fElapsed))
+ {
+ if(kEnvironment.RequirementsMet())
+ {
+ nGameState = GameState_Load;
+ //pScreenManager->Push("LevelOver");
+ }
+ }
+ }
}
}
+
+/*
+ * OnAction
+ */
+void Mediator::OnAction(GuiEventArguments& kArguments)
+{
+ ActionArguments& kActionArguments = (ActionArguments&)kArguments;
+
+ for(uint32 i = 0; i < MaximumFunctionCount; ++i)
+ {
+ if(kArguments.pSource == pCode[i])
+ {
+ kProgram.SetAction(i, kActionArguments.nSlot, pCode[i]->GetAction(kActionArguments.nSlot));
+ }
+ }
+}
+
+/*
+ * OnPlay
+ */
+void Mediator::OnPlay(GuiEventArguments& kArguments)
+{
+ if(nSimulationState == SimulationState_Idle)
+ {
+ kEnvironment.Reset();
+
+ kBot.Reset();
+ kBot.SetPosition(kLoader.GetInitialPosition());
+ kBot.SetDirection(kLoader.GetInitialDirection());
+ kBot.Upload(kProgram);
+
+ nSimulationState = SimulationState_Active;
+ }
+}
+
+/*
+ * OnStop
+ */
+void Mediator::OnStop(GuiEventArguments& kArguments)
+{
+ if(nSimulationState == SimulationState_Active)
+ {
+ kEnvironment.Reset();
+
+ kBot.Reset();
+ kBot.SetPosition(kLoader.GetInitialPosition());
+ kBot.SetDirection(kLoader.GetInitialDirection());
+
+ nSimulationState = SimulationState_Idle;
+ }
+}
+
+/*
+ * OnReset
+ */
+void Mediator::OnReset(GuiEventArguments& kArguments)
+{
+ kProgram.Clear();
+
+ for(uint32 i = 0; i < MaximumFunctionCount; ++i)
+ {
+ pCode[i]->Clear();
+ }
+}
+
+/*
+ * OnExit
+ */
+void Mediator::OnExit(GuiEventArguments& kArguments)
+{
+ //pScreenManager->Push("Confirm");
+}
diff -r 0574e2cf8bac -r 40c0b5305de8 LightClone/Source/Mediator.h
--- a/LightClone/Source/Mediator.h Tue Oct 11 17:44:10 2011 -0700
+++ b/LightClone/Source/Mediator.h Tue Oct 18 11:56:49 2011 -0700
@@ -13,14 +13,15 @@
#include "ResourceManager.h"
#include "RenderContext.h"
#include "ServiceProvider.h"
-#include "ScreenManager.h"
-#include "MainScreen.h"
-#include "HelpScreen.h"
-#include "PauseScreen.h"
-#include "GameScreen.h"
-#include "LevelOverScreen.h"
-#include "GameOverScreen.h"
-#include "ConfirmScreen.h"
+#include "CameraController.h"
+#include "Loader.h"
+#include "Environment.h"
+#include "Bot.h"
+#include "GuiInterface.h"
+#include "GuiImage.h"
+#include "GuiButton.h"
+#include "ActionPanel.h"
+#include "Dialog.h"
/*
* Mediator
@@ -63,44 +64,114 @@
ServiceProvider kServiceProvider;
/*
- * kScreenManager
+ * fAccumulator
+ */
+ float fAccumulator;
+
+ /*
+ * nApplicationState
*/
- ScreenManager kScreenManager;
+ uint32 nApplicationState;
+
+ /*
+ * pInputManager
+ */
+ InputManager* pInputManager;
+
+ /*
+ * kCameraController
+ */
+ CameraController kCameraController;
/*
- * kMainScreen
+ * kLoader
*/
- MainScreen kMainScreen;
+ Loader kLoader;
+
+ /*
+ * kEnvironment
+ */
+ Environment kEnvironment;
/*
- * kHelpScreen
+ * kBot
+ */
+ Bot kBot;
+
+ /*
+ * kProgram
*/
- HelpScreen kHelpScreen;
+ Program kProgram;
+
+ /*
+ * nGameState
+ */
+ uint32 nGameState;
+
+ /*
+ * nSimulationState
+ */
+ uint32 nSimulationState;
/*
- * kGameScreen
+ * nCurrentLevel
*/
- GameScreen kGameScreen;
+ uint32 nCurrentLevel;
+
+ /*
+ * kInterface
+ */
+ GuiInterface kInterface;
/*
- * kPauseScreen
+ * pBackground
+ */
+ GuiImage* pBackground;
+
+ /*
+ * pButtonPlay
*/
- PauseScreen kPauseScreen;
+ GuiButton* pButtonPlay;
+
+ /*
+ * pButtonStop
+ */
+ GuiButton* pButtonStop;
/*
- * kLevelOverScreen
+ * pButtonReset
+ */
+ GuiButton* pButtonReset;
+
+ /*
+ * pButtonExit
*/
- LevelOverScreen kLevelOverScreen;
+ GuiButton* pButtonExit;
+
+ /*
+ * pToolbar
+ */
+ ActionPanel* pToolbar;
/*
- * kGameOverScreen
+ * pCode
*/
- GameOverScreen kGameOverScreen;
+ ActionPanel* pCode[MaximumFunctionCount];
/*
- * kConfirmScreen
+ * pMessageDialog
+ */
+ MessageDialog* pMessageDialog;
+
+ /*
+ * pConfirmDialog
*/
- ConfirmScreen kConfirmScreen;
+ ChoiceDialog* pConfirmDialog;
+
+ /*
+ * pDebugText
+ */
+ GuiLabel* pDebugText;
public:
@@ -145,6 +216,61 @@
* ProcessMessages
*/
virtual void ProcessMessages();
+
+ /*
+ * ProcessUpdate
+ */
+ void ProcessUpdate();
+
+ /*
+ * ProcessRender
+ */
+ void ProcessRender();
+
+ /*
+ * Load
+ */
+ ErrorCode Load(const char* pName);
+
+ /*
+ * InitializeInterface
+ */
+ ErrorCode InitializeInterface(ServiceProvider* pServiceProvider);
+
+ /*
+ * UpdateInput
+ */
+ void UpdateInput(float fElapsed);
+
+ /*
+ * UpdateLogic
+ */
+ void UpdateLogic(float fElapsed);
+
+ /*
+ * OnAction
+ */
+ void OnAction(GuiEventArguments& kArguments);
+
+ /*
+ * OnPlay
+ */
+ void OnPlay(GuiEventArguments& kArguments);
+
+ /*
+ * OnStop
+ */
+ void OnStop(GuiEventArguments& kArguments);
+
+ /*
+ * OnReset
+ */
+ void OnReset(GuiEventArguments& kArguments);
+
+ /*
+ * OnExit
+ */
+ void OnExit(GuiEventArguments& kArguments);
};
#endif //__MEDIATOR_H__
diff -r 0574e2cf8bac -r 40c0b5305de8 LightClone/Source/PauseScreen.cpp
--- a/LightClone/Source/PauseScreen.cpp Tue Oct 11 17:44:10 2011 -0700
+++ b/LightClone/Source/PauseScreen.cpp Tue Oct 18 11:56:49 2011 -0700
@@ -17,7 +17,6 @@
*/
void PauseScreen::Terminate()
{
- Screen::Terminate();
}
/*
diff -r 0574e2cf8bac -r 40c0b5305de8 LightClone/Source/PauseScreen.h
--- a/LightClone/Source/PauseScreen.h Tue Oct 11 17:44:10 2011 -0700
+++ b/LightClone/Source/PauseScreen.h Tue Oct 18 11:56:49 2011 -0700
@@ -6,12 +6,13 @@
#define __PAUSESCREEN_H__
#include "Core.h"
-#include "Screen.h"
+#include "ServiceProvider.h"
+#include "RenderContext.h"
/*
* PauseScreen
*/
-class PauseScreen : public Screen
+class PauseScreen
{
public: