diff options
Diffstat (limited to 'src/T2DLL/SoundDlg.cpp')
-rw-r--r-- | src/T2DLL/SoundDlg.cpp | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/src/T2DLL/SoundDlg.cpp b/src/T2DLL/SoundDlg.cpp new file mode 100644 index 0000000..858f906 --- /dev/null +++ b/src/T2DLL/SoundDlg.cpp @@ -0,0 +1,127 @@ +#include "SoundDlg.h" +#include "CT2App.h" +#include "T2DlgItem.h" +#include "T2DlgItemText.h" +#include "T2MainWindow.h" +#include "T2MWControl.h" +#include "T2SoundPlayer.h" +#include "T2TowerDoc.h" +#include "T2WorldDef.h" + +SoundDlg::SoundDlg() { + mDeleteOnClose = true; +} + +/*virtual*/ SoundDlg::~SoundDlg() { +} + +void SoundDlg::Setup(T2TowerDoc *inDoc, HINSTANCE inInstance, CWnd *inParentWnd, const POINT &inPt, T2ImageObj *inImageObj) { + mDocument = inDoc; + + T2DLGTEMPLATE tmpl; + tmpl.resID = 7020; + tmpl.pt = inPt; + tmpl.moduleHandle = inInstance; + + Realize(inParentWnd, &tmpl, inDoc, inImageObj, inDoc->mWorldDef->GetPalette(), false, inParentWnd, 201, true); + ShowWindow(SW_HIDE); +} + +void SoundDlg::Revert() { + T2DlgItem *theCheck = GetT2DlgItem(100); + theCheck->SetValue(1); + + for (int i = 0; i < 4; i++) { + T2DlgItem *theICheck = GetT2DlgItem(101 + i); + theICheck->SetValue(1); + + T2DlgItemText *theText = (T2DlgItemText *) GetT2DlgItem(111 + i); + theText->SetTextColor(RGB(0, 0, 0)); + } + + Invalidate(); +} + +// T2DLL.dll 100DBC20 +static const unsigned int masks[4] = { + 9, 2, 0x30, 4 +}; + +void SoundDlg::Save() { + T2SoundPlayer *theSoundPlayer = mDocument->towerDoc_vf134(); + + T2DlgItem *theCheck = GetT2DlgItem(100); + if (theCheck->GetValue()) + theSoundPlayer->SetSoundOn(true); + else + theSoundPlayer->SetSoundOn(false); + + unsigned int theMask = theSoundPlayer->GetSEMask(); + for (int i = 0; i < 4; i++) { + T2DlgItem *theICheck = GetT2DlgItem(101 + i); + if (theICheck->GetValue()) + theMask |= masks[i]; + else + theMask &= ~masks[i]; + } + theSoundPlayer->SetSEMask(theMask); +} + +/*virtual*/ void SoundDlg::OnT2Create() { + T2SoundPlayer *theSoundPlayer = mDocument->towerDoc_vf134(); + T2DlgItem *theCheck = GetT2DlgItem(100); + + if (theSoundPlayer->IsSoundOn()) { + theCheck->SetValue(1); + } else { + theCheck->SetValue(0); + for (int i = 0; i < 4; i++) { + T2DlgItemText *theText = (T2DlgItemText *) GetT2DlgItem(111 + i); + theText->SetTextColor(RGB(128, 128, 128)); + } + } + + unsigned int theMask = theSoundPlayer->GetSEMask(); + for (int i = 0; i < 4; i++) { + T2DlgItem *theICheck = GetT2DlgItem(101 + i); + if (theMask & masks[i]) + theICheck->SetValue(1); + else + theICheck->SetValue(0); + } +} + +/*virtual*/ int SoundDlg::OnT2DialogCommand(UINT cmd, long data) { + int result = 1; + T2DlgItem *theCheck = GetT2DlgItem(100); + BOOL isSoundOn = theCheck->GetValue(); + WORD w = LOWORD(cmd); + + if (w == 100) { + COLORREF col; + if (isSoundOn) + col = RGB(0, 0, 0); + else + col = RGB(128, 128, 128); + + for (int i = 0; i < 4; i++) { + T2DlgItemText *theText = (T2DlgItemText *) GetT2DlgItem(111 + i); + theText->SetTextColor(col); + } + + Invalidate(); + } else if (w >= 101 && w < 105) { + if (!isSoundOn) { + T2DlgItem *theICheck = GetT2DlgItem(w); + int oldValue = theICheck->GetValue(); + if (oldValue) + theICheck->SetValue(0); + else + theICheck->SetValue(1); + } + } else { + result = T2Dialog::OnT2DialogCommand(cmd, data); + } + + return result; +} |