# HG changeset patch # User koryspansel # Date 1316046289 25200 # Node ID 33cb6979ac515d71ef7c4bb54a7bdc2713b9d3c9 # Parent 4951acfe92fcad920d0c336168453ccd612bbc2f More work on GUI system diff -r 4951acfe92fc -r 33cb6979ac51 LightClone/LightClone.vcproj --- a/LightClone/LightClone.vcproj Wed Sep 14 13:33:22 2011 -0700 +++ b/LightClone/LightClone.vcproj Wed Sep 14 17:24:49 2011 -0700 @@ -201,6 +201,10 @@ > + + @@ -249,10 +253,18 @@ > + + + + @@ -339,6 +351,10 @@ > + + @@ -387,11 +403,11 @@ > Initialize(pResourceManager); + pImage->SetTexture("Data\\Textures\\Slot.tga"); + pImage->SetDimensions(48.0f, 48.0f); + pImage->SetPosition(48.0f * i, 0.0f); + + Add(pImage); + } + } + + return eCode; +} + +/* + * Update + */ +void CodePanel::Update(float fElapsed) +{ +} + diff -r 4951acfe92fc -r 33cb6979ac51 LightClone/Source/CodePanel.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LightClone/Source/CodePanel.h Wed Sep 14 17:24:49 2011 -0700 @@ -0,0 +1,34 @@ +/* + * CodePanel + */ + +#ifndef __CODEPANEL_H__ +#define __CODEPANEL_H__ + +#include "Core.h" +#include "GuiContainer.h" + +/* + * CodePanel + */ +class CodePanel : public GuiContainer +{ +public: + + /* + * CodePanel + */ + CodePanel(); + + /* + * Initialize + */ + virtual ErrorCode Initialize(ResourceManager* pResourceManager); + + /* + * Update + */ + virtual void Update(float fElapsed); +}; + +#endif //__CODEPANEL_H__ diff -r 4951acfe92fc -r 33cb6979ac51 LightClone/Source/GuiButton.cpp --- a/LightClone/Source/GuiButton.cpp Wed Sep 14 13:33:22 2011 -0700 +++ b/LightClone/Source/GuiButton.cpp Wed Sep 14 17:24:49 2011 -0700 @@ -67,7 +67,7 @@ /* * Render */ -void GuiButton::Render(RenderContext& kContext) +void GuiButton::Render(RenderContext& kContext, Camera& kCamera) { if(pTexture[nState]) { diff -r 4951acfe92fc -r 33cb6979ac51 LightClone/Source/GuiButton.h --- a/LightClone/Source/GuiButton.h Wed Sep 14 13:33:22 2011 -0700 +++ b/LightClone/Source/GuiButton.h Wed Sep 14 17:24:49 2011 -0700 @@ -70,7 +70,7 @@ /* * Render */ - virtual void Render(RenderContext& kContext); + virtual void Render(RenderContext& kContext, Camera& kCamera); private: diff -r 4951acfe92fc -r 33cb6979ac51 LightClone/Source/GuiContainer.cpp --- a/LightClone/Source/GuiContainer.cpp Wed Sep 14 13:33:22 2011 -0700 +++ b/LightClone/Source/GuiContainer.cpp Wed Sep 14 17:24:49 2011 -0700 @@ -66,11 +66,11 @@ /* * Render */ -void GuiContainer::Render(RenderContext& kContext) +void GuiContainer::Render(RenderContext& kContext, Camera& kCamera) { for(uint32 i = 0; i < kChildren.GetSize(); ++i) { - kChildren[i]->Render(kContext); + kChildren[i]->Render(kContext, kCamera); } } diff -r 4951acfe92fc -r 33cb6979ac51 LightClone/Source/GuiContainer.h --- a/LightClone/Source/GuiContainer.h Wed Sep 14 13:33:22 2011 -0700 +++ b/LightClone/Source/GuiContainer.h Wed Sep 14 17:24:49 2011 -0700 @@ -48,7 +48,7 @@ /* * Render */ - virtual void Render(RenderContext& kContext); + virtual void Render(RenderContext& kContext, Camera& kCamera); /* * Pick diff -r 4951acfe92fc -r 33cb6979ac51 LightClone/Source/GuiElement.cpp --- a/LightClone/Source/GuiElement.cpp Wed Sep 14 13:33:22 2011 -0700 +++ b/LightClone/Source/GuiElement.cpp Wed Sep 14 17:24:49 2011 -0700 @@ -64,9 +64,9 @@ /* * GetPosition */ -const D3DXVECTOR2& GuiElement::GetPosition() const +const D3DXVECTOR2 GuiElement::GetPosition() const { - return kPosition; + return pContainer ? pContainer->GetPosition() + kPosition : kPosition; } /* @@ -89,7 +89,7 @@ /* * GetDimensions */ -const D3DXVECTOR2& GuiElement::GetDimensions() const +const D3DXVECTOR2 GuiElement::GetDimensions() const { return kDimensions; } @@ -99,136 +99,7 @@ */ GuiElement* GuiElement::Pick(float fX, float fY) { - return Rectangle2(kPosition.y, kPosition.y, kDimensions.x, kDimensions.y).Contains(fX, fY) ? this : NULL; -} - -#if 0 -/* - * GuiElementList - */ -GuiElementList::GuiElementList() : pElement(NULL), nSize(0), nCount(0) -{ -} - -/* - * ~GuiElementList - */ -GuiElementList::~GuiElementList() -{ - delete[] pElement; - pElement = NULL; -} - -/* - * Add - */ -ErrorCode GuiElementList::Add(GuiElement* pInstance) -{ - ErrorCode eCode = Resize(nCount + 1); - if(eCode == Error_Success) - { - pElement[nCount++] = pInstance; - } - - return eCode; -} - -/* - * Remove - */ -ErrorCode GuiElementList::Remove(uint32 nIndex) -{ - if(nIndex < nCount) - { - --nCount; - - for(uint32 i = nIndex; i < nCount; ++i) - { - pElement[i] = pElement[i + 1]; - } - - return Error_Success; - } - - return Error_Fail; -} - -/* - * Clear - */ -void GuiElementList::Clear() -{ - nCount = 0; -} + const D3DXVECTOR2& kLocation = GetPosition(); -/* - * Find - */ -int32 GuiElementList::Find(GuiElement* pInstance) -{ - for(uint32 i = 0; i < nCount; ++i) - { - if(pElement[i] == pInstance) - { - return (int32)i; - } - } - - return -1; -} - -/* - * GetSize - */ -uint32 GuiElementList::GetSize() const -{ - return nCount; -} - -/* - * operator [] - */ -GuiElement* GuiElementList::operator[](uint32 nIndex) -{ - //ASSERT(nIndex < nCount); - return pElement[nIndex]; + return Rectangle2(kLocation.y, kLocation.y, kDimensions.x, kDimensions.y).Contains(fX, fY) ? this : NULL; } - -/* - * operator [] - */ -const GuiElement* GuiElementList::operator[](uint32 nIndex) const -{ - //ASSERT(nIndex < nCount); - return pElement[nIndex]; -} - -/* - * Resize - */ -ErrorCode GuiElementList::Resize(uint32 nLength) -{ - ErrorCode eCode = Error_Success; - - if(nLength > nSize) - { - //TODO: Reallocate array and copy - GuiElement** pArray = new GuiElement*[2 * nSize + 1]; - - if(pElement) - { - for(uint32 i = 0; i < nCount; ++i) - { - pArray[i] = pElement[i]; - } - - delete[] pElement; - } - - pElement = pArray; - nSize *= 2; - } - - return eCode; -} -#endif \ No newline at end of file diff -r 4951acfe92fc -r 33cb6979ac51 LightClone/Source/GuiElement.h --- a/LightClone/Source/GuiElement.h Wed Sep 14 13:33:22 2011 -0700 +++ b/LightClone/Source/GuiElement.h Wed Sep 14 17:24:49 2011 -0700 @@ -63,7 +63,7 @@ /* * Render */ - virtual void Render(RenderContext& kContext) = 0; + virtual void Render(RenderContext& kContext, Camera& kCamera) = 0; /* * Attach @@ -93,7 +93,7 @@ /* * GetPosition */ - const D3DXVECTOR2& GetPosition() const; + const D3DXVECTOR2 GetPosition() const; /* * SetDimensions @@ -108,7 +108,7 @@ /* * GetDimensions */ - const D3DXVECTOR2& GetDimensions() const; + const D3DXVECTOR2 GetDimensions() const; /* * Pick @@ -121,78 +121,4 @@ */ typedef ArrayList GuiElementList; -#if 0 -class GuiElementList -{ - /* - * pElement - */ - GuiElement** pElement; - - /* - * nSize - */ - uint32 nSize; - - /* - * nCount; - */ - uint32 nCount; - -public: - - /* - * GuiElementList - */ - GuiElementList(); - - /* - * ~GuiElementList - */ - ~GuiElementList(); - - /* - * Add - */ - ErrorCode Add(GuiElement* pInstance); - - /* - * Remove - */ - ErrorCode Remove(uint32 nIndex); - - /* - * Clear - */ - void Clear(); - - /* - * Find - */ - int32 Find(GuiElement* pInstance); - - /* - * GetSize - */ - uint32 GetSize() const; - - /* - * operator [] - */ - GuiElement* operator[](uint32 nIndex); - - /* - * operator [] - */ - const GuiElement* operator[](uint32 nIndex) const; - -private: - - /* - * Resize - */ - ErrorCode Resize(uint32 nLength); -}; -#endif - #endif //__GUIELEMENT_H__ diff -r 4951acfe92fc -r 33cb6979ac51 LightClone/Source/GuiImage.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LightClone/Source/GuiImage.cpp Wed Sep 14 17:24:49 2011 -0700 @@ -0,0 +1,144 @@ +/* + * GuiImage + */ + +#include "GuiImage.h" +#include "VertexTypes.h" + +/* + * GuiImage + */ +GuiImage::GuiImage() : pEffect(NULL), pVertexBuffer(NULL), pTexture(NULL) +{ +} + +/* + * Initialize + */ +ErrorCode GuiImage::Initialize(ResourceManager* pManager) +{ + pResourceManager = pManager; + + ErrorCode eCode = pResourceManager->CreateEffectFromFile("Data\\Shaders\\TexturedQuad.fx", &pEffect); + if(eCode == Error_Success) + { + eCode = pResourceManager->CreateVertexBuffer(6 * sizeof(Vertex::Quad), D3DUSAGE_WRITEONLY, D3DPOOL_MANAGED, &pVertexBuffer); + if(eCode == Error_Success) + { + eCode = SetupVertexBuffer(); + } + } + + return eCode; +} + +/* + * Terminate + */ +void GuiImage::Terminate() +{ + if(pTexture) + { + pTexture->Release(); + pTexture = NULL; + } + + if(pVertexBuffer) + { + pVertexBuffer->Release(); + pVertexBuffer = NULL; + } + + if(pEffect) + { + pEffect->Release(); + pEffect = NULL; + } +} + +/* + * Update + */ +void GuiImage::Update(float fElapsed) +{ +} + +/* + * Render + */ +void GuiImage::Render(RenderContext& kContext, Camera& kCamera) +{ + if(pTexture) + { + uint32 nPasses = 0; + + const float fOffsetX = -0.5f * ScreenSizeX; + const float fOffsetY = +0.5f * ScreenSizeY; + + const D3DXVECTOR4 kColorVector(1.0f, 1.0f, 1.0f, 1.0f); + + kContext.ApplyCameraToEffect(kCamera, pEffect); + + pEffect->SetTechnique(pEffect->GetTechnique(0)); + pEffect->Begin(&nPasses, 0); + pEffect->BeginPass(0); + + D3DXMATRIX kScale; + D3DXMatrixScaling(&kScale, kDimensions.x, kDimensions.y, 1.0f); + + D3DXMATRIX kTranslate; + D3DXMatrixTranslation(&kTranslate, fOffsetX + kPosition.x + 0.5f, fOffsetY - kPosition.y + 0.5f, 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"), pTexture); + pEffect->CommitChanges(); + + kContext.DrawTriangles(Vertex::Quad::Declaration, pVertexBuffer, sizeof(Vertex::Quad), TrianglesPerFace); + + pEffect->EndPass(); + pEffect->End(); + } +} + +/* + * SetTexture + */ +ErrorCode GuiImage::SetTexture(const char* pName) +{ + if(pTexture) + { + pTexture->Release(); + pTexture = NULL; + } + + return pResourceManager->CreateTextureFromFile(pName, &pTexture); +} + +/* + * SetupVertexBuffer + */ +ErrorCode GuiImage::SetupVertexBuffer() +{ + Vertex::Quad* pVertices = NULL; + + HRESULT hResult = pVertexBuffer->Lock(0, 0, (void**)&pVertices, D3DLOCK_DISCARD); + if(FAILED(hResult)) + { + return Error_Fail; + } + + pVertices[0] = Vertex::Quad(+0.0f, -1.0f, 1.0f, 0.0f, 1.0f); + pVertices[1] = Vertex::Quad(+0.0f, +0.0f, 1.0f, 0.0f, 0.0f); + pVertices[2] = Vertex::Quad(+1.0f, +0.0f, 1.0f, 1.0f, 0.0f); + pVertices[3] = Vertex::Quad(+0.0f, -1.0f, 1.0f, 0.0f, 1.0f); + pVertices[4] = Vertex::Quad(+1.0f, +0.0f, 1.0f, 1.0f, 0.0f); + pVertices[5] = Vertex::Quad(+1.0f, -1.0f, 1.0f, 1.0f, 1.0f); + + pVertexBuffer->Unlock(); + + return Error_Success; +} diff -r 4951acfe92fc -r 33cb6979ac51 LightClone/Source/GuiImage.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LightClone/Source/GuiImage.h Wed Sep 14 17:24:49 2011 -0700 @@ -0,0 +1,76 @@ +/* + * GuiImage + */ + +#ifndef __GUIIMAGE_H__ +#define __GUIIMAGE_H__ + +#include "Core.h" +#include "GuiElement.h" + +/* + * GuiImage + */ +class GuiImage : public GuiElement +{ + /* + * pResourceManager + */ + ResourceManager* pResourceManager; + + /* + * pEffect + */ + ID3DXEffect* pEffect; + + /* + * pVertexBuffer + */ + IDirect3DVertexBuffer9* pVertexBuffer; + + /* + * pTexture + */ + IDirect3DTexture9* pTexture; + +public: + + /* + * GuiImage + */ + GuiImage(); + + /* + * Initialize + */ + virtual ErrorCode Initialize(ResourceManager* pResourceManager); + + /* + * Terminate + */ + virtual void Terminate(); + + /* + * Update + */ + virtual void Update(float fElapsed); + + /* + * Render + */ + virtual void Render(RenderContext& kContext, Camera& kCamera); + + /* + * SetTexture + */ + ErrorCode SetTexture(const char* pName); + +private: + + /* + * SetupVertexBuffer + */ + ErrorCode SetupVertexBuffer(); +}; + +#endif //__GUIIMAGE_H__ diff -r 4951acfe92fc -r 33cb6979ac51 LightClone/Source/GuiInterface.cpp --- a/LightClone/Source/GuiInterface.cpp Wed Sep 14 13:33:22 2011 -0700 +++ b/LightClone/Source/GuiInterface.cpp Wed Sep 14 17:24:49 2011 -0700 @@ -55,7 +55,7 @@ // the camera and effect at this point. May also need a wrapper // around render context (GuiRenderContext) - pRoot->Render(kContext); + pRoot->Render(kContext, kCamera); } /* diff -r 4951acfe92fc -r 33cb6979ac51 LightClone/Source/GuiLabel.cpp --- a/LightClone/Source/GuiLabel.cpp Wed Sep 14 13:33:22 2011 -0700 +++ b/LightClone/Source/GuiLabel.cpp Wed Sep 14 17:24:49 2011 -0700 @@ -42,7 +42,7 @@ /* * Render */ -void GuiLabel::Render(RenderContext& kContext) +void GuiLabel::Render(RenderContext& kContext, Camera& kCamera) { if(pFont) { @@ -101,4 +101,20 @@ } return eCode; +} + +/* + * SetFlags + */ +ErrorCode GuiLabel::SetFlags(uint32 nValue) +{ + return nFlags |= nValue, Error_Success; +} + +/* + * ClearFlags + */ +ErrorCode GuiLabel::ClearFlags(uint32 nValue) +{ + return nFlags &= ~nValue, Error_Success; } \ No newline at end of file diff -r 4951acfe92fc -r 33cb6979ac51 LightClone/Source/GuiLabel.h --- a/LightClone/Source/GuiLabel.h Wed Sep 14 13:33:22 2011 -0700 +++ b/LightClone/Source/GuiLabel.h Wed Sep 14 17:24:49 2011 -0700 @@ -77,7 +77,7 @@ /* * Render */ - virtual void Render(RenderContext& kContext); + virtual void Render(RenderContext& kContext, Camera& kCamera); /* * SetFont @@ -88,6 +88,16 @@ * SetText */ ErrorCode SetText(const char* pText); + + /* + * SetFlags + */ + ErrorCode SetFlags(uint32 nFlags); + + /* + * ClearFlags + */ + ErrorCode ClearFlags(uint32 nFlags); }; #endif //__GUILABEL_H__ diff -r 4951acfe92fc -r 33cb6979ac51 LightClone/Source/World.cpp --- a/LightClone/Source/World.cpp Wed Sep 14 13:33:22 2011 -0700 +++ b/LightClone/Source/World.cpp Wed Sep 14 17:24:49 2011 -0700 @@ -285,6 +285,7 @@ pLabel->Initialize(pResourceManager); pLabel->SetFont("Courier New", 16); pLabel->SetText("This is a test!"); + pLabel->SetFlags(GuiLabelFlag_CenterX | GuiLabelFlag_CenterY); pLabel->SetPosition(0.5f * ScreenSizeX, 0.5f * ScreenSizeY); pRoot->Add(pLabel);