# HG changeset patch # User koryspansel # Date 1316576467 25200 # Node ID 0b729faa4e73cc7f2036a0f8157868bdaa43e388 # Parent d9e9ce8219f8c9ece2a7450ef901f748374e53f7 Fixed resource leak; Corrected button state logic diff -r d9e9ce8219f8 -r 0b729faa4e73 LightClone/Source/Environment.cpp --- a/LightClone/Source/Environment.cpp Mon Sep 19 14:55:26 2011 -0700 +++ b/LightClone/Source/Environment.cpp Tue Sep 20 20:41:07 2011 -0700 @@ -37,7 +37,7 @@ ErrorCode eCode = pResourceManager->CreateEffectFromFile("Data\\Shaders\\Environment.fx", &pEffect); if(eCode == Error_Success) { - eCode = pResourceManager->CreateTextureFromFile("Data\\Textures\\Block02.tga", &pTexture); + eCode = pResourceManager->CreateTextureFromFile("Data\\Textures\\Block04.tga", &pTexture); if(eCode == Error_Success) { eCode = pResourceManager->CreateVertexBuffer(VerticesPerBlock * sizeof(Vertex::Block), D3DUSAGE_WRITEONLY, D3DPOOL_MANAGED, &pVertexBuffer); diff -r d9e9ce8219f8 -r 0b729faa4e73 LightClone/Source/GuiButton.cpp --- a/LightClone/Source/GuiButton.cpp Mon Sep 19 14:55:26 2011 -0700 +++ b/LightClone/Source/GuiButton.cpp Tue Sep 20 20:41:07 2011 -0700 @@ -16,6 +16,8 @@ */ GuiButton::GuiButton() : nState(GuiButtonState_Normal), pEffect(NULL), pVertexBuffer(NULL), pFont(NULL) { + SetFlag(GuiElementFlag_Pickable); + memset(pTexture, 0, sizeof(pTexture)); } @@ -183,6 +185,10 @@ */ void GuiButton::OnMouseLeave() { + if(!pInterface->IsCursorAcquiredBy(this)) + { + nState = GuiButtonState_Normal; + } } /* @@ -191,6 +197,7 @@ void GuiButton::OnMouseDown(uint32 nButton, float fX, float fY) { pInterface->AcquireCursor(this); + nState = GuiButtonState_Down; } /* diff -r d9e9ce8219f8 -r 0b729faa4e73 LightClone/Source/GuiInterface.cpp --- a/LightClone/Source/GuiInterface.cpp Mon Sep 19 14:55:26 2011 -0700 +++ b/LightClone/Source/GuiInterface.cpp Tue Sep 20 20:41:07 2011 -0700 @@ -117,7 +117,7 @@ { if(pCaptureElement) { - pElement->OnMouseDown(nButton, fMouseX, fMouseY); + pCaptureElement->OnMouseDown(nButton, fMouseX, fMouseY); } else @@ -217,7 +217,7 @@ */ bool GuiInterface::IsCursorAcquiredBy(GuiElement* pElement) const { - return pDragElement == pElement; + return pCaptureElement == pElement; } /* diff -r d9e9ce8219f8 -r 0b729faa4e73 LightClone/Source/HashMap.h --- a/LightClone/Source/HashMap.h Mon Sep 19 14:55:26 2011 -0700 +++ b/LightClone/Source/HashMap.h Tue Sep 20 20:41:07 2011 -0700 @@ -120,7 +120,7 @@ */ Value* Add(Key& kKey) { - uint32 nSlot = GetSlot(kKey); + const uint32 nSlot = GetSlot(kKey); Node* pNode = new Node(kKey); pNode->pNext = pTable[nSlot]; @@ -134,6 +134,33 @@ */ void Remove(const Key& kKey) { + const uint32 nSlot = GetSlot(kKey); + + Node* pNode = pTable[nSlot]; + Node* pLast = NULL; + + while(pNode) + { + if(pNode->kKey == kKey) + break; + + pLast = pNode; + pNode = pNode->pNext; + } + + if(pNode) + { + if(pLast) + { + pLast->pNext = pNode->pNext; + } + else + { + pTable[nSlot] = pNode->pNext; + } + + delete pNode; + } } /* diff -r d9e9ce8219f8 -r 0b729faa4e73 LightClone/Source/InputManager.cpp --- a/LightClone/Source/InputManager.cpp Mon Sep 19 14:55:26 2011 -0700 +++ b/LightClone/Source/InputManager.cpp Tue Sep 20 20:41:07 2011 -0700 @@ -282,7 +282,7 @@ */ bool InputManager::IsButtonReleased(uint32 nButton) const { - return ((kCurrentMouseState.rgbButtons[nButton] & 0x80) == 0) && ((kPreviousMouseState.rgbButtons[nButton] & 0x80) == 0); + return ((kCurrentMouseState.rgbButtons[nButton] & 0x80) == 0) && ((kPreviousMouseState.rgbButtons[nButton] & 0x80) != 0); } /* diff -r d9e9ce8219f8 -r 0b729faa4e73 LightClone/Source/ResourceManager.cpp --- a/LightClone/Source/ResourceManager.cpp Mon Sep 19 14:55:26 2011 -0700 +++ b/LightClone/Source/ResourceManager.cpp Tue Sep 20 20:41:07 2011 -0700 @@ -99,13 +99,20 @@ if(pGraphicsDevice) { - IDirect3DTexture9** pInstance = kTextureCache.Find(ResourcePath(pName)); + ResourcePath kPath(pName); + + IDirect3DTexture9** pInstance = kTextureCache.Find(kPath); if(!pInstance) { - pInstance = kTextureCache.Add(ResourcePath(pName)); + pInstance = kTextureCache.Add(kPath); if(pInstance) { eCode = CreateTextureHelper(pGraphicsDevice, pName, pInstance); + if(eCode != Error_Success || !pInstance) + { + kTextureCache.Remove(kPath); + eCode = Error_Fail; + } } } else diff -r d9e9ce8219f8 -r 0b729faa4e73 LightClone/Source/World.cpp --- a/LightClone/Source/World.cpp Mon Sep 19 14:55:26 2011 -0700 +++ b/LightClone/Source/World.cpp Tue Sep 20 20:41:07 2011 -0700 @@ -89,7 +89,7 @@ eCode = InitializeInterface(pResourceManager); if(eCode == Error_Success) { - nCurrentLevel = 0; + nCurrentLevel = 2; nGameState = GameState_LoadMap; } } @@ -304,7 +304,7 @@ pFunctionMain = new GuiImage(); pFunctionMain->Initialize(pResourceManager); - pFunctionMain->SetTexture("Data\\Textures\\Panel.tga", true); + //pFunctionMain->SetTexture("Data\\Textures\\Panel.tga", true); pFunctionMain->SetPosition(1000.0f, 100.0f); for(uint32 i = 0; i < sizeof(pToolbarSlot) / sizeof(pToolbarSlot[0]); ++i) @@ -319,14 +319,14 @@ pFunctionA = new GuiImage(); pFunctionA->Initialize(pResourceManager); - pFunctionA->SetTexture("Data\\Textures\\Panel.tga", true); + //pFunctionA->SetTexture("Data\\Textures\\Panel.tga", true); pFunctionA->SetPosition(1000.0f, 400.0f); //TODO: Add slots for function a pFunctionB = new GuiImage(); pFunctionB->Initialize(pResourceManager); - pFunctionB->SetTexture("Data\\Textures\\Panel.tga", true); + //pFunctionB->SetTexture("Data\\Textures\\Panel.tga", true); pFunctionB->SetPosition(1000.0f, 600.0f); //TODO: Add slots for function b @@ -334,12 +334,16 @@ pButtonPlay = new GuiButton(); pButtonPlay->Initialize(pResourceManager); pButtonPlay->SetTexture(GuiButtonState_Normal, "Data\\Textures\\Play.tga", true); + pButtonPlay->SetTexture(GuiButtonState_Hover, "Data\\Textures\\Play.tga", true); + pButtonPlay->SetTexture(GuiButtonState_Down, "Data\\Textures\\Play.tga", true); pButtonPlay->SetPosition(1023.0f + 0.0f * 54.0f, 640.0f); pButtonPlay->Subscribe(GuiButton::EventClick, &World::OnPlay, this); pButtonStop = new GuiButton(); pButtonStop->Initialize(pResourceManager); pButtonStop->SetTexture(GuiButtonState_Normal, "Data\\Textures\\Stop.tga", true); + pButtonStop->SetTexture(GuiButtonState_Hover, "Data\\Textures\\Stop.tga", true); + pButtonStop->SetTexture(GuiButtonState_Down, "Data\\Textures\\Stop.tga", true); pButtonStop->SetPosition(1023.0f + 1.0f * 54.0f, 640.0f); pButtonStop->Subscribe(GuiButton::EventClick, &World::OnStop, this); @@ -354,6 +358,8 @@ pButtonExit = new GuiButton(); pButtonExit->Initialize(pResourceManager); pButtonExit->SetTexture(GuiButtonState_Normal, "Data\\Textures\\Exit.tga", true); + pButtonExit->SetTexture(GuiButtonState_Hover, "Data\\Textures\\Stop.tga", true); + pButtonExit->SetTexture(GuiButtonState_Down, "Data\\Textures\\Play.tga", true); pButtonExit->SetPosition(1023.0f + 3.0f * 54.0f, 640.0f); pButtonExit->Subscribe(GuiButton::EventClick, &World::OnExit, this);