Mercurial > LightClone
view LightClone/Source/Dialog.h @ 40:00d17d8f407d
Hookup game over dialog; Remove Code class
author | koryspansel |
---|---|
date | Thu, 22 Sep 2011 10:21:14 -0700 |
parents | d0ce73ced12e |
children | a986355cca5f |
line wrap: on
line source
/* * Dialog */ #ifndef __DIALOG_H__ #define __DIALOG_H__ #include "Core.h" #include "GuiDialog.h" #include "GuiLabel.h" #include "GuiButton.h" #include <stdarg.h> #include <stdio.h> /* * DialogResult */ enum { DialogResult_Ok = 0, DialogResult_Yes = 0, DialogResult_No = 1, }; /* * Dialog */ template<uint32 ButtonCount> class Dialog : public GuiDialog { /* * kLabel */ GuiLabel kLabel; /* * kButton */ GuiButton kButton[ButtonCount]; /* * kResult */ uint32 kResult[ButtonCount]; public: /* * Dialog */ Dialog() : GuiDialog() { } /* * Initialize */ virtual ErrorCode Initialize(ResourceManager* pResourceManager) { ErrorCode eCode = GuiDialog::Initialize(pResourceManager); if(eCode == Error_Success) { SetTexture("Data\\Textures\\Dialog0.tga", true); //SetDimensions(300.0f, 200.0f); kLabel.Initialize(pResourceManager); kLabel.SetPosition(0.5f * kDimensions.x, 0.15f * kDimensions.y); kLabel.SetLabelFlag(GuiLabelFlag_CenterX); kLabel.SetFont("Courier New", 16); kLabel.SetColor(D3DCOLOR_XRGB(0, 0, 0)); Add(&kLabel); for(uint32 i = 0; i < ButtonCount; ++i) { kButton[i].Initialize(pResourceManager); kButton[i].SetTexture(GuiButtonState_Normal, "Data\\Textures\\ButtonN.tga", true); kButton[i].SetTexture(GuiButtonState_Hover, "Data\\Textures\\ButtonH.tga"); kButton[i].SetTexture(GuiButtonState_Down, "Data\\Textures\\ButtonD.tga"); kButton[i].SetFont("Courier New", 16); kButton[i].SetColor(D3DCOLOR_XRGB(0, 0, 0)); kButton[i].Subscribe(GuiButton::EventClick, &Dialog::OnClick, this); const D3DXVECTOR2& kButtonSize = kButton[i].GetDimensions(); //x = 0.5 * Wb //1 = 0.5 * Wd - x //2 = 0.25 * Wd - x; 0.75 * Wd - x const float fScale = 1.0f / (float)(ButtonCount + 1); const float fX = (i + 1) * fScale * kDimensions.x - 0.5f * kButtonSize.x; const float fY = 0.65f * kDimensions.y; kButton[i].SetPosition(fX, fY); Add(&kButton[i]); } } return eCode; } /* * SetMessage */ void SetMessage(const char* pFormat, ...) { va_list kArguments; va_start(kArguments, pFormat); char kBuffer[128]; vsprintf(kBuffer, pFormat, kArguments); kLabel.SetText(kBuffer); va_end(kArguments); } /* * SetButton */ void SetButton(uint32 nButton, const char* pText, uint32 nResult) { kButton[nButton].SetText(pText); kResult[nButton] = nResult; } private: /* * OnClick */ void OnClick(GuiEventArguments& kArguments) { for(uint32 nButton = 0; nButton < ButtonCount; ++nButton) { if(kArguments.pSource == &kButton[nButton]) { Close(kResult[nButton]); } } } }; #endif //__DIALOG_H__