# HG changeset patch
# User koryspansel
# Date 1318360144 25200
# Node ID ffaeccdc105eaac64be9727ea9d6877e4ae9bff6
# Parent d1be174e5585badf96db2701e8187135c679b4a9
Work on screen manager
diff -r d1be174e5585 -r ffaeccdc105e LightClone/LightClone.vcproj
--- a/LightClone/LightClone.vcproj Mon Oct 10 09:49:54 2011 -0700
+++ b/LightClone/LightClone.vcproj Tue Oct 11 12:09:04 2011 -0700
@@ -338,6 +338,26 @@
>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-1);
+ return kStack[nTop--];
}
/*
@@ -67,6 +60,8 @@
*/
const Type& Peek()
{
+ ASSERT(nTop > -1);
+ return kStack[nTop];
}
/*
@@ -82,23 +77,7 @@
*/
uint32 Size() const
{
- return nSize;
- }
-
- /*
- * Find
- */
- int32 Find(Type& kValue) const
- {
- for(uint32 i = 0; i < nSize; ++i)
- {
- if(pList[i] == kValue)
- {
- return (int32)i;
- }
- }
-
- return -1;
+ return nTop + 1;
}
/*
@@ -106,8 +85,8 @@
*/
Type& operator[](uint32 nIndex)
{
- ASSERT(nIndex < nSize);
- return pList[nIndex];
+ ASSERT(nIndex < nTop + 1);
+ return kStack[nIndex];
}
/*
@@ -115,36 +94,8 @@
*/
const Type& operator[](uint32 nIndex) const
{
- ASSERT(nIndex < nSize);
- return pList[nIndex];
- }
-
-private:
-
- /*
- * Resize
- */
- ErrorCode Resize(uint32 nAmount)
- {
- if(nAmount > nCapacity)
- {
- Type* pArray = new Type[2 * nAmount];
-
- if(pList)
- {
- for(uint32 i = 0; i < nSize; ++i)
- {
- pArray[i] = pList[i];
- }
-
- delete[] pList;
- }
-
- pList = pArray;
- nCapacity = 2 * nAmount;
- }
-
- return Error_Success;
+ ASSERT(nIndex < nTop + 1);
+ return kStack[nIndex];
}
};
diff -r d1be174e5585 -r ffaeccdc105e LightClone/Source/GameScreen.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/LightClone/Source/GameScreen.cpp Tue Oct 11 12:09:04 2011 -0700
@@ -0,0 +1,48 @@
+/*
+ * GameScreen
+ */
+
+#include "GameScreen.h"
+
+/*
+ * Initialize
+ */
+ErrorCode GameScreen::Initialize(ServiceProvider* pServiceProvider)
+{
+ ErrorCode eCode = kWorld.Initialize(pServiceProvider);
+ if(eCode != Error_Success)
+ {
+ TRACE("Error: Failed to initialize world\n");
+
+ Terminate();
+ return eCode;
+ }
+
+ return eCode;
+}
+
+/*
+ * Terminate
+ */
+void GameScreen::Terminate()
+{
+ kWorld.Terminate();
+
+ Screen::Terminate();
+}
+
+/*
+ * Update
+ */
+void GameScreen::Update(float fElapsed)
+{
+ kWorld.Update(fElapsed);
+}
+
+/*
+ * Render
+ */
+void GameScreen::Render(RenderContext& kContext)
+{
+ kWorld.Render(kContext);
+}
diff -r d1be174e5585 -r ffaeccdc105e LightClone/Source/GameScreen.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/LightClone/Source/GameScreen.h Tue Oct 11 12:09:04 2011 -0700
@@ -0,0 +1,45 @@
+/*
+ * GameScreen
+ */
+
+#ifndef __GAMESCREEN_H__
+#define __GAMESCREEN_H__
+
+#include "Core.h"
+#include "Screen.h"
+#include "World.h"
+
+/*
+ * GameScreen
+ */
+class GameScreen : public Screen
+{
+ /*
+ * kWorld
+ */
+ World kWorld;
+
+public:
+
+ /*
+ * Initialize
+ */
+ virtual ErrorCode Initialize(ServiceProvider* pServiceProvider);
+
+ /*
+ * Terminate
+ */
+ virtual void Terminate();
+
+ /*
+ * Update
+ */
+ virtual void Update(float fElapsed);
+
+ /*
+ * Render
+ */
+ virtual void Render(RenderContext& kContext);
+};
+
+#endif //__GAMESCREEN_H__
diff -r d1be174e5585 -r ffaeccdc105e LightClone/Source/HelpScreen.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/LightClone/Source/HelpScreen.cpp Tue Oct 11 12:09:04 2011 -0700
@@ -0,0 +1,35 @@
+/*
+ * HelpScreen
+ */
+
+#include "HelpScreen.h"
+
+/*
+ * Initialize
+ */
+ErrorCode HelpScreen::Initialize(ServiceProvider* pServiceProvider)
+{
+ return Error_Success;
+}
+
+/*
+ * Terminate
+ */
+void HelpScreen::Terminate()
+{
+ Screen::Terminate();
+}
+
+/*
+ * Update
+ */
+void HelpScreen::Update(float fElapsed)
+{
+}
+
+/*
+ * Render
+ */
+void HelpScreen::Render(RenderContext& kContext)
+{
+}
diff -r d1be174e5585 -r ffaeccdc105e LightClone/Source/HelpScreen.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/LightClone/Source/HelpScreen.h Tue Oct 11 12:09:04 2011 -0700
@@ -0,0 +1,39 @@
+/*
+ * HelpScreen
+ */
+
+#ifndef __HELPSCREEN_H__
+#define __HELPSCREEN_H__
+
+#include "Core.h"
+#include "Screen.h"
+
+/*
+ * HelpScreen
+ */
+class HelpScreen : public Screen
+{
+public:
+
+ /*
+ * Initialize
+ */
+ virtual ErrorCode Initialize(ServiceProvider* pServiceProvider);
+
+ /*
+ * Terminate
+ */
+ virtual void Terminate();
+
+ /*
+ * Update
+ */
+ virtual void Update(float fElapsed);
+
+ /*
+ * Render
+ */
+ virtual void Render(RenderContext& kContext);
+};
+
+#endif //__HELPSCREEN_H__
diff -r d1be174e5585 -r ffaeccdc105e LightClone/Source/MainScreen.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/LightClone/Source/MainScreen.cpp Tue Oct 11 12:09:04 2011 -0700
@@ -0,0 +1,79 @@
+/*
+ * MainScreen
+ */
+
+#include "MainScreen.h"
+
+/*
+ * Initialize
+ */
+ErrorCode MainScreen::Initialize(ServiceProvider* pServiceProvider)
+{
+ ErrorCode eCode = Screen::Initialize(pServiceProvider);
+ if(eCode == Error_Success)
+ {
+ eCode = kInterface.Initialize(pServiceProvider);
+ if(eCode == Error_Success)
+ {
+ pBackground = new GuiImage();
+ pBackground->Initialize(pServiceProvider);
+ pBackground->SetTexture("Data\\Textures\\MainBackground.tga", true);
+
+ pButtonStart = new GuiButton();
+ pButtonStart->Initialize(pServiceProvider);
+ pButtonStart->SetTexture(GuiButtonState_Normal, "Data\\Textures\\Button2N.png", true);
+ pButtonStart->SetTexture(GuiButtonState_Hover, "Data\\Textures\\Button2H.png");
+ pButtonStart->SetTexture(GuiButtonState_Down, "Data\\Textures\\Button2D.png");
+ pButtonStart->SetFont("Courier New", 16);
+ pButtonStart->SetText("Start");
+ pButtonStart->SetPosition(800.0f, 400.0f);
+
+ pButtonHelp = new GuiButton();
+ pButtonHelp->Initialize(pServiceProvider);;
+ pButtonHelp->SetTexture(GuiButtonState_Normal, "Data\\Textures\\Button2N.png", true);
+ pButtonHelp->SetTexture(GuiButtonState_Hover, "Data\\Textures\\Button2H.png");
+ pButtonHelp->SetTexture(GuiButtonState_Down, "Data\\Textures\\Button2D.png");
+ pButtonHelp->SetFont("Courier New", 16);
+ pButtonHelp->SetText("Help");
+ pButtonHelp->SetPosition(800.0f, 440.0f);
+
+ pButtonExit = new GuiButton();
+ pButtonExit->Initialize(pServiceProvider);
+ pButtonExit->SetTexture(GuiButtonState_Normal, "Data\\Textures\\Button2N.png", true);
+ pButtonExit->SetTexture(GuiButtonState_Hover, "Data\\Textures\\Button2H.png");
+ pButtonExit->SetTexture(GuiButtonState_Down, "Data\\Textures\\Button2D.png");
+ pButtonExit->SetFont("Courier New", 16);
+ pButtonExit->SetText("Exit");
+ pButtonExit->SetPosition(800.0f, 480.0f);
+
+ kInterface.Add(pBackground);
+ kInterface.Add(pButtonStart);
+ kInterface.Add(pButtonHelp);
+ kInterface.Add(pButtonExit);
+ }
+ }
+
+ return eCode;
+}
+
+/*
+ * Terminate
+ */
+void MainScreen::Terminate()
+{
+ Screen::Terminate();
+}
+
+/*
+ * Update
+ */
+void MainScreen::Update(float fElapsed)
+{
+}
+
+/*
+ * Render
+ */
+void MainScreen::Render(RenderContext& kContext)
+{
+}
diff -r d1be174e5585 -r ffaeccdc105e LightClone/Source/MainScreen.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/LightClone/Source/MainScreen.h Tue Oct 11 12:09:04 2011 -0700
@@ -0,0 +1,67 @@
+/*
+ * MainScreen
+ */
+
+#ifndef __MAINSCREEN_H__
+#define __MAINSCREEN_H__
+
+#include "Core.h"
+#include "Screen.h"
+#include "GuiInterface.h"
+#include "GuiButton.h"
+#include "GuiImage.h"
+
+/*
+ * MainScreen
+ */
+class MainScreen : public Screen
+{
+ /*
+ * kInterface
+ */
+ GuiInterface kInterface;
+
+ /*
+ * pBackground
+ */
+ GuiImage* pBackground;
+
+ /*
+ * pButtonStart
+ */
+ GuiButton* pButtonStart;
+
+ /*
+ * pButtonHelp
+ */
+ GuiButton* pButtonHelp;
+
+ /*
+ * pButtonExit
+ */
+ GuiButton* pButtonExit;
+
+public:
+
+ /*
+ * Initialize
+ */
+ virtual ErrorCode Initialize(ServiceProvider* pServiceProvider);
+
+ /*
+ * Terminate
+ */
+ virtual void Terminate();
+
+ /*
+ * Update
+ */
+ virtual void Update(float fElapsed);
+
+ /*
+ * Render
+ */
+ virtual void Render(RenderContext& kContext);
+};
+
+#endif //__MAINSCREEN_H__
diff -r d1be174e5585 -r ffaeccdc105e LightClone/Source/Mediator.cpp
--- a/LightClone/Source/Mediator.cpp Mon Oct 10 09:49:54 2011 -0700
+++ b/LightClone/Source/Mediator.cpp Tue Oct 11 12:09:04 2011 -0700
@@ -18,6 +18,11 @@
Mediator::Mediator() : kWindow(this)
{
pGraphicsDevice = NULL;
+
+ kScreenManager.Register("Main", &kMainScreen);
+ kScreenManager.Register("Help", &kHelpScreen);
+ kScreenManager.Register("Game", &kGameScreen);
+ kScreenManager.Register("Pause", &kPauseScreen);
}
/*
@@ -32,7 +37,8 @@
kClock.Reset();
- while(kWorld.IsActive())
+ //TODO: While screen manager is active
+ while(true)
{
ProcessMessages();
@@ -144,12 +150,12 @@
Terminate();
return eCode;
- }
+ }
- eCode = kWorld.Initialize(&kServiceProvider);
+ eCode = kScreenManager.Initialize(&kServiceProvider);
if(eCode != Error_Success)
{
- TRACE("Error: Failed to initialize world\n");
+ TRACE("Error: Failed to initialize screen manager\n");
Terminate();
return eCode;
@@ -163,7 +169,7 @@
*/
void Mediator::Terminate()
{
- kWorld.Terminate();
+ kScreenManager.Terminate();
kInputManager.Terminate();
kResourceManager.Terminate();
kContext.Terminate();
@@ -178,7 +184,6 @@
*/
void Mediator::Update(float fElapsed)
{
- kWorld.Update(fElapsed);
}
/*
@@ -186,7 +191,11 @@
*/
void Mediator::Render()
{
- kWorld.Render(kContext);
+ const uint32 nColor = D3DCOLOR_XRGB(32, 32, 32);
+
+ kContext.Begin(nColor);
+ kScreenManager.Render(kContext);
+ kContext.End();
}
/*
@@ -200,7 +209,8 @@
{
if(kMessage.message == WM_QUIT)
{
- kWorld.Deactivate();
+ //kWorld.Deactivate();
+ //TODO: kScreenManager.Deactivate();
break;
}
diff -r d1be174e5585 -r ffaeccdc105e LightClone/Source/Mediator.h
--- a/LightClone/Source/Mediator.h Mon Oct 10 09:49:54 2011 -0700
+++ b/LightClone/Source/Mediator.h Tue Oct 11 12:09:04 2011 -0700
@@ -14,6 +14,11 @@
#include "RenderContext.h"
#include "World.h"
#include "ServiceProvider.h"
+#include "ScreenManager.h"
+#include "MainScreen.h"
+#include "HelpScreen.h"
+#include "PauseScreen.h"
+#include "GameScreen.h"
/*
* Mediator
@@ -56,9 +61,29 @@
ServiceProvider kServiceProvider;
/*
- * kWorld
+ * kScreenManager
+ */
+ ScreenManager kScreenManager;
+
+ /*
+ * kMainScreen
+ */
+ MainScreen kMainScreen;
+
+ /*
+ * kHelpScreen
*/
- World kWorld;
+ HelpScreen kHelpScreen;
+
+ /*
+ * kGameScreen
+ */
+ GameScreen kGameScreen;
+
+ /*
+ * kPauseScreen
+ */
+ PauseScreen kPauseScreen;
public:
diff -r d1be174e5585 -r ffaeccdc105e LightClone/Source/PauseScreen.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/LightClone/Source/PauseScreen.cpp Tue Oct 11 12:09:04 2011 -0700
@@ -0,0 +1,35 @@
+/*
+ * PauseScreen
+ */
+
+#include "PauseScreen.h"
+
+/*
+ * Initialize
+ */
+ErrorCode PauseScreen::Initialize(ServiceProvider* pServiceProvider)
+{
+ return Error_Success;
+}
+
+/*
+ * Terminate
+ */
+void PauseScreen::Terminate()
+{
+ Screen::Terminate();
+}
+
+/*
+ * Update
+ */
+void PauseScreen::Update(float fElapsed)
+{
+}
+
+/*
+ * Render
+ */
+void PauseScreen::Render(RenderContext& kContext)
+{
+}
diff -r d1be174e5585 -r ffaeccdc105e LightClone/Source/PauseScreen.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/LightClone/Source/PauseScreen.h Tue Oct 11 12:09:04 2011 -0700
@@ -0,0 +1,39 @@
+/*
+ * PauseScreen
+ */
+
+#ifndef __PAUSESCREEN_H__
+#define __PAUSESCREEN_H__
+
+#include "Core.h"
+#include "Screen.h"
+
+/*
+ * PauseScreen
+ */
+class PauseScreen : public Screen
+{
+public:
+
+ /*
+ * Initialize
+ */
+ virtual ErrorCode Initialize(ServiceProvider* pServiceProvider);
+
+ /*
+ * Terminate
+ */
+ virtual void Terminate();
+
+ /*
+ * Update
+ */
+ virtual void Update(float fElapsed);
+
+ /*
+ * Render
+ */
+ virtual void Render(RenderContext& kContext);
+};
+
+#endif //__PAUSESCREEN_H__
diff -r d1be174e5585 -r ffaeccdc105e LightClone/Source/Screen.cpp
--- a/LightClone/Source/Screen.cpp Mon Oct 10 09:49:54 2011 -0700
+++ b/LightClone/Source/Screen.cpp Tue Oct 11 12:09:04 2011 -0700
@@ -14,7 +14,7 @@
/*
* Initialize
*/
-ErrorCode Screen::Initialize()
+ErrorCode Screen::Initialize(ServiceProvider* pServiceProvider)
{
return Error_Success;
}
@@ -36,6 +36,22 @@
/*
* Render
*/
-void Screen::Render()
+void Screen::Render(RenderContext& kContext)
{
}
+
+/*
+ * SetScreenManager
+ */
+void Screen::SetScreenManager(ScreenManager* pManager)
+{
+ pScreenManager = pManager;
+}
+
+/*
+ * GetScreenManager
+ */
+ScreenManager* Screen::GetScreenManager()
+{
+ return pScreenManager;
+}
diff -r d1be174e5585 -r ffaeccdc105e LightClone/Source/Screen.h
--- a/LightClone/Source/Screen.h Mon Oct 10 09:49:54 2011 -0700
+++ b/LightClone/Source/Screen.h Tue Oct 11 12:09:04 2011 -0700
@@ -6,12 +6,24 @@
#define __SCREEN_H__
#include "Core.h"
+#include "ServiceProvider.h"
+#include "RenderContext.h"
+
+/*
+ * ScreenManager
+ */
+class ScreenManager;
/*
* Screen
*/
class Screen
{
+ /*
+ * pScreenManager
+ */
+ ScreenManager* pScreenManager;
+
public:
/*
@@ -22,7 +34,7 @@
/*
* Initialize
*/
- virtual ErrorCode Initialize();
+ virtual ErrorCode Initialize(ServiceProvider* pServiceProvider);
/*
* Terminate
@@ -37,7 +49,17 @@
/*
* Render
*/
- virtual void Render();
+ virtual void Render(RenderContext& kContext);
+
+ /*
+ * SetScreenManager
+ */
+ void SetScreenManager(ScreenManager* pManager);
+
+ /*
+ * GetScreenManager
+ */
+ ScreenManager* GetScreenManager();
};
#endif //__SCREEN_H__
diff -r d1be174e5585 -r ffaeccdc105e LightClone/Source/ScreenManager.cpp
--- a/LightClone/Source/ScreenManager.cpp Mon Oct 10 09:49:54 2011 -0700
+++ b/LightClone/Source/ScreenManager.cpp Tue Oct 11 12:09:04 2011 -0700
@@ -12,9 +12,36 @@
}
/*
+ * Register
+ */
+ErrorCode ScreenManager::Register(const char* pName, Screen* pInstance)
+{
+ ErrorCode eCode = Error_Fail;
+
+ if(pInstance)
+ {
+ FixedString<> kName(pName);
+
+ Screen** pScreen = kScreens.Find(kName);
+ if(!pScreen)
+ pScreen = kScreens.Add(kName);
+
+ if(pScreen)
+ {
+ (*pScreen) = pInstance;
+ (*pScreen)->SetScreenManager(this);
+ }
+
+ eCode = Error_Success;
+ }
+
+ return eCode;
+}
+
+/*
* Initialize
*/
-ErrorCode ScreenManager::Initialize()
+ErrorCode ScreenManager::Initialize(ServiceProvider* pServiceProvider)
{
return Error_Success;
}
@@ -36,6 +63,6 @@
/*
* Render
*/
-void ScreenManager::Render()
+void ScreenManager::Render(RenderContext& kContext)
{
}
diff -r d1be174e5585 -r ffaeccdc105e LightClone/Source/ScreenManager.h
--- a/LightClone/Source/ScreenManager.h Mon Oct 10 09:49:54 2011 -0700
+++ b/LightClone/Source/ScreenManager.h Tue Oct 11 12:09:04 2011 -0700
@@ -7,12 +7,36 @@
#include "Core.h"
#include "Screen.h"
+#include "HashMap.h"
+#include "FixedString.h"
+#include "FixedStack.h"
+#include "RenderContext.h"
/*
* ScreenManager
*/
class ScreenManager
{
+ /*
+ * ScreenMap
+ */
+ typedef HashMap, Screen*, FixedString<>::Hash> ScreenMap;
+
+ /*
+ * ScreenStack
+ */
+ typedef FixedStack ScreenStack;
+
+ /*
+ * kScreens
+ */
+ ScreenMap kScreens;
+
+ /*
+ * kStack
+ */
+ ScreenStack kStack;
+
public:
/*
@@ -21,9 +45,14 @@
ScreenManager();
/*
+ * Register
+ */
+ ErrorCode Register(const char* pName, Screen* pInstance);
+
+ /*
* Initialize
*/
- ErrorCode Initialize();
+ ErrorCode Initialize(ServiceProvider* pServiceProvider);
/*
* Terminate
@@ -38,7 +67,7 @@
/*
* Render
*/
- void Render();
+ void Render(RenderContext& kContext);
};
#endif //__SCREENMANAGER_H__
diff -r d1be174e5585 -r ffaeccdc105e LightClone/Source/World.cpp
--- a/LightClone/Source/World.cpp Mon Oct 10 09:49:54 2011 -0700
+++ b/LightClone/Source/World.cpp Tue Oct 11 12:09:04 2011 -0700
@@ -189,10 +189,6 @@
*/
void World::Render(RenderContext& kContext)
{
- const uint32 nColor = D3DCOLOR_XRGB(32, 32, 32);
-
- kContext.Begin(nColor);
-
if(nWorldState == WorldState_Game || nWorldState == WorldState_Confirm)
{
D3DVIEWPORT9 kOriginal;
@@ -201,7 +197,7 @@
D3DVIEWPORT9 kViewport;
kViewport.X = 0;
kViewport.Y = 0;
- kViewport.Width = ScreenSizeX - 280;
+ kViewport.Width = ScreenSizeX - 280; // minus size of interface
kViewport.Height = ScreenSizeY;
kViewport.MinZ = kOriginal.MinZ;
kViewport.MaxZ = kOriginal.MaxZ;
@@ -217,8 +213,6 @@
kCameraController.SetMode(CameraMode_2D);
kInterface.Render(kContext, kCameraController);
-
- kContext.End();
}
/*
@@ -371,9 +365,6 @@
pDebugText->SetText("Debug");
pDebugText->SetColor(D3DCOLOR_XRGB(255, 255, 255));
- //pHud = new GuiElement();
- //pHud->Add(pBackground);
-
kInterface.Add(pBackground);
kInterface.Add(pDebugText);
kInterface.Add(pMessageDialog);
diff -r d1be174e5585 -r ffaeccdc105e LightClone/Source/World.h
--- a/LightClone/Source/World.h Mon Oct 10 09:49:54 2011 -0700
+++ b/LightClone/Source/World.h Tue Oct 11 12:09:04 2011 -0700
@@ -91,26 +91,6 @@
GuiInterface kInterface;
/*
- * pMenuMain
- */
- GuiElement* pMenuMain;
-
- /*
- * pMenuHelp
- */
- GuiElement* pMenuHelp;
-
- /*
- * pMenuPause
- */
- GuiElement* pMenuPause;
-
- /*
- * pHud
- */
- GuiElement* pHud;
-
- /*
* pBackground
*/
GuiImage* pBackground;