📄 soundtab.cpp
字号:
#include "falclib.h"
#include "chandler.h"
#include "userids.h"
#include "PlayerOp.h"
#include "sim\include\stdhdr.h"
#include "ui_setup.h"
#include "falclib\include\fsound.h"
#include <tchar.h>
#include "cmusic.h"
#include "f4find.h"
#include "falcsnd\VoiceManager.h"
#include "falcsnd\conv.h"
#include "falclib\include\soundgroups.h"
#include "falcsnd\psound.h"
extern C_Handler *gMainHandler;
extern C_Music *gMusic;
extern VoiceManager *VM;
void PlayRandomMessage(int channel);
/////////////
/////SoundTab
/////////////
void InitButton(long ID,C_Window *win)
{
C_Button *btn;
if(win)
{
btn=(C_Button*)win->FindControl(ID);
if(btn)
{
btn->SetState(0);
switch(btn->GetUserNumber(1))
{
case 1: // Voice Manager
if(VM)
{
VM->VMSilenceChannel(btn->GetUserNumber(0));
VM->VMResetVoice(btn->GetUserNumber(0));
F4SetStreamVolume(VM->VoiceHandle(btn->GetUserNumber(0)),PlayerOptions.GroupVol[btn->GetUserNumber(2)]);
}
break;
case 2: // UI Sound effects
gSoundMgr->StopSound(btn->GetUserNumber(0));
gSoundMgr->SetVolume(PlayerOptions.GroupVol[btn->GetUserNumber(2)]);
break;
case 4: // Sim Sounds
F4StopSound(btn->GetUserNumber(0));
F4SetVolume(btn->GetUserNumber(0),PlayerOptions.GroupVol[btn->GetUserNumber(2)]);
break;
}
btn->Refresh();
}
}
}
void InitSlider(long ID,C_Window *win)
{
double pos;
double range;
C_Slider *sldr;
if(win)
{
sldr=(C_Slider*)win->FindControl(ID);
if(sldr)
{
range = sldr->GetSliderMax()-sldr->GetSliderMin();
pos = PlayerOptions.GroupVol[sldr->GetUserNumber(2)];
pos = (pos < SND_RNG)? SND_RNG:( (pos > 0) ? 0 : pos);
pos = range - sqrt(pos * (-1.0F))*range/SQRT_SND_RNG;
sldr->Refresh();
sldr->SetSliderPos(static_cast<long>(pos));
sldr->Refresh();
}
}
}
void InitSoundSetup()
{
C_Window *win;
if (gSoundDriver) // NULL if -nosound
{
PlayerOptions.GroupVol[MASTER_SOUND_GROUP]=gSoundDriver->GetMasterVolume();
}
win=gMainHandler->FindWindow(SETUP_WIN);
if(win)
{
InitButton(ENGINE_SND,win);
InitButton(SIDEWINDER_SND,win);
InitButton(RWR_SND,win);
InitButton(COCKPIT_SND,win);
InitButton(COM1_SND,win);
InitButton(COM2_SND,win);
InitButton(SOUNDFX_SND,win);
InitButton(UISOUNDFX_SND,win);
InitSlider(ENGINE_VOLUME,win);
InitSlider(SIDEWINDER_VOLUME,win);
InitSlider(RWR_VOLUME,win);
InitSlider(COCKPIT_VOLUME,win);
InitSlider(COM1_VOLUME,win);
InitSlider(COM2_VOLUME,win);
InitSlider(SOUNDFX_VOLUME,win);
InitSlider(UISOUNDFX_VOLUME,win);
InitSlider(MUSIC_VOLUME,win);
InitSlider(MASTER_VOLUME,win);
gMusic->SetVolume(PlayerOptions.GroupVol[MUSIC_SOUND_GROUP]);
}
};
void TestButtonCB(long,short hittype,C_Base *control)
{
if(hittype != C_TYPE_LMOUSEUP)
return;
if(!control)
return;
switch(control->GetUserNumber(1))
{
case 1: // Voice Manager
if(!VM)
break;
if(control->GetState())
{
VM->VMHearChannel(control->GetUserNumber(0));
PlayRandomMessage(control->GetUserNumber(0));
}
else
{
VM->VMSilenceChannel(control->GetUserNumber(0));
VM->VMResetVoice(control->GetUserNumber(0));
}
break;
case 4: // Sim Sounds
if(control->GetState())
F4LoopSound(control->GetUserNumber(0));
else
F4StopSound(control->GetUserNumber(0));
break;
case 2: // UI Sound effects
if(control->GetState())
gSoundMgr->LoopSound(control->GetUserNumber(0));
else
gSoundMgr->StopSound(control->GetUserNumber(0));
break;
}
}
void SoundSliderCB(long,short hittype,C_Base *control)
{
double pos,range;
int volume;
if(hittype != C_TYPE_MOUSEMOVE)
return;
range = ((C_Slider *)control)->GetSliderMax()-((C_Slider *)control)->GetSliderMin();
pos = (1.0F - ((C_Slider *)control)->GetSliderPos() / range);
volume = (int)(pos * pos * (SND_RNG));
PlayerOptions.GroupVol[control->GetUserNumber(2)]=volume;
switch(control->GetUserNumber(1))
{
case 1: // Voice Manager
if(VM)
F4SetStreamVolume(VM->VoiceHandle(control->GetUserNumber(0)),volume);
break;
case 2: // UI Sound effects
gSoundMgr->SetVolume(volume);
break;
case 3: // Music
gMusic->SetVolume(volume);
break;
case 4: // Sim Sounds
F4SetVolume(control->GetUserNumber(0),volume);
break;
case 5: // Master
if (gSoundDriver)
{
gSoundDriver->SetMasterVolume(volume);
}
break;
}
}
void PlayVoicesCB(long,short,C_Base *control)
{
if(VM)
{
C_Button *button;
button = (C_Button *)control->Parent_->FindControl(COM2_SND);
if(button && button->GetState())
{
PlayRandomMessage(button->GetUserNumber(0));
}
button = (C_Button *)control->Parent_->FindControl(COM1_SND);
if(button && button->GetState())
{
PlayRandomMessage(button->GetUserNumber(0));
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -